fx-platform-ui 0.0.13-alpha15 → 0.0.13-alpha17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/lib/fx-platform-ui.mjs +65333 -32078
  2. package/lib/fx-platform-ui.umd.js +113 -69
  3. package/lib/packages/components/area/src/index.vue.d.ts +2 -2
  4. package/lib/packages/components/confirm/index.d.ts +2 -0
  5. package/lib/packages/components/confirm/src/confirm.vue.d.ts +2 -0
  6. package/lib/packages/components/confirm/src/index.d.ts +2 -0
  7. package/lib/style.css +1 -1
  8. package/package.json +1 -1
  9. package/packages/.DS_Store +0 -0
  10. package/packages/component.ts +3 -2
  11. package/packages/components/confirm/index.ts +9 -0
  12. package/packages/components/confirm/src/confirm.vue +75 -0
  13. package/packages/components/confirm/src/index.module.less +61 -0
  14. package/packages/components/confirm/src/index.tsx +91 -0
  15. package/packages/components/confirm/src/plat-confirm-props.ts +40 -0
  16. package/packages/components/editor/src/index.vue +22 -21
  17. package/packages/components/table/src/hook/useTableMethods.tsx +1 -1
  18. package/packages/components/table/src/plat-table-emits.ts +1 -1
  19. package/CHANGELOG.md +0 -46
  20. package/lib/tinymce/CHANGELOG.md +0 -2957
  21. package/lib/tinymce/README.md +0 -71
  22. package/lib/tinymce/bower.json +0 -27
  23. package/lib/tinymce/composer.json +0 -52
  24. package/lib/tinymce/icons/default/icons.js +0 -182
  25. package/lib/tinymce/icons/default/icons.min.js +0 -1
  26. package/lib/tinymce/icons/default/index.js +0 -7
  27. package/lib/tinymce/license.txt +0 -21
  28. package/lib/tinymce/models/dom/index.js +0 -7
  29. package/lib/tinymce/models/dom/model.js +0 -7975
  30. package/lib/tinymce/models/dom/model.min.js +0 -4
  31. package/lib/tinymce/package.json +0 -32
  32. package/lib/tinymce/plugins/advlist/index.js +0 -7
  33. package/lib/tinymce/plugins/advlist/plugin.js +0 -246
  34. package/lib/tinymce/plugins/advlist/plugin.min.js +0 -4
  35. package/lib/tinymce/plugins/anchor/index.js +0 -7
  36. package/lib/tinymce/plugins/anchor/plugin.js +0 -195
  37. package/lib/tinymce/plugins/anchor/plugin.min.js +0 -4
  38. package/lib/tinymce/plugins/autolink/index.js +0 -7
  39. package/lib/tinymce/plugins/autolink/plugin.js +0 -232
  40. package/lib/tinymce/plugins/autolink/plugin.min.js +0 -4
  41. package/lib/tinymce/plugins/autoresize/index.js +0 -7
  42. package/lib/tinymce/plugins/autoresize/plugin.js +0 -156
  43. package/lib/tinymce/plugins/autoresize/plugin.min.js +0 -4
  44. package/lib/tinymce/plugins/autosave/index.js +0 -7
  45. package/lib/tinymce/plugins/autosave/plugin.js +0 -232
  46. package/lib/tinymce/plugins/autosave/plugin.min.js +0 -4
  47. package/lib/tinymce/plugins/charmap/index.js +0 -7
  48. package/lib/tinymce/plugins/charmap/plugin.js +0 -1636
  49. package/lib/tinymce/plugins/charmap/plugin.min.js +0 -4
  50. package/lib/tinymce/plugins/code/index.js +0 -7
  51. package/lib/tinymce/plugins/code/plugin.js +0 -85
  52. package/lib/tinymce/plugins/code/plugin.min.js +0 -4
  53. package/lib/tinymce/plugins/codesample/index.js +0 -7
  54. package/lib/tinymce/plugins/codesample/plugin.js +0 -2451
  55. package/lib/tinymce/plugins/codesample/plugin.min.js +0 -4
  56. package/lib/tinymce/plugins/directionality/index.js +0 -7
  57. package/lib/tinymce/plugins/directionality/plugin.js +0 -384
  58. package/lib/tinymce/plugins/directionality/plugin.min.js +0 -4
  59. package/lib/tinymce/plugins/emoticons/index.js +0 -7
  60. package/lib/tinymce/plugins/emoticons/js/emojiimages.js +0 -1
  61. package/lib/tinymce/plugins/emoticons/js/emojiimages.min.js +0 -3
  62. package/lib/tinymce/plugins/emoticons/js/emojis.js +0 -1
  63. package/lib/tinymce/plugins/emoticons/js/emojis.min.js +0 -2
  64. package/lib/tinymce/plugins/emoticons/plugin.js +0 -577
  65. package/lib/tinymce/plugins/emoticons/plugin.min.js +0 -4
  66. package/lib/tinymce/plugins/fullscreen/index.js +0 -7
  67. package/lib/tinymce/plugins/fullscreen/plugin.js +0 -1190
  68. package/lib/tinymce/plugins/fullscreen/plugin.min.js +0 -4
  69. package/lib/tinymce/plugins/help/index.js +0 -7
  70. package/lib/tinymce/plugins/help/plugin.js +0 -848
  71. package/lib/tinymce/plugins/help/plugin.min.js +0 -4
  72. package/lib/tinymce/plugins/image/index.js +0 -7
  73. package/lib/tinymce/plugins/image/plugin.js +0 -1475
  74. package/lib/tinymce/plugins/image/plugin.min.js +0 -4
  75. package/lib/tinymce/plugins/importcss/index.js +0 -7
  76. package/lib/tinymce/plugins/importcss/plugin.js +0 -342
  77. package/lib/tinymce/plugins/importcss/plugin.min.js +0 -4
  78. package/lib/tinymce/plugins/insertdatetime/index.js +0 -7
  79. package/lib/tinymce/plugins/insertdatetime/plugin.js +0 -176
  80. package/lib/tinymce/plugins/insertdatetime/plugin.min.js +0 -4
  81. package/lib/tinymce/plugins/link/index.js +0 -7
  82. package/lib/tinymce/plugins/link/plugin.js +0 -1190
  83. package/lib/tinymce/plugins/link/plugin.min.js +0 -4
  84. package/lib/tinymce/plugins/lists/index.js +0 -7
  85. package/lib/tinymce/plugins/lists/plugin.js +0 -1820
  86. package/lib/tinymce/plugins/lists/plugin.min.js +0 -4
  87. package/lib/tinymce/plugins/media/index.js +0 -7
  88. package/lib/tinymce/plugins/media/plugin.js +0 -1157
  89. package/lib/tinymce/plugins/media/plugin.min.js +0 -4
  90. package/lib/tinymce/plugins/nonbreaking/index.js +0 -7
  91. package/lib/tinymce/plugins/nonbreaking/plugin.js +0 -111
  92. package/lib/tinymce/plugins/nonbreaking/plugin.min.js +0 -4
  93. package/lib/tinymce/plugins/pagebreak/index.js +0 -7
  94. package/lib/tinymce/plugins/pagebreak/plugin.js +0 -105
  95. package/lib/tinymce/plugins/pagebreak/plugin.min.js +0 -4
  96. package/lib/tinymce/plugins/preview/index.js +0 -7
  97. package/lib/tinymce/plugins/preview/plugin.js +0 -97
  98. package/lib/tinymce/plugins/preview/plugin.min.js +0 -4
  99. package/lib/tinymce/plugins/quickbars/index.js +0 -7
  100. package/lib/tinymce/plugins/quickbars/plugin.js +0 -421
  101. package/lib/tinymce/plugins/quickbars/plugin.min.js +0 -4
  102. package/lib/tinymce/plugins/save/index.js +0 -7
  103. package/lib/tinymce/plugins/save/plugin.js +0 -118
  104. package/lib/tinymce/plugins/save/plugin.min.js +0 -4
  105. package/lib/tinymce/plugins/searchreplace/index.js +0 -7
  106. package/lib/tinymce/plugins/searchreplace/plugin.js +0 -1079
  107. package/lib/tinymce/plugins/searchreplace/plugin.min.js +0 -4
  108. package/lib/tinymce/plugins/table/index.js +0 -7
  109. package/lib/tinymce/plugins/table/plugin.js +0 -3393
  110. package/lib/tinymce/plugins/table/plugin.min.js +0 -4
  111. package/lib/tinymce/plugins/template/index.js +0 -7
  112. package/lib/tinymce/plugins/template/plugin.js +0 -548
  113. package/lib/tinymce/plugins/template/plugin.min.js +0 -4
  114. package/lib/tinymce/plugins/visualblocks/index.js +0 -7
  115. package/lib/tinymce/plugins/visualblocks/plugin.js +0 -98
  116. package/lib/tinymce/plugins/visualblocks/plugin.min.js +0 -4
  117. package/lib/tinymce/plugins/visualchars/index.js +0 -7
  118. package/lib/tinymce/plugins/visualchars/plugin.js +0 -506
  119. package/lib/tinymce/plugins/visualchars/plugin.min.js +0 -4
  120. package/lib/tinymce/plugins/wordcount/index.js +0 -7
  121. package/lib/tinymce/plugins/wordcount/plugin.js +0 -404
  122. package/lib/tinymce/plugins/wordcount/plugin.min.js +0 -4
  123. package/lib/tinymce/themes/silver/index.js +0 -7
  124. package/lib/tinymce/themes/silver/theme.js +0 -26184
  125. package/lib/tinymce/themes/silver/theme.min.js +0 -4
  126. package/lib/tinymce/tinymce.d.ts +0 -2895
  127. package/lib/tinymce/tinymce.js +0 -29400
@@ -1,1079 +0,0 @@
1
- /**
2
- * TinyMCE version 6.1.2 (2022-07-29)
3
- */
4
-
5
- (function () {
6
- 'use strict';
7
-
8
- const Cell = initial => {
9
- let value = initial;
10
- const get = () => {
11
- return value;
12
- };
13
- const set = v => {
14
- value = v;
15
- };
16
- return {
17
- get,
18
- set
19
- };
20
- };
21
-
22
- var global$3 = tinymce.util.Tools.resolve('tinymce.PluginManager');
23
-
24
- const hasProto = (v, constructor, predicate) => {
25
- var _a;
26
- if (predicate(v, constructor.prototype)) {
27
- return true;
28
- } else {
29
- return ((_a = v.constructor) === null || _a === void 0 ? void 0 : _a.name) === constructor.name;
30
- }
31
- };
32
- const typeOf = x => {
33
- const t = typeof x;
34
- if (x === null) {
35
- return 'null';
36
- } else if (t === 'object' && Array.isArray(x)) {
37
- return 'array';
38
- } else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) {
39
- return 'string';
40
- } else {
41
- return t;
42
- }
43
- };
44
- const isType$1 = type => value => typeOf(value) === type;
45
- const isSimpleType = type => value => typeof value === type;
46
- const isString = isType$1('string');
47
- const isArray = isType$1('array');
48
- const isBoolean = isSimpleType('boolean');
49
- const isNullable = a => a === null || a === undefined;
50
- const isNonNullable = a => !isNullable(a);
51
- const isNumber = isSimpleType('number');
52
-
53
- const noop = () => {
54
- };
55
- const constant = value => {
56
- return () => {
57
- return value;
58
- };
59
- };
60
- const always = constant(true);
61
-
62
- const punctuationStr = '[!-#%-*,-\\/:;?@\\[-\\]_{}\xA1\xAB\xB7\xBB\xBF;\xB7\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1361-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u3008\u3009\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30\u2E31\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uff3f\uFF5B\uFF5D\uFF5F-\uFF65]';
63
-
64
- const punctuation$1 = constant(punctuationStr);
65
-
66
- class Optional {
67
- constructor(tag, value) {
68
- this.tag = tag;
69
- this.value = value;
70
- }
71
- static some(value) {
72
- return new Optional(true, value);
73
- }
74
- static none() {
75
- return Optional.singletonNone;
76
- }
77
- fold(onNone, onSome) {
78
- if (this.tag) {
79
- return onSome(this.value);
80
- } else {
81
- return onNone();
82
- }
83
- }
84
- isSome() {
85
- return this.tag;
86
- }
87
- isNone() {
88
- return !this.tag;
89
- }
90
- map(mapper) {
91
- if (this.tag) {
92
- return Optional.some(mapper(this.value));
93
- } else {
94
- return Optional.none();
95
- }
96
- }
97
- bind(binder) {
98
- if (this.tag) {
99
- return binder(this.value);
100
- } else {
101
- return Optional.none();
102
- }
103
- }
104
- exists(predicate) {
105
- return this.tag && predicate(this.value);
106
- }
107
- forall(predicate) {
108
- return !this.tag || predicate(this.value);
109
- }
110
- filter(predicate) {
111
- if (!this.tag || predicate(this.value)) {
112
- return this;
113
- } else {
114
- return Optional.none();
115
- }
116
- }
117
- getOr(replacement) {
118
- return this.tag ? this.value : replacement;
119
- }
120
- or(replacement) {
121
- return this.tag ? this : replacement;
122
- }
123
- getOrThunk(thunk) {
124
- return this.tag ? this.value : thunk();
125
- }
126
- orThunk(thunk) {
127
- return this.tag ? this : thunk();
128
- }
129
- getOrDie(message) {
130
- if (!this.tag) {
131
- throw new Error(message !== null && message !== void 0 ? message : 'Called getOrDie on None');
132
- } else {
133
- return this.value;
134
- }
135
- }
136
- static from(value) {
137
- return isNonNullable(value) ? Optional.some(value) : Optional.none();
138
- }
139
- getOrNull() {
140
- return this.tag ? this.value : null;
141
- }
142
- getOrUndefined() {
143
- return this.value;
144
- }
145
- each(worker) {
146
- if (this.tag) {
147
- worker(this.value);
148
- }
149
- }
150
- toArray() {
151
- return this.tag ? [this.value] : [];
152
- }
153
- toString() {
154
- return this.tag ? `some(${ this.value })` : 'none()';
155
- }
156
- }
157
- Optional.singletonNone = new Optional(false);
158
-
159
- const punctuation = punctuation$1;
160
-
161
- var global$2 = tinymce.util.Tools.resolve('tinymce.Env');
162
-
163
- var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');
164
-
165
- const nativeSlice = Array.prototype.slice;
166
- const nativePush = Array.prototype.push;
167
- const map = (xs, f) => {
168
- const len = xs.length;
169
- const r = new Array(len);
170
- for (let i = 0; i < len; i++) {
171
- const x = xs[i];
172
- r[i] = f(x, i);
173
- }
174
- return r;
175
- };
176
- const each = (xs, f) => {
177
- for (let i = 0, len = xs.length; i < len; i++) {
178
- const x = xs[i];
179
- f(x, i);
180
- }
181
- };
182
- const eachr = (xs, f) => {
183
- for (let i = xs.length - 1; i >= 0; i--) {
184
- const x = xs[i];
185
- f(x, i);
186
- }
187
- };
188
- const groupBy = (xs, f) => {
189
- if (xs.length === 0) {
190
- return [];
191
- } else {
192
- let wasType = f(xs[0]);
193
- const r = [];
194
- let group = [];
195
- for (let i = 0, len = xs.length; i < len; i++) {
196
- const x = xs[i];
197
- const type = f(x);
198
- if (type !== wasType) {
199
- r.push(group);
200
- group = [];
201
- }
202
- wasType = type;
203
- group.push(x);
204
- }
205
- if (group.length !== 0) {
206
- r.push(group);
207
- }
208
- return r;
209
- }
210
- };
211
- const foldl = (xs, f, acc) => {
212
- each(xs, (x, i) => {
213
- acc = f(acc, x, i);
214
- });
215
- return acc;
216
- };
217
- const flatten = xs => {
218
- const r = [];
219
- for (let i = 0, len = xs.length; i < len; ++i) {
220
- if (!isArray(xs[i])) {
221
- throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);
222
- }
223
- nativePush.apply(r, xs[i]);
224
- }
225
- return r;
226
- };
227
- const bind = (xs, f) => flatten(map(xs, f));
228
- const sort = (xs, comparator) => {
229
- const copy = nativeSlice.call(xs, 0);
230
- copy.sort(comparator);
231
- return copy;
232
- };
233
-
234
- const hasOwnProperty = Object.hasOwnProperty;
235
- const has = (obj, key) => hasOwnProperty.call(obj, key);
236
-
237
- typeof window !== 'undefined' ? window : Function('return this;')();
238
-
239
- const DOCUMENT = 9;
240
- const DOCUMENT_FRAGMENT = 11;
241
- const ELEMENT = 1;
242
- const TEXT = 3;
243
-
244
- const type = element => element.dom.nodeType;
245
- const isType = t => element => type(element) === t;
246
- const isText$1 = isType(TEXT);
247
-
248
- const rawSet = (dom, key, value) => {
249
- if (isString(value) || isBoolean(value) || isNumber(value)) {
250
- dom.setAttribute(key, value + '');
251
- } else {
252
- console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom);
253
- throw new Error('Attribute value was not simple');
254
- }
255
- };
256
- const set = (element, key, value) => {
257
- rawSet(element.dom, key, value);
258
- };
259
-
260
- const fromHtml = (html, scope) => {
261
- const doc = scope || document;
262
- const div = doc.createElement('div');
263
- div.innerHTML = html;
264
- if (!div.hasChildNodes() || div.childNodes.length > 1) {
265
- const message = 'HTML does not have a single root node';
266
- console.error(message, html);
267
- throw new Error(message);
268
- }
269
- return fromDom(div.childNodes[0]);
270
- };
271
- const fromTag = (tag, scope) => {
272
- const doc = scope || document;
273
- const node = doc.createElement(tag);
274
- return fromDom(node);
275
- };
276
- const fromText = (text, scope) => {
277
- const doc = scope || document;
278
- const node = doc.createTextNode(text);
279
- return fromDom(node);
280
- };
281
- const fromDom = node => {
282
- if (node === null || node === undefined) {
283
- throw new Error('Node cannot be null or undefined');
284
- }
285
- return { dom: node };
286
- };
287
- const fromPoint = (docElm, x, y) => Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom);
288
- const SugarElement = {
289
- fromHtml,
290
- fromTag,
291
- fromText,
292
- fromDom,
293
- fromPoint
294
- };
295
-
296
- const bypassSelector = dom => dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT && dom.nodeType !== DOCUMENT_FRAGMENT || dom.childElementCount === 0;
297
- const all = (selector, scope) => {
298
- const base = scope === undefined ? document : scope.dom;
299
- return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), SugarElement.fromDom);
300
- };
301
-
302
- const parent = element => Optional.from(element.dom.parentNode).map(SugarElement.fromDom);
303
- const children = element => map(element.dom.childNodes, SugarElement.fromDom);
304
- const spot = (element, offset) => ({
305
- element,
306
- offset
307
- });
308
- const leaf = (element, offset) => {
309
- const cs = children(element);
310
- return cs.length > 0 && offset < cs.length ? spot(cs[offset], 0) : spot(element, offset);
311
- };
312
-
313
- const before = (marker, element) => {
314
- const parent$1 = parent(marker);
315
- parent$1.each(v => {
316
- v.dom.insertBefore(element.dom, marker.dom);
317
- });
318
- };
319
- const append = (parent, element) => {
320
- parent.dom.appendChild(element.dom);
321
- };
322
- const wrap = (element, wrapper) => {
323
- before(element, wrapper);
324
- append(wrapper, element);
325
- };
326
-
327
- const NodeValue = (is, name) => {
328
- const get = element => {
329
- if (!is(element)) {
330
- throw new Error('Can only get ' + name + ' value of a ' + name + ' node');
331
- }
332
- return getOption(element).getOr('');
333
- };
334
- const getOption = element => is(element) ? Optional.from(element.dom.nodeValue) : Optional.none();
335
- const set = (element, value) => {
336
- if (!is(element)) {
337
- throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');
338
- }
339
- element.dom.nodeValue = value;
340
- };
341
- return {
342
- get,
343
- getOption,
344
- set
345
- };
346
- };
347
-
348
- const api = NodeValue(isText$1, 'text');
349
- const get$1 = element => api.get(element);
350
-
351
- const compareDocumentPosition = (a, b, match) => {
352
- return (a.compareDocumentPosition(b) & match) !== 0;
353
- };
354
- const documentPositionPreceding = (a, b) => {
355
- return compareDocumentPosition(a, b, Node.DOCUMENT_POSITION_PRECEDING);
356
- };
357
-
358
- const descendants = (scope, selector) => all(selector, scope);
359
-
360
- var global = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');
361
-
362
- const isSimpleBoundary = (dom, node) => dom.isBlock(node) || has(dom.schema.getVoidElements(), node.nodeName);
363
- const isContentEditableFalse = (dom, node) => dom.getContentEditable(node) === 'false';
364
- const isContentEditableTrueInCef = (dom, node) => dom.getContentEditable(node) === 'true' && dom.getContentEditableParent(node.parentNode) === 'false';
365
- const isHidden = (dom, node) => !dom.isBlock(node) && has(dom.schema.getWhitespaceElements(), node.nodeName);
366
- const isBoundary = (dom, node) => isSimpleBoundary(dom, node) || isContentEditableFalse(dom, node) || isHidden(dom, node) || isContentEditableTrueInCef(dom, node);
367
- const isText = node => node.nodeType === 3;
368
- const nuSection = () => ({
369
- sOffset: 0,
370
- fOffset: 0,
371
- elements: []
372
- });
373
- const toLeaf = (node, offset) => leaf(SugarElement.fromDom(node), offset);
374
- const walk = (dom, walkerFn, startNode, callbacks, endNode, skipStart = true) => {
375
- let next = skipStart ? walkerFn(false) : startNode;
376
- while (next) {
377
- const isCefNode = isContentEditableFalse(dom, next);
378
- if (isCefNode || isHidden(dom, next)) {
379
- const stopWalking = isCefNode ? callbacks.cef(next) : callbacks.boundary(next);
380
- if (stopWalking) {
381
- break;
382
- } else {
383
- next = walkerFn(true);
384
- continue;
385
- }
386
- } else if (isSimpleBoundary(dom, next)) {
387
- if (callbacks.boundary(next)) {
388
- break;
389
- }
390
- } else if (isText(next)) {
391
- callbacks.text(next);
392
- }
393
- if (next === endNode) {
394
- break;
395
- } else {
396
- next = walkerFn(false);
397
- }
398
- }
399
- };
400
- const collectTextToBoundary = (dom, section, node, rootNode, forwards) => {
401
- if (isBoundary(dom, node)) {
402
- return;
403
- }
404
- const rootBlock = dom.getParent(rootNode, dom.isBlock);
405
- const walker = new global(node, rootBlock);
406
- const walkerFn = forwards ? walker.next.bind(walker) : walker.prev.bind(walker);
407
- walk(dom, walkerFn, node, {
408
- boundary: always,
409
- cef: always,
410
- text: next => {
411
- if (forwards) {
412
- section.fOffset += next.length;
413
- } else {
414
- section.sOffset += next.length;
415
- }
416
- section.elements.push(SugarElement.fromDom(next));
417
- }
418
- });
419
- };
420
- const collect = (dom, rootNode, startNode, endNode, callbacks, skipStart = true) => {
421
- const walker = new global(startNode, rootNode);
422
- const sections = [];
423
- let current = nuSection();
424
- collectTextToBoundary(dom, current, startNode, rootNode, false);
425
- const finishSection = () => {
426
- if (current.elements.length > 0) {
427
- sections.push(current);
428
- current = nuSection();
429
- }
430
- return false;
431
- };
432
- walk(dom, walker.next.bind(walker), startNode, {
433
- boundary: finishSection,
434
- cef: node => {
435
- finishSection();
436
- if (callbacks) {
437
- sections.push(...callbacks.cef(node));
438
- }
439
- return false;
440
- },
441
- text: next => {
442
- current.elements.push(SugarElement.fromDom(next));
443
- if (callbacks) {
444
- callbacks.text(next, current);
445
- }
446
- }
447
- }, endNode, skipStart);
448
- if (endNode) {
449
- collectTextToBoundary(dom, current, endNode, rootNode, true);
450
- }
451
- finishSection();
452
- return sections;
453
- };
454
- const collectRangeSections = (dom, rng) => {
455
- const start = toLeaf(rng.startContainer, rng.startOffset);
456
- const startNode = start.element.dom;
457
- const end = toLeaf(rng.endContainer, rng.endOffset);
458
- const endNode = end.element.dom;
459
- return collect(dom, rng.commonAncestorContainer, startNode, endNode, {
460
- text: (node, section) => {
461
- if (node === endNode) {
462
- section.fOffset += node.length - end.offset;
463
- } else if (node === startNode) {
464
- section.sOffset += start.offset;
465
- }
466
- },
467
- cef: node => {
468
- const sections = bind(descendants(SugarElement.fromDom(node), '*[contenteditable=true]'), e => {
469
- const ceTrueNode = e.dom;
470
- return collect(dom, ceTrueNode, ceTrueNode);
471
- });
472
- return sort(sections, (a, b) => documentPositionPreceding(a.elements[0].dom, b.elements[0].dom) ? 1 : -1);
473
- }
474
- }, false);
475
- };
476
- const fromRng = (dom, rng) => rng.collapsed ? [] : collectRangeSections(dom, rng);
477
- const fromNode = (dom, node) => {
478
- const rng = dom.createRng();
479
- rng.selectNode(node);
480
- return fromRng(dom, rng);
481
- };
482
- const fromNodes = (dom, nodes) => bind(nodes, node => fromNode(dom, node));
483
-
484
- const find$2 = (text, pattern, start = 0, finish = text.length) => {
485
- const regex = pattern.regex;
486
- regex.lastIndex = start;
487
- const results = [];
488
- let match;
489
- while (match = regex.exec(text)) {
490
- const matchedText = match[pattern.matchIndex];
491
- const matchStart = match.index + match[0].indexOf(matchedText);
492
- const matchFinish = matchStart + matchedText.length;
493
- if (matchFinish > finish) {
494
- break;
495
- }
496
- results.push({
497
- start: matchStart,
498
- finish: matchFinish
499
- });
500
- regex.lastIndex = matchFinish;
501
- }
502
- return results;
503
- };
504
- const extract = (elements, matches) => {
505
- const nodePositions = foldl(elements, (acc, element) => {
506
- const content = get$1(element);
507
- const start = acc.last;
508
- const finish = start + content.length;
509
- const positions = bind(matches, (match, matchIdx) => {
510
- if (match.start < finish && match.finish > start) {
511
- return [{
512
- element,
513
- start: Math.max(start, match.start) - start,
514
- finish: Math.min(finish, match.finish) - start,
515
- matchId: matchIdx
516
- }];
517
- } else {
518
- return [];
519
- }
520
- });
521
- return {
522
- results: acc.results.concat(positions),
523
- last: finish
524
- };
525
- }, {
526
- results: [],
527
- last: 0
528
- }).results;
529
- return groupBy(nodePositions, position => position.matchId);
530
- };
531
-
532
- const find$1 = (pattern, sections) => bind(sections, section => {
533
- const elements = section.elements;
534
- const content = map(elements, get$1).join('');
535
- const positions = find$2(content, pattern, section.sOffset, content.length - section.fOffset);
536
- return extract(elements, positions);
537
- });
538
- const mark = (matches, replacementNode) => {
539
- eachr(matches, (match, idx) => {
540
- eachr(match, pos => {
541
- const wrapper = SugarElement.fromDom(replacementNode.cloneNode(false));
542
- set(wrapper, 'data-mce-index', idx);
543
- const textNode = pos.element.dom;
544
- if (textNode.length === pos.finish && pos.start === 0) {
545
- wrap(pos.element, wrapper);
546
- } else {
547
- if (textNode.length !== pos.finish) {
548
- textNode.splitText(pos.finish);
549
- }
550
- const matchNode = textNode.splitText(pos.start);
551
- wrap(SugarElement.fromDom(matchNode), wrapper);
552
- }
553
- });
554
- });
555
- };
556
- const findAndMark = (dom, pattern, node, replacementNode) => {
557
- const textSections = fromNode(dom, node);
558
- const matches = find$1(pattern, textSections);
559
- mark(matches, replacementNode);
560
- return matches.length;
561
- };
562
- const findAndMarkInSelection = (dom, pattern, selection, replacementNode) => {
563
- const bookmark = selection.getBookmark();
564
- const nodes = dom.select('td[data-mce-selected],th[data-mce-selected]');
565
- const textSections = nodes.length > 0 ? fromNodes(dom, nodes) : fromRng(dom, selection.getRng());
566
- const matches = find$1(pattern, textSections);
567
- mark(matches, replacementNode);
568
- selection.moveToBookmark(bookmark);
569
- return matches.length;
570
- };
571
-
572
- const getElmIndex = elm => {
573
- const value = elm.getAttribute('data-mce-index');
574
- if (typeof value === 'number') {
575
- return '' + value;
576
- }
577
- return value;
578
- };
579
- const markAllMatches = (editor, currentSearchState, pattern, inSelection) => {
580
- const marker = editor.dom.create('span', { 'data-mce-bogus': 1 });
581
- marker.className = 'mce-match-marker';
582
- const node = editor.getBody();
583
- done(editor, currentSearchState, false);
584
- if (inSelection) {
585
- return findAndMarkInSelection(editor.dom, pattern, editor.selection, marker);
586
- } else {
587
- return findAndMark(editor.dom, pattern, node, marker);
588
- }
589
- };
590
- const unwrap = node => {
591
- const parentNode = node.parentNode;
592
- if (node.firstChild) {
593
- parentNode.insertBefore(node.firstChild, node);
594
- }
595
- node.parentNode.removeChild(node);
596
- };
597
- const findSpansByIndex = (editor, index) => {
598
- const spans = [];
599
- const nodes = global$1.toArray(editor.getBody().getElementsByTagName('span'));
600
- if (nodes.length) {
601
- for (let i = 0; i < nodes.length; i++) {
602
- const nodeIndex = getElmIndex(nodes[i]);
603
- if (nodeIndex === null || !nodeIndex.length) {
604
- continue;
605
- }
606
- if (nodeIndex === index.toString()) {
607
- spans.push(nodes[i]);
608
- }
609
- }
610
- }
611
- return spans;
612
- };
613
- const moveSelection = (editor, currentSearchState, forward) => {
614
- const searchState = currentSearchState.get();
615
- let testIndex = searchState.index;
616
- const dom = editor.dom;
617
- forward = forward !== false;
618
- if (forward) {
619
- if (testIndex + 1 === searchState.count) {
620
- testIndex = 0;
621
- } else {
622
- testIndex++;
623
- }
624
- } else {
625
- if (testIndex - 1 === -1) {
626
- testIndex = searchState.count - 1;
627
- } else {
628
- testIndex--;
629
- }
630
- }
631
- dom.removeClass(findSpansByIndex(editor, searchState.index), 'mce-match-marker-selected');
632
- const spans = findSpansByIndex(editor, testIndex);
633
- if (spans.length) {
634
- dom.addClass(findSpansByIndex(editor, testIndex), 'mce-match-marker-selected');
635
- editor.selection.scrollIntoView(spans[0]);
636
- return testIndex;
637
- }
638
- return -1;
639
- };
640
- const removeNode = (dom, node) => {
641
- const parent = node.parentNode;
642
- dom.remove(node);
643
- if (dom.isEmpty(parent)) {
644
- dom.remove(parent);
645
- }
646
- };
647
- const escapeSearchText = (text, wholeWord) => {
648
- const escapedText = text.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&').replace(/\s/g, '[^\\S\\r\\n\\uFEFF]');
649
- const wordRegex = '(' + escapedText + ')';
650
- return wholeWord ? `(?:^|\\s|${ punctuation() })` + wordRegex + `(?=$|\\s|${ punctuation() })` : wordRegex;
651
- };
652
- const find = (editor, currentSearchState, text, matchCase, wholeWord, inSelection) => {
653
- const selection = editor.selection;
654
- const escapedText = escapeSearchText(text, wholeWord);
655
- const isForwardSelection = selection.isForward();
656
- const pattern = {
657
- regex: new RegExp(escapedText, matchCase ? 'g' : 'gi'),
658
- matchIndex: 1
659
- };
660
- const count = markAllMatches(editor, currentSearchState, pattern, inSelection);
661
- if (global$2.browser.isSafari()) {
662
- selection.setRng(selection.getRng(), isForwardSelection);
663
- }
664
- if (count) {
665
- const newIndex = moveSelection(editor, currentSearchState, true);
666
- currentSearchState.set({
667
- index: newIndex,
668
- count,
669
- text,
670
- matchCase,
671
- wholeWord,
672
- inSelection
673
- });
674
- }
675
- return count;
676
- };
677
- const next = (editor, currentSearchState) => {
678
- const index = moveSelection(editor, currentSearchState, true);
679
- currentSearchState.set({
680
- ...currentSearchState.get(),
681
- index
682
- });
683
- };
684
- const prev = (editor, currentSearchState) => {
685
- const index = moveSelection(editor, currentSearchState, false);
686
- currentSearchState.set({
687
- ...currentSearchState.get(),
688
- index
689
- });
690
- };
691
- const isMatchSpan = node => {
692
- const matchIndex = getElmIndex(node);
693
- return matchIndex !== null && matchIndex.length > 0;
694
- };
695
- const replace = (editor, currentSearchState, text, forward, all) => {
696
- const searchState = currentSearchState.get();
697
- const currentIndex = searchState.index;
698
- let currentMatchIndex, nextIndex = currentIndex;
699
- forward = forward !== false;
700
- const node = editor.getBody();
701
- const nodes = global$1.grep(global$1.toArray(node.getElementsByTagName('span')), isMatchSpan);
702
- for (let i = 0; i < nodes.length; i++) {
703
- const nodeIndex = getElmIndex(nodes[i]);
704
- let matchIndex = currentMatchIndex = parseInt(nodeIndex, 10);
705
- if (all || matchIndex === searchState.index) {
706
- if (text.length) {
707
- nodes[i].firstChild.nodeValue = text;
708
- unwrap(nodes[i]);
709
- } else {
710
- removeNode(editor.dom, nodes[i]);
711
- }
712
- while (nodes[++i]) {
713
- matchIndex = parseInt(getElmIndex(nodes[i]), 10);
714
- if (matchIndex === currentMatchIndex) {
715
- removeNode(editor.dom, nodes[i]);
716
- } else {
717
- i--;
718
- break;
719
- }
720
- }
721
- if (forward) {
722
- nextIndex--;
723
- }
724
- } else if (currentMatchIndex > currentIndex) {
725
- nodes[i].setAttribute('data-mce-index', String(currentMatchIndex - 1));
726
- }
727
- }
728
- currentSearchState.set({
729
- ...searchState,
730
- count: all ? 0 : searchState.count - 1,
731
- index: nextIndex
732
- });
733
- if (forward) {
734
- next(editor, currentSearchState);
735
- } else {
736
- prev(editor, currentSearchState);
737
- }
738
- return !all && currentSearchState.get().count > 0;
739
- };
740
- const done = (editor, currentSearchState, keepEditorSelection) => {
741
- let startContainer, endContainer;
742
- const searchState = currentSearchState.get();
743
- const nodes = global$1.toArray(editor.getBody().getElementsByTagName('span'));
744
- for (let i = 0; i < nodes.length; i++) {
745
- const nodeIndex = getElmIndex(nodes[i]);
746
- if (nodeIndex !== null && nodeIndex.length) {
747
- if (nodeIndex === searchState.index.toString()) {
748
- if (!startContainer) {
749
- startContainer = nodes[i].firstChild;
750
- }
751
- endContainer = nodes[i].firstChild;
752
- }
753
- unwrap(nodes[i]);
754
- }
755
- }
756
- currentSearchState.set({
757
- ...searchState,
758
- index: -1,
759
- count: 0,
760
- text: ''
761
- });
762
- if (startContainer && endContainer) {
763
- const rng = editor.dom.createRng();
764
- rng.setStart(startContainer, 0);
765
- rng.setEnd(endContainer, endContainer.data.length);
766
- if (keepEditorSelection !== false) {
767
- editor.selection.setRng(rng);
768
- }
769
- return rng;
770
- }
771
- };
772
- const hasNext = (editor, currentSearchState) => currentSearchState.get().count > 1;
773
- const hasPrev = (editor, currentSearchState) => currentSearchState.get().count > 1;
774
-
775
- const get = (editor, currentState) => {
776
- const done$1 = keepEditorSelection => {
777
- return done(editor, currentState, keepEditorSelection);
778
- };
779
- const find$1 = (text, matchCase, wholeWord, inSelection = false) => {
780
- return find(editor, currentState, text, matchCase, wholeWord, inSelection);
781
- };
782
- const next$1 = () => {
783
- return next(editor, currentState);
784
- };
785
- const prev$1 = () => {
786
- return prev(editor, currentState);
787
- };
788
- const replace$1 = (text, forward, all) => {
789
- return replace(editor, currentState, text, forward, all);
790
- };
791
- return {
792
- done: done$1,
793
- find: find$1,
794
- next: next$1,
795
- prev: prev$1,
796
- replace: replace$1
797
- };
798
- };
799
-
800
- const singleton = doRevoke => {
801
- const subject = Cell(Optional.none());
802
- const revoke = () => subject.get().each(doRevoke);
803
- const clear = () => {
804
- revoke();
805
- subject.set(Optional.none());
806
- };
807
- const isSet = () => subject.get().isSome();
808
- const get = () => subject.get();
809
- const set = s => {
810
- revoke();
811
- subject.set(Optional.some(s));
812
- };
813
- return {
814
- clear,
815
- isSet,
816
- get,
817
- set
818
- };
819
- };
820
- const value = () => {
821
- const subject = singleton(noop);
822
- const on = f => subject.get().each(f);
823
- return {
824
- ...subject,
825
- on
826
- };
827
- };
828
-
829
- const open = (editor, currentSearchState) => {
830
- const dialogApi = value();
831
- editor.undoManager.add();
832
- const selectedText = global$1.trim(editor.selection.getContent({ format: 'text' }));
833
- const updateButtonStates = api => {
834
- api.setEnabled('next', hasNext(editor, currentSearchState));
835
- api.setEnabled('prev', hasPrev(editor, currentSearchState));
836
- };
837
- const updateSearchState = api => {
838
- const data = api.getData();
839
- const current = currentSearchState.get();
840
- currentSearchState.set({
841
- ...current,
842
- matchCase: data.matchcase,
843
- wholeWord: data.wholewords,
844
- inSelection: data.inselection
845
- });
846
- };
847
- const disableAll = (api, disable) => {
848
- const buttons = [
849
- 'replace',
850
- 'replaceall',
851
- 'prev',
852
- 'next'
853
- ];
854
- const toggle = name => api.setEnabled(name, !disable);
855
- each(buttons, toggle);
856
- };
857
- const notFoundAlert = api => {
858
- editor.windowManager.alert('Could not find the specified string.', () => {
859
- api.focus('findtext');
860
- });
861
- };
862
- const focusButtonIfRequired = (api, name) => {
863
- if (global$2.browser.isSafari() && global$2.deviceType.isTouch() && (name === 'find' || name === 'replace' || name === 'replaceall')) {
864
- api.focus(name);
865
- }
866
- };
867
- const reset = api => {
868
- done(editor, currentSearchState, false);
869
- disableAll(api, true);
870
- updateButtonStates(api);
871
- };
872
- const doFind = api => {
873
- const data = api.getData();
874
- const last = currentSearchState.get();
875
- if (!data.findtext.length) {
876
- reset(api);
877
- return;
878
- }
879
- if (last.text === data.findtext && last.matchCase === data.matchcase && last.wholeWord === data.wholewords) {
880
- next(editor, currentSearchState);
881
- } else {
882
- const count = find(editor, currentSearchState, data.findtext, data.matchcase, data.wholewords, data.inselection);
883
- if (count <= 0) {
884
- notFoundAlert(api);
885
- }
886
- disableAll(api, count === 0);
887
- }
888
- updateButtonStates(api);
889
- };
890
- const initialState = currentSearchState.get();
891
- const initialData = {
892
- findtext: selectedText,
893
- replacetext: '',
894
- wholewords: initialState.wholeWord,
895
- matchcase: initialState.matchCase,
896
- inselection: initialState.inSelection
897
- };
898
- const spec = {
899
- title: 'Find and Replace',
900
- size: 'normal',
901
- body: {
902
- type: 'panel',
903
- items: [
904
- {
905
- type: 'bar',
906
- items: [
907
- {
908
- type: 'input',
909
- name: 'findtext',
910
- placeholder: 'Find',
911
- maximized: true,
912
- inputMode: 'search'
913
- },
914
- {
915
- type: 'button',
916
- name: 'prev',
917
- text: 'Previous',
918
- icon: 'action-prev',
919
- enabled: false,
920
- borderless: true
921
- },
922
- {
923
- type: 'button',
924
- name: 'next',
925
- text: 'Next',
926
- icon: 'action-next',
927
- enabled: false,
928
- borderless: true
929
- }
930
- ]
931
- },
932
- {
933
- type: 'input',
934
- name: 'replacetext',
935
- placeholder: 'Replace with',
936
- inputMode: 'search'
937
- }
938
- ]
939
- },
940
- buttons: [
941
- {
942
- type: 'menu',
943
- name: 'options',
944
- icon: 'preferences',
945
- tooltip: 'Preferences',
946
- align: 'start',
947
- items: [
948
- {
949
- type: 'togglemenuitem',
950
- name: 'matchcase',
951
- text: 'Match case'
952
- },
953
- {
954
- type: 'togglemenuitem',
955
- name: 'wholewords',
956
- text: 'Find whole words only'
957
- },
958
- {
959
- type: 'togglemenuitem',
960
- name: 'inselection',
961
- text: 'Find in selection'
962
- }
963
- ]
964
- },
965
- {
966
- type: 'custom',
967
- name: 'find',
968
- text: 'Find',
969
- primary: true
970
- },
971
- {
972
- type: 'custom',
973
- name: 'replace',
974
- text: 'Replace',
975
- enabled: false
976
- },
977
- {
978
- type: 'custom',
979
- name: 'replaceall',
980
- text: 'Replace all',
981
- enabled: false
982
- }
983
- ],
984
- initialData,
985
- onChange: (api, details) => {
986
- if (details.name === 'findtext' && currentSearchState.get().count > 0) {
987
- reset(api);
988
- }
989
- },
990
- onAction: (api, details) => {
991
- const data = api.getData();
992
- switch (details.name) {
993
- case 'find':
994
- doFind(api);
995
- break;
996
- case 'replace':
997
- if (!replace(editor, currentSearchState, data.replacetext)) {
998
- reset(api);
999
- } else {
1000
- updateButtonStates(api);
1001
- }
1002
- break;
1003
- case 'replaceall':
1004
- replace(editor, currentSearchState, data.replacetext, true, true);
1005
- reset(api);
1006
- break;
1007
- case 'prev':
1008
- prev(editor, currentSearchState);
1009
- updateButtonStates(api);
1010
- break;
1011
- case 'next':
1012
- next(editor, currentSearchState);
1013
- updateButtonStates(api);
1014
- break;
1015
- case 'matchcase':
1016
- case 'wholewords':
1017
- case 'inselection':
1018
- updateSearchState(api);
1019
- reset(api);
1020
- break;
1021
- }
1022
- focusButtonIfRequired(api, details.name);
1023
- },
1024
- onSubmit: api => {
1025
- doFind(api);
1026
- focusButtonIfRequired(api, 'find');
1027
- },
1028
- onClose: () => {
1029
- editor.focus();
1030
- done(editor, currentSearchState);
1031
- editor.undoManager.add();
1032
- }
1033
- };
1034
- dialogApi.set(editor.windowManager.open(spec, { inline: 'toolbar' }));
1035
- };
1036
-
1037
- const register$1 = (editor, currentSearchState) => {
1038
- editor.addCommand('SearchReplace', () => {
1039
- open(editor, currentSearchState);
1040
- });
1041
- };
1042
-
1043
- const showDialog = (editor, currentSearchState) => () => {
1044
- open(editor, currentSearchState);
1045
- };
1046
- const register = (editor, currentSearchState) => {
1047
- editor.ui.registry.addMenuItem('searchreplace', {
1048
- text: 'Find and replace...',
1049
- shortcut: 'Meta+F',
1050
- onAction: showDialog(editor, currentSearchState),
1051
- icon: 'search'
1052
- });
1053
- editor.ui.registry.addButton('searchreplace', {
1054
- tooltip: 'Find and replace',
1055
- onAction: showDialog(editor, currentSearchState),
1056
- icon: 'search'
1057
- });
1058
- editor.shortcuts.add('Meta+F', '', showDialog(editor, currentSearchState));
1059
- };
1060
-
1061
- var Plugin = () => {
1062
- global$3.add('searchreplace', editor => {
1063
- const currentSearchState = Cell({
1064
- index: -1,
1065
- count: 0,
1066
- text: '',
1067
- matchCase: false,
1068
- wholeWord: false,
1069
- inSelection: false
1070
- });
1071
- register$1(editor, currentSearchState);
1072
- register(editor, currentSearchState);
1073
- return get(editor, currentSearchState);
1074
- });
1075
- };
1076
-
1077
- Plugin();
1078
-
1079
- })();