You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
537 lines
15 KiB
537 lines
15 KiB
<?php |
|
|
|
/** |
|
* Déclaration de la barre d'outil d'édition de SPIP |
|
* |
|
* @plugin Porte Plume pour SPIP |
|
* @license GPL |
|
* @package SPIP\PortePlume\BarreOutils |
|
*/ |
|
|
|
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 - {{{ |
|
[ |
|
'id' => 'header1', |
|
'name' => _T('barreoutils:barre_intertitre'), |
|
'key' => 'H', |
|
'className' => 'outil_header1', |
|
'openWith' => "\n{{{", |
|
'closeWith' => "}}}\n", |
|
'display' => true, |
|
'selectionType' => 'line', |
|
], |
|
// Bold - {{ |
|
[ |
|
'id' => 'bold', |
|
'name' => _T('barreoutils:barre_gras'), |
|
'key' => 'B', |
|
'className' => 'outil_bold', |
|
'replaceWith' => "function(h){ return espace_si_accolade(h, '{{', '}}');}", |
|
//"openWith" => "{{", |
|
//"closeWith" => "}}", |
|
'display' => true, |
|
'selectionType' => 'word', |
|
], |
|
// Italic - { |
|
[ |
|
'id' => 'italic', |
|
'name' => _T('barreoutils:barre_italic'), |
|
'key' => 'I', |
|
'className' => 'outil_italic', |
|
'replaceWith' => "function(h){ return espace_si_accolade(h, '{', '}');}", |
|
//"openWith" => "{", |
|
//"closeWith" => "}", |
|
'display' => true, |
|
'selectionType' => 'word', |
|
], |
|
|
|
// montrer une suppression |
|
[ |
|
'id' => 'stroke_through', |
|
'name' => _T('barreoutils:barre_barre'), // :-) |
|
'className' => 'outil_stroke_through', |
|
'openWith' => '<del>', |
|
'closeWith' => '</del>', |
|
'display' => true, |
|
'selectionType' => 'word', |
|
], |
|
|
|
// listes -* |
|
[ |
|
'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 -# |
|
[ |
|
'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 |
|
[ |
|
'id' => 'desindenter', |
|
'name' => _T('barreoutils:barre_desindenter'), |
|
'className' => 'outil_desindenter', |
|
'replaceWith' => 'function(h){return outil_desindenter(h);}', |
|
'display' => true, |
|
'selectionType' => 'line', |
|
'forceMultiline' => true, |
|
], |
|
// indenter |
|
[ |
|
'id' => 'indenter', |
|
'name' => _T('barreoutils:barre_indenter'), |
|
'className' => 'outil_indenter', |
|
'replaceWith' => 'function(h){return outil_indenter(h);}', |
|
'display' => true, |
|
'selectionType' => 'line', |
|
'forceMultiline' => true, |
|
], |
|
], |
|
], |
|
// separation |
|
[ |
|
'id' => 'sepLink', // trouver un nom correct ! |
|
'separator' => '---------------', |
|
'display' => true, |
|
], |
|
// lien spip |
|
[ |
|
'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 |
|
[ |
|
'id' => 'notes', |
|
'name' => _T('barreoutils:barre_note'), |
|
'className' => 'outil_notes', |
|
'openWith' => '[[', |
|
'closeWith' => ']]', |
|
'display' => true, |
|
'selectionType' => 'word', |
|
], |
|
// separation |
|
[ |
|
'id' => 'sepGuillemets', |
|
'separator' => '---------------', |
|
'display' => true, |
|
], |
|
// quote spip |
|
// (affichee dans forum) |
|
[ |
|
'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 |
|
[ |
|
'id' => 'barre_poesie', |
|
'name' => _T('barreoutils:barre_poesie'), |
|
'className' => 'outil_poesie', |
|
'openWith' => "\n<poesie>", |
|
'closeWith' => "</poesie>\n", |
|
'display' => true, |
|
'selectionType' => 'line', |
|
], |
|
], |
|
], |
|
// guillemets |
|
[ |
|
'id' => 'guillemets', |
|
'name' => _T('barreoutils:barre_guillemets'), |
|
'className' => 'outil_guillemets', |
|
'openWith' => '«', |
|
'closeWith' => '»', |
|
'display' => true, |
|
'lang' => ['fr', 'eo', 'cpf', 'ar', 'es'], |
|
'selectionType' => 'word', |
|
'dropMenu' => [ |
|
// guillemets internes |
|
[ |
|
'id' => 'guillemets_simples', |
|
'name' => _T('barreoutils:barre_guillemets_simples'), |
|
'className' => 'outil_guillemets_simples', |
|
'openWith' => '“', |
|
'closeWith' => '”', |
|
'display' => true, |
|
'lang' => ['fr', 'eo', 'cpf', 'ar', 'es'], |
|
'selectionType' => 'word', |
|
], |
|
] |
|
], |
|
// guillemets de |
|
[ |
|
'id' => 'guillemets_de', |
|
'name' => _T('barreoutils:barre_guillemets'), |
|
'className' => 'outil_guillemets_de', |
|
'openWith' => '„', |
|
'closeWith' => '“', |
|
'display' => true, |
|
'lang' => ['bg', 'de', 'pl', 'hr', 'src'], |
|
'selectionType' => 'word', |
|
'dropMenu' => [ |
|
// guillemets de, simples |
|
[ |
|
'id' => 'guillemets_de_simples', |
|
'name' => _T('barreoutils:barre_guillemets_simples'), |
|
'className' => 'outil_guillemets_de_simples', |
|
'openWith' => '‚', |
|
'closeWith' => '‘', |
|
'display' => true, |
|
'lang' => ['bg', 'de', 'pl', 'hr', 'src'], |
|
'selectionType' => 'word', |
|
], |
|
] |
|
], |
|
|
|
// guillemets autres langues |
|
[ |
|
'id' => 'guillemets_autres', |
|
'name' => _T('barreoutils:barre_guillemets'), |
|
'className' => 'outil_guillemets_simples', |
|
'openWith' => '“', |
|
'closeWith' => '”', |
|
'display' => true, |
|
'lang_not' => ['fr', 'eo', 'cpf', 'ar', 'es', 'bg', 'de', 'pl', 'hr', 'src'], |
|
'selectionType' => 'word', |
|
'dropMenu' => [ |
|
// guillemets simples, autres langues |
|
[ |
|
'id' => 'guillemets_autres_simples', |
|
'name' => _T('barreoutils:barre_guillemets_simples'), |
|
'className' => 'outil_guillemets_uniques', |
|
'openWith' => '‘', |
|
'closeWith' => '’', |
|
'display' => true, |
|
'lang_not' => ['fr', 'eo', 'cpf', 'ar', 'es', 'bg', 'de', 'pl', 'hr', 'src'], |
|
'selectionType' => 'word', |
|
], |
|
] |
|
], |
|
// separation |
|
[ |
|
'id' => 'sepCaracteres', |
|
'separator' => '---------------', |
|
'display' => true, |
|
], |
|
// icones clavier |
|
[ |
|
'id' => 'grpCaracteres', |
|
'name' => _T('barreoutils:barre_inserer_caracteres'), |
|
'className' => 'outil_caracteres', |
|
'display' => true, |
|
'dropMenu' => [ |
|
// A majuscule accent grave |
|
[ |
|
'id' => 'A_grave', |
|
'name' => _T('barreoutils:barre_a_accent_grave'), |
|
'className' => 'outil_a_maj_grave', |
|
'replaceWith' => 'À', |
|
'display' => true, |
|
'lang' => ['fr', 'eo', 'cpf'], |
|
], |
|
// E majuscule accent aigu |
|
[ |
|
'id' => 'E_aigu', |
|
'name' => _T('barreoutils:barre_e_accent_aigu'), |
|
'className' => 'outil_e_maj_aigu', |
|
'replaceWith' => 'É', |
|
'display' => true, |
|
'lang' => ['fr', 'eo', 'cpf'], |
|
], |
|
// E majuscule accent grave |
|
[ |
|
'id' => 'E_grave', |
|
'name' => _T('barreoutils:barre_e_accent_grave'), |
|
'className' => 'outil_e_maj_grave', |
|
'replaceWith' => 'È', |
|
'display' => true, |
|
'lang' => ['fr', 'eo', 'cpf'], |
|
], |
|
// e dans le a |
|
[ |
|
'id' => 'aelig', |
|
'name' => _T('barreoutils:barre_ea'), |
|
'className' => 'outil_aelig', |
|
'replaceWith' => 'æ', |
|
'display' => true, |
|
'lang' => ['fr', 'eo', 'cpf'], |
|
], |
|
// e dans le a majuscule |
|
[ |
|
'id' => 'AElig', |
|
'name' => _T('barreoutils:barre_ea_maj'), |
|
'className' => 'outil_aelig_maj', |
|
'replaceWith' => 'Æ', |
|
'display' => true, |
|
'lang' => ['fr', 'eo', 'cpf'], |
|
], |
|
// oe |
|
[ |
|
'id' => 'oe', |
|
'name' => _T('barreoutils:barre_eo'), |
|
'className' => 'outil_oe', |
|
'replaceWith' => 'œ', |
|
'display' => true, |
|
'lang' => ['fr'], |
|
], |
|
// OE |
|
[ |
|
'id' => 'OE', |
|
'name' => _T('barreoutils:barre_eo_maj'), |
|
'className' => 'outil_oe_maj', |
|
'replaceWith' => 'Œ', |
|
'display' => true, |
|
'lang' => ['fr'], |
|
], |
|
// c cedille majuscule |
|
[ |
|
'id' => 'Ccedil', |
|
'name' => _T('barreoutils:barre_c_cedille_maj'), |
|
'className' => 'outil_ccedil_maj', |
|
'replaceWith' => 'Ç', |
|
'display' => true, |
|
'lang' => ['fr', 'eo', 'cpf'], |
|
], |
|
// Transformation en majuscule |
|
[ |
|
'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 |
|
[ |
|
'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. |
|
[ |
|
'id' => 'sepCode', |
|
'separator' => '---------------', |
|
'display' => true, |
|
], |
|
[ |
|
// groupe code et bouton <code> |
|
'id' => 'grpCode', |
|
'name' => _T('barreoutils:barre_inserer_code'), |
|
'className' => 'outil_code', |
|
'openWith' => '<code>', |
|
'closeWith' => '</code>', |
|
'display' => true, |
|
'dropMenu' => [ |
|
// bouton <cadre> |
|
[ |
|
'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; |
|
} |
|
|
|
// 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; |
|
} |
|
|
|
// 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; |
|
} |
|
", |
|
]); |
|
|
|
$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' |
|
]; |
|
}
|
|
|