plugin.js 43 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395
  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.3.0 (2020-05-21)
  8. */
  9. (function (domGlobals) {
  10. 'use strict';
  11. var Cell = function (initial) {
  12. var value = initial;
  13. var get = function () {
  14. return value;
  15. };
  16. var set = function (v) {
  17. value = v;
  18. };
  19. return {
  20. get: get,
  21. set: set
  22. };
  23. };
  24. var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
  25. var __assign = function () {
  26. __assign = Object.assign || function __assign(t) {
  27. for (var s, i = 1, n = arguments.length; i < n; i++) {
  28. s = arguments[i];
  29. for (var p in s)
  30. if (Object.prototype.hasOwnProperty.call(s, p))
  31. t[p] = s[p];
  32. }
  33. return t;
  34. };
  35. return __assign.apply(this, arguments);
  36. };
  37. function __spreadArrays() {
  38. for (var s = 0, i = 0, il = arguments.length; i < il; i++)
  39. s += arguments[i].length;
  40. for (var r = Array(s), k = 0, i = 0; i < il; i++)
  41. for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
  42. r[k] = a[j];
  43. return r;
  44. }
  45. var noop = function () {
  46. };
  47. var constant = function (value) {
  48. return function () {
  49. return value;
  50. };
  51. };
  52. var identity = function (x) {
  53. return x;
  54. };
  55. var die = function (msg) {
  56. return function () {
  57. throw new Error(msg);
  58. };
  59. };
  60. var never = constant(false);
  61. var always = constant(true);
  62. var none = function () {
  63. return NONE;
  64. };
  65. var NONE = function () {
  66. var eq = function (o) {
  67. return o.isNone();
  68. };
  69. var call = function (thunk) {
  70. return thunk();
  71. };
  72. var id = function (n) {
  73. return n;
  74. };
  75. var me = {
  76. fold: function (n, _s) {
  77. return n();
  78. },
  79. is: never,
  80. isSome: never,
  81. isNone: always,
  82. getOr: id,
  83. getOrThunk: call,
  84. getOrDie: function (msg) {
  85. throw new Error(msg || 'error: getOrDie called on none.');
  86. },
  87. getOrNull: constant(null),
  88. getOrUndefined: constant(undefined),
  89. or: id,
  90. orThunk: call,
  91. map: none,
  92. each: noop,
  93. bind: none,
  94. exists: never,
  95. forall: always,
  96. filter: none,
  97. equals: eq,
  98. equals_: eq,
  99. toArray: function () {
  100. return [];
  101. },
  102. toString: constant('none()')
  103. };
  104. return me;
  105. }();
  106. var some = function (a) {
  107. var constant_a = constant(a);
  108. var self = function () {
  109. return me;
  110. };
  111. var bind = function (f) {
  112. return f(a);
  113. };
  114. var me = {
  115. fold: function (n, s) {
  116. return s(a);
  117. },
  118. is: function (v) {
  119. return a === v;
  120. },
  121. isSome: always,
  122. isNone: never,
  123. getOr: constant_a,
  124. getOrThunk: constant_a,
  125. getOrDie: constant_a,
  126. getOrNull: constant_a,
  127. getOrUndefined: constant_a,
  128. or: self,
  129. orThunk: self,
  130. map: function (f) {
  131. return some(f(a));
  132. },
  133. each: function (f) {
  134. f(a);
  135. },
  136. bind: bind,
  137. exists: bind,
  138. forall: bind,
  139. filter: function (f) {
  140. return f(a) ? me : NONE;
  141. },
  142. toArray: function () {
  143. return [a];
  144. },
  145. toString: function () {
  146. return 'some(' + a + ')';
  147. },
  148. equals: function (o) {
  149. return o.is(a);
  150. },
  151. equals_: function (o, elementEq) {
  152. return o.fold(never, function (b) {
  153. return elementEq(a, b);
  154. });
  155. }
  156. };
  157. return me;
  158. };
  159. var from = function (value) {
  160. return value === null || value === undefined ? NONE : some(value);
  161. };
  162. var Option = {
  163. some: some,
  164. none: none,
  165. from: from
  166. };
  167. var typeOf = function (x) {
  168. var t = typeof x;
  169. if (x === null) {
  170. return 'null';
  171. } else if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {
  172. return 'array';
  173. } else if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {
  174. return 'string';
  175. } else {
  176. return t;
  177. }
  178. };
  179. var isType = function (type) {
  180. return function (value) {
  181. return typeOf(value) === type;
  182. };
  183. };
  184. var isString = isType('string');
  185. var isObject = isType('object');
  186. var isArray = isType('array');
  187. var nativeSlice = Array.prototype.slice;
  188. var nativeIndexOf = Array.prototype.indexOf;
  189. var rawIndexOf = function (ts, t) {
  190. return nativeIndexOf.call(ts, t);
  191. };
  192. var contains = function (xs, x) {
  193. return rawIndexOf(xs, x) > -1;
  194. };
  195. var map = function (xs, f) {
  196. var len = xs.length;
  197. var r = new Array(len);
  198. for (var i = 0; i < len; i++) {
  199. var x = xs[i];
  200. r[i] = f(x, i);
  201. }
  202. return r;
  203. };
  204. var each = function (xs, f) {
  205. for (var i = 0, len = xs.length; i < len; i++) {
  206. var x = xs[i];
  207. f(x, i);
  208. }
  209. };
  210. var eachr = function (xs, f) {
  211. for (var i = xs.length - 1; i >= 0; i--) {
  212. var x = xs[i];
  213. f(x, i);
  214. }
  215. };
  216. var filter = function (xs, pred) {
  217. var r = [];
  218. for (var i = 0, len = xs.length; i < len; i++) {
  219. var x = xs[i];
  220. if (pred(x, i)) {
  221. r.push(x);
  222. }
  223. }
  224. return r;
  225. };
  226. var foldr = function (xs, f, acc) {
  227. eachr(xs, function (x) {
  228. acc = f(acc, x);
  229. });
  230. return acc;
  231. };
  232. var foldl = function (xs, f, acc) {
  233. each(xs, function (x) {
  234. acc = f(acc, x);
  235. });
  236. return acc;
  237. };
  238. var findUntil = function (xs, pred, until) {
  239. for (var i = 0, len = xs.length; i < len; i++) {
  240. var x = xs[i];
  241. if (pred(x, i)) {
  242. return Option.some(x);
  243. } else if (until(x, i)) {
  244. break;
  245. }
  246. }
  247. return Option.none();
  248. };
  249. var find = function (xs, pred) {
  250. return findUntil(xs, pred, never);
  251. };
  252. var forall = function (xs, pred) {
  253. for (var i = 0, len = xs.length; i < len; ++i) {
  254. var x = xs[i];
  255. if (pred(x, i) !== true) {
  256. return false;
  257. }
  258. }
  259. return true;
  260. };
  261. var sort = function (xs, comparator) {
  262. var copy = nativeSlice.call(xs, 0);
  263. copy.sort(comparator);
  264. return copy;
  265. };
  266. var head = function (xs) {
  267. return xs.length === 0 ? Option.none() : Option.some(xs[0]);
  268. };
  269. var keys = Object.keys;
  270. var hasOwnProperty = Object.hasOwnProperty;
  271. var get = function (obj, key) {
  272. return has(obj, key) ? Option.from(obj[key]) : Option.none();
  273. };
  274. var has = function (obj, key) {
  275. return hasOwnProperty.call(obj, key);
  276. };
  277. var generate = function (cases) {
  278. if (!isArray(cases)) {
  279. throw new Error('cases must be an array');
  280. }
  281. if (cases.length === 0) {
  282. throw new Error('there must be at least one case');
  283. }
  284. var constructors = [];
  285. var adt = {};
  286. each(cases, function (acase, count) {
  287. var keys$1 = keys(acase);
  288. if (keys$1.length !== 1) {
  289. throw new Error('one and only one name per case');
  290. }
  291. var key = keys$1[0];
  292. var value = acase[key];
  293. if (adt[key] !== undefined) {
  294. throw new Error('duplicate key detected:' + key);
  295. } else if (key === 'cata') {
  296. throw new Error('cannot have a case named cata (sorry)');
  297. } else if (!isArray(value)) {
  298. throw new Error('case arguments must be an array');
  299. }
  300. constructors.push(key);
  301. adt[key] = function () {
  302. var argLength = arguments.length;
  303. if (argLength !== value.length) {
  304. throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);
  305. }
  306. var args = new Array(argLength);
  307. for (var i = 0; i < args.length; i++) {
  308. args[i] = arguments[i];
  309. }
  310. var match = function (branches) {
  311. var branchKeys = keys(branches);
  312. if (constructors.length !== branchKeys.length) {
  313. throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\nActual: ' + branchKeys.join(','));
  314. }
  315. var allReqd = forall(constructors, function (reqKey) {
  316. return contains(branchKeys, reqKey);
  317. });
  318. if (!allReqd) {
  319. throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\nRequired: ' + constructors.join(', '));
  320. }
  321. return branches[key].apply(null, args);
  322. };
  323. return {
  324. fold: function () {
  325. if (arguments.length !== cases.length) {
  326. throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + arguments.length);
  327. }
  328. var target = arguments[count];
  329. return target.apply(null, args);
  330. },
  331. match: match,
  332. log: function (label) {
  333. domGlobals.console.log(label, {
  334. constructors: constructors,
  335. constructor: key,
  336. params: args
  337. });
  338. }
  339. };
  340. };
  341. });
  342. return adt;
  343. };
  344. var Adt = { generate: generate };
  345. var comparison = Adt.generate([
  346. {
  347. bothErrors: [
  348. 'error1',
  349. 'error2'
  350. ]
  351. },
  352. {
  353. firstError: [
  354. 'error1',
  355. 'value2'
  356. ]
  357. },
  358. {
  359. secondError: [
  360. 'value1',
  361. 'error2'
  362. ]
  363. },
  364. {
  365. bothValues: [
  366. 'value1',
  367. 'value2'
  368. ]
  369. }
  370. ]);
  371. var partition = function (results) {
  372. var errors = [];
  373. var values = [];
  374. each(results, function (result) {
  375. result.fold(function (err) {
  376. errors.push(err);
  377. }, function (value) {
  378. values.push(value);
  379. });
  380. });
  381. return {
  382. errors: errors,
  383. values: values
  384. };
  385. };
  386. var value = function (o) {
  387. var is = function (v) {
  388. return o === v;
  389. };
  390. var or = function (_opt) {
  391. return value(o);
  392. };
  393. var orThunk = function (_f) {
  394. return value(o);
  395. };
  396. var map = function (f) {
  397. return value(f(o));
  398. };
  399. var mapError = function (_f) {
  400. return value(o);
  401. };
  402. var each = function (f) {
  403. f(o);
  404. };
  405. var bind = function (f) {
  406. return f(o);
  407. };
  408. var fold = function (_, onValue) {
  409. return onValue(o);
  410. };
  411. var exists = function (f) {
  412. return f(o);
  413. };
  414. var forall = function (f) {
  415. return f(o);
  416. };
  417. var toOption = function () {
  418. return Option.some(o);
  419. };
  420. return {
  421. is: is,
  422. isValue: always,
  423. isError: never,
  424. getOr: constant(o),
  425. getOrThunk: constant(o),
  426. getOrDie: constant(o),
  427. or: or,
  428. orThunk: orThunk,
  429. fold: fold,
  430. map: map,
  431. mapError: mapError,
  432. each: each,
  433. bind: bind,
  434. exists: exists,
  435. forall: forall,
  436. toOption: toOption
  437. };
  438. };
  439. var error = function (message) {
  440. var getOrThunk = function (f) {
  441. return f();
  442. };
  443. var getOrDie = function () {
  444. return die(String(message))();
  445. };
  446. var or = function (opt) {
  447. return opt;
  448. };
  449. var orThunk = function (f) {
  450. return f();
  451. };
  452. var map = function (_f) {
  453. return error(message);
  454. };
  455. var mapError = function (f) {
  456. return error(f(message));
  457. };
  458. var bind = function (_f) {
  459. return error(message);
  460. };
  461. var fold = function (onError, _) {
  462. return onError(message);
  463. };
  464. return {
  465. is: never,
  466. isValue: never,
  467. isError: always,
  468. getOr: identity,
  469. getOrThunk: getOrThunk,
  470. getOrDie: getOrDie,
  471. or: or,
  472. orThunk: orThunk,
  473. fold: fold,
  474. map: map,
  475. mapError: mapError,
  476. each: noop,
  477. bind: bind,
  478. exists: never,
  479. forall: always,
  480. toOption: Option.none
  481. };
  482. };
  483. var fromOption = function (opt, err) {
  484. return opt.fold(function () {
  485. return error(err);
  486. }, value);
  487. };
  488. var Result = {
  489. value: value,
  490. error: error,
  491. fromOption: fromOption
  492. };
  493. var isInlinePattern = function (pattern) {
  494. return pattern.type === 'inline-command' || pattern.type === 'inline-format';
  495. };
  496. var isBlockPattern = function (pattern) {
  497. return pattern.type === 'block-command' || pattern.type === 'block-format';
  498. };
  499. var sortPatterns = function (patterns) {
  500. return sort(patterns, function (a, b) {
  501. if (a.start.length === b.start.length) {
  502. return 0;
  503. }
  504. return a.start.length > b.start.length ? -1 : 1;
  505. });
  506. };
  507. var normalizePattern = function (pattern) {
  508. var err = function (message) {
  509. return Result.error({
  510. message: message,
  511. pattern: pattern
  512. });
  513. };
  514. var formatOrCmd = function (name, onFormat, onCommand) {
  515. if (pattern.format !== undefined) {
  516. var formats = void 0;
  517. if (isArray(pattern.format)) {
  518. if (!forall(pattern.format, isString)) {
  519. return err(name + ' pattern has non-string items in the `format` array');
  520. }
  521. formats = pattern.format;
  522. } else if (isString(pattern.format)) {
  523. formats = [pattern.format];
  524. } else {
  525. return err(name + ' pattern has non-string `format` parameter');
  526. }
  527. return Result.value(onFormat(formats));
  528. } else if (pattern.cmd !== undefined) {
  529. if (!isString(pattern.cmd)) {
  530. return err(name + ' pattern has non-string `cmd` parameter');
  531. }
  532. return Result.value(onCommand(pattern.cmd, pattern.value));
  533. } else {
  534. return err(name + ' pattern is missing both `format` and `cmd` parameters');
  535. }
  536. };
  537. if (!isObject(pattern)) {
  538. return err('Raw pattern is not an object');
  539. }
  540. if (!isString(pattern.start)) {
  541. return err('Raw pattern is missing `start` parameter');
  542. }
  543. if (pattern.end !== undefined) {
  544. if (!isString(pattern.end)) {
  545. return err('Inline pattern has non-string `end` parameter');
  546. }
  547. if (pattern.start.length === 0 && pattern.end.length === 0) {
  548. return err('Inline pattern has empty `start` and `end` parameters');
  549. }
  550. var start_1 = pattern.start;
  551. var end_1 = pattern.end;
  552. if (end_1.length === 0) {
  553. end_1 = start_1;
  554. start_1 = '';
  555. }
  556. return formatOrCmd('Inline', function (format) {
  557. return {
  558. type: 'inline-format',
  559. start: start_1,
  560. end: end_1,
  561. format: format
  562. };
  563. }, function (cmd, value) {
  564. return {
  565. type: 'inline-command',
  566. start: start_1,
  567. end: end_1,
  568. cmd: cmd,
  569. value: value
  570. };
  571. });
  572. } else if (pattern.replacement !== undefined) {
  573. if (!isString(pattern.replacement)) {
  574. return err('Replacement pattern has non-string `replacement` parameter');
  575. }
  576. if (pattern.start.length === 0) {
  577. return err('Replacement pattern has empty `start` parameter');
  578. }
  579. return Result.value({
  580. type: 'inline-command',
  581. start: '',
  582. end: pattern.start,
  583. cmd: 'mceInsertContent',
  584. value: pattern.replacement
  585. });
  586. } else {
  587. if (pattern.start.length === 0) {
  588. return err('Block pattern has empty `start` parameter');
  589. }
  590. return formatOrCmd('Block', function (formats) {
  591. return {
  592. type: 'block-format',
  593. start: pattern.start,
  594. format: formats[0]
  595. };
  596. }, function (command, commandValue) {
  597. return {
  598. type: 'block-command',
  599. start: pattern.start,
  600. cmd: command,
  601. value: commandValue
  602. };
  603. });
  604. }
  605. };
  606. var denormalizePattern = function (pattern) {
  607. if (pattern.type === 'block-command') {
  608. return {
  609. start: pattern.start,
  610. cmd: pattern.cmd,
  611. value: pattern.value
  612. };
  613. } else if (pattern.type === 'block-format') {
  614. return {
  615. start: pattern.start,
  616. format: pattern.format
  617. };
  618. } else if (pattern.type === 'inline-command') {
  619. if (pattern.cmd === 'mceInsertContent' && pattern.start === '') {
  620. return {
  621. start: pattern.end,
  622. replacement: pattern.value
  623. };
  624. } else {
  625. return {
  626. start: pattern.start,
  627. end: pattern.end,
  628. cmd: pattern.cmd,
  629. value: pattern.value
  630. };
  631. }
  632. } else if (pattern.type === 'inline-format') {
  633. return {
  634. start: pattern.start,
  635. end: pattern.end,
  636. format: pattern.format.length === 1 ? pattern.format[0] : pattern.format
  637. };
  638. }
  639. };
  640. var createPatternSet = function (patterns) {
  641. return {
  642. inlinePatterns: filter(patterns, isInlinePattern),
  643. blockPatterns: sortPatterns(filter(patterns, isBlockPattern))
  644. };
  645. };
  646. var get$1 = function (patternsState) {
  647. var setPatterns = function (newPatterns) {
  648. var normalized = partition(map(newPatterns, normalizePattern));
  649. if (normalized.errors.length > 0) {
  650. var firstError = normalized.errors[0];
  651. throw new Error(firstError.message + ':\n' + JSON.stringify(firstError.pattern, null, 2));
  652. }
  653. patternsState.set(createPatternSet(normalized.values));
  654. };
  655. var getPatterns = function () {
  656. return __spreadArrays(map(patternsState.get().inlinePatterns, denormalizePattern), map(patternsState.get().blockPatterns, denormalizePattern));
  657. };
  658. return {
  659. setPatterns: setPatterns,
  660. getPatterns: getPatterns
  661. };
  662. };
  663. var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')();
  664. var error$1 = function () {
  665. var args = [];
  666. for (var _i = 0; _i < arguments.length; _i++) {
  667. args[_i] = arguments[_i];
  668. }
  669. var console = Global.console;
  670. if (console) {
  671. if (console.error) {
  672. console.error.apply(console, args);
  673. } else {
  674. console.log.apply(console, args);
  675. }
  676. }
  677. };
  678. var defaultPatterns = [
  679. {
  680. start: '*',
  681. end: '*',
  682. format: 'italic'
  683. },
  684. {
  685. start: '**',
  686. end: '**',
  687. format: 'bold'
  688. },
  689. {
  690. start: '#',
  691. format: 'h1'
  692. },
  693. {
  694. start: '##',
  695. format: 'h2'
  696. },
  697. {
  698. start: '###',
  699. format: 'h3'
  700. },
  701. {
  702. start: '####',
  703. format: 'h4'
  704. },
  705. {
  706. start: '#####',
  707. format: 'h5'
  708. },
  709. {
  710. start: '######',
  711. format: 'h6'
  712. },
  713. {
  714. start: '1. ',
  715. cmd: 'InsertOrderedList'
  716. },
  717. {
  718. start: '* ',
  719. cmd: 'InsertUnorderedList'
  720. },
  721. {
  722. start: '- ',
  723. cmd: 'InsertUnorderedList'
  724. }
  725. ];
  726. var getPatternSet = function (editorSettings) {
  727. var patterns = get(editorSettings, 'textpattern_patterns').getOr(defaultPatterns);
  728. if (!isArray(patterns)) {
  729. error$1('The setting textpattern_patterns should be an array');
  730. return {
  731. inlinePatterns: [],
  732. blockPatterns: []
  733. };
  734. }
  735. var normalized = partition(map(patterns, normalizePattern));
  736. each(normalized.errors, function (err) {
  737. return error$1(err.message, err.pattern);
  738. });
  739. return createPatternSet(normalized.values);
  740. };
  741. var getForcedRootBlock = function (editor) {
  742. var block = editor.getParam('forced_root_block', 'p');
  743. if (block === false) {
  744. return '';
  745. } else if (block === true) {
  746. return 'p';
  747. } else {
  748. return block;
  749. }
  750. };
  751. var global$1 = tinymce.util.Tools.resolve('tinymce.util.Delay');
  752. var global$2 = tinymce.util.Tools.resolve('tinymce.util.VK');
  753. var zeroWidth = '\uFEFF';
  754. var nbsp = '\xA0';
  755. var global$3 = tinymce.util.Tools.resolve('tinymce.util.Tools');
  756. var global$4 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');
  757. var global$5 = tinymce.util.Tools.resolve('tinymce.dom.TextSeeker');
  758. var point = function (container, offset) {
  759. return {
  760. container: container,
  761. offset: offset
  762. };
  763. };
  764. var isText = function (node) {
  765. return node.nodeType === domGlobals.Node.TEXT_NODE;
  766. };
  767. var cleanEmptyNodes = function (dom, node, isRoot) {
  768. if (node && dom.isEmpty(node) && !isRoot(node)) {
  769. var parent_1 = node.parentNode;
  770. dom.remove(node);
  771. cleanEmptyNodes(dom, parent_1, isRoot);
  772. }
  773. };
  774. var deleteRng = function (dom, rng, isRoot, clean) {
  775. if (clean === void 0) {
  776. clean = true;
  777. }
  778. var startParent = rng.startContainer.parentNode;
  779. var endParent = rng.endContainer.parentNode;
  780. rng.deleteContents();
  781. if (clean && !isRoot(rng.startContainer)) {
  782. if (isText(rng.startContainer) && rng.startContainer.data.length === 0) {
  783. dom.remove(rng.startContainer);
  784. }
  785. if (isText(rng.endContainer) && rng.endContainer.data.length === 0) {
  786. dom.remove(rng.endContainer);
  787. }
  788. cleanEmptyNodes(dom, startParent, isRoot);
  789. if (startParent !== endParent) {
  790. cleanEmptyNodes(dom, endParent, isRoot);
  791. }
  792. }
  793. };
  794. var isBlockFormatName = function (name, formatter) {
  795. var formatSet = formatter.get(name);
  796. return isArray(formatSet) && head(formatSet).exists(function (format) {
  797. return has(format, 'block');
  798. });
  799. };
  800. var isReplacementPattern = function (pattern) {
  801. return pattern.start.length === 0;
  802. };
  803. var getParentBlock = function (editor, rng) {
  804. var parentBlockOpt = Option.from(editor.dom.getParent(rng.startContainer, editor.dom.isBlock));
  805. if (getForcedRootBlock(editor) === '') {
  806. return parentBlockOpt.orThunk(function () {
  807. return Option.some(editor.getBody());
  808. });
  809. } else {
  810. return parentBlockOpt;
  811. }
  812. };
  813. var DOM = global$4.DOM;
  814. var alwaysNext = function (startNode) {
  815. return function (node) {
  816. return startNode === node ? -1 : 0;
  817. };
  818. };
  819. var isBoundary = function (dom) {
  820. return function (node) {
  821. return dom.isBlock(node) || contains([
  822. 'BR',
  823. 'IMG',
  824. 'HR',
  825. 'INPUT'
  826. ], node.nodeName) || dom.getContentEditable(node) === 'false';
  827. };
  828. };
  829. var textBefore = function (node, offset, rootNode) {
  830. if (isText(node) && offset >= 0) {
  831. return Option.some(point(node, offset));
  832. } else {
  833. var textSeeker = global$5(DOM);
  834. return Option.from(textSeeker.backwards(node, offset, alwaysNext(node), rootNode)).map(function (prev) {
  835. return point(prev.container, prev.container.data.length);
  836. });
  837. }
  838. };
  839. var textAfter = function (node, offset, rootNode) {
  840. if (isText(node) && offset >= node.length) {
  841. return Option.some(point(node, offset));
  842. } else {
  843. var textSeeker = global$5(DOM);
  844. return Option.from(textSeeker.forwards(node, offset, alwaysNext(node), rootNode)).map(function (prev) {
  845. return point(prev.container, 0);
  846. });
  847. }
  848. };
  849. var scanLeft = function (node, offset, rootNode) {
  850. if (!isText(node)) {
  851. return Option.none();
  852. }
  853. var text = node.textContent;
  854. if (offset >= 0 && offset <= text.length) {
  855. return Option.some(point(node, offset));
  856. } else {
  857. var textSeeker = global$5(DOM);
  858. return Option.from(textSeeker.backwards(node, offset, alwaysNext(node), rootNode)).bind(function (prev) {
  859. var prevText = prev.container.data;
  860. return scanLeft(prev.container, offset + prevText.length, rootNode);
  861. });
  862. }
  863. };
  864. var scanRight = function (node, offset, rootNode) {
  865. if (!isText(node)) {
  866. return Option.none();
  867. }
  868. var text = node.textContent;
  869. if (offset <= text.length) {
  870. return Option.some(point(node, offset));
  871. } else {
  872. var textSeeker = global$5(DOM);
  873. return Option.from(textSeeker.forwards(node, offset, alwaysNext(node), rootNode)).bind(function (next) {
  874. return scanRight(next.container, offset - text.length, rootNode);
  875. });
  876. }
  877. };
  878. var repeatLeft = function (dom, node, offset, process, rootNode) {
  879. var search = global$5(dom, isBoundary(dom));
  880. return Option.from(search.backwards(node, offset, process, rootNode));
  881. };
  882. var generatePath = function (root, node, offset) {
  883. if (isText(node) && (offset < 0 || offset > node.data.length)) {
  884. return [];
  885. }
  886. var p = [offset];
  887. var current = node;
  888. while (current !== root && current.parentNode) {
  889. var parent_1 = current.parentNode;
  890. for (var i = 0; i < parent_1.childNodes.length; i++) {
  891. if (parent_1.childNodes[i] === current) {
  892. p.push(i);
  893. break;
  894. }
  895. }
  896. current = parent_1;
  897. }
  898. return current === root ? p.reverse() : [];
  899. };
  900. var generatePathRange = function (root, startNode, startOffset, endNode, endOffset) {
  901. var start = generatePath(root, startNode, startOffset);
  902. var end = generatePath(root, endNode, endOffset);
  903. return {
  904. start: start,
  905. end: end
  906. };
  907. };
  908. var resolvePath = function (root, path) {
  909. var nodePath = path.slice();
  910. var offset = nodePath.pop();
  911. return foldl(nodePath, function (optNode, index) {
  912. return optNode.bind(function (node) {
  913. return Option.from(node.childNodes[index]);
  914. });
  915. }, Option.some(root)).bind(function (node) {
  916. if (isText(node) && offset >= 0 && offset <= node.data.length) {
  917. return Option.some({
  918. node: node,
  919. offset: offset
  920. });
  921. } else {
  922. return Option.some({
  923. node: node,
  924. offset: offset
  925. });
  926. }
  927. });
  928. };
  929. var resolvePathRange = function (root, range) {
  930. return resolvePath(root, range.start).bind(function (_a) {
  931. var startNode = _a.node, startOffset = _a.offset;
  932. return resolvePath(root, range.end).map(function (_a) {
  933. var endNode = _a.node, endOffset = _a.offset;
  934. var rng = domGlobals.document.createRange();
  935. rng.setStart(startNode, startOffset);
  936. rng.setEnd(endNode, endOffset);
  937. return rng;
  938. });
  939. });
  940. };
  941. var generatePathRangeFromRange = function (root, range) {
  942. return generatePathRange(root, range.startContainer, range.startOffset, range.endContainer, range.endOffset);
  943. };
  944. var stripPattern = function (dom, block, pattern) {
  945. var firstTextNode = textAfter(block, 0, block);
  946. firstTextNode.each(function (spot) {
  947. var node = spot.container;
  948. scanRight(node, pattern.start.length, block).each(function (end) {
  949. var rng = dom.createRng();
  950. rng.setStart(node, 0);
  951. rng.setEnd(end.container, end.offset);
  952. deleteRng(dom, rng, function (e) {
  953. return e === block;
  954. });
  955. });
  956. });
  957. };
  958. var applyPattern = function (editor, match) {
  959. var dom = editor.dom;
  960. var pattern = match.pattern;
  961. var rng = resolvePathRange(dom.getRoot(), match.range).getOrDie('Unable to resolve path range');
  962. getParentBlock(editor, rng).each(function (block) {
  963. if (pattern.type === 'block-format') {
  964. if (isBlockFormatName(pattern.format, editor.formatter)) {
  965. editor.undoManager.transact(function () {
  966. stripPattern(editor.dom, block, pattern);
  967. editor.formatter.apply(pattern.format);
  968. });
  969. }
  970. } else if (pattern.type === 'block-command') {
  971. editor.undoManager.transact(function () {
  972. stripPattern(editor.dom, block, pattern);
  973. editor.execCommand(pattern.cmd, false, pattern.value);
  974. });
  975. }
  976. });
  977. return true;
  978. };
  979. var findPattern = function (patterns, text) {
  980. var nuText = text.replace(nbsp, ' ');
  981. return find(patterns, function (pattern) {
  982. if (text.indexOf(pattern.start) !== 0 && nuText.indexOf(pattern.start) !== 0) {
  983. return false;
  984. }
  985. return true;
  986. });
  987. };
  988. var findPatterns = function (editor, patterns) {
  989. var dom = editor.dom;
  990. var rng = editor.selection.getRng();
  991. return getParentBlock(editor, rng).filter(function (block) {
  992. var forcedRootBlock = getForcedRootBlock(editor);
  993. var matchesForcedRootBlock = forcedRootBlock === '' && dom.is(block, 'body') || dom.is(block, forcedRootBlock);
  994. return block !== null && matchesForcedRootBlock;
  995. }).bind(function (block) {
  996. var blockText = block.textContent;
  997. var matchedPattern = findPattern(patterns, blockText);
  998. return matchedPattern.map(function (pattern) {
  999. if (global$3.trim(blockText).length === pattern.start.length) {
  1000. return [];
  1001. }
  1002. return [{
  1003. pattern: pattern,
  1004. range: generatePathRange(dom.getRoot(), block, 0, block, 0)
  1005. }];
  1006. });
  1007. }).getOr([]);
  1008. };
  1009. var applyMatches = function (editor, matches) {
  1010. if (matches.length === 0) {
  1011. return;
  1012. }
  1013. var bookmark = editor.selection.getBookmark();
  1014. each(matches, function (match) {
  1015. return applyPattern(editor, match);
  1016. });
  1017. editor.selection.moveToBookmark(bookmark);
  1018. };
  1019. var unique = 0;
  1020. var generate$1 = function (prefix) {
  1021. var date = new Date();
  1022. var time = date.getTime();
  1023. var random = Math.floor(Math.random() * 1000000000);
  1024. unique++;
  1025. return prefix + '_' + random + unique + String(time);
  1026. };
  1027. var checkRange = function (str, substr, start) {
  1028. return substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;
  1029. };
  1030. var endsWith = function (str, suffix) {
  1031. return checkRange(str, suffix, str.length - suffix.length);
  1032. };
  1033. var newMarker = function (dom, id) {
  1034. return dom.create('span', {
  1035. 'data-mce-type': 'bookmark',
  1036. id: id
  1037. });
  1038. };
  1039. var rangeFromMarker = function (dom, marker) {
  1040. var rng = dom.createRng();
  1041. rng.setStartAfter(marker.start);
  1042. rng.setEndBefore(marker.end);
  1043. return rng;
  1044. };
  1045. var createMarker = function (dom, markerPrefix, pathRange) {
  1046. var rng = resolvePathRange(dom.getRoot(), pathRange).getOrDie('Unable to resolve path range');
  1047. var startNode = rng.startContainer;
  1048. var endNode = rng.endContainer;
  1049. var textEnd = rng.endOffset === 0 ? endNode : endNode.splitText(rng.endOffset);
  1050. var textStart = rng.startOffset === 0 ? startNode : startNode.splitText(rng.startOffset);
  1051. return {
  1052. prefix: markerPrefix,
  1053. end: textEnd.parentNode.insertBefore(newMarker(dom, markerPrefix + '-end'), textEnd),
  1054. start: textStart.parentNode.insertBefore(newMarker(dom, markerPrefix + '-start'), textStart)
  1055. };
  1056. };
  1057. var removeMarker = function (dom, marker, isRoot) {
  1058. cleanEmptyNodes(dom, dom.get(marker.prefix + '-end'), isRoot);
  1059. cleanEmptyNodes(dom, dom.get(marker.prefix + '-start'), isRoot);
  1060. };
  1061. var matchesPattern = function (dom, block, patternContent) {
  1062. return function (element, offset) {
  1063. var text = element.data;
  1064. var searchText = text.substring(0, offset);
  1065. var startEndIndex = searchText.lastIndexOf(patternContent.charAt(patternContent.length - 1));
  1066. var startIndex = searchText.lastIndexOf(patternContent);
  1067. if (startIndex !== -1) {
  1068. return startIndex + patternContent.length;
  1069. } else if (startEndIndex !== -1) {
  1070. return startEndIndex + 1;
  1071. } else {
  1072. return -1;
  1073. }
  1074. };
  1075. };
  1076. var findPatternStartFromSpot = function (dom, pattern, block, spot) {
  1077. var startPattern = pattern.start;
  1078. var startSpot = repeatLeft(dom, spot.container, spot.offset, matchesPattern(dom, block, startPattern), block);
  1079. return startSpot.bind(function (spot) {
  1080. if (spot.offset >= startPattern.length) {
  1081. var rng = dom.createRng();
  1082. rng.setStart(spot.container, spot.offset - startPattern.length);
  1083. rng.setEnd(spot.container, spot.offset);
  1084. return Option.some(rng);
  1085. } else {
  1086. var offset = spot.offset - startPattern.length;
  1087. return scanLeft(spot.container, offset, block).map(function (nextSpot) {
  1088. var rng = dom.createRng();
  1089. rng.setStart(nextSpot.container, nextSpot.offset);
  1090. rng.setEnd(spot.container, spot.offset);
  1091. return rng;
  1092. }).filter(function (rng) {
  1093. return rng.toString() === startPattern;
  1094. }).orThunk(function () {
  1095. return findPatternStartFromSpot(dom, pattern, block, point(spot.container, 0));
  1096. });
  1097. }
  1098. });
  1099. };
  1100. var findPatternStart = function (dom, pattern, node, offset, block, requireGap) {
  1101. if (requireGap === void 0) {
  1102. requireGap = false;
  1103. }
  1104. if (pattern.start.length === 0 && !requireGap) {
  1105. var rng = dom.createRng();
  1106. rng.setStart(node, offset);
  1107. rng.setEnd(node, offset);
  1108. return Option.some(rng);
  1109. }
  1110. return textBefore(node, offset, block).bind(function (spot) {
  1111. var start = findPatternStartFromSpot(dom, pattern, block, spot);
  1112. return start.bind(function (startRange) {
  1113. if (requireGap) {
  1114. if (startRange.endContainer === spot.container && startRange.endOffset === spot.offset) {
  1115. return Option.none();
  1116. } else if (spot.offset === 0 && startRange.endContainer.textContent.length === startRange.endOffset) {
  1117. return Option.none();
  1118. }
  1119. }
  1120. return Option.some(startRange);
  1121. });
  1122. });
  1123. };
  1124. var findPattern$1 = function (editor, block, details) {
  1125. var dom = editor.dom;
  1126. var root = dom.getRoot();
  1127. var pattern = details.pattern;
  1128. var endNode = details.position.container;
  1129. var endOffset = details.position.offset;
  1130. return scanLeft(endNode, endOffset - details.pattern.end.length, block).bind(function (spot) {
  1131. var endPathRng = generatePathRange(root, spot.container, spot.offset, endNode, endOffset);
  1132. if (isReplacementPattern(pattern)) {
  1133. return Option.some({
  1134. matches: [{
  1135. pattern: pattern,
  1136. startRng: endPathRng,
  1137. endRng: endPathRng
  1138. }],
  1139. position: spot
  1140. });
  1141. } else {
  1142. var resultsOpt = findPatternsRec(editor, details.remainingPatterns, spot.container, spot.offset, block);
  1143. var results_1 = resultsOpt.getOr({
  1144. matches: [],
  1145. position: spot
  1146. });
  1147. var pos = results_1.position;
  1148. var start = findPatternStart(dom, pattern, pos.container, pos.offset, block, resultsOpt.isNone());
  1149. return start.map(function (startRng) {
  1150. var startPathRng = generatePathRangeFromRange(root, startRng);
  1151. return {
  1152. matches: results_1.matches.concat([{
  1153. pattern: pattern,
  1154. startRng: startPathRng,
  1155. endRng: endPathRng
  1156. }]),
  1157. position: point(startRng.startContainer, startRng.startOffset)
  1158. };
  1159. });
  1160. }
  1161. });
  1162. };
  1163. var findPatternsRec = function (editor, patterns, node, offset, block) {
  1164. var dom = editor.dom;
  1165. return textBefore(node, offset, dom.getRoot()).bind(function (endSpot) {
  1166. var rng = dom.createRng();
  1167. rng.setStart(block, 0);
  1168. rng.setEnd(node, offset);
  1169. var text = rng.toString();
  1170. for (var i = 0; i < patterns.length; i++) {
  1171. var pattern = patterns[i];
  1172. if (!endsWith(text, pattern.end)) {
  1173. continue;
  1174. }
  1175. var patternsWithoutCurrent = patterns.slice();
  1176. patternsWithoutCurrent.splice(i, 1);
  1177. var result = findPattern$1(editor, block, {
  1178. pattern: pattern,
  1179. remainingPatterns: patternsWithoutCurrent,
  1180. position: endSpot
  1181. });
  1182. if (result.isSome()) {
  1183. return result;
  1184. }
  1185. }
  1186. return Option.none();
  1187. });
  1188. };
  1189. var applyPattern$1 = function (editor, pattern, patternRange) {
  1190. editor.selection.setRng(patternRange);
  1191. if (pattern.type === 'inline-format') {
  1192. each(pattern.format, function (format) {
  1193. editor.formatter.apply(format);
  1194. });
  1195. } else {
  1196. editor.execCommand(pattern.cmd, false, pattern.value);
  1197. }
  1198. };
  1199. var applyReplacementPattern = function (editor, pattern, marker, isRoot) {
  1200. var markerRange = rangeFromMarker(editor.dom, marker);
  1201. deleteRng(editor.dom, markerRange, isRoot);
  1202. applyPattern$1(editor, pattern, markerRange);
  1203. };
  1204. var applyPatternWithContent = function (editor, pattern, startMarker, endMarker, isRoot) {
  1205. var dom = editor.dom;
  1206. var markerEndRange = rangeFromMarker(dom, endMarker);
  1207. var markerStartRange = rangeFromMarker(dom, startMarker);
  1208. deleteRng(dom, markerStartRange, isRoot);
  1209. deleteRng(dom, markerEndRange, isRoot);
  1210. var patternMarker = {
  1211. prefix: startMarker.prefix,
  1212. start: startMarker.end,
  1213. end: endMarker.start
  1214. };
  1215. var patternRange = rangeFromMarker(dom, patternMarker);
  1216. applyPattern$1(editor, pattern, patternRange);
  1217. };
  1218. var addMarkers = function (dom, matches) {
  1219. var markerPrefix = generate$1('mce_textpattern');
  1220. var matchesWithEnds = foldr(matches, function (acc, match) {
  1221. var endMarker = createMarker(dom, markerPrefix + ('_end' + acc.length), match.endRng);
  1222. return acc.concat([__assign(__assign({}, match), { endMarker: endMarker })]);
  1223. }, []);
  1224. return foldr(matchesWithEnds, function (acc, match) {
  1225. var idx = matchesWithEnds.length - acc.length - 1;
  1226. var startMarker = isReplacementPattern(match.pattern) ? match.endMarker : createMarker(dom, markerPrefix + ('_start' + idx), match.startRng);
  1227. return acc.concat([__assign(__assign({}, match), { startMarker: startMarker })]);
  1228. }, []);
  1229. };
  1230. var findPatterns$1 = function (editor, patterns, space) {
  1231. var rng = editor.selection.getRng();
  1232. if (rng.collapsed === false) {
  1233. return [];
  1234. }
  1235. return getParentBlock(editor, rng).bind(function (block) {
  1236. var offset = rng.startOffset - (space ? 1 : 0);
  1237. return findPatternsRec(editor, patterns, rng.startContainer, offset, block);
  1238. }).fold(function () {
  1239. return [];
  1240. }, function (result) {
  1241. return result.matches;
  1242. });
  1243. };
  1244. var applyMatches$1 = function (editor, matches) {
  1245. if (matches.length === 0) {
  1246. return;
  1247. }
  1248. var dom = editor.dom;
  1249. var bookmark = editor.selection.getBookmark();
  1250. var matchesWithMarkers = addMarkers(dom, matches);
  1251. each(matchesWithMarkers, function (match) {
  1252. var block = dom.getParent(match.startMarker.start, dom.isBlock);
  1253. var isRoot = function (node) {
  1254. return node === block;
  1255. };
  1256. if (isReplacementPattern(match.pattern)) {
  1257. applyReplacementPattern(editor, match.pattern, match.endMarker, isRoot);
  1258. } else {
  1259. applyPatternWithContent(editor, match.pattern, match.startMarker, match.endMarker, isRoot);
  1260. }
  1261. removeMarker(dom, match.endMarker, isRoot);
  1262. removeMarker(dom, match.startMarker, isRoot);
  1263. });
  1264. editor.selection.moveToBookmark(bookmark);
  1265. };
  1266. var handleEnter = function (editor, patternSet) {
  1267. if (!editor.selection.isCollapsed()) {
  1268. return false;
  1269. }
  1270. var inlineMatches = findPatterns$1(editor, patternSet.inlinePatterns, false);
  1271. var blockMatches = findPatterns(editor, patternSet.blockPatterns);
  1272. if (blockMatches.length > 0 || inlineMatches.length > 0) {
  1273. editor.undoManager.add();
  1274. editor.undoManager.extra(function () {
  1275. editor.execCommand('mceInsertNewLine');
  1276. }, function () {
  1277. editor.insertContent(zeroWidth);
  1278. applyMatches$1(editor, inlineMatches);
  1279. applyMatches(editor, blockMatches);
  1280. var range = editor.selection.getRng();
  1281. var spot = textBefore(range.startContainer, range.startOffset, editor.dom.getRoot());
  1282. editor.execCommand('mceInsertNewLine');
  1283. spot.each(function (s) {
  1284. var node = s.container;
  1285. if (node.data.charAt(s.offset - 1) === zeroWidth) {
  1286. node.deleteData(s.offset - 1, 1);
  1287. cleanEmptyNodes(editor.dom, node.parentNode, function (e) {
  1288. return e === editor.dom.getRoot();
  1289. });
  1290. }
  1291. });
  1292. });
  1293. return true;
  1294. }
  1295. return false;
  1296. };
  1297. var handleInlineKey = function (editor, patternSet) {
  1298. var inlineMatches = findPatterns$1(editor, patternSet.inlinePatterns, true);
  1299. if (inlineMatches.length > 0) {
  1300. editor.undoManager.transact(function () {
  1301. applyMatches$1(editor, inlineMatches);
  1302. });
  1303. }
  1304. };
  1305. var checkKeyEvent = function (codes, event, predicate) {
  1306. for (var i = 0; i < codes.length; i++) {
  1307. if (predicate(codes[i], event)) {
  1308. return true;
  1309. }
  1310. }
  1311. };
  1312. var checkKeyCode = function (codes, event) {
  1313. return checkKeyEvent(codes, event, function (code, event) {
  1314. return code === event.keyCode && global$2.modifierPressed(event) === false;
  1315. });
  1316. };
  1317. var checkCharCode = function (chars, event) {
  1318. return checkKeyEvent(chars, event, function (chr, event) {
  1319. return chr.charCodeAt(0) === event.charCode;
  1320. });
  1321. };
  1322. var setup = function (editor, patternsState) {
  1323. var charCodes = [
  1324. ',',
  1325. '.',
  1326. ';',
  1327. ':',
  1328. '!',
  1329. '?'
  1330. ];
  1331. var keyCodes = [32];
  1332. editor.on('keydown', function (e) {
  1333. if (e.keyCode === 13 && !global$2.modifierPressed(e)) {
  1334. if (handleEnter(editor, patternsState.get())) {
  1335. e.preventDefault();
  1336. }
  1337. }
  1338. }, true);
  1339. editor.on('keyup', function (e) {
  1340. if (checkKeyCode(keyCodes, e)) {
  1341. handleInlineKey(editor, patternsState.get());
  1342. }
  1343. });
  1344. editor.on('keypress', function (e) {
  1345. if (checkCharCode(charCodes, e)) {
  1346. global$1.setEditorTimeout(editor, function () {
  1347. handleInlineKey(editor, patternsState.get());
  1348. });
  1349. }
  1350. });
  1351. };
  1352. function Plugin () {
  1353. global.add('textpattern', function (editor) {
  1354. var patternsState = Cell(getPatternSet(editor.settings));
  1355. setup(editor, patternsState);
  1356. return get$1(patternsState);
  1357. });
  1358. }
  1359. Plugin();
  1360. }(window));