1<?php 2/** 3 * Editing toolbar functions 4 * 5 * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 6 * @author Andreas Gohr <andi@splitbrain.org> 7 */use dokuwiki\Extension\Event; 8 9/** 10 * Prepares and prints an JavaScript array with all toolbar buttons 11 * 12 * @emits TOOLBAR_DEFINE 13 * @param string $varname Name of the JS variable to fill 14 * @author Andreas Gohr <andi@splitbrain.org> 15 */ 16function toolbar_JSdefines($varname) 17{ 18 global $lang; 19 20 $menu = []; 21 22 $evt = new Event('TOOLBAR_DEFINE', $menu); 23 if ($evt->advise_before()) { 24 // build button array 25 $menu = array_merge($menu, [ 26 [ 27 'type' => 'format', 28 'title' => $lang['qb_bold'], 29 'icon' => 'bold.png', 30 'key' => 'b', 31 'open' => '**', 32 'close' => '**', 33 'block' => false 34 ], 35 [ 36 'type' => 'format', 37 'title' => $lang['qb_italic'], 38 'icon' => 'italic.png', 39 'key' => 'i', 40 'open' => '//', 41 'close' => '//', 42 'block' => false 43 ], 44 [ 45 'type' => 'format', 46 'title' => $lang['qb_underl'], 47 'icon' => 'underline.png', 48 'key' => 'u', 49 'open' => '__', 50 'close' => '__', 51 'block' => false 52 ], 53 [ 54 'type' => 'format', 55 'title' => $lang['qb_code'], 56 'icon' => 'mono.png', 57 'key' => 'm', 58 'open' => "''", 59 'close' => "''", 60 'block' => false 61 ], 62 [ 63 'type' => 'format', 64 'title' => $lang['qb_strike'], 65 'icon' => 'strike.png', 66 'key' => 'd', 67 'open' => '<del>', 68 'close' => '</del>', 69 'block' => false 70 ], 71 [ 72 'type' => 'autohead', 73 'title' => $lang['qb_hequal'], 74 'icon' => 'hequal.png', 75 'key' => '8', 76 'text' => $lang['qb_h'], 77 'mod' => 0, 78 'block' => true 79 ], 80 [ 81 'type' => 'autohead', 82 'title' => $lang['qb_hminus'], 83 'icon' => 'hminus.png', 84 'key' => '9', 85 'text' => $lang['qb_h'], 86 'mod' => 1, 87 'block' => true 88 ], 89 [ 90 'type' => 'autohead', 91 'title' => $lang['qb_hplus'], 92 'icon' => 'hplus.png', 93 'key' => '0', 94 'text' => $lang['qb_h'], 95 'mod' => -1, 96 'block' => true 97 ], 98 [ 99 'type' => 'picker', 100 'title' => $lang['qb_hs'], 101 'icon' => 'h.png', 102 'class' => 'pk_hl', 103 'list' => [ 104 [ 105 'type' => 'format', 106 'title' => $lang['qb_h1'], 107 'icon' => 'h1.png', 108 'key' => '1', 109 'open' => '====== ', 110 'close' => ' ======\n' 111 ], 112 [ 113 'type' => 'format', 114 'title' => $lang['qb_h2'], 115 'icon' => 'h2.png', 116 'key' => '2', 117 'open' => '===== ', 118 'close' => ' =====\n' 119 ], 120 [ 121 'type' => 'format', 122 'title' => $lang['qb_h3'], 123 'icon' => 'h3.png', 124 'key' => '3', 125 'open' => '==== ', 126 'close' => ' ====\n' 127 ], 128 [ 129 'type' => 'format', 130 'title' => $lang['qb_h4'], 131 'icon' => 'h4.png', 132 'key' => '4', 133 'open' => '=== ', 134 'close' => ' ===\n' 135 ], 136 [ 137 'type' => 'format', 138 'title' => $lang['qb_h5'], 139 'icon' => 'h5.png', 140 'key' => '5', 141 'open' => '== ', 142 'close' => ' ==\n' 143 ] 144 ], 145 'block' => true 146 ], 147 [ 148 'type' => 'linkwiz', 149 'title' => $lang['qb_link'], 150 'icon' => 'link.png', 151 'key' => 'l', 152 'open' => '[[', 153 'close' => ']]', 154 'block' => false 155 ], 156 [ 157 'type' => 'format', 158 'title' => $lang['qb_extlink'], 159 'icon' => 'linkextern.png', 160 'open' => '[[', 161 'close' => ']]', 162 'sample' => 'http://example.com|'.$lang['qb_extlink'], 163 'block' => false 164 ], 165 [ 166 'type' => 'formatln', 167 'title' => $lang['qb_ol'], 168 'icon' => 'ol.png', 169 'open' => ' - ', 170 'close' => '', 171 'key' => '-', 172 'block' => true 173 ], 174 [ 175 'type' => 'formatln', 176 'title' => $lang['qb_ul'], 177 'icon' => 'ul.png', 178 'open' => ' * ', 179 'close' => '', 180 'key' => '.', 181 'block' => true 182 ], 183 [ 184 'type' => 'insert', 185 'title' => $lang['qb_hr'], 186 'icon' => 'hr.png', 187 'insert' => '\n----\n', 188 'block' => true 189 ], 190 [ 191 'type' => 'mediapopup', 192 'title' => $lang['qb_media'], 193 'icon' => 'image.png', 194 'url' => 'lib/exe/mediamanager.php?ns=', 195 'name' => 'mediaselect', 196 'options'=> 'width=750,height=500,left=20,top=20,scrollbars=yes,resizable=yes', 197 'block' => false 198 ], 199 [ 200 'type' => 'picker', 201 'title' => $lang['qb_smileys'], 202 'icon' => 'smiley.png', 203 'list' => getSmileys(), 204 'icobase'=> 'smileys', 205 'block' => false 206 ], 207 [ 208 'type' => 'picker', 209 'title' => $lang['qb_chars'], 210 'icon' => 'chars.png', 211 'list' => [ 212 'À', 'à', 'Á', 'á', 'Â', 'â', 'Ã', 'ã', 'Ä', 'ä', 'Ǎ', 'ǎ', 'Ă', 'ă', 'Å', 'å', 213 'Ā', 'ā', 'Ą', 'ą', 'Æ', 'æ', 'Ć', 'ć', 'Ç', 'ç', 'Č', 'č', 'Ĉ', 'ĉ', 'Ċ', 'ċ', 214 'Ð', 'đ', 'ð', 'Ď', 'ď', 'È', 'è', 'É', 'é', 'Ê', 'ê', 'Ë', 'ë', 'Ě', 'ě', 'Ē', 215 'ē', 'Ė', 'ė', 'Ę', 'ę', 'Ģ', 'ģ', 'Ĝ', 'ĝ', 'Ğ', 'ğ', 'Ġ', 'ġ', 'Ĥ', 'ĥ', 'Ì', 216 'ì', 'Í', 'í', 'Î', 'î', 'Ï', 'ï', 'Ǐ', 'ǐ', 'Ī', 'ī', 'İ', 'ı', 'Į', 'į', 'Ĵ', 217 'ĵ', 'Ķ', 'ķ', 'Ĺ', 'ĺ', 'Ļ', 'ļ', 'Ľ', 'ľ', 'Ł', 'ł', 'Ŀ', 'ŀ', 'Ń', 'ń', 'Ñ', 218 'ñ', 'Ņ', 'ņ', 'Ň', 'ň', 'Ò', 'ò', 'Ó', 'ó', 'Ô', 'ô', 'Õ', 'õ', 'Ö', 'ö', 'Ǒ', 219 'ǒ', 'Ō', 'ō', 'Ő', 'ő', 'Œ', 'œ', 'Ø', 'ø', 'Ŕ', 'ŕ', 'Ŗ', 'ŗ', 'Ř', 'ř', 'Ś', 220 'ś', 'Ş', 'ş', 'Š', 'š', 'Ŝ', 'ŝ', 'Ţ', 'ţ', 'Ť', 'ť', 'Ù', 'ù', 'Ú', 'ú', 'Û', 221 'û', 'Ü', 'ü', 'Ǔ', 'ǔ', 'Ŭ', 'ŭ', 'Ū', 'ū', 'Ů', 'ů', 'ǖ', 'ǘ', 'ǚ', 'ǜ', 'Ų', 222 'ų', 'Ű', 'ű', 'Ŵ', 'ŵ', 'Ý', 'ý', 'Ÿ', 'ÿ', 'Ŷ', 'ŷ', 'Ź', 'ź', 'Ž', 'ž', 'Ż', 223 'ż', 'Þ', 'þ', 'ß', 'Ħ', 'ħ', '¿', '¡', '¢', '£', '¤', '¥', '€', '¦', '§', 'ª', 224 '¬', '¯', '°', '±', '÷', '‰', '¼', '½', '¾', '¹', '²', '³', 'µ', '¶', '†', '‡', 225 '·', '•', 'º', '∀', '∂', '∃', 'Ə', 'ə', '∅', '∇', '∈', '∉', '∋', '∏', '∑', '‾', 226 '−', '∗', '×', '⁄', '√', '∝', '∞', '∠', '∧', '∨', '∩', '∪', '∫', '∴', '∼', '≅', 227 '≈', '≠', '≡', '≤', '≥', '⊂', '⊃', '⊄', '⊆', '⊇', '⊕', '⊗', '⊥', '⋅', '◊', '℘', 228 'ℑ', 'ℜ', 'ℵ', '♠', '♣', '♥', '♦', 'α', 'β', 'Γ', 'γ', 'Δ', 'δ', 'ε', 'ζ', 'η', 229 'Θ', 'θ', 'ι', 'κ', 'Λ', 'λ', 'μ', 'Ξ', 'ξ', 'Π', 'π', 'ρ', 'Σ', 'σ', 'Τ', 'τ', 230 'υ', 'Φ', 'φ', 'χ', 'Ψ', 'ψ', 'Ω', 'ω', '★', '☆', '☎', '☚', '☛', '☜', '☝', '☞', 231 '☟', '☹', '☺', '✔', '✘', '„', '“', '”', '‚', '‘', '’', '«', '»', '‹', '›', '—', 232 '–', '…', '←', '↑', '→', '↓', '↔', '⇐', '⇑', '⇒', '⇓', '⇔', '©', '™', '®', '′', 233 '″', '[', ']', '{', '}', '~', '(', ')', '%', '§', '$', '#', '|', '@' 234 ], 235 'block' => false 236 ], 237 [ 238 'type' => 'signature', 239 'title' => $lang['qb_sig'], 240 'icon' => 'sig.png', 241 'key' => 'y', 242 'block' => false 243 ] 244 ]); 245 } // end event TOOLBAR_DEFINE default action 246 $evt->advise_after(); 247 unset($evt); 248 249 // use JSON to build the JavaScript array 250 echo "var $varname = ".json_encode($menu, JSON_THROW_ON_ERROR).";\n"; 251} 252 253/** 254 * prepares the signature string as configured in the config 255 * 256 * @author Andreas Gohr <andi@splitbrain.org> 257 */ 258function toolbar_signature() 259{ 260 global $conf; 261 global $INFO; 262 /** @var Input $INPUT */ 263 global $INPUT; 264 265 $sig = $conf['signature']; 266 $sig = dformat(null, $sig); 267 $sig = str_replace('@USER@', $INPUT->server->str('REMOTE_USER'), $sig); 268 if (is_null($INFO)) { 269 $sig = str_replace(['@NAME@', '@MAIL@'], '', $sig); 270 } else { 271 $sig = str_replace('@NAME@', $INFO['userinfo']['name'] ?? "", $sig); 272 $sig = str_replace('@MAIL@', $INFO['userinfo']['mail'] ?? "", $sig); 273 } 274 $sig = str_replace('@DATE@', dformat(), $sig); 275 $sig = str_replace('\\\\n', '\\n', $sig); 276 return json_encode($sig, JSON_THROW_ON_ERROR); 277} 278 279//Setup VIM: ex: et ts=4 : 280