| |
| |
| |
|
|
| (function () { |
| 'use strict'; |
|
|
| var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager'); |
|
|
| const fireInsertCustomChar = (editor, chr) => { |
| return editor.dispatch('insertCustomChar', { chr }); |
| }; |
|
|
| const insertChar = (editor, chr) => { |
| const evtChr = fireInsertCustomChar(editor, chr).chr; |
| editor.execCommand('mceInsertContent', false, evtChr); |
| }; |
|
|
| const hasProto = (v, constructor, predicate) => { |
| var _a; |
| if (predicate(v, constructor.prototype)) { |
| return true; |
| } else { |
| return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name; |
| } |
| }; |
| const typeOf = x => { |
| const t = typeof x; |
| if (x === null) { |
| return 'null'; |
| } else if (t === 'object' && Array.isArray(x)) { |
| return 'array'; |
| } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) { |
| return 'string'; |
| } else { |
| return t; |
| } |
| }; |
| const isType = type => value => typeOf(value) === type; |
| const isSimpleType = type => value => typeof value === type; |
| const eq = t => a => t === a; |
| const isArray$1 = isType('array'); |
| const isNull = eq(null); |
| const isUndefined = eq(undefined); |
| const isNullable = a => a === null || a === undefined; |
| const isNonNullable = a => !isNullable(a); |
| const isFunction = isSimpleType('function'); |
|
|
| const constant = value => { |
| return () => { |
| return value; |
| }; |
| }; |
| const never = constant(false); |
|
|
| class Optional { |
| constructor(tag, value) { |
| this.tag = tag; |
| this.value = value; |
| } |
| static some(value) { |
| return new Optional(true, value); |
| } |
| static none() { |
| return Optional.singletonNone; |
| } |
| fold(onNone, onSome) { |
| if (this.tag) { |
| return onSome(this.value); |
| } else { |
| return onNone(); |
| } |
| } |
| isSome() { |
| return this.tag; |
| } |
| isNone() { |
| return !this.tag; |
| } |
| map(mapper) { |
| if (this.tag) { |
| return Optional.some(mapper(this.value)); |
| } else { |
| return Optional.none(); |
| } |
| } |
| bind(binder) { |
| if (this.tag) { |
| return binder(this.value); |
| } else { |
| return Optional.none(); |
| } |
| } |
| exists(predicate) { |
| return this.tag && predicate(this.value); |
| } |
| forall(predicate) { |
| return !this.tag || predicate(this.value); |
| } |
| filter(predicate) { |
| if (!this.tag || predicate(this.value)) { |
| return this; |
| } else { |
| return Optional.none(); |
| } |
| } |
| getOr(replacement) { |
| return this.tag ? this.value : replacement; |
| } |
| or(replacement) { |
| return this.tag ? this : replacement; |
| } |
| getOrThunk(thunk) { |
| return this.tag ? this.value : thunk(); |
| } |
| orThunk(thunk) { |
| return this.tag ? this : thunk(); |
| } |
| getOrDie(message) { |
| if (!this.tag) { |
| throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None'); |
| } else { |
| return this.value; |
| } |
| } |
| static from(value) { |
| return isNonNullable(value) ? Optional.some(value) : Optional.none(); |
| } |
| getOrNull() { |
| return this.tag ? this.value : null; |
| } |
| getOrUndefined() { |
| return this.value; |
| } |
| each(worker) { |
| if (this.tag) { |
| worker(this.value); |
| } |
| } |
| toArray() { |
| return this.tag ? [this.value] : []; |
| } |
| toString() { |
| return this.tag ? `some(${ this.value })` : 'none()'; |
| } |
| } |
| Optional.singletonNone = new Optional(false); |
|
|
| const nativePush = Array.prototype.push; |
| const map = (xs, f) => { |
| const len = xs.length; |
| const r = new Array(len); |
| for (let i = 0; i < len; i++) { |
| const x = xs[i]; |
| r[i] = f(x, i); |
| } |
| return r; |
| }; |
| const each = (xs, f) => { |
| for (let i = 0, len = xs.length; i < len; i++) { |
| const x = xs[i]; |
| f(x, i); |
| } |
| }; |
| const findUntil = (xs, pred, until) => { |
| for (let i = 0, len = xs.length; i < len; i++) { |
| const x = xs[i]; |
| if (pred(x, i)) { |
| return Optional.some(x); |
| } else if (until(x, i)) { |
| break; |
| } |
| } |
| return Optional.none(); |
| }; |
| const find = (xs, pred) => { |
| return findUntil(xs, pred, never); |
| }; |
| const flatten = xs => { |
| const r = []; |
| for (let i = 0, len = xs.length; i < len; ++i) { |
| if (!isArray$1(xs[i])) { |
| throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs); |
| } |
| nativePush.apply(r, xs[i]); |
| } |
| return r; |
| }; |
| const bind = (xs, f) => flatten(map(xs, f)); |
|
|
| var global = tinymce.util.Tools.resolve('tinymce.util.Tools'); |
|
|
| const option = name => editor => editor.options.get(name); |
| const register$2 = editor => { |
| const registerOption = editor.options.register; |
| const charMapProcessor = value => isFunction(value) || isArray$1(value); |
| registerOption('charmap', { processor: charMapProcessor }); |
| registerOption('charmap_append', { processor: charMapProcessor }); |
| }; |
| const getCharMap$1 = option('charmap'); |
| const getCharMapAppend = option('charmap_append'); |
|
|
| const isArray = global.isArray; |
| const UserDefined = 'User Defined'; |
| const getDefaultCharMap = () => { |
| return [ |
| { |
| name: 'Currency', |
| characters: [ |
| [ |
| 36, |
| 'dollar sign' |
| ], |
| [ |
| 162, |
| 'cent sign' |
| ], |
| [ |
| 8364, |
| 'euro sign' |
| ], |
| [ |
| 163, |
| 'pound sign' |
| ], |
| [ |
| 165, |
| 'yen sign' |
| ], |
| [ |
| 164, |
| 'currency sign' |
| ], |
| [ |
| 8352, |
| 'euro-currency sign' |
| ], |
| [ |
| 8353, |
| 'colon sign' |
| ], |
| [ |
| 8354, |
| 'cruzeiro sign' |
| ], |
| [ |
| 8355, |
| 'french franc sign' |
| ], |
| [ |
| 8356, |
| 'lira sign' |
| ], |
| [ |
| 8357, |
| 'mill sign' |
| ], |
| [ |
| 8358, |
| 'naira sign' |
| ], |
| [ |
| 8359, |
| 'peseta sign' |
| ], |
| [ |
| 8360, |
| 'rupee sign' |
| ], |
| [ |
| 8361, |
| 'won sign' |
| ], |
| [ |
| 8362, |
| 'new sheqel sign' |
| ], |
| [ |
| 8363, |
| 'dong sign' |
| ], |
| [ |
| 8365, |
| 'kip sign' |
| ], |
| [ |
| 8366, |
| 'tugrik sign' |
| ], |
| [ |
| 8367, |
| 'drachma sign' |
| ], |
| [ |
| 8368, |
| 'german penny symbol' |
| ], |
| [ |
| 8369, |
| 'peso sign' |
| ], |
| [ |
| 8370, |
| 'guarani sign' |
| ], |
| [ |
| 8371, |
| 'austral sign' |
| ], |
| [ |
| 8372, |
| 'hryvnia sign' |
| ], |
| [ |
| 8373, |
| 'cedi sign' |
| ], |
| [ |
| 8374, |
| 'livre tournois sign' |
| ], |
| [ |
| 8375, |
| 'spesmilo sign' |
| ], |
| [ |
| 8376, |
| 'tenge sign' |
| ], |
| [ |
| 8377, |
| 'indian rupee sign' |
| ], |
| [ |
| 8378, |
| 'turkish lira sign' |
| ], |
| [ |
| 8379, |
| 'nordic mark sign' |
| ], |
| [ |
| 8380, |
| 'manat sign' |
| ], |
| [ |
| 8381, |
| 'ruble sign' |
| ], |
| [ |
| 20870, |
| 'yen character' |
| ], |
| [ |
| 20803, |
| 'yuan character' |
| ], |
| [ |
| 22291, |
| 'yuan character, in hong kong and taiwan' |
| ], |
| [ |
| 22278, |
| 'yen/yuan character variant one' |
| ] |
| ] |
| }, |
| { |
| name: 'Text', |
| characters: [ |
| [ |
| 169, |
| 'copyright sign' |
| ], |
| [ |
| 174, |
| 'registered sign' |
| ], |
| [ |
| 8482, |
| 'trade mark sign' |
| ], |
| [ |
| 8240, |
| 'per mille sign' |
| ], |
| [ |
| 181, |
| 'micro sign' |
| ], |
| [ |
| 183, |
| 'middle dot' |
| ], |
| [ |
| 8226, |
| 'bullet' |
| ], |
| [ |
| 8230, |
| 'three dot leader' |
| ], |
| [ |
| 8242, |
| 'minutes / feet' |
| ], |
| [ |
| 8243, |
| 'seconds / inches' |
| ], |
| [ |
| 167, |
| 'section sign' |
| ], |
| [ |
| 182, |
| 'paragraph sign' |
| ], |
| [ |
| 223, |
| 'sharp s / ess-zed' |
| ] |
| ] |
| }, |
| { |
| name: 'Quotations', |
| characters: [ |
| [ |
| 8249, |
| 'single left-pointing angle quotation mark' |
| ], |
| [ |
| 8250, |
| 'single right-pointing angle quotation mark' |
| ], |
| [ |
| 171, |
| 'left pointing guillemet' |
| ], |
| [ |
| 187, |
| 'right pointing guillemet' |
| ], |
| [ |
| 8216, |
| 'left single quotation mark' |
| ], |
| [ |
| 8217, |
| 'right single quotation mark' |
| ], |
| [ |
| 8220, |
| 'left double quotation mark' |
| ], |
| [ |
| 8221, |
| 'right double quotation mark' |
| ], |
| [ |
| 8218, |
| 'single low-9 quotation mark' |
| ], |
| [ |
| 8222, |
| 'double low-9 quotation mark' |
| ], |
| [ |
| 60, |
| 'less-than sign' |
| ], |
| [ |
| 62, |
| 'greater-than sign' |
| ], |
| [ |
| 8804, |
| 'less-than or equal to' |
| ], |
| [ |
| 8805, |
| 'greater-than or equal to' |
| ], |
| [ |
| 8211, |
| 'en dash' |
| ], |
| [ |
| 8212, |
| 'em dash' |
| ], |
| [ |
| 175, |
| 'macron' |
| ], |
| [ |
| 8254, |
| 'overline' |
| ], |
| [ |
| 164, |
| 'currency sign' |
| ], |
| [ |
| 166, |
| 'broken bar' |
| ], |
| [ |
| 168, |
| 'diaeresis' |
| ], |
| [ |
| 161, |
| 'inverted exclamation mark' |
| ], |
| [ |
| 191, |
| 'turned question mark' |
| ], |
| [ |
| 710, |
| 'circumflex accent' |
| ], |
| [ |
| 732, |
| 'small tilde' |
| ], |
| [ |
| 176, |
| 'degree sign' |
| ], |
| [ |
| 8722, |
| 'minus sign' |
| ], |
| [ |
| 177, |
| 'plus-minus sign' |
| ], |
| [ |
| 247, |
| 'division sign' |
| ], |
| [ |
| 8260, |
| 'fraction slash' |
| ], |
| [ |
| 215, |
| 'multiplication sign' |
| ], |
| [ |
| 185, |
| 'superscript one' |
| ], |
| [ |
| 178, |
| 'superscript two' |
| ], |
| [ |
| 179, |
| 'superscript three' |
| ], |
| [ |
| 188, |
| 'fraction one quarter' |
| ], |
| [ |
| 189, |
| 'fraction one half' |
| ], |
| [ |
| 190, |
| 'fraction three quarters' |
| ] |
| ] |
| }, |
| { |
| name: 'Mathematical', |
| characters: [ |
| [ |
| 402, |
| 'function / florin' |
| ], |
| [ |
| 8747, |
| 'integral' |
| ], |
| [ |
| 8721, |
| 'n-ary sumation' |
| ], |
| [ |
| 8734, |
| 'infinity' |
| ], |
| [ |
| 8730, |
| 'square root' |
| ], |
| [ |
| 8764, |
| 'similar to' |
| ], |
| [ |
| 8773, |
| 'approximately equal to' |
| ], |
| [ |
| 8776, |
| 'almost equal to' |
| ], |
| [ |
| 8800, |
| 'not equal to' |
| ], |
| [ |
| 8801, |
| 'identical to' |
| ], |
| [ |
| 8712, |
| 'element of' |
| ], |
| [ |
| 8713, |
| 'not an element of' |
| ], |
| [ |
| 8715, |
| 'contains as member' |
| ], |
| [ |
| 8719, |
| 'n-ary product' |
| ], |
| [ |
| 8743, |
| 'logical and' |
| ], |
| [ |
| 8744, |
| 'logical or' |
| ], |
| [ |
| 172, |
| 'not sign' |
| ], |
| [ |
| 8745, |
| 'intersection' |
| ], |
| [ |
| 8746, |
| 'union' |
| ], |
| [ |
| 8706, |
| 'partial differential' |
| ], |
| [ |
| 8704, |
| 'for all' |
| ], |
| [ |
| 8707, |
| 'there exists' |
| ], |
| [ |
| 8709, |
| 'diameter' |
| ], |
| [ |
| 8711, |
| 'backward difference' |
| ], |
| [ |
| 8727, |
| 'asterisk operator' |
| ], |
| [ |
| 8733, |
| 'proportional to' |
| ], |
| [ |
| 8736, |
| 'angle' |
| ] |
| ] |
| }, |
| { |
| name: 'Extended Latin', |
| characters: [ |
| [ |
| 192, |
| 'A - grave' |
| ], |
| [ |
| 193, |
| 'A - acute' |
| ], |
| [ |
| 194, |
| 'A - circumflex' |
| ], |
| [ |
| 195, |
| 'A - tilde' |
| ], |
| [ |
| 196, |
| 'A - diaeresis' |
| ], |
| [ |
| 197, |
| 'A - ring above' |
| ], |
| [ |
| 256, |
| 'A - macron' |
| ], |
| [ |
| 198, |
| 'ligature AE' |
| ], |
| [ |
| 199, |
| 'C - cedilla' |
| ], |
| [ |
| 200, |
| 'E - grave' |
| ], |
| [ |
| 201, |
| 'E - acute' |
| ], |
| [ |
| 202, |
| 'E - circumflex' |
| ], |
| [ |
| 203, |
| 'E - diaeresis' |
| ], |
| [ |
| 274, |
| 'E - macron' |
| ], |
| [ |
| 204, |
| 'I - grave' |
| ], |
| [ |
| 205, |
| 'I - acute' |
| ], |
| [ |
| 206, |
| 'I - circumflex' |
| ], |
| [ |
| 207, |
| 'I - diaeresis' |
| ], |
| [ |
| 298, |
| 'I - macron' |
| ], |
| [ |
| 208, |
| 'ETH' |
| ], |
| [ |
| 209, |
| 'N - tilde' |
| ], |
| [ |
| 210, |
| 'O - grave' |
| ], |
| [ |
| 211, |
| 'O - acute' |
| ], |
| [ |
| 212, |
| 'O - circumflex' |
| ], |
| [ |
| 213, |
| 'O - tilde' |
| ], |
| [ |
| 214, |
| 'O - diaeresis' |
| ], |
| [ |
| 216, |
| 'O - slash' |
| ], |
| [ |
| 332, |
| 'O - macron' |
| ], |
| [ |
| 338, |
| 'ligature OE' |
| ], |
| [ |
| 352, |
| 'S - caron' |
| ], |
| [ |
| 217, |
| 'U - grave' |
| ], |
| [ |
| 218, |
| 'U - acute' |
| ], |
| [ |
| 219, |
| 'U - circumflex' |
| ], |
| [ |
| 220, |
| 'U - diaeresis' |
| ], |
| [ |
| 362, |
| 'U - macron' |
| ], |
| [ |
| 221, |
| 'Y - acute' |
| ], |
| [ |
| 376, |
| 'Y - diaeresis' |
| ], |
| [ |
| 562, |
| 'Y - macron' |
| ], |
| [ |
| 222, |
| 'THORN' |
| ], |
| [ |
| 224, |
| 'a - grave' |
| ], |
| [ |
| 225, |
| 'a - acute' |
| ], |
| [ |
| 226, |
| 'a - circumflex' |
| ], |
| [ |
| 227, |
| 'a - tilde' |
| ], |
| [ |
| 228, |
| 'a - diaeresis' |
| ], |
| [ |
| 229, |
| 'a - ring above' |
| ], |
| [ |
| 257, |
| 'a - macron' |
| ], |
| [ |
| 230, |
| 'ligature ae' |
| ], |
| [ |
| 231, |
| 'c - cedilla' |
| ], |
| [ |
| 232, |
| 'e - grave' |
| ], |
| [ |
| 233, |
| 'e - acute' |
| ], |
| [ |
| 234, |
| 'e - circumflex' |
| ], |
| [ |
| 235, |
| 'e - diaeresis' |
| ], |
| [ |
| 275, |
| 'e - macron' |
| ], |
| [ |
| 236, |
| 'i - grave' |
| ], |
| [ |
| 237, |
| 'i - acute' |
| ], |
| [ |
| 238, |
| 'i - circumflex' |
| ], |
| [ |
| 239, |
| 'i - diaeresis' |
| ], |
| [ |
| 299, |
| 'i - macron' |
| ], |
| [ |
| 240, |
| 'eth' |
| ], |
| [ |
| 241, |
| 'n - tilde' |
| ], |
| [ |
| 242, |
| 'o - grave' |
| ], |
| [ |
| 243, |
| 'o - acute' |
| ], |
| [ |
| 244, |
| 'o - circumflex' |
| ], |
| [ |
| 245, |
| 'o - tilde' |
| ], |
| [ |
| 246, |
| 'o - diaeresis' |
| ], |
| [ |
| 248, |
| 'o slash' |
| ], |
| [ |
| 333, |
| 'o macron' |
| ], |
| [ |
| 339, |
| 'ligature oe' |
| ], |
| [ |
| 353, |
| 's - caron' |
| ], |
| [ |
| 249, |
| 'u - grave' |
| ], |
| [ |
| 250, |
| 'u - acute' |
| ], |
| [ |
| 251, |
| 'u - circumflex' |
| ], |
| [ |
| 252, |
| 'u - diaeresis' |
| ], |
| [ |
| 363, |
| 'u - macron' |
| ], |
| [ |
| 253, |
| 'y - acute' |
| ], |
| [ |
| 254, |
| 'thorn' |
| ], |
| [ |
| 255, |
| 'y - diaeresis' |
| ], |
| [ |
| 563, |
| 'y - macron' |
| ], |
| [ |
| 913, |
| 'Alpha' |
| ], |
| [ |
| 914, |
| 'Beta' |
| ], |
| [ |
| 915, |
| 'Gamma' |
| ], |
| [ |
| 916, |
| 'Delta' |
| ], |
| [ |
| 917, |
| 'Epsilon' |
| ], |
| [ |
| 918, |
| 'Zeta' |
| ], |
| [ |
| 919, |
| 'Eta' |
| ], |
| [ |
| 920, |
| 'Theta' |
| ], |
| [ |
| 921, |
| 'Iota' |
| ], |
| [ |
| 922, |
| 'Kappa' |
| ], |
| [ |
| 923, |
| 'Lambda' |
| ], |
| [ |
| 924, |
| 'Mu' |
| ], |
| [ |
| 925, |
| 'Nu' |
| ], |
| [ |
| 926, |
| 'Xi' |
| ], |
| [ |
| 927, |
| 'Omicron' |
| ], |
| [ |
| 928, |
| 'Pi' |
| ], |
| [ |
| 929, |
| 'Rho' |
| ], |
| [ |
| 931, |
| 'Sigma' |
| ], |
| [ |
| 932, |
| 'Tau' |
| ], |
| [ |
| 933, |
| 'Upsilon' |
| ], |
| [ |
| 934, |
| 'Phi' |
| ], |
| [ |
| 935, |
| 'Chi' |
| ], |
| [ |
| 936, |
| 'Psi' |
| ], |
| [ |
| 937, |
| 'Omega' |
| ], |
| [ |
| 945, |
| 'alpha' |
| ], |
| [ |
| 946, |
| 'beta' |
| ], |
| [ |
| 947, |
| 'gamma' |
| ], |
| [ |
| 948, |
| 'delta' |
| ], |
| [ |
| 949, |
| 'epsilon' |
| ], |
| [ |
| 950, |
| 'zeta' |
| ], |
| [ |
| 951, |
| 'eta' |
| ], |
| [ |
| 952, |
| 'theta' |
| ], |
| [ |
| 953, |
| 'iota' |
| ], |
| [ |
| 954, |
| 'kappa' |
| ], |
| [ |
| 955, |
| 'lambda' |
| ], |
| [ |
| 956, |
| 'mu' |
| ], |
| [ |
| 957, |
| 'nu' |
| ], |
| [ |
| 958, |
| 'xi' |
| ], |
| [ |
| 959, |
| 'omicron' |
| ], |
| [ |
| 960, |
| 'pi' |
| ], |
| [ |
| 961, |
| 'rho' |
| ], |
| [ |
| 962, |
| 'final sigma' |
| ], |
| [ |
| 963, |
| 'sigma' |
| ], |
| [ |
| 964, |
| 'tau' |
| ], |
| [ |
| 965, |
| 'upsilon' |
| ], |
| [ |
| 966, |
| 'phi' |
| ], |
| [ |
| 967, |
| 'chi' |
| ], |
| [ |
| 968, |
| 'psi' |
| ], |
| [ |
| 969, |
| 'omega' |
| ] |
| ] |
| }, |
| { |
| name: 'Symbols', |
| characters: [ |
| [ |
| 8501, |
| 'alef symbol' |
| ], |
| [ |
| 982, |
| 'pi symbol' |
| ], |
| [ |
| 8476, |
| 'real part symbol' |
| ], |
| [ |
| 978, |
| 'upsilon - hook symbol' |
| ], |
| [ |
| 8472, |
| 'Weierstrass p' |
| ], |
| [ |
| 8465, |
| 'imaginary part' |
| ] |
| ] |
| }, |
| { |
| name: 'Arrows', |
| characters: [ |
| [ |
| 8592, |
| 'leftwards arrow' |
| ], |
| [ |
| 8593, |
| 'upwards arrow' |
| ], |
| [ |
| 8594, |
| 'rightwards arrow' |
| ], |
| [ |
| 8595, |
| 'downwards arrow' |
| ], |
| [ |
| 8596, |
| 'left right arrow' |
| ], |
| [ |
| 8629, |
| 'carriage return' |
| ], |
| [ |
| 8656, |
| 'leftwards double arrow' |
| ], |
| [ |
| 8657, |
| 'upwards double arrow' |
| ], |
| [ |
| 8658, |
| 'rightwards double arrow' |
| ], |
| [ |
| 8659, |
| 'downwards double arrow' |
| ], |
| [ |
| 8660, |
| 'left right double arrow' |
| ], |
| [ |
| 8756, |
| 'therefore' |
| ], |
| [ |
| 8834, |
| 'subset of' |
| ], |
| [ |
| 8835, |
| 'superset of' |
| ], |
| [ |
| 8836, |
| 'not a subset of' |
| ], |
| [ |
| 8838, |
| 'subset of or equal to' |
| ], |
| [ |
| 8839, |
| 'superset of or equal to' |
| ], |
| [ |
| 8853, |
| 'circled plus' |
| ], |
| [ |
| 8855, |
| 'circled times' |
| ], |
| [ |
| 8869, |
| 'perpendicular' |
| ], |
| [ |
| 8901, |
| 'dot operator' |
| ], |
| [ |
| 8968, |
| 'left ceiling' |
| ], |
| [ |
| 8969, |
| 'right ceiling' |
| ], |
| [ |
| 8970, |
| 'left floor' |
| ], |
| [ |
| 8971, |
| 'right floor' |
| ], |
| [ |
| 9001, |
| 'left-pointing angle bracket' |
| ], |
| [ |
| 9002, |
| 'right-pointing angle bracket' |
| ], |
| [ |
| 9674, |
| 'lozenge' |
| ], |
| [ |
| 9824, |
| 'black spade suit' |
| ], |
| [ |
| 9827, |
| 'black club suit' |
| ], |
| [ |
| 9829, |
| 'black heart suit' |
| ], |
| [ |
| 9830, |
| 'black diamond suit' |
| ], |
| [ |
| 8194, |
| 'en space' |
| ], |
| [ |
| 8195, |
| 'em space' |
| ], |
| [ |
| 8201, |
| 'thin space' |
| ], |
| [ |
| 8204, |
| 'zero width non-joiner' |
| ], |
| [ |
| 8205, |
| 'zero width joiner' |
| ], |
| [ |
| 8206, |
| 'left-to-right mark' |
| ], |
| [ |
| 8207, |
| 'right-to-left mark' |
| ] |
| ] |
| } |
| ]; |
| }; |
| const charmapFilter = charmap => { |
| return global.grep(charmap, item => { |
| return isArray(item) && item.length === 2; |
| }); |
| }; |
| const getCharsFromOption = optionValue => { |
| if (isArray(optionValue)) { |
| return charmapFilter(optionValue); |
| } |
| if (typeof optionValue === 'function') { |
| return optionValue(); |
| } |
| return []; |
| }; |
| const extendCharMap = (editor, charmap) => { |
| const userCharMap = getCharMap$1(editor); |
| if (userCharMap) { |
| charmap = [{ |
| name: UserDefined, |
| characters: getCharsFromOption(userCharMap) |
| }]; |
| } |
| const userCharMapAppend = getCharMapAppend(editor); |
| if (userCharMapAppend) { |
| const userDefinedGroup = global.grep(charmap, cg => cg.name === UserDefined); |
| if (userDefinedGroup.length) { |
| userDefinedGroup[0].characters = [ |
| ...userDefinedGroup[0].characters, |
| ...getCharsFromOption(userCharMapAppend) |
| ]; |
| return charmap; |
| } |
| return charmap.concat({ |
| name: UserDefined, |
| characters: getCharsFromOption(userCharMapAppend) |
| }); |
| } |
| return charmap; |
| }; |
| const getCharMap = editor => { |
| const groups = extendCharMap(editor, getDefaultCharMap()); |
| return groups.length > 1 ? [{ |
| name: 'All', |
| characters: bind(groups, g => g.characters) |
| }].concat(groups) : groups; |
| }; |
|
|
| const get = editor => { |
| const getCharMap$1 = () => { |
| return getCharMap(editor); |
| }; |
| const insertChar$1 = chr => { |
| insertChar(editor, chr); |
| }; |
| return { |
| getCharMap: getCharMap$1, |
| insertChar: insertChar$1 |
| }; |
| }; |
|
|
| const Cell = initial => { |
| let value = initial; |
| const get = () => { |
| return value; |
| }; |
| const set = v => { |
| value = v; |
| }; |
| return { |
| get, |
| set |
| }; |
| }; |
|
|
| const last = (fn, rate) => { |
| let timer = null; |
| const cancel = () => { |
| if (!isNull(timer)) { |
| clearTimeout(timer); |
| timer = null; |
| } |
| }; |
| const throttle = (...args) => { |
| cancel(); |
| timer = setTimeout(() => { |
| timer = null; |
| fn.apply(null, args); |
| }, rate); |
| }; |
| return { |
| cancel, |
| throttle |
| }; |
| }; |
|
|
| const contains = (str, substr, start = 0, end) => { |
| const idx = str.indexOf(substr, start); |
| if (idx !== -1) { |
| return isUndefined(end) ? true : idx + substr.length <= end; |
| } else { |
| return false; |
| } |
| }; |
| const fromCodePoint = String.fromCodePoint; |
|
|
| const charMatches = (charCode, name, lowerCasePattern) => { |
| if (contains(fromCodePoint(charCode).toLowerCase(), lowerCasePattern)) { |
| return true; |
| } else { |
| return contains(name.toLowerCase(), lowerCasePattern) || contains(name.toLowerCase().replace(/\s+/g, ''), lowerCasePattern); |
| } |
| }; |
| const scan = (group, pattern) => { |
| const matches = []; |
| const lowerCasePattern = pattern.toLowerCase(); |
| each(group.characters, g => { |
| if (charMatches(g[0], g[1], lowerCasePattern)) { |
| matches.push(g); |
| } |
| }); |
| return map(matches, m => ({ |
| text: m[1], |
| value: fromCodePoint(m[0]), |
| icon: fromCodePoint(m[0]) |
| })); |
| }; |
|
|
| const patternName = 'pattern'; |
| const open = (editor, charMap) => { |
| const makeGroupItems = () => [ |
| { |
| label: 'Search', |
| type: 'input', |
| name: patternName |
| }, |
| { |
| type: 'collection', |
| name: 'results' |
| } |
| ]; |
| const makeTabs = () => map(charMap, charGroup => ({ |
| title: charGroup.name, |
| name: charGroup.name, |
| items: makeGroupItems() |
| })); |
| const makePanel = () => ({ |
| type: 'panel', |
| items: makeGroupItems() |
| }); |
| const makeTabPanel = () => ({ |
| type: 'tabpanel', |
| tabs: makeTabs() |
| }); |
| const currentTab = charMap.length === 1 ? Cell(UserDefined) : Cell('All'); |
| const scanAndSet = (dialogApi, pattern) => { |
| find(charMap, group => group.name === currentTab.get()).each(f => { |
| const items = scan(f, pattern); |
| dialogApi.setData({ results: items }); |
| }); |
| }; |
| const SEARCH_DELAY = 40; |
| const updateFilter = last(dialogApi => { |
| const pattern = dialogApi.getData().pattern; |
| scanAndSet(dialogApi, pattern); |
| }, SEARCH_DELAY); |
| const body = charMap.length === 1 ? makePanel() : makeTabPanel(); |
| const initialData = { |
| pattern: '', |
| results: scan(charMap[0], '') |
| }; |
| const bridgeSpec = { |
| title: 'Special Character', |
| size: 'normal', |
| body, |
| buttons: [{ |
| type: 'cancel', |
| name: 'close', |
| text: 'Close', |
| primary: true |
| }], |
| initialData, |
| onAction: (api, details) => { |
| if (details.name === 'results') { |
| insertChar(editor, details.value); |
| api.close(); |
| } |
| }, |
| onTabChange: (dialogApi, details) => { |
| currentTab.set(details.newTabName); |
| updateFilter.throttle(dialogApi); |
| }, |
| onChange: (dialogApi, changeData) => { |
| if (changeData.name === patternName) { |
| updateFilter.throttle(dialogApi); |
| } |
| } |
| }; |
| const dialogApi = editor.windowManager.open(bridgeSpec); |
| dialogApi.focus(patternName); |
| }; |
|
|
| const register$1 = (editor, charMap) => { |
| editor.addCommand('mceShowCharmap', () => { |
| open(editor, charMap); |
| }); |
| }; |
|
|
| const init = (editor, all) => { |
| editor.ui.registry.addAutocompleter('charmap', { |
| trigger: ':', |
| columns: 'auto', |
| minChars: 2, |
| fetch: (pattern, _maxResults) => new Promise((resolve, _reject) => { |
| resolve(scan(all, pattern)); |
| }), |
| onAction: (autocompleteApi, rng, value) => { |
| editor.selection.setRng(rng); |
| editor.insertContent(value); |
| autocompleteApi.hide(); |
| } |
| }); |
| }; |
|
|
| const register = editor => { |
| const onAction = () => editor.execCommand('mceShowCharmap'); |
| editor.ui.registry.addButton('charmap', { |
| icon: 'insert-character', |
| tooltip: 'Special character', |
| onAction |
| }); |
| editor.ui.registry.addMenuItem('charmap', { |
| icon: 'insert-character', |
| text: 'Special character...', |
| onAction |
| }); |
| }; |
|
|
| var Plugin = () => { |
| global$1.add('charmap', editor => { |
| register$2(editor); |
| const charMap = getCharMap(editor); |
| register$1(editor, charMap); |
| register(editor); |
| init(editor, charMap[0]); |
| return get(editor); |
| }); |
| }; |
|
|
| Plugin(); |
|
|
| })(); |
|
|