You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
porte_plume/barre_outils/edition.php

538 lines
15 KiB
PHTML

<?php
/**
* Déclaration de la barre d'outil d'édition de SPIP
*
* @plugin Porte Plume pour SPIP
* @license GPL
* @package SPIP\PortePlume\BarreOutils
*/
7 years ago
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Définition de la barre 'edition' pour markitup
*
* @return Barre_outils La barre d'outil
*/
function barre_outils_edition() {
$set = new Barre_outils([
'nameSpace' => 'edition',
#'previewAutoRefresh'=> true,
#'previewParserPath' => url_absolue(generer_url_public('preview')),
'onShiftEnter' => ['keepDefault' => false, 'replaceWith' => "\n_ "],
'onCtrlEnter' => ['keepDefault' => false, 'replaceWith' => "\n\n"],
// garder les listes si on appuie sur entree
'onEnter' => ['keepDefault' => false, 'selectionType' => 'return', 'replaceWith' => "\n"],
// Utile quand on saisi du code, mais pas accessible !
#'onTab' => array('keepDefault'=>false, 'replaceWith'=>"\t"),
'markupSet' => [
// H1 - {{{
[
7 years ago
'id' => 'header1',
'name' => _T('barreoutils:barre_intertitre'),
'key' => 'H',
'className' => 'outil_header1',
'openWith' => "\n{{{",
'closeWith' => "}}}\n",
'display' => true,
'selectionType' => 'line',
],
// Bold - {{
[
7 years ago
'id' => 'bold',
'name' => _T('barreoutils:barre_gras'),
'key' => 'B',
'className' => 'outil_bold',
'replaceWith' => "function(h){ return espace_si_accolade(h, '{{', '}}');}",
//"openWith" => "{{",
//"closeWith" => "}}",
7 years ago
'display' => true,
'selectionType' => 'word',
],
// Italic - {
[
7 years ago
'id' => 'italic',
'name' => _T('barreoutils:barre_italic'),
'key' => 'I',
'className' => 'outil_italic',
'replaceWith' => "function(h){ return espace_si_accolade(h, '{', '}');}",
//"openWith" => "{",
//"closeWith" => "}",
7 years ago
'display' => true,
'selectionType' => 'word',
],
// montrer une suppression
[
7 years ago
'id' => 'stroke_through',
'name' => _T('barreoutils:barre_barre'), // :-)
'className' => 'outil_stroke_through',
'openWith' => '<del>',
'closeWith' => '</del>',
'display' => true,
'selectionType' => 'word',
],
// listes -*
[
7 years ago
'id' => 'liste_ul',
'name' => _T('barreoutils:barre_liste_ul'),
'className' => 'outil_liste_ul',
'replaceWith' => "function(h){ return outil_liste(h, '*');}",
'display' => true,
'selectionType' => 'line',
'forceMultiline' => true,
'dropMenu' => [
// liste -#
[
7 years ago
'id' => 'liste_ol',
'name' => _T('barreoutils:barre_liste_ol'),
'className' => 'outil_liste_ol',
'replaceWith' => "function(h){ return outil_liste(h, '#');}",
'display' => true,
'selectionType' => 'line',
'forceMultiline' => true,
],
// desindenter
[
7 years ago
'id' => 'desindenter',
'name' => _T('barreoutils:barre_desindenter'),
'className' => 'outil_desindenter',
'replaceWith' => 'function(h){return outil_desindenter(h);}',
'display' => true,
'selectionType' => 'line',
'forceMultiline' => true,
],
// indenter
[
7 years ago
'id' => 'indenter',
'name' => _T('barreoutils:barre_indenter'),
'className' => 'outil_indenter',
'replaceWith' => 'function(h){return outil_indenter(h);}',
'display' => true,
'selectionType' => 'line',
'forceMultiline' => true,
],
],
],
// separation
[
7 years ago
'id' => 'sepLink', // trouver un nom correct !
'separator' => '---------------',
'display' => true,
],
// lien spip
[
7 years ago
'id' => 'link',
'name' => _T('barreoutils:barre_lien'),
'key' => 'L',
'className' => 'outil_link',
'openWith' => '[',
'closeWith' => '->[![' . _T('barreoutils:barre_lien_input') . ']!]]',
'display' => true,
],
// note en bas de page spip
[
7 years ago
'id' => 'notes',
'name' => _T('barreoutils:barre_note'),
'className' => 'outil_notes',
'openWith' => '[[',
'closeWith' => ']]',
'display' => true,
'selectionType' => 'word',
],
// separation
[
7 years ago
'id' => 'sepGuillemets',
'separator' => '---------------',
'display' => true,
],
// quote spip
// (affichee dans forum)
[
7 years ago
'id' => 'quote',
'name' => _T('barreoutils:barre_quote'),
'key' => 'Q',
'className' => 'outil_quote',
'openWith' => "\n<quote>",
'closeWith' => "</quote>\n",
'display' => true,
'selectionType' => 'word',
'dropMenu' => [
// poesie spip
[
7 years ago
'id' => 'barre_poesie',
'name' => _T('barreoutils:barre_poesie'),
'className' => 'outil_poesie',
'openWith' => "\n&lt;poesie&gt;",
'closeWith' => "&lt;/poesie&gt;\n",
'display' => true,
'selectionType' => 'line',
],
],
],
// guillemets
[
7 years ago
'id' => 'guillemets',
'name' => _T('barreoutils:barre_guillemets'),
'className' => 'outil_guillemets',
'openWith' => '&laquo;',
'closeWith' => '&raquo;',
'display' => true,
'lang' => ['fr', 'eo', 'cpf', 'ar', 'es'],
7 years ago
'selectionType' => 'word',
'dropMenu' => [
// guillemets internes
[
7 years ago
'id' => 'guillemets_simples',
'name' => _T('barreoutils:barre_guillemets_simples'),
'className' => 'outil_guillemets_simples',
'openWith' => '&ldquo;',
'closeWith' => '&rdquo;',
'display' => true,
'lang' => ['fr', 'eo', 'cpf', 'ar', 'es'],
7 years ago
'selectionType' => 'word',
],
]
],
// guillemets de
[
7 years ago
'id' => 'guillemets_de',
'name' => _T('barreoutils:barre_guillemets'),
'className' => 'outil_guillemets_de',
'openWith' => '&bdquo;',
'closeWith' => '&ldquo;',
'display' => true,
'lang' => ['bg', 'de', 'pl', 'hr', 'src'],
7 years ago
'selectionType' => 'word',
'dropMenu' => [
// guillemets de, simples
[
7 years ago
'id' => 'guillemets_de_simples',
'name' => _T('barreoutils:barre_guillemets_simples'),
'className' => 'outil_guillemets_de_simples',
'openWith' => '&sbquo;',
'closeWith' => '&lsquo;',
'display' => true,
'lang' => ['bg', 'de', 'pl', 'hr', 'src'],
7 years ago
'selectionType' => 'word',
],
]
],
// guillemets autres langues
[
7 years ago
'id' => 'guillemets_autres',
'name' => _T('barreoutils:barre_guillemets'),
'className' => 'outil_guillemets_simples',
'openWith' => '&ldquo;',
'closeWith' => '&rdquo;',
'display' => true,
'lang_not' => ['fr', 'eo', 'cpf', 'ar', 'es', 'bg', 'de', 'pl', 'hr', 'src'],
7 years ago
'selectionType' => 'word',
'dropMenu' => [
// guillemets simples, autres langues
[
7 years ago
'id' => 'guillemets_autres_simples',
'name' => _T('barreoutils:barre_guillemets_simples'),
'className' => 'outil_guillemets_uniques',
'openWith' => '&lsquo;',
'closeWith' => '&rsquo;',
'display' => true,
'lang_not' => ['fr', 'eo', 'cpf', 'ar', 'es', 'bg', 'de', 'pl', 'hr', 'src'],
7 years ago
'selectionType' => 'word',
],
]
],
// separation
[
7 years ago
'id' => 'sepCaracteres',
'separator' => '---------------',
'display' => true,
],
// icones clavier
[
7 years ago
'id' => 'grpCaracteres',
'name' => _T('barreoutils:barre_inserer_caracteres'),
'className' => 'outil_caracteres',
'display' => true,
'dropMenu' => [
// A majuscule accent grave
[
7 years ago
'id' => 'A_grave',
'name' => _T('barreoutils:barre_a_accent_grave'),
'className' => 'outil_a_maj_grave',
'replaceWith' => '&Agrave;',
'display' => true,
'lang' => ['fr', 'eo', 'cpf'],
],
// E majuscule accent aigu
[
7 years ago
'id' => 'E_aigu',
'name' => _T('barreoutils:barre_e_accent_aigu'),
'className' => 'outil_e_maj_aigu',
'replaceWith' => '&Eacute;',
'display' => true,
'lang' => ['fr', 'eo', 'cpf'],
],
// E majuscule accent grave
[
7 years ago
'id' => 'E_grave',
'name' => _T('barreoutils:barre_e_accent_grave'),
'className' => 'outil_e_maj_grave',
'replaceWith' => '&Egrave;',
'display' => true,
'lang' => ['fr', 'eo', 'cpf'],
],
// e dans le a
[
7 years ago
'id' => 'aelig',
'name' => _T('barreoutils:barre_ea'),
'className' => 'outil_aelig',
'replaceWith' => '&aelig;',
'display' => true,
'lang' => ['fr', 'eo', 'cpf'],
],
// e dans le a majuscule
[
7 years ago
'id' => 'AElig',
'name' => _T('barreoutils:barre_ea_maj'),
'className' => 'outil_aelig_maj',
'replaceWith' => '&AElig;',
'display' => true,
'lang' => ['fr', 'eo', 'cpf'],
],
7 years ago
// oe
[
7 years ago
'id' => 'oe',
'name' => _T('barreoutils:barre_eo'),
'className' => 'outil_oe',
'replaceWith' => '&oelig;',
'display' => true,
'lang' => ['fr'],
],
7 years ago
// OE
[
7 years ago
'id' => 'OE',
'name' => _T('barreoutils:barre_eo_maj'),
'className' => 'outil_oe_maj',
'replaceWith' => '&OElig;',
'display' => true,
'lang' => ['fr'],
],
// c cedille majuscule
[
7 years ago
'id' => 'Ccedil',
'name' => _T('barreoutils:barre_c_cedille_maj'),
'className' => 'outil_ccedil_maj',
'replaceWith' => '&Ccedil;',
'display' => true,
'lang' => ['fr', 'eo', 'cpf'],
],
// Transformation en majuscule
[
7 years ago
'id' => 'uppercase',
'name' => _T('barreoutils:barre_gestion_cr_changercassemajuscules'),
'className' => 'outil_uppercase',
'replaceWith' => 'function(markitup) { return markitup.selection.toUpperCase() }',
'display' => true,
'lang' => ['fr', 'en'],
],
// Transformation en minuscule
[
7 years ago
'id' => 'lowercase',
'name' => _T('barreoutils:barre_gestion_cr_changercasseminuscules'),
'className' => 'outil_lowercase',
'replaceWith' => 'function(markitup) { return markitup.selection.toLowerCase() }',
'display' => true,
'lang' => ['fr', 'en'],
],
],
],
// Groupe de Codes informatiques.
[
7 years ago
'id' => 'sepCode',
'separator' => '---------------',
'display' => true,
],
[
// groupe code et bouton <code>
7 years ago
'id' => 'grpCode',
'name' => _T('barreoutils:barre_inserer_code'),
'className' => 'outil_code',
'openWith' => '<code>',
'closeWith' => '</code>',
'display' => true,
'dropMenu' => [
// bouton <cadre>
[
7 years ago
'id' => 'cadre',
'name' => _T('barreoutils:barre_inserer_cadre'),
'className' => 'outil_cadre',
'openWith' => "<cadre>\n",
'closeWith' => "\n</cadre>",
'display' => true,
],
],
],
/* inutile (origine de markitup et non de spip)
// separation
array(
"id" => "sepPreview", // trouver un nom correct !
"separator" => "---------------",
"display" => true,
),
// clean
array(
"id" => 'clean',
"name" => _T('barreoutils:barre_clean'),
"className" => "outil_clean",
"replaceWith" => 'function(markitup) { return markitup.selection.replace(/<(.*?)>/g, "") }',
"display" => true,
),
// preview
array(
"id" => 'preview',
"name" => _T('barreoutils:barre_preview'),
"className" => "outil_preview",
"call" => "preview",
"display" => true,
),
*/
],
'functions' => "
// remplace ou cree -* ou -** ou -# ou -##
function outil_liste(h, c) {
if ((s = h.selection) && (r = s.match(/^-([*#]+) (.*)\$/))) {
r[1] = r[1].replace(/[#*]/g, c);
s = '-'+r[1]+' '+r[2];
} else {
s = '-' + c + ' '+s;
}
return s;
}
// indente des -* ou -#
function outil_indenter(h) {
if (s = h.selection) {
if (s.substr(0,2)=='-*') {
s = '-**' + s.substr(2);
} else if (s.substr(0,2)=='-#') {
s = '-##' + s.substr(2);
} else {
s = '-* ' + s;
}
}
return s;
}
7 years ago
// desindente des -* ou -** ou -# ou -##
function outil_desindenter(h){
if (s = h.selection) {
if (s.substr(0,3)=='-**') {
s = '-*' + s.substr(3);
} else if (s.substr(0,3)=='-* ') {
s = s.substr(3);
} else if (s.substr(0,3)=='-##') {
s = '-#' + s.substr(3);
} else if (s.substr(0,3)=='-# ') {
s = s.substr(3);
}
}
return s;
}
7 years ago
// ajouter un espace avant, apres un {qqc} pour ne pas que
// gras {{}} suivi de italique {} donnent {{{}}}, mais { {{}} }
function espace_si_accolade(h, openWith, closeWith){
if (s = h.selection) {
// accolade dans la selection
if (s.charAt(0)=='{') {
return openWith + ' ' + s + ' ' + closeWith;
}
// accolade avant la selection
else if (c = h.textarea.selectionStart) {
if (h.textarea.value.charAt(c-1) == '{') {
return ' ' + openWith + s + closeWith + ' ';
}
}
}
return openWith + s + closeWith;
7 years ago
}
",
]);
$set->cacher([
'stroke_through',
'clean',
'preview',
]);
return $set;
}
/**
* Définitions des liens entre css et icones
*
* @return array
* Couples identifiant de bouton => nom de l'image (ou tableau nom, position haut, position bas)
*/
function barre_outils_edition_icones() {
return [
//'outil_header1' => 'text_heading_1.png',
'outil_header1' => ['spt-v1.svg', '-2px -2px'], //'intertitre.png'
'outil_bold' => ['spt-v1.svg', '-2px -22px'], //'text_bold.png'
'outil_italic' => ['spt-v1.svg', '-2px -42px'], //'text_italic.png'
'outil_stroke_through' => ['spt-v1.svg', '-2px -62px'], //'text_strikethrough.png'
'outil_liste_ul' => ['spt-v1.svg', '-2px -442px'], //'text_list_bullets.png'
'outil_liste_ol' => ['spt-v1.svg', '-2px -462px'], //'text_list_numbers.png'
'outil_indenter' => ['spt-v1.svg', '-2px -482px'], //'text_indent.png'
'outil_desindenter' => ['spt-v1.svg', '-2px -502px'], //'text_indent_remove.png'
//'outil_quote' => 'text_indent.png',
'outil_quote' => ['spt-v1.svg', '-2px -302px'], //'quote.png'
'outil_poesie' => ['spt-v1.svg', '-2px -322px'], //'poesie.png'
//'outil_link' => 'world_link.png',
'outil_link' => ['spt-v1.svg', '-2px -342px'], //'lien.png'
'outil_notes' => ['spt-v1.svg', '-2px -362px'], //'notes.png'
'outil_guillemets' => ['spt-v1.svg', '-2px -522px'], //'guillemets.png'
'outil_guillemets_simples' => ['spt-v1.svg', '-2px -542px'], //'guillemets-simples.png'
'outil_guillemets_de' => ['spt-v1.svg', '-2px -562px'], //'guillemets-de.png'
'outil_guillemets_de_simples' => ['spt-v1.svg', '-2px -582px'], //'guillemets-uniques-de.png'
'outil_guillemets_uniques' => ['spt-v1.svg', '-2px -602px'], //'guillemets-uniques.png'
'outil_caracteres' => ['spt-v1.svg', '-2px -282px'], //'keyboard.png'
'outil_a_maj_grave' => ['spt-v1.svg', '-2px -162px'], //'agrave-maj.png'
'outil_e_maj_aigu' => ['spt-v1.svg', '-2px -202px'], //'eacute-maj.png'
'outil_e_maj_grave' => ['spt-v1.svg', '-2px -222px'], //'eagrave-maj.png'
'outil_aelig' => ['spt-v1.svg', '-2px -142px'], //'aelig.png'
'outil_aelig_maj' => ['spt-v1.svg', '-2px -122px'], //'aelig-maj.png'
'outil_oe' => ['spt-v1.svg', '-2px -262px'], //'oelig.png'
'outil_oe_maj' => ['spt-v1.svg', '-2px -242px'], //'oelig-maj.png'
'outil_ccedil_maj' => ['spt-v1.svg', '-2px -182px'], //'ccedil-maj.png'
'outil_uppercase' => ['spt-v1.svg', '-2px -82px'], //'text_uppercase.png'
'outil_lowercase' => ['spt-v1.svg', '-2px -102px'], //'text_lowercase.png'
'outil_code' => ['spt-v1.svg', '-2px -382px'],
'outil_cadre' => ['spt-v1.svg', '-2px -402px'],
'outil_clean' => ['spt-v1.svg', '-2px -422px'], //'clean.png'
'outil_preview' => ['spt-v1.svg', '-2px -622px'], //'eye.png'
];
}