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