You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1697 lines
36 KiB
JavaScript
1697 lines
36 KiB
JavaScript
/**
|
|
* Copyright (c) Tiny Technologies, Inc. All rights reserved.
|
|
* Licensed under the LGPL or a commercial license.
|
|
* For LGPL see License.txt in the project root for license information.
|
|
* For commercial licenses see https://www.tiny.cloud/
|
|
*
|
|
* Version: 5.9.2 (2021-09-08)
|
|
*/
|
|
(function () {
|
|
'use strict';
|
|
|
|
var global$2 = tinymce.util.Tools.resolve('tinymce.PluginManager');
|
|
|
|
var fireInsertCustomChar = function (editor, chr) {
|
|
return editor.fire('insertCustomChar', { chr: chr });
|
|
};
|
|
|
|
var insertChar = function (editor, chr) {
|
|
var evtChr = fireInsertCustomChar(editor, chr).chr;
|
|
editor.execCommand('mceInsertContent', false, evtChr);
|
|
};
|
|
|
|
var typeOf = function (x) {
|
|
var t = typeof x;
|
|
if (x === null) {
|
|
return 'null';
|
|
} else if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {
|
|
return 'array';
|
|
} else if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {
|
|
return 'string';
|
|
} else {
|
|
return t;
|
|
}
|
|
};
|
|
var isType = function (type) {
|
|
return function (value) {
|
|
return typeOf(value) === type;
|
|
};
|
|
};
|
|
var eq = function (t) {
|
|
return function (a) {
|
|
return t === a;
|
|
};
|
|
};
|
|
var isArray$1 = isType('array');
|
|
var isNull = eq(null);
|
|
|
|
var noop = function () {
|
|
};
|
|
var constant = function (value) {
|
|
return function () {
|
|
return value;
|
|
};
|
|
};
|
|
var identity = function (x) {
|
|
return x;
|
|
};
|
|
var never = constant(false);
|
|
var always = constant(true);
|
|
|
|
var none = function () {
|
|
return NONE;
|
|
};
|
|
var NONE = function () {
|
|
var call = function (thunk) {
|
|
return thunk();
|
|
};
|
|
var id = identity;
|
|
var me = {
|
|
fold: function (n, _s) {
|
|
return n();
|
|
},
|
|
isSome: never,
|
|
isNone: always,
|
|
getOr: id,
|
|
getOrThunk: call,
|
|
getOrDie: function (msg) {
|
|
throw new Error(msg || 'error: getOrDie called on none.');
|
|
},
|
|
getOrNull: constant(null),
|
|
getOrUndefined: constant(undefined),
|
|
or: id,
|
|
orThunk: call,
|
|
map: none,
|
|
each: noop,
|
|
bind: none,
|
|
exists: never,
|
|
forall: always,
|
|
filter: function () {
|
|
return none();
|
|
},
|
|
toArray: function () {
|
|
return [];
|
|
},
|
|
toString: constant('none()')
|
|
};
|
|
return me;
|
|
}();
|
|
var some = function (a) {
|
|
var constant_a = constant(a);
|
|
var self = function () {
|
|
return me;
|
|
};
|
|
var bind = function (f) {
|
|
return f(a);
|
|
};
|
|
var me = {
|
|
fold: function (n, s) {
|
|
return s(a);
|
|
},
|
|
isSome: always,
|
|
isNone: never,
|
|
getOr: constant_a,
|
|
getOrThunk: constant_a,
|
|
getOrDie: constant_a,
|
|
getOrNull: constant_a,
|
|
getOrUndefined: constant_a,
|
|
or: self,
|
|
orThunk: self,
|
|
map: function (f) {
|
|
return some(f(a));
|
|
},
|
|
each: function (f) {
|
|
f(a);
|
|
},
|
|
bind: bind,
|
|
exists: bind,
|
|
forall: bind,
|
|
filter: function (f) {
|
|
return f(a) ? me : NONE;
|
|
},
|
|
toArray: function () {
|
|
return [a];
|
|
},
|
|
toString: function () {
|
|
return 'some(' + a + ')';
|
|
}
|
|
};
|
|
return me;
|
|
};
|
|
var from = function (value) {
|
|
return value === null || value === undefined ? NONE : some(value);
|
|
};
|
|
var Optional = {
|
|
some: some,
|
|
none: none,
|
|
from: from
|
|
};
|
|
|
|
var nativePush = Array.prototype.push;
|
|
var map = function (xs, f) {
|
|
var len = xs.length;
|
|
var r = new Array(len);
|
|
for (var i = 0; i < len; i++) {
|
|
var x = xs[i];
|
|
r[i] = f(x, i);
|
|
}
|
|
return r;
|
|
};
|
|
var each = function (xs, f) {
|
|
for (var i = 0, len = xs.length; i < len; i++) {
|
|
var x = xs[i];
|
|
f(x, i);
|
|
}
|
|
};
|
|
var findUntil = function (xs, pred, until) {
|
|
for (var i = 0, len = xs.length; i < len; i++) {
|
|
var x = xs[i];
|
|
if (pred(x, i)) {
|
|
return Optional.some(x);
|
|
} else if (until(x, i)) {
|
|
break;
|
|
}
|
|
}
|
|
return Optional.none();
|
|
};
|
|
var find = function (xs, pred) {
|
|
return findUntil(xs, pred, never);
|
|
};
|
|
var flatten = function (xs) {
|
|
var r = [];
|
|
for (var 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;
|
|
};
|
|
var bind = function (xs, f) {
|
|
return flatten(map(xs, f));
|
|
};
|
|
|
|
var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');
|
|
|
|
var getCharMap$1 = function (editor) {
|
|
return editor.getParam('charmap');
|
|
};
|
|
var getCharMapAppend = function (editor) {
|
|
return editor.getParam('charmap_append');
|
|
};
|
|
|
|
var isArray = global$1.isArray;
|
|
var UserDefined = 'User Defined';
|
|
var getDefaultCharMap = function () {
|
|
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'
|
|
]
|
|
]
|
|
}
|
|
];
|
|
};
|
|
var charmapFilter = function (charmap) {
|
|
return global$1.grep(charmap, function (item) {
|
|
return isArray(item) && item.length === 2;
|
|
});
|
|
};
|
|
var getCharsFromSetting = function (settingValue) {
|
|
if (isArray(settingValue)) {
|
|
return charmapFilter(settingValue);
|
|
}
|
|
if (typeof settingValue === 'function') {
|
|
return settingValue();
|
|
}
|
|
return [];
|
|
};
|
|
var extendCharMap = function (editor, charmap) {
|
|
var userCharMap = getCharMap$1(editor);
|
|
if (userCharMap) {
|
|
charmap = [{
|
|
name: UserDefined,
|
|
characters: getCharsFromSetting(userCharMap)
|
|
}];
|
|
}
|
|
var userCharMapAppend = getCharMapAppend(editor);
|
|
if (userCharMapAppend) {
|
|
var userDefinedGroup = global$1.grep(charmap, function (cg) {
|
|
return cg.name === UserDefined;
|
|
});
|
|
if (userDefinedGroup.length) {
|
|
userDefinedGroup[0].characters = [].concat(userDefinedGroup[0].characters).concat(getCharsFromSetting(userCharMapAppend));
|
|
return charmap;
|
|
}
|
|
return charmap.concat({
|
|
name: UserDefined,
|
|
characters: getCharsFromSetting(userCharMapAppend)
|
|
});
|
|
}
|
|
return charmap;
|
|
};
|
|
var getCharMap = function (editor) {
|
|
var groups = extendCharMap(editor, getDefaultCharMap());
|
|
return groups.length > 1 ? [{
|
|
name: 'All',
|
|
characters: bind(groups, function (g) {
|
|
return g.characters;
|
|
})
|
|
}].concat(groups) : groups;
|
|
};
|
|
|
|
var get = function (editor) {
|
|
var getCharMap$1 = function () {
|
|
return getCharMap(editor);
|
|
};
|
|
var insertChar$1 = function (chr) {
|
|
insertChar(editor, chr);
|
|
};
|
|
return {
|
|
getCharMap: getCharMap$1,
|
|
insertChar: insertChar$1
|
|
};
|
|
};
|
|
|
|
var Cell = function (initial) {
|
|
var value = initial;
|
|
var get = function () {
|
|
return value;
|
|
};
|
|
var set = function (v) {
|
|
value = v;
|
|
};
|
|
return {
|
|
get: get,
|
|
set: set
|
|
};
|
|
};
|
|
|
|
var last = function (fn, rate) {
|
|
var timer = null;
|
|
var cancel = function () {
|
|
if (!isNull(timer)) {
|
|
clearTimeout(timer);
|
|
timer = null;
|
|
}
|
|
};
|
|
var throttle = function () {
|
|
var args = [];
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
args[_i] = arguments[_i];
|
|
}
|
|
cancel();
|
|
timer = setTimeout(function () {
|
|
timer = null;
|
|
fn.apply(null, args);
|
|
}, rate);
|
|
};
|
|
return {
|
|
cancel: cancel,
|
|
throttle: throttle
|
|
};
|
|
};
|
|
|
|
var nativeFromCodePoint = String.fromCodePoint;
|
|
var contains = function (str, substr) {
|
|
return str.indexOf(substr) !== -1;
|
|
};
|
|
var fromCodePoint = function () {
|
|
var codePoints = [];
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
codePoints[_i] = arguments[_i];
|
|
}
|
|
if (nativeFromCodePoint) {
|
|
return nativeFromCodePoint.apply(void 0, codePoints);
|
|
} else {
|
|
var codeUnits = [];
|
|
var codeLen = 0;
|
|
var result = '';
|
|
for (var index = 0, len = codePoints.length; index !== len; ++index) {
|
|
var codePoint = +codePoints[index];
|
|
if (!(codePoint < 1114111 && codePoint >>> 0 === codePoint)) {
|
|
throw RangeError('Invalid code point: ' + codePoint);
|
|
}
|
|
if (codePoint <= 65535) {
|
|
codeLen = codeUnits.push(codePoint);
|
|
} else {
|
|
codePoint -= 65536;
|
|
codeLen = codeUnits.push((codePoint >> 10) + 55296, codePoint % 1024 + 56320);
|
|
}
|
|
if (codeLen >= 16383) {
|
|
result += String.fromCharCode.apply(null, codeUnits);
|
|
codeUnits.length = 0;
|
|
}
|
|
}
|
|
return result + String.fromCharCode.apply(null, codeUnits);
|
|
}
|
|
};
|
|
|
|
var charMatches = function (charCode, name, lowerCasePattern) {
|
|
if (contains(fromCodePoint(charCode).toLowerCase(), lowerCasePattern)) {
|
|
return true;
|
|
} else {
|
|
return contains(name.toLowerCase(), lowerCasePattern) || contains(name.toLowerCase().replace(/\s+/g, ''), lowerCasePattern);
|
|
}
|
|
};
|
|
var scan = function (group, pattern) {
|
|
var matches = [];
|
|
var lowerCasePattern = pattern.toLowerCase();
|
|
each(group.characters, function (g) {
|
|
if (charMatches(g[0], g[1], lowerCasePattern)) {
|
|
matches.push(g);
|
|
}
|
|
});
|
|
return map(matches, function (m) {
|
|
return {
|
|
text: m[1],
|
|
value: fromCodePoint(m[0]),
|
|
icon: fromCodePoint(m[0])
|
|
};
|
|
});
|
|
};
|
|
|
|
var patternName = 'pattern';
|
|
var open = function (editor, charMap) {
|
|
var makeGroupItems = function () {
|
|
return [
|
|
{
|
|
label: 'Search',
|
|
type: 'input',
|
|
name: patternName
|
|
},
|
|
{
|
|
type: 'collection',
|
|
name: 'results'
|
|
}
|
|
];
|
|
};
|
|
var makeTabs = function () {
|
|
return map(charMap, function (charGroup) {
|
|
return {
|
|
title: charGroup.name,
|
|
name: charGroup.name,
|
|
items: makeGroupItems()
|
|
};
|
|
});
|
|
};
|
|
var makePanel = function () {
|
|
return {
|
|
type: 'panel',
|
|
items: makeGroupItems()
|
|
};
|
|
};
|
|
var makeTabPanel = function () {
|
|
return {
|
|
type: 'tabpanel',
|
|
tabs: makeTabs()
|
|
};
|
|
};
|
|
var currentTab = charMap.length === 1 ? Cell(UserDefined) : Cell('All');
|
|
var scanAndSet = function (dialogApi, pattern) {
|
|
find(charMap, function (group) {
|
|
return group.name === currentTab.get();
|
|
}).each(function (f) {
|
|
var items = scan(f, pattern);
|
|
dialogApi.setData({ results: items });
|
|
});
|
|
};
|
|
var SEARCH_DELAY = 40;
|
|
var updateFilter = last(function (dialogApi) {
|
|
var pattern = dialogApi.getData().pattern;
|
|
scanAndSet(dialogApi, pattern);
|
|
}, SEARCH_DELAY);
|
|
var body = charMap.length === 1 ? makePanel() : makeTabPanel();
|
|
var initialData = {
|
|
pattern: '',
|
|
results: scan(charMap[0], '')
|
|
};
|
|
var bridgeSpec = {
|
|
title: 'Special Character',
|
|
size: 'normal',
|
|
body: body,
|
|
buttons: [{
|
|
type: 'cancel',
|
|
name: 'close',
|
|
text: 'Close',
|
|
primary: true
|
|
}],
|
|
initialData: initialData,
|
|
onAction: function (api, details) {
|
|
if (details.name === 'results') {
|
|
insertChar(editor, details.value);
|
|
api.close();
|
|
}
|
|
},
|
|
onTabChange: function (dialogApi, details) {
|
|
currentTab.set(details.newTabName);
|
|
updateFilter.throttle(dialogApi);
|
|
},
|
|
onChange: function (dialogApi, changeData) {
|
|
if (changeData.name === patternName) {
|
|
updateFilter.throttle(dialogApi);
|
|
}
|
|
}
|
|
};
|
|
var dialogApi = editor.windowManager.open(bridgeSpec);
|
|
dialogApi.focus(patternName);
|
|
};
|
|
|
|
var register$1 = function (editor, charMap) {
|
|
editor.addCommand('mceShowCharmap', function () {
|
|
open(editor, charMap);
|
|
});
|
|
};
|
|
|
|
var global = tinymce.util.Tools.resolve('tinymce.util.Promise');
|
|
|
|
var init = function (editor, all) {
|
|
editor.ui.registry.addAutocompleter('charmap', {
|
|
ch: ':',
|
|
columns: 'auto',
|
|
minChars: 2,
|
|
fetch: function (pattern, _maxResults) {
|
|
return new global(function (resolve, _reject) {
|
|
resolve(scan(all, pattern));
|
|
});
|
|
},
|
|
onAction: function (autocompleteApi, rng, value) {
|
|
editor.selection.setRng(rng);
|
|
editor.insertContent(value);
|
|
autocompleteApi.hide();
|
|
}
|
|
});
|
|
};
|
|
|
|
var register = function (editor) {
|
|
editor.ui.registry.addButton('charmap', {
|
|
icon: 'insert-character',
|
|
tooltip: 'Special character',
|
|
onAction: function () {
|
|
return editor.execCommand('mceShowCharmap');
|
|
}
|
|
});
|
|
editor.ui.registry.addMenuItem('charmap', {
|
|
icon: 'insert-character',
|
|
text: 'Special character...',
|
|
onAction: function () {
|
|
return editor.execCommand('mceShowCharmap');
|
|
}
|
|
});
|
|
};
|
|
|
|
function Plugin () {
|
|
global$2.add('charmap', function (editor) {
|
|
var charMap = getCharMap(editor);
|
|
register$1(editor, charMap);
|
|
register(editor);
|
|
init(editor, charMap[0]);
|
|
return get(editor);
|
|
});
|
|
}
|
|
|
|
Plugin();
|
|
|
|
}());
|