plugin.js 36 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709
  1. /**
  2. * Copyright (c) Tiny Technologies, Inc. All rights reserved.
  3. * Licensed under the LGPL or a commercial license.
  4. * For LGPL see License.txt in the project root for license information.
  5. * For commercial licenses see https://www.tiny.cloud/
  6. *
  7. * Version: 5.0.7 (2019-06-05)
  8. */
  9. (function () {
  10. var charmap = (function (domGlobals) {
  11. 'use strict';
  12. var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
  13. var fireInsertCustomChar = function (editor, chr) {
  14. return editor.fire('insertCustomChar', { chr: chr });
  15. };
  16. var Events = { fireInsertCustomChar: fireInsertCustomChar };
  17. var insertChar = function (editor, chr) {
  18. var evtChr = Events.fireInsertCustomChar(editor, chr).chr;
  19. editor.execCommand('mceInsertContent', false, evtChr);
  20. };
  21. var Actions = { insertChar: insertChar };
  22. var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');
  23. var getCharMap = function (editor) {
  24. return editor.settings.charmap;
  25. };
  26. var getCharMapAppend = function (editor) {
  27. return editor.settings.charmap_append;
  28. };
  29. var Settings = {
  30. getCharMap: getCharMap,
  31. getCharMapAppend: getCharMapAppend
  32. };
  33. var constant = function (value) {
  34. return function () {
  35. return value;
  36. };
  37. };
  38. var never = constant(false);
  39. var always = constant(true);
  40. var never$1 = never;
  41. var always$1 = always;
  42. var none = function () {
  43. return NONE;
  44. };
  45. var NONE = function () {
  46. var eq = function (o) {
  47. return o.isNone();
  48. };
  49. var call = function (thunk) {
  50. return thunk();
  51. };
  52. var id = function (n) {
  53. return n;
  54. };
  55. var noop = function () {
  56. };
  57. var nul = function () {
  58. return null;
  59. };
  60. var undef = function () {
  61. return undefined;
  62. };
  63. var me = {
  64. fold: function (n, s) {
  65. return n();
  66. },
  67. is: never$1,
  68. isSome: never$1,
  69. isNone: always$1,
  70. getOr: id,
  71. getOrThunk: call,
  72. getOrDie: function (msg) {
  73. throw new Error(msg || 'error: getOrDie called on none.');
  74. },
  75. getOrNull: nul,
  76. getOrUndefined: undef,
  77. or: id,
  78. orThunk: call,
  79. map: none,
  80. ap: none,
  81. each: noop,
  82. bind: none,
  83. flatten: none,
  84. exists: never$1,
  85. forall: always$1,
  86. filter: none,
  87. equals: eq,
  88. equals_: eq,
  89. toArray: function () {
  90. return [];
  91. },
  92. toString: constant('none()')
  93. };
  94. if (Object.freeze)
  95. Object.freeze(me);
  96. return me;
  97. }();
  98. var some = function (a) {
  99. var constant_a = function () {
  100. return a;
  101. };
  102. var self = function () {
  103. return me;
  104. };
  105. var map = function (f) {
  106. return some(f(a));
  107. };
  108. var bind = function (f) {
  109. return f(a);
  110. };
  111. var me = {
  112. fold: function (n, s) {
  113. return s(a);
  114. },
  115. is: function (v) {
  116. return a === v;
  117. },
  118. isSome: always$1,
  119. isNone: never$1,
  120. getOr: constant_a,
  121. getOrThunk: constant_a,
  122. getOrDie: constant_a,
  123. getOrNull: constant_a,
  124. getOrUndefined: constant_a,
  125. or: self,
  126. orThunk: self,
  127. map: map,
  128. ap: function (optfab) {
  129. return optfab.fold(none, function (fab) {
  130. return some(fab(a));
  131. });
  132. },
  133. each: function (f) {
  134. f(a);
  135. },
  136. bind: bind,
  137. flatten: constant_a,
  138. exists: bind,
  139. forall: bind,
  140. filter: function (f) {
  141. return f(a) ? me : NONE;
  142. },
  143. equals: function (o) {
  144. return o.is(a);
  145. },
  146. equals_: function (o, elementEq) {
  147. return o.fold(never$1, function (b) {
  148. return elementEq(a, b);
  149. });
  150. },
  151. toArray: function () {
  152. return [a];
  153. },
  154. toString: function () {
  155. return 'some(' + a + ')';
  156. }
  157. };
  158. return me;
  159. };
  160. var from = function (value) {
  161. return value === null || value === undefined ? NONE : some(value);
  162. };
  163. var Option = {
  164. some: some,
  165. none: none,
  166. from: from
  167. };
  168. var typeOf = function (x) {
  169. if (x === null)
  170. return 'null';
  171. var t = typeof x;
  172. if (t === 'object' && Array.prototype.isPrototypeOf(x))
  173. return 'array';
  174. if (t === 'object' && String.prototype.isPrototypeOf(x))
  175. return 'string';
  176. return t;
  177. };
  178. var isType = function (type) {
  179. return function (value) {
  180. return typeOf(value) === type;
  181. };
  182. };
  183. var isFunction = isType('function');
  184. var slice = Array.prototype.slice;
  185. var map = function (xs, f) {
  186. var len = xs.length;
  187. var r = new Array(len);
  188. for (var i = 0; i < len; i++) {
  189. var x = xs[i];
  190. r[i] = f(x, i, xs);
  191. }
  192. return r;
  193. };
  194. var each = function (xs, f) {
  195. for (var i = 0, len = xs.length; i < len; i++) {
  196. var x = xs[i];
  197. f(x, i, xs);
  198. }
  199. };
  200. var find = function (xs, pred) {
  201. for (var i = 0, len = xs.length; i < len; i++) {
  202. var x = xs[i];
  203. if (pred(x, i, xs)) {
  204. return Option.some(x);
  205. }
  206. }
  207. return Option.none();
  208. };
  209. var push = Array.prototype.push;
  210. var flatten = function (xs) {
  211. var r = [];
  212. for (var i = 0, len = xs.length; i < len; ++i) {
  213. if (!Array.prototype.isPrototypeOf(xs[i]))
  214. throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);
  215. push.apply(r, xs[i]);
  216. }
  217. return r;
  218. };
  219. var bind = function (xs, f) {
  220. var output = map(xs, f);
  221. return flatten(output);
  222. };
  223. var from$1 = isFunction(Array.from) ? Array.from : function (x) {
  224. return slice.call(x);
  225. };
  226. var isArray = global$1.isArray;
  227. var UserDefined = 'User Defined';
  228. var getDefaultCharMap = function () {
  229. return [
  230. {
  231. name: 'Currency',
  232. characters: [
  233. [
  234. 36,
  235. 'dollar sign'
  236. ],
  237. [
  238. 162,
  239. 'cent sign'
  240. ],
  241. [
  242. 8364,
  243. 'euro sign'
  244. ],
  245. [
  246. 163,
  247. 'pound sign'
  248. ],
  249. [
  250. 165,
  251. 'yen sign'
  252. ],
  253. [
  254. 164,
  255. 'currency sign'
  256. ],
  257. [
  258. 8352,
  259. 'euro-currency sign'
  260. ],
  261. [
  262. 8353,
  263. 'colon sign'
  264. ],
  265. [
  266. 8354,
  267. 'cruzeiro sign'
  268. ],
  269. [
  270. 8355,
  271. 'french franc sign'
  272. ],
  273. [
  274. 8356,
  275. 'lira sign'
  276. ],
  277. [
  278. 8357,
  279. 'mill sign'
  280. ],
  281. [
  282. 8358,
  283. 'naira sign'
  284. ],
  285. [
  286. 8359,
  287. 'peseta sign'
  288. ],
  289. [
  290. 8360,
  291. 'rupee sign'
  292. ],
  293. [
  294. 8361,
  295. 'won sign'
  296. ],
  297. [
  298. 8362,
  299. 'new sheqel sign'
  300. ],
  301. [
  302. 8363,
  303. 'dong sign'
  304. ],
  305. [
  306. 8365,
  307. 'kip sign'
  308. ],
  309. [
  310. 8366,
  311. 'tugrik sign'
  312. ],
  313. [
  314. 8367,
  315. 'drachma sign'
  316. ],
  317. [
  318. 8368,
  319. 'german penny symbol'
  320. ],
  321. [
  322. 8369,
  323. 'peso sign'
  324. ],
  325. [
  326. 8370,
  327. 'guarani sign'
  328. ],
  329. [
  330. 8371,
  331. 'austral sign'
  332. ],
  333. [
  334. 8372,
  335. 'hryvnia sign'
  336. ],
  337. [
  338. 8373,
  339. 'cedi sign'
  340. ],
  341. [
  342. 8374,
  343. 'livre tournois sign'
  344. ],
  345. [
  346. 8375,
  347. 'spesmilo sign'
  348. ],
  349. [
  350. 8376,
  351. 'tenge sign'
  352. ],
  353. [
  354. 8377,
  355. 'indian rupee sign'
  356. ],
  357. [
  358. 8378,
  359. 'turkish lira sign'
  360. ],
  361. [
  362. 8379,
  363. 'nordic mark sign'
  364. ],
  365. [
  366. 8380,
  367. 'manat sign'
  368. ],
  369. [
  370. 8381,
  371. 'ruble sign'
  372. ],
  373. [
  374. 20870,
  375. 'yen character'
  376. ],
  377. [
  378. 20803,
  379. 'yuan character'
  380. ],
  381. [
  382. 22291,
  383. 'yuan character, in hong kong and taiwan'
  384. ],
  385. [
  386. 22278,
  387. 'yen/yuan character variant one'
  388. ]
  389. ]
  390. },
  391. {
  392. name: 'Text',
  393. characters: [
  394. [
  395. 169,
  396. 'copyright sign'
  397. ],
  398. [
  399. 174,
  400. 'registered sign'
  401. ],
  402. [
  403. 8482,
  404. 'trade mark sign'
  405. ],
  406. [
  407. 8240,
  408. 'per mille sign'
  409. ],
  410. [
  411. 181,
  412. 'micro sign'
  413. ],
  414. [
  415. 183,
  416. 'middle dot'
  417. ],
  418. [
  419. 8226,
  420. 'bullet'
  421. ],
  422. [
  423. 8230,
  424. 'three dot leader'
  425. ],
  426. [
  427. 8242,
  428. 'minutes / feet'
  429. ],
  430. [
  431. 8243,
  432. 'seconds / inches'
  433. ],
  434. [
  435. 167,
  436. 'section sign'
  437. ],
  438. [
  439. 182,
  440. 'paragraph sign'
  441. ],
  442. [
  443. 223,
  444. 'sharp s / ess-zed'
  445. ]
  446. ]
  447. },
  448. {
  449. name: 'Quotations',
  450. characters: [
  451. [
  452. 8249,
  453. 'single left-pointing angle quotation mark'
  454. ],
  455. [
  456. 8250,
  457. 'single right-pointing angle quotation mark'
  458. ],
  459. [
  460. 171,
  461. 'left pointing guillemet'
  462. ],
  463. [
  464. 187,
  465. 'right pointing guillemet'
  466. ],
  467. [
  468. 8216,
  469. 'left single quotation mark'
  470. ],
  471. [
  472. 8217,
  473. 'right single quotation mark'
  474. ],
  475. [
  476. 8220,
  477. 'left double quotation mark'
  478. ],
  479. [
  480. 8221,
  481. 'right double quotation mark'
  482. ],
  483. [
  484. 8218,
  485. 'single low-9 quotation mark'
  486. ],
  487. [
  488. 8222,
  489. 'double low-9 quotation mark'
  490. ],
  491. [
  492. 60,
  493. 'less-than sign'
  494. ],
  495. [
  496. 62,
  497. 'greater-than sign'
  498. ],
  499. [
  500. 8804,
  501. 'less-than or equal to'
  502. ],
  503. [
  504. 8805,
  505. 'greater-than or equal to'
  506. ],
  507. [
  508. 8211,
  509. 'en dash'
  510. ],
  511. [
  512. 8212,
  513. 'em dash'
  514. ],
  515. [
  516. 175,
  517. 'macron'
  518. ],
  519. [
  520. 8254,
  521. 'overline'
  522. ],
  523. [
  524. 164,
  525. 'currency sign'
  526. ],
  527. [
  528. 166,
  529. 'broken bar'
  530. ],
  531. [
  532. 168,
  533. 'diaeresis'
  534. ],
  535. [
  536. 161,
  537. 'inverted exclamation mark'
  538. ],
  539. [
  540. 191,
  541. 'turned question mark'
  542. ],
  543. [
  544. 710,
  545. 'circumflex accent'
  546. ],
  547. [
  548. 732,
  549. 'small tilde'
  550. ],
  551. [
  552. 176,
  553. 'degree sign'
  554. ],
  555. [
  556. 8722,
  557. 'minus sign'
  558. ],
  559. [
  560. 177,
  561. 'plus-minus sign'
  562. ],
  563. [
  564. 247,
  565. 'division sign'
  566. ],
  567. [
  568. 8260,
  569. 'fraction slash'
  570. ],
  571. [
  572. 215,
  573. 'multiplication sign'
  574. ],
  575. [
  576. 185,
  577. 'superscript one'
  578. ],
  579. [
  580. 178,
  581. 'superscript two'
  582. ],
  583. [
  584. 179,
  585. 'superscript three'
  586. ],
  587. [
  588. 188,
  589. 'fraction one quarter'
  590. ],
  591. [
  592. 189,
  593. 'fraction one half'
  594. ],
  595. [
  596. 190,
  597. 'fraction three quarters'
  598. ]
  599. ]
  600. },
  601. {
  602. name: 'Mathematical',
  603. characters: [
  604. [
  605. 402,
  606. 'function / florin'
  607. ],
  608. [
  609. 8747,
  610. 'integral'
  611. ],
  612. [
  613. 8721,
  614. 'n-ary sumation'
  615. ],
  616. [
  617. 8734,
  618. 'infinity'
  619. ],
  620. [
  621. 8730,
  622. 'square root'
  623. ],
  624. [
  625. 8764,
  626. 'similar to'
  627. ],
  628. [
  629. 8773,
  630. 'approximately equal to'
  631. ],
  632. [
  633. 8776,
  634. 'almost equal to'
  635. ],
  636. [
  637. 8800,
  638. 'not equal to'
  639. ],
  640. [
  641. 8801,
  642. 'identical to'
  643. ],
  644. [
  645. 8712,
  646. 'element of'
  647. ],
  648. [
  649. 8713,
  650. 'not an element of'
  651. ],
  652. [
  653. 8715,
  654. 'contains as member'
  655. ],
  656. [
  657. 8719,
  658. 'n-ary product'
  659. ],
  660. [
  661. 8743,
  662. 'logical and'
  663. ],
  664. [
  665. 8744,
  666. 'logical or'
  667. ],
  668. [
  669. 172,
  670. 'not sign'
  671. ],
  672. [
  673. 8745,
  674. 'intersection'
  675. ],
  676. [
  677. 8746,
  678. 'union'
  679. ],
  680. [
  681. 8706,
  682. 'partial differential'
  683. ],
  684. [
  685. 8704,
  686. 'for all'
  687. ],
  688. [
  689. 8707,
  690. 'there exists'
  691. ],
  692. [
  693. 8709,
  694. 'diameter'
  695. ],
  696. [
  697. 8711,
  698. 'backward difference'
  699. ],
  700. [
  701. 8727,
  702. 'asterisk operator'
  703. ],
  704. [
  705. 8733,
  706. 'proportional to'
  707. ],
  708. [
  709. 8736,
  710. 'angle'
  711. ]
  712. ]
  713. },
  714. {
  715. name: 'Extended Latin',
  716. characters: [
  717. [
  718. 192,
  719. 'A - grave'
  720. ],
  721. [
  722. 193,
  723. 'A - acute'
  724. ],
  725. [
  726. 194,
  727. 'A - circumflex'
  728. ],
  729. [
  730. 195,
  731. 'A - tilde'
  732. ],
  733. [
  734. 196,
  735. 'A - diaeresis'
  736. ],
  737. [
  738. 197,
  739. 'A - ring above'
  740. ],
  741. [
  742. 256,
  743. 'A - macron'
  744. ],
  745. [
  746. 198,
  747. 'ligature AE'
  748. ],
  749. [
  750. 199,
  751. 'C - cedilla'
  752. ],
  753. [
  754. 200,
  755. 'E - grave'
  756. ],
  757. [
  758. 201,
  759. 'E - acute'
  760. ],
  761. [
  762. 202,
  763. 'E - circumflex'
  764. ],
  765. [
  766. 203,
  767. 'E - diaeresis'
  768. ],
  769. [
  770. 274,
  771. 'E - macron'
  772. ],
  773. [
  774. 204,
  775. 'I - grave'
  776. ],
  777. [
  778. 205,
  779. 'I - acute'
  780. ],
  781. [
  782. 206,
  783. 'I - circumflex'
  784. ],
  785. [
  786. 207,
  787. 'I - diaeresis'
  788. ],
  789. [
  790. 298,
  791. 'I - macron'
  792. ],
  793. [
  794. 208,
  795. 'ETH'
  796. ],
  797. [
  798. 209,
  799. 'N - tilde'
  800. ],
  801. [
  802. 210,
  803. 'O - grave'
  804. ],
  805. [
  806. 211,
  807. 'O - acute'
  808. ],
  809. [
  810. 212,
  811. 'O - circumflex'
  812. ],
  813. [
  814. 213,
  815. 'O - tilde'
  816. ],
  817. [
  818. 214,
  819. 'O - diaeresis'
  820. ],
  821. [
  822. 216,
  823. 'O - slash'
  824. ],
  825. [
  826. 332,
  827. 'O - macron'
  828. ],
  829. [
  830. 338,
  831. 'ligature OE'
  832. ],
  833. [
  834. 352,
  835. 'S - caron'
  836. ],
  837. [
  838. 217,
  839. 'U - grave'
  840. ],
  841. [
  842. 218,
  843. 'U - acute'
  844. ],
  845. [
  846. 219,
  847. 'U - circumflex'
  848. ],
  849. [
  850. 220,
  851. 'U - diaeresis'
  852. ],
  853. [
  854. 362,
  855. 'U - macron'
  856. ],
  857. [
  858. 221,
  859. 'Y - acute'
  860. ],
  861. [
  862. 376,
  863. 'Y - diaeresis'
  864. ],
  865. [
  866. 562,
  867. 'Y - macron'
  868. ],
  869. [
  870. 222,
  871. 'THORN'
  872. ],
  873. [
  874. 224,
  875. 'a - grave'
  876. ],
  877. [
  878. 225,
  879. 'a - acute'
  880. ],
  881. [
  882. 226,
  883. 'a - circumflex'
  884. ],
  885. [
  886. 227,
  887. 'a - tilde'
  888. ],
  889. [
  890. 228,
  891. 'a - diaeresis'
  892. ],
  893. [
  894. 229,
  895. 'a - ring above'
  896. ],
  897. [
  898. 257,
  899. 'a - macron'
  900. ],
  901. [
  902. 230,
  903. 'ligature ae'
  904. ],
  905. [
  906. 231,
  907. 'c - cedilla'
  908. ],
  909. [
  910. 232,
  911. 'e - grave'
  912. ],
  913. [
  914. 233,
  915. 'e - acute'
  916. ],
  917. [
  918. 234,
  919. 'e - circumflex'
  920. ],
  921. [
  922. 235,
  923. 'e - diaeresis'
  924. ],
  925. [
  926. 275,
  927. 'e - macron'
  928. ],
  929. [
  930. 236,
  931. 'i - grave'
  932. ],
  933. [
  934. 237,
  935. 'i - acute'
  936. ],
  937. [
  938. 238,
  939. 'i - circumflex'
  940. ],
  941. [
  942. 239,
  943. 'i - diaeresis'
  944. ],
  945. [
  946. 299,
  947. 'i - macron'
  948. ],
  949. [
  950. 240,
  951. 'eth'
  952. ],
  953. [
  954. 241,
  955. 'n - tilde'
  956. ],
  957. [
  958. 242,
  959. 'o - grave'
  960. ],
  961. [
  962. 243,
  963. 'o - acute'
  964. ],
  965. [
  966. 244,
  967. 'o - circumflex'
  968. ],
  969. [
  970. 245,
  971. 'o - tilde'
  972. ],
  973. [
  974. 246,
  975. 'o - diaeresis'
  976. ],
  977. [
  978. 248,
  979. 'o slash'
  980. ],
  981. [
  982. 333,
  983. 'o macron'
  984. ],
  985. [
  986. 339,
  987. 'ligature oe'
  988. ],
  989. [
  990. 353,
  991. 's - caron'
  992. ],
  993. [
  994. 249,
  995. 'u - grave'
  996. ],
  997. [
  998. 250,
  999. 'u - acute'
  1000. ],
  1001. [
  1002. 251,
  1003. 'u - circumflex'
  1004. ],
  1005. [
  1006. 252,
  1007. 'u - diaeresis'
  1008. ],
  1009. [
  1010. 363,
  1011. 'u - macron'
  1012. ],
  1013. [
  1014. 253,
  1015. 'y - acute'
  1016. ],
  1017. [
  1018. 254,
  1019. 'thorn'
  1020. ],
  1021. [
  1022. 255,
  1023. 'y - diaeresis'
  1024. ],
  1025. [
  1026. 563,
  1027. 'y - macron'
  1028. ],
  1029. [
  1030. 913,
  1031. 'Alpha'
  1032. ],
  1033. [
  1034. 914,
  1035. 'Beta'
  1036. ],
  1037. [
  1038. 915,
  1039. 'Gamma'
  1040. ],
  1041. [
  1042. 916,
  1043. 'Delta'
  1044. ],
  1045. [
  1046. 917,
  1047. 'Epsilon'
  1048. ],
  1049. [
  1050. 918,
  1051. 'Zeta'
  1052. ],
  1053. [
  1054. 919,
  1055. 'Eta'
  1056. ],
  1057. [
  1058. 920,
  1059. 'Theta'
  1060. ],
  1061. [
  1062. 921,
  1063. 'Iota'
  1064. ],
  1065. [
  1066. 922,
  1067. 'Kappa'
  1068. ],
  1069. [
  1070. 923,
  1071. 'Lambda'
  1072. ],
  1073. [
  1074. 924,
  1075. 'Mu'
  1076. ],
  1077. [
  1078. 925,
  1079. 'Nu'
  1080. ],
  1081. [
  1082. 926,
  1083. 'Xi'
  1084. ],
  1085. [
  1086. 927,
  1087. 'Omicron'
  1088. ],
  1089. [
  1090. 928,
  1091. 'Pi'
  1092. ],
  1093. [
  1094. 929,
  1095. 'Rho'
  1096. ],
  1097. [
  1098. 931,
  1099. 'Sigma'
  1100. ],
  1101. [
  1102. 932,
  1103. 'Tau'
  1104. ],
  1105. [
  1106. 933,
  1107. 'Upsilon'
  1108. ],
  1109. [
  1110. 934,
  1111. 'Phi'
  1112. ],
  1113. [
  1114. 935,
  1115. 'Chi'
  1116. ],
  1117. [
  1118. 936,
  1119. 'Psi'
  1120. ],
  1121. [
  1122. 937,
  1123. 'Omega'
  1124. ],
  1125. [
  1126. 945,
  1127. 'alpha'
  1128. ],
  1129. [
  1130. 946,
  1131. 'beta'
  1132. ],
  1133. [
  1134. 947,
  1135. 'gamma'
  1136. ],
  1137. [
  1138. 948,
  1139. 'delta'
  1140. ],
  1141. [
  1142. 949,
  1143. 'epsilon'
  1144. ],
  1145. [
  1146. 950,
  1147. 'zeta'
  1148. ],
  1149. [
  1150. 951,
  1151. 'eta'
  1152. ],
  1153. [
  1154. 952,
  1155. 'theta'
  1156. ],
  1157. [
  1158. 953,
  1159. 'iota'
  1160. ],
  1161. [
  1162. 954,
  1163. 'kappa'
  1164. ],
  1165. [
  1166. 955,
  1167. 'lambda'
  1168. ],
  1169. [
  1170. 956,
  1171. 'mu'
  1172. ],
  1173. [
  1174. 957,
  1175. 'nu'
  1176. ],
  1177. [
  1178. 958,
  1179. 'xi'
  1180. ],
  1181. [
  1182. 959,
  1183. 'omicron'
  1184. ],
  1185. [
  1186. 960,
  1187. 'pi'
  1188. ],
  1189. [
  1190. 961,
  1191. 'rho'
  1192. ],
  1193. [
  1194. 962,
  1195. 'final sigma'
  1196. ],
  1197. [
  1198. 963,
  1199. 'sigma'
  1200. ],
  1201. [
  1202. 964,
  1203. 'tau'
  1204. ],
  1205. [
  1206. 965,
  1207. 'upsilon'
  1208. ],
  1209. [
  1210. 966,
  1211. 'phi'
  1212. ],
  1213. [
  1214. 967,
  1215. 'chi'
  1216. ],
  1217. [
  1218. 968,
  1219. 'psi'
  1220. ],
  1221. [
  1222. 969,
  1223. 'omega'
  1224. ]
  1225. ]
  1226. },
  1227. {
  1228. name: 'Symbols',
  1229. characters: [
  1230. [
  1231. 8501,
  1232. 'alef symbol'
  1233. ],
  1234. [
  1235. 982,
  1236. 'pi symbol'
  1237. ],
  1238. [
  1239. 8476,
  1240. 'real part symbol'
  1241. ],
  1242. [
  1243. 978,
  1244. 'upsilon - hook symbol'
  1245. ],
  1246. [
  1247. 8472,
  1248. 'Weierstrass p'
  1249. ],
  1250. [
  1251. 8465,
  1252. 'imaginary part'
  1253. ]
  1254. ]
  1255. },
  1256. {
  1257. name: 'Arrows',
  1258. characters: [
  1259. [
  1260. 8592,
  1261. 'leftwards arrow'
  1262. ],
  1263. [
  1264. 8593,
  1265. 'upwards arrow'
  1266. ],
  1267. [
  1268. 8594,
  1269. 'rightwards arrow'
  1270. ],
  1271. [
  1272. 8595,
  1273. 'downwards arrow'
  1274. ],
  1275. [
  1276. 8596,
  1277. 'left right arrow'
  1278. ],
  1279. [
  1280. 8629,
  1281. 'carriage return'
  1282. ],
  1283. [
  1284. 8656,
  1285. 'leftwards double arrow'
  1286. ],
  1287. [
  1288. 8657,
  1289. 'upwards double arrow'
  1290. ],
  1291. [
  1292. 8658,
  1293. 'rightwards double arrow'
  1294. ],
  1295. [
  1296. 8659,
  1297. 'downwards double arrow'
  1298. ],
  1299. [
  1300. 8660,
  1301. 'left right double arrow'
  1302. ],
  1303. [
  1304. 8756,
  1305. 'therefore'
  1306. ],
  1307. [
  1308. 8834,
  1309. 'subset of'
  1310. ],
  1311. [
  1312. 8835,
  1313. 'superset of'
  1314. ],
  1315. [
  1316. 8836,
  1317. 'not a subset of'
  1318. ],
  1319. [
  1320. 8838,
  1321. 'subset of or equal to'
  1322. ],
  1323. [
  1324. 8839,
  1325. 'superset of or equal to'
  1326. ],
  1327. [
  1328. 8853,
  1329. 'circled plus'
  1330. ],
  1331. [
  1332. 8855,
  1333. 'circled times'
  1334. ],
  1335. [
  1336. 8869,
  1337. 'perpendicular'
  1338. ],
  1339. [
  1340. 8901,
  1341. 'dot operator'
  1342. ],
  1343. [
  1344. 8968,
  1345. 'left ceiling'
  1346. ],
  1347. [
  1348. 8969,
  1349. 'right ceiling'
  1350. ],
  1351. [
  1352. 8970,
  1353. 'left floor'
  1354. ],
  1355. [
  1356. 8971,
  1357. 'right floor'
  1358. ],
  1359. [
  1360. 9001,
  1361. 'left-pointing angle bracket'
  1362. ],
  1363. [
  1364. 9002,
  1365. 'right-pointing angle bracket'
  1366. ],
  1367. [
  1368. 9674,
  1369. 'lozenge'
  1370. ],
  1371. [
  1372. 9824,
  1373. 'black spade suit'
  1374. ],
  1375. [
  1376. 9827,
  1377. 'black club suit'
  1378. ],
  1379. [
  1380. 9829,
  1381. 'black heart suit'
  1382. ],
  1383. [
  1384. 9830,
  1385. 'black diamond suit'
  1386. ],
  1387. [
  1388. 8194,
  1389. 'en space'
  1390. ],
  1391. [
  1392. 8195,
  1393. 'em space'
  1394. ],
  1395. [
  1396. 8201,
  1397. 'thin space'
  1398. ],
  1399. [
  1400. 8204,
  1401. 'zero width non-joiner'
  1402. ],
  1403. [
  1404. 8205,
  1405. 'zero width joiner'
  1406. ],
  1407. [
  1408. 8206,
  1409. 'left-to-right mark'
  1410. ],
  1411. [
  1412. 8207,
  1413. 'right-to-left mark'
  1414. ]
  1415. ]
  1416. }
  1417. ];
  1418. };
  1419. var charmapFilter = function (charmap) {
  1420. return global$1.grep(charmap, function (item) {
  1421. return isArray(item) && item.length === 2;
  1422. });
  1423. };
  1424. var getCharsFromSetting = function (settingValue) {
  1425. if (isArray(settingValue)) {
  1426. return [].concat(charmapFilter(settingValue));
  1427. }
  1428. if (typeof settingValue === 'function') {
  1429. return settingValue();
  1430. }
  1431. return [];
  1432. };
  1433. var extendCharMap = function (editor, charmap) {
  1434. var userCharMap = Settings.getCharMap(editor);
  1435. if (userCharMap) {
  1436. charmap = [{
  1437. name: UserDefined,
  1438. characters: getCharsFromSetting(userCharMap)
  1439. }];
  1440. }
  1441. var userCharMapAppend = Settings.getCharMapAppend(editor);
  1442. if (userCharMapAppend) {
  1443. var userDefinedGroup = global$1.grep(charmap, function (cg) {
  1444. return cg.name === UserDefined;
  1445. });
  1446. if (userDefinedGroup.length) {
  1447. userDefinedGroup[0].characters = [].concat(userDefinedGroup[0].characters).concat(getCharsFromSetting(userCharMapAppend));
  1448. return charmap;
  1449. }
  1450. return [].concat(charmap).concat({
  1451. name: UserDefined,
  1452. characters: getCharsFromSetting(userCharMapAppend)
  1453. });
  1454. }
  1455. return charmap;
  1456. };
  1457. var getCharMap$1 = function (editor) {
  1458. var groups = extendCharMap(editor, getDefaultCharMap());
  1459. return groups.length > 1 ? [{
  1460. name: 'All',
  1461. characters: bind(groups, function (g) {
  1462. return g.characters;
  1463. })
  1464. }].concat(groups) : groups;
  1465. };
  1466. var CharMap = { getCharMap: getCharMap$1 };
  1467. var get = function (editor) {
  1468. var getCharMap = function () {
  1469. return CharMap.getCharMap(editor);
  1470. };
  1471. var insertChar = function (chr) {
  1472. Actions.insertChar(editor, chr);
  1473. };
  1474. return {
  1475. getCharMap: getCharMap,
  1476. insertChar: insertChar
  1477. };
  1478. };
  1479. var Api = { get: get };
  1480. var Cell = function (initial) {
  1481. var value = initial;
  1482. var get = function () {
  1483. return value;
  1484. };
  1485. var set = function (v) {
  1486. value = v;
  1487. };
  1488. var clone = function () {
  1489. return Cell(get());
  1490. };
  1491. return {
  1492. get: get,
  1493. set: set,
  1494. clone: clone
  1495. };
  1496. };
  1497. var last = function (fn, rate) {
  1498. var timer = null;
  1499. var cancel = function () {
  1500. if (timer !== null) {
  1501. domGlobals.clearTimeout(timer);
  1502. timer = null;
  1503. }
  1504. };
  1505. var throttle = function () {
  1506. var args = [];
  1507. for (var _i = 0; _i < arguments.length; _i++) {
  1508. args[_i] = arguments[_i];
  1509. }
  1510. if (timer !== null)
  1511. domGlobals.clearTimeout(timer);
  1512. timer = domGlobals.setTimeout(function () {
  1513. fn.apply(null, args);
  1514. timer = null;
  1515. }, rate);
  1516. };
  1517. return {
  1518. cancel: cancel,
  1519. throttle: throttle
  1520. };
  1521. };
  1522. var contains = function (str, substr) {
  1523. return str.indexOf(substr) !== -1;
  1524. };
  1525. var charMatches = function (charCode, name, lowerCasePattern) {
  1526. if (contains(String.fromCharCode(charCode).toLowerCase(), lowerCasePattern)) {
  1527. return true;
  1528. } else {
  1529. return contains(name.toLowerCase(), lowerCasePattern) || contains(name.toLowerCase().replace(/\s+/g, ''), lowerCasePattern);
  1530. }
  1531. };
  1532. var scan = function (group, pattern) {
  1533. var matches = [];
  1534. var lowerCasePattern = pattern.toLowerCase();
  1535. each(group.characters, function (g) {
  1536. if (charMatches(g[0], g[1], lowerCasePattern)) {
  1537. matches.push(g);
  1538. }
  1539. });
  1540. return map(matches, function (m) {
  1541. return {
  1542. text: m[1],
  1543. value: String.fromCharCode(m[0]),
  1544. icon: String.fromCharCode(m[0])
  1545. };
  1546. });
  1547. };
  1548. var Scan = { scan: scan };
  1549. var patternName = 'pattern';
  1550. var open = function (editor, charMap) {
  1551. var makeGroupItems = function () {
  1552. return [
  1553. {
  1554. label: 'Search',
  1555. type: 'input',
  1556. name: patternName
  1557. },
  1558. {
  1559. type: 'collection',
  1560. name: 'results'
  1561. }
  1562. ];
  1563. };
  1564. var makeTabs = function () {
  1565. return map(charMap, function (charGroup) {
  1566. return {
  1567. title: charGroup.name,
  1568. name: charGroup.name,
  1569. items: makeGroupItems()
  1570. };
  1571. });
  1572. };
  1573. var makePanel = function () {
  1574. return {
  1575. type: 'panel',
  1576. items: makeGroupItems()
  1577. };
  1578. };
  1579. var makeTabPanel = function () {
  1580. return {
  1581. type: 'tabpanel',
  1582. tabs: makeTabs()
  1583. };
  1584. };
  1585. var currentTab = charMap.length === 1 ? Cell(UserDefined) : Cell('All');
  1586. var scanAndSet = function (dialogApi, pattern) {
  1587. find(charMap, function (group) {
  1588. return group.name === currentTab.get();
  1589. }).each(function (f) {
  1590. var items = Scan.scan(f, pattern);
  1591. dialogApi.setData({ results: items });
  1592. });
  1593. };
  1594. var SEARCH_DELAY = 40;
  1595. var updateFilter = last(function (dialogApi) {
  1596. var pattern = dialogApi.getData().pattern;
  1597. scanAndSet(dialogApi, pattern);
  1598. }, SEARCH_DELAY);
  1599. var body = charMap.length === 1 ? makePanel() : makeTabPanel();
  1600. var initialData = {
  1601. pattern: '',
  1602. results: Scan.scan(charMap[0], '')
  1603. };
  1604. var bridgeSpec = {
  1605. title: 'Special Character',
  1606. size: 'normal',
  1607. body: body,
  1608. buttons: [{
  1609. type: 'cancel',
  1610. name: 'close',
  1611. text: 'Close',
  1612. primary: true
  1613. }],
  1614. initialData: initialData,
  1615. onAction: function (api, details) {
  1616. if (details.name === 'results') {
  1617. Actions.insertChar(editor, details.value);
  1618. api.close();
  1619. }
  1620. },
  1621. onTabChange: function (dialogApi, details) {
  1622. currentTab.set(details.newTabName);
  1623. updateFilter.throttle(dialogApi);
  1624. },
  1625. onChange: function (dialogApi, changeData) {
  1626. if (changeData.name === patternName) {
  1627. updateFilter.throttle(dialogApi);
  1628. }
  1629. }
  1630. };
  1631. editor.windowManager.open(bridgeSpec);
  1632. };
  1633. var Dialog = { open: open };
  1634. var register = function (editor, charMap) {
  1635. editor.addCommand('mceShowCharmap', function () {
  1636. Dialog.open(editor, charMap);
  1637. });
  1638. };
  1639. var Commands = { register: register };
  1640. var global$2 = tinymce.util.Tools.resolve('tinymce.util.Promise');
  1641. var init = function (editor, all) {
  1642. editor.ui.registry.addAutocompleter('charmap', {
  1643. ch: ':',
  1644. columns: 'auto',
  1645. minChars: 2,
  1646. fetch: function (pattern, maxResults) {
  1647. return new global$2(function (resolve, reject) {
  1648. resolve(Scan.scan(all, pattern));
  1649. });
  1650. },
  1651. onAction: function (autocompleteApi, rng, value) {
  1652. editor.selection.setRng(rng);
  1653. editor.insertContent(value);
  1654. autocompleteApi.hide();
  1655. }
  1656. });
  1657. };
  1658. var register$1 = function (editor) {
  1659. editor.ui.registry.addButton('charmap', {
  1660. icon: 'insert-character',
  1661. tooltip: 'Special character',
  1662. onAction: function () {
  1663. return editor.execCommand('mceShowCharmap');
  1664. }
  1665. });
  1666. editor.ui.registry.addMenuItem('charmap', {
  1667. icon: 'insert-character',
  1668. text: 'Special character...',
  1669. onAction: function () {
  1670. return editor.execCommand('mceShowCharmap');
  1671. }
  1672. });
  1673. };
  1674. var Buttons = { register: register$1 };
  1675. global.add('charmap', function (editor) {
  1676. var charMap = CharMap.getCharMap(editor);
  1677. Commands.register(editor, charMap);
  1678. Buttons.register(editor);
  1679. init(editor, charMap[0]);
  1680. return Api.get(editor);
  1681. });
  1682. function Plugin () {
  1683. }
  1684. return Plugin;
  1685. }(window));
  1686. })();