tinymce-rails 6.1.0 → 6.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/source/tinymce/tinymce.js +140 -142
- data/lib/tinymce/rails/configuration.rb +5 -0
- data/lib/tinymce/rails/configuration_file.rb +2 -1
- data/lib/tinymce/rails/version.rb +2 -2
- data/vendor/assets/javascripts/tinymce/models/dom/model.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/advlist/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/anchor/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/autolink/plugin.js +2 -2
- data/vendor/assets/javascripts/tinymce/plugins/autoresize/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/autosave/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/charmap/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/code/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/codesample/plugin.js +2 -2
- data/vendor/assets/javascripts/tinymce/plugins/directionality/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/emoticons/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/fullscreen/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/help/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/image/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/importcss/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/insertdatetime/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/link/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/lists/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/media/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/nonbreaking/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/pagebreak/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/preview/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/quickbars/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/save/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/searchreplace/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/table/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/template/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/visualblocks/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/visualchars/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/wordcount/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/themes/silver/theme.js +2 -2
- data/vendor/assets/javascripts/tinymce/tinymce.js +2 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1baae60d37594fc70751b6cfbb80edb53a259fecd1e7371710b23ac24bcb4f69
|
4
|
+
data.tar.gz: 591e22769b36ae6eb3f817c326b6964033bd6aad442c045b18ef891bb42e4d57
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ce3445fcf5dc095d2016ec82984364b713e52db1a4f011174c6120934358b7d0085be56df491e4fdb2cb088695b288c1eb8c770124c1354611367decb3980893
|
7
|
+
data.tar.gz: 69969f7830db9a0eeb739d559b0fd202a2be20fc8d12277dcf501fee846b5daec6b1cb166a963d4a8f55d40da66b63cd10a9daa5210c581792e49f930a9379e2
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* TinyMCE version 6.1.
|
2
|
+
* TinyMCE version 6.1.1 (2022-07-27)
|
3
3
|
*/
|
4
4
|
|
5
5
|
(function () {
|
@@ -2239,6 +2239,79 @@
|
|
2239
2239
|
const isZwsp$1 = char => char === zeroWidth;
|
2240
2240
|
const removeZwsp = s => s.replace(/\uFEFF/g, '');
|
2241
2241
|
|
2242
|
+
const descendants$1 = (scope, predicate) => {
|
2243
|
+
let result = [];
|
2244
|
+
each$f(children(scope), x => {
|
2245
|
+
if (predicate(x)) {
|
2246
|
+
result = result.concat([x]);
|
2247
|
+
}
|
2248
|
+
result = result.concat(descendants$1(x, predicate));
|
2249
|
+
});
|
2250
|
+
return result;
|
2251
|
+
};
|
2252
|
+
|
2253
|
+
const descendants = (scope, selector) => all(selector, scope);
|
2254
|
+
|
2255
|
+
const NodeValue = (is, name) => {
|
2256
|
+
const get = element => {
|
2257
|
+
if (!is(element)) {
|
2258
|
+
throw new Error('Can only get ' + name + ' value of a ' + name + ' node');
|
2259
|
+
}
|
2260
|
+
return getOption(element).getOr('');
|
2261
|
+
};
|
2262
|
+
const getOption = element => is(element) ? Optional.from(element.dom.nodeValue) : Optional.none();
|
2263
|
+
const set = (element, value) => {
|
2264
|
+
if (!is(element)) {
|
2265
|
+
throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');
|
2266
|
+
}
|
2267
|
+
element.dom.nodeValue = value;
|
2268
|
+
};
|
2269
|
+
return {
|
2270
|
+
get,
|
2271
|
+
getOption,
|
2272
|
+
set
|
2273
|
+
};
|
2274
|
+
};
|
2275
|
+
|
2276
|
+
const api$1 = NodeValue(isText$a, 'text');
|
2277
|
+
const get$3 = element => api$1.get(element);
|
2278
|
+
const getOption = element => api$1.getOption(element);
|
2279
|
+
|
2280
|
+
const getLastChildren$1 = elm => {
|
2281
|
+
const children = [];
|
2282
|
+
let rawNode = elm.dom;
|
2283
|
+
while (rawNode) {
|
2284
|
+
children.push(SugarElement.fromDom(rawNode));
|
2285
|
+
rawNode = rawNode.lastChild;
|
2286
|
+
}
|
2287
|
+
return children;
|
2288
|
+
};
|
2289
|
+
const removeTrailingBr = elm => {
|
2290
|
+
const allBrs = descendants(elm, 'br');
|
2291
|
+
const brs = filter$6(getLastChildren$1(elm).slice(-1), isBr$5);
|
2292
|
+
if (allBrs.length === brs.length) {
|
2293
|
+
each$f(brs, remove$6);
|
2294
|
+
}
|
2295
|
+
};
|
2296
|
+
const createPaddingBr = () => {
|
2297
|
+
const br = SugarElement.fromTag('br');
|
2298
|
+
set$2(br, 'data-mce-bogus', '1');
|
2299
|
+
return br;
|
2300
|
+
};
|
2301
|
+
const fillWithPaddingBr = elm => {
|
2302
|
+
empty(elm);
|
2303
|
+
append$1(elm, createPaddingBr());
|
2304
|
+
};
|
2305
|
+
const trimBlockTrailingBr = elm => {
|
2306
|
+
lastChild(elm).each(lastChild => {
|
2307
|
+
prevSibling(lastChild).each(lastChildPrevSibling => {
|
2308
|
+
if (isBlock$2(elm) && isBr$5(lastChild) && isBlock$2(lastChildPrevSibling)) {
|
2309
|
+
remove$6(lastChild);
|
2310
|
+
}
|
2311
|
+
});
|
2312
|
+
});
|
2313
|
+
};
|
2314
|
+
|
2242
2315
|
const ZWSP$1 = zeroWidth;
|
2243
2316
|
const isZwsp = isZwsp$1;
|
2244
2317
|
const trim$1 = removeZwsp;
|
@@ -2302,17 +2375,12 @@
|
|
2302
2375
|
}
|
2303
2376
|
return container.data.charAt(pos.offset() - 1) === ZWSP$1 || pos.isAtEnd() && isCaretContainerInline(container.nextSibling);
|
2304
2377
|
};
|
2305
|
-
const createBogusBr = () => {
|
2306
|
-
const br = document.createElement('br');
|
2307
|
-
br.setAttribute('data-mce-bogus', '1');
|
2308
|
-
return br;
|
2309
|
-
};
|
2310
2378
|
const insertBlock = (blockName, node, before) => {
|
2311
2379
|
const doc = node.ownerDocument;
|
2312
2380
|
const blockNode = doc.createElement(blockName);
|
2313
2381
|
blockNode.setAttribute('data-mce-caret', before ? 'before' : 'after');
|
2314
2382
|
blockNode.setAttribute('data-mce-bogus', 'all');
|
2315
|
-
blockNode.appendChild(
|
2383
|
+
blockNode.appendChild(createPaddingBr().dom);
|
2316
2384
|
const parentNode = node.parentNode;
|
2317
2385
|
if (!before) {
|
2318
2386
|
if (node.nextSibling) {
|
@@ -5037,19 +5105,6 @@
|
|
5037
5105
|
};
|
5038
5106
|
};
|
5039
5107
|
|
5040
|
-
const descendants$1 = (scope, predicate) => {
|
5041
|
-
let result = [];
|
5042
|
-
each$f(children(scope), x => {
|
5043
|
-
if (predicate(x)) {
|
5044
|
-
result = result.concat([x]);
|
5045
|
-
}
|
5046
|
-
result = result.concat(descendants$1(x, predicate));
|
5047
|
-
});
|
5048
|
-
return result;
|
5049
|
-
};
|
5050
|
-
|
5051
|
-
const descendants = (scope, selector) => all(selector, scope);
|
5052
|
-
|
5053
5108
|
const annotation = constant('mce-annotation');
|
5054
5109
|
const dataAnnotation = constant('data-mce-annotation');
|
5055
5110
|
const dataAnnotationId = constant('data-mce-annotation-uid');
|
@@ -8461,21 +8516,21 @@
|
|
8461
8516
|
return [node].concat(getFirstChildren(child));
|
8462
8517
|
});
|
8463
8518
|
};
|
8464
|
-
const getLastChildren
|
8519
|
+
const getLastChildren = node => {
|
8465
8520
|
return lastChild(node).fold(constant([node]), child => {
|
8466
8521
|
if (name(child) === 'br') {
|
8467
8522
|
return prevSibling(child).map(sibling => {
|
8468
|
-
return [node].concat(getLastChildren
|
8523
|
+
return [node].concat(getLastChildren(sibling));
|
8469
8524
|
}).getOr([]);
|
8470
8525
|
} else {
|
8471
|
-
return [node].concat(getLastChildren
|
8526
|
+
return [node].concat(getLastChildren(child));
|
8472
8527
|
}
|
8473
8528
|
});
|
8474
8529
|
};
|
8475
8530
|
const hasAllContentsSelected = (elm, rng) => {
|
8476
8531
|
return lift2(getStartNode(rng), getEndNode(rng), (startNode, endNode) => {
|
8477
8532
|
const start = find$2(getFirstChildren(elm), curry(eq, startNode));
|
8478
|
-
const end = find$2(getLastChildren
|
8533
|
+
const end = find$2(getLastChildren(elm), curry(eq, endNode));
|
8479
8534
|
return start.isSome() && end.isSome();
|
8480
8535
|
}).getOr(false);
|
8481
8536
|
};
|
@@ -8540,31 +8595,6 @@
|
|
8540
8595
|
selection.moveToBookmark(bookmark);
|
8541
8596
|
};
|
8542
8597
|
|
8543
|
-
const NodeValue = (is, name) => {
|
8544
|
-
const get = element => {
|
8545
|
-
if (!is(element)) {
|
8546
|
-
throw new Error('Can only get ' + name + ' value of a ' + name + ' node');
|
8547
|
-
}
|
8548
|
-
return getOption(element).getOr('');
|
8549
|
-
};
|
8550
|
-
const getOption = element => is(element) ? Optional.from(element.dom.nodeValue) : Optional.none();
|
8551
|
-
const set = (element, value) => {
|
8552
|
-
if (!is(element)) {
|
8553
|
-
throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');
|
8554
|
-
}
|
8555
|
-
element.dom.nodeValue = value;
|
8556
|
-
};
|
8557
|
-
return {
|
8558
|
-
get,
|
8559
|
-
getOption,
|
8560
|
-
set
|
8561
|
-
};
|
8562
|
-
};
|
8563
|
-
|
8564
|
-
const api$1 = NodeValue(isText$a, 'text');
|
8565
|
-
const get$3 = element => api$1.get(element);
|
8566
|
-
const getOption = element => api$1.getOption(element);
|
8567
|
-
|
8568
8598
|
const validBlocks = [
|
8569
8599
|
'pre[class*=language-][contenteditable="false"]',
|
8570
8600
|
'figure.image',
|
@@ -11103,36 +11133,6 @@
|
|
11103
11133
|
const isBeforeContentEditableFalse = matchesElementPosition(true, isCefNode);
|
11104
11134
|
const isAfterContentEditableFalse = matchesElementPosition(false, isCefNode);
|
11105
11135
|
|
11106
|
-
const getLastChildren = elm => {
|
11107
|
-
const children = [];
|
11108
|
-
let rawNode = elm.dom;
|
11109
|
-
while (rawNode) {
|
11110
|
-
children.push(SugarElement.fromDom(rawNode));
|
11111
|
-
rawNode = rawNode.lastChild;
|
11112
|
-
}
|
11113
|
-
return children;
|
11114
|
-
};
|
11115
|
-
const removeTrailingBr = elm => {
|
11116
|
-
const allBrs = descendants(elm, 'br');
|
11117
|
-
const brs = filter$6(getLastChildren(elm).slice(-1), isBr$5);
|
11118
|
-
if (allBrs.length === brs.length) {
|
11119
|
-
each$f(brs, remove$6);
|
11120
|
-
}
|
11121
|
-
};
|
11122
|
-
const fillWithPaddingBr = elm => {
|
11123
|
-
empty(elm);
|
11124
|
-
append$1(elm, SugarElement.fromHtml('<br data-mce-bogus="1">'));
|
11125
|
-
};
|
11126
|
-
const trimBlockTrailingBr = elm => {
|
11127
|
-
lastChild(elm).each(lastChild => {
|
11128
|
-
prevSibling(lastChild).each(lastChildPrevSibling => {
|
11129
|
-
if (isBlock$2(elm) && isBr$5(lastChild) && isBlock$2(lastChildPrevSibling)) {
|
11130
|
-
remove$6(lastChild);
|
11131
|
-
}
|
11132
|
-
});
|
11133
|
-
});
|
11134
|
-
};
|
11135
|
-
|
11136
11136
|
const dropLast = xs => xs.slice(0, -1);
|
11137
11137
|
const parentsUntil = (start, root, predicate) => {
|
11138
11138
|
if (contains(root, start)) {
|
@@ -11478,15 +11478,9 @@
|
|
11478
11478
|
return Optional.none();
|
11479
11479
|
}
|
11480
11480
|
};
|
11481
|
-
const
|
11482
|
-
const body = editor.getBody();
|
11483
|
-
const node = body.firstChild && editor.dom.isBlock(body.firstChild) ? body.firstChild : body;
|
11484
|
-
editor.selection.setCursorLocation(node, 0);
|
11485
|
-
};
|
11486
|
-
const paddEmptyBody = editor => {
|
11481
|
+
const paddEmptyBody = (editor, moveSelection = true) => {
|
11487
11482
|
if (editor.dom.isEmpty(editor.getBody())) {
|
11488
|
-
editor.setContent('');
|
11489
|
-
placeCaretInEmptyBody(editor);
|
11483
|
+
editor.setContent('', { no_selection: !moveSelection });
|
11490
11484
|
}
|
11491
11485
|
};
|
11492
11486
|
const willDeleteLastPositionInElement = (forward, fromPos, elm) => lift2(firstPositionIn(elm), lastPositionIn(elm), (firstPos, lastPos) => {
|
@@ -11504,10 +11498,13 @@
|
|
11504
11498
|
return child.bind(freefallRtl).orThunk(() => Optional.some(root));
|
11505
11499
|
};
|
11506
11500
|
const deleteRangeContents = (editor, rng, root, moveSelection = true) => {
|
11501
|
+
var _a;
|
11507
11502
|
rng.deleteContents();
|
11508
11503
|
const lastNode = freefallRtl(root).getOr(root);
|
11509
|
-
const lastBlock = SugarElement.fromDom(editor.dom.getParent(lastNode.dom, editor.dom.isBlock));
|
11510
|
-
if (
|
11504
|
+
const lastBlock = SugarElement.fromDom((_a = editor.dom.getParent(lastNode.dom, editor.dom.isBlock)) !== null && _a !== void 0 ? _a : root.dom);
|
11505
|
+
if (lastBlock.dom === editor.getBody()) {
|
11506
|
+
paddEmptyBody(editor, moveSelection);
|
11507
|
+
} else if (isEmpty$2(lastBlock)) {
|
11511
11508
|
fillWithPaddingBr(lastBlock);
|
11512
11509
|
if (moveSelection) {
|
11513
11510
|
editor.selection.setCursorLocation(lastBlock.dom, 0);
|
@@ -12135,14 +12132,22 @@
|
|
12135
12132
|
return insertMiddle(liTarget, liElms, rootNode, rng);
|
12136
12133
|
};
|
12137
12134
|
|
12138
|
-
const
|
12139
|
-
const shouldPasteContentOnly = (fragment, parentNode) => {
|
12135
|
+
const mergeableWrappedElements = ['pre'];
|
12136
|
+
const shouldPasteContentOnly = (dom, fragment, parentNode, root) => {
|
12137
|
+
var _a;
|
12140
12138
|
const firstNode = fragment.firstChild;
|
12141
|
-
const
|
12142
|
-
const
|
12143
|
-
const
|
12144
|
-
const
|
12145
|
-
|
12139
|
+
const lastNode = fragment.lastChild;
|
12140
|
+
const last = lastNode.attr('data-mce-type') === 'bookmark' ? lastNode.prev : lastNode;
|
12141
|
+
const isPastingSingleElement = firstNode === last;
|
12142
|
+
const isWrappedElement = contains$2(mergeableWrappedElements, firstNode.name);
|
12143
|
+
if (isPastingSingleElement && isWrappedElement) {
|
12144
|
+
const isContentEditable = firstNode.attr('contenteditable') !== 'false';
|
12145
|
+
const isPastingInTheSameBlockTag = ((_a = dom.getParent(parentNode, dom.isBlock)) === null || _a === void 0 ? void 0 : _a.nodeName.toLowerCase()) === firstNode.name;
|
12146
|
+
const isPastingInContentEditable = Optional.from(getContentEditableRoot$1(root, parentNode)).forall(isContentEditableTrue$5);
|
12147
|
+
return isContentEditable && isPastingInTheSameBlockTag && isPastingInContentEditable;
|
12148
|
+
} else {
|
12149
|
+
return false;
|
12150
|
+
}
|
12146
12151
|
};
|
12147
12152
|
const isTableCell$1 = isTableCell$5;
|
12148
12153
|
const isTableCellContentSelected = (dom, rng, cell) => {
|
@@ -12273,6 +12278,7 @@
|
|
12273
12278
|
}
|
12274
12279
|
};
|
12275
12280
|
const insertHtmlAtCaret = (editor, value, details) => {
|
12281
|
+
var _a;
|
12276
12282
|
let parentNode;
|
12277
12283
|
let rng, node;
|
12278
12284
|
const selection = editor.selection;
|
@@ -12311,8 +12317,8 @@
|
|
12311
12317
|
selection.setRng(rng);
|
12312
12318
|
return value;
|
12313
12319
|
}
|
12314
|
-
if (details.paste === true && shouldPasteContentOnly(fragment, parentNode)) {
|
12315
|
-
fragment.firstChild.unwrap();
|
12320
|
+
if (details.paste === true && shouldPasteContentOnly(dom, fragment, parentNode, editor.getBody())) {
|
12321
|
+
(_a = fragment.firstChild) === null || _a === void 0 ? void 0 : _a.unwrap();
|
12316
12322
|
}
|
12317
12323
|
markFragmentElements(fragment);
|
12318
12324
|
node = fragment.lastChild;
|
@@ -16044,6 +16050,7 @@
|
|
16044
16050
|
};
|
16045
16051
|
const setupPurify = (settings, schema) => {
|
16046
16052
|
const purify$1 = purify();
|
16053
|
+
const specialElements = schema.getSpecialElements();
|
16047
16054
|
const validate = settings.validate;
|
16048
16055
|
let uid = 0;
|
16049
16056
|
purify$1.addHook('uponSanitizeElement', (ele, evt) => {
|
@@ -16056,6 +16063,7 @@
|
|
16056
16063
|
return;
|
16057
16064
|
}
|
16058
16065
|
const element = SugarElement.fromDom(ele);
|
16066
|
+
const lcTagName = tagName.toLowerCase();
|
16059
16067
|
const isInternalElement = has$1(element, internalElementAttr);
|
16060
16068
|
const bogus = get$9(element, 'data-mce-bogus');
|
16061
16069
|
if (!isInternalElement && isString(bogus)) {
|
@@ -16066,9 +16074,13 @@
|
|
16066
16074
|
}
|
16067
16075
|
return;
|
16068
16076
|
}
|
16069
|
-
const rule = schema.getElementRule(
|
16077
|
+
const rule = schema.getElementRule(lcTagName);
|
16070
16078
|
if (validate && !rule) {
|
16071
|
-
|
16079
|
+
if (has$2(specialElements, lcTagName)) {
|
16080
|
+
remove$6(element);
|
16081
|
+
} else {
|
16082
|
+
unwrap(element);
|
16083
|
+
}
|
16072
16084
|
return;
|
16073
16085
|
} else {
|
16074
16086
|
evt.allowedTags[tagName] = true;
|
@@ -16090,7 +16102,7 @@
|
|
16090
16102
|
unwrap(element);
|
16091
16103
|
return;
|
16092
16104
|
}
|
16093
|
-
if (rule.outputName && rule.outputName !==
|
16105
|
+
if (rule.outputName && rule.outputName !== lcTagName) {
|
16094
16106
|
mutate(element, rule.outputName);
|
16095
16107
|
}
|
16096
16108
|
}
|
@@ -21246,6 +21258,7 @@
|
|
21246
21258
|
}
|
21247
21259
|
return false;
|
21248
21260
|
};
|
21261
|
+
const createRootBlock = editor => editor.dom.create(getForcedRootBlock(editor), getForcedRootBlockAttrs(editor));
|
21249
21262
|
const addRootBlocks = editor => {
|
21250
21263
|
const dom = editor.dom, selection = editor.selection;
|
21251
21264
|
const schema = editor.schema, blockElements = schema.getBlockElements();
|
@@ -21276,7 +21289,7 @@
|
|
21276
21289
|
continue;
|
21277
21290
|
}
|
21278
21291
|
if (!rootBlockNode) {
|
21279
|
-
rootBlockNode =
|
21292
|
+
rootBlockNode = createRootBlock(editor);
|
21280
21293
|
node.parentNode.insertBefore(rootBlockNode, node);
|
21281
21294
|
wrapped = true;
|
21282
21295
|
}
|
@@ -21295,6 +21308,16 @@
|
|
21295
21308
|
editor.nodeChanged();
|
21296
21309
|
}
|
21297
21310
|
};
|
21311
|
+
const insertEmptyLine = (editor, root, insertBlock) => {
|
21312
|
+
const block = SugarElement.fromDom(createRootBlock(editor));
|
21313
|
+
const br = createPaddingBr();
|
21314
|
+
append$1(block, br);
|
21315
|
+
insertBlock(root, block);
|
21316
|
+
const rng = document.createRange();
|
21317
|
+
rng.setStartBefore(br.dom);
|
21318
|
+
rng.setEndBefore(br.dom);
|
21319
|
+
return rng;
|
21320
|
+
};
|
21298
21321
|
const setup$n = editor => {
|
21299
21322
|
editor.on('NodeChange', curry(addRootBlocks, editor));
|
21300
21323
|
};
|
@@ -21475,27 +21498,6 @@
|
|
21475
21498
|
});
|
21476
21499
|
|
21477
21500
|
const isTarget = node => contains$2(['figcaption'], name(node));
|
21478
|
-
const rangeBefore = target => {
|
21479
|
-
const rng = document.createRange();
|
21480
|
-
rng.setStartBefore(target.dom);
|
21481
|
-
rng.setEndBefore(target.dom);
|
21482
|
-
return rng;
|
21483
|
-
};
|
21484
|
-
const insertElement = (root, elm, forward) => {
|
21485
|
-
if (forward) {
|
21486
|
-
append$1(root, elm);
|
21487
|
-
} else {
|
21488
|
-
prepend(root, elm);
|
21489
|
-
}
|
21490
|
-
};
|
21491
|
-
const insertEmptyLine = (root, forward, blockName, attrs) => {
|
21492
|
-
const block = SugarElement.fromTag(blockName);
|
21493
|
-
const br = SugarElement.fromTag('br');
|
21494
|
-
setAll$1(block, attrs);
|
21495
|
-
append$1(block, br);
|
21496
|
-
insertElement(root, block, forward);
|
21497
|
-
return rangeBefore(br);
|
21498
|
-
};
|
21499
21501
|
const getClosestTargetBlock = (pos, root) => {
|
21500
21502
|
const isRoot = curry(eq, root);
|
21501
21503
|
return closest$4(SugarElement.fromDom(pos.container()), isBlock$2, isRoot).filter(isTarget);
|
@@ -21504,11 +21506,10 @@
|
|
21504
21506
|
const moveCaretToNewEmptyLine = (editor, forward) => {
|
21505
21507
|
const root = SugarElement.fromDom(editor.getBody());
|
21506
21508
|
const pos = CaretPosition.fromRangeStart(editor.selection.getRng());
|
21507
|
-
const rootBlock = getForcedRootBlock(editor);
|
21508
|
-
const rootBlockAttrs = getForcedRootBlockAttrs(editor);
|
21509
21509
|
return getClosestTargetBlock(pos, root).exists(() => {
|
21510
21510
|
if (isAtFirstOrLastLine(root, forward, pos)) {
|
21511
|
-
const
|
21511
|
+
const insertFn = forward ? append$1 : prepend;
|
21512
|
+
const rng = insertEmptyLine(editor, root, insertFn);
|
21512
21513
|
editor.selection.setRng(rng);
|
21513
21514
|
return true;
|
21514
21515
|
} else {
|
@@ -21739,22 +21740,12 @@
|
|
21739
21740
|
const getClosestBelowPosition = (root, table, start) => findClosestPositionInBelowCell(table, start).orThunk(() => head(start.getClientRects()).bind(rect => findClosestHorizontalPositionFromPoint(getPositionsBelow(root, CaretPosition.after(table)), rect.left))).getOr(CaretPosition.after(table));
|
21740
21741
|
const getTable = (previous, pos) => {
|
21741
21742
|
const node = pos.getNode(previous);
|
21742
|
-
return
|
21743
|
+
return isTable$3(node) ? Optional.some(node) : Optional.none();
|
21743
21744
|
};
|
21744
21745
|
const renderBlock = (down, editor, table) => {
|
21745
|
-
const forcedRootBlock = getForcedRootBlock(editor);
|
21746
21746
|
editor.undoManager.transact(() => {
|
21747
|
-
const
|
21748
|
-
|
21749
|
-
append$1(element, SugarElement.fromTag('br'));
|
21750
|
-
if (down) {
|
21751
|
-
after$4(SugarElement.fromDom(table), element);
|
21752
|
-
} else {
|
21753
|
-
before$3(SugarElement.fromDom(table), element);
|
21754
|
-
}
|
21755
|
-
const rng = editor.dom.createRng();
|
21756
|
-
rng.setStart(element.dom, 0);
|
21757
|
-
rng.setEnd(element.dom, 0);
|
21747
|
+
const insertFn = down ? after$4 : before$3;
|
21748
|
+
const rng = insertEmptyLine(editor, SugarElement.fromDom(table), insertFn);
|
21758
21749
|
moveToRange(editor, rng);
|
21759
21750
|
});
|
21760
21751
|
};
|
@@ -26514,7 +26505,14 @@
|
|
26514
26505
|
editor.contentDocument = iframe.contentDocument;
|
26515
26506
|
contentBodyLoaded(editor);
|
26516
26507
|
});
|
26517
|
-
|
26508
|
+
if (Env.browser.isFirefox()) {
|
26509
|
+
const doc = editor.getDoc();
|
26510
|
+
doc.open();
|
26511
|
+
doc.write(editor.iframeHTML);
|
26512
|
+
doc.close();
|
26513
|
+
} else {
|
26514
|
+
iframe.srcdoc = editor.iframeHTML;
|
26515
|
+
}
|
26518
26516
|
} else {
|
26519
26517
|
contentBodyLoaded(editor);
|
26520
26518
|
}
|
@@ -28791,8 +28789,8 @@
|
|
28791
28789
|
documentBaseURL: null,
|
28792
28790
|
suffix: null,
|
28793
28791
|
majorVersion: '6',
|
28794
|
-
minorVersion: '1.
|
28795
|
-
releaseDate: '2022-
|
28792
|
+
minorVersion: '1.1',
|
28793
|
+
releaseDate: '2022-07-27',
|
28796
28794
|
i18n: I18n,
|
28797
28795
|
activeEditor: null,
|
28798
28796
|
focusedEditor: null,
|
@@ -98,10 +98,15 @@ module TinyMCE::Rails
|
|
98
98
|
FUNCTION_REGEX =~ value.to_s
|
99
99
|
end
|
100
100
|
|
101
|
+
def valid_property_name?(key)
|
102
|
+
key =~ /^(?![0-9])[a-zA-Z0-9$_]+$/
|
103
|
+
end
|
104
|
+
|
101
105
|
def preprocess_options(options)
|
102
106
|
result = {}
|
103
107
|
|
104
108
|
options.each do |key, value|
|
109
|
+
key = "'#{key}'" unless valid_property_name?(key)
|
105
110
|
result[key] = preprocess_option(key, value)
|
106
111
|
end
|
107
112
|
|