fable-editor 1.2.8 → 1.3.0
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.
- package/dist/angular/core/editor.d.ts +34 -0
- package/dist/angular/core/word-image-paste.d.ts +27 -0
- package/dist/angular/esm2022/core/editor.mjs +201 -5
- package/dist/angular/esm2022/core/word-image-paste.mjs +189 -0
- package/dist/angular/fesm2022/fable-editor.mjs +388 -4
- package/dist/angular/fesm2022/fable-editor.mjs.map +1 -1
- package/dist/core/editor.css +14 -0
- package/dist/core/editor.d.ts +34 -0
- package/dist/core/editor.d.ts.map +1 -1
- package/dist/core/index.cjs +4 -4
- package/dist/core/index.mjs +980 -759
- package/dist/core/word-image-paste.d.ts +28 -0
- package/dist/core/word-image-paste.d.ts.map +1 -0
- package/dist/react/index.cjs +11 -11
- package/dist/react/index.mjs +1107 -886
- package/package.json +1 -1
- package/style.css +14 -0
package/dist/react/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
var
|
|
1
|
+
import ue, { forwardRef as Ve, useRef as z, useImperativeHandle as ze, useEffect as lt } from "react";
|
|
2
|
+
var St = { exports: {} }, J = {};
|
|
3
3
|
/**
|
|
4
4
|
* @license React
|
|
5
5
|
* react-jsx-runtime.production.min.js
|
|
@@ -9,19 +9,19 @@ var Et = { exports: {} }, J = {};
|
|
|
9
9
|
* This source code is licensed under the MIT license found in the
|
|
10
10
|
* LICENSE file in the root directory of this source tree.
|
|
11
11
|
*/
|
|
12
|
-
var
|
|
13
|
-
function
|
|
14
|
-
if (
|
|
15
|
-
|
|
16
|
-
var
|
|
17
|
-
function l
|
|
18
|
-
var d,
|
|
19
|
-
|
|
20
|
-
for (d in o) i.call(o, d) && !n.hasOwnProperty(d) && (
|
|
21
|
-
if (
|
|
22
|
-
return { $$typeof: t, type:
|
|
23
|
-
}
|
|
24
|
-
return J.Fragment = e, J.jsx =
|
|
12
|
+
var Kt;
|
|
13
|
+
function Xe() {
|
|
14
|
+
if (Kt) return J;
|
|
15
|
+
Kt = 1;
|
|
16
|
+
var u = ue, t = Symbol.for("react.element"), e = Symbol.for("react.fragment"), i = Object.prototype.hasOwnProperty, s = u.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner, n = { key: !0, ref: !0, __self: !0, __source: !0 };
|
|
17
|
+
function r(l, o, a) {
|
|
18
|
+
var d, p = {}, m = null, b = null;
|
|
19
|
+
a !== void 0 && (m = "" + a), o.key !== void 0 && (m = "" + o.key), o.ref !== void 0 && (b = o.ref);
|
|
20
|
+
for (d in o) i.call(o, d) && !n.hasOwnProperty(d) && (p[d] = o[d]);
|
|
21
|
+
if (l && l.defaultProps) for (d in o = l.defaultProps, o) p[d] === void 0 && (p[d] = o[d]);
|
|
22
|
+
return { $$typeof: t, type: l, key: m, ref: b, props: p, _owner: s.current };
|
|
23
|
+
}
|
|
24
|
+
return J.Fragment = e, J.jsx = r, J.jsxs = r, J;
|
|
25
25
|
}
|
|
26
26
|
var tt = {};
|
|
27
27
|
/**
|
|
@@ -33,61 +33,61 @@ var tt = {};
|
|
|
33
33
|
* This source code is licensed under the MIT license found in the
|
|
34
34
|
* LICENSE file in the root directory of this source tree.
|
|
35
35
|
*/
|
|
36
|
-
var
|
|
37
|
-
function
|
|
38
|
-
return
|
|
39
|
-
var
|
|
40
|
-
function x(
|
|
41
|
-
if (
|
|
36
|
+
var Jt;
|
|
37
|
+
function Ye() {
|
|
38
|
+
return Jt || (Jt = 1, process.env.NODE_ENV !== "production" && function() {
|
|
39
|
+
var u = ue, t = Symbol.for("react.element"), e = Symbol.for("react.portal"), i = Symbol.for("react.fragment"), s = Symbol.for("react.strict_mode"), n = Symbol.for("react.profiler"), r = Symbol.for("react.provider"), l = Symbol.for("react.context"), o = Symbol.for("react.forward_ref"), a = Symbol.for("react.suspense"), d = Symbol.for("react.suspense_list"), p = Symbol.for("react.memo"), m = Symbol.for("react.lazy"), b = Symbol.for("react.offscreen"), y = Symbol.iterator, g = "@@iterator";
|
|
40
|
+
function x(c) {
|
|
41
|
+
if (c === null || typeof c != "object")
|
|
42
42
|
return null;
|
|
43
|
-
var f = y &&
|
|
43
|
+
var f = y && c[y] || c[g];
|
|
44
44
|
return typeof f == "function" ? f : null;
|
|
45
45
|
}
|
|
46
|
-
var w =
|
|
47
|
-
function E(
|
|
46
|
+
var w = u.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
|
|
47
|
+
function E(c) {
|
|
48
48
|
{
|
|
49
49
|
for (var f = arguments.length, v = new Array(f > 1 ? f - 1 : 0), T = 1; T < f; T++)
|
|
50
50
|
v[T - 1] = arguments[T];
|
|
51
|
-
I("error",
|
|
51
|
+
I("error", c, v);
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
|
-
function I(
|
|
54
|
+
function I(c, f, v) {
|
|
55
55
|
{
|
|
56
|
-
var T = w.ReactDebugCurrentFrame,
|
|
57
|
-
|
|
58
|
-
var
|
|
56
|
+
var T = w.ReactDebugCurrentFrame, k = T.getStackAddendum();
|
|
57
|
+
k !== "" && (f += "%s", v = v.concat([k]));
|
|
58
|
+
var H = v.map(function(M) {
|
|
59
59
|
return String(M);
|
|
60
60
|
});
|
|
61
|
-
|
|
61
|
+
H.unshift("Warning: " + f), Function.prototype.apply.call(console[c], console, H);
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
|
-
var
|
|
65
|
-
|
|
66
|
-
function
|
|
67
|
-
return !!(typeof
|
|
64
|
+
var A = !1, $ = !1, Z = !1, F = !1, et = !1, Lt;
|
|
65
|
+
Lt = Symbol.for("react.module.reference");
|
|
66
|
+
function ve(c) {
|
|
67
|
+
return !!(typeof c == "string" || typeof c == "function" || c === i || c === n || et || c === s || c === a || c === d || F || c === b || A || $ || Z || typeof c == "object" && c !== null && (c.$$typeof === m || c.$$typeof === p || c.$$typeof === r || c.$$typeof === l || c.$$typeof === o || // This needs to include all possible module reference object
|
|
68
68
|
// types supported by any Flight configuration anywhere since
|
|
69
69
|
// we don't know which Flight build this will end up being used
|
|
70
70
|
// with.
|
|
71
|
-
|
|
71
|
+
c.$$typeof === Lt || c.getModuleId !== void 0));
|
|
72
72
|
}
|
|
73
|
-
function
|
|
74
|
-
var T =
|
|
73
|
+
function be(c, f, v) {
|
|
74
|
+
var T = c.displayName;
|
|
75
75
|
if (T)
|
|
76
76
|
return T;
|
|
77
|
-
var
|
|
78
|
-
return
|
|
77
|
+
var k = f.displayName || f.name || "";
|
|
78
|
+
return k !== "" ? v + "(" + k + ")" : v;
|
|
79
79
|
}
|
|
80
|
-
function kt(
|
|
81
|
-
return
|
|
80
|
+
function kt(c) {
|
|
81
|
+
return c.displayName || "Context";
|
|
82
82
|
}
|
|
83
|
-
function W(
|
|
84
|
-
if (
|
|
83
|
+
function W(c) {
|
|
84
|
+
if (c == null)
|
|
85
85
|
return null;
|
|
86
|
-
if (typeof
|
|
87
|
-
return
|
|
88
|
-
if (typeof
|
|
89
|
-
return
|
|
90
|
-
switch (
|
|
86
|
+
if (typeof c.tag == "number" && E("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."), typeof c == "function")
|
|
87
|
+
return c.displayName || c.name || null;
|
|
88
|
+
if (typeof c == "string")
|
|
89
|
+
return c;
|
|
90
|
+
switch (c) {
|
|
91
91
|
case i:
|
|
92
92
|
return "Fragment";
|
|
93
93
|
case e:
|
|
@@ -96,28 +96,28 @@ function We() {
|
|
|
96
96
|
return "Profiler";
|
|
97
97
|
case s:
|
|
98
98
|
return "StrictMode";
|
|
99
|
-
case
|
|
99
|
+
case a:
|
|
100
100
|
return "Suspense";
|
|
101
101
|
case d:
|
|
102
102
|
return "SuspenseList";
|
|
103
103
|
}
|
|
104
|
-
if (typeof
|
|
105
|
-
switch (
|
|
106
|
-
case r:
|
|
107
|
-
var f = a;
|
|
108
|
-
return kt(f) + ".Consumer";
|
|
104
|
+
if (typeof c == "object")
|
|
105
|
+
switch (c.$$typeof) {
|
|
109
106
|
case l:
|
|
110
|
-
var
|
|
107
|
+
var f = c;
|
|
108
|
+
return kt(f) + ".Consumer";
|
|
109
|
+
case r:
|
|
110
|
+
var v = c;
|
|
111
111
|
return kt(v._context) + ".Provider";
|
|
112
112
|
case o:
|
|
113
|
-
return
|
|
114
|
-
case
|
|
115
|
-
var T =
|
|
116
|
-
return T !== null ? T : W(
|
|
113
|
+
return be(c, c.render, "ForwardRef");
|
|
114
|
+
case p:
|
|
115
|
+
var T = c.displayName || null;
|
|
116
|
+
return T !== null ? T : W(c.type) || "Memo";
|
|
117
117
|
case m: {
|
|
118
|
-
var
|
|
118
|
+
var k = c, H = k._payload, M = k._init;
|
|
119
119
|
try {
|
|
120
|
-
return W(M(
|
|
120
|
+
return W(M(H));
|
|
121
121
|
} catch {
|
|
122
122
|
return null;
|
|
123
123
|
}
|
|
@@ -125,101 +125,101 @@ function We() {
|
|
|
125
125
|
}
|
|
126
126
|
return null;
|
|
127
127
|
}
|
|
128
|
-
var
|
|
129
|
-
function
|
|
128
|
+
var U = Object.assign, Q = 0, At, Ht, It, qt, Rt, Pt, Bt;
|
|
129
|
+
function Nt() {
|
|
130
130
|
}
|
|
131
|
-
|
|
132
|
-
function
|
|
131
|
+
Nt.__reactDisabledLog = !0;
|
|
132
|
+
function ye() {
|
|
133
133
|
{
|
|
134
|
-
if (
|
|
135
|
-
|
|
136
|
-
var
|
|
134
|
+
if (Q === 0) {
|
|
135
|
+
At = console.log, Ht = console.info, It = console.warn, qt = console.error, Rt = console.group, Pt = console.groupCollapsed, Bt = console.groupEnd;
|
|
136
|
+
var c = {
|
|
137
137
|
configurable: !0,
|
|
138
138
|
enumerable: !0,
|
|
139
|
-
value:
|
|
139
|
+
value: Nt,
|
|
140
140
|
writable: !0
|
|
141
141
|
};
|
|
142
142
|
Object.defineProperties(console, {
|
|
143
|
-
info:
|
|
144
|
-
log:
|
|
145
|
-
warn:
|
|
146
|
-
error:
|
|
147
|
-
group:
|
|
148
|
-
groupCollapsed:
|
|
149
|
-
groupEnd:
|
|
143
|
+
info: c,
|
|
144
|
+
log: c,
|
|
145
|
+
warn: c,
|
|
146
|
+
error: c,
|
|
147
|
+
group: c,
|
|
148
|
+
groupCollapsed: c,
|
|
149
|
+
groupEnd: c
|
|
150
150
|
});
|
|
151
151
|
}
|
|
152
|
-
|
|
152
|
+
Q++;
|
|
153
153
|
}
|
|
154
154
|
}
|
|
155
|
-
function
|
|
155
|
+
function xe() {
|
|
156
156
|
{
|
|
157
|
-
if (
|
|
158
|
-
var
|
|
157
|
+
if (Q--, Q === 0) {
|
|
158
|
+
var c = {
|
|
159
159
|
configurable: !0,
|
|
160
160
|
enumerable: !0,
|
|
161
161
|
writable: !0
|
|
162
162
|
};
|
|
163
163
|
Object.defineProperties(console, {
|
|
164
|
-
log:
|
|
165
|
-
value:
|
|
164
|
+
log: U({}, c, {
|
|
165
|
+
value: At
|
|
166
166
|
}),
|
|
167
|
-
info:
|
|
167
|
+
info: U({}, c, {
|
|
168
168
|
value: Ht
|
|
169
169
|
}),
|
|
170
|
-
warn:
|
|
171
|
-
value: At
|
|
172
|
-
}),
|
|
173
|
-
error: V({}, a, {
|
|
170
|
+
warn: U({}, c, {
|
|
174
171
|
value: It
|
|
175
172
|
}),
|
|
176
|
-
|
|
173
|
+
error: U({}, c, {
|
|
177
174
|
value: qt
|
|
178
175
|
}),
|
|
179
|
-
|
|
176
|
+
group: U({}, c, {
|
|
180
177
|
value: Rt
|
|
181
178
|
}),
|
|
182
|
-
|
|
179
|
+
groupCollapsed: U({}, c, {
|
|
183
180
|
value: Pt
|
|
181
|
+
}),
|
|
182
|
+
groupEnd: U({}, c, {
|
|
183
|
+
value: Bt
|
|
184
184
|
})
|
|
185
185
|
});
|
|
186
186
|
}
|
|
187
|
-
|
|
187
|
+
Q < 0 && E("disabledDepth fell below zero. This is a bug in React. Please file an issue.");
|
|
188
188
|
}
|
|
189
189
|
}
|
|
190
190
|
var pt = w.ReactCurrentDispatcher, mt;
|
|
191
|
-
function it(
|
|
191
|
+
function it(c, f, v) {
|
|
192
192
|
{
|
|
193
193
|
if (mt === void 0)
|
|
194
194
|
try {
|
|
195
195
|
throw Error();
|
|
196
|
-
} catch (
|
|
197
|
-
var T =
|
|
196
|
+
} catch (k) {
|
|
197
|
+
var T = k.stack.trim().match(/\n( *(at )?)/);
|
|
198
198
|
mt = T && T[1] || "";
|
|
199
199
|
}
|
|
200
200
|
return `
|
|
201
|
-
` + mt +
|
|
201
|
+
` + mt + c;
|
|
202
202
|
}
|
|
203
203
|
}
|
|
204
204
|
var ft = !1, st;
|
|
205
205
|
{
|
|
206
|
-
var
|
|
207
|
-
st = new
|
|
206
|
+
var Ce = typeof WeakMap == "function" ? WeakMap : Map;
|
|
207
|
+
st = new Ce();
|
|
208
208
|
}
|
|
209
|
-
function
|
|
210
|
-
if (!
|
|
209
|
+
function Dt(c, f) {
|
|
210
|
+
if (!c || ft)
|
|
211
211
|
return "";
|
|
212
212
|
{
|
|
213
|
-
var v = st.get(
|
|
213
|
+
var v = st.get(c);
|
|
214
214
|
if (v !== void 0)
|
|
215
215
|
return v;
|
|
216
216
|
}
|
|
217
217
|
var T;
|
|
218
218
|
ft = !0;
|
|
219
|
-
var
|
|
219
|
+
var k = Error.prepareStackTrace;
|
|
220
220
|
Error.prepareStackTrace = void 0;
|
|
221
|
-
var
|
|
222
|
-
|
|
221
|
+
var H;
|
|
222
|
+
H = pt.current, pt.current = null, ye();
|
|
223
223
|
try {
|
|
224
224
|
if (f) {
|
|
225
225
|
var M = function() {
|
|
@@ -235,14 +235,14 @@ function We() {
|
|
|
235
235
|
} catch (D) {
|
|
236
236
|
T = D;
|
|
237
237
|
}
|
|
238
|
-
Reflect.construct(
|
|
238
|
+
Reflect.construct(c, [], M);
|
|
239
239
|
} else {
|
|
240
240
|
try {
|
|
241
241
|
M.call();
|
|
242
242
|
} catch (D) {
|
|
243
243
|
T = D;
|
|
244
244
|
}
|
|
245
|
-
|
|
245
|
+
c.call(M.prototype);
|
|
246
246
|
}
|
|
247
247
|
} else {
|
|
248
248
|
try {
|
|
@@ -250,7 +250,7 @@ function We() {
|
|
|
250
250
|
} catch (D) {
|
|
251
251
|
T = D;
|
|
252
252
|
}
|
|
253
|
-
|
|
253
|
+
c();
|
|
254
254
|
}
|
|
255
255
|
} catch (D) {
|
|
256
256
|
if (D && T && typeof D.stack == "string") {
|
|
@@ -265,163 +265,163 @@ function We() {
|
|
|
265
265
|
if (R--, P--, P < 0 || S[R] !== N[P]) {
|
|
266
266
|
var _ = `
|
|
267
267
|
` + S[R].replace(" at new ", " at ");
|
|
268
|
-
return
|
|
268
|
+
return c.displayName && _.includes("<anonymous>") && (_ = _.replace("<anonymous>", c.displayName)), typeof c == "function" && st.set(c, _), _;
|
|
269
269
|
}
|
|
270
270
|
while (R >= 1 && P >= 0);
|
|
271
271
|
break;
|
|
272
272
|
}
|
|
273
273
|
}
|
|
274
274
|
} finally {
|
|
275
|
-
ft = !1, pt.current =
|
|
275
|
+
ft = !1, pt.current = H, xe(), Error.prepareStackTrace = k;
|
|
276
276
|
}
|
|
277
|
-
var
|
|
278
|
-
return typeof
|
|
277
|
+
var G = c ? c.displayName || c.name : "", V = G ? it(G) : "";
|
|
278
|
+
return typeof c == "function" && st.set(c, V), V;
|
|
279
279
|
}
|
|
280
|
-
function
|
|
281
|
-
return
|
|
280
|
+
function we(c, f, v) {
|
|
281
|
+
return Dt(c, !1);
|
|
282
282
|
}
|
|
283
|
-
function
|
|
284
|
-
var f =
|
|
283
|
+
function Te(c) {
|
|
284
|
+
var f = c.prototype;
|
|
285
285
|
return !!(f && f.isReactComponent);
|
|
286
286
|
}
|
|
287
|
-
function nt(
|
|
288
|
-
if (
|
|
287
|
+
function nt(c, f, v) {
|
|
288
|
+
if (c == null)
|
|
289
289
|
return "";
|
|
290
|
-
if (typeof
|
|
291
|
-
return
|
|
292
|
-
if (typeof
|
|
293
|
-
return it(
|
|
294
|
-
switch (
|
|
295
|
-
case
|
|
290
|
+
if (typeof c == "function")
|
|
291
|
+
return Dt(c, Te(c));
|
|
292
|
+
if (typeof c == "string")
|
|
293
|
+
return it(c);
|
|
294
|
+
switch (c) {
|
|
295
|
+
case a:
|
|
296
296
|
return it("Suspense");
|
|
297
297
|
case d:
|
|
298
298
|
return it("SuspenseList");
|
|
299
299
|
}
|
|
300
|
-
if (typeof
|
|
301
|
-
switch (
|
|
300
|
+
if (typeof c == "object")
|
|
301
|
+
switch (c.$$typeof) {
|
|
302
302
|
case o:
|
|
303
|
-
return
|
|
304
|
-
case
|
|
305
|
-
return nt(
|
|
303
|
+
return we(c.render);
|
|
304
|
+
case p:
|
|
305
|
+
return nt(c.type, f, v);
|
|
306
306
|
case m: {
|
|
307
|
-
var T =
|
|
307
|
+
var T = c, k = T._payload, H = T._init;
|
|
308
308
|
try {
|
|
309
|
-
return nt(
|
|
309
|
+
return nt(H(k), f, v);
|
|
310
310
|
} catch {
|
|
311
311
|
}
|
|
312
312
|
}
|
|
313
313
|
}
|
|
314
314
|
return "";
|
|
315
315
|
}
|
|
316
|
-
var K = Object.prototype.hasOwnProperty,
|
|
317
|
-
function
|
|
318
|
-
if (
|
|
319
|
-
var f =
|
|
320
|
-
|
|
316
|
+
var K = Object.prototype.hasOwnProperty, Ot = {}, Zt = w.ReactDebugCurrentFrame;
|
|
317
|
+
function rt(c) {
|
|
318
|
+
if (c) {
|
|
319
|
+
var f = c._owner, v = nt(c.type, c._source, f ? f.type : null);
|
|
320
|
+
Zt.setExtraStackFrame(v);
|
|
321
321
|
} else
|
|
322
|
-
|
|
322
|
+
Zt.setExtraStackFrame(null);
|
|
323
323
|
}
|
|
324
|
-
function
|
|
324
|
+
function Ee(c, f, v, T, k) {
|
|
325
325
|
{
|
|
326
|
-
var
|
|
327
|
-
for (var M in
|
|
328
|
-
if (
|
|
326
|
+
var H = Function.call.bind(K);
|
|
327
|
+
for (var M in c)
|
|
328
|
+
if (H(c, M)) {
|
|
329
329
|
var S = void 0;
|
|
330
330
|
try {
|
|
331
|
-
if (typeof
|
|
332
|
-
var N = Error((T || "React class") + ": " + v + " type `" + M + "` is invalid; it must be a function, usually from the `prop-types` package, but received `" + typeof
|
|
331
|
+
if (typeof c[M] != "function") {
|
|
332
|
+
var N = Error((T || "React class") + ": " + v + " type `" + M + "` is invalid; it must be a function, usually from the `prop-types` package, but received `" + typeof c[M] + "`.This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.");
|
|
333
333
|
throw N.name = "Invariant Violation", N;
|
|
334
334
|
}
|
|
335
|
-
S =
|
|
335
|
+
S = c[M](f, M, T, v, null, "SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED");
|
|
336
336
|
} catch (R) {
|
|
337
337
|
S = R;
|
|
338
338
|
}
|
|
339
|
-
S && !(S instanceof Error) && (
|
|
339
|
+
S && !(S instanceof Error) && (rt(k), E("%s: type specification of %s `%s` is invalid; the type checker function must return `null` or an `Error` but returned a %s. You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument).", T || "React class", v, M, typeof S), rt(null)), S instanceof Error && !(S.message in Ot) && (Ot[S.message] = !0, rt(k), E("Failed %s type: %s", v, S.message), rt(null));
|
|
340
340
|
}
|
|
341
341
|
}
|
|
342
342
|
}
|
|
343
|
-
var
|
|
344
|
-
function gt(
|
|
345
|
-
return
|
|
343
|
+
var Se = Array.isArray;
|
|
344
|
+
function gt(c) {
|
|
345
|
+
return Se(c);
|
|
346
346
|
}
|
|
347
|
-
function
|
|
347
|
+
function Me(c) {
|
|
348
348
|
{
|
|
349
|
-
var f = typeof Symbol == "function" && Symbol.toStringTag, v = f &&
|
|
349
|
+
var f = typeof Symbol == "function" && Symbol.toStringTag, v = f && c[Symbol.toStringTag] || c.constructor.name || "Object";
|
|
350
350
|
return v;
|
|
351
351
|
}
|
|
352
352
|
}
|
|
353
|
-
function
|
|
353
|
+
function Le(c) {
|
|
354
354
|
try {
|
|
355
|
-
return
|
|
355
|
+
return Ft(c), !1;
|
|
356
356
|
} catch {
|
|
357
357
|
return !0;
|
|
358
358
|
}
|
|
359
359
|
}
|
|
360
|
-
function
|
|
361
|
-
return "" +
|
|
360
|
+
function Ft(c) {
|
|
361
|
+
return "" + c;
|
|
362
362
|
}
|
|
363
|
-
function
|
|
364
|
-
if (
|
|
365
|
-
return E("The provided key is an unsupported type %s. This value must be coerced to a string before before using it here.",
|
|
363
|
+
function _t(c) {
|
|
364
|
+
if (Le(c))
|
|
365
|
+
return E("The provided key is an unsupported type %s. This value must be coerced to a string before before using it here.", Me(c)), Ft(c);
|
|
366
366
|
}
|
|
367
|
-
var
|
|
367
|
+
var $t = w.ReactCurrentOwner, ke = {
|
|
368
368
|
key: !0,
|
|
369
369
|
ref: !0,
|
|
370
370
|
__self: !0,
|
|
371
371
|
__source: !0
|
|
372
|
-
},
|
|
373
|
-
function
|
|
374
|
-
if (K.call(
|
|
375
|
-
var f = Object.getOwnPropertyDescriptor(
|
|
372
|
+
}, jt, Wt;
|
|
373
|
+
function Ae(c) {
|
|
374
|
+
if (K.call(c, "ref")) {
|
|
375
|
+
var f = Object.getOwnPropertyDescriptor(c, "ref").get;
|
|
376
376
|
if (f && f.isReactWarning)
|
|
377
377
|
return !1;
|
|
378
378
|
}
|
|
379
|
-
return
|
|
379
|
+
return c.ref !== void 0;
|
|
380
380
|
}
|
|
381
|
-
function
|
|
382
|
-
if (K.call(
|
|
383
|
-
var f = Object.getOwnPropertyDescriptor(
|
|
381
|
+
function He(c) {
|
|
382
|
+
if (K.call(c, "key")) {
|
|
383
|
+
var f = Object.getOwnPropertyDescriptor(c, "key").get;
|
|
384
384
|
if (f && f.isReactWarning)
|
|
385
385
|
return !1;
|
|
386
386
|
}
|
|
387
|
-
return
|
|
387
|
+
return c.key !== void 0;
|
|
388
388
|
}
|
|
389
|
-
function
|
|
390
|
-
typeof
|
|
389
|
+
function Ie(c, f) {
|
|
390
|
+
typeof c.ref == "string" && $t.current;
|
|
391
391
|
}
|
|
392
|
-
function
|
|
392
|
+
function qe(c, f) {
|
|
393
393
|
{
|
|
394
394
|
var v = function() {
|
|
395
|
-
|
|
395
|
+
jt || (jt = !0, E("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)", f));
|
|
396
396
|
};
|
|
397
|
-
v.isReactWarning = !0, Object.defineProperty(
|
|
397
|
+
v.isReactWarning = !0, Object.defineProperty(c, "key", {
|
|
398
398
|
get: v,
|
|
399
399
|
configurable: !0
|
|
400
400
|
});
|
|
401
401
|
}
|
|
402
402
|
}
|
|
403
|
-
function
|
|
403
|
+
function Re(c, f) {
|
|
404
404
|
{
|
|
405
405
|
var v = function() {
|
|
406
|
-
|
|
406
|
+
Wt || (Wt = !0, E("%s: `ref` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)", f));
|
|
407
407
|
};
|
|
408
|
-
v.isReactWarning = !0, Object.defineProperty(
|
|
408
|
+
v.isReactWarning = !0, Object.defineProperty(c, "ref", {
|
|
409
409
|
get: v,
|
|
410
410
|
configurable: !0
|
|
411
411
|
});
|
|
412
412
|
}
|
|
413
413
|
}
|
|
414
|
-
var
|
|
414
|
+
var Pe = function(c, f, v, T, k, H, M) {
|
|
415
415
|
var S = {
|
|
416
416
|
// This tag allows us to uniquely identify this as a React Element
|
|
417
417
|
$$typeof: t,
|
|
418
418
|
// Built-in properties that belong on the element
|
|
419
|
-
type:
|
|
419
|
+
type: c,
|
|
420
420
|
key: f,
|
|
421
421
|
ref: v,
|
|
422
422
|
props: M,
|
|
423
423
|
// Record the component responsible for creating this element.
|
|
424
|
-
_owner:
|
|
424
|
+
_owner: H
|
|
425
425
|
};
|
|
426
426
|
return S._store = {}, Object.defineProperty(S._store, "validated", {
|
|
427
427
|
configurable: !1,
|
|
@@ -437,61 +437,61 @@ function We() {
|
|
|
437
437
|
configurable: !1,
|
|
438
438
|
enumerable: !1,
|
|
439
439
|
writable: !1,
|
|
440
|
-
value:
|
|
440
|
+
value: k
|
|
441
441
|
}), Object.freeze && (Object.freeze(S.props), Object.freeze(S)), S;
|
|
442
442
|
};
|
|
443
|
-
function
|
|
443
|
+
function Be(c, f, v, T, k) {
|
|
444
444
|
{
|
|
445
|
-
var
|
|
446
|
-
v !== void 0 && (
|
|
447
|
-
for (
|
|
448
|
-
K.call(f,
|
|
449
|
-
if (
|
|
450
|
-
var R =
|
|
451
|
-
for (
|
|
452
|
-
M[
|
|
445
|
+
var H, M = {}, S = null, N = null;
|
|
446
|
+
v !== void 0 && (_t(v), S = "" + v), He(f) && (_t(f.key), S = "" + f.key), Ae(f) && (N = f.ref, Ie(f, k));
|
|
447
|
+
for (H in f)
|
|
448
|
+
K.call(f, H) && !ke.hasOwnProperty(H) && (M[H] = f[H]);
|
|
449
|
+
if (c && c.defaultProps) {
|
|
450
|
+
var R = c.defaultProps;
|
|
451
|
+
for (H in R)
|
|
452
|
+
M[H] === void 0 && (M[H] = R[H]);
|
|
453
453
|
}
|
|
454
454
|
if (S || N) {
|
|
455
|
-
var P = typeof
|
|
456
|
-
S &&
|
|
455
|
+
var P = typeof c == "function" ? c.displayName || c.name || "Unknown" : c;
|
|
456
|
+
S && qe(M, P), N && Re(M, P);
|
|
457
457
|
}
|
|
458
|
-
return
|
|
458
|
+
return Pe(c, S, N, k, T, $t.current, M);
|
|
459
459
|
}
|
|
460
460
|
}
|
|
461
|
-
var vt = w.ReactCurrentOwner,
|
|
462
|
-
function Y(
|
|
463
|
-
if (
|
|
464
|
-
var f =
|
|
465
|
-
|
|
461
|
+
var vt = w.ReactCurrentOwner, Ut = w.ReactDebugCurrentFrame;
|
|
462
|
+
function Y(c) {
|
|
463
|
+
if (c) {
|
|
464
|
+
var f = c._owner, v = nt(c.type, c._source, f ? f.type : null);
|
|
465
|
+
Ut.setExtraStackFrame(v);
|
|
466
466
|
} else
|
|
467
|
-
|
|
467
|
+
Ut.setExtraStackFrame(null);
|
|
468
468
|
}
|
|
469
469
|
var bt;
|
|
470
470
|
bt = !1;
|
|
471
|
-
function yt(
|
|
472
|
-
return typeof
|
|
471
|
+
function yt(c) {
|
|
472
|
+
return typeof c == "object" && c !== null && c.$$typeof === t;
|
|
473
473
|
}
|
|
474
474
|
function Vt() {
|
|
475
475
|
{
|
|
476
476
|
if (vt.current) {
|
|
477
|
-
var
|
|
478
|
-
if (
|
|
477
|
+
var c = W(vt.current.type);
|
|
478
|
+
if (c)
|
|
479
479
|
return `
|
|
480
480
|
|
|
481
|
-
Check the render method of \`` +
|
|
481
|
+
Check the render method of \`` + c + "`.";
|
|
482
482
|
}
|
|
483
483
|
return "";
|
|
484
484
|
}
|
|
485
485
|
}
|
|
486
|
-
function
|
|
486
|
+
function Ne(c) {
|
|
487
487
|
return "";
|
|
488
488
|
}
|
|
489
|
-
var
|
|
490
|
-
function
|
|
489
|
+
var zt = {};
|
|
490
|
+
function De(c) {
|
|
491
491
|
{
|
|
492
492
|
var f = Vt();
|
|
493
493
|
if (!f) {
|
|
494
|
-
var v = typeof
|
|
494
|
+
var v = typeof c == "string" ? c : c.displayName || c.name;
|
|
495
495
|
v && (f = `
|
|
496
496
|
|
|
497
497
|
Check the top-level render call using <` + v + ">.");
|
|
@@ -499,41 +499,41 @@ Check the top-level render call using <` + v + ">.");
|
|
|
499
499
|
return f;
|
|
500
500
|
}
|
|
501
501
|
}
|
|
502
|
-
function
|
|
502
|
+
function Xt(c, f) {
|
|
503
503
|
{
|
|
504
|
-
if (!
|
|
504
|
+
if (!c._store || c._store.validated || c.key != null)
|
|
505
505
|
return;
|
|
506
|
-
|
|
507
|
-
var v =
|
|
508
|
-
if (
|
|
506
|
+
c._store.validated = !0;
|
|
507
|
+
var v = De(f);
|
|
508
|
+
if (zt[v])
|
|
509
509
|
return;
|
|
510
|
-
|
|
510
|
+
zt[v] = !0;
|
|
511
511
|
var T = "";
|
|
512
|
-
|
|
512
|
+
c && c._owner && c._owner !== vt.current && (T = " It was passed a child from " + W(c._owner.type) + "."), Y(c), E('Each child in a list should have a unique "key" prop.%s%s See https://reactjs.org/link/warning-keys for more information.', v, T), Y(null);
|
|
513
513
|
}
|
|
514
514
|
}
|
|
515
|
-
function
|
|
515
|
+
function Yt(c, f) {
|
|
516
516
|
{
|
|
517
|
-
if (typeof
|
|
517
|
+
if (typeof c != "object")
|
|
518
518
|
return;
|
|
519
|
-
if (gt(
|
|
520
|
-
for (var v = 0; v <
|
|
521
|
-
var T =
|
|
522
|
-
yt(T) &&
|
|
519
|
+
if (gt(c))
|
|
520
|
+
for (var v = 0; v < c.length; v++) {
|
|
521
|
+
var T = c[v];
|
|
522
|
+
yt(T) && Xt(T, f);
|
|
523
523
|
}
|
|
524
|
-
else if (yt(
|
|
525
|
-
|
|
526
|
-
else if (
|
|
527
|
-
var
|
|
528
|
-
if (typeof
|
|
529
|
-
for (var
|
|
530
|
-
yt(M.value) &&
|
|
524
|
+
else if (yt(c))
|
|
525
|
+
c._store && (c._store.validated = !0);
|
|
526
|
+
else if (c) {
|
|
527
|
+
var k = x(c);
|
|
528
|
+
if (typeof k == "function" && k !== c.entries)
|
|
529
|
+
for (var H = k.call(c), M; !(M = H.next()).done; )
|
|
530
|
+
yt(M.value) && Xt(M.value, f);
|
|
531
531
|
}
|
|
532
532
|
}
|
|
533
533
|
}
|
|
534
|
-
function
|
|
534
|
+
function Oe(c) {
|
|
535
535
|
{
|
|
536
|
-
var f =
|
|
536
|
+
var f = c.type;
|
|
537
537
|
if (f == null || typeof f == "string")
|
|
538
538
|
return;
|
|
539
539
|
var v;
|
|
@@ -541,46 +541,46 @@ Check the top-level render call using <` + v + ">.");
|
|
|
541
541
|
v = f.propTypes;
|
|
542
542
|
else if (typeof f == "object" && (f.$$typeof === o || // Note: Memo only checks outer props here.
|
|
543
543
|
// Inner props are checked in the reconciler.
|
|
544
|
-
f.$$typeof ===
|
|
544
|
+
f.$$typeof === p))
|
|
545
545
|
v = f.propTypes;
|
|
546
546
|
else
|
|
547
547
|
return;
|
|
548
548
|
if (v) {
|
|
549
549
|
var T = W(f);
|
|
550
|
-
|
|
550
|
+
Ee(v, c.props, "prop", T, c);
|
|
551
551
|
} else if (f.PropTypes !== void 0 && !bt) {
|
|
552
552
|
bt = !0;
|
|
553
|
-
var
|
|
554
|
-
E("Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?",
|
|
553
|
+
var k = W(f);
|
|
554
|
+
E("Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?", k || "Unknown");
|
|
555
555
|
}
|
|
556
556
|
typeof f.getDefaultProps == "function" && !f.getDefaultProps.isReactClassApproved && E("getDefaultProps is only used on classic React.createClass definitions. Use a static property named `defaultProps` instead.");
|
|
557
557
|
}
|
|
558
558
|
}
|
|
559
|
-
function
|
|
559
|
+
function Ze(c) {
|
|
560
560
|
{
|
|
561
|
-
for (var f = Object.keys(
|
|
561
|
+
for (var f = Object.keys(c.props), v = 0; v < f.length; v++) {
|
|
562
562
|
var T = f[v];
|
|
563
563
|
if (T !== "children" && T !== "key") {
|
|
564
|
-
Y(
|
|
564
|
+
Y(c), E("Invalid prop `%s` supplied to `React.Fragment`. React.Fragment can only have `key` and `children` props.", T), Y(null);
|
|
565
565
|
break;
|
|
566
566
|
}
|
|
567
567
|
}
|
|
568
|
-
|
|
568
|
+
c.ref !== null && (Y(c), E("Invalid attribute `ref` supplied to `React.Fragment`."), Y(null));
|
|
569
569
|
}
|
|
570
570
|
}
|
|
571
|
-
var
|
|
572
|
-
function Qt(
|
|
571
|
+
var Gt = {};
|
|
572
|
+
function Qt(c, f, v, T, k, H) {
|
|
573
573
|
{
|
|
574
|
-
var M =
|
|
574
|
+
var M = ve(c);
|
|
575
575
|
if (!M) {
|
|
576
576
|
var S = "";
|
|
577
|
-
(
|
|
578
|
-
var N =
|
|
577
|
+
(c === void 0 || typeof c == "object" && c !== null && Object.keys(c).length === 0) && (S += " You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.");
|
|
578
|
+
var N = Ne();
|
|
579
579
|
N ? S += N : S += Vt();
|
|
580
580
|
var R;
|
|
581
|
-
|
|
581
|
+
c === null ? R = "null" : gt(c) ? R = "array" : c !== void 0 && c.$$typeof === t ? (R = "<" + (W(c.type) || "Unknown") + " />", S = " Did you accidentally export a JSX literal instead of a component?") : R = typeof c, E("React.jsx: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s", R, S);
|
|
582
582
|
}
|
|
583
|
-
var P =
|
|
583
|
+
var P = Be(c, f, v, k, H);
|
|
584
584
|
if (P == null)
|
|
585
585
|
return P;
|
|
586
586
|
if (M) {
|
|
@@ -588,44 +588,44 @@ Check the top-level render call using <` + v + ">.");
|
|
|
588
588
|
if (_ !== void 0)
|
|
589
589
|
if (T)
|
|
590
590
|
if (gt(_)) {
|
|
591
|
-
for (var
|
|
592
|
-
|
|
591
|
+
for (var G = 0; G < _.length; G++)
|
|
592
|
+
Yt(_[G], c);
|
|
593
593
|
Object.freeze && Object.freeze(_);
|
|
594
594
|
} else
|
|
595
595
|
E("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");
|
|
596
596
|
else
|
|
597
|
-
|
|
597
|
+
Yt(_, c);
|
|
598
598
|
}
|
|
599
599
|
if (K.call(f, "key")) {
|
|
600
|
-
var
|
|
601
|
-
return
|
|
600
|
+
var V = W(c), D = Object.keys(f).filter(function(Ue) {
|
|
601
|
+
return Ue !== "key";
|
|
602
602
|
}), xt = D.length > 0 ? "{key: someKey, " + D.join(": ..., ") + ": ...}" : "{key: someKey}";
|
|
603
|
-
if (!
|
|
604
|
-
var
|
|
603
|
+
if (!Gt[V + xt]) {
|
|
604
|
+
var We = D.length > 0 ? "{" + D.join(": ..., ") + ": ...}" : "{}";
|
|
605
605
|
E(`A props object containing a "key" prop is being spread into JSX:
|
|
606
606
|
let props = %s;
|
|
607
607
|
<%s {...props} />
|
|
608
608
|
React keys must be passed directly to JSX without using spread:
|
|
609
609
|
let props = %s;
|
|
610
|
-
<%s key={someKey} {...props} />`, xt,
|
|
610
|
+
<%s key={someKey} {...props} />`, xt, V, We, V), Gt[V + xt] = !0;
|
|
611
611
|
}
|
|
612
612
|
}
|
|
613
|
-
return
|
|
613
|
+
return c === i ? Ze(P) : Oe(P), P;
|
|
614
614
|
}
|
|
615
615
|
}
|
|
616
|
-
function
|
|
617
|
-
return Qt(
|
|
616
|
+
function Fe(c, f, v) {
|
|
617
|
+
return Qt(c, f, v, !0);
|
|
618
618
|
}
|
|
619
|
-
function
|
|
620
|
-
return Qt(
|
|
619
|
+
function _e(c, f, v) {
|
|
620
|
+
return Qt(c, f, v, !1);
|
|
621
621
|
}
|
|
622
|
-
var
|
|
623
|
-
tt.Fragment = i, tt.jsx =
|
|
622
|
+
var $e = _e, je = Fe;
|
|
623
|
+
tt.Fragment = i, tt.jsx = $e, tt.jsxs = je;
|
|
624
624
|
}()), tt;
|
|
625
625
|
}
|
|
626
|
-
process.env.NODE_ENV === "production" ?
|
|
627
|
-
var
|
|
628
|
-
const
|
|
626
|
+
process.env.NODE_ENV === "production" ? St.exports = Xe() : St.exports = Ye();
|
|
627
|
+
var Ge = St.exports;
|
|
628
|
+
const Qe = {
|
|
629
629
|
en: {
|
|
630
630
|
dir: "ltr",
|
|
631
631
|
file: "File",
|
|
@@ -1011,10 +1011,10 @@ const Ue = {
|
|
|
1011
1011
|
emcat_flags: "أعلام"
|
|
1012
1012
|
}
|
|
1013
1013
|
};
|
|
1014
|
-
function Ct(
|
|
1015
|
-
return
|
|
1014
|
+
function Ct(u) {
|
|
1015
|
+
return Qe[u];
|
|
1016
1016
|
}
|
|
1017
|
-
const
|
|
1017
|
+
const Ke = "undo redo | preview print | importword revhistory | fontfamily fontsize | fontsizeincrease fontsizedecrease | bold italic underline strikethrough | forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist | outdent indent | link blockquote code changecase lineheight wordspacing letterspacing | removeformat | blocks | ltr rtl | quickimage quickvideo quicktable codesample template charmap emoji | fullscreen sourcecode", Je = "file edit view insert format tools table help", ti = [
|
|
1018
1018
|
["Andale Mono", "andale mono,times"],
|
|
1019
1019
|
["Arial", "arial,helvetica,sans-serif"],
|
|
1020
1020
|
["Arial Black", "arial black,avant garde"],
|
|
@@ -1034,7 +1034,7 @@ const ze = "undo redo | preview print | importword revhistory | fontfamily fonts
|
|
|
1034
1034
|
["Verdana", "verdana,geneva"],
|
|
1035
1035
|
["Webdings", "webdings"],
|
|
1036
1036
|
["Wingdings", "wingdings,zapf dingbats"]
|
|
1037
|
-
],
|
|
1037
|
+
], ei = ["8px", "9px", "10px", "11px", "12px", "14px", "16px", "18px", "20px", "24px", "28px", "32px", "36px", "48px", "72px", "96px"], ii = 1, si = 100, te = ["1", "1.15", "1.4", "1.5", "1.75", "2", "2.5", "3"], ee = ["1px", "2px", "4px", "6px", "8px", "12px"], ie = ["0.5px", "1px", "1.5px", "2px", "3px", "4px"], se = [
|
|
1038
1038
|
["plain", "Plain text"],
|
|
1039
1039
|
["html", "HTML/XML"],
|
|
1040
1040
|
["css", "CSS"],
|
|
@@ -1051,7 +1051,7 @@ const ze = "undo redo | preview print | importword revhistory | fontfamily fonts
|
|
|
1051
1051
|
["rust", "Rust"],
|
|
1052
1052
|
["sql", "SQL"],
|
|
1053
1053
|
["bash", "Bash/Shell"]
|
|
1054
|
-
],
|
|
1054
|
+
], ne = [
|
|
1055
1055
|
["p", "para"],
|
|
1056
1056
|
["h1", "heading1"],
|
|
1057
1057
|
["h2", "heading2"],
|
|
@@ -1060,7 +1060,7 @@ const ze = "undo redo | preview print | importword revhistory | fontfamily fonts
|
|
|
1060
1060
|
["h5", "heading5"],
|
|
1061
1061
|
["h6", "heading6"],
|
|
1062
1062
|
["pre", "pre"]
|
|
1063
|
-
],
|
|
1063
|
+
], ni = ["#F76707", "#4263EB", "#CC5DE8"], ri = [
|
|
1064
1064
|
"#FFFFFF",
|
|
1065
1065
|
"#F4F4F4",
|
|
1066
1066
|
"#E8EAED",
|
|
@@ -1086,7 +1086,7 @@ const ze = "undo redo | preview print | importword revhistory | fontfamily fonts
|
|
|
1086
1086
|
"#8E24AA",
|
|
1087
1087
|
"#C2185B",
|
|
1088
1088
|
"#6D4C41"
|
|
1089
|
-
],
|
|
1089
|
+
], li = [
|
|
1090
1090
|
{
|
|
1091
1091
|
key: "chcat_currency",
|
|
1092
1092
|
chars: [
|
|
@@ -1426,7 +1426,7 @@ const ze = "undo redo | preview print | importword revhistory | fontfamily fonts
|
|
|
1426
1426
|
"ة"
|
|
1427
1427
|
]
|
|
1428
1428
|
}
|
|
1429
|
-
],
|
|
1429
|
+
], oi = [
|
|
1430
1430
|
{
|
|
1431
1431
|
key: "emcat_smileys",
|
|
1432
1432
|
chars: [
|
|
@@ -2151,8 +2151,8 @@ const ze = "undo redo | preview print | importword revhistory | fontfamily fonts
|
|
|
2151
2151
|
"🇲🇦"
|
|
2152
2152
|
]
|
|
2153
2153
|
}
|
|
2154
|
-
],
|
|
2155
|
-
'<path d="M10 6h10M10 12h10M10 18h10"/>' +
|
|
2154
|
+
], L = (u, t) => `<svg viewBox="${t || "0 0 24 24"}">${u}</svg>`, C = (u) => L(`<path class="f" d="${u}"/>`, "0 -960 960 960"), ot = (u, t = 7.5) => L(
|
|
2155
|
+
'<path d="M10 6h10M10 12h10M10 18h10"/>' + u.map(
|
|
2156
2156
|
(e, i) => `<text x="2.5" y="${8.4 + i * 6}" font-size="${t}" stroke="none" fill="#222f3e" font-family="Arial">${e}</text>`
|
|
2157
2157
|
).join("")
|
|
2158
2158
|
), h = {
|
|
@@ -2198,7 +2198,7 @@ const ze = "undo redo | preview print | importword revhistory | fontfamily fonts
|
|
|
2198
2198
|
bullist: C(
|
|
2199
2199
|
"M360-200v-80h480v80H360Zm0-240v-80h480v80H360Zm0-240v-80h480v80H360ZM200-160q-33 0-56.5-23.5T120-240q0-33 23.5-56.5T200-320q33 0 56.5 23.5T280-240q0 33-23.5 56.5T200-160Zm0-240q-33 0-56.5-23.5T120-480q0-33 23.5-56.5T200-560q33 0 56.5 23.5T280-480q0 33-23.5 56.5T200-400Zm-56.5-263.5Q120-687 120-720t23.5-56.5Q167-800 200-800t56.5 23.5Q280-753 280-720t-23.5 56.5Q233-640 200-640t-56.5-23.5Z"
|
|
2200
2200
|
),
|
|
2201
|
-
chev:
|
|
2201
|
+
chev: L('<path d="M2 3.5 6 7.5 10 3.5"/>', "0 0 12 11"),
|
|
2202
2202
|
backcolor: C(
|
|
2203
2203
|
"M440-80q-33 0-56.5-23.5T360-160v-160H240q-33 0-56.5-23.5T160-400v-280q0-66 47-113t113-47h480v440q0 33-23.5 56.5T720-320H600v160q0 33-23.5 56.5T520-80h-80ZM240-560h480v-200h-40v160h-80v-160h-40v80h-80v-80H320q-33 0-56.5 23.5T240-680v120Zm0 160h480v-80H240v80Zm0 0v-80 80Z"
|
|
2204
2204
|
),
|
|
@@ -2208,7 +2208,7 @@ const ze = "undo redo | preview print | importword revhistory | fontfamily fonts
|
|
|
2208
2208
|
indent: C(
|
|
2209
2209
|
"M120-120v-80h720v80H120Zm320-160v-80h400v80H440Zm0-160v-80h400v80H440Zm0-160v-80h400v80H440ZM120-760v-80h720v80H120Zm0 440v-320l160 160-160 160Z"
|
|
2210
2210
|
),
|
|
2211
|
-
more:
|
|
2211
|
+
more: L(
|
|
2212
2212
|
'<circle class="f" cx="5" cy="12" r="1.7"/><circle class="f" cx="12" cy="12" r="1.7"/><circle class="f" cx="19" cy="12" r="1.7"/>'
|
|
2213
2213
|
),
|
|
2214
2214
|
image: C(
|
|
@@ -2220,17 +2220,17 @@ const ze = "undo redo | preview print | importword revhistory | fontfamily fonts
|
|
|
2220
2220
|
tableic: C(
|
|
2221
2221
|
"M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm240-240H200v160h240v-160Zm80 0v160h240v-160H520Zm-80-80v-160H200v160h240Zm80 0h240v-160H520v160ZM200-680h560v-80H200v80Z"
|
|
2222
2222
|
),
|
|
2223
|
-
hric:
|
|
2223
|
+
hric: L('<path d="M4 12h16"/>'),
|
|
2224
2224
|
charic: C(
|
|
2225
2225
|
"M120-120v-120h200q-84-45-132-125t-48-175q0-142 99-241t241-99q142 0 241 99t99 241q0 95-48 175T640-240h200v120H520v-204q78-14 129-75t51-141q0-92-64-156t-156-64q-92 0-156 64t-64 156q0 80 51 141t129 75v204H120Z"
|
|
2226
2226
|
),
|
|
2227
|
-
dateic:
|
|
2227
|
+
dateic: L(
|
|
2228
2228
|
'<rect x="4" y="6" width="16" height="14" rx="1.5"/><path d="M4 10h16M8 4v4M16 4v4"/>'
|
|
2229
2229
|
),
|
|
2230
2230
|
pbic: C(
|
|
2231
2231
|
"M240-80q-33 0-56.5-23.5T160-160v-120h80v120h480v-120h80v120q0 33-23.5 56.5T720-80H240Zm-80-440v-280q0-33 23.5-56.5T240-880h320l240 240v120h-80v-80H520v-200H240v280h-80Zm200 160v-80h240v80H360Zm320 0v-80h240v80H680Zm-640 0v-80h240v80H40Zm440-160Zm0 240Z"
|
|
2232
2232
|
),
|
|
2233
|
-
nbspic:
|
|
2233
|
+
nbspic: L('<path d="M6 12v4h12v-4"/>'),
|
|
2234
2234
|
srcic: C(
|
|
2235
2235
|
"M240-280 40-480l200-200 56 56-143 144 143 144-56 56Zm178 132-76-24 200-640 76 24-200 640Zm302-132-56-56 143-144-143-144 56-56 200 200-200 200Z"
|
|
2236
2236
|
),
|
|
@@ -2258,11 +2258,11 @@ const ze = "undo redo | preview print | importword revhistory | fontfamily fonts
|
|
|
2258
2258
|
subscriptic: C(
|
|
2259
2259
|
"M760-160v-80q0-17 11.5-28.5T800-280h80v-40H760v-40h120q17 0 28.5 11.5T920-320v40q0 17-11.5 28.5T880-240h-80v40h120v40H760Zm-525-80 185-291-172-269h106l124 200h4l123-200h107L539-531l186 291H618L482-457h-4L342-240H235Z"
|
|
2260
2260
|
),
|
|
2261
|
-
newic:
|
|
2262
|
-
helpic:
|
|
2261
|
+
newic: L('<path d="M6 3h8l5 5v13H6z"/><path d="M14 3v5h5"/>'),
|
|
2262
|
+
helpic: L(
|
|
2263
2263
|
'<circle cx="12" cy="12" r="8.5"/><path d="M9.6 9.6a2.5 2.5 0 1 1 3.4 2.6c-.8.3-1 .9-1 1.8"/><circle class="f" cx="12" cy="16.6" r="1.1"/>'
|
|
2264
2264
|
),
|
|
2265
|
-
wcic:
|
|
2265
|
+
wcic: L('<path d="M4 6h16M4 10h16M4 14h9"/><path d="M15 17.5l2 2 3.6-4"/>'),
|
|
2266
2266
|
rowbefore: C(
|
|
2267
2267
|
"M200-160h560v-240H200v240Zm640 80H120v-720h160v80h-80v240h560v-240h-80v-80h160v720ZM480-480Zm0 80v-80 80Zm0 0Zm-40-240v-80h-80v-80h80v-80h80v80h80v80h-80v80h-80Z"
|
|
2268
2268
|
),
|
|
@@ -2314,44 +2314,44 @@ const ze = "undo redo | preview print | importword revhistory | fontfamily fonts
|
|
|
2314
2314
|
historyic: C(
|
|
2315
2315
|
"M480-120q-138 0-240.5-91.5T122-440h82q14 104 92.5 172T480-200q117 0 198.5-81.5T760-480q0-117-81.5-198.5T480-760q-69 0-129 32t-101 88h110v80H120v-240h80v94q51-64 124.5-99T480-840q75 0 140.5 28.5t114 77q48.5 48.5 77 114T840-480q0 75-28.5 140.5t-77 114q-48.5 48.5-114 77T480-120Zm112-192L440-464v-216h80v184l128 128-56 56Z"
|
|
2316
2316
|
),
|
|
2317
|
-
wordic:
|
|
2317
|
+
wordic: L(
|
|
2318
2318
|
'<path d="M6 3h8l5 5v13H6z"/><path d="M14 3v5h5"/><text x="8" y="17" font-size="8.5" stroke="none" fill="#222f3e" font-family="Arial" font-weight="bold">W</text>'
|
|
2319
2319
|
),
|
|
2320
2320
|
draftic: C(
|
|
2321
2321
|
"M480-160q-134 0-227-93t-93-227q0-134 93-227t227-93q69 0 132 28.5T720-690v-110h80v280H520v-80h168q-32-56-87.5-88T480-720q-100 0-170 70t-70 170q0 100 70 170t170 70q77 0 139-44t87-116h84q-28 106-114 173t-196 67Z"
|
|
2322
2322
|
),
|
|
2323
|
-
trash:
|
|
2323
|
+
trash: L(
|
|
2324
2324
|
'<path d="M5 7h14M10 7V5h4v2M7.5 7l1 13h7l1-13"/>'
|
|
2325
2325
|
),
|
|
2326
|
-
templateic:
|
|
2326
|
+
templateic: L(
|
|
2327
2327
|
'<rect x="4" y="4" width="16" height="16" rx="1.5"/><rect x="6.5" y="6.5" width="5" height="5" rx=".5"/><path d="M14 7.5h3.5M14 10h3.5M6.5 14h11M6.5 17h11"/>'
|
|
2328
2328
|
),
|
|
2329
|
-
tplleft:
|
|
2329
|
+
tplleft: L(
|
|
2330
2330
|
'<rect x="3" y="5" width="8" height="8" rx=".8"/><path d="M13.5 6.5H21M13.5 9.5H21M13.5 12.5H21M3 15.5h18M3 18.5h18"/>'
|
|
2331
2331
|
),
|
|
2332
|
-
tplright:
|
|
2332
|
+
tplright: L(
|
|
2333
2333
|
'<rect x="13" y="5" width="8" height="8" rx=".8"/><path d="M3 6.5h7.5M3 9.5h7.5M3 12.5h7.5M3 15.5h18M3 18.5h18"/>'
|
|
2334
2334
|
),
|
|
2335
|
-
tpltop:
|
|
2335
|
+
tpltop: L(
|
|
2336
2336
|
'<rect x="5" y="3" width="14" height="9" rx=".8"/><path d="M3 15h18M3 18h18M3 21h12"/>'
|
|
2337
2337
|
),
|
|
2338
|
-
tplcenter:
|
|
2338
|
+
tplcenter: L(
|
|
2339
2339
|
'<path d="M3 4h18M3 7h18M3 10h12"/><rect x="5" y="12.5" width="14" height="9" rx=".8"/>'
|
|
2340
2340
|
),
|
|
2341
|
-
rotateleft:
|
|
2341
|
+
rotateleft: L(
|
|
2342
2342
|
'<polyline points="1 4 1 10 7 10"/><path d="M3.51 15a9 9 0 1 0 2.13-9.36L1 10"/>'
|
|
2343
2343
|
),
|
|
2344
|
-
rotateright:
|
|
2344
|
+
rotateright: L(
|
|
2345
2345
|
'<polyline points="23 4 23 10 17 10"/><path d="M20.49 15a9 9 0 1 1-2.12-9.36L23 10"/>'
|
|
2346
2346
|
),
|
|
2347
|
-
fliphorizontal:
|
|
2347
|
+
fliphorizontal: L(
|
|
2348
2348
|
'<path d="M12 3v18"/><path d="M7 8l-4 4 4 4"/><path d="M17 8l4 4-4 4"/>'
|
|
2349
2349
|
),
|
|
2350
|
-
flipvertical:
|
|
2350
|
+
flipvertical: L(
|
|
2351
2351
|
'<path d="M3 12h18"/><path d="M8 7l4-4 4 4"/><path d="M8 17l4 4 4-4"/>'
|
|
2352
2352
|
),
|
|
2353
|
-
check:
|
|
2354
|
-
palette:
|
|
2353
|
+
check: L('<path d="M5 12.5 9.5 17 19 7"/>'),
|
|
2354
|
+
palette: L(
|
|
2355
2355
|
'<path d="M12 3a9 9 0 1 0 0 18h1.2a2 2 0 0 0 2-2 2 2 0 0 1 2-2H18a3 3 0 0 0 3-3c0-6.1-4.5-11-9-11z"/><circle class="f" cx="7.8" cy="10.2" r="1.3"/><circle class="f" cx="11.6" cy="7.3" r="1.3"/><circle class="f" cx="15.8" cy="9.6" r="1.3"/><circle class="f" cx="9" cy="14.8" r="1.3"/>'
|
|
2356
2356
|
),
|
|
2357
2357
|
ul_circle: C(
|
|
@@ -2360,27 +2360,27 @@ const ze = "undo redo | preview print | importword revhistory | fontfamily fonts
|
|
|
2360
2360
|
ul_square: C(
|
|
2361
2361
|
"M80-160v-160h160v160H80Zm240 0v-160h560v160H320ZM80-400v-160h160v160H80Zm240 0v-160h560v160H320ZM80-640v-160h160v160H80Zm240 0v-160h560v160H320Z"
|
|
2362
2362
|
),
|
|
2363
|
-
ol_alpha:
|
|
2364
|
-
ol_roman:
|
|
2365
|
-
ol_alphau:
|
|
2366
|
-
ol_romanu:
|
|
2367
|
-
video:
|
|
2368
|
-
editic:
|
|
2369
|
-
letterspacing:
|
|
2363
|
+
ol_alpha: ot(["a", "b", "c"]),
|
|
2364
|
+
ol_roman: ot(["i", "ii", "iii"], 6.5),
|
|
2365
|
+
ol_alphau: ot(["A", "B", "C"]),
|
|
2366
|
+
ol_romanu: ot(["I", "II", "III"], 6.5),
|
|
2367
|
+
video: L('<rect x="3" y="6" width="13" height="12" rx="1.5"/><path d="M16 10l5-3v10l-5-3z"/>'),
|
|
2368
|
+
editic: L('<path d="M4 20l1-4.5L15.5 5 19 8.5 8.5 19 4 20z"/><path d="M13.5 6.5l4 4"/>'),
|
|
2369
|
+
letterspacing: L(
|
|
2370
2370
|
'<text x="2.5" y="13" font-size="12" stroke="none" fill="#222f3e" font-family="Arial" font-weight="bold">A</text><text x="13" y="13" font-size="12" stroke="none" fill="#222f3e" font-family="Arial" font-weight="bold">B</text><path d="M7 18.5h10"/><path class="f" d="M7.5 18.5 4.5 16.6v3.8z"/><path class="f" d="M16.5 18.5l3-1.9v3.8z"/>'
|
|
2371
2371
|
),
|
|
2372
|
-
emojiic:
|
|
2372
|
+
emojiic: L(
|
|
2373
2373
|
'<circle cx="12" cy="12" r="8.5"/><path d="M8.6 14.3a4.6 4.6 0 0 0 6.8 0"/><path d="M9.2 9.6v.7M14.8 9.6v.7"/>'
|
|
2374
2374
|
),
|
|
2375
|
-
inlinecodeic:
|
|
2376
|
-
moverowup:
|
|
2377
|
-
moverowdown:
|
|
2378
|
-
movecolleft:
|
|
2379
|
-
movecolright:
|
|
2380
|
-
codesampleic:
|
|
2375
|
+
inlinecodeic: L('<path d="M8.5 8 4.5 12l4 4M15.5 8l4 4-4 4"/><path d="M13 6l-2 12"/>'),
|
|
2376
|
+
moverowup: L('<rect x="4" y="15.5" width="16" height="5" rx="1"/><path d="M12 12.5V4M8.5 7.5 12 4l3.5 3.5"/>'),
|
|
2377
|
+
moverowdown: L('<rect x="4" y="3.5" width="16" height="5" rx="1"/><path d="M12 11.5V20M8.5 16.5 12 20l3.5-3.5"/>'),
|
|
2378
|
+
movecolleft: L('<rect x="15.5" y="4" width="5" height="16" rx="1"/><path d="M12.5 12H4M7.5 8.5 4 12l3.5 3.5"/>'),
|
|
2379
|
+
movecolright: L('<rect x="3.5" y="4" width="5" height="16" rx="1"/><path d="M11.5 12H20M16.5 8.5 20 12l-3.5 3.5"/>'),
|
|
2380
|
+
codesampleic: L(
|
|
2381
2381
|
'<rect x="3.5" y="4" width="17" height="16" rx="2"/><path d="M3.5 8.5h17"/><path d="M9.5 12 7 14.25l2.5 2.25M14.5 12l2.5 2.25-2.5 2.25"/>'
|
|
2382
2382
|
)
|
|
2383
|
-
},
|
|
2383
|
+
}, ai = /* @__PURE__ */ new Set([
|
|
2384
2384
|
"p",
|
|
2385
2385
|
"div",
|
|
2386
2386
|
"span",
|
|
@@ -2422,7 +2422,7 @@ const ze = "undo redo | preview print | importword revhistory | fontfamily fonts
|
|
|
2422
2422
|
"figure",
|
|
2423
2423
|
"figcaption",
|
|
2424
2424
|
"mark"
|
|
2425
|
-
]),
|
|
2425
|
+
]), ci = /* @__PURE__ */ new Set([
|
|
2426
2426
|
"text-align",
|
|
2427
2427
|
"direction",
|
|
2428
2428
|
"unicode-bidi",
|
|
@@ -2478,7 +2478,7 @@ const ze = "undo redo | preview print | importword revhistory | fontfamily fonts
|
|
|
2478
2478
|
"box-sizing",
|
|
2479
2479
|
"list-style-type",
|
|
2480
2480
|
"white-space"
|
|
2481
|
-
]),
|
|
2481
|
+
]), re = {
|
|
2482
2482
|
"*": ["dir", "lang", "colspan", "rowspan"],
|
|
2483
2483
|
a: ["href", "target", "rel", "title"],
|
|
2484
2484
|
img: ["src", "alt", "width", "height", "title"],
|
|
@@ -2487,26 +2487,26 @@ const ze = "undo redo | preview print | importword revhistory | fontfamily fonts
|
|
|
2487
2487
|
th: ["width", "valign"],
|
|
2488
2488
|
table: ["width", "cellpadding", "cellspacing"]
|
|
2489
2489
|
};
|
|
2490
|
-
function ut(
|
|
2491
|
-
const t = {}, e =
|
|
2490
|
+
function ut(u) {
|
|
2491
|
+
const t = {}, e = u.getAttribute && u.getAttribute("style");
|
|
2492
2492
|
return e && e.split(";").forEach((i) => {
|
|
2493
2493
|
const s = i.indexOf(":");
|
|
2494
2494
|
s < 1 || (t[i.slice(0, s).trim().toLowerCase()] = i.slice(s + 1).trim());
|
|
2495
2495
|
}), t;
|
|
2496
2496
|
}
|
|
2497
|
-
function
|
|
2498
|
-
return
|
|
2497
|
+
function hi(u) {
|
|
2498
|
+
return u.replace(/<!--\[if !supportLists\]-->([\s\S]*?)<!--\[endif\]-->/gi, "$1").replace(/<!--\[if !supportLists\]>([\s\S]*?)<!\[endif\]-->/gi, "$1").replace(/<!\[if !supportLists\]>([\s\S]*?)<!\[endif\]>/gi, "$1").replace(/<!--\[if [\s\S]*?<!\[endif\]-->/gi, "").replace(/<!--[\s\S]*?-->/g, "").replace(/<(script|style|xml|title)[\s\S]*?<\/\1>/gi, "").replace(/<\/?(meta|link)[^>]*>/gi, "").replace(/<\?xml[\s\S]*?\?>/gi, "").replace(/<\/?(o|v|w|m|st1):[^>]*>/gi, "");
|
|
2499
2499
|
}
|
|
2500
|
-
function
|
|
2501
|
-
return /^[0-9]+[\.\)،]/.test(
|
|
2500
|
+
function di(u) {
|
|
2501
|
+
return /^[0-9]+[\.\)،]/.test(u) ? { ordered: !0 } : /^[٠-٩۰-۹]+/.test(u) ? { ordered: !0, style: "arabic-indic" } : /^[ivxlc]{2,}[\.\)]/.test(u) ? { ordered: !0, style: "lower-roman" } : /^[IVXLC]{2,}[\.\)]/.test(u) ? { ordered: !0, style: "upper-roman" } : /^[a-z][\.\)]/.test(u) ? { ordered: !0, style: "lower-alpha" } : /^[A-Z][\.\)]/.test(u) ? { ordered: !0, style: "upper-alpha" } : /^[ء-ي][\.\)،-]/.test(u) ? { ordered: !0, style: "arabic-indic" } : { ordered: !1 };
|
|
2502
2502
|
}
|
|
2503
|
-
function
|
|
2503
|
+
function ui(u) {
|
|
2504
2504
|
const t = (s) => {
|
|
2505
2505
|
const n = (s.getAttribute("style") || "") + " " + (s.className || "");
|
|
2506
2506
|
return /mso-list\s*:(?!\s*ignore)/i.test(n) || /MsoListParagraph/i.test(n);
|
|
2507
2507
|
}, e = [];
|
|
2508
2508
|
let i = null;
|
|
2509
|
-
Array.from(
|
|
2509
|
+
Array.from(u.body.querySelectorAll("p")).forEach((s) => {
|
|
2510
2510
|
if (!t(s)) {
|
|
2511
2511
|
i = null;
|
|
2512
2512
|
return;
|
|
@@ -2514,67 +2514,67 @@ function ri(p) {
|
|
|
2514
2514
|
const n = s.previousElementSibling;
|
|
2515
2515
|
i && n && i[i.length - 1] === n ? i.push(s) : (i = [s], e.push(i));
|
|
2516
2516
|
}), e.forEach((s) => {
|
|
2517
|
-
const n = [],
|
|
2518
|
-
s.forEach((
|
|
2517
|
+
const n = [], r = s[0];
|
|
2518
|
+
s.forEach((l) => {
|
|
2519
2519
|
var w, E, I;
|
|
2520
|
-
const
|
|
2521
|
-
(
|
|
2522
|
-
),
|
|
2523
|
-
for (d && d.remove(); n.length && n[n.length - 1].level >
|
|
2524
|
-
if (!n.length || n[n.length - 1].level <
|
|
2525
|
-
const
|
|
2526
|
-
if (m && b && (
|
|
2520
|
+
const a = +(((w = (l.getAttribute("style") || "").match(/level(\d+)/i)) == null ? void 0 : w[1]) || 1), d = Array.from(l.querySelectorAll("span")).find(
|
|
2521
|
+
(A) => /mso-list\s*:\s*ignore/i.test(A.getAttribute("style") || "")
|
|
2522
|
+
), p = d ? ((E = d.textContent) == null ? void 0 : E.trim()) || "" : (((I = l.textContent) == null ? void 0 : I.trim().match(/^\S{1,4}/)) || [""])[0], { ordered: m, style: b } = di(p);
|
|
2523
|
+
for (d && d.remove(); n.length && n[n.length - 1].level > a; ) n.pop();
|
|
2524
|
+
if (!n.length || n[n.length - 1].level < a) {
|
|
2525
|
+
const A = u.createElement(m ? "ol" : "ul");
|
|
2526
|
+
if (m && b && (A.style.listStyleType = b), n.length) {
|
|
2527
2527
|
const $ = n[n.length - 1].list;
|
|
2528
|
-
($.lastElementChild || $).appendChild(
|
|
2528
|
+
($.lastElementChild || $).appendChild(A);
|
|
2529
2529
|
} else
|
|
2530
|
-
|
|
2531
|
-
n.push({ list:
|
|
2530
|
+
r.parentNode.insertBefore(A, r);
|
|
2531
|
+
n.push({ list: A, level: a });
|
|
2532
2532
|
}
|
|
2533
|
-
const y =
|
|
2534
|
-
for (x && y.setAttribute("style", x),
|
|
2535
|
-
n[n.length - 1].list.appendChild(y),
|
|
2533
|
+
const y = u.createElement("li"), g = ut(l), x = ["text-align", "direction", "unicode-bidi", "color", "font-size", "font-family", "background-color"].filter((A) => g[A]).map((A) => A + ":" + g[A]).join(";");
|
|
2534
|
+
for (x && y.setAttribute("style", x), l.getAttribute("dir") && y.setAttribute("dir", l.getAttribute("dir")); l.firstChild; ) y.appendChild(l.firstChild);
|
|
2535
|
+
n[n.length - 1].list.appendChild(y), l.remove();
|
|
2536
2536
|
});
|
|
2537
2537
|
});
|
|
2538
2538
|
}
|
|
2539
|
-
function
|
|
2540
|
-
|
|
2539
|
+
function pi(u) {
|
|
2540
|
+
u.querySelectorAll('b[id^="docs-internal-guid"]').forEach((t) => {
|
|
2541
2541
|
for (; t.firstChild; ) t.parentNode.insertBefore(t.firstChild, t);
|
|
2542
2542
|
t.remove();
|
|
2543
2543
|
});
|
|
2544
2544
|
}
|
|
2545
|
-
function
|
|
2546
|
-
|
|
2545
|
+
function mi(u) {
|
|
2546
|
+
u.querySelectorAll("table").forEach((t) => {
|
|
2547
2547
|
const e = t;
|
|
2548
2548
|
ut(e)["border-collapse"] || (e.style.borderCollapse = "collapse");
|
|
2549
|
-
}),
|
|
2549
|
+
}), u.querySelectorAll("[align]").forEach((t) => {
|
|
2550
2550
|
const e = t, i = e.getAttribute("align").toLowerCase();
|
|
2551
2551
|
e.tagName.toLowerCase() === "table" ? i === "center" ? (e.style.marginLeft = e.style.marginLeft || "auto", e.style.marginRight = e.style.marginRight || "auto") : i === "right" ? e.style.marginLeft = e.style.marginLeft || "auto" : i === "left" && (e.style.marginRight = e.style.marginRight || "auto") : ["left", "right", "center", "justify"].includes(i) && (e.style.textAlign = e.style.textAlign || i, Array.from(e.children).forEach((s) => {
|
|
2552
2552
|
if (s.tagName.toLowerCase() !== "table") return;
|
|
2553
2553
|
const n = s;
|
|
2554
2554
|
i === "center" ? (n.style.marginLeft = n.style.marginLeft || "auto", n.style.marginRight = n.style.marginRight || "auto") : i === "right" ? n.style.marginLeft = n.style.marginLeft || "auto" : i === "left" && (n.style.marginRight = n.style.marginRight || "auto");
|
|
2555
2555
|
})), e.removeAttribute("align");
|
|
2556
|
-
}),
|
|
2556
|
+
}), u.querySelectorAll("center table").forEach((t) => {
|
|
2557
2557
|
const e = t;
|
|
2558
2558
|
e.style.marginLeft = e.style.marginLeft || "auto", e.style.marginRight = e.style.marginRight || "auto";
|
|
2559
|
-
}),
|
|
2559
|
+
}), u.querySelectorAll("[bgcolor]").forEach((t) => {
|
|
2560
2560
|
const e = t;
|
|
2561
2561
|
e.style.backgroundColor = e.style.backgroundColor || e.getAttribute("bgcolor"), e.removeAttribute("bgcolor");
|
|
2562
2562
|
});
|
|
2563
2563
|
}
|
|
2564
|
-
function ht(
|
|
2565
|
-
Array.from(
|
|
2564
|
+
function ht(u, t) {
|
|
2565
|
+
Array.from(u.childNodes).forEach((e) => {
|
|
2566
2566
|
if (e.nodeType === Node.COMMENT_NODE) {
|
|
2567
2567
|
e.remove();
|
|
2568
2568
|
return;
|
|
2569
2569
|
}
|
|
2570
2570
|
if (e.nodeType !== Node.ELEMENT_NODE) return;
|
|
2571
2571
|
const i = e, s = i.tagName.toLowerCase();
|
|
2572
|
-
if (!
|
|
2572
|
+
if (!ai.has(s)) {
|
|
2573
2573
|
if (s === "font") {
|
|
2574
2574
|
const o = t.createElement("span");
|
|
2575
2575
|
i.getAttribute("style") && o.setAttribute("style", i.getAttribute("style")), i.getAttribute("color") && (o.style.color = i.getAttribute("color")), i.getAttribute("face") && (o.style.fontFamily = i.getAttribute("face"));
|
|
2576
|
-
const
|
|
2577
|
-
if (
|
|
2576
|
+
const a = i.getAttribute("size");
|
|
2577
|
+
if (a && !o.style.fontSize) {
|
|
2578
2578
|
const d = {
|
|
2579
2579
|
1: "8pt",
|
|
2580
2580
|
2: "10pt",
|
|
@@ -2584,7 +2584,7 @@ function ht(p, t) {
|
|
|
2584
2584
|
6: "24pt",
|
|
2585
2585
|
7: "36pt"
|
|
2586
2586
|
};
|
|
2587
|
-
d[
|
|
2587
|
+
d[a] && (o.style.fontSize = d[a]);
|
|
2588
2588
|
}
|
|
2589
2589
|
for (; i.firstChild; ) o.appendChild(i.firstChild);
|
|
2590
2590
|
i.replaceWith(o), ht(o, t);
|
|
@@ -2594,10 +2594,10 @@ function ht(p, t) {
|
|
|
2594
2594
|
i.remove();
|
|
2595
2595
|
return;
|
|
2596
2596
|
}
|
|
2597
|
-
const n = /* @__PURE__ */ new Set([...
|
|
2597
|
+
const n = /* @__PURE__ */ new Set([...re["*"] || [], ...re[s] || []]);
|
|
2598
2598
|
if (Array.from(i.attributes).forEach((o) => {
|
|
2599
|
-
const
|
|
2600
|
-
|
|
2599
|
+
const a = o.name.toLowerCase();
|
|
2600
|
+
a !== "style" && !n.has(a) && i.removeAttribute(o.name);
|
|
2601
2601
|
}), s === "a") {
|
|
2602
2602
|
const o = i.getAttribute("href") || "";
|
|
2603
2603
|
/^(https?:|mailto:|tel:|#)/i.test(o) || i.removeAttribute("href");
|
|
@@ -2605,130 +2605,233 @@ function ht(p, t) {
|
|
|
2605
2605
|
if (s === "img") {
|
|
2606
2606
|
const o = i.getAttribute("src") || "";
|
|
2607
2607
|
if (!/^(https?:|data:image\/|blob:)/i.test(o)) {
|
|
2608
|
-
const
|
|
2609
|
-
|
|
2608
|
+
const a = t.createElement("span");
|
|
2609
|
+
a.textContent = "[local image — paste it separately]", a.setAttribute("style", "color:#a33;font-style:italic;font-size:12px"), i.replaceWith(a);
|
|
2610
2610
|
return;
|
|
2611
2611
|
}
|
|
2612
2612
|
}
|
|
2613
|
-
const
|
|
2614
|
-
for (const [o,
|
|
2615
|
-
|
|
2616
|
-
if (
|
|
2613
|
+
const r = ut(i), l = [];
|
|
2614
|
+
for (const [o, a] of Object.entries(r))
|
|
2615
|
+
ci.has(o) && (/expression|javascript|url\s*\(\s*['"]?\s*file:/i.test(a) || o === "font-weight" && /^(400|normal)$/i.test(a) || o === "font-style" && /^normal$/i.test(a) || o === "text-decoration" && /^none$/i.test(a) || l.push(o + ":" + a));
|
|
2616
|
+
if (l.length ? i.setAttribute("style", l.join(";")) : i.removeAttribute("style"), i.removeAttribute("class"), ht(i, t), s === "span" && !i.attributes.length) {
|
|
2617
2617
|
for (; i.firstChild; ) i.parentNode.insertBefore(i.firstChild, i);
|
|
2618
2618
|
i.remove();
|
|
2619
2619
|
}
|
|
2620
2620
|
});
|
|
2621
2621
|
}
|
|
2622
|
-
function
|
|
2622
|
+
function fi(u) {
|
|
2623
2623
|
const t = [], e = /<style[^>]*>([\s\S]*?)<\/style>/gi;
|
|
2624
2624
|
let i;
|
|
2625
|
-
for (; i = e.exec(
|
|
2625
|
+
for (; i = e.exec(u); ) {
|
|
2626
2626
|
let s = i[1].replace(/<!--|-->/g, "").replace(/\/\*[\s\S]*?\*\//g, "");
|
|
2627
2627
|
s = s.replace(/@media[^{]*\{(?:[^{}]*\{[^{}]*\})*[^{}]*\}/gi, ""), s = s.replace(/@[\w-]+[^{]*\{[^{}]*\}/g, "");
|
|
2628
2628
|
let n;
|
|
2629
|
-
const
|
|
2630
|
-
for (; n =
|
|
2631
|
-
const
|
|
2632
|
-
const
|
|
2633
|
-
return
|
|
2629
|
+
const r = /([^{}]+)\{([^}]*)\}/g;
|
|
2630
|
+
for (; n = r.exec(s); ) {
|
|
2631
|
+
const l = n[2].split(";").map((o) => {
|
|
2632
|
+
const a = o.indexOf(":");
|
|
2633
|
+
return a < 1 ? null : [o.slice(0, a).trim().toLowerCase(), o.slice(a + 1).trim()];
|
|
2634
2634
|
}).filter((o) => !!o && !!o[1]);
|
|
2635
|
-
|
|
2635
|
+
l.length && n[1].split(",").map((o) => o.trim()).filter((o) => o && !o.startsWith("@")).forEach((o) => t.push({ sel: o, decls: l }));
|
|
2636
2636
|
}
|
|
2637
2637
|
}
|
|
2638
2638
|
return t;
|
|
2639
2639
|
}
|
|
2640
|
-
function
|
|
2640
|
+
function gi(u, t) {
|
|
2641
2641
|
if (!t.length) return;
|
|
2642
2642
|
const e = /* @__PURE__ */ new Map();
|
|
2643
2643
|
t.forEach(({ sel: i, decls: s }) => {
|
|
2644
2644
|
let n;
|
|
2645
2645
|
try {
|
|
2646
|
-
n =
|
|
2646
|
+
n = u.querySelectorAll(i);
|
|
2647
2647
|
} catch {
|
|
2648
2648
|
return;
|
|
2649
2649
|
}
|
|
2650
|
-
n.forEach((
|
|
2651
|
-
let
|
|
2652
|
-
|
|
2653
|
-
|
|
2650
|
+
n.forEach((r) => {
|
|
2651
|
+
let l = e.get(r);
|
|
2652
|
+
l || (l = {}, e.set(r, l)), s.forEach(([o, a]) => {
|
|
2653
|
+
l[o] = a;
|
|
2654
2654
|
});
|
|
2655
2655
|
});
|
|
2656
2656
|
}), e.forEach((i, s) => {
|
|
2657
|
-
const n = ut(s),
|
|
2657
|
+
const n = ut(s), r = s.hasAttribute("dir"), l = s.hasAttribute("align"), o = Object.entries(i).filter(([p]) => !(p in n || (p === "direction" || p === "unicode-bidi") && r || p === "text-align" && (l || r) || (p === "background" || p === "background-color") && s.hasAttribute("bgcolor")));
|
|
2658
2658
|
if (!o.length) return;
|
|
2659
|
-
const
|
|
2660
|
-
s.setAttribute("style", d ?
|
|
2659
|
+
const a = o.map(([p, m]) => p + ":" + m).join(";"), d = s.getAttribute("style");
|
|
2660
|
+
s.setAttribute("style", d ? a + ";" + d : a);
|
|
2661
2661
|
});
|
|
2662
2662
|
}
|
|
2663
|
-
function
|
|
2664
|
-
return
|
|
2663
|
+
function pe(u) {
|
|
2664
|
+
return u.replace(/[ﭐ-﷿ﹰ-ﻼ]+/g, (t) => t.normalize("NFKC"));
|
|
2665
2665
|
}
|
|
2666
|
-
function
|
|
2667
|
-
const t =
|
|
2666
|
+
function vi(u) {
|
|
2667
|
+
const t = u.createTreeWalker(u.body, NodeFilter.SHOW_TEXT, null);
|
|
2668
2668
|
let e;
|
|
2669
2669
|
for (; e = t.nextNode(); )
|
|
2670
|
-
/[ﭐ-﷿ﹰ-ﻼ]/.test(e.nodeValue || "") && (e.nodeValue =
|
|
2670
|
+
/[ﭐ-﷿ﹰ-ﻼ]/.test(e.nodeValue || "") && (e.nodeValue = pe(e.nodeValue || ""));
|
|
2671
2671
|
}
|
|
2672
|
-
function
|
|
2673
|
-
const e =
|
|
2674
|
-
|
|
2672
|
+
function bi(u, t = "ltr") {
|
|
2673
|
+
const e = fi(u), i = new DOMParser().parseFromString(hi(u), "text/html");
|
|
2674
|
+
gi(i, e), /class="?Mso|mso-|urn:schemas-microsoft-com/i.test(i.body.innerHTML) && ui(i), pi(i), mi(i), ht(i.body, i), vi(i);
|
|
2675
2675
|
const s = (n) => {
|
|
2676
|
-
var
|
|
2677
|
-
return n && n.tagName === "P" && !((
|
|
2676
|
+
var r;
|
|
2677
|
+
return n && n.tagName === "P" && !((r = n.textContent) != null && r.trim()) && !n.querySelector("img,table");
|
|
2678
2678
|
};
|
|
2679
2679
|
for (; s(i.body.firstElementChild); ) i.body.firstElementChild.remove();
|
|
2680
2680
|
for (; s(i.body.lastElementChild); ) i.body.lastElementChild.remove();
|
|
2681
2681
|
return i.body.innerHTML.trim();
|
|
2682
2682
|
}
|
|
2683
|
-
function
|
|
2684
|
-
const t =
|
|
2683
|
+
function yi(u) {
|
|
2684
|
+
const t = pe(u).replace(/\r/g, ""), e = (i) => i.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
|
|
2685
2685
|
return /\n/.test(t) ? t.split(/\n{2,}/).map((i) => `<p dir="auto">${e(i).replace(/\n/g, "<br>") || "<br>"}</p>`).join("") : e(t);
|
|
2686
2686
|
}
|
|
2687
|
-
|
|
2688
|
-
|
|
2687
|
+
const xi = 10 * 1024 * 1024, me = /^(https?:|data:image\/|blob:)/i;
|
|
2688
|
+
function le(u, t) {
|
|
2689
|
+
const e = [], i = "{\\" + t;
|
|
2690
|
+
let s = 0;
|
|
2691
|
+
for (; (s = u.indexOf(i, s)) !== -1; ) {
|
|
2692
|
+
const n = u[s + i.length];
|
|
2693
|
+
if (n && /[a-z0-9]/i.test(n)) {
|
|
2694
|
+
s += i.length;
|
|
2695
|
+
continue;
|
|
2696
|
+
}
|
|
2697
|
+
let r = 0, l = s;
|
|
2698
|
+
for (; l < u.length; l++) {
|
|
2699
|
+
const o = u[l];
|
|
2700
|
+
if (o === "\\") {
|
|
2701
|
+
l++;
|
|
2702
|
+
continue;
|
|
2703
|
+
}
|
|
2704
|
+
if (o === "{") r++;
|
|
2705
|
+
else if (o === "}" && (r--, !r))
|
|
2706
|
+
break;
|
|
2707
|
+
}
|
|
2708
|
+
e.push({ start: s, end: l + 1, body: u.slice(s + i.length, l) }), s = l + 1;
|
|
2709
|
+
}
|
|
2710
|
+
return e;
|
|
2711
|
+
}
|
|
2712
|
+
function Ci(u) {
|
|
2713
|
+
const t = new Uint8Array(u.length / 2);
|
|
2714
|
+
for (let e = 0; e < t.length; e++) t[e] = parseInt(u.substr(e * 2, 2), 16);
|
|
2715
|
+
return t;
|
|
2716
|
+
}
|
|
2717
|
+
function wt(u) {
|
|
2718
|
+
let t = "";
|
|
2719
|
+
for (let e = 0; e < u.length; e++) t += String.fromCharCode(u[e]);
|
|
2720
|
+
return btoa(t);
|
|
2721
|
+
}
|
|
2722
|
+
function oe(u, t) {
|
|
2723
|
+
t: for (let e = 0; e + t.length <= u.length; e++) {
|
|
2724
|
+
for (let i = 0; i < t.length; i++) if (u[e + i] !== t[i]) continue t;
|
|
2725
|
+
return e;
|
|
2726
|
+
}
|
|
2727
|
+
return -1;
|
|
2728
|
+
}
|
|
2729
|
+
const wi = [137, 80, 78, 71], Ti = [255, 216, 255];
|
|
2730
|
+
function Ei(u) {
|
|
2731
|
+
let t = null;
|
|
2732
|
+
if (/\\pngblip/.test(u) ? t = "image/png" : /\\jpegblip/.test(u) ? t = "image/jpeg" : (/\\wmetafile\d*/.test(u) || /\\emfblip/.test(u)) && (t = "metafile"), !t) return null;
|
|
2733
|
+
let e = u.replace(/\{[^{}]*\}/g, "").replace(/\\[a-z]+-?\d*\s?/gi, "").replace(/[^0-9a-fA-F]/g, "");
|
|
2734
|
+
if (e.length % 2 && (e = e.slice(0, -1)), !e) return null;
|
|
2735
|
+
const i = Ci(e);
|
|
2736
|
+
if (t === "metafile") {
|
|
2737
|
+
const s = oe(i, wi);
|
|
2738
|
+
if (s >= 0) return "data:image/png;base64," + wt(i.slice(s));
|
|
2739
|
+
const n = oe(i, Ti);
|
|
2740
|
+
return n >= 0 ? "data:image/jpeg;base64," + wt(i.slice(n)) : null;
|
|
2741
|
+
}
|
|
2742
|
+
return "data:" + t + ";base64," + wt(i);
|
|
2743
|
+
}
|
|
2744
|
+
function Si(u) {
|
|
2745
|
+
if (!u || u.indexOf("\\pict") === -1) return [];
|
|
2746
|
+
let t = u;
|
|
2747
|
+
le(u, "nonshppict").reverse().forEach((i) => {
|
|
2748
|
+
t = t.slice(0, i.start) + t.slice(i.end);
|
|
2749
|
+
});
|
|
2750
|
+
let e = xi;
|
|
2751
|
+
return le(t, "pict").map((i) => {
|
|
2752
|
+
if (e <= 0) return null;
|
|
2753
|
+
const s = Ei(i.body);
|
|
2754
|
+
return s && (e -= s.length * 0.75), s;
|
|
2755
|
+
});
|
|
2756
|
+
}
|
|
2757
|
+
function fe(u, t) {
|
|
2758
|
+
if (!u || !t.length) return { html: u, injected: [] };
|
|
2759
|
+
const e = [];
|
|
2760
|
+
let i = 0;
|
|
2761
|
+
return { html: u.replace(/<img\b[^>]*>/gi, (n) => {
|
|
2762
|
+
const r = (n.match(/\ssrc\s*=\s*["']?([^"'\s>]+)/i) || [])[1] || "";
|
|
2763
|
+
if (me.test(r)) return n;
|
|
2764
|
+
const l = t[i++];
|
|
2765
|
+
return l ? (e.push(l), /\ssrc\s*=\s*["']/i.test(n) ? n.replace(/(\ssrc\s*=\s*)(["'])[^"']*\2/i, '$1"' + l + '"') : n.replace(/(\ssrc\s*=\s*)[^\s>]+/i, '$1"' + l + '"')) : n;
|
|
2766
|
+
}), injected: e };
|
|
2767
|
+
}
|
|
2768
|
+
function Mi(u, t) {
|
|
2769
|
+
return !u || !t ? { html: u, injected: [] } : fe(u, Si(t));
|
|
2770
|
+
}
|
|
2771
|
+
function Li(u) {
|
|
2772
|
+
const t = u.match(/<img\b[^>]*>/gi);
|
|
2773
|
+
return t ? t.filter((e) => {
|
|
2774
|
+
const i = (e.match(/\ssrc\s*=\s*["']?([^"'\s>]+)/i) || [])[1] || "";
|
|
2775
|
+
return !me.test(i);
|
|
2776
|
+
}).length : 0;
|
|
2777
|
+
}
|
|
2778
|
+
function ki(u, t) {
|
|
2779
|
+
const e = u.match(/^data:([^;,]+);base64,(.*)$/);
|
|
2780
|
+
if (!e) return null;
|
|
2781
|
+
const i = (e[1].split("/")[1] || "png").replace(/[^a-z0-9]/gi, "") || "png";
|
|
2782
|
+
try {
|
|
2783
|
+
const s = atob(e[2]), n = new Uint8Array(s.length);
|
|
2784
|
+
for (let r = 0; r < s.length; r++) n[r] = s.charCodeAt(r);
|
|
2785
|
+
return new File([n], t + "." + (i === "jpeg" ? "jpg" : i), { type: e[1] });
|
|
2786
|
+
} catch {
|
|
2787
|
+
return null;
|
|
2788
|
+
}
|
|
2789
|
+
}
|
|
2790
|
+
function Ai(u) {
|
|
2791
|
+
const t = new DataView(u), e = /* @__PURE__ */ new Map();
|
|
2689
2792
|
let i = -1;
|
|
2690
|
-
for (let
|
|
2691
|
-
if (t.getUint32(
|
|
2692
|
-
i =
|
|
2793
|
+
for (let l = u.byteLength - 22; l >= Math.max(0, u.byteLength - 22 - 65535); l--)
|
|
2794
|
+
if (t.getUint32(l, !0) === 101010256) {
|
|
2795
|
+
i = l;
|
|
2693
2796
|
break;
|
|
2694
2797
|
}
|
|
2695
2798
|
if (i < 0) throw new Error("EOCD not found");
|
|
2696
2799
|
const s = t.getUint16(i + 10, !0);
|
|
2697
2800
|
let n = t.getUint32(i + 16, !0);
|
|
2698
|
-
const
|
|
2699
|
-
for (let
|
|
2700
|
-
const o = t.getUint16(n + 10, !0),
|
|
2701
|
-
e.set(y, { name: y, method: o, compSize:
|
|
2801
|
+
const r = new TextDecoder();
|
|
2802
|
+
for (let l = 0; l < s && t.getUint32(n, !0) === 33639248; l++) {
|
|
2803
|
+
const o = t.getUint16(n + 10, !0), a = t.getUint32(n + 20, !0), d = t.getUint16(n + 28, !0), p = t.getUint16(n + 30, !0), m = t.getUint16(n + 32, !0), b = t.getUint32(n + 42, !0), y = r.decode(new Uint8Array(u, n + 46, d));
|
|
2804
|
+
e.set(y, { name: y, method: o, compSize: a, localOffset: b }), n += 46 + d + p + m;
|
|
2702
2805
|
}
|
|
2703
2806
|
return e;
|
|
2704
2807
|
}
|
|
2705
|
-
async function
|
|
2706
|
-
const e = new DataView(
|
|
2808
|
+
async function ae(u, t) {
|
|
2809
|
+
const e = new DataView(u, t.localOffset);
|
|
2707
2810
|
if (e.getUint32(0, !0) !== 67324752) throw new Error("Bad local header");
|
|
2708
|
-
const i = e.getUint16(26, !0), s = e.getUint16(28, !0), n = t.localOffset + 30 + i + s,
|
|
2709
|
-
if (t.method === 0) return
|
|
2811
|
+
const i = e.getUint16(26, !0), s = e.getUint16(28, !0), n = t.localOffset + 30 + i + s, r = new Uint8Array(u.slice(n, n + t.compSize));
|
|
2812
|
+
if (t.method === 0) return r;
|
|
2710
2813
|
if (t.method !== 8) throw new Error("Unsupported compression method " + t.method);
|
|
2711
|
-
const
|
|
2712
|
-
return new Uint8Array(await new Response(
|
|
2814
|
+
const l = new Blob([r]).stream().pipeThrough(new DecompressionStream("deflate-raw"));
|
|
2815
|
+
return new Uint8Array(await new Response(l).arrayBuffer());
|
|
2713
2816
|
}
|
|
2714
|
-
const
|
|
2715
|
-
let e =
|
|
2817
|
+
const ce = (u) => u.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """), dt = (u, t) => Array.from(u.children).filter((e) => e.localName === t), B = (u, ...t) => {
|
|
2818
|
+
let e = u;
|
|
2716
2819
|
for (const i of t) {
|
|
2717
2820
|
if (!e) return null;
|
|
2718
2821
|
e = Array.from(e.children).find((s) => s.localName === i) || null;
|
|
2719
2822
|
}
|
|
2720
2823
|
return e;
|
|
2721
|
-
}, q = (
|
|
2722
|
-
if (!
|
|
2723
|
-
for (const e of Array.from(
|
|
2824
|
+
}, q = (u, t = "val") => {
|
|
2825
|
+
if (!u) return "";
|
|
2826
|
+
for (const e of Array.from(u.attributes))
|
|
2724
2827
|
if (e.localName === t) return e.value;
|
|
2725
2828
|
return "";
|
|
2726
|
-
}, at = (
|
|
2727
|
-
const e =
|
|
2829
|
+
}, at = (u, t) => {
|
|
2830
|
+
const e = u ? B(u, t) : null;
|
|
2728
2831
|
if (!e) return !1;
|
|
2729
2832
|
const i = q(e);
|
|
2730
2833
|
return i !== "false" && i !== "0";
|
|
2731
|
-
},
|
|
2834
|
+
}, he = {
|
|
2732
2835
|
yellow: "#FFFF00",
|
|
2733
2836
|
green: "#00FF00",
|
|
2734
2837
|
cyan: "#00FFFF",
|
|
@@ -2745,7 +2848,7 @@ const oe = (p) => p.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, "
|
|
|
2745
2848
|
lightGray: "#D3D3D3",
|
|
2746
2849
|
black: "#000000",
|
|
2747
2850
|
white: "#FFFFFF"
|
|
2748
|
-
},
|
|
2851
|
+
}, Hi = {
|
|
2749
2852
|
png: "image/png",
|
|
2750
2853
|
jpg: "image/jpeg",
|
|
2751
2854
|
jpeg: "image/jpeg",
|
|
@@ -2753,13 +2856,13 @@ const oe = (p) => p.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, "
|
|
|
2753
2856
|
bmp: "image/bmp",
|
|
2754
2857
|
webp: "image/webp"
|
|
2755
2858
|
};
|
|
2756
|
-
function
|
|
2859
|
+
function Ii(u) {
|
|
2757
2860
|
let t = "";
|
|
2758
|
-
for (let e = 0; e <
|
|
2759
|
-
t += String.fromCharCode(...
|
|
2861
|
+
for (let e = 0; e < u.length; e += 32768)
|
|
2862
|
+
t += String.fromCharCode(...u.subarray(e, e + 32768));
|
|
2760
2863
|
return btoa(t);
|
|
2761
2864
|
}
|
|
2762
|
-
class
|
|
2865
|
+
class qi {
|
|
2763
2866
|
constructor(t, e, i) {
|
|
2764
2867
|
this.rels = t, this.images = e, this.numFmt = i;
|
|
2765
2868
|
}
|
|
@@ -2770,12 +2873,12 @@ class bi {
|
|
|
2770
2873
|
};
|
|
2771
2874
|
for (const n of Array.from(t.children))
|
|
2772
2875
|
if (n.localName === "p") {
|
|
2773
|
-
const
|
|
2774
|
-
if (
|
|
2775
|
-
const
|
|
2776
|
-
for (; i.length >
|
|
2777
|
-
for (i.length ===
|
|
2778
|
-
e += `<${
|
|
2876
|
+
const r = this.paraList(n);
|
|
2877
|
+
if (r) {
|
|
2878
|
+
const l = r.ilvl + 1;
|
|
2879
|
+
for (; i.length > l; ) e += `</${i.pop()}>`;
|
|
2880
|
+
for (i.length === l && i[l - 1] !== r.type && (e += `</${i.pop()}>`); i.length < l; )
|
|
2881
|
+
e += `<${r.type}>`, i.push(r.type);
|
|
2779
2882
|
e += `<li>${this.runsOf(n) || "<br>"}</li>`;
|
|
2780
2883
|
continue;
|
|
2781
2884
|
}
|
|
@@ -2796,10 +2899,10 @@ class bi {
|
|
|
2796
2899
|
let s = "p";
|
|
2797
2900
|
const n = /^Heading([1-6])$/i.exec(i);
|
|
2798
2901
|
n ? s = "h" + n[1] : /^Title$/i.test(i) && (s = "h1");
|
|
2799
|
-
const
|
|
2800
|
-
|
|
2801
|
-
const o = this.runsOf(t),
|
|
2802
|
-
return `<${s}${
|
|
2902
|
+
const r = [], l = q(B(t, "pPr", "jc"));
|
|
2903
|
+
l === "center" ? r.push("text-align:center") : l === "right" || l === "end" ? r.push("text-align:right") : (l === "both" || l === "distribute") && r.push("text-align:justify"), e && B(e, "bidi") && r.push("direction:rtl");
|
|
2904
|
+
const o = this.runsOf(t), a = r.length ? ` style="${r.join(";")}"` : "";
|
|
2905
|
+
return `<${s}${a}>${o || "<br>"}</${s}>`;
|
|
2803
2906
|
}
|
|
2804
2907
|
runsOf(t) {
|
|
2805
2908
|
let e = "";
|
|
@@ -2809,88 +2912,88 @@ class bi {
|
|
|
2809
2912
|
let s = this.rels.get(q(i, "id")) || "";
|
|
2810
2913
|
const n = q(i, "anchor");
|
|
2811
2914
|
!s && n && (s = "#" + n);
|
|
2812
|
-
const
|
|
2813
|
-
e += s ? `<a href="${
|
|
2915
|
+
const r = this.runsOf(i);
|
|
2916
|
+
e += s ? `<a href="${ce(s)}">${r}</a>` : r;
|
|
2814
2917
|
} else (i.localName === "smartTag" || i.localName === "ins") && (e += this.runsOf(i));
|
|
2815
2918
|
return e;
|
|
2816
2919
|
}
|
|
2817
2920
|
convertRun(t) {
|
|
2818
2921
|
const e = B(t, "rPr");
|
|
2819
2922
|
let i = "";
|
|
2820
|
-
for (const
|
|
2821
|
-
|
|
2923
|
+
for (const p of Array.from(t.children))
|
|
2924
|
+
p.localName === "t" ? i += ce(p.textContent || "") : p.localName === "br" || p.localName === "cr" ? i += "<br>" : p.localName === "tab" ? i += " " : (p.localName === "drawing" || p.localName === "pict" || p.localName === "object") && (i += this.convertImage(p));
|
|
2822
2925
|
if (!i) return "";
|
|
2823
2926
|
const s = [], n = q(e ? B(e, "color") : null);
|
|
2824
2927
|
n && n !== "auto" && s.push("color:#" + n);
|
|
2825
|
-
const
|
|
2826
|
-
|
|
2827
|
-
const
|
|
2828
|
-
|
|
2829
|
-
const o = e ? B(e, "rFonts") : null,
|
|
2830
|
-
|
|
2928
|
+
const r = q(e ? B(e, "highlight") : null);
|
|
2929
|
+
r && he[r] && s.push("background-color:" + he[r]);
|
|
2930
|
+
const l = parseFloat(q(e ? B(e, "sz") : null));
|
|
2931
|
+
l && s.push("font-size:" + Math.round(l / 2 * (4 / 3)) + "px");
|
|
2932
|
+
const o = e ? B(e, "rFonts") : null, a = q(o, "ascii") || q(o, "cs");
|
|
2933
|
+
a && s.push(`font-family:'${a}'`), s.length && (i = `<span style="${s.join(";")}">${i}</span>`), at(e, "b") && (i = `<strong>${i}</strong>`), at(e, "i") && (i = `<em>${i}</em>`), at(e, "u") && q(B(e, "u")) !== "none" && (i = `<u>${i}</u>`), at(e, "strike") && (i = `<s>${i}</s>`);
|
|
2831
2934
|
const d = q(e ? B(e, "vertAlign") : null);
|
|
2832
2935
|
return d === "superscript" ? i = `<sup>${i}</sup>` : d === "subscript" && (i = `<sub>${i}</sub>`), i;
|
|
2833
2936
|
}
|
|
2834
2937
|
convertImage(t) {
|
|
2835
2938
|
let e = "", i = 0;
|
|
2836
|
-
const s = (
|
|
2837
|
-
if (
|
|
2838
|
-
const o = parseFloat(
|
|
2939
|
+
const s = (l) => {
|
|
2940
|
+
if (l.localName === "blip" && (e = e || q(l, "embed") || q(l, "link")), l.localName === "imagedata" && (e = e || q(l, "id")), l.localName === "extent") {
|
|
2941
|
+
const o = parseFloat(l.getAttribute("cx") || "0");
|
|
2839
2942
|
o && (i = Math.round(o / 9525));
|
|
2840
2943
|
}
|
|
2841
|
-
for (const o of Array.from(
|
|
2944
|
+
for (const o of Array.from(l.children)) s(o);
|
|
2842
2945
|
};
|
|
2843
2946
|
if (s(t), !e) return "";
|
|
2844
2947
|
const n = this.images.get(e);
|
|
2845
2948
|
if (!n) return "";
|
|
2846
|
-
const
|
|
2847
|
-
return `<img src="${n}" alt=""${
|
|
2949
|
+
const r = i ? ` width="${i}"` : "";
|
|
2950
|
+
return `<img src="${n}" alt=""${r}>`;
|
|
2848
2951
|
}
|
|
2849
2952
|
convertTable(t) {
|
|
2850
2953
|
let e = '<table style="border-collapse:collapse;width:100%"><tbody>';
|
|
2851
2954
|
for (const i of dt(t, "tr")) {
|
|
2852
2955
|
e += "<tr>";
|
|
2853
2956
|
for (const s of dt(i, "tc")) {
|
|
2854
|
-
const n = parseInt(q(B(s, "tcPr", "gridSpan")) || "1", 10) || 1,
|
|
2855
|
-
let
|
|
2957
|
+
const n = parseInt(q(B(s, "tcPr", "gridSpan")) || "1", 10) || 1, r = n > 1 ? ` colspan="${n}"` : "";
|
|
2958
|
+
let l = "";
|
|
2856
2959
|
for (const o of Array.from(s.children))
|
|
2857
|
-
o.localName === "p" ?
|
|
2858
|
-
e += `<td style="border:1px solid #b9c2cc"${
|
|
2960
|
+
o.localName === "p" ? l += this.convertPara(o) : o.localName === "tbl" && (l += this.convertTable(o));
|
|
2961
|
+
e += `<td style="border:1px solid #b9c2cc"${r}>${l || "<br>"}</td>`;
|
|
2859
2962
|
}
|
|
2860
2963
|
e += "</tr>";
|
|
2861
2964
|
}
|
|
2862
2965
|
return e + "</tbody></table>";
|
|
2863
2966
|
}
|
|
2864
2967
|
}
|
|
2865
|
-
async function
|
|
2866
|
-
const t =
|
|
2968
|
+
async function Ri(u) {
|
|
2969
|
+
const t = u instanceof ArrayBuffer ? u : await u.arrayBuffer(), e = Ai(t), i = new TextDecoder(), s = async (y) => {
|
|
2867
2970
|
const g = e.get(y);
|
|
2868
|
-
return g ? new DOMParser().parseFromString(i.decode(await
|
|
2869
|
-
}, n = await s("word/document.xml"),
|
|
2870
|
-
let
|
|
2871
|
-
if (
|
|
2872
|
-
for (const y of Array.from(
|
|
2971
|
+
return g ? new DOMParser().parseFromString(i.decode(await ae(t, g)), "application/xml") : null;
|
|
2972
|
+
}, n = await s("word/document.xml"), r = n == null ? void 0 : n.getElementsByTagName("*");
|
|
2973
|
+
let l = null;
|
|
2974
|
+
if (r) {
|
|
2975
|
+
for (const y of Array.from(r))
|
|
2873
2976
|
if (y.localName === "body") {
|
|
2874
|
-
|
|
2977
|
+
l = y;
|
|
2875
2978
|
break;
|
|
2876
2979
|
}
|
|
2877
2980
|
}
|
|
2878
|
-
if (!
|
|
2879
|
-
const o = /* @__PURE__ */ new Map(),
|
|
2981
|
+
if (!l) throw new Error("word/document.xml missing or invalid");
|
|
2982
|
+
const o = /* @__PURE__ */ new Map(), a = /* @__PURE__ */ new Map(), d = await s("word/_rels/document.xml.rels");
|
|
2880
2983
|
if (d)
|
|
2881
2984
|
for (const y of Array.from(d.getElementsByTagName("*"))) {
|
|
2882
2985
|
if (y.localName !== "Relationship") continue;
|
|
2883
2986
|
const g = y.getAttribute("Id") || "", x = y.getAttribute("Target") || "", w = y.getAttribute("Type") || "";
|
|
2884
|
-
/hyperlink/i.test(w) ? o.set(g, x) : /image/i.test(w) &&
|
|
2987
|
+
/hyperlink/i.test(w) ? o.set(g, x) : /image/i.test(w) && a.set(g, x);
|
|
2885
2988
|
}
|
|
2886
|
-
const
|
|
2887
|
-
for (const [y, g] of
|
|
2989
|
+
const p = /* @__PURE__ */ new Map();
|
|
2990
|
+
for (const [y, g] of a) {
|
|
2888
2991
|
const x = g.startsWith("/") ? g.slice(1) : "word/" + g.replace(/^\.\//, ""), w = e.get(x);
|
|
2889
2992
|
if (!w) continue;
|
|
2890
|
-
const E = (x.split(".").pop() || "").toLowerCase(), I =
|
|
2993
|
+
const E = (x.split(".").pop() || "").toLowerCase(), I = Hi[E];
|
|
2891
2994
|
if (I)
|
|
2892
2995
|
try {
|
|
2893
|
-
|
|
2996
|
+
p.set(y, `data:${I};base64,${Ii(await ae(t, w))}`);
|
|
2894
2997
|
} catch {
|
|
2895
2998
|
}
|
|
2896
2999
|
}
|
|
@@ -2899,7 +3002,7 @@ async function yi(p) {
|
|
|
2899
3002
|
const y = /* @__PURE__ */ new Map(), g = Array.from(b.getElementsByTagName("*"));
|
|
2900
3003
|
for (const x of g) {
|
|
2901
3004
|
if (x.localName !== "abstractNum") continue;
|
|
2902
|
-
const w = q(x, "abstractNumId"), E = dt(x, "lvl").find((
|
|
3005
|
+
const w = q(x, "abstractNumId"), E = dt(x, "lvl").find((A) => q(A, "ilvl") === "0") || dt(x, "lvl")[0], I = E ? q(B(E, "numFmt")) : "";
|
|
2903
3006
|
y.set(w, I === "bullet" ? "ul" : "ol");
|
|
2904
3007
|
}
|
|
2905
3008
|
for (const x of g) {
|
|
@@ -2908,73 +3011,73 @@ async function yi(p) {
|
|
|
2908
3011
|
m.set(w, y.get(E) || "ul");
|
|
2909
3012
|
}
|
|
2910
3013
|
}
|
|
2911
|
-
return new
|
|
3014
|
+
return new qi(o, p, m).convertBody(l);
|
|
2912
3015
|
}
|
|
2913
|
-
const
|
|
3016
|
+
const Pi = ["nw", "ne", "sw", "se"], Tt = ["img-left", "img-right", "img-top", "img-center"], Et = {
|
|
2914
3017
|
"img-left": "tplimgleft",
|
|
2915
3018
|
"img-right": "tplimgright",
|
|
2916
3019
|
"img-top": "tplimgtop",
|
|
2917
3020
|
"img-center": "tplimgcenter"
|
|
2918
|
-
},
|
|
3021
|
+
}, Bi = {
|
|
2919
3022
|
"img-left": h.tplleft,
|
|
2920
3023
|
"img-right": h.tplright,
|
|
2921
3024
|
"img-top": h.tpltop,
|
|
2922
3025
|
"img-center": h.tplcenter
|
|
2923
|
-
},
|
|
2924
|
-
let O = null, X = null,
|
|
3026
|
+
}, Ni = ".tox,.pop,.tblctx,.imgctx,.selctx,.dlg";
|
|
3027
|
+
let O = null, X = null, Mt = 0, de = !1;
|
|
2925
3028
|
function ct() {
|
|
2926
|
-
clearTimeout(
|
|
3029
|
+
clearTimeout(Mt), X = null, O && O.classList.remove("show");
|
|
2927
3030
|
}
|
|
2928
|
-
function
|
|
2929
|
-
const t =
|
|
3031
|
+
function Di(u) {
|
|
3032
|
+
const t = u.dataset.tip;
|
|
2930
3033
|
if (!t) return;
|
|
2931
|
-
X =
|
|
3034
|
+
X = u, clearTimeout(Mt);
|
|
2932
3035
|
const e = O && O.classList.contains("show") ? 60 : 350;
|
|
2933
|
-
|
|
2934
|
-
if (X !==
|
|
3036
|
+
Mt = window.setTimeout(() => {
|
|
3037
|
+
if (X !== u || !document.contains(u)) return;
|
|
2935
3038
|
O || (O = document.createElement("div"), O.className = "etip", document.body.appendChild(O)), O.textContent = t, O.classList.add("show");
|
|
2936
|
-
const i =
|
|
2937
|
-
let
|
|
2938
|
-
|
|
2939
|
-
let
|
|
2940
|
-
|
|
3039
|
+
const i = u.getBoundingClientRect(), s = O.offsetWidth, n = O.offsetHeight;
|
|
3040
|
+
let r = i.left + i.width / 2 - s / 2;
|
|
3041
|
+
r = Math.max(6, Math.min(r, innerWidth - s - 6));
|
|
3042
|
+
let l = i.bottom + 7;
|
|
3043
|
+
l + n > innerHeight - 6 && (l = i.top - n - 7), O.style.left = r + "px", O.style.top = l + "px";
|
|
2941
3044
|
}, e);
|
|
2942
3045
|
}
|
|
2943
|
-
function
|
|
2944
|
-
|
|
2945
|
-
const t =
|
|
2946
|
-
if (!e || !e.closest(
|
|
3046
|
+
function Oi() {
|
|
3047
|
+
de || (de = !0, document.addEventListener("mouseover", (u) => {
|
|
3048
|
+
const t = u.target, e = t.closest ? t.closest("[title],[data-tip]") : null;
|
|
3049
|
+
if (!e || !e.closest(Ni) || e.closest(".earea")) {
|
|
2947
3050
|
e !== X && ct();
|
|
2948
3051
|
return;
|
|
2949
3052
|
}
|
|
2950
3053
|
const i = e.getAttribute("title");
|
|
2951
|
-
i && (e.dataset.tip = i, e.removeAttribute("title"), e.getAttribute("aria-label") || e.setAttribute("aria-label", i)), e !== X &&
|
|
2952
|
-
}), document.addEventListener("mouseout", (
|
|
2953
|
-
X && !X.contains(
|
|
3054
|
+
i && (e.dataset.tip = i, e.removeAttribute("title"), e.getAttribute("aria-label") || e.setAttribute("aria-label", i)), e !== X && Di(e);
|
|
3055
|
+
}), document.addEventListener("mouseout", (u) => {
|
|
3056
|
+
X && !X.contains(u.relatedTarget) && ct();
|
|
2954
3057
|
}), document.addEventListener("mousedown", ct, !0), addEventListener("scroll", ct, !0));
|
|
2955
3058
|
}
|
|
2956
|
-
const
|
|
2957
|
-
function
|
|
2958
|
-
for (const t of
|
|
2959
|
-
if (
|
|
2960
|
-
if (
|
|
3059
|
+
const Zi = /[\u0590-\u05FF\u0600-\u06FF\u0750-\u077F\u0780-\u07BF\u08A0-\u08FF\uFB1D-\uFB4F\uFB50-\uFDFF\uFE70-\uFEFF]/, Fi = new RegExp("\\p{L}", "u"), _i = "p,div,li,td,th,blockquote,h1,h2,h3,h4,h5,h6,pre,figcaption";
|
|
3060
|
+
function $i(u) {
|
|
3061
|
+
for (const t of u) {
|
|
3062
|
+
if (Zi.test(t)) return "rtl";
|
|
3063
|
+
if (Fi.test(t)) return "ltr";
|
|
2961
3064
|
}
|
|
2962
3065
|
return null;
|
|
2963
3066
|
}
|
|
2964
|
-
function
|
|
3067
|
+
function ge(u) {
|
|
2965
3068
|
let t = "";
|
|
2966
|
-
return
|
|
3069
|
+
return u.childNodes.forEach((e) => {
|
|
2967
3070
|
if (e.nodeType === Node.TEXT_NODE)
|
|
2968
3071
|
t += e.nodeValue || "";
|
|
2969
3072
|
else if (e.nodeType === Node.ELEMENT_NODE) {
|
|
2970
3073
|
const i = e, s = (i.getAttribute("dir") || "").toLowerCase();
|
|
2971
3074
|
if (s === "rtl" || s === "ltr") return;
|
|
2972
|
-
t +=
|
|
3075
|
+
t += ge(i);
|
|
2973
3076
|
}
|
|
2974
3077
|
}), t;
|
|
2975
3078
|
}
|
|
2976
3079
|
var j;
|
|
2977
|
-
let
|
|
3080
|
+
let ji = (j = class {
|
|
2978
3081
|
constructor(t) {
|
|
2979
3082
|
this.lang = "en", this.contentClass = "fable-content-" + j.instanceCounter++, this.contentStyleEl = null, this.savedRange = null, this.foreColor = "#000000", this.backColor = "#FACC15", this.openPop = null, this.subStack = [], this.popAnchor = null, this.dlgOvl = null, this.tblActive = null, this.tblCorner = null, this.tblColBars = [], this.tblCtx = null, this.tblCellMark = null, this.tblOpMark = null, this.tblOpMarkKind = null, this.imgActive = null, this.imgHandles = [], this.imgCtx = null, this.imgHideTimer = null, this.phActive = null, this.phCtx = null, this.phUploadTarget = null, this.vidActive = null, this.vidCtx = null, this.vidHideTimer = null, this.vphActive = null, this.vphCtx = null, this.vphUploadTarget = null, this.selCtx = null, this.tbrMore = null, this.tbrExpanded = !1, this.codeActive = null, this.codeCtx = null, this.tplActive = null, this.tplCtx = null, this.revisions = [], this.revTimer = null, this.draftTimer = null, this.draftStorageKey = "", this.listeners = [], this.isDestroyed = !1, this.options = {
|
|
2980
3083
|
target: t.target,
|
|
@@ -2990,10 +3093,10 @@ let Hi = (j = class {
|
|
|
2990
3093
|
statusbar: t.statusbar ?? !0,
|
|
2991
3094
|
readonly: t.readonly ?? !1,
|
|
2992
3095
|
draftKey: t.draftKey ?? (typeof location < "u" ? location.pathname : "default"),
|
|
2993
|
-
fontFamilyFormats: t.fontFamilyFormats ??
|
|
3096
|
+
fontFamilyFormats: t.fontFamilyFormats ?? ti,
|
|
2994
3097
|
imageFileTypes: t.imageFileTypes ?? ["image/jpeg", "image/jpg", "image/png", "image/gif", "image/bmp", "image/webp"],
|
|
2995
3098
|
videoFileTypes: t.videoFileTypes ?? ["video/mp4", "video/webm", "video/ogg"]
|
|
2996
|
-
}, this.imageUploadHandler = t.imageUploadHandler, this.onImageUploadError = t.onImageUploadError, this.videoUploadHandler = t.videoUploadHandler, this.onVideoUploadError = t.onVideoUploadError, this.contentStyle = t.contentStyle, this.applyTheme(t), this.lang = this.options.language, this.draftStorageKey = "tmclone-draft:" + this.options.draftKey, this.initDOM(), this.bindEvents(), this.initUI(), this.recordRevision(), this.options.onReady(this);
|
|
3099
|
+
}, this.imageUploadHandler = t.imageUploadHandler, this.onImageUploadError = t.onImageUploadError, this.videoUploadHandler = t.videoUploadHandler, this.onVideoUploadError = t.onVideoUploadError, this.contentStyle = t.contentStyle, this.applyTheme(t), this.lang = this.options.language, this.draftStorageKey = "tmclone-draft:" + this.options.draftKey, this.initDOM(), this.bindEvents(), this.initUI(), this.recordRevision(), this.stampExistingImages(), this.options.onReady(this);
|
|
2997
3100
|
}
|
|
2998
3101
|
t(t) {
|
|
2999
3102
|
const e = Ct(this.lang)[t];
|
|
@@ -3016,7 +3119,7 @@ let Hi = (j = class {
|
|
|
3016
3119
|
</span>
|
|
3017
3120
|
`, this.sbHelp = this.statusbar.querySelector(".mid"), this.sbWords = this.statusbar.querySelector(".words");
|
|
3018
3121
|
const e = this.statusbar.querySelector(".grip");
|
|
3019
|
-
this.bindGrip(e), this.shell.appendChild(this.menubar), this.shell.appendChild(this.toolbar), this.shell.appendChild(this.ed), this.shell.appendChild(this.statusbar), this.contentStyle && (this.contentStyleEl = document.createElement("style"), this.contentStyleEl.textContent = this.scopeContentStyle(this.contentStyle), this.shell.appendChild(this.contentStyleEl)), t.appendChild(this.shell),
|
|
3122
|
+
this.bindGrip(e), this.shell.appendChild(this.menubar), this.shell.appendChild(this.toolbar), this.shell.appendChild(this.ed), this.shell.appendChild(this.statusbar), this.contentStyle && (this.contentStyleEl = document.createElement("style"), this.contentStyleEl.textContent = this.scopeContentStyle(this.contentStyle), this.shell.appendChild(this.contentStyleEl)), t.appendChild(this.shell), Oi(), this.options.statusbar || (this.statusbar.style.display = "none"), this.imgInput = document.createElement("input"), this.imgInput.type = "file", this.imgInput.accept = this.options.imageFileTypes.join(","), this.imgInput.style.display = "none", t.appendChild(this.imgInput), this.vidInput = document.createElement("input"), this.vidInput.type = "file", this.vidInput.accept = this.options.videoFileTypes.join(","), this.vidInput.style.display = "none", t.appendChild(this.vidInput), this.docInput = document.createElement("input"), this.docInput.type = "file", this.docInput.accept = ".docx,application/vnd.openxmlformats-officedocument.wordprocessingml.document", this.docInput.style.display = "none", t.appendChild(this.docInput);
|
|
3020
3123
|
}
|
|
3021
3124
|
/** Theme options land as CSS variables on the document root rather than the editor
|
|
3022
3125
|
* shell, because dialogs, popups and floating context toolbars are appended to
|
|
@@ -3036,12 +3139,12 @@ let Hi = (j = class {
|
|
|
3036
3139
|
let e = 0, i = 0;
|
|
3037
3140
|
const s = (n) => {
|
|
3038
3141
|
e = n.clientY, i = this.ed.offsetHeight, n.preventDefault();
|
|
3039
|
-
const
|
|
3142
|
+
const r = (o) => {
|
|
3040
3143
|
this.ed.style.height = Math.max(120, i + o.clientY - e) + "px";
|
|
3041
|
-
},
|
|
3042
|
-
window.removeEventListener("mousemove",
|
|
3144
|
+
}, l = () => {
|
|
3145
|
+
window.removeEventListener("mousemove", r), window.removeEventListener("mouseup", l);
|
|
3043
3146
|
};
|
|
3044
|
-
window.addEventListener("mousemove",
|
|
3147
|
+
window.addEventListener("mousemove", r), window.addEventListener("mouseup", l);
|
|
3045
3148
|
};
|
|
3046
3149
|
t.addEventListener("mousedown", s), this.listeners.push(() => t.removeEventListener("mousedown", s));
|
|
3047
3150
|
}
|
|
@@ -3059,46 +3162,46 @@ let Hi = (j = class {
|
|
|
3059
3162
|
}), this.on(this.ed, "keydown", (t) => {
|
|
3060
3163
|
t.altKey && t.key === "0" && (t.preventDefault(), this.helpDlg()), (t.key === "Delete" || t.key === "Backspace") && this.phActive && (t.preventDefault(), this.removeImgPlaceholder()), (t.key === "Delete" || t.key === "Backspace") && this.vphActive && (t.preventDefault(), this.removeVphPlaceholder()), t.key === "`" && !t.ctrlKey && !t.metaKey && !t.altKey && this.tryCodeTyping(t), t.key === "Enter" && !t.shiftKey && !t.ctrlKey && !t.metaKey && !t.altKey && this.tryExitBlockquote(t);
|
|
3061
3164
|
}), this.on(this.ed, "paste", (t) => this.handlePaste(t)), this.on(this.ed, "drop", (t) => {
|
|
3062
|
-
var n,
|
|
3165
|
+
var n, r, l, o;
|
|
3063
3166
|
t.preventDefault();
|
|
3064
3167
|
const e = t.target, i = (n = e.closest) == null ? void 0 : n.call(e, ".img-ph:not(.vid-ph)");
|
|
3065
3168
|
if (i && this.ed.contains(i) && !this.options.readonly) {
|
|
3066
|
-
const
|
|
3067
|
-
|
|
3169
|
+
const a = Array.from(((r = t.dataTransfer) == null ? void 0 : r.files) || []).find((d) => d.type.startsWith("image/"));
|
|
3170
|
+
a && this.readImageFileInto(a, i);
|
|
3068
3171
|
return;
|
|
3069
3172
|
}
|
|
3070
|
-
const s = (
|
|
3173
|
+
const s = (l = e.closest) == null ? void 0 : l.call(e, ".vid-ph");
|
|
3071
3174
|
if (s && this.ed.contains(s) && !this.options.readonly) {
|
|
3072
|
-
const
|
|
3073
|
-
|
|
3175
|
+
const a = Array.from(((o = t.dataTransfer) == null ? void 0 : o.files) || []).find((d) => d.type.startsWith("video/"));
|
|
3176
|
+
a && this.readVideoFileInto(a, s);
|
|
3074
3177
|
}
|
|
3075
3178
|
}), this.on(this.ed, "dragover", (t) => t.preventDefault()), this.on(this.ed, "mousedown", (t) => {
|
|
3076
|
-
var d,
|
|
3179
|
+
var d, p, m, b, y, g, x;
|
|
3077
3180
|
const e = t.target, i = (d = e.closest) == null ? void 0 : d.call(e, "table");
|
|
3078
3181
|
i && this.ed.contains(i) ? this.selectTableForResize(i) : this.clearTableHandles();
|
|
3079
|
-
const s = (
|
|
3182
|
+
const s = (p = e.closest) == null ? void 0 : p.call(e, ".img-ph:not(.vid-ph)");
|
|
3080
3183
|
s && this.ed.contains(s) && !this.options.readonly ? (t.preventDefault(), this.ed.focus(), this.selectImgPlaceholder(s)) : this.clearImgPlaceholderSel();
|
|
3081
3184
|
const n = (m = e.closest) == null ? void 0 : m.call(e, ".vid-ph");
|
|
3082
3185
|
n && this.ed.contains(n) && !this.options.readonly ? (t.preventDefault(), this.ed.focus(), this.selectVphPlaceholder(n)) : this.clearVphPlaceholderSel();
|
|
3083
|
-
const
|
|
3084
|
-
|
|
3085
|
-
const
|
|
3086
|
-
|
|
3186
|
+
const r = (b = e.closest) == null ? void 0 : b.call(e, ".tpl");
|
|
3187
|
+
r && this.ed.contains(r) && !this.options.readonly ? this.selectTemplate(r) : this.clearTplSel();
|
|
3188
|
+
const l = (y = e.closest) == null ? void 0 : y.call(e, "pre.code-block");
|
|
3189
|
+
l && this.ed.contains(l) && !this.options.readonly ? (t.preventDefault(), this.selectCodeEl(l)) : this.clearCodeSel();
|
|
3087
3190
|
const o = (g = e.closest) == null ? void 0 : g.call(e, "img");
|
|
3088
3191
|
o && this.ed.contains(o) && !this.options.readonly ? (t.preventDefault(), this.selectImage(o)) : this.clearImageHandles();
|
|
3089
|
-
const
|
|
3090
|
-
|
|
3192
|
+
const a = (x = e.closest) == null ? void 0 : x.call(e, "video, .video-embed");
|
|
3193
|
+
a && this.ed.contains(a) && !this.options.readonly ? (t.preventDefault(), this.selectVideo(a)) : this.clearVidHandles();
|
|
3091
3194
|
}), this.on(this.ed, "mouseover", (t) => {
|
|
3092
3195
|
var i, s;
|
|
3093
3196
|
if (this.options.readonly) return;
|
|
3094
3197
|
const e = (s = (i = t.target).closest) == null ? void 0 : s.call(i, "img");
|
|
3095
3198
|
e && this.ed.contains(e) && (this.cancelImgHide(), this.selectImage(e));
|
|
3096
3199
|
}), this.on(this.ed, "mouseout", (t) => {
|
|
3097
|
-
var s, n,
|
|
3200
|
+
var s, n, r, l;
|
|
3098
3201
|
const e = (n = (s = t.target).closest) == null ? void 0 : n.call(s, "img");
|
|
3099
3202
|
if (!e) return;
|
|
3100
3203
|
const i = t.relatedTarget;
|
|
3101
|
-
i && ((
|
|
3204
|
+
i && ((r = this.imgCtx) != null && r.contains(i) || this.imgHandles.some((o) => o.contains(i)) || ((l = i.closest) == null ? void 0 : l.call(i, "img")) === e) || this.scheduleImgHide();
|
|
3102
3205
|
}), this.on(this.ed, "scroll", () => {
|
|
3103
3206
|
this.positionTableHandles(), this.positionImageHandles(), this.positionImgPhCtx(), this.positionTplCtx(), this.positionVphCtx(), this.positionVidCtx(), this.positionCodeCtx();
|
|
3104
3207
|
}), this.onWin(
|
|
@@ -3126,11 +3229,7 @@ let Hi = (j = class {
|
|
|
3126
3229
|
}
|
|
3127
3230
|
const i = new FileReader();
|
|
3128
3231
|
i.onload = () => {
|
|
3129
|
-
this.restoreSel(),
|
|
3130
|
-
"insertHTML",
|
|
3131
|
-
!1,
|
|
3132
|
-
`<img src="${i.result}" title="${t.name.replace(/"/g, "")}" alt="">`
|
|
3133
|
-
), this.onChange();
|
|
3232
|
+
this.restoreSel(), this.insertImageHTML(i.result, t.name.replace(/"/g, "")), this.onChange();
|
|
3134
3233
|
}, i.readAsDataURL(t);
|
|
3135
3234
|
}), this.on(this.vidInput, "change", () => {
|
|
3136
3235
|
var s;
|
|
@@ -3184,33 +3283,41 @@ let Hi = (j = class {
|
|
|
3184
3283
|
* content with no strongly-directional character anywhere falls back to the
|
|
3185
3284
|
* editor's current direction. */
|
|
3186
3285
|
getContentForEmail() {
|
|
3187
|
-
const t = (l,
|
|
3188
|
-
const
|
|
3189
|
-
l.setAttribute("style",
|
|
3286
|
+
const t = (l, o) => {
|
|
3287
|
+
const a = (l.getAttribute("style") || "").trim();
|
|
3288
|
+
l.setAttribute("style", a ? a.replace(/;?$/, "; ") + o : o);
|
|
3190
3289
|
}, e = document.createElement("div");
|
|
3191
3290
|
e.innerHTML = this.ed.innerHTML;
|
|
3192
3291
|
let i = null;
|
|
3193
3292
|
e.querySelectorAll("[dir]").forEach((l) => {
|
|
3194
|
-
const
|
|
3195
|
-
if (
|
|
3196
|
-
const
|
|
3197
|
-
i || (i =
|
|
3198
|
-
}), e.querySelectorAll(
|
|
3199
|
-
const
|
|
3200
|
-
if (
|
|
3201
|
-
const
|
|
3202
|
-
if (!
|
|
3203
|
-
i || (i =
|
|
3204
|
-
const
|
|
3205
|
-
t(l,
|
|
3293
|
+
const o = (l.getAttribute("dir") || "").toLowerCase();
|
|
3294
|
+
if (o !== "rtl" && o !== "ltr") return;
|
|
3295
|
+
const a = o;
|
|
3296
|
+
i || (i = a), /text-align\s*:/i.test(l.getAttribute("style") || "") || t(l, `text-align:${a === "rtl" ? "right" : "left"}`);
|
|
3297
|
+
}), e.querySelectorAll(_i).forEach((l) => {
|
|
3298
|
+
const o = (l.getAttribute("dir") || "").toLowerCase();
|
|
3299
|
+
if (o === "rtl" || o === "ltr") return;
|
|
3300
|
+
const a = $i(ge(l));
|
|
3301
|
+
if (!a) return;
|
|
3302
|
+
i || (i = a), l.setAttribute("dir", a);
|
|
3303
|
+
const d = /text-align\s*:/i.test(l.getAttribute("style") || "");
|
|
3304
|
+
t(l, d ? `direction:${a}` : `direction:${a};text-align:${a === "rtl" ? "right" : "left"}`);
|
|
3305
|
+
});
|
|
3306
|
+
const s = this.ed.querySelectorAll("img");
|
|
3307
|
+
e.querySelectorAll("img").forEach((l, o) => {
|
|
3308
|
+
if (l.closest(".tpl-media")) return;
|
|
3309
|
+
const a = s[o], d = Math.round((a == null ? void 0 : a.getBoundingClientRect().width) || 0);
|
|
3310
|
+
d > 0 && !l.getAttribute("width") && l.setAttribute("width", String(d));
|
|
3311
|
+
const p = l.getAttribute("style") || "";
|
|
3312
|
+
d > 0 && !/(^|;)\s*width\s*:/i.test(p) && t(l, `width:${d}px`), /max-width\s*:/i.test(l.getAttribute("style") || "") || t(l, "max-width:100%"), /(^|;)\s*height\s*:/i.test(l.getAttribute("style") || "") || t(l, "height:auto");
|
|
3206
3313
|
});
|
|
3207
|
-
const
|
|
3314
|
+
const n = i || this.ed.getAttribute("dir") || this.dir();
|
|
3208
3315
|
return e.querySelectorAll("table:not([dir])").forEach((l) => {
|
|
3209
|
-
l.setAttribute("dir",
|
|
3210
|
-
}), `<div dir="${
|
|
3316
|
+
l.setAttribute("dir", n), /direction\s*:/i.test(l.getAttribute("style") || "") || t(l, `direction:${n}`);
|
|
3317
|
+
}), `<div dir="${n}" style="direction:${n};text-align:${n === "rtl" ? "right" : "left"}">${e.innerHTML}</div>`;
|
|
3211
3318
|
}
|
|
3212
3319
|
setContent(t) {
|
|
3213
|
-
this.ed.innerHTML = t || "<p><br></p>", this.refreshState(), this.clearTableHandles(), this.clearImageHandles(), this.clearImgPlaceholderSel(), this.clearTplSel(), this.clearVphPlaceholderSel(), this.clearVidHandles(), this.clearCodeSel(), this.clearSelToolbar(), this.onChange();
|
|
3320
|
+
this.ed.innerHTML = t || "<p><br></p>", this.refreshState(), this.clearTableHandles(), this.clearImageHandles(), this.clearImgPlaceholderSel(), this.clearTplSel(), this.clearVphPlaceholderSel(), this.clearVidHandles(), this.clearCodeSel(), this.clearSelToolbar(), this.onChange(), this.stampExistingImages();
|
|
3214
3321
|
}
|
|
3215
3322
|
insertContent(t) {
|
|
3216
3323
|
this.restoreSel(), document.execCommand("insertHTML", !1, t), this.saveSel(), this.refreshState(), this.onChange();
|
|
@@ -3222,7 +3329,7 @@ let Hi = (j = class {
|
|
|
3222
3329
|
this.ed.focus();
|
|
3223
3330
|
}
|
|
3224
3331
|
async importWordFile(t) {
|
|
3225
|
-
const e = await
|
|
3332
|
+
const e = await Ri(t);
|
|
3226
3333
|
this.recordRevision(), this.setContent(e), this.recordRevision();
|
|
3227
3334
|
}
|
|
3228
3335
|
restoreDraft() {
|
|
@@ -3281,8 +3388,8 @@ let Hi = (j = class {
|
|
|
3281
3388
|
t.preventDefault();
|
|
3282
3389
|
const n = document.createElement("p");
|
|
3283
3390
|
n.appendChild(document.createElement("br")), s.after(n), i.remove(), s.firstElementChild || s.remove();
|
|
3284
|
-
const
|
|
3285
|
-
|
|
3391
|
+
const r = document.createRange();
|
|
3392
|
+
r.setStart(n, 0), r.collapse(!0), e.removeAllRanges(), e.addRange(r), this.saveSel(), this.onChange();
|
|
3286
3393
|
}
|
|
3287
3394
|
selectedBlocks() {
|
|
3288
3395
|
const t = window.getSelection();
|
|
@@ -3332,30 +3439,30 @@ let Hi = (j = class {
|
|
|
3332
3439
|
s.className = "revprev";
|
|
3333
3440
|
const n = document.createElement("button");
|
|
3334
3441
|
n.type = "button", n.className = "revrestore", n.textContent = this.t("restore");
|
|
3335
|
-
let
|
|
3336
|
-
const
|
|
3442
|
+
let r = this.revisions.length - 1;
|
|
3443
|
+
const l = new Intl.DateTimeFormat(this.lang === "ar" ? "ar-AE" : "en-GB", {
|
|
3337
3444
|
year: "numeric",
|
|
3338
3445
|
month: "short",
|
|
3339
3446
|
day: "numeric",
|
|
3340
3447
|
hour: "2-digit",
|
|
3341
3448
|
minute: "2-digit",
|
|
3342
3449
|
second: "2-digit"
|
|
3343
|
-
}), o = {},
|
|
3344
|
-
|
|
3450
|
+
}), o = {}, a = (d) => {
|
|
3451
|
+
r = d, this.revisions.forEach((p, m) => {
|
|
3345
3452
|
var b;
|
|
3346
3453
|
return (b = o[m]) == null ? void 0 : b.classList.toggle("on", m === d);
|
|
3347
3454
|
}), s.innerHTML = this.revisions[d].html, n.disabled = d === this.revisions.length - 1;
|
|
3348
3455
|
};
|
|
3349
3456
|
for (let d = this.revisions.length - 1; d >= 0; d--) {
|
|
3350
|
-
const
|
|
3457
|
+
const p = this.revisions[d], m = document.createElement("button");
|
|
3351
3458
|
m.type = "button";
|
|
3352
|
-
const b = (new DOMParser().parseFromString(
|
|
3353
|
-
m.innerHTML = `<span>${g ? this.t("currentver") :
|
|
3459
|
+
const b = (new DOMParser().parseFromString(p.html, "text/html").body.textContent || "").trim(), y = b ? b.split(/\s+/).length : 0, g = d === this.revisions.length - 1;
|
|
3460
|
+
m.innerHTML = `<span>${g ? this.t("currentver") : l.format(new Date(p.time))}</span><span class="wc">${y} ${this.t("words")}</span>`, m.addEventListener("click", () => a(d)), o[d] = m, i.appendChild(m);
|
|
3354
3461
|
}
|
|
3355
3462
|
i.append(n), n.addEventListener("click", () => {
|
|
3356
|
-
const d = this.revisions[
|
|
3463
|
+
const d = this.revisions[r];
|
|
3357
3464
|
d && (this.recordRevision(), this.setContent(d.html), this.recordRevision(), this.closeDlg());
|
|
3358
|
-
}), e.append(i, s), t.appendChild(e),
|
|
3465
|
+
}), e.append(i, s), t.appendChild(e), a(r);
|
|
3359
3466
|
});
|
|
3360
3467
|
}
|
|
3361
3468
|
/* ---------------------------------------------------------- popups / menus */
|
|
@@ -3389,13 +3496,13 @@ let Hi = (j = class {
|
|
|
3389
3496
|
const i = e.getBoundingClientRect(), s = e.closest(".pop");
|
|
3390
3497
|
this.closeSubFrom(s ? this.subLevelOf(s) : 0);
|
|
3391
3498
|
const n = document.createElement("div");
|
|
3392
|
-
n.className = "pop sub", n.dir = this.dir(), t.subBuild ? t.subBuild(n) : t.sub && this.menuItems(n, t.sub), n.addEventListener("mousedown", (
|
|
3393
|
-
|
|
3499
|
+
n.className = "pop sub", n.dir = this.dir(), t.subBuild ? t.subBuild(n) : t.sub && this.menuItems(n, t.sub), n.addEventListener("mousedown", (a) => {
|
|
3500
|
+
a.target.tagName !== "INPUT" && a.preventDefault();
|
|
3394
3501
|
}), document.body.appendChild(n);
|
|
3395
|
-
let
|
|
3396
|
-
|
|
3502
|
+
let l = this.dir() === "rtl" ? i.left - n.offsetWidth + 2 : i.right - 2;
|
|
3503
|
+
l = Math.max(8, Math.min(l + scrollX, scrollX + innerWidth - n.offsetWidth - 8));
|
|
3397
3504
|
let o = i.top + scrollY - 6;
|
|
3398
|
-
o = Math.max(8 + scrollY, Math.min(o, scrollY + innerHeight - n.offsetHeight - 8)), n.style.left =
|
|
3505
|
+
o = Math.max(8 + scrollY, Math.min(o, scrollY + innerHeight - n.offsetHeight - 8)), n.style.left = l + "px", n.style.top = o + "px", this.subStack.push(n);
|
|
3399
3506
|
}
|
|
3400
3507
|
popup(t, e, i) {
|
|
3401
3508
|
if (this.openPop && this.popAnchor === t) {
|
|
@@ -3407,11 +3514,11 @@ let Hi = (j = class {
|
|
|
3407
3514
|
s.className = "pop" + (i ? " " + i : ""), s.dir = this.dir(), e(s), document.body.appendChild(s);
|
|
3408
3515
|
const n = t.getBoundingClientRect();
|
|
3409
3516
|
s.style.minWidth = Math.max(160, Math.round(n.width)) + "px";
|
|
3410
|
-
let
|
|
3411
|
-
|
|
3517
|
+
let r = n.bottom + scrollY + 2;
|
|
3518
|
+
r = Math.max(8 + scrollY, Math.min(r, scrollY + innerHeight - s.offsetHeight - 8)), s.style.top = r + "px";
|
|
3412
3519
|
let o = this.dir() === "rtl" ? n.right - s.offsetWidth : n.left;
|
|
3413
|
-
o = Math.max(8, Math.min(o + scrollX, scrollX + innerWidth - s.offsetWidth - 8)), s.style.left = o + "px", s.addEventListener("mousedown", (
|
|
3414
|
-
|
|
3520
|
+
o = Math.max(8, Math.min(o + scrollX, scrollX + innerWidth - s.offsetWidth - 8)), s.style.left = o + "px", s.addEventListener("mousedown", (a) => {
|
|
3521
|
+
a.target.tagName !== "INPUT" && a.preventDefault();
|
|
3415
3522
|
}), this.openPop = s, this.popAnchor = t, t.classList.add("open");
|
|
3416
3523
|
}
|
|
3417
3524
|
menuItems(t, e) {
|
|
@@ -3424,18 +3531,18 @@ let Hi = (j = class {
|
|
|
3424
3531
|
n.className = "mi" + (i.on ? " on" : ""), n.innerHTML = `<span class="ic">${i.icon || ""}</span><span class="prev" ${i.previewStyle ? `style="${i.previewStyle}"` : ""}>${i.label}</span>${i.shortcut ? `<span class="sc">${i.shortcut}</span>` : ""}${s ? `<span class="subarrow">${h.chev}</span>` : ""}`, n.addEventListener("click", () => {
|
|
3425
3532
|
i.action && (this.closePop(), i.action());
|
|
3426
3533
|
}), n.addEventListener("mouseenter", () => {
|
|
3427
|
-
var
|
|
3428
|
-
s ? this.openSubFor(i, n) : this.closeSubFrom(this.subLevelOf(t)), (
|
|
3534
|
+
var r;
|
|
3535
|
+
s ? this.openSubFor(i, n) : this.closeSubFrom(this.subLevelOf(t)), (r = i.hover) == null || r.call(i, !0);
|
|
3429
3536
|
}), n.addEventListener("mouseleave", () => {
|
|
3430
|
-
var
|
|
3431
|
-
return (
|
|
3537
|
+
var r;
|
|
3538
|
+
return (r = i.hover) == null ? void 0 : r.call(i, !1);
|
|
3432
3539
|
}), t.appendChild(n);
|
|
3433
3540
|
});
|
|
3434
3541
|
}
|
|
3435
3542
|
/* ---------------------------------------------------------- toolbar builders */
|
|
3436
3543
|
tbtn(t, e, i, s) {
|
|
3437
3544
|
const n = document.createElement("button");
|
|
3438
|
-
return n.className = "tbtn", n.type = "button", n.title = e, n.innerHTML = t, s && (n.dataset.id = s), n.addEventListener("mousedown", (
|
|
3545
|
+
return n.className = "tbtn", n.type = "button", n.title = e, n.innerHTML = t, s && (n.dataset.id = s), n.addEventListener("mousedown", (r) => r.preventDefault()), n.addEventListener("click", i), n;
|
|
3439
3546
|
}
|
|
3440
3547
|
/** Font-size increase / decrease step button. */
|
|
3441
3548
|
stepBtn(t) {
|
|
@@ -3451,10 +3558,10 @@ let Hi = (j = class {
|
|
|
3451
3558
|
colorChips() {
|
|
3452
3559
|
const t = (s) => {
|
|
3453
3560
|
const n = document.createElement("button");
|
|
3454
|
-
return n.type = "button", n.className = "cchip", n.title = s, n.addEventListener("mousedown", (
|
|
3455
|
-
|
|
3561
|
+
return n.type = "button", n.className = "cchip", n.title = s, n.addEventListener("mousedown", (r) => {
|
|
3562
|
+
r.preventDefault(), this.saveSel();
|
|
3456
3563
|
}), n;
|
|
3457
|
-
}, e =
|
|
3564
|
+
}, e = ni.map((s) => {
|
|
3458
3565
|
const n = t(this.t("forecolor"));
|
|
3459
3566
|
return n.style.background = s, n.addEventListener("click", () => this.applyColor("fore", s)), n;
|
|
3460
3567
|
}), i = t(this.t("forecolor"));
|
|
@@ -3468,20 +3575,20 @@ let Hi = (j = class {
|
|
|
3468
3575
|
}
|
|
3469
3576
|
tsel(t, e, i, s) {
|
|
3470
3577
|
const n = document.createElement("button");
|
|
3471
|
-
return n.className = "tsel " + t, n.type = "button", n.dataset.id = e, n.innerHTML = `<span class="lbl empty">${i || ""}</span>${h.chev}`, n.addEventListener("mousedown", (
|
|
3472
|
-
|
|
3578
|
+
return n.className = "tsel " + t, n.type = "button", n.dataset.id = e, n.innerHTML = `<span class="lbl empty">${i || ""}</span>${h.chev}`, n.addEventListener("mousedown", (r) => {
|
|
3579
|
+
r.preventDefault(), this.saveSel();
|
|
3473
3580
|
}), n.addEventListener("click", () => s(n)), n;
|
|
3474
3581
|
}
|
|
3475
3582
|
setListStyle(t, e) {
|
|
3476
|
-
var n,
|
|
3583
|
+
var n, r;
|
|
3477
3584
|
this.restoreSel();
|
|
3478
3585
|
const i = window.getSelection();
|
|
3479
3586
|
if (!i) return;
|
|
3480
3587
|
let s = (n = this.closestBlock(i.anchorNode)) == null ? void 0 : n.closest(t);
|
|
3481
|
-
s || (this.exec(t === "ol" ? "insertOrderedList" : "insertUnorderedList"), s = (
|
|
3588
|
+
s || (this.exec(t === "ol" ? "insertOrderedList" : "insertUnorderedList"), s = (r = this.closestBlock(i.anchorNode)) == null ? void 0 : r.closest(t)), s && (s.style.listStyleType = e), this.saveSel(), this.onChange();
|
|
3482
3589
|
}
|
|
3483
3590
|
listMenu(t, e) {
|
|
3484
|
-
var
|
|
3591
|
+
var a;
|
|
3485
3592
|
const i = e === "ol" ? "insertOrderedList" : "insertUnorderedList", s = e === "ol" ? [
|
|
3486
3593
|
["lower-alpha", h.ol_alpha],
|
|
3487
3594
|
["lower-roman", h.ol_roman],
|
|
@@ -3490,7 +3597,7 @@ let Hi = (j = class {
|
|
|
3490
3597
|
] : [
|
|
3491
3598
|
["circle", h.ul_circle],
|
|
3492
3599
|
["square", h.ul_square]
|
|
3493
|
-
], n = this.tArr(e === "ol" ? "liststyles_ol" : "liststyles_ul").slice(1),
|
|
3600
|
+
], n = this.tArr(e === "ol" ? "liststyles_ol" : "liststyles_ul").slice(1), r = window.getSelection(), l = r ? (a = this.closestBlock(r.anchorNode)) == null ? void 0 : a.closest(e) : null, o = l ? l.style.listStyleType : "";
|
|
3494
3601
|
this.popup(t, (d) => {
|
|
3495
3602
|
this.menuItems(d, [
|
|
3496
3603
|
{
|
|
@@ -3500,13 +3607,13 @@ let Hi = (j = class {
|
|
|
3500
3607
|
action: () => this.exec(i)
|
|
3501
3608
|
}
|
|
3502
3609
|
]), d.insertAdjacentHTML("beforeend", '<div class="sep"></div>');
|
|
3503
|
-
const
|
|
3504
|
-
|
|
3610
|
+
const p = document.createElement("div");
|
|
3611
|
+
p.className = "mi-grid", s.forEach(([m, b], y) => {
|
|
3505
3612
|
const g = document.createElement("button");
|
|
3506
3613
|
g.className = "mi" + (o === m ? " on" : ""), g.innerHTML = `<span class="ic">${b}</span><span class="prev">${n[y]}</span>`, g.addEventListener("click", () => {
|
|
3507
3614
|
this.closePop(), this.setListStyle(e, m);
|
|
3508
|
-
}),
|
|
3509
|
-
}), d.appendChild(
|
|
3615
|
+
}), p.appendChild(g);
|
|
3616
|
+
}), d.appendChild(p);
|
|
3510
3617
|
});
|
|
3511
3618
|
}
|
|
3512
3619
|
/** Shared color-picker popup body — swatch grid plus the current-color /
|
|
@@ -3514,26 +3621,26 @@ let Hi = (j = class {
|
|
|
3514
3621
|
* table cell-background menu all show the identical popup. */
|
|
3515
3622
|
buildPaletteInto(t, e, i) {
|
|
3516
3623
|
const s = document.createElement("div");
|
|
3517
|
-
s.className = "cpal",
|
|
3624
|
+
s.className = "cpal", ri.forEach((p) => {
|
|
3518
3625
|
const m = document.createElement("button");
|
|
3519
|
-
m.type = "button", m.style.background =
|
|
3520
|
-
this.closePop(), i(
|
|
3626
|
+
m.type = "button", m.style.background = p, m.title = p, m.addEventListener("click", () => {
|
|
3627
|
+
this.closePop(), i(p);
|
|
3521
3628
|
}), s.appendChild(m);
|
|
3522
3629
|
}), t.appendChild(s), t.insertAdjacentHTML("beforeend", '<div class="sep"></div>');
|
|
3523
3630
|
const n = document.createElement("div");
|
|
3524
3631
|
n.className = "cfoot";
|
|
3525
|
-
const
|
|
3526
|
-
|
|
3632
|
+
const r = /^#[0-9a-f]{6}$/i.test(e) ? e : "#000000", l = document.createElement("div");
|
|
3633
|
+
l.className = "cswatch cur", l.title = this.t("currentcolor"), l.style.background = r, l.innerHTML = h.check;
|
|
3527
3634
|
const o = document.createElement("button");
|
|
3528
3635
|
o.type = "button", o.className = "cswatch nocolor", o.title = this.t("removecolor"), o.addEventListener("click", () => {
|
|
3529
3636
|
this.closePop(), i(null);
|
|
3530
3637
|
});
|
|
3531
|
-
const
|
|
3532
|
-
|
|
3638
|
+
const a = document.createElement("label");
|
|
3639
|
+
a.className = "cswatch cwheel", a.title = this.t("customcolor"), a.innerHTML = h.palette;
|
|
3533
3640
|
const d = document.createElement("input");
|
|
3534
|
-
d.type = "color", d.value =
|
|
3641
|
+
d.type = "color", d.value = r, d.addEventListener("change", () => {
|
|
3535
3642
|
this.closePop(), i(d.value);
|
|
3536
|
-
}),
|
|
3643
|
+
}), a.appendChild(d), n.append(l, o, a), t.appendChild(n);
|
|
3537
3644
|
}
|
|
3538
3645
|
colorMenu(t, e) {
|
|
3539
3646
|
this.popup(
|
|
@@ -3563,7 +3670,7 @@ let Hi = (j = class {
|
|
|
3563
3670
|
this.popup(t, (e) => this.menuItems(e, this.fontItems()));
|
|
3564
3671
|
}
|
|
3565
3672
|
sizeItems() {
|
|
3566
|
-
return
|
|
3673
|
+
return ei.map((t) => ({
|
|
3567
3674
|
label: t,
|
|
3568
3675
|
on: this.currentSize() === t,
|
|
3569
3676
|
action: () => this.applyFontSize(t)
|
|
@@ -3579,19 +3686,19 @@ let Hi = (j = class {
|
|
|
3579
3686
|
const t = window.getSelection();
|
|
3580
3687
|
if (!t) return;
|
|
3581
3688
|
if (!t.rangeCount) {
|
|
3582
|
-
const
|
|
3583
|
-
|
|
3689
|
+
const r = document.createRange();
|
|
3690
|
+
r.selectNodeContents(this.ed), r.collapse(!0), t.addRange(r);
|
|
3584
3691
|
}
|
|
3585
3692
|
if (!t.isCollapsed) return;
|
|
3586
3693
|
const e = t.getRangeAt(0), i = e.startContainer;
|
|
3587
3694
|
if (i.nodeType === 3) {
|
|
3588
|
-
const
|
|
3589
|
-
let
|
|
3590
|
-
for (;
|
|
3591
|
-
for (; o <
|
|
3592
|
-
if (o >
|
|
3593
|
-
const
|
|
3594
|
-
|
|
3695
|
+
const r = i.data;
|
|
3696
|
+
let l = e.startOffset, o = e.startOffset;
|
|
3697
|
+
for (; l > 0 && /\S/.test(r[l - 1]); ) l--;
|
|
3698
|
+
for (; o < r.length && /\S/.test(r[o]); ) o++;
|
|
3699
|
+
if (o > l) {
|
|
3700
|
+
const a = document.createRange();
|
|
3701
|
+
a.setStart(i, l), a.setEnd(i, o), t.removeAllRanges(), t.addRange(a), this.savedRange = a.cloneRange();
|
|
3595
3702
|
return;
|
|
3596
3703
|
}
|
|
3597
3704
|
}
|
|
@@ -3616,7 +3723,7 @@ let Hi = (j = class {
|
|
|
3616
3723
|
this.saveSel(), this.refreshState(), this.onChange();
|
|
3617
3724
|
}
|
|
3618
3725
|
stepFontSize(t) {
|
|
3619
|
-
const e = parseInt(this.currentSize(), 10) || 14, i = Math.min(
|
|
3726
|
+
const e = parseInt(this.currentSize(), 10) || 14, i = Math.min(si, Math.max(ii, e + t));
|
|
3620
3727
|
i !== e && this.applyFontSize(i + "px");
|
|
3621
3728
|
}
|
|
3622
3729
|
/* ------------------------------------------------ case / spacing / link */
|
|
@@ -3625,14 +3732,14 @@ let Hi = (j = class {
|
|
|
3625
3732
|
const e = window.getSelection();
|
|
3626
3733
|
if (!e || !e.rangeCount || e.isCollapsed) return;
|
|
3627
3734
|
const i = e.getRangeAt(0), s = document.createTreeWalker(this.ed, NodeFilter.SHOW_TEXT), n = [];
|
|
3628
|
-
let
|
|
3629
|
-
for (;
|
|
3630
|
-
n.forEach((
|
|
3631
|
-
const o =
|
|
3632
|
-
if (
|
|
3633
|
-
const d =
|
|
3634
|
-
let
|
|
3635
|
-
t === "lower" ?
|
|
3735
|
+
let r;
|
|
3736
|
+
for (; r = s.nextNode(); ) i.intersectsNode(r) && n.push(r);
|
|
3737
|
+
n.forEach((l) => {
|
|
3738
|
+
const o = l === i.startContainer ? i.startOffset : 0, a = l === i.endContainer ? i.endOffset : l.data.length;
|
|
3739
|
+
if (a <= o) return;
|
|
3740
|
+
const d = l.data.slice(o, a);
|
|
3741
|
+
let p = d;
|
|
3742
|
+
t === "lower" ? p = d.toLowerCase() : t === "upper" ? p = d.toUpperCase() : p = d.replace(/(^|\s)(\S)/g, (m, b, y) => b + y.toUpperCase()), l.replaceData(o, a - o, p);
|
|
3636
3743
|
}), this.saveSel(), this.refreshState(), this.onChange();
|
|
3637
3744
|
}
|
|
3638
3745
|
caseItems() {
|
|
@@ -3668,13 +3775,13 @@ let Hi = (j = class {
|
|
|
3668
3775
|
];
|
|
3669
3776
|
}
|
|
3670
3777
|
lineHeightMenu(t) {
|
|
3671
|
-
this.popup(t, (e) => this.menuItems(e, this.blockStyleItems("lineHeight",
|
|
3778
|
+
this.popup(t, (e) => this.menuItems(e, this.blockStyleItems("lineHeight", te)));
|
|
3672
3779
|
}
|
|
3673
3780
|
wordSpacingMenu(t) {
|
|
3674
|
-
this.popup(t, (e) => this.menuItems(e, this.blockStyleItems("wordSpacing",
|
|
3781
|
+
this.popup(t, (e) => this.menuItems(e, this.blockStyleItems("wordSpacing", ee)));
|
|
3675
3782
|
}
|
|
3676
3783
|
letterSpacingMenu(t) {
|
|
3677
|
-
this.popup(t, (e) => this.menuItems(e, this.blockStyleItems("letterSpacing",
|
|
3784
|
+
this.popup(t, (e) => this.menuItems(e, this.blockStyleItems("letterSpacing", ie)));
|
|
3678
3785
|
}
|
|
3679
3786
|
closestAnchor() {
|
|
3680
3787
|
const t = window.getSelection();
|
|
@@ -3720,14 +3827,14 @@ let Hi = (j = class {
|
|
|
3720
3827
|
(s) => {
|
|
3721
3828
|
const n = document.createElement("div");
|
|
3722
3829
|
n.style.cssText = "display:flex;align-items:center;gap:10px;margin:10px 0;min-width:360px";
|
|
3723
|
-
const
|
|
3724
|
-
|
|
3830
|
+
const r = document.createElement("span");
|
|
3831
|
+
r.style.cssText = "width:60px;color:#556;flex:none", r.textContent = this.t("linkurl"), e = document.createElement("input"), e.type = "url", e.placeholder = "https://", e.style.cssText = "flex:1;border:1px solid #cfd6df;border-radius:6px;padding:7px 9px;font:14px inherit", e.value = (t == null ? void 0 : t.getAttribute("href")) || "", n.append(r, e), s.appendChild(n), setTimeout(() => e.focus(), 0);
|
|
3725
3832
|
},
|
|
3726
3833
|
i
|
|
3727
3834
|
);
|
|
3728
3835
|
}
|
|
3729
3836
|
blockItems() {
|
|
3730
|
-
return
|
|
3837
|
+
return ne.map(([t]) => ({
|
|
3731
3838
|
label: this.blockLabel(t),
|
|
3732
3839
|
previewStyle: t.startsWith("h") ? `font-weight:700;font-size:${22 - 2 * +t[1]}px` : t === "pre" ? "font-family:monospace" : "",
|
|
3733
3840
|
on: this.currentBlock() === t,
|
|
@@ -3764,15 +3871,15 @@ let Hi = (j = class {
|
|
|
3764
3871
|
s.className = "tgrid";
|
|
3765
3872
|
const n = document.createElement("div");
|
|
3766
3873
|
n.className = "tgridlbl", n.textContent = "1 × 1";
|
|
3767
|
-
const
|
|
3768
|
-
for (let
|
|
3874
|
+
const r = [];
|
|
3875
|
+
for (let l = 0; l < 8; l++)
|
|
3769
3876
|
for (let o = 0; o < 10; o++) {
|
|
3770
|
-
const
|
|
3771
|
-
|
|
3772
|
-
|
|
3773
|
-
}),
|
|
3774
|
-
this.closePop(), this.insertTable(
|
|
3775
|
-
}),
|
|
3877
|
+
const a = document.createElement("span");
|
|
3878
|
+
a.dataset.r = String(l), a.dataset.c = String(o), a.addEventListener("mouseenter", () => {
|
|
3879
|
+
r.forEach((d) => d.classList.toggle("hot", +d.dataset.r <= l && +d.dataset.c <= o)), n.textContent = o + 1 + " × " + (l + 1);
|
|
3880
|
+
}), a.addEventListener("click", () => {
|
|
3881
|
+
this.closePop(), this.insertTable(l + 1, o + 1), e == null || e();
|
|
3882
|
+
}), r.push(a), s.appendChild(a);
|
|
3776
3883
|
}
|
|
3777
3884
|
i.append(s, n), t.appendChild(i);
|
|
3778
3885
|
}
|
|
@@ -3857,17 +3964,17 @@ let Hi = (j = class {
|
|
|
3857
3964
|
}
|
|
3858
3965
|
buildToolbar() {
|
|
3859
3966
|
this.toolbar.innerHTML = "";
|
|
3860
|
-
const t = this.options.toolbar === !0 ?
|
|
3967
|
+
const t = this.options.toolbar === !0 ? Ke : this.options.toolbar, e = this.buildToolbarRegistry();
|
|
3861
3968
|
this.parseToolbarString(t).forEach((i) => {
|
|
3862
3969
|
const s = [];
|
|
3863
3970
|
i.forEach((n) => {
|
|
3864
|
-
const
|
|
3865
|
-
if (!
|
|
3971
|
+
const r = e[n];
|
|
3972
|
+
if (!r) {
|
|
3866
3973
|
console.warn(`FableEditor: unknown toolbar item "${n}"`);
|
|
3867
3974
|
return;
|
|
3868
3975
|
}
|
|
3869
|
-
const
|
|
3870
|
-
Array.isArray(
|
|
3976
|
+
const l = r();
|
|
3977
|
+
Array.isArray(l) ? s.push(...l) : s.push(l);
|
|
3871
3978
|
}), s.length && this.toolbar.appendChild(this.group(...s));
|
|
3872
3979
|
}), this.tbrMore = this.tbtn(h.more, this.t("more"), () => {
|
|
3873
3980
|
this.tbrExpanded = !this.tbrExpanded, this.updateToolbarOverflow();
|
|
@@ -3967,9 +4074,9 @@ let Hi = (j = class {
|
|
|
3967
4074
|
{ label: this.t("fontsize"), subBuild: (s) => this.menuItems(s, this.sizeItems()) },
|
|
3968
4075
|
{ label: this.t("blocks"), subBuild: (s) => this.menuItems(s, this.blockItems()) },
|
|
3969
4076
|
{ label: this.t("align"), subBuild: (s) => this.menuItems(s, this.alignItems()) },
|
|
3970
|
-
{ label: this.t("lineheight"), icon: h.lineheight, subBuild: (s) => this.menuItems(s, this.blockStyleItems("lineHeight",
|
|
3971
|
-
{ label: this.t("wordspacing"), icon: h.wordspacing, subBuild: (s) => this.menuItems(s, this.blockStyleItems("wordSpacing",
|
|
3972
|
-
{ label: this.t("letterspacing"), icon: h.letterspacing, subBuild: (s) => this.menuItems(s, this.blockStyleItems("letterSpacing",
|
|
4077
|
+
{ label: this.t("lineheight"), icon: h.lineheight, subBuild: (s) => this.menuItems(s, this.blockStyleItems("lineHeight", te)) },
|
|
4078
|
+
{ label: this.t("wordspacing"), icon: h.wordspacing, subBuild: (s) => this.menuItems(s, this.blockStyleItems("wordSpacing", ee)) },
|
|
4079
|
+
{ label: this.t("letterspacing"), icon: h.letterspacing, subBuild: (s) => this.menuItems(s, this.blockStyleItems("letterSpacing", ie)) },
|
|
3973
4080
|
"|",
|
|
3974
4081
|
{ label: this.t("forecolor"), icon: h.palette, subBuild: (s) => this.buildPaletteInto(s, this.foreColor, (n) => this.applyColor("fore", n)) },
|
|
3975
4082
|
{ label: this.t("backcolor"), icon: h.backcolor, subBuild: (s) => this.buildPaletteInto(s, this.backColor, (n) => this.applyColor("back", n)) },
|
|
@@ -4039,7 +4146,7 @@ let Hi = (j = class {
|
|
|
4039
4146
|
{ label: this.t("deltable"), icon: h.trash, action: () => this.tableOp("deltable") }
|
|
4040
4147
|
],
|
|
4041
4148
|
help: [this.mItem("helpttl", h.helpic, () => this.helpDlg(), "Alt+0")]
|
|
4042
|
-
}, e = this.options.menubar === !0 ?
|
|
4149
|
+
}, e = this.options.menubar === !0 ? Je : this.options.menubar, i = /* @__PURE__ */ new Set();
|
|
4043
4150
|
e.split(/\s+/).filter(Boolean).forEach((s) => {
|
|
4044
4151
|
if (i.has(s)) return;
|
|
4045
4152
|
if (i.add(s), !t[s]) {
|
|
@@ -4047,36 +4154,36 @@ let Hi = (j = class {
|
|
|
4047
4154
|
return;
|
|
4048
4155
|
}
|
|
4049
4156
|
const n = document.createElement("button");
|
|
4050
|
-
n.type = "button", n.textContent = this.t(s), n.dataset.menuKey = s, n.addEventListener("mousedown", (
|
|
4051
|
-
|
|
4052
|
-
}), n.addEventListener("click", () => this.popup(n, (
|
|
4157
|
+
n.type = "button", n.textContent = this.t(s), n.dataset.menuKey = s, n.addEventListener("mousedown", (r) => {
|
|
4158
|
+
r.preventDefault(), this.saveSel();
|
|
4159
|
+
}), n.addEventListener("click", () => this.popup(n, (r) => this.menuItems(r, t[s]))), this.menubar.appendChild(n);
|
|
4053
4160
|
});
|
|
4054
4161
|
}
|
|
4055
4162
|
/* ---------------------------------------------------------- table ops */
|
|
4056
4163
|
tableOp(t) {
|
|
4057
|
-
var o,
|
|
4164
|
+
var o, a, d;
|
|
4058
4165
|
this.restoreSel();
|
|
4059
4166
|
const e = window.getSelection();
|
|
4060
4167
|
if (!e) return;
|
|
4061
|
-
const i = ((o = this.closestBlock(e.anchorNode)) == null ? void 0 : o.closest("td,th")) || (e.anchorNode && e.anchorNode.nodeType === 1 ? (d = (
|
|
4168
|
+
const i = ((o = this.closestBlock(e.anchorNode)) == null ? void 0 : o.closest("td,th")) || (e.anchorNode && e.anchorNode.nodeType === 1 ? (d = (a = e.anchorNode).closest) == null ? void 0 : d.call(a, "td,th") : null);
|
|
4062
4169
|
if (!i) return;
|
|
4063
|
-
const s = i.parentElement, n = i.closest("table"),
|
|
4064
|
-
const
|
|
4170
|
+
const s = i.parentElement, n = i.closest("table"), r = Array.from(s.children).indexOf(i), l = () => {
|
|
4171
|
+
const p = s.cloneNode(!1);
|
|
4065
4172
|
return Array.from(s.children).forEach((m) => {
|
|
4066
4173
|
const b = document.createElement("td"), y = m.getAttribute("style");
|
|
4067
|
-
y && b.setAttribute("style", y), b.style.removeProperty("background-color"), b.innerHTML = "<br>",
|
|
4068
|
-
}),
|
|
4174
|
+
y && b.setAttribute("style", y), b.style.removeProperty("background-color"), b.innerHTML = "<br>", p.appendChild(b);
|
|
4175
|
+
}), p;
|
|
4069
4176
|
};
|
|
4070
|
-
if (t === "rowabove" && s.before(
|
|
4071
|
-
const
|
|
4072
|
-
s.remove(),
|
|
4177
|
+
if (t === "rowabove" && s.before(l()), t === "rowbelow" && s.after(l()), t === "delrow") {
|
|
4178
|
+
const p = s.parentElement;
|
|
4179
|
+
s.remove(), p.querySelector("tr") || n.remove();
|
|
4073
4180
|
}
|
|
4074
|
-
(t === "colbefore" || t === "colafter") && n.querySelectorAll("tr").forEach((
|
|
4075
|
-
const m =
|
|
4181
|
+
(t === "colbefore" || t === "colafter") && n.querySelectorAll("tr").forEach((p) => {
|
|
4182
|
+
const m = p.children[Math.min(r, p.children.length - 1)], b = document.createElement("td"), y = m.getAttribute("style");
|
|
4076
4183
|
y && b.setAttribute("style", y), b.style.removeProperty("width"), b.style.removeProperty("background-color"), b.innerHTML = "<br>", t === "colbefore" ? m.before(b) : m.after(b);
|
|
4077
|
-
}), t === "delcol" && (n.querySelectorAll("tr").forEach((
|
|
4184
|
+
}), t === "delcol" && (n.querySelectorAll("tr").forEach((p) => {
|
|
4078
4185
|
var m;
|
|
4079
|
-
return (m =
|
|
4186
|
+
return (m = p.children[r]) == null ? void 0 : m.remove();
|
|
4080
4187
|
}), n.querySelector("td,th") || n.remove()), t === "deltable" && n.remove(), this.onChange(), this.positionTableHandles();
|
|
4081
4188
|
}
|
|
4082
4189
|
/** Reorders the current row/column: 'rowup'/'rowdown' swap the caret's row with
|
|
@@ -4096,16 +4203,16 @@ let Hi = (j = class {
|
|
|
4096
4203
|
o && o.after(i);
|
|
4097
4204
|
}
|
|
4098
4205
|
t === "colleft" && n > 0 && s.querySelectorAll("tr").forEach((o) => {
|
|
4099
|
-
const
|
|
4100
|
-
|
|
4206
|
+
const a = o.children[n], d = o.children[n - 1];
|
|
4207
|
+
a && d && d.before(a);
|
|
4101
4208
|
}), t === "colright" && s.querySelectorAll("tr").forEach((o) => {
|
|
4102
|
-
const
|
|
4103
|
-
|
|
4209
|
+
const a = o.children[n], d = o.children[n + 1];
|
|
4210
|
+
a && d && d.after(a);
|
|
4104
4211
|
});
|
|
4105
|
-
const
|
|
4106
|
-
|
|
4107
|
-
const
|
|
4108
|
-
|
|
4212
|
+
const r = document.createRange();
|
|
4213
|
+
r.selectNodeContents(e), r.collapse(!0);
|
|
4214
|
+
const l = window.getSelection();
|
|
4215
|
+
l && (l.removeAllRanges(), l.addRange(r)), this.saveSel(), this.onChange(), this.positionTableHandles(), this.positionCellMarker();
|
|
4109
4216
|
}
|
|
4110
4217
|
/** Align the whole table via auto margins — same semantics as the align
|
|
4111
4218
|
* field in the table-properties dialog. */
|
|
@@ -4142,26 +4249,26 @@ let Hi = (j = class {
|
|
|
4142
4249
|
tablePropsDlg() {
|
|
4143
4250
|
const t = this.tblActive;
|
|
4144
4251
|
if (!t) return;
|
|
4145
|
-
let e, i, s, n,
|
|
4146
|
-
const
|
|
4252
|
+
let e, i, s, n, r;
|
|
4253
|
+
const l = "display:flex;align-items:center;gap:10px;margin:10px 0", o = "width:120px;color:#556;flex:none", a = "flex:1;border:1px solid #cfd6df;border-radius:6px;padding:7px 9px;font:14px inherit", d = t.querySelector("td,th"), p = t.style.width || "", m = d && d.style.padding ? parseFloat(d.style.padding) : "", b = t.style.borderSpacing ? parseFloat(t.style.borderSpacing) : "", y = t.style.borderWidth ? parseFloat(t.style.borderWidth) : "", g = t.style.marginLeft, x = t.style.marginRight, w = g === "auto" && x === "auto" ? "center" : g === "auto" ? "right" : x === "auto" && g === "0" ? "left" : "";
|
|
4147
4254
|
this.dialog(
|
|
4148
4255
|
this.t("tablepropsttl"),
|
|
4149
4256
|
(E) => {
|
|
4150
|
-
const I = (
|
|
4257
|
+
const I = (A, $) => {
|
|
4151
4258
|
const Z = document.createElement("div");
|
|
4152
|
-
Z.style.cssText =
|
|
4259
|
+
Z.style.cssText = l;
|
|
4153
4260
|
const F = document.createElement("span");
|
|
4154
|
-
F.style.cssText = o, F.textContent = this.t(
|
|
4261
|
+
F.style.cssText = o, F.textContent = this.t(A), Z.append(F, $), E.appendChild(Z);
|
|
4155
4262
|
};
|
|
4156
|
-
e = document.createElement("input"), e.type = "text", e.style.cssText =
|
|
4263
|
+
e = document.createElement("input"), e.type = "text", e.style.cssText = a, e.placeholder = "e.g. 600px or 100%", e.value = p, I("tblwidth", e), i = document.createElement("input"), i.type = "number", i.min = "0", i.style.cssText = a, i.value = String(m), I("tblcellpadding", i), s = document.createElement("input"), s.type = "number", s.min = "0", s.style.cssText = a, s.value = String(b), I("tblcellspacing", s), n = document.createElement("input"), n.type = "number", n.min = "0", n.style.cssText = a, n.value = String(y), I("tblborder", n), r = document.createElement("select"), r.style.cssText = a, [
|
|
4157
4264
|
["", "alignnone"],
|
|
4158
4265
|
["left", "alignleft"],
|
|
4159
4266
|
["center", "aligncenter"],
|
|
4160
4267
|
["right", "alignright"]
|
|
4161
|
-
].forEach(([
|
|
4268
|
+
].forEach(([A, $]) => {
|
|
4162
4269
|
const Z = document.createElement("option");
|
|
4163
|
-
Z.value =
|
|
4164
|
-
}), I("tblalign",
|
|
4270
|
+
Z.value = A, Z.textContent = this.t($), A === w && (Z.selected = !0), r.appendChild(Z);
|
|
4271
|
+
}), I("tblalign", r);
|
|
4165
4272
|
},
|
|
4166
4273
|
[
|
|
4167
4274
|
{ label: this.t("cancel"), action: () => this.closeDlg() },
|
|
@@ -4174,7 +4281,7 @@ let Hi = (j = class {
|
|
|
4174
4281
|
cellpadding: i.value.trim(),
|
|
4175
4282
|
cellspacing: s.value.trim(),
|
|
4176
4283
|
border: n.value.trim(),
|
|
4177
|
-
align:
|
|
4284
|
+
align: r.value
|
|
4178
4285
|
}), this.closeDlg(), this.onChange(), this.positionTableHandles();
|
|
4179
4286
|
}
|
|
4180
4287
|
}
|
|
@@ -4213,8 +4320,8 @@ let Hi = (j = class {
|
|
|
4213
4320
|
formSelect(t, e) {
|
|
4214
4321
|
const i = document.createElement("select");
|
|
4215
4322
|
return i.style.cssText = "flex:1;border:1px solid #cfd6df;border-radius:6px;padding:7px 9px;font:14px inherit;background:#fff", t.forEach(([s, n]) => {
|
|
4216
|
-
const
|
|
4217
|
-
|
|
4323
|
+
const r = document.createElement("option");
|
|
4324
|
+
r.value = s, r.textContent = n, s === e && (r.selected = !0), i.appendChild(r);
|
|
4218
4325
|
}), i;
|
|
4219
4326
|
}
|
|
4220
4327
|
formBg(t) {
|
|
@@ -4224,8 +4331,8 @@ let Hi = (j = class {
|
|
|
4224
4331
|
s.type = "color", s.value = i || "#ffffff", s.style.cssText = "width:36px;height:29px;border:1px solid #cfd6df;border-radius:4px;padding:1px;background:none;cursor:pointer";
|
|
4225
4332
|
const n = document.createElement("label");
|
|
4226
4333
|
n.style.cssText = "display:flex;align-items:center;gap:6px;cursor:pointer;color:#556";
|
|
4227
|
-
const
|
|
4228
|
-
return
|
|
4334
|
+
const r = document.createElement("input");
|
|
4335
|
+
return r.type = "checkbox", r.checked = !!i, n.append(r, document.createTextNode(this.t("fill"))), s.addEventListener("input", () => r.checked = !0), e.append(s, n), { wrap: e, color: s, fill: r };
|
|
4229
4336
|
}
|
|
4230
4337
|
setOrClear(t, e, i) {
|
|
4231
4338
|
i ? t.style.setProperty(e, /^(width|height)$/.test(e) && /^\d+$/.test(i) ? i + "px" : i) : t.style.removeProperty(e);
|
|
@@ -4236,11 +4343,11 @@ let Hi = (j = class {
|
|
|
4236
4343
|
alert(this.t("nocell"));
|
|
4237
4344
|
return;
|
|
4238
4345
|
}
|
|
4239
|
-
let e, i, s, n,
|
|
4346
|
+
let e, i, s, n, r;
|
|
4240
4347
|
this.dialog(
|
|
4241
4348
|
this.t("cellprops").replace("…", ""),
|
|
4242
|
-
(
|
|
4243
|
-
e = this.formInput(t.style.width, "e.g. 120px / 25%"), this.formRow(
|
|
4349
|
+
(l) => {
|
|
4350
|
+
e = this.formInput(t.style.width, "e.g. 120px / 25%"), this.formRow(l, this.t("tblwidth"), e), i = this.formInput(t.style.height, "e.g. 40px"), this.formRow(l, this.t("tblheight"), i), s = this.formSelect(
|
|
4244
4351
|
[
|
|
4245
4352
|
["", this.t("alignnone")],
|
|
4246
4353
|
["left", this.t("alignleft")],
|
|
@@ -4248,7 +4355,7 @@ let Hi = (j = class {
|
|
|
4248
4355
|
["right", this.t("alignright")]
|
|
4249
4356
|
],
|
|
4250
4357
|
t.style.textAlign || ""
|
|
4251
|
-
), this.formRow(
|
|
4358
|
+
), this.formRow(l, this.t("tblalign"), s), n = this.formSelect(
|
|
4252
4359
|
[
|
|
4253
4360
|
["", this.t("alignnone")],
|
|
4254
4361
|
["top", this.t("valigntop")],
|
|
@@ -4256,7 +4363,7 @@ let Hi = (j = class {
|
|
|
4256
4363
|
["bottom", this.t("valignbottom")]
|
|
4257
4364
|
],
|
|
4258
4365
|
t.style.verticalAlign || ""
|
|
4259
|
-
), this.formRow(
|
|
4366
|
+
), this.formRow(l, this.t("valign"), n), r = this.formBg(t.style.backgroundColor || ""), this.formRow(l, this.t("backcolor"), r.wrap);
|
|
4260
4367
|
},
|
|
4261
4368
|
[
|
|
4262
4369
|
{ label: this.t("cancel"), action: () => this.closeDlg() },
|
|
@@ -4264,7 +4371,7 @@ let Hi = (j = class {
|
|
|
4264
4371
|
label: this.t("save"),
|
|
4265
4372
|
primary: !0,
|
|
4266
4373
|
action: () => {
|
|
4267
|
-
this.setOrClear(t, "width", e.value.trim()), this.setOrClear(t, "height", i.value.trim()), this.setOrClear(t, "text-align", s.value), this.setOrClear(t, "vertical-align", n.value), this.setOrClear(t, "background-color",
|
|
4374
|
+
this.setOrClear(t, "width", e.value.trim()), this.setOrClear(t, "height", i.value.trim()), this.setOrClear(t, "text-align", s.value), this.setOrClear(t, "vertical-align", n.value), this.setOrClear(t, "background-color", r.fill.checked ? r.color.value : ""), this.closeDlg(), this.onChange(), this.positionTableHandles();
|
|
4268
4375
|
}
|
|
4269
4376
|
}
|
|
4270
4377
|
]
|
|
@@ -4302,11 +4409,11 @@ let Hi = (j = class {
|
|
|
4302
4409
|
return;
|
|
4303
4410
|
}
|
|
4304
4411
|
const e = t.parentElement, i = t.closest("table"), s = Array.from(e.children).indexOf(t), n = Array.from(i.rows).map((o) => o.cells[s]).filter(Boolean);
|
|
4305
|
-
let
|
|
4412
|
+
let r, l;
|
|
4306
4413
|
this.dialog(
|
|
4307
4414
|
this.t("colprops").replace("…", ""),
|
|
4308
4415
|
(o) => {
|
|
4309
|
-
|
|
4416
|
+
r = this.formInput(t.style.width, "e.g. 120px / 25%"), this.formRow(o, this.t("tblwidth"), r), l = this.formBg(t.style.backgroundColor || ""), this.formRow(o, this.t("backcolor"), l.wrap);
|
|
4310
4417
|
},
|
|
4311
4418
|
[
|
|
4312
4419
|
{ label: this.t("cancel"), action: () => this.closeDlg() },
|
|
@@ -4315,7 +4422,7 @@ let Hi = (j = class {
|
|
|
4315
4422
|
primary: !0,
|
|
4316
4423
|
action: () => {
|
|
4317
4424
|
n.forEach((o) => {
|
|
4318
|
-
this.setOrClear(o, "width",
|
|
4425
|
+
this.setOrClear(o, "width", r.value.trim()), this.setOrClear(o, "background-color", l.fill.checked ? l.color.value : "");
|
|
4319
4426
|
}), this.closeDlg(), this.onChange(), this.positionTableHandles();
|
|
4320
4427
|
}
|
|
4321
4428
|
}
|
|
@@ -4331,8 +4438,8 @@ let Hi = (j = class {
|
|
|
4331
4438
|
const s = document.createElement("div");
|
|
4332
4439
|
s.className = "dlg", s.dir = this.dir(), s.innerHTML = `<header><span>${t}</span><button type="button">×</button></header>
|
|
4333
4440
|
<div class="body"></div><footer></footer>`, s.querySelector("header button").onclick = () => this.closeDlg(), e(s.querySelector(".body")), (i || [{ label: this.t("close"), primary: !0, action: () => this.closeDlg() }]).forEach((n) => {
|
|
4334
|
-
const
|
|
4335
|
-
|
|
4441
|
+
const r = document.createElement("button");
|
|
4442
|
+
r.type = "button", r.textContent = n.label, n.primary && (r.className = "pri"), r.onclick = n.action, s.querySelector("footer").appendChild(r);
|
|
4336
4443
|
}), this.dlgOvl.appendChild(s), this.dlgOvl.addEventListener("mousedown", (n) => {
|
|
4337
4444
|
n.target === this.dlgOvl && this.closeDlg();
|
|
4338
4445
|
}), document.body.appendChild(this.dlgOvl);
|
|
@@ -4382,8 +4489,12 @@ let Hi = (j = class {
|
|
|
4382
4489
|
}
|
|
4383
4490
|
previewDlg() {
|
|
4384
4491
|
this.dialog(this.t("previewttl"), (t) => {
|
|
4492
|
+
var s;
|
|
4493
|
+
(s = t.closest(".dlg")) == null || s.classList.add("dlg-preview");
|
|
4385
4494
|
const e = document.createElement("div");
|
|
4386
|
-
e.
|
|
4495
|
+
e.className = "pv-box";
|
|
4496
|
+
const i = this.contentWidth();
|
|
4497
|
+
e.style.cssText = `width:${i > 0 ? Math.round(i) : 640}px;max-width:100%;max-height:52vh;overflow:auto;border:1px solid #e3e3e3;border-radius:6px;padding:14px;font-family:Helvetica,Arial,sans-serif;font-size:14px`, e.innerHTML = this.ed.innerHTML, t.appendChild(e);
|
|
4387
4498
|
});
|
|
4388
4499
|
}
|
|
4389
4500
|
/** Two-pane picker shared by the special-character map and the emoji map:
|
|
@@ -4392,31 +4503,31 @@ let Hi = (j = class {
|
|
|
4392
4503
|
this.saveSel(), this.dialog(t, (s) => {
|
|
4393
4504
|
const n = document.createElement("div");
|
|
4394
4505
|
n.className = "chmap";
|
|
4395
|
-
const l = document.createElement("div");
|
|
4396
|
-
l.className = "chtabs";
|
|
4397
4506
|
const r = document.createElement("div");
|
|
4398
|
-
r.className = "
|
|
4507
|
+
r.className = "chtabs";
|
|
4508
|
+
const l = document.createElement("div");
|
|
4509
|
+
l.className = "chpanel";
|
|
4399
4510
|
const o = document.createElement("div");
|
|
4400
|
-
o.className = "chgrid" + (i ? " emgrid" : ""),
|
|
4401
|
-
const
|
|
4402
|
-
|
|
4511
|
+
o.className = "chgrid" + (i ? " emgrid" : ""), l.appendChild(o);
|
|
4512
|
+
const a = (d) => {
|
|
4513
|
+
r.querySelectorAll("button").forEach((p, m) => p.classList.toggle("on", m === d)), o.innerHTML = "", e[d].chars.forEach((p) => {
|
|
4403
4514
|
const m = document.createElement("button");
|
|
4404
|
-
m.type = "button", m.textContent =
|
|
4405
|
-
this.closeDlg(), this.exec("insertText",
|
|
4515
|
+
m.type = "button", m.textContent = p, m.onclick = () => {
|
|
4516
|
+
this.closeDlg(), this.exec("insertText", p);
|
|
4406
4517
|
}, o.appendChild(m);
|
|
4407
|
-
}),
|
|
4518
|
+
}), l.scrollTop = 0;
|
|
4408
4519
|
};
|
|
4409
|
-
e.forEach((d,
|
|
4520
|
+
e.forEach((d, p) => {
|
|
4410
4521
|
const m = document.createElement("button");
|
|
4411
|
-
m.type = "button", m.textContent = this.t(d.key), m.addEventListener("click", () =>
|
|
4412
|
-
}), n.append(
|
|
4522
|
+
m.type = "button", m.textContent = this.t(d.key), m.addEventListener("click", () => a(p)), r.appendChild(m);
|
|
4523
|
+
}), n.append(r, l), s.appendChild(n), a(0);
|
|
4413
4524
|
});
|
|
4414
4525
|
}
|
|
4415
4526
|
charMap() {
|
|
4416
|
-
this.glyphPickerDlg(this.t("charmap").replace("…", ""),
|
|
4527
|
+
this.glyphPickerDlg(this.t("charmap").replace("…", ""), li, !1);
|
|
4417
4528
|
}
|
|
4418
4529
|
emojiMap() {
|
|
4419
|
-
this.glyphPickerDlg(this.t("emoji").replace("…", ""),
|
|
4530
|
+
this.glyphPickerDlg(this.t("emoji").replace("…", ""), oi, !0);
|
|
4420
4531
|
}
|
|
4421
4532
|
printDoc() {
|
|
4422
4533
|
const t = window.open("", "_blank");
|
|
@@ -4478,17 +4589,17 @@ let Hi = (j = class {
|
|
|
4478
4589
|
const i = document.createElement("button");
|
|
4479
4590
|
i.type = "button", i.className = "txtbtn", i.textContent = this.t("insertimg");
|
|
4480
4591
|
const s = () => {
|
|
4481
|
-
const n = e.value.trim(),
|
|
4482
|
-
if (!
|
|
4592
|
+
const n = e.value.trim(), r = this.phActive;
|
|
4593
|
+
if (!r) return;
|
|
4483
4594
|
if (!/^(https?:|data:image\/|blob:)/i.test(n)) {
|
|
4484
4595
|
e.classList.add("err"), e.focus();
|
|
4485
4596
|
return;
|
|
4486
4597
|
}
|
|
4487
4598
|
i.disabled = !0, e.disabled = !0;
|
|
4488
|
-
const
|
|
4489
|
-
|
|
4599
|
+
const l = new Image();
|
|
4600
|
+
l.onload = () => this.replacePlaceholderWithImage(r, n, ""), l.onerror = () => {
|
|
4490
4601
|
i.disabled = !1, e.disabled = !1, e.classList.add("err"), e.focus();
|
|
4491
|
-
},
|
|
4602
|
+
}, l.src = n;
|
|
4492
4603
|
};
|
|
4493
4604
|
i.addEventListener("click", s), e.addEventListener("input", () => e.classList.remove("err")), e.addEventListener("keydown", (n) => {
|
|
4494
4605
|
n.key === "Enter" ? (n.preventDefault(), s()) : n.key === "Escape" && (n.stopPropagation(), this.renderPhCtxButtons());
|
|
@@ -4514,13 +4625,64 @@ let Hi = (j = class {
|
|
|
4514
4625
|
s && (s.textContent = this.t("uploading")), this.imageUploadHandler(t).then((n) => {
|
|
4515
4626
|
this.ed.contains(e) && this.replacePlaceholderWithImage(e, n, i);
|
|
4516
4627
|
}).catch((n) => {
|
|
4517
|
-
var
|
|
4518
|
-
this.ed.contains(e) && (e.classList.remove("uploading"), e.classList.add("upload-error"), s && (s.textContent = this.t("uploadfailed")), (
|
|
4628
|
+
var r;
|
|
4629
|
+
this.ed.contains(e) && (e.classList.remove("uploading"), e.classList.add("upload-error"), s && (s.textContent = this.t("uploadfailed")), (r = this.onImageUploadError) == null || r.call(this, n, t));
|
|
4519
4630
|
});
|
|
4520
4631
|
}
|
|
4521
4632
|
replacePlaceholderWithImage(t, e, i) {
|
|
4522
4633
|
const s = document.createElement("img");
|
|
4523
|
-
s.src = e, s.alt = "", i && (s.title = i), t.replaceWith(s), this.phActive === t && this.clearImgPlaceholderSel(), this.refreshState(), this.onChange();
|
|
4634
|
+
s.src = e, s.alt = "", i && (s.title = i), t.replaceWith(s), this.stampImageSize(s), this.phActive === t && this.clearImgPlaceholderSel(), this.refreshState(), this.onChange();
|
|
4635
|
+
}
|
|
4636
|
+
/** Width of the editor's text column — the width `.earea img { max-width:100% }`
|
|
4637
|
+
* clamps an oversized image to. */
|
|
4638
|
+
contentWidth() {
|
|
4639
|
+
const t = getComputedStyle(this.ed), e = (parseFloat(t.paddingLeft) || 0) + (parseFloat(t.paddingRight) || 0);
|
|
4640
|
+
return Math.max(0, this.ed.clientWidth - e);
|
|
4641
|
+
}
|
|
4642
|
+
/** Inserts an <img> through execCommand and stamps its size once it has decoded.
|
|
4643
|
+
* A throwaway id is the only way to get a handle on what insertHTML created. */
|
|
4644
|
+
insertImageHTML(t, e) {
|
|
4645
|
+
const i = "fable-img-" + Date.now().toString(36) + Math.random().toString(36).slice(2, 6);
|
|
4646
|
+
document.execCommand(
|
|
4647
|
+
"insertHTML",
|
|
4648
|
+
!1,
|
|
4649
|
+
`<img id="${i}" src="${t}"${e ? ` title="${e}"` : ""} alt="">`
|
|
4650
|
+
);
|
|
4651
|
+
const s = this.ed.querySelector("#" + i);
|
|
4652
|
+
s && (s.removeAttribute("id"), this.stampImageSize(s));
|
|
4653
|
+
}
|
|
4654
|
+
/** Gives a newly inserted image an explicit size so it renders the same in the
|
|
4655
|
+
* editor, in Preview and in a sent email. Without it the image only looks right
|
|
4656
|
+
* inside `.earea`, whose `max-width:100%` rule exists nowhere else — which is why
|
|
4657
|
+
* the same picture came out at a different size once the mail was sent.
|
|
4658
|
+
* Leaves alone: images inside a template media slot (deliberately fluid) and any
|
|
4659
|
+
* image that already carries a size from its source. */
|
|
4660
|
+
stampImageSize(t, e) {
|
|
4661
|
+
const i = (n) => {
|
|
4662
|
+
e ? e(n) : n && this.onChange();
|
|
4663
|
+
}, s = () => {
|
|
4664
|
+
if (!this.ed.contains(t) || t.closest(".tpl-media") || t.getAttribute("width") || t.getAttribute("height") || t.style.width || t.style.height) return i(!1);
|
|
4665
|
+
const n = t.naturalWidth;
|
|
4666
|
+
if (!n) return i(!1);
|
|
4667
|
+
const r = this.contentWidth(), l = Math.round(r > 0 ? Math.min(n, r) : n);
|
|
4668
|
+
t.setAttribute("width", String(l)), t.style.width = l + "px", t.style.height = "auto", i(!0);
|
|
4669
|
+
};
|
|
4670
|
+
t.complete && t.naturalWidth ? s() : (t.addEventListener("load", s, { once: !0 }), t.addEventListener("error", () => i(!1), { once: !0 }));
|
|
4671
|
+
}
|
|
4672
|
+
/** Sizes images in content that arrived from outside the editor — a document saved
|
|
4673
|
+
* before the editor started recording image sizes. Without this such a document
|
|
4674
|
+
* keeps rendering at one size here and another in a sent mail. Images that already
|
|
4675
|
+
* carry a size, and template slots, are left alone, so content written by a
|
|
4676
|
+
* current version passes through untouched. Emits one change after the images have
|
|
4677
|
+
* settled rather than one per image, and none at all if nothing needed stamping. */
|
|
4678
|
+
stampExistingImages() {
|
|
4679
|
+
const t = Array.from(this.ed.querySelectorAll("img"));
|
|
4680
|
+
if (!t.length) return;
|
|
4681
|
+
let e = t.length, i = !1;
|
|
4682
|
+
const s = (n) => {
|
|
4683
|
+
n && (i = !0), --e === 0 && i && this.onChange();
|
|
4684
|
+
};
|
|
4685
|
+
t.forEach((n) => this.stampImageSize(n, s));
|
|
4524
4686
|
}
|
|
4525
4687
|
positionImgPhCtx() {
|
|
4526
4688
|
if (this.phActive && !document.body.contains(this.phActive)) {
|
|
@@ -4578,20 +4740,20 @@ let Hi = (j = class {
|
|
|
4578
4740
|
const i = document.createElement("button");
|
|
4579
4741
|
i.type = "button", i.className = "txtbtn", i.textContent = this.t("insertvideo");
|
|
4580
4742
|
const s = () => {
|
|
4581
|
-
const n = e.value.trim(),
|
|
4582
|
-
if (!
|
|
4743
|
+
const n = e.value.trim(), r = this.vphActive;
|
|
4744
|
+
if (!r) return;
|
|
4583
4745
|
if (!/^(https?:|data:video\/|blob:)/i.test(n)) {
|
|
4584
4746
|
e.classList.add("err"), e.focus();
|
|
4585
4747
|
return;
|
|
4586
4748
|
}
|
|
4587
|
-
const
|
|
4588
|
-
if (
|
|
4589
|
-
this.replacePlaceholderWithEmbed(
|
|
4749
|
+
const l = this.videoEmbedUrl(n);
|
|
4750
|
+
if (l) {
|
|
4751
|
+
this.replacePlaceholderWithEmbed(r, l);
|
|
4590
4752
|
return;
|
|
4591
4753
|
}
|
|
4592
4754
|
i.disabled = !0, e.disabled = !0;
|
|
4593
4755
|
const o = document.createElement("video");
|
|
4594
|
-
o.preload = "metadata", o.onloadedmetadata = () => this.replacePlaceholderWithVideo(
|
|
4756
|
+
o.preload = "metadata", o.onloadedmetadata = () => this.replacePlaceholderWithVideo(r, n, ""), o.onerror = () => {
|
|
4595
4757
|
i.disabled = !1, e.disabled = !1, e.classList.add("err"), e.focus();
|
|
4596
4758
|
}, o.src = n;
|
|
4597
4759
|
};
|
|
@@ -4619,8 +4781,8 @@ let Hi = (j = class {
|
|
|
4619
4781
|
s && (s.textContent = this.t("uploading")), this.videoUploadHandler(t).then((n) => {
|
|
4620
4782
|
this.ed.contains(e) && this.replacePlaceholderWithVideo(e, n, i);
|
|
4621
4783
|
}).catch((n) => {
|
|
4622
|
-
var
|
|
4623
|
-
this.ed.contains(e) && (e.classList.remove("uploading"), e.classList.add("upload-error"), s && (s.textContent = this.t("uploadfailed")), (
|
|
4784
|
+
var r;
|
|
4785
|
+
this.ed.contains(e) && (e.classList.remove("uploading"), e.classList.add("upload-error"), s && (s.textContent = this.t("uploadfailed")), (r = this.onVideoUploadError) == null || r.call(this, n, t));
|
|
4624
4786
|
});
|
|
4625
4787
|
}
|
|
4626
4788
|
replacePlaceholderWithVideo(t, e, i) {
|
|
@@ -4660,23 +4822,23 @@ let Hi = (j = class {
|
|
|
4660
4822
|
e.className = "imgctx", e.dir = this.dir();
|
|
4661
4823
|
const i = () => {
|
|
4662
4824
|
var d;
|
|
4663
|
-
const
|
|
4664
|
-
(d = this.vidCtx) == null || d.replaceWith(
|
|
4665
|
-
}, s = (
|
|
4666
|
-
this.setVideoAlign(t,
|
|
4667
|
-
}, n = t.style.float === "left",
|
|
4668
|
-
const b = this.ctxBtn(
|
|
4669
|
-
return b.classList.toggle("on",
|
|
4825
|
+
const a = this.buildVideoCtxToolbar(t);
|
|
4826
|
+
(d = this.vidCtx) == null || d.replaceWith(a), this.vidCtx = a, this.positionVidCtx();
|
|
4827
|
+
}, s = (a) => {
|
|
4828
|
+
this.setVideoAlign(t, a), i();
|
|
4829
|
+
}, n = t.style.float === "left", r = t.style.float === "right", l = !n && !r && t.style.marginLeft === "auto" && t.style.marginRight === "auto", o = (a, d, p, m) => {
|
|
4830
|
+
const b = this.ctxBtn(a, d, m);
|
|
4831
|
+
return b.classList.toggle("on", p), b;
|
|
4670
4832
|
};
|
|
4671
4833
|
return e.append(
|
|
4672
4834
|
o(h.alignleft, this.t("alignleft"), n, () => s("left")),
|
|
4673
|
-
o(h.aligncenter, this.t("aligncenter"),
|
|
4674
|
-
o(h.alignright, this.t("alignright"),
|
|
4835
|
+
o(h.aligncenter, this.t("aligncenter"), l, () => s("center")),
|
|
4836
|
+
o(h.alignright, this.t("alignright"), r, () => s("right")),
|
|
4675
4837
|
this.ctxSep(),
|
|
4676
4838
|
o(h.trash, this.t("deletevideo"), !1, () => {
|
|
4677
4839
|
t.remove(), this.clearVidHandles(), this.onChange();
|
|
4678
4840
|
})
|
|
4679
|
-
), e.addEventListener("mousedown", (
|
|
4841
|
+
), e.addEventListener("mousedown", (a) => a.preventDefault()), e.addEventListener("mouseenter", () => this.cancelVidHide()), e.addEventListener("mouseleave", () => {
|
|
4680
4842
|
this.cancelVidHide(), this.vidHideTimer = window.setTimeout(() => this.clearVidHandles(), 250);
|
|
4681
4843
|
}), document.body.appendChild(e), e;
|
|
4682
4844
|
}
|
|
@@ -4713,30 +4875,30 @@ let Hi = (j = class {
|
|
|
4713
4875
|
* (videoUploadHandler when configured, else inline base64). */
|
|
4714
4876
|
videoDlg() {
|
|
4715
4877
|
this.saveSel();
|
|
4716
|
-
let t, e, i, s, n,
|
|
4717
|
-
const
|
|
4718
|
-
const
|
|
4719
|
-
|
|
4878
|
+
let t, e, i, s, n, r;
|
|
4879
|
+
const l = (a, d) => {
|
|
4880
|
+
const p = document.createElement("div");
|
|
4881
|
+
p.className = "dfield";
|
|
4720
4882
|
const m = document.createElement("label");
|
|
4721
|
-
return m.textContent = this.t(
|
|
4883
|
+
return m.textContent = this.t(a), p.append(m, d), p;
|
|
4722
4884
|
}, o = () => {
|
|
4723
|
-
const
|
|
4724
|
-
return
|
|
4885
|
+
const a = document.createElement("input");
|
|
4886
|
+
return a.type = "url", a;
|
|
4725
4887
|
};
|
|
4726
4888
|
this.dialog(
|
|
4727
4889
|
this.t("videodlgttl"),
|
|
4728
|
-
(
|
|
4890
|
+
(a) => {
|
|
4729
4891
|
const d = document.createElement("div");
|
|
4730
4892
|
d.className = "dtabs";
|
|
4731
|
-
const
|
|
4893
|
+
const p = [], m = (g, x) => {
|
|
4732
4894
|
const w = document.createElement("button");
|
|
4733
4895
|
w.type = "button", w.textContent = this.t(g);
|
|
4734
4896
|
const E = document.createElement("div");
|
|
4735
4897
|
E.className = "dtabpanel", x(E);
|
|
4736
|
-
const I =
|
|
4737
|
-
|
|
4898
|
+
const I = p.length;
|
|
4899
|
+
p.push(E), w.addEventListener("click", () => b(I)), d.appendChild(w);
|
|
4738
4900
|
}, b = (g) => {
|
|
4739
|
-
d.querySelectorAll("button").forEach((x, w) => x.classList.toggle("on", w === g)),
|
|
4901
|
+
d.querySelectorAll("button").forEach((x, w) => x.classList.toggle("on", w === g)), p.forEach((x, w) => x.style.display = w === g ? "" : "none");
|
|
4740
4902
|
};
|
|
4741
4903
|
m("vidgeneral", (g) => {
|
|
4742
4904
|
t = o(), t.placeholder = this.t("videourlph");
|
|
@@ -4749,32 +4911,32 @@ let Hi = (j = class {
|
|
|
4749
4911
|
E.value = "", E.click();
|
|
4750
4912
|
}), E.addEventListener("change", () => {
|
|
4751
4913
|
var Z;
|
|
4752
|
-
const
|
|
4753
|
-
if (!
|
|
4914
|
+
const A = (Z = E.files) == null ? void 0 : Z[0];
|
|
4915
|
+
if (!A) return;
|
|
4754
4916
|
w.disabled = !0, w.textContent = this.t("uploading");
|
|
4755
4917
|
const $ = (F) => {
|
|
4756
4918
|
t.value = F, w.disabled = !1, w.textContent = this.t("uploadvideo");
|
|
4757
4919
|
};
|
|
4758
4920
|
if (this.videoUploadHandler)
|
|
4759
|
-
this.videoUploadHandler(
|
|
4921
|
+
this.videoUploadHandler(A).then($).catch((F) => {
|
|
4760
4922
|
var et;
|
|
4761
|
-
w.disabled = !1, w.textContent = this.t("uploadfailed"), (et = this.onVideoUploadError) == null || et.call(this, F,
|
|
4923
|
+
w.disabled = !1, w.textContent = this.t("uploadfailed"), (et = this.onVideoUploadError) == null || et.call(this, F, A);
|
|
4762
4924
|
});
|
|
4763
4925
|
else {
|
|
4764
4926
|
const F = new FileReader();
|
|
4765
|
-
F.onload = () => $(F.result), F.readAsDataURL(
|
|
4927
|
+
F.onload = () => $(F.result), F.readAsDataURL(A);
|
|
4766
4928
|
}
|
|
4767
|
-
}), x.append(t, w, E), t.style.flex = "1", g.appendChild(
|
|
4929
|
+
}), x.append(t, w, E), t.style.flex = "1", g.appendChild(l("vidsource", x));
|
|
4768
4930
|
const I = document.createElement("div");
|
|
4769
|
-
I.className = "drow", e = document.createElement("input"), e.type = "number", e.value = "560", i = document.createElement("input"), i.type = "number", i.value = "314", I.append(
|
|
4931
|
+
I.className = "drow", e = document.createElement("input"), e.type = "number", e.value = "560", i = document.createElement("input"), i.type = "number", i.value = "314", I.append(l("tblwidth", e), l("tblheight", i)), g.appendChild(I);
|
|
4770
4932
|
}), m("vidembed", (g) => {
|
|
4771
4933
|
const x = document.createElement("p");
|
|
4772
4934
|
x.textContent = this.t("vidembedhint"), x.style.cssText = "margin:0 0 8px;color:#556;font-size:13.5px", s = document.createElement("textarea"), s.style.cssText = "width:100%;box-sizing:border-box;height:160px", g.append(x, s);
|
|
4773
4935
|
}), m("vidadvanced", (g) => {
|
|
4774
|
-
n = o(),
|
|
4936
|
+
n = o(), r = o(), g.append(l("vidaltsource", n), l("vidposter", r));
|
|
4775
4937
|
});
|
|
4776
4938
|
const y = document.createElement("div");
|
|
4777
|
-
y.className = "dtabbody",
|
|
4939
|
+
y.className = "dtabbody", p.forEach((g) => y.appendChild(g)), a.append(d, y), b(0), setTimeout(() => t.focus(), 0);
|
|
4778
4940
|
},
|
|
4779
4941
|
[
|
|
4780
4942
|
{ label: this.t("cancel"), action: () => this.closeDlg() },
|
|
@@ -4782,21 +4944,21 @@ let Hi = (j = class {
|
|
|
4782
4944
|
label: this.t("save"),
|
|
4783
4945
|
primary: !0,
|
|
4784
4946
|
action: () => {
|
|
4785
|
-
const
|
|
4786
|
-
if (this.closeDlg(), !
|
|
4787
|
-
if (this.restoreSel(),
|
|
4788
|
-
document.execCommand("insertHTML", !1, `<span class="video-embed" contenteditable="false">${
|
|
4947
|
+
const a = s.value.trim(), d = t.value.trim(), p = parseInt(e.value, 10) || 560, m = parseInt(i.value, 10) || 314;
|
|
4948
|
+
if (this.closeDlg(), !a && !d) return;
|
|
4949
|
+
if (this.restoreSel(), a) {
|
|
4950
|
+
document.execCommand("insertHTML", !1, `<span class="video-embed" contenteditable="false">${a}</span>`), this.onChange();
|
|
4789
4951
|
return;
|
|
4790
4952
|
}
|
|
4791
4953
|
const b = this.videoEmbedUrl(d);
|
|
4792
4954
|
if (b)
|
|
4793
|
-
document.execCommand("insertHTML", !1, this.videoEmbedHTML(b,
|
|
4955
|
+
document.execCommand("insertHTML", !1, this.videoEmbedHTML(b, p, m));
|
|
4794
4956
|
else {
|
|
4795
|
-
const y = n.value.trim(), g =
|
|
4957
|
+
const y = n.value.trim(), g = r.value.trim();
|
|
4796
4958
|
document.execCommand(
|
|
4797
4959
|
"insertHTML",
|
|
4798
4960
|
!1,
|
|
4799
|
-
`<video controls width="${
|
|
4961
|
+
`<video controls width="${p}" height="${m}"${g ? ` poster="${this.escapeAttr(g)}"` : ""}><source src="${this.escapeAttr(d)}">${y ? `<source src="${this.escapeAttr(y)}">` : ""}</video>`
|
|
4800
4962
|
);
|
|
4801
4963
|
}
|
|
4802
4964
|
this.onChange();
|
|
@@ -4854,15 +5016,15 @@ let Hi = (j = class {
|
|
|
4854
5016
|
if (i.nodeType !== Node.TEXT_NODE || !this.ed.contains(i) || (d = i.parentElement) != null && d.closest("code, pre")) return;
|
|
4855
5017
|
const n = (i.textContent || "").slice(0, e.anchorOffset).match(/(?:^|[^`])`([^`]+)$/);
|
|
4856
5018
|
if (!n) return;
|
|
4857
|
-
const
|
|
4858
|
-
if (/^\s|\s$/.test(
|
|
5019
|
+
const r = n[1];
|
|
5020
|
+
if (/^\s|\s$/.test(r)) return;
|
|
4859
5021
|
t.preventDefault();
|
|
4860
|
-
const
|
|
4861
|
-
|
|
5022
|
+
const l = document.createRange();
|
|
5023
|
+
l.setStart(i, e.anchorOffset - r.length - 1), l.setEnd(i, e.anchorOffset), l.deleteContents();
|
|
4862
5024
|
const o = document.createElement("code");
|
|
4863
|
-
o.textContent =
|
|
4864
|
-
const
|
|
4865
|
-
|
|
5025
|
+
o.textContent = r, l.insertNode(o);
|
|
5026
|
+
const a = document.createRange();
|
|
5027
|
+
a.setStartAfter(o), a.collapse(!0), e.removeAllRanges(), e.addRange(a), this.saveSel(), this.onChange();
|
|
4866
5028
|
}
|
|
4867
5029
|
/** Custom dropdown for dialog fields (a native <select> popup can't be styled):
|
|
4868
5030
|
* a field-styled button showing the current choice that opens a floating,
|
|
@@ -4874,22 +5036,22 @@ let Hi = (j = class {
|
|
|
4874
5036
|
s.className = "dsel";
|
|
4875
5037
|
const n = document.createElement("button");
|
|
4876
5038
|
n.type = "button", n.className = "dsel-btn";
|
|
4877
|
-
const
|
|
4878
|
-
|
|
4879
|
-
const
|
|
4880
|
-
return
|
|
4881
|
-
const
|
|
4882
|
-
|
|
4883
|
-
i =
|
|
4884
|
-
}),
|
|
5039
|
+
const r = document.createElement("span");
|
|
5040
|
+
r.className = "lbl", r.textContent = ((o = t.find(([a]) => a === e)) == null ? void 0 : o[1]) || "", n.append(r), n.insertAdjacentHTML("beforeend", h.chev);
|
|
5041
|
+
const l = document.createElement("div");
|
|
5042
|
+
return l.className = "dsel-list", t.forEach(([a, d]) => {
|
|
5043
|
+
const p = document.createElement("button");
|
|
5044
|
+
p.type = "button", p.textContent = d, p.classList.toggle("on", a === i), p.addEventListener("click", () => {
|
|
5045
|
+
i = a, r.textContent = d, l.querySelectorAll("button").forEach((m) => m.classList.toggle("on", m === p)), s.classList.remove("open"), n.focus();
|
|
5046
|
+
}), l.appendChild(p);
|
|
4885
5047
|
}), n.addEventListener("click", () => {
|
|
4886
|
-
var
|
|
4887
|
-
s.classList.toggle("open"), s.classList.contains("open") && ((
|
|
4888
|
-
}), s.addEventListener("focusout", (
|
|
4889
|
-
s.contains(
|
|
4890
|
-
}), s.addEventListener("keydown", (
|
|
4891
|
-
|
|
4892
|
-
}), s.append(n,
|
|
5048
|
+
var a;
|
|
5049
|
+
s.classList.toggle("open"), s.classList.contains("open") && ((a = l.querySelector(".on")) == null || a.scrollIntoView({ block: "nearest" }));
|
|
5050
|
+
}), s.addEventListener("focusout", (a) => {
|
|
5051
|
+
s.contains(a.relatedTarget) || s.classList.remove("open");
|
|
5052
|
+
}), s.addEventListener("keydown", (a) => {
|
|
5053
|
+
a.key === "Escape" && s.classList.contains("open") && (a.stopPropagation(), s.classList.remove("open"), n.focus());
|
|
5054
|
+
}), s.append(n, l), { el: s, value: () => i };
|
|
4893
5055
|
}
|
|
4894
5056
|
/** Insert/edit-code-sample dialog: language dropdown + monospace textarea to
|
|
4895
5057
|
* paste or type code into. Inserts a non-editable <pre class="code-block">
|
|
@@ -4900,11 +5062,11 @@ let Hi = (j = class {
|
|
|
4900
5062
|
this.dialog(
|
|
4901
5063
|
this.t("codedlgttl"),
|
|
4902
5064
|
(s) => {
|
|
4903
|
-
var
|
|
5065
|
+
var l;
|
|
4904
5066
|
const n = document.createElement("div");
|
|
4905
5067
|
n.className = "dfield";
|
|
4906
|
-
const
|
|
4907
|
-
|
|
5068
|
+
const r = document.createElement("label");
|
|
5069
|
+
r.textContent = this.t("codelang"), e = this.dlgSelect(se, (t == null ? void 0 : t.dataset.lang) || "plain"), n.append(r, e.el), i = document.createElement("textarea"), i.className = "code-input", i.spellcheck = !1, i.value = ((l = t == null ? void 0 : t.querySelector("code")) == null ? void 0 : l.textContent) || "", i.placeholder = "const answer = 42;", s.append(n, i), setTimeout(() => i.focus(), 0);
|
|
4908
5070
|
},
|
|
4909
5071
|
[
|
|
4910
5072
|
{ label: this.t("cancel"), action: () => this.closeDlg() },
|
|
@@ -4912,11 +5074,11 @@ let Hi = (j = class {
|
|
|
4912
5074
|
label: this.t("save"),
|
|
4913
5075
|
primary: !0,
|
|
4914
5076
|
action: () => {
|
|
4915
|
-
var
|
|
4916
|
-
const s = i.value.replace(/\s+$/, ""), n = e.value(),
|
|
5077
|
+
var l;
|
|
5078
|
+
const s = i.value.replace(/\s+$/, ""), n = e.value(), r = ((l = se.find(([o]) => o === n)) == null ? void 0 : l[1]) || n;
|
|
4917
5079
|
if (this.closeDlg(), !!s.trim()) {
|
|
4918
5080
|
if (t) {
|
|
4919
|
-
t.dataset.lang = n, t.setAttribute("data-lang-label",
|
|
5081
|
+
t.dataset.lang = n, t.setAttribute("data-lang-label", r);
|
|
4920
5082
|
const o = t.querySelector("code") || t;
|
|
4921
5083
|
o.textContent = s, this.clearCodeSel(), this.onChange();
|
|
4922
5084
|
return;
|
|
@@ -4924,7 +5086,7 @@ let Hi = (j = class {
|
|
|
4924
5086
|
this.restoreSel(), document.execCommand(
|
|
4925
5087
|
"insertHTML",
|
|
4926
5088
|
!1,
|
|
4927
|
-
`<pre class="code-block" contenteditable="false" data-lang="${n}" data-lang-label="${this.escapeAttr(
|
|
5089
|
+
`<pre class="code-block" contenteditable="false" data-lang="${n}" data-lang-label="${this.escapeAttr(r)}"><code>${this.escHtml(s)}</code></pre><p><br></p>`
|
|
4928
5090
|
), this.onChange();
|
|
4929
5091
|
}
|
|
4930
5092
|
}
|
|
@@ -4981,14 +5143,14 @@ let Hi = (j = class {
|
|
|
4981
5143
|
/** Miniature div-based mockup of a layout, mirroring what the block looks
|
|
4982
5144
|
like in the editor: grey box = image slot, bars = heading/paragraph. */
|
|
4983
5145
|
tplPreviewHTML(t) {
|
|
4984
|
-
const e = '<span class="pv-img"></span>', i = '<span class="pv-h"></span>', s = (o) => `<span class="pv-l" style="width:${o}%"></span>`, n = (o) => `<span class="pv-col">${o}</span>`,
|
|
4985
|
-
return t === "img-left" ? `<span class="pv">${
|
|
5146
|
+
const e = '<span class="pv-img"></span>', i = '<span class="pv-h"></span>', s = (o) => `<span class="pv-l" style="width:${o}%"></span>`, n = (o) => `<span class="pv-col">${o}</span>`, r = (o) => `<span class="pv-row">${o}</span>`, l = n(i + s(100) + s(88));
|
|
5147
|
+
return t === "img-left" ? `<span class="pv">${r(e + l)}${s(100)}${s(72)}</span>` : t === "img-right" ? `<span class="pv">${r(l + e)}${s(100)}${s(72)}</span>` : t === "img-top" ? `<span class="pv pv-c">${e}${i}${s(100)}${s(72)}</span>` : `<span class="pv pv-c">${i}${s(100)}${s(72)}${e}</span>`;
|
|
4986
5148
|
}
|
|
4987
5149
|
buildTemplatePickInto(t, e) {
|
|
4988
5150
|
const i = document.createElement("div");
|
|
4989
|
-
i.className = "tplpick",
|
|
5151
|
+
i.className = "tplpick", Tt.forEach((s) => {
|
|
4990
5152
|
const n = document.createElement("button");
|
|
4991
|
-
n.type = "button", n.className = "tpltile", n.title = this.t(
|
|
5153
|
+
n.type = "button", n.className = "tpltile", n.title = this.t(Et[s]), n.innerHTML = this.tplPreviewHTML(s) + `<span class="tpllbl">${this.t(Et[s])}</span>`, n.addEventListener("click", () => {
|
|
4992
5154
|
this.closePop(), this.insertTemplate(s), e == null || e();
|
|
4993
5155
|
}), i.appendChild(n);
|
|
4994
5156
|
}), t.appendChild(i);
|
|
@@ -5007,15 +5169,15 @@ let Hi = (j = class {
|
|
|
5007
5169
|
}
|
|
5008
5170
|
renderTplCtxButtons() {
|
|
5009
5171
|
const t = this.tplCtx, e = this.tplActive;
|
|
5010
|
-
!t || !e || (t.innerHTML = "",
|
|
5011
|
-
const s = this.ctxBtn(
|
|
5172
|
+
!t || !e || (t.innerHTML = "", Tt.forEach((i) => {
|
|
5173
|
+
const s = this.ctxBtn(Bi[i], this.t(Et[i]), () => this.setTplLayout(i));
|
|
5012
5174
|
s.classList.toggle("on", e.classList.contains("tpl-" + i)), t.appendChild(s);
|
|
5013
5175
|
}), t.append(this.ctxSep(), this.ctxBtn(h.trash, this.t("deltemplate"), () => this.removeTemplate())), this.positionTplCtx());
|
|
5014
5176
|
}
|
|
5015
5177
|
setTplLayout(t) {
|
|
5016
5178
|
const e = this.tplActive;
|
|
5017
5179
|
if (!e) return;
|
|
5018
|
-
|
|
5180
|
+
Tt.forEach((n) => e.classList.remove("tpl-" + n)), e.classList.add("tpl-" + t);
|
|
5019
5181
|
const i = e.querySelector(":scope > .tpl-media"), s = e.querySelector(":scope > .tpl-text");
|
|
5020
5182
|
i && s && (t === "img-center" ? e.appendChild(i) : e.insertBefore(i, s)), this.renderTplCtxButtons(), this.positionImgPhCtx(), this.positionImageHandles(), this.onChange();
|
|
5021
5183
|
}
|
|
@@ -5047,7 +5209,7 @@ let Hi = (j = class {
|
|
|
5047
5209
|
/* ---------------------------------------------------------- table resize */
|
|
5048
5210
|
clearTableHandles() {
|
|
5049
5211
|
var t, e, i, s, n;
|
|
5050
|
-
(t = this.tblCorner) == null || t.remove(), this.tblCorner = null, this.tblColBars.forEach((
|
|
5212
|
+
(t = this.tblCorner) == null || t.remove(), this.tblCorner = null, this.tblColBars.forEach((r) => r.remove()), this.tblColBars = [], (e = this.tblCtx) == null || e.remove(), this.tblCtx = null, (i = this.tblCellMark) == null || i.remove(), this.tblCellMark = null, (s = this.tblOpMark) == null || s.remove(), this.tblOpMark = null, this.tblOpMarkKind = null, (n = this.tblActive) == null || n.classList.remove("tbl-selected"), this.tblActive = null;
|
|
5051
5213
|
}
|
|
5052
5214
|
/** Blue outline around the cell that holds the caret, so it is clear
|
|
5053
5215
|
which cell / row / column the table operations will target. */
|
|
@@ -5074,8 +5236,8 @@ let Hi = (j = class {
|
|
|
5074
5236
|
return;
|
|
5075
5237
|
}
|
|
5076
5238
|
this.tblOpMark || (this.tblOpMark = document.createElement("div"), this.tblOpMark.className = "tbl-opmark", document.body.appendChild(this.tblOpMark));
|
|
5077
|
-
const i = this.tblActive.getBoundingClientRect(), s = e.getBoundingClientRect(), n = e.parentElement.getBoundingClientRect(),
|
|
5078
|
-
this.tblOpMark.style.left =
|
|
5239
|
+
const i = this.tblActive.getBoundingClientRect(), s = e.getBoundingClientRect(), n = e.parentElement.getBoundingClientRect(), r = t === "row" ? n.left : s.left, l = t === "row" ? n.top : i.top, o = t === "row" ? n.width : s.width, a = t === "row" ? n.height : i.height;
|
|
5240
|
+
this.tblOpMark.style.left = r + scrollX + "px", this.tblOpMark.style.top = l + scrollY + "px", this.tblOpMark.style.width = o + "px", this.tblOpMark.style.height = a + "px";
|
|
5079
5241
|
}
|
|
5080
5242
|
/** Lowest allowed top for floating context toolbars — keeps them from
|
|
5081
5243
|
covering the editor menubar/toolbar when the target sits on the first line. */
|
|
@@ -5084,7 +5246,7 @@ let Hi = (j = class {
|
|
|
5084
5246
|
}
|
|
5085
5247
|
ctxBtn(t, e, i, s) {
|
|
5086
5248
|
const n = document.createElement("button");
|
|
5087
|
-
return n.type = "button", n.title = e, n.innerHTML = t, s && (n.dataset.id = s), n.addEventListener("mousedown", (
|
|
5249
|
+
return n.type = "button", n.title = e, n.innerHTML = t, s && (n.dataset.id = s), n.addEventListener("mousedown", (r) => r.preventDefault()), n.addEventListener("click", i), n;
|
|
5088
5250
|
}
|
|
5089
5251
|
ctxSep() {
|
|
5090
5252
|
const t = document.createElement("div");
|
|
@@ -5121,20 +5283,20 @@ let Hi = (j = class {
|
|
|
5121
5283
|
this.clearTableHandles();
|
|
5122
5284
|
return;
|
|
5123
5285
|
}
|
|
5124
|
-
const t = this.ed.getAttribute("dir") === "rtl", e = this.tblActive.getBoundingClientRect(), i = e.top + scrollY, s = e.left + scrollX, n = e.right + scrollX,
|
|
5125
|
-
if (this.tblCorner && (this.tblCorner.style.top =
|
|
5126
|
-
const o = this.tblCtx.offsetWidth,
|
|
5286
|
+
const t = this.ed.getAttribute("dir") === "rtl", e = this.tblActive.getBoundingClientRect(), i = e.top + scrollY, s = e.left + scrollX, n = e.right + scrollX, r = e.bottom + scrollY;
|
|
5287
|
+
if (this.tblCorner && (this.tblCorner.style.top = r - 5 + "px", this.tblCorner.style.left = (t ? s - 5 : n - 5) + "px", this.tblCorner.style.cursor = t ? "nesw-resize" : "nwse-resize"), this.tblCtx) {
|
|
5288
|
+
const o = this.tblCtx.offsetWidth, a = this.tblCtx.offsetHeight;
|
|
5127
5289
|
let d = s + (n - s) / 2 - o / 2;
|
|
5128
5290
|
d = Math.max(8 + scrollX, Math.min(d, scrollX + innerWidth - o - 8));
|
|
5129
|
-
let
|
|
5130
|
-
|
|
5291
|
+
let p = i - a - 8;
|
|
5292
|
+
p < this.ctxMinTop() && (p = r + 8), this.tblCtx.style.left = d + "px", this.tblCtx.style.top = p + "px";
|
|
5131
5293
|
}
|
|
5132
5294
|
this.tblColBars.forEach((o) => o.remove()), this.tblColBars = [];
|
|
5133
|
-
const
|
|
5134
|
-
if (
|
|
5135
|
-
for (let o = 0; o <
|
|
5136
|
-
const
|
|
5137
|
-
|
|
5295
|
+
const l = this.tblActive.rows[0];
|
|
5296
|
+
if (l)
|
|
5297
|
+
for (let o = 0; o < l.cells.length - 1; o++) {
|
|
5298
|
+
const a = l.cells[o].getBoundingClientRect(), d = (t ? a.left : a.right) + scrollX, p = document.createElement("div");
|
|
5299
|
+
p.className = "tbl-colbar", p.style.top = i + "px", p.style.left = d + "px", p.style.height = r - i + "px", document.body.appendChild(p), p.addEventListener("mousedown", (m) => this.startColBarDrag(m, o)), this.tblColBars.push(p);
|
|
5138
5300
|
}
|
|
5139
5301
|
this.positionCellMarker(), this.positionOpMark();
|
|
5140
5302
|
}
|
|
@@ -5152,29 +5314,29 @@ let Hi = (j = class {
|
|
|
5152
5314
|
const e = this.tblActive;
|
|
5153
5315
|
if (!e) return;
|
|
5154
5316
|
const i = this.ed.getAttribute("dir") === "rtl", s = t.clientX, n = e.getBoundingClientRect().width;
|
|
5155
|
-
e.style.tableLayout = e.style.tableLayout || "fixed", this.withNoTextSelect((
|
|
5156
|
-
const
|
|
5157
|
-
const d = i ? -(
|
|
5317
|
+
e.style.tableLayout = e.style.tableLayout || "fixed", this.withNoTextSelect((r) => {
|
|
5318
|
+
const l = (a) => {
|
|
5319
|
+
const d = i ? -(a.clientX - s) : a.clientX - s;
|
|
5158
5320
|
e.style.width = Math.max(60, Math.round(n + d)) + "px", this.positionTableHandles();
|
|
5159
5321
|
}, o = () => {
|
|
5160
|
-
window.removeEventListener("mousemove",
|
|
5322
|
+
window.removeEventListener("mousemove", l), window.removeEventListener("mouseup", o), r(), this.onChange();
|
|
5161
5323
|
};
|
|
5162
|
-
window.addEventListener("mousemove",
|
|
5324
|
+
window.addEventListener("mousemove", l), window.addEventListener("mouseup", o);
|
|
5163
5325
|
});
|
|
5164
5326
|
}
|
|
5165
5327
|
startColBarDrag(t, e) {
|
|
5166
5328
|
t.preventDefault(), t.stopPropagation();
|
|
5167
5329
|
const i = this.tblActive;
|
|
5168
5330
|
if (!i) return;
|
|
5169
|
-
const s = this.ed.getAttribute("dir") === "rtl", n = Array.from(i.rows),
|
|
5170
|
-
if (!
|
|
5171
|
-
const o = t.clientX,
|
|
5172
|
-
i.style.tableLayout = "fixed", this.withNoTextSelect((
|
|
5331
|
+
const s = this.ed.getAttribute("dir") === "rtl", n = Array.from(i.rows), r = n.map((p) => p.cells[e]).filter(Boolean), l = n.map((p) => p.cells[e + 1]).filter(Boolean);
|
|
5332
|
+
if (!r.length || !l.length) return;
|
|
5333
|
+
const o = t.clientX, a = r[0].getBoundingClientRect().width, d = l[0].getBoundingClientRect().width;
|
|
5334
|
+
i.style.tableLayout = "fixed", this.withNoTextSelect((p) => {
|
|
5173
5335
|
const m = (y) => {
|
|
5174
5336
|
const g = (s ? -1 : 1) * (y.clientX - o);
|
|
5175
|
-
|
|
5337
|
+
r.forEach((x) => x.style.width = Math.max(24, Math.round(a + g)) + "px"), l.forEach((x) => x.style.width = Math.max(24, Math.round(d - g)) + "px"), this.positionTableHandles();
|
|
5176
5338
|
}, b = () => {
|
|
5177
|
-
window.removeEventListener("mousemove", m), window.removeEventListener("mouseup", b),
|
|
5339
|
+
window.removeEventListener("mousemove", m), window.removeEventListener("mouseup", b), p(), this.onChange();
|
|
5178
5340
|
};
|
|
5179
5341
|
window.addEventListener("mousemove", m), window.addEventListener("mouseup", b);
|
|
5180
5342
|
});
|
|
@@ -5191,7 +5353,7 @@ let Hi = (j = class {
|
|
|
5191
5353
|
this.cancelImgHide(), this.imgHandles.forEach((i) => i.remove()), this.imgHandles = [], (t = this.imgCtx) == null || t.remove(), this.imgCtx = null, (e = this.imgActive) == null || e.classList.remove("img-selected"), this.imgActive = null;
|
|
5192
5354
|
}
|
|
5193
5355
|
selectImage(t) {
|
|
5194
|
-
this.imgActive !== t && (this.clearImageHandles(), this.imgActive = t, t.classList.add("img-selected"), this.imgHandles =
|
|
5356
|
+
this.imgActive !== t && (this.clearImageHandles(), this.imgActive = t, t.classList.add("img-selected"), this.imgHandles = Pi.map((e) => {
|
|
5195
5357
|
const i = document.createElement("div");
|
|
5196
5358
|
return i.className = "img-handle img-handle-" + e, i.dataset.corner = e, i.addEventListener("mousedown", (s) => this.startImageResizeDrag(s, e)), i.addEventListener("mouseenter", () => this.cancelImgHide()), i.addEventListener("mouseleave", () => this.scheduleImgHide()), document.body.appendChild(i), i;
|
|
5197
5359
|
}), this.imgCtx = this.buildImageCtxToolbar(t), this.positionImageHandles());
|
|
@@ -5201,18 +5363,18 @@ let Hi = (j = class {
|
|
|
5201
5363
|
e.className = "imgctx", e.dir = this.dir();
|
|
5202
5364
|
const i = () => {
|
|
5203
5365
|
var d;
|
|
5204
|
-
const
|
|
5205
|
-
(d = this.imgCtx) == null || d.replaceWith(
|
|
5206
|
-
}, s = (
|
|
5207
|
-
this.setImageAlign(t,
|
|
5208
|
-
}, n = t.style.float === "left",
|
|
5209
|
-
const b = this.ctxBtn(
|
|
5210
|
-
return b.classList.toggle("on",
|
|
5366
|
+
const a = this.buildImageCtxToolbar(t);
|
|
5367
|
+
(d = this.imgCtx) == null || d.replaceWith(a), this.imgCtx = a, this.positionImageHandles();
|
|
5368
|
+
}, s = (a) => {
|
|
5369
|
+
this.setImageAlign(t, a), i();
|
|
5370
|
+
}, n = t.style.float === "left", r = t.style.float === "right", l = !n && !r && t.style.marginLeft === "auto" && t.style.marginRight === "auto", o = (a, d, p, m) => {
|
|
5371
|
+
const b = this.ctxBtn(a, d, m);
|
|
5372
|
+
return b.classList.toggle("on", p), b;
|
|
5211
5373
|
};
|
|
5212
5374
|
return e.append(
|
|
5213
5375
|
o(h.alignleft, this.t("alignleft"), n, () => s("left")),
|
|
5214
|
-
o(h.aligncenter, this.t("aligncenter"),
|
|
5215
|
-
o(h.alignright, this.t("alignright"),
|
|
5376
|
+
o(h.aligncenter, this.t("aligncenter"), l, () => s("center")),
|
|
5377
|
+
o(h.alignright, this.t("alignright"), r, () => s("right")),
|
|
5216
5378
|
this.ctxSep(),
|
|
5217
5379
|
o(h.rotateleft, this.t("rotateleft"), !1, () => {
|
|
5218
5380
|
this.rotateImage(t, -90), i();
|
|
@@ -5229,10 +5391,10 @@ let Hi = (j = class {
|
|
|
5229
5391
|
}),
|
|
5230
5392
|
this.ctxSep(),
|
|
5231
5393
|
o(h.trash, this.t("deleteimg"), !1, () => {
|
|
5232
|
-
const
|
|
5233
|
-
|
|
5394
|
+
const a = t.closest(".tpl-media");
|
|
5395
|
+
a && this.ed.contains(a) ? t.outerHTML = this.imgPhHTML() : t.remove(), this.clearImageHandles(), this.onChange();
|
|
5234
5396
|
})
|
|
5235
|
-
), e.addEventListener("mousedown", (
|
|
5397
|
+
), e.addEventListener("mousedown", (a) => a.preventDefault()), e.addEventListener("mouseenter", () => this.cancelImgHide()), e.addEventListener("mouseleave", () => this.scheduleImgHide()), document.body.appendChild(e), e;
|
|
5236
5398
|
}
|
|
5237
5399
|
setImageAlign(t, e) {
|
|
5238
5400
|
t.style.float = "", t.style.display = "", t.style.marginLeft = "", t.style.marginRight = "", t.style.marginBottom = "", e === "left" ? (t.style.float = "left", t.style.marginInlineEnd = "1em", t.style.marginBottom = "0.5em") : e === "right" ? (t.style.float = "right", t.style.marginInlineStart = "1em", t.style.marginBottom = "0.5em") : (t.style.display = "block", t.style.marginLeft = "auto", t.style.marginRight = "auto"), this.onChange();
|
|
@@ -5254,21 +5416,21 @@ let Hi = (j = class {
|
|
|
5254
5416
|
this.clearImageHandles();
|
|
5255
5417
|
return;
|
|
5256
5418
|
}
|
|
5257
|
-
const t = this.imgActive.getBoundingClientRect(), e = t.top + scrollY, i = t.left + scrollX, s = t.right + scrollX, n = t.bottom + scrollY,
|
|
5419
|
+
const t = this.imgActive.getBoundingClientRect(), e = t.top + scrollY, i = t.left + scrollX, s = t.right + scrollX, n = t.bottom + scrollY, r = {
|
|
5258
5420
|
nw: [i, e],
|
|
5259
5421
|
ne: [s, e],
|
|
5260
5422
|
sw: [i, n],
|
|
5261
5423
|
se: [s, n]
|
|
5262
5424
|
};
|
|
5263
|
-
if (this.imgHandles.forEach((
|
|
5264
|
-
const [o,
|
|
5265
|
-
|
|
5425
|
+
if (this.imgHandles.forEach((l) => {
|
|
5426
|
+
const [o, a] = r[l.dataset.corner];
|
|
5427
|
+
l.style.left = o - 5 + "px", l.style.top = a - 5 + "px";
|
|
5266
5428
|
}), this.imgCtx) {
|
|
5267
|
-
const
|
|
5268
|
-
let
|
|
5269
|
-
|
|
5429
|
+
const l = this.imgCtx.offsetWidth, o = this.imgCtx.offsetHeight;
|
|
5430
|
+
let a = i + (s - i) / 2 - l / 2;
|
|
5431
|
+
a = Math.max(8 + scrollX, Math.min(a, scrollX + innerWidth - l - 8));
|
|
5270
5432
|
let d = e - o - 8;
|
|
5271
|
-
d < this.ctxMinTop() && (d = n + 8), this.imgCtx.style.left =
|
|
5433
|
+
d < this.ctxMinTop() && (d = n + 8), this.imgCtx.style.left = a + "px", this.imgCtx.style.top = d + "px";
|
|
5272
5434
|
}
|
|
5273
5435
|
}
|
|
5274
5436
|
startImageResizeDrag(t, e) {
|
|
@@ -5276,14 +5438,16 @@ let Hi = (j = class {
|
|
|
5276
5438
|
const i = this.imgActive;
|
|
5277
5439
|
if (!i) return;
|
|
5278
5440
|
this.cancelImgHide();
|
|
5279
|
-
const s = t.clientX, n = i.getBoundingClientRect().width,
|
|
5280
|
-
this.withNoTextSelect((
|
|
5441
|
+
const s = t.clientX, n = i.getBoundingClientRect().width, r = e === "nw" || e === "sw" ? -1 : 1;
|
|
5442
|
+
this.withNoTextSelect((l) => {
|
|
5281
5443
|
const o = (d) => {
|
|
5282
|
-
i.style.width = Math.max(24, Math.round(n +
|
|
5283
|
-
},
|
|
5284
|
-
window.removeEventListener("mousemove", o), window.removeEventListener("mouseup",
|
|
5444
|
+
i.style.width = Math.max(24, Math.round(n + r * (d.clientX - s))) + "px", i.style.height = "auto", this.positionImageHandles();
|
|
5445
|
+
}, a = () => {
|
|
5446
|
+
window.removeEventListener("mousemove", o), window.removeEventListener("mouseup", a), l();
|
|
5447
|
+
const d = parseInt(i.style.width, 10);
|
|
5448
|
+
d > 0 && !i.closest(".tpl-media") && (i.setAttribute("width", String(d)), i.removeAttribute("height")), this.onChange();
|
|
5285
5449
|
};
|
|
5286
|
-
window.addEventListener("mousemove", o), window.addEventListener("mouseup",
|
|
5450
|
+
window.addEventListener("mousemove", o), window.addEventListener("mouseup", a);
|
|
5287
5451
|
});
|
|
5288
5452
|
}
|
|
5289
5453
|
/* ---------------------------------------------------------- selection bubble toolbar */
|
|
@@ -5322,7 +5486,7 @@ let Hi = (j = class {
|
|
|
5322
5486
|
this.selCtx || (this.selCtx = this.buildSelToolbar()), this.positionSelToolbar(e);
|
|
5323
5487
|
}
|
|
5324
5488
|
buildSelToolbar() {
|
|
5325
|
-
var
|
|
5489
|
+
var l;
|
|
5326
5490
|
const t = document.createElement("div");
|
|
5327
5491
|
t.className = "selctx", t.dir = this.dir();
|
|
5328
5492
|
const e = this.ctxBtn(
|
|
@@ -5330,8 +5494,8 @@ let Hi = (j = class {
|
|
|
5330
5494
|
this.t("forecolor"),
|
|
5331
5495
|
() => this.colorMenu(e, "fore")
|
|
5332
5496
|
), i = this.ctxBtn(h.backcolor, this.t("backcolor"), () => this.colorMenu(i, "back"));
|
|
5333
|
-
(
|
|
5334
|
-
const s = this.ctxBtn(h.caseic, this.t("changecase"), () => this.caseMenu(s)), n = this.ctxBtn(h.lineheight, this.t("lineheight"), () => this.lineHeightMenu(n)),
|
|
5497
|
+
(l = i.querySelector("svg")) == null || l.insertAdjacentHTML("afterend", '<span class="colorbar" data-cb="back"></span>');
|
|
5498
|
+
const s = this.ctxBtn(h.caseic, this.t("changecase"), () => this.caseMenu(s)), n = this.ctxBtn(h.lineheight, this.t("lineheight"), () => this.lineHeightMenu(n)), r = this.ctxBtn(h.wordspacing, this.t("wordspacing"), () => this.wordSpacingMenu(r));
|
|
5335
5499
|
return t.append(
|
|
5336
5500
|
this.ctxBtn(h.bold, this.t("bold"), () => this.exec("bold"), "bold"),
|
|
5337
5501
|
this.ctxBtn(h.italic, this.t("italic"), () => this.exec("italic"), "italic"),
|
|
@@ -5346,16 +5510,16 @@ let Hi = (j = class {
|
|
|
5346
5510
|
this.ctxBtn(h.link, this.t("linkttl"), () => this.linkDlg()),
|
|
5347
5511
|
s,
|
|
5348
5512
|
n,
|
|
5349
|
-
|
|
5513
|
+
r
|
|
5350
5514
|
), t.addEventListener("mousedown", (o) => o.preventDefault()), document.body.appendChild(t), this.syncColorSwatches(t), t;
|
|
5351
5515
|
}
|
|
5352
5516
|
positionSelToolbar(t) {
|
|
5353
5517
|
if (!this.selCtx) return;
|
|
5354
|
-
const e = t.getBoundingClientRect(), i = e.top + scrollY, s = e.left + scrollX, n = e.right + scrollX,
|
|
5355
|
-
let
|
|
5356
|
-
|
|
5518
|
+
const e = t.getBoundingClientRect(), i = e.top + scrollY, s = e.left + scrollX, n = e.right + scrollX, r = e.bottom + scrollY, l = this.selCtx.offsetWidth, o = this.selCtx.offsetHeight;
|
|
5519
|
+
let a = s + (n - s) / 2 - l / 2;
|
|
5520
|
+
a = Math.max(8 + scrollX, Math.min(a, scrollX + innerWidth - l - 8));
|
|
5357
5521
|
let d = i - o - 8;
|
|
5358
|
-
d < this.ctxMinTop() && (d =
|
|
5522
|
+
d < this.ctxMinTop() && (d = r + 8), this.selCtx.style.left = a + "px", this.selCtx.style.top = d + "px";
|
|
5359
5523
|
}
|
|
5360
5524
|
repositionSelToolbar() {
|
|
5361
5525
|
if (!this.selCtx) return;
|
|
@@ -5388,9 +5552,9 @@ let Hi = (j = class {
|
|
|
5388
5552
|
return t > 0 ? t + "px" : "";
|
|
5389
5553
|
}
|
|
5390
5554
|
refreshState() {
|
|
5391
|
-
var o,
|
|
5555
|
+
var o, a, d;
|
|
5392
5556
|
const t = window.getSelection(), e = t ? this.ed.contains(t.anchorNode) : !1, i = this.currentBlock();
|
|
5393
|
-
[this.toolbar, this.selCtx].filter(Boolean).forEach((
|
|
5557
|
+
[this.toolbar, this.selCtx].filter(Boolean).forEach((p) => {
|
|
5394
5558
|
[
|
|
5395
5559
|
"bold",
|
|
5396
5560
|
"italic",
|
|
@@ -5403,22 +5567,22 @@ let Hi = (j = class {
|
|
|
5403
5567
|
"insertOrderedList",
|
|
5404
5568
|
"insertUnorderedList"
|
|
5405
5569
|
].forEach((b) => {
|
|
5406
|
-
const y =
|
|
5570
|
+
const y = p.querySelector(`[data-id=${b}]`);
|
|
5407
5571
|
y && y.classList.toggle("on", e && document.queryCommandState(b));
|
|
5408
5572
|
}), ["h2", "h3", "blockquote"].forEach((b) => {
|
|
5409
|
-
const y =
|
|
5573
|
+
const y = p.querySelector(`[data-id=${b}]`);
|
|
5410
5574
|
y && y.classList.toggle("on", e && i === b);
|
|
5411
5575
|
});
|
|
5412
|
-
const m =
|
|
5576
|
+
const m = p.querySelector("[data-id=code]");
|
|
5413
5577
|
m && m.classList.toggle("on", e && !!this.closestInlineCode());
|
|
5414
5578
|
});
|
|
5415
|
-
const n = t ? this.closestBlock(t.anchorNode) : null,
|
|
5416
|
-
(
|
|
5417
|
-
const
|
|
5418
|
-
const y = this.toolbar.querySelector(`[data-id=${
|
|
5579
|
+
const n = t ? this.closestBlock(t.anchorNode) : null, r = ((o = n == null ? void 0 : n.closest("[dir]")) == null ? void 0 : o.getAttribute("dir")) || this.ed.getAttribute("dir") || this.dir();
|
|
5580
|
+
(a = this.toolbar.querySelector("[data-id=ltr]")) == null || a.classList.toggle("on", e && r === "ltr"), (d = this.toolbar.querySelector("[data-id=rtl]")) == null || d.classList.toggle("on", e && r === "rtl");
|
|
5581
|
+
const l = (p, m, b) => {
|
|
5582
|
+
const y = this.toolbar.querySelector(`[data-id=${p}] .lbl`);
|
|
5419
5583
|
y && (y.textContent = m || b || "", y.classList.toggle("empty", !m));
|
|
5420
5584
|
};
|
|
5421
|
-
|
|
5585
|
+
l("fontsel", this.currentFont()), l("sizesel", this.currentSize().replace("px", "")), e && l("blocksel", ne.some((p) => p[0] === i) ? this.blockLabel(i) : this.t("para")), this.sbWords.textContent = this.countWords() + " " + this.t("words");
|
|
5422
5586
|
}
|
|
5423
5587
|
countWords() {
|
|
5424
5588
|
const t = (this.ed.textContent || "").trim();
|
|
@@ -5433,118 +5597,175 @@ let Hi = (j = class {
|
|
|
5433
5597
|
if (s && !i) {
|
|
5434
5598
|
const n = new FileReader();
|
|
5435
5599
|
n.onload = () => {
|
|
5436
|
-
|
|
5600
|
+
this.insertImageHTML(n.result), this.onChange();
|
|
5437
5601
|
}, n.readAsDataURL(s.getAsFile());
|
|
5438
5602
|
return;
|
|
5439
5603
|
}
|
|
5440
5604
|
if (!i) {
|
|
5441
|
-
const n = e.getData("text/plain"),
|
|
5442
|
-
if (
|
|
5443
|
-
document.execCommand("insertHTML", !1, this.videoEmbedHTML(
|
|
5605
|
+
const n = e.getData("text/plain"), r = /^\S+$/.test(n.trim()) ? this.videoEmbedUrl(n.trim()) : null;
|
|
5606
|
+
if (r) {
|
|
5607
|
+
document.execCommand("insertHTML", !1, this.videoEmbedHTML(r)), this.onChange();
|
|
5444
5608
|
return;
|
|
5445
5609
|
}
|
|
5446
5610
|
}
|
|
5447
|
-
i ?
|
|
5611
|
+
i ? this.pasteRichHTML(i, e, s) : (document.execCommand("insertHTML", !1, yi(e.getData("text/plain"))), this.onChange());
|
|
5612
|
+
}
|
|
5613
|
+
/** Rich-HTML paste. Before the (untouched) paste engine runs, pictures Word left
|
|
5614
|
+
* behind as unreadable file:// refs are pulled out of the clipboard's RTF flavor
|
|
5615
|
+
* and inlined — the same pairing TinyMCE PowerPaste does for
|
|
5616
|
+
* powerpaste_allow_local_images. Everything the engine already handled is
|
|
5617
|
+
* unaffected: with no RTF, or no recoverable picture, the HTML reaches it
|
|
5618
|
+
* byte-identical to before. */
|
|
5619
|
+
pasteRichHTML(t, e, i) {
|
|
5620
|
+
let s = [];
|
|
5621
|
+
const n = e.getData("text/rtf");
|
|
5622
|
+
if (n) {
|
|
5623
|
+
const r = Mi(t, n);
|
|
5624
|
+
t = r.html, s = r.injected;
|
|
5625
|
+
}
|
|
5626
|
+
if (i && Li(t) === 1) {
|
|
5627
|
+
const r = i.getAsFile();
|
|
5628
|
+
if (r) {
|
|
5629
|
+
const l = t;
|
|
5630
|
+
this.saveSel();
|
|
5631
|
+
const o = new FileReader();
|
|
5632
|
+
o.onload = () => {
|
|
5633
|
+
const a = fe(l, [o.result]);
|
|
5634
|
+
this.finishRichPaste(a.html, s.concat(a.injected), !0);
|
|
5635
|
+
}, o.onerror = () => this.finishRichPaste(l, s, !0), o.readAsDataURL(r);
|
|
5636
|
+
return;
|
|
5637
|
+
}
|
|
5638
|
+
}
|
|
5639
|
+
this.finishRichPaste(t, s);
|
|
5640
|
+
}
|
|
5641
|
+
/** Hands recovered pictures to the host's imageUploadHandler when one is
|
|
5642
|
+
* configured (PowerPaste's automatic_uploads equivalent), then inserts. Without a
|
|
5643
|
+
* handler they stay inline base64, which is what PowerPaste does by default. */
|
|
5644
|
+
finishRichPaste(t, e, i = !1) {
|
|
5645
|
+
if (!this.imageUploadHandler || !e.length) {
|
|
5646
|
+
this.insertPastedHTML(t, i);
|
|
5647
|
+
return;
|
|
5648
|
+
}
|
|
5649
|
+
const s = this.imageUploadHandler, n = e.filter((r, l) => e.indexOf(r) === l);
|
|
5650
|
+
i || this.saveSel(), Promise.all(
|
|
5651
|
+
n.map((r, l) => {
|
|
5652
|
+
const o = ki(r, "pasted-image-" + (l + 1));
|
|
5653
|
+
return o ? s(o).catch((a) => {
|
|
5654
|
+
var d;
|
|
5655
|
+
return (d = this.onImageUploadError) == null || d.call(this, a, o), r;
|
|
5656
|
+
}) : Promise.resolve(r);
|
|
5657
|
+
})
|
|
5658
|
+
).then((r) => {
|
|
5659
|
+
let l = t;
|
|
5660
|
+
n.forEach((o, a) => {
|
|
5661
|
+
r[a] !== o && (l = l.split(o).join(r[a]));
|
|
5662
|
+
}), this.insertPastedHTML(l, !0);
|
|
5663
|
+
});
|
|
5664
|
+
}
|
|
5665
|
+
/** `deferred` means the insert is happening after an async hop, so the caret the
|
|
5666
|
+
* paste started from has to be put back first. */
|
|
5667
|
+
insertPastedHTML(t, e = !1) {
|
|
5668
|
+
e && this.restoreSel(), document.execCommand("insertHTML", !1, bi(t, this.dir())), e && this.saveSel(), this.onChange();
|
|
5448
5669
|
}
|
|
5449
5670
|
/* ---------------------------------------------------------- init */
|
|
5450
5671
|
initUI() {
|
|
5451
5672
|
this.closePop(), this.closeDlg(), this.clearTableHandles(), this.clearImgPlaceholderSel(), this.clearVphPlaceholderSel(), this.clearVidHandles(), this.clearCodeSel(), this.shell.dir = this.dir(), this.ed.dir = this.dir(), this.options.menubar ? this.buildMenubar() : this.menubar.style.display = "none", this.options.toolbar ? this.buildToolbar() : this.toolbar.style.display = "none", this.sbHelp.textContent = this.t("statushelp"), this.refreshState();
|
|
5452
5673
|
}
|
|
5453
5674
|
}, j.instanceCounter = 0, j.TBR_COLLAPSE_MAX = 992, j);
|
|
5454
|
-
const
|
|
5455
|
-
({ value:
|
|
5456
|
-
const o = z(null),
|
|
5457
|
-
return b.current = e, y.current = i,
|
|
5675
|
+
const Wi = Ve(
|
|
5676
|
+
({ value: u, defaultValue: t, onChange: e, onReady: i, className: s, style: n, ...r }, l) => {
|
|
5677
|
+
const o = z(null), a = z(null), d = z(!1), p = z(u ?? t), m = z(null), b = z(e), y = z(i);
|
|
5678
|
+
return b.current = e, y.current = i, ze(l, () => ({
|
|
5458
5679
|
getContent: () => {
|
|
5459
5680
|
var g;
|
|
5460
|
-
return ((g =
|
|
5681
|
+
return ((g = a.current) == null ? void 0 : g.getContent()) ?? "";
|
|
5461
5682
|
},
|
|
5462
5683
|
getContentForEmail: () => {
|
|
5463
5684
|
var g;
|
|
5464
|
-
return ((g =
|
|
5685
|
+
return ((g = a.current) == null ? void 0 : g.getContentForEmail()) ?? "";
|
|
5465
5686
|
},
|
|
5466
5687
|
setContent: (g) => {
|
|
5467
5688
|
var x;
|
|
5468
|
-
return (x =
|
|
5689
|
+
return (x = a.current) == null ? void 0 : x.setContent(g);
|
|
5469
5690
|
},
|
|
5470
5691
|
insertContent: (g) => {
|
|
5471
5692
|
var x;
|
|
5472
|
-
return (x =
|
|
5693
|
+
return (x = a.current) == null ? void 0 : x.insertContent(g);
|
|
5473
5694
|
},
|
|
5474
5695
|
setLanguage: (g) => {
|
|
5475
5696
|
var x;
|
|
5476
|
-
return (x =
|
|
5697
|
+
return (x = a.current) == null ? void 0 : x.setLanguage(g);
|
|
5477
5698
|
},
|
|
5478
5699
|
focus: () => {
|
|
5479
5700
|
var g;
|
|
5480
|
-
return (g =
|
|
5701
|
+
return (g = a.current) == null ? void 0 : g.focus();
|
|
5481
5702
|
},
|
|
5482
5703
|
destroy: () => {
|
|
5483
5704
|
var g;
|
|
5484
|
-
return (g =
|
|
5705
|
+
return (g = a.current) == null ? void 0 : g.destroy();
|
|
5485
5706
|
},
|
|
5486
5707
|
importWordFile: (g) => {
|
|
5487
5708
|
var x;
|
|
5488
|
-
return ((x =
|
|
5709
|
+
return ((x = a.current) == null ? void 0 : x.importWordFile(g)) ?? Promise.resolve();
|
|
5489
5710
|
},
|
|
5490
5711
|
restoreDraft: () => {
|
|
5491
5712
|
var g;
|
|
5492
|
-
return ((g =
|
|
5713
|
+
return ((g = a.current) == null ? void 0 : g.restoreDraft()) ?? !1;
|
|
5493
5714
|
},
|
|
5494
5715
|
getRevisions: () => {
|
|
5495
5716
|
var g;
|
|
5496
|
-
return ((g =
|
|
5717
|
+
return ((g = a.current) == null ? void 0 : g.getRevisions()) ?? [];
|
|
5497
5718
|
}
|
|
5498
|
-
})),
|
|
5719
|
+
})), lt(() => {
|
|
5499
5720
|
if (!o.current) return;
|
|
5500
|
-
const g = new
|
|
5721
|
+
const g = new ji({
|
|
5501
5722
|
target: o.current,
|
|
5502
|
-
initialContent:
|
|
5723
|
+
initialContent: p.current,
|
|
5503
5724
|
onChange: (x) => {
|
|
5504
5725
|
var w;
|
|
5505
|
-
d.current = !0,
|
|
5726
|
+
d.current = !0, p.current = x, (w = b.current) == null || w.call(b, x);
|
|
5506
5727
|
},
|
|
5507
5728
|
onReady: (x) => {
|
|
5508
5729
|
var w;
|
|
5509
5730
|
return (w = y.current) == null ? void 0 : w.call(y, x);
|
|
5510
5731
|
},
|
|
5511
|
-
...
|
|
5732
|
+
...r
|
|
5512
5733
|
});
|
|
5513
|
-
return
|
|
5514
|
-
g.destroy(),
|
|
5734
|
+
return a.current = g, () => {
|
|
5735
|
+
g.destroy(), a.current = null;
|
|
5515
5736
|
};
|
|
5516
|
-
}, []),
|
|
5737
|
+
}, []), lt(() => {
|
|
5517
5738
|
var g, x;
|
|
5518
|
-
if (
|
|
5739
|
+
if (u !== void 0 && u !== p.current) {
|
|
5519
5740
|
if (d.current) {
|
|
5520
5741
|
d.current = !1;
|
|
5521
5742
|
return;
|
|
5522
5743
|
}
|
|
5523
5744
|
if ((g = o.current) != null && g.contains(document.activeElement)) {
|
|
5524
|
-
m.current =
|
|
5745
|
+
m.current = u;
|
|
5525
5746
|
return;
|
|
5526
5747
|
}
|
|
5527
|
-
|
|
5748
|
+
p.current = u, (x = a.current) == null || x.setContent(u);
|
|
5528
5749
|
}
|
|
5529
|
-
}, [
|
|
5750
|
+
}, [u]), lt(() => {
|
|
5530
5751
|
const g = o.current;
|
|
5531
5752
|
if (!g) return;
|
|
5532
5753
|
const x = (w) => {
|
|
5533
|
-
var
|
|
5754
|
+
var A;
|
|
5534
5755
|
if (m.current === null) return;
|
|
5535
5756
|
const E = w.relatedTarget;
|
|
5536
5757
|
if (E && g.contains(E)) return;
|
|
5537
5758
|
const I = m.current;
|
|
5538
|
-
m.current = null,
|
|
5759
|
+
m.current = null, p.current = I, (A = a.current) == null || A.setContent(I);
|
|
5539
5760
|
};
|
|
5540
5761
|
return g.addEventListener("focusout", x), () => g.removeEventListener("focusout", x);
|
|
5541
|
-
}, []),
|
|
5762
|
+
}, []), lt(() => {
|
|
5542
5763
|
var g;
|
|
5543
|
-
|
|
5544
|
-
}, [
|
|
5764
|
+
r.language && ((g = a.current) == null || g.setLanguage(r.language));
|
|
5765
|
+
}, [r.language]), /* @__PURE__ */ Ge.jsx("div", { ref: o, className: s, style: n });
|
|
5545
5766
|
}
|
|
5546
5767
|
);
|
|
5547
|
-
|
|
5768
|
+
Wi.displayName = "FableEditor";
|
|
5548
5769
|
export {
|
|
5549
|
-
|
|
5770
|
+
Wi as FableEditor
|
|
5550
5771
|
};
|