1(function () {
2var charmap = (function () {
3 'use strict';
4
5 var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
6
7 var fireInsertCustomChar = function (editor, chr) {
8 return editor.fire('insertCustomChar', { chr: chr });
9 };
10 var Events = { fireInsertCustomChar: fireInsertCustomChar };
11
12 var insertChar = function (editor, chr) {
13 var evtChr = Events.fireInsertCustomChar(editor, chr).chr;
14 editor.execCommand('mceInsertContent', false, evtChr);
15 };
16 var Actions = { insertChar: insertChar };
17
18 var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');
19
20 var getCharMap = function (editor) {
21 return editor.settings.charmap;
22 };
23 var getCharMapAppend = function (editor) {
24 return editor.settings.charmap_append;
25 };
26 var Settings = {
27 getCharMap: getCharMap,
28 getCharMapAppend: getCharMapAppend
29 };
30
31 var isArray = global$1.isArray;
32 var getDefaultCharMap = function () {
33 return [
34 [
35 '160',
36 'no-break space'
37 ],
38 [
39 '173',
40 'soft hyphen'
41 ],
42 [
43 '34',
44 'quotation mark'
45 ],
46 [
47 '162',
48 'cent sign'
49 ],
50 [
51 '8364',
52 'euro sign'
53 ],
54 [
55 '163',
56 'pound sign'
57 ],
58 [
59 '165',
60 'yen sign'
61 ],
62 [
63 '169',
64 'copyright sign'
65 ],
66 [
67 '174',
68 'registered sign'
69 ],
70 [
71 '8482',
72 'trade mark sign'
73 ],
74 [
75 '8240',
76 'per mille sign'
77 ],
78 [
79 '181',
80 'micro sign'
81 ],
82 [
83 '183',
84 'middle dot'
85 ],
86 [
87 '8226',
88 'bullet'
89 ],
90 [
91 '8230',
92 'three dot leader'
93 ],
94 [
95 '8242',
96 'minutes / feet'
97 ],
98 [
99 '8243',
100 'seconds / inches'
101 ],
102 [
103 '167',
104 'section sign'
105 ],
106 [
107 '182',
108 'paragraph sign'
109 ],
110 [
111 '223',
112 'sharp s / ess-zed'
113 ],
114 [
115 '8249',
116 'single left-pointing angle quotation mark'
117 ],
118 [
119 '8250',
120 'single right-pointing angle quotation mark'
121 ],
122 [
123 '171',
124 'left pointing guillemet'
125 ],
126 [
127 '187',
128 'right pointing guillemet'
129 ],
130 [
131 '8216',
132 'left single quotation mark'
133 ],
134 [
135 '8217',
136 'right single quotation mark'
137 ],
138 [
139 '8220',
140 'left double quotation mark'
141 ],
142 [
143 '8221',
144 'right double quotation mark'
145 ],
146 [
147 '8218',
148 'single low-9 quotation mark'
149 ],
150 [
151 '8222',
152 'double low-9 quotation mark'
153 ],
154 [
155 '60',
156 'less-than sign'
157 ],
158 [
159 '62',
160 'greater-than sign'
161 ],
162 [
163 '8804',
164 'less-than or equal to'
165 ],
166 [
167 '8805',
168 'greater-than or equal to'
169 ],
170 [
171 '8211',
172 'en dash'
173 ],
174 [
175 '8212',
176 'em dash'
177 ],
178 [
179 '175',
180 'macron'
181 ],
182 [
183 '8254',
184 'overline'
185 ],
186 [
187 '164',
188 'currency sign'
189 ],
190 [
191 '166',
192 'broken bar'
193 ],
194 [
195 '168',
196 'diaeresis'
197 ],
198 [
199 '161',
200 'inverted exclamation mark'
201 ],
202 [
203 '191',
204 'turned question mark'
205 ],
206 [
207 '710',
208 'circumflex accent'
209 ],
210 [
211 '732',
212 'small tilde'
213 ],
214 [
215 '176',
216 'degree sign'
217 ],
218 [
219 '8722',
220 'minus sign'
221 ],
222 [
223 '177',
224 'plus-minus sign'
225 ],
226 [
227 '247',
228 'division sign'
229 ],
230 [
231 '8260',
232 'fraction slash'
233 ],
234 [
235 '215',
236 'multiplication sign'
237 ],
238 [
239 '185',
240 'superscript one'
241 ],
242 [
243 '178',
244 'superscript two'
245 ],
246 [
247 '179',
248 'superscript three'
249 ],
250 [
251 '188',
252 'fraction one quarter'
253 ],
254 [
255 '189',
256 'fraction one half'
257 ],
258 [
259 '190',
260 'fraction three quarters'
261 ],
262 [
263 '402',
264 'function / florin'
265 ],
266 [
267 '8747',
268 'integral'
269 ],
270 [
271 '8721',
272 'n-ary sumation'
273 ],
274 [
275 '8734',
276 'infinity'
277 ],
278 [
279 '8730',
280 'square root'
281 ],
282 [
283 '8764',
284 'similar to'
285 ],
286 [
287 '8773',
288 'approximately equal to'
289 ],
290 [
291 '8776',
292 'almost equal to'
293 ],
294 [
295 '8800',
296 'not equal to'
297 ],
298 [
299 '8801',
300 'identical to'
301 ],
302 [
303 '8712',
304 'element of'
305 ],
306 [
307 '8713',
308 'not an element of'
309 ],
310 [
311 '8715',
312 'contains as member'
313 ],
314 [
315 '8719',
316 'n-ary product'
317 ],
318 [
319 '8743',
320 'logical and'
321 ],
322 [
323 '8744',
324 'logical or'
325 ],
326 [
327 '172',
328 'not sign'
329 ],
330 [
331 '8745',
332 'intersection'
333 ],
334 [
335 '8746',
336 'union'
337 ],
338 [
339 '8706',
340 'partial differential'
341 ],
342 [
343 '8704',
344 'for all'
345 ],
346 [
347 '8707',
348 'there exists'
349 ],
350 [
351 '8709',
352 'diameter'
353 ],
354 [
355 '8711',
356 'backward difference'
357 ],
358 [
359 '8727',
360 'asterisk operator'
361 ],
362 [
363 '8733',
364 'proportional to'
365 ],
366 [
367 '8736',
368 'angle'
369 ],
370 [
371 '180',
372 'acute accent'
373 ],
374 [
375 '184',
376 'cedilla'
377 ],
378 [
379 '170',
380 'feminine ordinal indicator'
381 ],
382 [
383 '186',
384 'masculine ordinal indicator'
385 ],
386 [
387 '8224',
388 'dagger'
389 ],
390 [
391 '8225',
392 'double dagger'
393 ],
394 [
395 '192',
396 'A - grave'
397 ],
398 [
399 '193',
400 'A - acute'
401 ],
402 [
403 '194',
404 'A - circumflex'
405 ],
406 [
407 '195',
408 'A - tilde'
409 ],
410 [
411 '196',
412 'A - diaeresis'
413 ],
414 [
415 '197',
416 'A - ring above'
417 ],
418 [
419 '256',
420 'A - macron'
421 ],
422 [
423 '198',
424 'ligature AE'
425 ],
426 [
427 '199',
428 'C - cedilla'
429 ],
430 [
431 '200',
432 'E - grave'
433 ],
434 [
435 '201',
436 'E - acute'
437 ],
438 [
439 '202',
440 'E - circumflex'
441 ],
442 [
443 '203',
444 'E - diaeresis'
445 ],
446 [
447 '274',
448 'E - macron'
449 ],
450 [
451 '204',
452 'I - grave'
453 ],
454 [
455 '205',
456 'I - acute'
457 ],
458 [
459 '206',
460 'I - circumflex'
461 ],
462 [
463 '207',
464 'I - diaeresis'
465 ],
466 [
467 '298',
468 'I - macron'
469 ],
470 [
471 '208',
472 'ETH'
473 ],
474 [
475 '209',
476 'N - tilde'
477 ],
478 [
479 '210',
480 'O - grave'
481 ],
482 [
483 '211',
484 'O - acute'
485 ],
486 [
487 '212',
488 'O - circumflex'
489 ],
490 [
491 '213',
492 'O - tilde'
493 ],
494 [
495 '214',
496 'O - diaeresis'
497 ],
498 [
499 '216',
500 'O - slash'
501 ],
502 [
503 '332',
504 'O - macron'
505 ],
506 [
507 '338',
508 'ligature OE'
509 ],
510 [
511 '352',
512 'S - caron'
513 ],
514 [
515 '217',
516 'U - grave'
517 ],
518 [
519 '218',
520 'U - acute'
521 ],
522 [
523 '219',
524 'U - circumflex'
525 ],
526 [
527 '220',
528 'U - diaeresis'
529 ],
530 [
531 '362',
532 'U - macron'
533 ],
534 [
535 '221',
536 'Y - acute'
537 ],
538 [
539 '376',
540 'Y - diaeresis'
541 ],
542 [
543 '562',
544 'Y - macron'
545 ],
546 [
547 '222',
548 'THORN'
549 ],
550 [
551 '224',
552 'a - grave'
553 ],
554 [
555 '225',
556 'a - acute'
557 ],
558 [
559 '226',
560 'a - circumflex'
561 ],
562 [
563 '227',
564 'a - tilde'
565 ],
566 [
567 '228',
568 'a - diaeresis'
569 ],
570 [
571 '229',
572 'a - ring above'
573 ],
574 [
575 '257',
576 'a - macron'
577 ],
578 [
579 '230',
580 'ligature ae'
581 ],
582 [
583 '231',
584 'c - cedilla'
585 ],
586 [
587 '232',
588 'e - grave'
589 ],
590 [
591 '233',
592 'e - acute'
593 ],
594 [
595 '234',
596 'e - circumflex'
597 ],
598 [
599 '235',
600 'e - diaeresis'
601 ],
602 [
603 '275',
604 'e - macron'
605 ],
606 [
607 '236',
608 'i - grave'
609 ],
610 [
611 '237',
612 'i - acute'
613 ],
614 [
615 '238',
616 'i - circumflex'
617 ],
618 [
619 '239',
620 'i - diaeresis'
621 ],
622 [
623 '299',
624 'i - macron'
625 ],
626 [
627 '240',
628 'eth'
629 ],
630 [
631 '241',
632 'n - tilde'
633 ],
634 [
635 '242',
636 'o - grave'
637 ],
638 [
639 '243',
640 'o - acute'
641 ],
642 [
643 '244',
644 'o - circumflex'
645 ],
646 [
647 '245',
648 'o - tilde'
649 ],
650 [
651 '246',
652 'o - diaeresis'
653 ],
654 [
655 '248',
656 'o slash'
657 ],
658 [
659 '333',
660 'o macron'
661 ],
662 [
663 '339',
664 'ligature oe'
665 ],
666 [
667 '353',
668 's - caron'
669 ],
670 [
671 '249',
672 'u - grave'
673 ],
674 [
675 '250',
676 'u - acute'
677 ],
678 [
679 '251',
680 'u - circumflex'
681 ],
682 [
683 '252',
684 'u - diaeresis'
685 ],
686 [
687 '363',
688 'u - macron'
689 ],
690 [
691 '253',
692 'y - acute'
693 ],
694 [
695 '254',
696 'thorn'
697 ],
698 [
699 '255',
700 'y - diaeresis'
701 ],
702 [
703 '563',
704 'y - macron'
705 ],
706 [
707 '913',
708 'Alpha'
709 ],
710 [
711 '914',
712 'Beta'
713 ],
714 [
715 '915',
716 'Gamma'
717 ],
718 [
719 '916',
720 'Delta'
721 ],
722 [
723 '917',
724 'Epsilon'
725 ],
726 [
727 '918',
728 'Zeta'
729 ],
730 [
731 '919',
732 'Eta'
733 ],
734 [
735 '920',
736 'Theta'
737 ],
738 [
739 '921',
740 'Iota'
741 ],
742 [
743 '922',
744 'Kappa'
745 ],
746 [
747 '923',
748 'Lambda'
749 ],
750 [
751 '924',
752 'Mu'
753 ],
754 [
755 '925',
756 'Nu'
757 ],
758 [
759 '926',
760 'Xi'
761 ],
762 [
763 '927',
764 'Omicron'
765 ],
766 [
767 '928',
768 'Pi'
769 ],
770 [
771 '929',
772 'Rho'
773 ],
774 [
775 '931',
776 'Sigma'
777 ],
778 [
779 '932',
780 'Tau'
781 ],
782 [
783 '933',
784 'Upsilon'
785 ],
786 [
787 '934',
788 'Phi'
789 ],
790 [
791 '935',
792 'Chi'
793 ],
794 [
795 '936',
796 'Psi'
797 ],
798 [
799 '937',
800 'Omega'
801 ],
802 [
803 '945',
804 'alpha'
805 ],
806 [
807 '946',
808 'beta'
809 ],
810 [
811 '947',
812 'gamma'
813 ],
814 [
815 '948',
816 'delta'
817 ],
818 [
819 '949',
820 'epsilon'
821 ],
822 [
823 '950',
824 'zeta'
825 ],
826 [
827 '951',
828 'eta'
829 ],
830 [
831 '952',
832 'theta'
833 ],
834 [
835 '953',
836 'iota'
837 ],
838 [
839 '954',
840 'kappa'
841 ],
842 [
843 '955',
844 'lambda'
845 ],
846 [
847 '956',
848 'mu'
849 ],
850 [
851 '957',
852 'nu'
853 ],
854 [
855 '958',
856 'xi'
857 ],
858 [
859 '959',
860 'omicron'
861 ],
862 [
863 '960',
864 'pi'
865 ],
866 [
867 '961',
868 'rho'
869 ],
870 [
871 '962',
872 'final sigma'
873 ],
874 [
875 '963',
876 'sigma'
877 ],
878 [
879 '964',
880 'tau'
881 ],
882 [
883 '965',
884 'upsilon'
885 ],
886 [
887 '966',
888 'phi'
889 ],
890 [
891 '967',
892 'chi'
893 ],
894 [
895 '968',
896 'psi'
897 ],
898 [
899 '969',
900 'omega'
901 ],
902 [
903 '8501',
904 'alef symbol'
905 ],
906 [
907 '982',
908 'pi symbol'
909 ],
910 [
911 '8476',
912 'real part symbol'
913 ],
914 [
915 '978',
916 'upsilon - hook symbol'
917 ],
918 [
919 '8472',
920 'Weierstrass p'
921 ],
922 [
923 '8465',
924 'imaginary part'
925 ],
926 [
927 '8592',
928 'leftwards arrow'
929 ],
930 [
931 '8593',
932 'upwards arrow'
933 ],
934 [
935 '8594',
936 'rightwards arrow'
937 ],
938 [
939 '8595',
940 'downwards arrow'
941 ],
942 [
943 '8596',
944 'left right arrow'
945 ],
946 [
947 '8629',
948 'carriage return'
949 ],
950 [
951 '8656',
952 'leftwards double arrow'
953 ],
954 [
955 '8657',
956 'upwards double arrow'
957 ],
958 [
959 '8658',
960 'rightwards double arrow'
961 ],
962 [
963 '8659',
964 'downwards double arrow'
965 ],
966 [
967 '8660',
968 'left right double arrow'
969 ],
970 [
971 '8756',
972 'therefore'
973 ],
974 [
975 '8834',
976 'subset of'
977 ],
978 [
979 '8835',
980 'superset of'
981 ],
982 [
983 '8836',
984 'not a subset of'
985 ],
986 [
987 '8838',
988 'subset of or equal to'
989 ],
990 [
991 '8839',
992 'superset of or equal to'
993 ],
994 [
995 '8853',
996 'circled plus'
997 ],
998 [
999 '8855',
1000 'circled times'
1001 ],
1002 [
1003 '8869',
1004 'perpendicular'
1005 ],
1006 [
1007 '8901',
1008 'dot operator'
1009 ],
1010 [
1011 '8968',
1012 'left ceiling'
1013 ],
1014 [
1015 '8969',
1016 'right ceiling'
1017 ],
1018 [
1019 '8970',
1020 'left floor'
1021 ],
1022 [
1023 '8971',
1024 'right floor'
1025 ],
1026 [
1027 '9001',
1028 'left-pointing angle bracket'
1029 ],
1030 [
1031 '9002',
1032 'right-pointing angle bracket'
1033 ],
1034 [
1035 '9674',
1036 'lozenge'
1037 ],
1038 [
1039 '9824',
1040 'black spade suit'
1041 ],
1042 [
1043 '9827',
1044 'black club suit'
1045 ],
1046 [
1047 '9829',
1048 'black heart suit'
1049 ],
1050 [
1051 '9830',
1052 'black diamond suit'
1053 ],
1054 [
1055 '8194',
1056 'en space'
1057 ],
1058 [
1059 '8195',
1060 'em space'
1061 ],
1062 [
1063 '8201',
1064 'thin space'
1065 ],
1066 [
1067 '8204',
1068 'zero width non-joiner'
1069 ],
1070 [
1071 '8205',
1072 'zero width joiner'
1073 ],
1074 [
1075 '8206',
1076 'left-to-right mark'
1077 ],
1078 [
1079 '8207',
1080 'right-to-left mark'
1081 ]
1082 ];
1083 };
1084 var charmapFilter = function (charmap) {
1085 return global$1.grep(charmap, function (item) {
1086 return isArray(item) && item.length === 2;
1087 });
1088 };
1089 var getCharsFromSetting = function (settingValue) {
1090 if (isArray(settingValue)) {
1091 return [].concat(charmapFilter(settingValue));
1092 }
1093 if (typeof settingValue === 'function') {
1094 return settingValue();
1095 }
1096 return [];
1097 };
1098 var extendCharMap = function (editor, charmap) {
1099 var userCharMap = Settings.getCharMap(editor);
1100 if (userCharMap) {
1101 charmap = getCharsFromSetting(userCharMap);
1102 }
1103 var userCharMapAppend = Settings.getCharMapAppend(editor);
1104 if (userCharMapAppend) {
1105 return [].concat(charmap).concat(getCharsFromSetting(userCharMapAppend));
1106 }
1107 return charmap;
1108 };
1109 var getCharMap$1 = function (editor) {
1110 return extendCharMap(editor, getDefaultCharMap());
1111 };
1112 var CharMap = { getCharMap: getCharMap$1 };
1113
1114 var get = function (editor) {
1115 var getCharMap = function () {
1116 return CharMap.getCharMap(editor);
1117 };
1118 var insertChar = function (chr) {
1119 Actions.insertChar(editor, chr);
1120 };
1121 return {
1122 getCharMap: getCharMap,
1123 insertChar: insertChar
1124 };
1125 };
1126 var Api = { get: get };
1127
1128 var getHtml = function (charmap) {
1129 var gridHtml, x, y;
1130 var width = Math.min(charmap.length, 25);
1131 var height = Math.ceil(charmap.length / width);
1132 gridHtml = '<table role="presentation" cellspacing="0" class="mce-charmap"><tbody>';
1133 for (y = 0; y < height; y++) {
1134 gridHtml += '<tr>';
1135 for (x = 0; x < width; x++) {
1136 var index = y * width + x;
1137 if (index < charmap.length) {
1138 var chr = charmap[index];
1139 var charCode = parseInt(chr[0], 10);
1140 var chrText = chr ? String.fromCharCode(charCode) : ' ';
1141 gridHtml += '<td title="' + chr[1] + '">' + '<div tabindex="-1" title="' + chr[1] + '" role="button" data-chr="' + charCode + '">' + chrText + '</div>' + '</td>';
1142 } else {
1143 gridHtml += '<td />';
1144 }
1145 }
1146 gridHtml += '</tr>';
1147 }
1148 gridHtml += '</tbody></table>';
1149 return gridHtml;
1150 };
1151 var GridHtml = { getHtml: getHtml };
1152
1153 var getParentTd = function (elm) {
1154 while (elm) {
1155 if (elm.nodeName === 'TD') {
1156 return elm;
1157 }
1158 elm = elm.parentNode;
1159 }
1160 };
1161 var open = function (editor) {
1162 var win;
1163 var charMapPanel = {
1164 type: 'container',
1165 html: GridHtml.getHtml(CharMap.getCharMap(editor)),
1166 onclick: function (e) {
1167 var target = e.target;
1168 if (/^(TD|DIV)$/.test(target.nodeName)) {
1169 var charDiv = getParentTd(target).firstChild;
1170 if (charDiv && charDiv.hasAttribute('data-chr')) {
1171 var charCodeString = charDiv.getAttribute('data-chr');
1172 var charCode = parseInt(charCodeString, 10);
1173 if (!isNaN(charCode)) {
1174 Actions.insertChar(editor, String.fromCharCode(charCode));
1175 }
1176 if (!e.ctrlKey) {
1177 win.close();
1178 }
1179 }
1180 }
1181 },
1182 onmouseover: function (e) {
1183 var td = getParentTd(e.target);
1184 if (td && td.firstChild) {
1185 win.find('#preview').text(td.firstChild.firstChild.data);
1186 win.find('#previewTitle').text(td.title);
1187 } else {
1188 win.find('#preview').text(' ');
1189 win.find('#previewTitle').text(' ');
1190 }
1191 }
1192 };
1193 win = editor.windowManager.open({
1194 title: 'Special character',
1195 spacing: 10,
1196 padding: 10,
1197 items: [
1198 charMapPanel,
1199 {
1200 type: 'container',
1201 layout: 'flex',
1202 direction: 'column',
1203 align: 'center',
1204 spacing: 5,
1205 minWidth: 160,
1206 minHeight: 160,
1207 items: [
1208 {
1209 type: 'label',
1210 name: 'preview',
1211 text: ' ',
1212 style: 'font-size: 40px; text-align: center',
1213 border: 1,
1214 minWidth: 140,
1215 minHeight: 80
1216 },
1217 {
1218 type: 'spacer',
1219 minHeight: 20
1220 },
1221 {
1222 type: 'label',
1223 name: 'previewTitle',
1224 text: ' ',
1225 style: 'white-space: pre-wrap;',
1226 border: 1,
1227 minWidth: 140
1228 }
1229 ]
1230 }
1231 ],
1232 buttons: [{
1233 text: 'Close',
1234 onclick: function () {
1235 win.close();
1236 }
1237 }]
1238 });
1239 };
1240 var Dialog = { open: open };
1241
1242 var register = function (editor) {
1243 editor.addCommand('mceShowCharmap', function () {
1244 Dialog.open(editor);
1245 });
1246 };
1247 var Commands = { register: register };
1248
1249 var register$1 = function (editor) {
1250 editor.addButton('charmap', {
1251 icon: 'charmap',
1252 tooltip: 'Special character',
1253 cmd: 'mceShowCharmap'
1254 });
1255 editor.addMenuItem('charmap', {
1256 icon: 'charmap',
1257 text: 'Special character',
1258 cmd: 'mceShowCharmap',
1259 context: 'insert'
1260 });
1261 };
1262 var Buttons = { register: register$1 };
1263
1264 global.add('charmap', function (editor) {
1265 Commands.register(editor);
1266 Buttons.register(editor);
1267 return Api.get(editor);
1268 });
1269 function Plugin () {
1270 }
1271
1272 return Plugin;
1273
1274}());
1275})();
1276