source: spip-zone/_core_/plugins/porte_plume/barre_outils/edition.php @ 93621

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

Indentation et regles de codage selon http://www.spip.net/fr_article3497.html#regles_codage

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