xref: /dokuwiki/inc/toolbar.php (revision 24870174d2ee45460ba6bcfe5f5a0ae94715efd7)
120d062caSAndreas Gohr<?php
220d062caSAndreas Gohr/**
320d062caSAndreas Gohr * Editing toolbar functions
420d062caSAndreas Gohr *
520d062caSAndreas Gohr * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
620d062caSAndreas Gohr * @author     Andreas Gohr <andi@splitbrain.org>
7e1d9dcc8SAndreas Gohr */use dokuwiki\Extension\Event;
820d062caSAndreas Gohr
920d062caSAndreas Gohr/**
1020d062caSAndreas Gohr * Prepares and prints an JavaScript array with all toolbar buttons
1120d062caSAndreas Gohr *
12db959ae3SAndreas Gohr * @emits  TOOLBAR_DEFINE
1320d062caSAndreas Gohr * @param  string $varname Name of the JS variable to fill
1420d062caSAndreas Gohr * @author Andreas Gohr <andi@splitbrain.org>
1520d062caSAndreas Gohr */
1620d062caSAndreas Gohrfunction toolbar_JSdefines($varname){
1720d062caSAndreas Gohr    global $lang;
1820d062caSAndreas Gohr
19*24870174SAndreas Gohr    $menu = [];
208b3b5ebbSEsther Brunner
21e1d9dcc8SAndreas Gohr    $evt = new Event('TOOLBAR_DEFINE', $menu);
228b3b5ebbSEsther Brunner    if ($evt->advise_before()){
238b3b5ebbSEsther Brunner
2420d062caSAndreas Gohr        // build button array
25*24870174SAndreas Gohr        $menu = array_merge($menu, [
26*24870174SAndreas Gohr            [
2720d062caSAndreas Gohr                'type'   => 'format',
2820d062caSAndreas Gohr                'title'  => $lang['qb_bold'],
2920d062caSAndreas Gohr                'icon'   => 'bold.png',
3020d062caSAndreas Gohr                'key'    => 'b',
3120d062caSAndreas Gohr                'open'   => '**',
3220d062caSAndreas Gohr                'close'  => '**',
33c4ba149aSAdrian Lang                'block'  => false
34*24870174SAndreas Gohr            ],
35*24870174SAndreas Gohr            [
3620d062caSAndreas Gohr                'type'   => 'format',
3720d062caSAndreas Gohr                'title'  => $lang['qb_italic'],
3820d062caSAndreas Gohr                'icon'   => 'italic.png',
3920d062caSAndreas Gohr                'key'    => 'i',
4020d062caSAndreas Gohr                'open'   => '//',
4120d062caSAndreas Gohr                'close'  => '//',
42c4ba149aSAdrian Lang                'block'  => false
43*24870174SAndreas Gohr            ],
44*24870174SAndreas Gohr            [
4520d062caSAndreas Gohr                'type'   => 'format',
4620d062caSAndreas Gohr                'title'  => $lang['qb_underl'],
4720d062caSAndreas Gohr                'icon'   => 'underline.png',
4820d062caSAndreas Gohr                'key'    => 'u',
4920d062caSAndreas Gohr                'open'   => '__',
5020d062caSAndreas Gohr                'close'  => '__',
51c4ba149aSAdrian Lang                'block'  => false
52*24870174SAndreas Gohr            ],
53*24870174SAndreas Gohr            [
5420d062caSAndreas Gohr                'type'   => 'format',
5520d062caSAndreas Gohr                'title'  => $lang['qb_code'],
5620d062caSAndreas Gohr                'icon'   => 'mono.png',
572bc9e793SAndreas Gohr                'key'    => 'm',
5820d062caSAndreas Gohr                'open'   => "''",
5920d062caSAndreas Gohr                'close'  => "''",
60c4ba149aSAdrian Lang                'block'  => false
61*24870174SAndreas Gohr            ],
62*24870174SAndreas Gohr            [
6320d062caSAndreas Gohr                'type'   => 'format',
6420d062caSAndreas Gohr                'title'  => $lang['qb_strike'],
6520d062caSAndreas Gohr                'icon'   => 'strike.png',
6620d062caSAndreas Gohr                'key'    => 'd',
6720d062caSAndreas Gohr                'open'  => '<del>',
68b0bf105aSAndreas Gohr                'close'   => '</del>',
69c4ba149aSAdrian Lang                'block'  => false
70*24870174SAndreas Gohr            ],
71*24870174SAndreas Gohr            [
72a2be6cd9SAndreas Gohr                'type'   => 'autohead',
73a2be6cd9SAndreas Gohr                'title'  => $lang['qb_hequal'],
74a2be6cd9SAndreas Gohr                'icon'   => 'hequal.png',
75af14334bSAndreas Gohr                'key'    => '8',
76a2be6cd9SAndreas Gohr                'text'   => $lang['qb_h'],
77c4ba149aSAdrian Lang                'mod'    => 0,
78c4ba149aSAdrian Lang                'block'  => true
79*24870174SAndreas Gohr            ],
80*24870174SAndreas Gohr            [
81a2be6cd9SAndreas Gohr                'type'   => 'autohead',
82a2be6cd9SAndreas Gohr                'title'  => $lang['qb_hminus'],
83a2be6cd9SAndreas Gohr                'icon'   => 'hminus.png',
84af14334bSAndreas Gohr                'key'    => '9',
85a2be6cd9SAndreas Gohr                'text'   => $lang['qb_h'],
86c4ba149aSAdrian Lang                'mod'    => 1,
87c4ba149aSAdrian Lang                'block'  => true
88*24870174SAndreas Gohr            ],
89*24870174SAndreas Gohr            [
907ba342d5Smatthiasgrimm                'type'   => 'autohead',
917ba342d5Smatthiasgrimm                'title'  => $lang['qb_hplus'],
927ba342d5Smatthiasgrimm                'icon'   => 'hplus.png',
93af14334bSAndreas Gohr                'key'    => '0',
947ba342d5Smatthiasgrimm                'text'   => $lang['qb_h'],
95c4ba149aSAdrian Lang                'mod'    => -1,
96c4ba149aSAdrian Lang                'block'  => true
97*24870174SAndreas Gohr            ],
98*24870174SAndreas Gohr            [
99a2be6cd9SAndreas Gohr                'type'   => 'picker',
100a2be6cd9SAndreas Gohr                'title'  => $lang['qb_hs'],
101a2be6cd9SAndreas Gohr                'icon'   => 'h.png',
10273a509d7SAndreas Gohr                'class'  => 'pk_hl',
103*24870174SAndreas Gohr                'list'   => [
104*24870174SAndreas Gohr                    [
10520d062caSAndreas Gohr                        'type'   => 'format',
10620d062caSAndreas Gohr                        'title'  => $lang['qb_h1'],
10720d062caSAndreas Gohr                        'icon'   => 'h1.png',
10820d062caSAndreas Gohr                        'key'    => '1',
10920d062caSAndreas Gohr                        'open'   => '====== ',
110*24870174SAndreas Gohr                        'close'  => ' ======\n'
111*24870174SAndreas Gohr                    ],
112*24870174SAndreas Gohr                    [
11320d062caSAndreas Gohr                        'type'   => 'format',
11420d062caSAndreas Gohr                        'title'  => $lang['qb_h2'],
11520d062caSAndreas Gohr                        'icon'   => 'h2.png',
11620d062caSAndreas Gohr                        'key'    => '2',
11720d062caSAndreas Gohr                        'open'   => '===== ',
118*24870174SAndreas Gohr                        'close'  => ' =====\n'
119*24870174SAndreas Gohr                    ],
120*24870174SAndreas Gohr                    [
12120d062caSAndreas Gohr                        'type'   => 'format',
12220d062caSAndreas Gohr                        'title'  => $lang['qb_h3'],
12320d062caSAndreas Gohr                        'icon'   => 'h3.png',
12420d062caSAndreas Gohr                        'key'    => '3',
12520d062caSAndreas Gohr                        'open'   => '==== ',
126*24870174SAndreas Gohr                        'close'  => ' ====\n'
127*24870174SAndreas Gohr                    ],
128*24870174SAndreas Gohr                    [
12920d062caSAndreas Gohr                        'type'   => 'format',
13020d062caSAndreas Gohr                        'title'  => $lang['qb_h4'],
13120d062caSAndreas Gohr                        'icon'   => 'h4.png',
13220d062caSAndreas Gohr                        'key'    => '4',
13320d062caSAndreas Gohr                        'open'   => '=== ',
134*24870174SAndreas Gohr                        'close'  => ' ===\n'
135*24870174SAndreas Gohr                    ],
136*24870174SAndreas Gohr                    [
13720d062caSAndreas Gohr                        'type'   => 'format',
13820d062caSAndreas Gohr                        'title'  => $lang['qb_h5'],
13920d062caSAndreas Gohr                        'icon'   => 'h5.png',
14020d062caSAndreas Gohr                        'key'    => '5',
14120d062caSAndreas Gohr                        'open'   => '== ',
142*24870174SAndreas Gohr                        'close'  => ' ==\n'
143*24870174SAndreas Gohr                    ]
144*24870174SAndreas Gohr                ],
145c4ba149aSAdrian Lang                'block'  => true
146*24870174SAndreas Gohr            ],
147*24870174SAndreas Gohr            [
14856dfcc12SAndreas Gohr                'type'   => 'linkwiz',
14920d062caSAndreas Gohr                'title'  => $lang['qb_link'],
15020d062caSAndreas Gohr                'icon'   => 'link.png',
15120d062caSAndreas Gohr                'key'    => 'l',
15220d062caSAndreas Gohr                'open'   => '[[',
15320d062caSAndreas Gohr                'close'  => ']]',
154c4ba149aSAdrian Lang                'block'  => false
155*24870174SAndreas Gohr            ],
156*24870174SAndreas Gohr            [
15720d062caSAndreas Gohr                'type'   => 'format',
15820d062caSAndreas Gohr                'title'  => $lang['qb_extlink'],
15920d062caSAndreas Gohr                'icon'   => 'linkextern.png',
16020d062caSAndreas Gohr                'open'   => '[[',
16120d062caSAndreas Gohr                'close'  => ']]',
16220d062caSAndreas Gohr                'sample' => 'http://example.com|'.$lang['qb_extlink'],
163c4ba149aSAdrian Lang                'block'  => false
164*24870174SAndreas Gohr            ],
165*24870174SAndreas Gohr            [
166201ea5f3SAndreas Gohr                'type'   => 'formatln',
16720d062caSAndreas Gohr                'title'  => $lang['qb_ol'],
16820d062caSAndreas Gohr                'icon'   => 'ol.png',
16920d062caSAndreas Gohr                'open'   => '  - ',
170201ea5f3SAndreas Gohr                'close'  => '',
171a4b53097SAndreas Gohr                'key'    => '-',
172c4ba149aSAdrian Lang                'block'  => true
173*24870174SAndreas Gohr            ],
174*24870174SAndreas Gohr            [
175201ea5f3SAndreas Gohr                'type'   => 'formatln',
17620d062caSAndreas Gohr                'title'  => $lang['qb_ul'],
17720d062caSAndreas Gohr                'icon'   => 'ul.png',
17820d062caSAndreas Gohr                'open'   => '  * ',
179201ea5f3SAndreas Gohr                'close'  => '',
180a4b53097SAndreas Gohr                'key'    => '.',
181c4ba149aSAdrian Lang                'block'  => true
182*24870174SAndreas Gohr            ],
183*24870174SAndreas Gohr            [
18420d062caSAndreas Gohr                'type'   => 'insert',
18520d062caSAndreas Gohr                'title'  => $lang['qb_hr'],
18620d062caSAndreas Gohr                'icon'   => 'hr.png',
187d27d0a5aSGina Haeussge                'insert' => '\n----\n',
188c4ba149aSAdrian Lang                'block'  => true
189*24870174SAndreas Gohr            ],
190*24870174SAndreas Gohr            [
191c591aabeSAndreas Gohr                'type'   => 'mediapopup',
19220d062caSAndreas Gohr                'title'  => $lang['qb_media'],
19320d062caSAndreas Gohr                'icon'   => 'image.png',
194de4e429dSAndreas Gohr                'url'    => 'lib/exe/mediamanager.php?ns=',
19520d062caSAndreas Gohr                'name'   => 'mediaselect',
1963df72098SAndreas Gohr                'options'=> 'width=750,height=500,left=20,top=20,scrollbars=yes,resizable=yes',
197c4ba149aSAdrian Lang                'block'  => false
198*24870174SAndreas Gohr            ],
199*24870174SAndreas Gohr            [
20020d062caSAndreas Gohr                'type'   => 'picker',
20120d062caSAndreas Gohr                'title'  => $lang['qb_smileys'],
20220d062caSAndreas Gohr                'icon'   => 'smiley.png',
20320d062caSAndreas Gohr                'list'   => getSmileys(),
20420d062caSAndreas Gohr                'icobase'=> 'smileys',
205c4ba149aSAdrian Lang                'block'  => false
206*24870174SAndreas Gohr            ],
207*24870174SAndreas Gohr            [
20820d062caSAndreas Gohr                'type'   => 'picker',
20920d062caSAndreas Gohr                'title'  => $lang['qb_chars'],
21020d062caSAndreas Gohr                'icon'   => 'chars.png',
21164159a61SAndreas Gohr                'list' => [
21264159a61SAndreas Gohr                    'À', 'à', 'Á', 'á', 'Â', 'â', 'Ã', 'ã', 'Ä', 'ä', 'Ǎ', 'ǎ', 'Ă', 'ă', 'Å', 'å',
21364159a61SAndreas Gohr                    'Ā', 'ā', 'Ą', 'ą', 'Æ', 'æ', 'Ć', 'ć', 'Ç', 'ç', 'Č', 'č', 'Ĉ', 'ĉ', 'Ċ', 'ċ',
21464159a61SAndreas Gohr                    'Ð', 'đ', 'ð', 'Ď', 'ď', 'È', 'è', 'É', 'é', 'Ê', 'ê', 'Ë', 'ë', 'Ě', 'ě', 'Ē',
21564159a61SAndreas Gohr                    'ē', 'Ė', 'ė', 'Ę', 'ę', 'Ģ', 'ģ', 'Ĝ', 'ĝ', 'Ğ', 'ğ', 'Ġ', 'ġ', 'Ĥ', 'ĥ', 'Ì',
21664159a61SAndreas Gohr                    'ì', 'Í', 'í', 'Î', 'î', 'Ï', 'ï', 'Ǐ', 'ǐ', 'Ī', 'ī', 'İ', 'ı', 'Į', 'į', 'Ĵ',
21764159a61SAndreas Gohr                    'ĵ', 'Ķ', 'ķ', 'Ĺ', 'ĺ', 'Ļ', 'ļ', 'Ľ', 'ľ', 'Ł', 'ł', 'Ŀ', 'ŀ', 'Ń', 'ń', 'Ñ',
21864159a61SAndreas Gohr                    'ñ', 'Ņ', 'ņ', 'Ň', 'ň', 'Ò', 'ò', 'Ó', 'ó', 'Ô', 'ô', 'Õ', 'õ', 'Ö', 'ö', 'Ǒ',
21964159a61SAndreas Gohr                    'ǒ', 'Ō', 'ō', 'Ő', 'ő', 'Œ', 'œ', 'Ø', 'ø', 'Ŕ', 'ŕ', 'Ŗ', 'ŗ', 'Ř', 'ř', 'Ś',
22064159a61SAndreas Gohr                    'ś', 'Ş', 'ş', 'Š', 'š', 'Ŝ', 'ŝ', 'Ţ', 'ţ', 'Ť', 'ť', 'Ù', 'ù', 'Ú', 'ú', 'Û',
22164159a61SAndreas Gohr                    'û', 'Ü', 'ü', 'Ǔ', 'ǔ', 'Ŭ', 'ŭ', 'Ū', 'ū', 'Ů', 'ů', 'ǖ', 'ǘ', 'ǚ', 'ǜ', 'Ų',
22264159a61SAndreas Gohr                    'ų', 'Ű', 'ű', 'Ŵ', 'ŵ', 'Ý', 'ý', 'Ÿ', 'ÿ', 'Ŷ', 'ŷ', 'Ź', 'ź', 'Ž', 'ž', 'Ż',
22364159a61SAndreas Gohr                    'ż', 'Þ', 'þ', 'ß', 'Ħ', 'ħ', '¿', '¡', '¢', '£', '¤', '¥', '€', '¦', '§', 'ª',
22464159a61SAndreas Gohr                    '¬', '¯', '°', '±', '÷', '‰', '¼', '½', '¾', '¹', '²', '³', 'µ', '¶', '†', '‡',
22564159a61SAndreas Gohr                    '·', '•', 'º', '∀', '∂', '∃', 'Ə', 'ə', '∅', '∇', '∈', '∉', '∋', '∏', '∑', '‾',
22664159a61SAndreas Gohr                    '−', '∗', '×', '⁄', '√', '∝', '∞', '∠', '∧', '∨', '∩', '∪', '∫', '∴', '∼', '≅',
22764159a61SAndreas Gohr                    '≈', '≠', '≡', '≤', '≥', '⊂', '⊃', '⊄', '⊆', '⊇', '⊕', '⊗', '⊥', '⋅', '◊', '℘',
22864159a61SAndreas Gohr                    'ℑ', 'ℜ', 'ℵ', '♠', '♣', '♥', '♦', 'α', 'β', 'Γ', 'γ', 'Δ', 'δ', 'ε', 'ζ', 'η',
22964159a61SAndreas Gohr                    'Θ', 'θ', 'ι', 'κ', 'Λ', 'λ', 'μ', 'Ξ', 'ξ', 'Π', 'π', 'ρ', 'Σ', 'σ', 'Τ', 'τ',
23064159a61SAndreas Gohr                    'υ', 'Φ', 'φ', 'χ', 'Ψ', 'ψ', 'Ω', 'ω', '★', '☆', '☎', '☚', '☛', '☜', '☝', '☞',
23164159a61SAndreas Gohr                    '☟', '☹', '☺', '✔', '✘', '„', '“', '”', '‚', '‘', '’', '«', '»', '‹', '›', '—',
23264159a61SAndreas Gohr                    '–', '…', '←', '↑', '→', '↓', '↔', '⇐', '⇑', '⇒', '⇓', '⇔', '©', '™', '®', '′',
23364159a61SAndreas Gohr                    '″', '[', ']', '{', '}', '~', '(', ')', '%', '§', '$', '#', '|', '@'
23464159a61SAndreas Gohr                ],
235c4ba149aSAdrian Lang                'block'  => false
236*24870174SAndreas Gohr            ],
237*24870174SAndreas Gohr            [
238c591aabeSAndreas Gohr                'type'   => 'signature',
239c591aabeSAndreas Gohr                'title'  => $lang['qb_sig'],
240c591aabeSAndreas Gohr                'icon'   => 'sig.png',
241c591aabeSAndreas Gohr                'key'    => 'y',
242c4ba149aSAdrian Lang                'block'  => false
243*24870174SAndreas Gohr            ]
244*24870174SAndreas Gohr        ]);
2458b3b5ebbSEsther Brunner    } // end event TOOLBAR_DEFINE default action
2468b3b5ebbSEsther Brunner    $evt->advise_after();
2478b3b5ebbSEsther Brunner    unset($evt);
24820d062caSAndreas Gohr
24920d062caSAndreas Gohr    // use JSON to build the JavaScript array
250*24870174SAndreas Gohr    print "var $varname = ".json_encode($menu, JSON_THROW_ON_ERROR).";\n";
25120d062caSAndreas Gohr}
25220d062caSAndreas Gohr
25320d062caSAndreas Gohr/**
25420d062caSAndreas Gohr * prepares the signature string as configured in the config
25520d062caSAndreas Gohr *
25620d062caSAndreas Gohr * @author Andreas Gohr <andi@splitbrain.org>
25720d062caSAndreas Gohr */
25820d062caSAndreas Gohrfunction toolbar_signature(){
25920d062caSAndreas Gohr    global $conf;
2601b2abcf9SAndreas Gohr    global $INFO;
261585bf44eSChristopher Smith    /** @var Input $INPUT */
262585bf44eSChristopher Smith    global $INPUT;
26320d062caSAndreas Gohr
26420d062caSAndreas Gohr    $sig = $conf['signature'];
2657883d066SAndreas Gohr    $sig = dformat(null,$sig);
266585bf44eSChristopher Smith    $sig = str_replace('@USER@',$INPUT->server->str('REMOTE_USER'),$sig);
267c7a4b560SGuillaume Turri    if (is_null($INFO)) {
268c7a4b560SGuillaume Turri        $sig = str_replace(['@NAME@', '@MAIL@'], '', $sig);
269c7a4b560SGuillaume Turri    } else {
270e86df411SMarvin Klein        $sig = str_replace('@NAME@', $INFO['userinfo']['name'] ?? "", $sig);
2710519ac41SMarvin Klein        $sig = str_replace('@MAIL@', $INFO['userinfo']['mail'] ?? "", $sig);
272c7a4b560SGuillaume Turri    }
273f2263577SAndreas Gohr    $sig = str_replace('@DATE@',dformat(),$sig);
274462a3baeSPhy    $sig = str_replace('\\\\n','\\n',$sig);
275*24870174SAndreas Gohr    return json_encode($sig, JSON_THROW_ON_ERROR);
27620d062caSAndreas Gohr}
27720d062caSAndreas Gohr
278e3776c06SMichael Hamann//Setup VIM: ex: et ts=4 :
279