source: spip-zone/_squelettes_/escal/branche_V3/barre_outils/edition.php @ 87170

Last change on this file since 87170 was 87170, checked in by jcvilleneuve@…, 5 years ago

EscalV3 : ajout d'un icone pour centrer le texte + passage de "p" en "div" des ajouts afin de corriger le bug en cas de liste dans un des blocs aide, info, avertissement ou important

File size: 18.9 KB
Line 
1<?php
2/**
3 * Déclaration de la barre d'outil d'édition de SPIP
4 *
5 * @plugin Porte Plume pour SPIP
6 * @license GPL
7 * @package SPIP\PortePlume\BarreOutils
8 */
9if (!defined("_ECRIRE_INC_VERSION")) return;
10
11
12/**
13 * Définition de la barre 'edition' pour markitup
14 *
15 * @return Barre_outils La barre d'outil
16 */
17function barre_outils_edition(){
18        $set = new Barre_outils(array(
19                'nameSpace'         => 'edition',
20                #'previewAutoRefresh'=> true,
21                #'previewParserPath' => url_absolue(generer_url_public('preview')),
22                'onShiftEnter'      => array('keepDefault'=>false, 'replaceWith'=>"\n_ "),
23                'onCtrlEnter'       => array('keepDefault'=>false, 'replaceWith'=>"\n\n"),
24                // garder les listes si on appuie sur entree
25                'onEnter'           => array('keepDefault'=>false, 'selectionType'=>'return', 'replaceWith'=>"\n"),
26                // Utile quand on saisi du code, mais pas accessible !
27                #'onTab'             => array('keepDefault'=>false, 'replaceWith'=>"\t"),
28                'markupSet'         => array(
29                        // H1 - {{{
30                        array(
31                                "id"        => 'header1', 
32                                "name"      => _T('barreoutils:barre_intertitre'), 
33                                "key"       => "H", 
34                                "className" => "outil_header1", 
35                                "openWith" => "\n{{{", 
36                                "closeWith" => "}}}\n",
37                                "display"   => true,
38                                "selectionType" => "line",
39                        ),
40                        // Bold - {{
41                        array(
42                                "id"        => 'bold',
43                                "name"      => _T('barreoutils:barre_gras'), 
44                                "key"       => "B", 
45                                "className" => "outil_bold", 
46                                "replaceWith" => "function(h){ return espace_si_accolade(h, '{{', '}}');}",
47                                //"openWith" => "{{",
48                                //"closeWith" => "}}",
49                                "display"   => true,
50                                "selectionType" => "word",
51                        ),
52                        // Italic - {
53                        array(
54                                "id"        => 'italic',
55                                "name"      => _T('barreoutils:barre_italic'), 
56                                "key"       => "I", 
57                                "className" => "outil_italic", 
58                                "replaceWith" => "function(h){ return espace_si_accolade(h, '{', '}');}",
59                                //"openWith" => "{",
60                                //"closeWith" => "}",
61                                "display"   => true,
62                                "selectionType" => "word",
63                        ),
64                       
65                        // montrer une suppression
66                        array(
67                                "id"        => 'stroke_through',
68                                "name"      => _T('barreoutils:barre_barre'), // :-)
69                                "className" => "outil_stroke_through", 
70                                "openWith" => "<del>", 
71                                "closeWith" => "</del>",
72                                "display"   => true,
73                                "selectionType" => "word",
74                        ),
75                       
76                        // listes -*
77                        array(
78                                "id"        => 'liste_ul',
79                                "name"      => _T('barreoutils:barre_liste_ul'), 
80                                "className" => "outil_liste_ul", 
81                                "replaceWith" => "function(h){ return outil_liste(h, '*');}", 
82                                "display"   => true,
83                                "selectionType" => "line",
84                                "forceMultiline" => true,
85                                "dropMenu"    => array(
86                                        // liste -#
87                                        array(
88                                                "id"        => 'liste_ol',
89                                                "name"      => _T('barreoutils:barre_liste_ol'), 
90                                                "className" => "outil_liste_ol", 
91                                                "replaceWith" => "function(h){ return outil_liste(h, '#');}", 
92                                                "display"   => true,
93                                                "selectionType" => "line",
94                                                "forceMultiline" => true,
95                                        ),
96                                        // desindenter
97                                        array(
98                                                "id"        => 'desindenter',
99                                                "name"      => _T('barreoutils:barre_desindenter'), 
100                                                "className" => "outil_desindenter", 
101                                                "replaceWith" => "function(h){return outil_desindenter(h);}", 
102                                                "display"   => true,
103                                                "selectionType" => "line",
104                                                "forceMultiline" => true,
105                                        ),
106                                        // indenter
107                                        array(
108                                                "id"        => 'indenter',
109                                                "name"      => _T('barreoutils:barre_indenter'), 
110                                                "className" => "outil_indenter", 
111                                                "replaceWith" => "function(h){return outil_indenter(h);}", 
112                                                "display"   => true,
113                                                "selectionType" => "line",
114                                                "forceMultiline" => true,
115                                        ),
116                                ),
117                        ),
118
119
120                        // separation
121                        array(
122                                "id" => "sepLink", // trouver un nom correct !
123                                "separator" => "---------------",
124                                "display"   => true,
125                        ),
126                        // lien spip
127                        array(
128                                "id"          => 'link',
129                                "name"        => _T('barreoutils:barre_lien'),
130                                "key"         => "L", 
131                                "className"   => "outil_link", 
132                                "openWith"    => "[", 
133                                "closeWith"   => "->[!["._T('barreoutils:barre_lien_input')."]!]]",
134                                "display"     => true,
135                        ),
136                        // note en bas de page spip
137                        array(
138                                "id"          => 'notes',
139                                "name"        => _T('barreoutils:barre_note'),
140                                "className"   => "outil_notes", 
141                                "openWith"    => "[[", 
142                                "closeWith"   => "]]",
143                                "display"     => true,
144                                "selectionType" => "word",
145                        ),
146                       
147                       
148                        // separation
149                        array(
150                                "id" => "sepGuillemets",
151                                "separator" => "---------------",
152                                "display"   => true,
153                        ),
154                       
155                        // quote spip
156                        // (affichee dans forum)
157                        array(
158                                "id"          => 'quote',
159                                "name"        => _T('barreoutils:barre_quote'),
160                                "key"         => "Q", 
161                                "className"   => "outil_quote", 
162                                "openWith"    => "\n<quote>", 
163                                "closeWith"   => "</quote>\n",
164                                "display"     => true,
165                                "selectionType" => "word",
166                                "dropMenu"    => array(
167                                        // poesie spip
168                                        array(
169                                                "id"          => 'barre_poesie',
170                                                "name"        => _T('barreoutils:barre_poesie'),
171                                                "className"   => "outil_poesie", 
172                                                "openWith"    => "\n&lt;poesie&gt;", 
173                                                "closeWith"   => "&lt;/poesie&gt;\n",
174                                                "display"     => true,
175                                                "selectionType" => "line",
176                                        ),
177                                ),
178                        ),
179                        // guillemets
180                        array(
181                                "id"          => 'guillemets',
182                                "name"        => _T('barreoutils:barre_guillemets'),
183                                "className"   => "outil_guillemets", 
184                                "openWith"    => "&laquo;", 
185                                "closeWith"   => "&raquo;",
186                                "display"     => true,
187                                "lang"        => array('fr','eo','cpf','ar','es'),
188                                "selectionType" => "word",
189                                "dropMenu"    => array(
190                                        // guillemets internes
191                                        array(
192                                                "id"          => 'guillemets_simples',
193                                                "name"        => _T('barreoutils:barre_guillemets_simples'),
194                                                "className"   => "outil_guillemets_simples", 
195                                                "openWith"    => "&ldquo;", 
196                                                "closeWith"   => "&rdquo;",
197                                                "display"     => true,
198                                                "lang"        => array('fr','eo','cpf','ar','es'),
199                                                "selectionType" => "word",
200                                        ),
201                                )
202                        ),
203
204                        // guillemets de
205                        array(
206                                "id"          => 'guillemets_de',
207                                "name"        => _T('barreoutils:barre_guillemets'),
208                                "className"   => "outil_guillemets_de", 
209                                "openWith"    => "&bdquo;", 
210                                "closeWith"   => "&ldquo;",
211                                "display"     => true,
212                                "lang"        => array('bg','de','pl','hr','src'),
213                                "selectionType" => "word",
214                                "dropMenu"    => array(
215                                        // guillemets de, simples
216                                        array(
217                                                "id"          => 'guillemets_de_simples',
218                                                "name"        => _T('barreoutils:barre_guillemets_simples'),
219                                                "className"   => "outil_guillemets_de_simples", 
220                                                "openWith"    => "&sbquo;", 
221                                                "closeWith"   => "&lsquo;",
222                                                "display"     => true,
223                                                "lang"        => array('bg','de','pl','hr','src'),
224                                                "selectionType" => "word",
225                                        ),
226                                )
227                        ),
228
229                        // guillemets autres langues
230                        array(
231                                "id"          => 'guillemets_autres',
232                                "name"        => _T('barreoutils:barre_guillemets'),
233                                "className"   => "outil_guillemets_simples", 
234                                "openWith"    => "&ldquo;", 
235                                "closeWith"   => "&rdquo;",
236                                "display"     => true,
237                                "lang_not"    => array('fr','eo','cpf','ar','es','bg','de','pl','hr','src'),
238                                "selectionType" => "word",
239                                "dropMenu"    => array(
240                                        // guillemets simples, autres langues
241                                        array(
242                                                "id"          => 'guillemets_autres_simples',
243                                                "name"        => _T('barreoutils:barre_guillemets_simples'),
244                                                "className"   => "outil_guillemets_uniques", 
245                                                "openWith"    => "&lsquo;", 
246                                                "closeWith"   => "&rsquo;",
247                                                "display"     => true,
248                                                "lang_not"    => array('fr','eo','cpf','ar','es','bg','de','pl','hr','src'),
249                                                "selectionType" => "word",
250                                        ),
251                                )
252                        ),
253
254
255                        // separation
256                        array(
257                                "id" => "sepCaracteres",
258                                "separator" => "---------------",
259                                "display"   => true,
260                        ),
261                        // icones clavier
262                        array(
263                                "id"          => 'grpCaracteres',
264                                "name"        => _T('barreoutils:barre_inserer_caracteres'),
265                                "className"   => 'outil_caracteres',
266                                "display"     => true,
267                               
268                                "dropMenu"    => array(
269                                        // A majuscule accent grave
270                                        array(
271                                                "id"          => 'A_grave',
272                                                "name"        => _T('barreoutils:barre_a_accent_grave'),
273                                                "className"   => "outil_a_maj_grave", 
274                                                "replaceWith"   => "&Agrave;",
275                                                "display"     => true,
276                                                "lang"    => array('fr','eo','cpf'),
277                                        ),
278                                        // E majuscule accent aigu
279                                        array(
280                                                "id"          => 'E_aigu',
281                                                "name"        => _T('barreoutils:barre_e_accent_aigu'),
282                                                "className"   => "outil_e_maj_aigu", 
283                                                "replaceWith"   => "&Eacute;",
284                                                "display"     => true,
285                                                "lang"    => array('fr','eo','cpf'),
286                                        ),
287                                        // E majuscule accent grave
288                                        array(
289                                                "id"          => 'E_grave',
290                                                "name"        => _T('barreoutils:barre_e_accent_grave'),
291                                                "className"   => "outil_e_maj_grave",
292                                                "replaceWith" => "&Egrave;",
293                                                "display"     => true,
294                                                "lang"        => array('fr','eo','cpf'),
295                                        ),
296                                        // e dans le a
297                                        array(
298                                                "id"          => 'aelig',
299                                                "name"        => _T('barreoutils:barre_ea'),
300                                                "className"   => "outil_aelig",
301                                                "replaceWith" => "&aelig;",
302                                                "display"     => true,
303                                                "lang"        => array('fr','eo','cpf'),
304                                        ),
305                                        // e dans le a majuscule
306                                        array(
307                                                "id"          => 'AElig',
308                                                "name"        => _T('barreoutils:barre_ea_maj'),
309                                                "className"   => "outil_aelig_maj",
310                                                "replaceWith" => "&AElig;",
311                                                "display"     => true,
312                                                "lang"        => array('fr','eo','cpf'),
313                                        ),
314                                        // oe
315                                        array(
316                                                "id"          => 'oe',
317                                                "name"        => _T('barreoutils:barre_eo'),
318                                                "className"   => "outil_oe", 
319                                                "replaceWith"   => "&oelig;",
320                                                "display"     => true,
321                                                "lang"    => array('fr'),
322                                        ),
323                                        // OE
324                                        array(
325                                                "id"          => 'OE',
326                                                "name"        => _T('barreoutils:barre_eo_maj'),
327                                                "className"   => "outil_oe_maj", 
328                                                "replaceWith"   => "&OElig;",
329                                                "display"     => true,
330                                                "lang"    => array('fr'),
331                                        ),
332                                        // c cedille majuscule
333                                        array(
334                                                "id"          => 'Ccedil',
335                                                "name"        => _T('barreoutils:barre_c_cedille_maj'),
336                                                "className"   => "outil_ccedil_maj",
337                                                "replaceWith" => "&Ccedil;",
338                                                "display"     => true,
339                                                "lang"        => array('fr','eo','cpf'),
340                                        ),
341                                        // Transformation en majuscule
342                                        array(
343                                                "id"          => 'uppercase',
344                                                "name"        => _T('barreoutils:barre_gestion_cr_changercassemajuscules'),
345                                                "className"   => "outil_uppercase",
346                                                "replaceWith" => 'function(markitup) { return markitup.selection.toUpperCase() }',
347                                                "display"     => true,
348                                                "lang"        => array('fr','en'),
349                                        ),
350                                        // Transformation en minuscule
351                                        array(
352                                                "id"          => 'lowercase',
353                                                "name"        => _T('barreoutils:barre_gestion_cr_changercasseminuscules'),
354                                                "className"   => "outil_lowercase",
355                                                "replaceWith" => 'function(markitup) { return markitup.selection.toLowerCase() }',
356                                                "display"     => true,
357                                                "lang"        => array('fr','en'),
358                                        ),
359                                ),
360                        ),
361
362                        // Groupe de Codes informatiques.
363                        array(
364                                        "id" => "sepCode",
365                                        "separator" => "---------------",
366                                        "display"   => true,
367                        ),
368                        array(
369                                        // groupe code et bouton <code>
370                                        "id"          => 'grpCode',
371                                        "name"        => _T('barreoutils:barre_inserer_code'),
372                                        "className"   => 'outil_code',
373                                        "openWith" => "<code>",
374                                        "closeWith" => "</code>",
375                                        "display"     => true,
376                                        "dropMenu"    => array(
377                                                // bouton <cadre>
378                                                array(
379                                                        "id"          => 'cadre',
380                                                        "name"        => _T('barreoutils:barre_inserer_cadre'),
381                                                        "className"   => 'outil_cadre', 
382                                                        "openWith" => "<cadre>\n",
383                                                        "closeWith" => "\n</cadre>",
384                                                        "display"     => true,
385                                                ),
386                                        ),
387                        ),
388
389                        // ajouts JC
390            // naide
391                        array(
392                                "id"          => 'escal_aide',
393                                "name"        => 'apporter <aide>une aide</aide>',
394                                "key"         => "", 
395                                "className"   => "outil_escal_aide", 
396                                "openWith"    => "\n<aide>",
397                                "closeWith"   => "</aide>\n",
398                                "display"     => true,
399                                "selectionType" => "word",
400                                "dropMenu"    => array(
401                                        // important
402                                        array(
403                                                "id"          => 'escal_important',
404                                        "name"        => 'une <important>remarque importante</important>',
405                                        "key"         => "",
406                                        "className"   => "outil_escal_important",
407                                        "openWith"    => "\n<important>",
408                                        "closeWith"   => "</important>\n",
409                                        "display"     => true,
410                                        "selectionType" => "word",
411                                        ),
412                                        // avertissement
413                                        array(
414                                                "id"          => 'escal_avertissement',
415                                        "name"        => 'une <avertissement>remarque moyennement importante</avertissement>',
416                                        "key"         => "", 
417                                        "className"   => "outil_escal_avertissement", 
418                                        "openWith"    => "\n<avertissement>", 
419                                        "closeWith"   => "</avertissement>\n",
420                                        "display"     => true,
421                                        "selectionType" => "word",
422                                        ),
423                                        // info
424                                        array(
425                                                "id"          => 'escal_info',
426                                        "name"        => 'une <info>information</info>',
427                                        "key"         => "", 
428                                        "className"   => "outil_escal_info", 
429                                        "openWith"    => "\n<info>", 
430                                        "closeWith"   => "</info>\n",
431                                        "display"     => true,
432                                        "selectionType" => "word",
433                                        ),
434                    // info
435                                        array(
436                                                "id"          => 'escal_centrer',
437                                        "name"        => '[|centrer|] le paragraphe',
438                                        "key"         => "",
439                                        "className"   => "outil_escal_centrer",
440                                        "openWith"    => "\n[|",
441                                        "closeWith"   => "|]\n",
442                                        "display"     => true,
443                                        "selectionType" => "word",
444                                        ),
445                                ),
446                        ),
447
448/*      inutile (origine de markitup et non de spip)
449                                       
450                        // separation
451                        array(
452                                "id" => "sepPreview", // trouver un nom correct !
453                                "separator" => "---------------",
454                                "display"   => true,
455                        ),
456                        // clean
457                        array(
458                                "id"          => 'clean',
459                                "name"        => _T('barreoutils:barre_clean'),
460                                "className"   => "outil_clean",
461                                "replaceWith" => 'function(markitup) { return markitup.selection.replace(/<(.*?)>/g, "") }',
462                                "display"     => true,
463                        ),
464                        // preview
465                        array(
466                                "id"        => 'preview',
467                                "name"      => _T('barreoutils:barre_preview'),
468                                "className" => "outil_preview",
469                                "call"      => "preview",
470                                "display"   => true,
471                        ),
472*/
473                       
474                ),
475               
476        'functions'         => "
477                                // remplace ou cree -* ou -** ou -# ou -##
478                                function outil_liste(h, c) {
479                                        if ((s = h.selection) && (r = s.match(/^-([*#]+) (.*)\$/)))      {
480                                                r[1] = r[1].replace(/[#*]/g, c);
481                                                s = '-'+r[1]+' '+r[2];
482                                        } else {
483                                                s = '-' + c + ' '+s;
484                                        }
485                                        return s;
486                                }
487
488                                // indente des -* ou -#
489                                function outil_indenter(h) {
490                                        if (s = h.selection) {
491                                                if (s.substr(0,2)=='-*') {
492                                                        s = '-**' + s.substr(2);
493                                                } else if (s.substr(0,2)=='-#') {
494                                                        s = '-##' + s.substr(2);
495                                                } else {
496                                                        s = '-* ' + s;
497                                                }
498                                        }
499                                        return s;
500                                }
501                                               
502                                // desindente des -* ou -** ou -# ou -##
503                                function outil_desindenter(h){
504                                        if (s = h.selection) {
505                                                if (s.substr(0,3)=='-**') {
506                                                        s = '-*' + s.substr(3);
507                                                } else if (s.substr(0,3)=='-* ') {
508                                                        s = s.substr(3);
509                                                } else if (s.substr(0,3)=='-##') {
510                                                        s = '-#' + s.substr(3);
511                                                } else if (s.substr(0,3)=='-# ') {
512                                                        s = s.substr(3);
513                                                }
514                                        }
515                                        return s;
516                                }
517                               
518                                // ajouter un espace avant, apres un {qqc} pour ne pas que
519                                // gras {{}} suivi de italique {} donnent {{{}}}, mais { {{}} }
520                                function espace_si_accolade(h, openWith, closeWith){
521                                        if (s = h.selection) {
522                                                // accolade dans la selection
523                                                if (s.charAt(0)=='{') {
524                                                        return openWith + ' ' + s + ' ' + closeWith;
525                                                }
526                                                // accolade avant la selection
527                                                else if (c = h.textarea.selectionStart) {
528                                                        if (h.textarea.value.charAt(c-1) == '{') {
529                                                                return ' ' + openWith + s + closeWith + ' ';
530                                                        }
531                                                }
532                                        }
533                                        return openWith + s + closeWith;
534                                }
535                                ",
536        ));
537       
538        $set->cacher(array(
539                'stroke_through',
540                'clean', 'preview',
541        ));
542       
543        return $set;
544}
545
546
547
548/**
549 * Définitions des liens entre css et icones
550 *
551 * @return array
552 *     Couples identifiant de bouton => nom de l'image (ou tableau nom, position haut, position bas)
553 */
554function barre_outils_edition_icones(){
555        return array(
556                //'outil_header1' => 'text_heading_1.png',
557                'outil_header1' => array('spt-v1.png','-10px -226px'), //'intertitre.png'
558                'outil_bold' => array('spt-v1.png','-10px -478px'), //'text_bold.png'
559                'outil_italic' => array('spt-v1.png','-10px -586px'), //'text_italic.png'
560
561                'outil_stroke_through' => array('spt-v1.png','-10px -946px'), //'text_strikethrough.png'
562
563                'outil_liste_ul' => array('spt-v1.png','-10px -622px'), //'text_list_bullets.png'
564                'outil_liste_ol' => array('spt-v1.png','-10px -658px'), //'text_list_numbers.png'
565                'outil_indenter' => array('spt-v1.png','-10px -514px'), //'text_indent.png'
566                'outil_desindenter' => array('spt-v1.png','-10px -550px'), //'text_indent_remove.png'
567               
568                //'outil_quote' => 'text_indent.png',
569                'outil_quote' => array('spt-v1.png','-10px -442px'), //'quote.png'
570                'outil_poesie' => array('spt-v1.png','-10px -1050px'), //'poesie.png'
571
572                //'outil_link' => 'world_link.png',
573                'outil_link' => array('spt-v1.png','-10px -298px'), //'lien.png'
574                'outil_notes' => array('spt-v1.png','-10px -334px'), //'notes.png'
575
576
577                'outil_guillemets' => array('spt-v1.png','-10px -910px'), //'guillemets.png'
578                'outil_guillemets_simples' => array('spt-v1.png','-10px -802px'), //'guillemets-simples.png'
579                'outil_guillemets_de' => array('spt-v1.png','-10px -766px'), //'guillemets-de.png'
580                'outil_guillemets_de_simples' => array('spt-v1.png','-10px -838px'), //'guillemets-uniques-de.png'
581                'outil_guillemets_uniques' => array('spt-v1.png','-10px -874px'), //'guillemets-uniques.png'
582               
583                'outil_caracteres' => array('spt-v1.png','-10px -262px'), //'keyboard.png'
584                        'outil_a_maj_grave' => array('spt-v1.png','-10px -82px'), //'agrave-maj.png'
585                        'outil_e_maj_aigu' => array('spt-v1.png','-10px -154px'), //'eacute-maj.png'
586                        'outil_e_maj_grave' => array('spt-v1.png','-10px -190px'), //'eagrave-maj.png'
587                        'outil_aelig' => array('spt-v1.png','-10px -46px'), //'aelig.png'
588                        'outil_aelig_maj' => array('spt-v1.png','-10px -10px'), //'aelig-maj.png'
589                        'outil_oe' => array('spt-v1.png','-10px -406px'), //'oelig.png'
590                        'outil_oe_maj' => array('spt-v1.png','-10px -370px'), //'oelig-maj.png'
591                        'outil_ccedil_maj' => array('spt-v1.png','-10px -118px'),  //'ccedil-maj.png'
592                        'outil_uppercase' => array('spt-v1.png','-10px -730px'), //'text_uppercase.png'
593                        'outil_lowercase' => array('spt-v1.png','-10px -694px'), //'text_lowercase.png'
594
595                'outil_code' => array('spt-v1.png','-10px -1086px'),
596                        'outil_cadre' => array('spt-v1.png','-10px -1122px'),
597               
598                'outil_clean' => array('spt-v1.png','-10px -982px'), //'clean.png'
599                'outil_preview' => array('spt-v1.png','-10px -1018px'), //'eye.png'
600       
601                'outil_escal_aide' => '../icones_barre/aide.png',
602                'outil_escal_important' => '../icones_barre/important.png',
603            'outil_escal_avertissement' => '../icones_barre/avertissement.png',
604            'outil_escal_info' => '../icones_barre/info.png',
605            'outil_escal_centrer' => '../icones_barre/centrer.png',
606     
607        );
608}
609?>
Note: See TracBrowser for help on using the repository browser.