Line # Revision Author
1 3 ahitrov@rambler.ru /**
2 * charmap.js
3 *
4 * Copyright 2009, Moxiecode Systems AB
5 * Released under LGPL License.
6 *
7 * License: http://tinymce.moxiecode.com/license
8 * Contributing: http://tinymce.moxiecode.com/contributing
9 */
10
11 tinyMCEPopup.requireLangPack();
12
13 var charmap = [
14 [' ', ' ', true, 'no-break space'],
15 ['&', '&', true, 'ampersand'],
16 ['"', '"', true, 'quotation mark'],
17 // finance
18 ['¢', '¢', true, 'cent sign'],
19 ['€', '€', true, 'euro sign'],
20 ['£', '£', true, 'pound sign'],
21 ['¥', '¥', true, 'yen sign'],
22 // signs
23 ['©', '©', true, 'copyright sign'],
24 ['®', '®', true, 'registered sign'],
25 ['™', '™', true, 'trade mark sign'],
26 ['‰', '‰', true, 'per mille sign'],
27 ['µ', 'µ', true, 'micro sign'],
28 ['·', '·', true, 'middle dot'],
29 ['•', '•', true, 'bullet'],
30 ['…', '…', true, 'three dot leader'],
31 ['′', '′', true, 'minutes / feet'],
32 ['″', '″', true, 'seconds / inches'],
33 ['§', '§', true, 'section sign'],
34 ['¶', '¶', true, 'paragraph sign'],
35 ['ß', 'ß', true, 'sharp s / ess-zed'],
36 // quotations
37 ['‹', '‹', true, 'single left-pointing angle quotation mark'],
38 ['›', '›', true, 'single right-pointing angle quotation mark'],
39 ['«', '«', true, 'left pointing guillemet'],
40 ['»', '»', true, 'right pointing guillemet'],
41 ['‘', '‘', true, 'left single quotation mark'],
42 ['’', '’', true, 'right single quotation mark'],
43 ['“', '“', true, 'left double quotation mark'],
44 ['”', '”', true, 'right double quotation mark'],
45 ['‚', '‚', true, 'single low-9 quotation mark'],
46 ['„', '„', true, 'double low-9 quotation mark'],
47 ['<', '<', true, 'less-than sign'],
48 ['>', '>', true, 'greater-than sign'],
49 ['≤', '≤', true, 'less-than or equal to'],
50 ['≥', '≥', true, 'greater-than or equal to'],
51 ['–', '–', true, 'en dash'],
52 ['—', '—', true, 'em dash'],
53 ['¯', '¯', true, 'macron'],
54 ['‾', '‾', true, 'overline'],
55 ['¤', '¤', true, 'currency sign'],
56 ['¦', '¦', true, 'broken bar'],
57 ['¨', '¨', true, 'diaeresis'],
58 ['¡', '¡', true, 'inverted exclamation mark'],
59 ['¿', '¿', true, 'turned question mark'],
60 ['ˆ', 'ˆ', true, 'circumflex accent'],
61 ['˜', '˜', true, 'small tilde'],
62 ['°', '°', true, 'degree sign'],
63 ['−', '−', true, 'minus sign'],
64 ['±', '±', true, 'plus-minus sign'],
65 ['÷', '÷', true, 'division sign'],
66 ['⁄', '⁄', true, 'fraction slash'],
67 ['×', '×', true, 'multiplication sign'],
68 ['¹', '¹', true, 'superscript one'],
69 ['²', '²', true, 'superscript two'],
70 ['³', '³', true, 'superscript three'],
71 ['¼', '¼', true, 'fraction one quarter'],
72 ['½', '½', true, 'fraction one half'],
73 ['¾', '¾', true, 'fraction three quarters'],
74 // math / logical
75 ['ƒ', 'ƒ', true, 'function / florin'],
76 ['∫', '∫', true, 'integral'],
77 ['∑', '∑', true, 'n-ary sumation'],
78 ['∞', '∞', true, 'infinity'],
79 ['√', '√', true, 'square root'],
80 ['∼', '∼', false,'similar to'],
81 ['≅', '≅', false,'approximately equal to'],
82 ['≈', '≈', true, 'almost equal to'],
83 ['≠', '≠', true, 'not equal to'],
84 ['≡', '≡', true, 'identical to'],
85 ['∈', '∈', false,'element of'],
86 ['∉', '∉', false,'not an element of'],
87 ['∋', '∋', false,'contains as member'],
88 ['∏', '∏', true, 'n-ary product'],
89 ['∧', '∧', false,'logical and'],
90 ['∨', '∨', false,'logical or'],
91 ['¬', '¬', true, 'not sign'],
92 ['∩', '∩', true, 'intersection'],
93 ['∪', '∪', false,'union'],
94 ['∂', '∂', true, 'partial differential'],
95 ['∀', '∀', false,'for all'],
96 ['∃', '∃', false,'there exists'],
97 ['∅', '∅', false,'diameter'],
98 ['∇', '∇', false,'backward difference'],
99 ['∗', '∗', false,'asterisk operator'],
100 ['∝', '∝', false,'proportional to'],
101 ['∠', '∠', false,'angle'],
102 // undefined
103 ['´', '´', true, 'acute accent'],
104 ['¸', '¸', true, 'cedilla'],
105 ['ª', 'ª', true, 'feminine ordinal indicator'],
106 ['º', 'º', true, 'masculine ordinal indicator'],
107 ['†', '†', true, 'dagger'],
108 ['‡', '‡', true, 'double dagger'],
109 // alphabetical special chars
110 ['À', 'À', true, 'A - grave'],
111 ['Á', 'Á', true, 'A - acute'],
112 ['Â', 'Â', true, 'A - circumflex'],
113 ['Ã', 'Ã', true, 'A - tilde'],
114 ['Ä', 'Ä', true, 'A - diaeresis'],
115 ['Å', 'Å', true, 'A - ring above'],
116 ['Æ', 'Æ', true, 'ligature AE'],
117 ['Ç', 'Ç', true, 'C - cedilla'],
118 ['È', 'È', true, 'E - grave'],
119 ['É', 'É', true, 'E - acute'],
120 ['Ê', 'Ê', true, 'E - circumflex'],
121 ['Ë', 'Ë', true, 'E - diaeresis'],
122 ['Ì', 'Ì', true, 'I - grave'],
123 ['Í', 'Í', true, 'I - acute'],
124 ['Î', 'Î', true, 'I - circumflex'],
125 ['Ï', 'Ï', true, 'I - diaeresis'],
126 ['Ð', 'Ð', true, 'ETH'],
127 ['Ñ', 'Ñ', true, 'N - tilde'],
128 ['Ò', 'Ò', true, 'O - grave'],
129 ['Ó', 'Ó', true, 'O - acute'],
130 ['Ô', 'Ô', true, 'O - circumflex'],
131 ['Õ', 'Õ', true, 'O - tilde'],
132 ['Ö', 'Ö', true, 'O - diaeresis'],
133 ['Ø', 'Ø', true, 'O - slash'],
134 ['Œ', 'Œ', true, 'ligature OE'],
135 ['Š', 'Š', true, 'S - caron'],
136 ['Ù', 'Ù', true, 'U - grave'],
137 ['Ú', 'Ú', true, 'U - acute'],
138 ['Û', 'Û', true, 'U - circumflex'],
139 ['Ü', 'Ü', true, 'U - diaeresis'],
140 ['Ý', 'Ý', true, 'Y - acute'],
141 ['Ÿ', 'Ÿ', true, 'Y - diaeresis'],
142 ['Þ', 'Þ', true, 'THORN'],
143 ['à', 'à', true, 'a - grave'],
144 ['á', 'á', true, 'a - acute'],
145 ['â', 'â', true, 'a - circumflex'],
146 ['ã', 'ã', true, 'a - tilde'],
147 ['ä', 'ä', true, 'a - diaeresis'],
148 ['å', 'å', true, 'a - ring above'],
149 ['æ', 'æ', true, 'ligature ae'],
150 ['ç', 'ç', true, 'c - cedilla'],
151 ['è', 'è', true, 'e - grave'],
152 ['é', 'é', true, 'e - acute'],
153 ['ê', 'ê', true, 'e - circumflex'],
154 ['ë', 'ë', true, 'e - diaeresis'],
155 ['ì', 'ì', true, 'i - grave'],
156 ['í', 'í', true, 'i - acute'],
157 ['î', 'î', true, 'i - circumflex'],
158 ['ï', 'ï', true, 'i - diaeresis'],
159 ['ð', 'ð', true, 'eth'],
160 ['ñ', 'ñ', true, 'n - tilde'],
161 ['ò', 'ò', true, 'o - grave'],
162 ['ó', 'ó', true, 'o - acute'],
163 ['ô', 'ô', true, 'o - circumflex'],
164 ['õ', 'õ', true, 'o - tilde'],
165 ['ö', 'ö', true, 'o - diaeresis'],
166 ['ø', 'ø', true, 'o slash'],
167 ['œ', 'œ', true, 'ligature oe'],
168 ['š', 'š', true, 's - caron'],
169 ['ù', 'ù', true, 'u - grave'],
170 ['ú', 'ú', true, 'u - acute'],
171 ['û', 'û', true, 'u - circumflex'],
172 ['ü', 'ü', true, 'u - diaeresis'],
173 ['ý', 'ý', true, 'y - acute'],
174 ['þ', 'þ', true, 'thorn'],
175 ['ÿ', 'ÿ', true, 'y - diaeresis'],
176 ['Α', 'Α', true, 'Alpha'],
177 ['Β', 'Β', true, 'Beta'],
178 ['Γ', 'Γ', true, 'Gamma'],
179 ['Δ', 'Δ', true, 'Delta'],
180 ['Ε', 'Ε', true, 'Epsilon'],
181 ['Ζ', 'Ζ', true, 'Zeta'],
182 ['Η', 'Η', true, 'Eta'],
183 ['Θ', 'Θ', true, 'Theta'],
184 ['Ι', 'Ι', true, 'Iota'],
185 ['Κ', 'Κ', true, 'Kappa'],
186 ['Λ', 'Λ', true, 'Lambda'],
187 ['Μ', 'Μ', true, 'Mu'],
188 ['Ν', 'Ν', true, 'Nu'],
189 ['Ξ', 'Ξ', true, 'Xi'],
190 ['Ο', 'Ο', true, 'Omicron'],
191 ['Π', 'Π', true, 'Pi'],
192 ['Ρ', 'Ρ', true, 'Rho'],
193 ['Σ', 'Σ', true, 'Sigma'],
194 ['Τ', 'Τ', true, 'Tau'],
195 ['Υ', 'Υ', true, 'Upsilon'],
196 ['Φ', 'Φ', true, 'Phi'],
197 ['Χ', 'Χ', true, 'Chi'],
198 ['Ψ', 'Ψ', true, 'Psi'],
199 ['Ω', 'Ω', true, 'Omega'],
200 ['α', 'α', true, 'alpha'],
201 ['β', 'β', true, 'beta'],
202 ['γ', 'γ', true, 'gamma'],
203 ['δ', 'δ', true, 'delta'],
204 ['ε', 'ε', true, 'epsilon'],
205 ['ζ', 'ζ', true, 'zeta'],
206 ['η', 'η', true, 'eta'],
207 ['θ', 'θ', true, 'theta'],
208 ['ι', 'ι', true, 'iota'],
209 ['κ', 'κ', true, 'kappa'],
210 ['λ', 'λ', true, 'lambda'],
211 ['μ', 'μ', true, 'mu'],
212 ['ν', 'ν', true, 'nu'],
213 ['ξ', 'ξ', true, 'xi'],
214 ['ο', 'ο', true, 'omicron'],
215 ['π', 'π', true, 'pi'],
216 ['ρ', 'ρ', true, 'rho'],
217 ['ς', 'ς', true, 'final sigma'],
218 ['σ', 'σ', true, 'sigma'],
219 ['τ', 'τ', true, 'tau'],
220 ['υ', 'υ', true, 'upsilon'],
221 ['φ', 'φ', true, 'phi'],
222 ['χ', 'χ', true, 'chi'],
223 ['ψ', 'ψ', true, 'psi'],
224 ['ω', 'ω', true, 'omega'],
225 // symbols
226 ['ℵ', 'ℵ', false,'alef symbol'],
227 ['ϖ', 'ϖ', false,'pi symbol'],
228 ['ℜ', 'ℜ', false,'real part symbol'],
229 ['ϑ','ϑ', false,'theta symbol'],
230 ['ϒ', 'ϒ', false,'upsilon - hook symbol'],
231 ['℘', '℘', false,'Weierstrass p'],
232 ['ℑ', 'ℑ', false,'imaginary part'],
233 // arrows
234 ['←', '←', true, 'leftwards arrow'],
235 ['↑', '↑', true, 'upwards arrow'],
236 ['→', '→', true, 'rightwards arrow'],
237 ['↓', '↓', true, 'downwards arrow'],
238 ['↔', '↔', true, 'left right arrow'],
239 ['↵', '↵', false,'carriage return'],
240 ['⇐', '⇐', false,'leftwards double arrow'],
241 ['⇑', '⇑', false,'upwards double arrow'],
242 ['⇒', '⇒', false,'rightwards double arrow'],
243 ['⇓', '⇓', false,'downwards double arrow'],
244 ['⇔', '⇔', false,'left right double arrow'],
245 ['∴', '∴', false,'therefore'],
246 ['⊂', '⊂', false,'subset of'],
247 ['⊃', '⊃', false,'superset of'],
248 ['⊄', '⊄', false,'not a subset of'],
249 ['⊆', '⊆', false,'subset of or equal to'],
250 ['⊇', '⊇', false,'superset of or equal to'],
251 ['⊕', '⊕', false,'circled plus'],
252 ['⊗', '⊗', false,'circled times'],
253 ['⊥', '⊥', false,'perpendicular'],
254 ['⋅', '⋅', false,'dot operator'],
255 ['⌈', '⌈', false,'left ceiling'],
256 ['⌉', '⌉', false,'right ceiling'],
257 ['⌊', '⌊', false,'left floor'],
258 ['⌋', '⌋', false,'right floor'],
259 ['⟨', '〈', false,'left-pointing angle bracket'],
260 ['⟩', '〉', false,'right-pointing angle bracket'],
261 ['◊', '◊', true,'lozenge'],
262 ['♠', '♠', false,'black spade suit'],
263 ['♣', '♣', true, 'black club suit'],
264 ['♥', '♥', true, 'black heart suit'],
265 ['♦', '♦', true, 'black diamond suit'],
266 [' ', ' ', false,'en space'],
267 [' ', ' ', false,'em space'],
268 [' ', ' ', false,'thin space'],
269 ['‌', '‌', false,'zero width non-joiner'],
270 ['‍', '‍', false,'zero width joiner'],
271 ['‎', '‎', false,'left-to-right mark'],
272 ['‏', '‏', false,'right-to-left mark'],
273 ['­', '­', false,'soft hyphen']
274 ];
275
276 tinyMCEPopup.onInit.add(function() {
277 tinyMCEPopup.dom.setHTML('charmapView', renderCharMapHTML());
278 });
279
280 function renderCharMapHTML() {
281 var charsPerRow = 20, tdWidth=20, tdHeight=20, i;
282 var html = '<table border="0" cellspacing="1" cellpadding="0" width="' + (tdWidth*charsPerRow) + '"><tr height="' + tdHeight + '">';
283 var cols=-1;
284
285 for (i=0; i<charmap.length; i++) {
286 if (charmap[i][2]==true) {
287 cols++;
288 html += ''
289 + '<td class="charmap">'
290 + '<a onmouseover="previewChar(\'' + charmap[i][1].substring(1,charmap[i][1].length) + '\',\'' + charmap[i][0].substring(1,charmap[i][0].length) + '\',\'' + charmap[i][3] + '\');" onfocus="previewChar(\'' + charmap[i][1].substring(1,charmap[i][1].length) + '\',\'' + charmap[i][0].substring(1,charmap[i][0].length) + '\',\'' + charmap[i][3] + '\');" href="javascript:void(0)" onclick="insertChar(\'' + charmap[i][1].substring(2,charmap[i][1].length-1) + '\');" onclick="return false;" onmousedown="return false;" title="' + charmap[i][3] + '">'
291 + charmap[i][1]
292 + '</a></td>';
293 if ((cols+1) % charsPerRow == 0)
294 html += '</tr><tr height="' + tdHeight + '">';
295 }
296 }
297
298 if (cols % charsPerRow > 0) {
299 var padd = charsPerRow - (cols % charsPerRow);
300 for (var i=0; i<padd-1; i++)
301 html += '<td width="' + tdWidth + '" height="' + tdHeight + '" class="charmap">&nbsp;</td>';
302 }
303
304 html += '</tr></table>';
305
306 return html;
307 }
308
309 function insertChar(chr) {
310 tinyMCEPopup.execCommand('mceInsertContent', false, '&#' + chr + ';');
311
312 // Refocus in window
313 if (tinyMCEPopup.isWindow)
314 window.focus();
315
316 tinyMCEPopup.editor.focus();
317 tinyMCEPopup.close();
318 }
319
320 function previewChar(codeA, codeB, codeN) {
321 var elmA = document.getElementById('codeA');
322 var elmB = document.getElementById('codeB');
323 var elmV = document.getElementById('codeV');
324 var elmN = document.getElementById('codeN');
325
326 if (codeA=='#160;') {
327 elmV.innerHTML = '__';
328 } else {
329 elmV.innerHTML = '&' + codeA;
330 }
331
332 elmB.innerHTML = '&amp;' + codeA;
333 elmA.innerHTML = '&amp;' + codeB;
334 elmN.innerHTML = codeN;
335 }