tinymce-rails 6.1.0 → 6.1.1
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.
- 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
|
|