tinymce-rails 7.1.0 → 7.2.0
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 +253 -103
- 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/accordion/plugin.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 +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/autoresize/plugin.js +2 -2
- 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 +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/directionality/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/emoticons/plugin.js +2 -2
- 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 +2 -2
- 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 +2 -2
- 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 +2 -2
- data/vendor/assets/javascripts/tinymce/plugins/table/plugin.js +2 -2
- 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 +2 -2
- data/vendor/assets/javascripts/tinymce/skins/ui/oxide/skin.css +1 -1
- data/vendor/assets/javascripts/tinymce/skins/ui/oxide/skin.js +1 -1
- data/vendor/assets/javascripts/tinymce/skins/ui/oxide/skin.min.css +1 -1
- data/vendor/assets/javascripts/tinymce/skins/ui/oxide-dark/skin.css +1 -1
- data/vendor/assets/javascripts/tinymce/skins/ui/oxide-dark/skin.js +1 -1
- data/vendor/assets/javascripts/tinymce/skins/ui/oxide-dark/skin.min.css +1 -1
- data/vendor/assets/javascripts/tinymce/skins/ui/tinymce-5/skin.css +1 -1
- data/vendor/assets/javascripts/tinymce/skins/ui/tinymce-5/skin.js +1 -1
- data/vendor/assets/javascripts/tinymce/skins/ui/tinymce-5/skin.min.css +1 -1
- data/vendor/assets/javascripts/tinymce/skins/ui/tinymce-5-dark/skin.css +1 -1
- data/vendor/assets/javascripts/tinymce/skins/ui/tinymce-5-dark/skin.js +1 -1
- data/vendor/assets/javascripts/tinymce/skins/ui/tinymce-5-dark/skin.min.css +1 -1
- data/vendor/assets/javascripts/tinymce/themes/silver/theme.js +2 -2
- data/vendor/assets/javascripts/tinymce/tinymce.d.ts +4 -0
- data/vendor/assets/javascripts/tinymce/tinymce.js +2 -2
- metadata +7 -7
- /data/vendor/assets/javascripts/tinymce/langs/{README.md → readme.md} +0 -0
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* TinyMCE version 7.
|
2
|
+
* TinyMCE version 7.2.0 (2024-06-19)
|
3
3
|
*/
|
4
4
|
|
5
5
|
(function () {
|
@@ -1392,7 +1392,6 @@
|
|
1392
1392
|
const firstChild = element => child$1(element, 0);
|
1393
1393
|
const lastChild = element => child$1(element, element.dom.childNodes.length - 1);
|
1394
1394
|
const childNodesCount = element => element.dom.childNodes.length;
|
1395
|
-
const hasChildNodes = element => element.dom.hasChildNodes();
|
1396
1395
|
|
1397
1396
|
const getHead = doc => {
|
1398
1397
|
const b = doc.dom.head;
|
@@ -3016,7 +3015,7 @@
|
|
3016
3015
|
addAttrs('a', 'download');
|
3017
3016
|
addAttrs('link script img', 'crossorigin');
|
3018
3017
|
addAttrs('img', 'loading');
|
3019
|
-
addAttrs('iframe', 'sandbox seamless allow allowfullscreen loading');
|
3018
|
+
addAttrs('iframe', 'sandbox seamless allow allowfullscreen loading referrerpolicy');
|
3020
3019
|
}
|
3021
3020
|
if (type !== 'html4') {
|
3022
3021
|
each$e([
|
@@ -3564,8 +3563,8 @@
|
|
3564
3563
|
return hexColour(value);
|
3565
3564
|
};
|
3566
3565
|
|
3567
|
-
const rgbRegex = /^\s*rgb\s*\(\s*(\d+)\s
|
3568
|
-
const rgbaRegex = /^\s*rgba\s*\(\s*(\d+)\s
|
3566
|
+
const rgbRegex = /^\s*rgb\s*\(\s*(\d+)\s*[,\s]\s*(\d+)\s*[,\s]\s*(\d+)\s*\)\s*$/i;
|
3567
|
+
const rgbaRegex = /^\s*rgba\s*\(\s*(\d+)\s*[,\s]\s*(\d+)\s*[,\s]\s*(\d+)\s*[,\s]\s*((?:\d?\.\d+|\d+)%?)\s*\)\s*$/i;
|
3569
3568
|
const rgbaColour = (red, green, blue, alpha) => ({
|
3570
3569
|
red,
|
3571
3570
|
green,
|
@@ -3579,10 +3578,15 @@
|
|
3579
3578
|
const a = parseFloat(alpha);
|
3580
3579
|
return rgbaColour(r, g, b, a);
|
3581
3580
|
};
|
3582
|
-
const
|
3583
|
-
if (
|
3584
|
-
return
|
3581
|
+
const getColorFormat = colorString => {
|
3582
|
+
if (rgbRegex.test(colorString)) {
|
3583
|
+
return 'rgb';
|
3584
|
+
} else if (rgbaRegex.test(colorString)) {
|
3585
|
+
return 'rgba';
|
3585
3586
|
}
|
3587
|
+
return 'other';
|
3588
|
+
};
|
3589
|
+
const fromString = rgbaString => {
|
3586
3590
|
const rgbMatch = rgbRegex.exec(rgbaString);
|
3587
3591
|
if (rgbMatch !== null) {
|
3588
3592
|
return Optional.some(fromStringValues(rgbMatch[1], rgbMatch[2], rgbMatch[3], '1'));
|
@@ -3601,7 +3605,6 @@
|
|
3601
3605
|
const urlOrStrRegExp = /(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi;
|
3602
3606
|
const styleRegExp = /\s*([^:]+):\s*([^;]+);?/g;
|
3603
3607
|
const trimRightRegExp = /\s+$/;
|
3604
|
-
const rgbaRegExp = /rgba *\(/i;
|
3605
3608
|
const encodingLookup = {};
|
3606
3609
|
let validStyles;
|
3607
3610
|
let invalidStyles;
|
@@ -3755,7 +3758,7 @@
|
|
3755
3758
|
} else if (name === 'color' || name === 'background-color') {
|
3756
3759
|
value = value.toLowerCase();
|
3757
3760
|
}
|
3758
|
-
if (
|
3761
|
+
if (getColorFormat(value) === 'rgb') {
|
3759
3762
|
fromString(value).each(rgba => {
|
3760
3763
|
value = rgbaToHexString(toString(rgba)).toLowerCase();
|
3761
3764
|
});
|
@@ -6526,7 +6529,7 @@
|
|
6526
6529
|
forward
|
6527
6530
|
};
|
6528
6531
|
};
|
6529
|
-
const getBookmark$
|
6532
|
+
const getBookmark$3 = (selection, type, normalized = false) => {
|
6530
6533
|
if (type === 2) {
|
6531
6534
|
return getOffsetBookmark(trim$2, normalized, selection);
|
6532
6535
|
} else if (type === 3) {
|
@@ -8604,8 +8607,8 @@
|
|
8604
8607
|
return Optional.none();
|
8605
8608
|
};
|
8606
8609
|
|
8607
|
-
const getBookmark$
|
8608
|
-
return getBookmark$
|
8610
|
+
const getBookmark$2 = (selection, type, normalized) => {
|
8611
|
+
return getBookmark$3(selection, type, normalized);
|
8609
8612
|
};
|
8610
8613
|
const moveToBookmark = (selection, bookmark) => {
|
8611
8614
|
resolve(selection, bookmark).each(({range, forward}) => {
|
@@ -9441,7 +9444,7 @@
|
|
9441
9444
|
|
9442
9445
|
const BookmarkManager = selection => {
|
9443
9446
|
return {
|
9444
|
-
getBookmark: curry(getBookmark$
|
9447
|
+
getBookmark: curry(getBookmark$2, selection),
|
9445
9448
|
moveToBookmark: curry(moveToBookmark, selection)
|
9446
9449
|
};
|
9447
9450
|
};
|
@@ -10719,7 +10722,7 @@
|
|
10719
10722
|
const rng = !selection || selection.rangeCount === 0 ? Optional.none() : Optional.from(selection.getRangeAt(0));
|
10720
10723
|
return rng.map(nativeRangeToSelectionRange);
|
10721
10724
|
};
|
10722
|
-
const getBookmark = root => {
|
10725
|
+
const getBookmark$1 = root => {
|
10723
10726
|
const win = defaultView(root);
|
10724
10727
|
return readRange(win.dom).filter(isRngInRoot(root));
|
10725
10728
|
};
|
@@ -10735,7 +10738,7 @@
|
|
10735
10738
|
}
|
10736
10739
|
};
|
10737
10740
|
const store = editor => {
|
10738
|
-
const newBookmark = shouldStore(editor) ? getBookmark(SugarElement.fromDom(editor.getBody())) : Optional.none();
|
10741
|
+
const newBookmark = shouldStore(editor) ? getBookmark$1(SugarElement.fromDom(editor.getBody())) : Optional.none();
|
10739
10742
|
editor.bookmark = newBookmark.isSome() ? newBookmark : editor.bookmark;
|
10740
10743
|
};
|
10741
10744
|
const getRng = editor => {
|
@@ -10966,15 +10969,21 @@
|
|
10966
10969
|
const body = editor.getBody();
|
10967
10970
|
let rng = selection.getRng();
|
10968
10971
|
editor.quirks.refreshContentEditable();
|
10969
|
-
|
10972
|
+
const restoreBookmark = editor => {
|
10970
10973
|
getRng(editor).each(bookmarkRng => {
|
10971
10974
|
editor.selection.setRng(bookmarkRng);
|
10972
10975
|
rng = bookmarkRng;
|
10973
10976
|
});
|
10977
|
+
};
|
10978
|
+
if (!hasFocus(editor) && editor.hasEditableRoot()) {
|
10979
|
+
restoreBookmark(editor);
|
10974
10980
|
}
|
10975
10981
|
const contentEditableHost = getContentEditableHost(editor, selection.getNode());
|
10976
10982
|
if (contentEditableHost && editor.dom.isChildOf(contentEditableHost, body)) {
|
10977
10983
|
focusBody(contentEditableHost);
|
10984
|
+
if (!editor.hasEditableRoot()) {
|
10985
|
+
restoreBookmark(editor);
|
10986
|
+
}
|
10978
10987
|
normalizeSelection(editor, rng);
|
10979
10988
|
activateEditor(editor);
|
10980
10989
|
return;
|
@@ -11734,7 +11743,6 @@
|
|
11734
11743
|
'background',
|
11735
11744
|
'background-attachment',
|
11736
11745
|
'background-clip',
|
11737
|
-
'background-color',
|
11738
11746
|
'background-image',
|
11739
11747
|
'background-origin',
|
11740
11748
|
'background-position',
|
@@ -11770,14 +11778,24 @@
|
|
11770
11778
|
nonInheritableStyles.add(style);
|
11771
11779
|
});
|
11772
11780
|
})();
|
11781
|
+
const conditionalNonInheritableStyles = new Set();
|
11782
|
+
(() => {
|
11783
|
+
const conditionalNonInheritableStylesArr = ['background-color'];
|
11784
|
+
each$e(conditionalNonInheritableStylesArr, style => {
|
11785
|
+
conditionalNonInheritableStyles.add(style);
|
11786
|
+
});
|
11787
|
+
})();
|
11773
11788
|
const shorthandStyleProps = [
|
11774
11789
|
'font',
|
11775
11790
|
'text-decoration',
|
11776
11791
|
'text-emphasis'
|
11777
11792
|
];
|
11778
|
-
const
|
11793
|
+
const getStyles$1 = (dom, node) => dom.parseStyle(dom.getAttrib(node, 'style'));
|
11794
|
+
const getStyleProps = (dom, node) => keys(getStyles$1(dom, node));
|
11779
11795
|
const isNonInheritableStyle = style => nonInheritableStyles.has(style);
|
11780
|
-
const
|
11796
|
+
const isConditionalNonInheritableStyle = style => conditionalNonInheritableStyles.has(style);
|
11797
|
+
const hasNonInheritableStyles = (dom, node) => exists(getStyleProps(dom, node), style => isNonInheritableStyle(style));
|
11798
|
+
const hasConditionalNonInheritableStyles = (dom, node) => hasNonInheritableStyles(dom, node) && exists(getStyleProps(dom, node), style => isConditionalNonInheritableStyle(style));
|
11781
11799
|
const getLonghandStyleProps = styles => filter$5(styles, style => exists(shorthandStyleProps, prop => startsWith(style, prop)));
|
11782
11800
|
const hasStyleConflict = (dom, node, parentNode) => {
|
11783
11801
|
const nodeStyleProps = getStyleProps(dom, node);
|
@@ -12504,7 +12522,7 @@
|
|
12504
12522
|
const rootElm = SugarElement.fromDom(editor.getBody());
|
12505
12523
|
return getParentCaption(rootElm, startElm).fold(() => deleteCaretCells(editor, forward, rootElm, startElm).orThunk(() => someIf(isBeforeOrAfterTable(editor, forward), noop)), fromCaption => deleteCaretCaption(editor, forward, rootElm, fromCaption));
|
12506
12524
|
};
|
12507
|
-
const backspaceDelete$
|
12525
|
+
const backspaceDelete$b = (editor, forward) => {
|
12508
12526
|
const startElm = SugarElement.fromDom(editor.selection.getStart(true));
|
12509
12527
|
const cells = getCellsFromEditor(editor);
|
12510
12528
|
return editor.selection.isCollapsed() && cells.length === 0 ? deleteCaret$3(editor, forward, startElm) : deleteRange$3(editor, startElm, cells);
|
@@ -13058,18 +13076,20 @@
|
|
13058
13076
|
if (merge) {
|
13059
13077
|
const root = editor.getBody();
|
13060
13078
|
const elementUtils = ElementUtils(editor);
|
13061
|
-
|
13062
|
-
|
13063
|
-
|
13064
|
-
|
13065
|
-
|
13066
|
-
|
13067
|
-
|
13068
|
-
|
13069
|
-
|
13070
|
-
|
13071
|
-
|
13072
|
-
|
13079
|
+
const fragmentSelector = '*[data-mce-fragment]';
|
13080
|
+
const fragments = dom.select(fragmentSelector);
|
13081
|
+
Tools.each(fragments, node => {
|
13082
|
+
const isInline = currentNode => isNonNullable(textInlineElements[currentNode.nodeName.toLowerCase()]);
|
13083
|
+
const hasOneChild = currentNode => currentNode.childNodes.length === 1;
|
13084
|
+
const hasNoNonInheritableStyles = currentNode => !(hasNonInheritableStyles(dom, currentNode) || hasConditionalNonInheritableStyles(dom, currentNode));
|
13085
|
+
if (hasNoNonInheritableStyles(node) && isInline(node) && hasOneChild(node)) {
|
13086
|
+
const styles = getStyleProps(dom, node);
|
13087
|
+
const isOverridden = (oldStyles, newStyles) => forall(oldStyles, style => contains$2(newStyles, style));
|
13088
|
+
const overriddenByAllChildren = childNode => hasOneChild(node) && dom.is(childNode, fragmentSelector) && isInline(childNode) && (childNode.nodeName === node.nodeName && isOverridden(styles, getStyleProps(dom, childNode)) || overriddenByAllChildren(childNode.children[0]));
|
13089
|
+
const identicalToParent = parentNode => isNonNullable(parentNode) && parentNode !== root && (elementUtils.compare(node, parentNode) || identicalToParent(parentNode.parentElement));
|
13090
|
+
const conflictWithInsertedParent = parentNode => isNonNullable(parentNode) && parentNode !== root && dom.is(parentNode, fragmentSelector) && (hasStyleConflict(dom, node, parentNode) || conflictWithInsertedParent(parentNode.parentElement));
|
13091
|
+
if (overriddenByAllChildren(node.children[0]) || identicalToParent(node.parentElement) && !conflictWithInsertedParent(node.parentElement)) {
|
13092
|
+
dom.remove(node, true);
|
13073
13093
|
}
|
13074
13094
|
}
|
13075
13095
|
});
|
@@ -17248,7 +17268,7 @@
|
|
17248
17268
|
const makeMap = Tools.makeMap, extend$1 = Tools.extend;
|
17249
17269
|
const transferChildren = (parent, nativeParent, specialElements, nsSanitizer) => {
|
17250
17270
|
const parentName = parent.name;
|
17251
|
-
const isSpecial = parentName in specialElements && parentName !== 'title' && parentName !== 'textarea';
|
17271
|
+
const isSpecial = parentName in specialElements && parentName !== 'title' && parentName !== 'textarea' && parentName !== 'noscript';
|
17252
17272
|
const childNodes = nativeParent.childNodes;
|
17253
17273
|
for (let ni = 0, nl = childNodes.length; ni < nl; ni++) {
|
17254
17274
|
const nativeChild = childNodes[ni];
|
@@ -19003,16 +19023,6 @@
|
|
19003
19023
|
}
|
19004
19024
|
}
|
19005
19025
|
});
|
19006
|
-
htmlParser.addNodeFilter('noscript', nodes => {
|
19007
|
-
var _a;
|
19008
|
-
let i = nodes.length;
|
19009
|
-
while (i--) {
|
19010
|
-
const node = nodes[i].firstChild;
|
19011
|
-
if (node) {
|
19012
|
-
node.value = Entities.decode((_a = node.value) !== null && _a !== void 0 ? _a : '');
|
19013
|
-
}
|
19014
|
-
}
|
19015
|
-
});
|
19016
19026
|
htmlParser.addNodeFilter('script,style', (nodes, name) => {
|
19017
19027
|
var _a;
|
19018
19028
|
const trim = value => {
|
@@ -21271,7 +21281,7 @@
|
|
21271
21281
|
};
|
21272
21282
|
const isEditable$1 = blockBoundary => isContentEditableFalse$b(blockBoundary.from.block.dom) === false && isContentEditableFalse$b(blockBoundary.to.block.dom) === false;
|
21273
21283
|
const hasValidBlocks = blockBoundary => {
|
21274
|
-
const isValidBlock = block => isTextBlock$2(block) || hasBlockAttr(block.dom);
|
21284
|
+
const isValidBlock = block => isTextBlock$2(block) || hasBlockAttr(block.dom) || isListItem$1(block);
|
21275
21285
|
return isValidBlock(blockBoundary.from.block) && isValidBlock(blockBoundary.to.block);
|
21276
21286
|
};
|
21277
21287
|
const skipLastBr = (schema, rootNode, forward, blockPosition) => {
|
@@ -21363,7 +21373,7 @@
|
|
21363
21373
|
};
|
21364
21374
|
const mergeBlocks = (rootNode, forward, block1, block2, schema) => forward ? mergeBlockInto(rootNode, block2, block1, schema) : mergeBlockInto(rootNode, block1, block2, schema);
|
21365
21375
|
|
21366
|
-
const backspaceDelete$
|
21376
|
+
const backspaceDelete$a = (editor, forward) => {
|
21367
21377
|
const rootNode = SugarElement.fromDom(editor.getBody());
|
21368
21378
|
const position = read$1(editor.schema, rootNode.dom, forward, editor.selection.getRng()).map(blockBoundary => () => {
|
21369
21379
|
mergeBlocks(rootNode, forward, blockBoundary.from.block, blockBoundary.to.block, editor.schema).each(pos => {
|
@@ -21410,7 +21420,7 @@
|
|
21410
21420
|
const rng = editor.selection.getRng();
|
21411
21421
|
return isEverythingSelected(rootNode, rng) ? emptyEditor(editor) : deleteRangeMergeBlocks(rootNode, editor.selection, editor.schema);
|
21412
21422
|
};
|
21413
|
-
const backspaceDelete$
|
21423
|
+
const backspaceDelete$9 = (editor, _forward) => editor.selection.isCollapsed() ? Optional.none() : deleteRange$2(editor);
|
21414
21424
|
|
21415
21425
|
const showCaret = (direction, editor, node, before, scrollIntoView) => Optional.from(editor._selectionOverrides.showCaret(direction, node, before, scrollIntoView));
|
21416
21426
|
const getNodeRange = node => {
|
@@ -21493,7 +21503,7 @@
|
|
21493
21503
|
}
|
21494
21504
|
return Optional.none();
|
21495
21505
|
};
|
21496
|
-
const backspaceDelete$
|
21506
|
+
const backspaceDelete$8 = (editor, forward) => deleteBoundaryText(editor, forward);
|
21497
21507
|
|
21498
21508
|
const getEdgeCefPosition = (editor, atStart) => {
|
21499
21509
|
const root = editor.getBody();
|
@@ -21632,7 +21642,7 @@
|
|
21632
21642
|
}
|
21633
21643
|
return true;
|
21634
21644
|
};
|
21635
|
-
const backspaceDelete$
|
21645
|
+
const backspaceDelete$7 = (editor, forward) => {
|
21636
21646
|
if (editor.selection.isCollapsed()) {
|
21637
21647
|
return backspaceDeleteCaret(editor, forward);
|
21638
21648
|
} else {
|
@@ -21640,6 +21650,98 @@
|
|
21640
21650
|
}
|
21641
21651
|
};
|
21642
21652
|
|
21653
|
+
const isTextEndpoint = endpoint => endpoint.hasOwnProperty('text');
|
21654
|
+
const isElementEndpoint = endpoint => endpoint.hasOwnProperty('marker');
|
21655
|
+
const getBookmark = (range, createMarker) => {
|
21656
|
+
const getEndpoint = (container, offset) => {
|
21657
|
+
if (isText$b(container)) {
|
21658
|
+
return {
|
21659
|
+
text: container,
|
21660
|
+
offset
|
21661
|
+
};
|
21662
|
+
} else {
|
21663
|
+
const marker = createMarker();
|
21664
|
+
const children = container.childNodes;
|
21665
|
+
if (offset < children.length) {
|
21666
|
+
container.insertBefore(marker, children[offset]);
|
21667
|
+
return {
|
21668
|
+
marker,
|
21669
|
+
before: true
|
21670
|
+
};
|
21671
|
+
} else {
|
21672
|
+
container.appendChild(marker);
|
21673
|
+
return {
|
21674
|
+
marker,
|
21675
|
+
before: false
|
21676
|
+
};
|
21677
|
+
}
|
21678
|
+
}
|
21679
|
+
};
|
21680
|
+
const end = getEndpoint(range.endContainer, range.endOffset);
|
21681
|
+
const start = getEndpoint(range.startContainer, range.startOffset);
|
21682
|
+
return {
|
21683
|
+
start,
|
21684
|
+
end
|
21685
|
+
};
|
21686
|
+
};
|
21687
|
+
const resolveBookmark = bm => {
|
21688
|
+
var _a, _b;
|
21689
|
+
const {start, end} = bm;
|
21690
|
+
const rng = new window.Range();
|
21691
|
+
if (isTextEndpoint(start)) {
|
21692
|
+
rng.setStart(start.text, start.offset);
|
21693
|
+
} else {
|
21694
|
+
if (isElementEndpoint(start)) {
|
21695
|
+
if (start.before) {
|
21696
|
+
rng.setStartBefore(start.marker);
|
21697
|
+
} else {
|
21698
|
+
rng.setStartAfter(start.marker);
|
21699
|
+
}
|
21700
|
+
(_a = start.marker.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(start.marker);
|
21701
|
+
}
|
21702
|
+
}
|
21703
|
+
if (isTextEndpoint(end)) {
|
21704
|
+
rng.setEnd(end.text, end.offset);
|
21705
|
+
} else {
|
21706
|
+
if (isElementEndpoint(end)) {
|
21707
|
+
if (end.before) {
|
21708
|
+
rng.setEndBefore(end.marker);
|
21709
|
+
} else {
|
21710
|
+
rng.setEndAfter(end.marker);
|
21711
|
+
}
|
21712
|
+
(_b = end.marker.parentNode) === null || _b === void 0 ? void 0 : _b.removeChild(end.marker);
|
21713
|
+
}
|
21714
|
+
}
|
21715
|
+
return rng;
|
21716
|
+
};
|
21717
|
+
|
21718
|
+
const backspaceDelete$6 = (editor, forward) => {
|
21719
|
+
var _a;
|
21720
|
+
const dom = editor.dom;
|
21721
|
+
const startBlock = dom.getParent(editor.selection.getStart(), dom.isBlock);
|
21722
|
+
const endBlock = dom.getParent(editor.selection.getEnd(), dom.isBlock);
|
21723
|
+
const body = editor.getBody();
|
21724
|
+
const startBlockName = (_a = startBlock === null || startBlock === void 0 ? void 0 : startBlock.nodeName) === null || _a === void 0 ? void 0 : _a.toLowerCase();
|
21725
|
+
if (startBlockName === 'div' && startBlock && endBlock && startBlock === body.firstChild && endBlock === body.lastChild && !dom.isEmpty(body)) {
|
21726
|
+
const wrapper = startBlock.cloneNode(false);
|
21727
|
+
const deleteAction = () => {
|
21728
|
+
if (forward) {
|
21729
|
+
execNativeForwardDeleteCommand(editor);
|
21730
|
+
} else {
|
21731
|
+
execNativeDeleteCommand(editor);
|
21732
|
+
}
|
21733
|
+
if (body.firstChild !== startBlock) {
|
21734
|
+
const bookmark = getBookmark(editor.selection.getRng(), () => document.createElement('span'));
|
21735
|
+
Array.from(body.childNodes).forEach(node => wrapper.appendChild(node));
|
21736
|
+
body.appendChild(wrapper);
|
21737
|
+
editor.selection.setRng(resolveBookmark(bookmark));
|
21738
|
+
}
|
21739
|
+
};
|
21740
|
+
return Optional.some(deleteAction);
|
21741
|
+
}
|
21742
|
+
return Optional.none();
|
21743
|
+
};
|
21744
|
+
|
21643
21745
|
const deleteCaret$2 = (editor, forward) => {
|
21644
21746
|
const fromPos = CaretPosition.fromRangeStart(editor.selection.getRng());
|
21645
21747
|
return fromPosition(forward, editor.getBody(), fromPos).filter(pos => forward ? isBeforeImageBlock(pos) : isAfterImageBlock(pos)).bind(pos => getChildNodeAtRelativeOffset(forward ? 0 : -1, pos)).map(elm => () => editor.selection.select(elm));
|
@@ -22540,15 +22642,16 @@
|
|
22540
22642
|
|
22541
22643
|
const findAction = (editor, caret, forward) => findMap([
|
22542
22644
|
backspaceDelete$1,
|
22543
|
-
backspaceDelete$6,
|
22544
22645
|
backspaceDelete$7,
|
22646
|
+
backspaceDelete$8,
|
22545
22647
|
(editor, forward) => backspaceDelete$4(editor, caret, forward),
|
22546
|
-
backspaceDelete$9,
|
22547
22648
|
backspaceDelete$a,
|
22649
|
+
backspaceDelete$b,
|
22548
22650
|
backspaceDelete$5,
|
22549
22651
|
backspaceDelete$2,
|
22550
|
-
backspaceDelete$
|
22551
|
-
backspaceDelete$3
|
22652
|
+
backspaceDelete$9,
|
22653
|
+
backspaceDelete$3,
|
22654
|
+
backspaceDelete$6
|
22552
22655
|
], item => item(editor, forward)).filter(_ => editor.selection.isEditable());
|
22553
22656
|
const deleteCommand = (editor, caret) => {
|
22554
22657
|
const result = findAction(editor, caret, false);
|
@@ -22676,7 +22779,7 @@
|
|
22676
22779
|
const rootNode = editor.getBody();
|
22677
22780
|
let rootBlockNode;
|
22678
22781
|
let tempNode;
|
22679
|
-
let
|
22782
|
+
let bm = null;
|
22680
22783
|
const forcedRootBlock = getForcedRootBlock(editor);
|
22681
22784
|
if (!startNode || !isElement$6(startNode)) {
|
22682
22785
|
return;
|
@@ -22685,9 +22788,14 @@
|
|
22685
22788
|
if (!schema.isValidChild(rootNodeName, forcedRootBlock.toLowerCase()) || hasBlockParent(blockElements, rootNode, startNode)) {
|
22686
22789
|
return;
|
22687
22790
|
}
|
22688
|
-
|
22689
|
-
|
22690
|
-
|
22791
|
+
if (rootNode.firstChild === rootNode.lastChild && isBr$6(rootNode.firstChild)) {
|
22792
|
+
rootBlockNode = createRootBlock(editor);
|
22793
|
+
rootBlockNode.appendChild(createPaddingBr().dom);
|
22794
|
+
rootNode.replaceChild(rootBlockNode, rootNode.firstChild);
|
22795
|
+
editor.selection.setCursorLocation(rootBlockNode, 0);
|
22796
|
+
editor.nodeChanged();
|
22797
|
+
return;
|
22798
|
+
}
|
22691
22799
|
let node = rootNode.firstChild;
|
22692
22800
|
while (node) {
|
22693
22801
|
if (isElement$6(node)) {
|
@@ -22701,9 +22809,15 @@
|
|
22701
22809
|
continue;
|
22702
22810
|
}
|
22703
22811
|
if (!rootBlockNode) {
|
22812
|
+
if (!bm && editor.hasFocus()) {
|
22813
|
+
bm = getBookmark(editor.selection.getRng(), () => document.createElement('span'));
|
22814
|
+
}
|
22815
|
+
if (!node.parentNode) {
|
22816
|
+
node = null;
|
22817
|
+
break;
|
22818
|
+
}
|
22704
22819
|
rootBlockNode = createRootBlock(editor);
|
22705
22820
|
rootNode.insertBefore(rootBlockNode, node);
|
22706
|
-
wrapped = true;
|
22707
22821
|
}
|
22708
22822
|
tempNode = node;
|
22709
22823
|
node = node.nextSibling;
|
@@ -22713,10 +22827,8 @@
|
|
22713
22827
|
node = node.nextSibling;
|
22714
22828
|
}
|
22715
22829
|
}
|
22716
|
-
if (
|
22717
|
-
|
22718
|
-
rng.setEnd(endContainer, endOffset);
|
22719
|
-
selection.setRng(rng);
|
22830
|
+
if (bm) {
|
22831
|
+
editor.selection.setRng(resolveBookmark(bm));
|
22720
22832
|
editor.nodeChanged();
|
22721
22833
|
}
|
22722
22834
|
};
|
@@ -22731,7 +22843,7 @@
|
|
22731
22843
|
return rng;
|
22732
22844
|
};
|
22733
22845
|
const setup$o = editor => {
|
22734
|
-
editor.on('NodeChange',
|
22846
|
+
editor.on('NodeChange', () => addRootBlocks(editor));
|
22735
22847
|
};
|
22736
22848
|
|
22737
22849
|
const hasClass = checkClassName => node => (' ' + node.attr('class') + ' ').indexOf(checkClassName) !== -1;
|
@@ -22764,6 +22876,12 @@
|
|
22764
22876
|
}
|
22765
22877
|
e.content = content;
|
22766
22878
|
};
|
22879
|
+
const isValidContent = (nonEditableRegExps, content) => {
|
22880
|
+
return forall(nonEditableRegExps, re => {
|
22881
|
+
const matches = content.match(re);
|
22882
|
+
return matches !== null && matches[0].length === content.length;
|
22883
|
+
});
|
22884
|
+
};
|
22767
22885
|
const setup$n = editor => {
|
22768
22886
|
const contentEditableAttrName = 'contenteditable';
|
22769
22887
|
const editClass = ' ' + Tools.trim(getEditableClass(editor)) + ' ';
|
@@ -22794,11 +22912,16 @@
|
|
22794
22912
|
if (!hasEditClass(node) && !hasNonEditClass(node)) {
|
22795
22913
|
continue;
|
22796
22914
|
}
|
22797
|
-
|
22798
|
-
|
22799
|
-
|
22800
|
-
|
22801
|
-
|
22915
|
+
const content = node.attr('data-mce-content');
|
22916
|
+
if (nonEditableRegExps.length > 0 && content) {
|
22917
|
+
if (isValidContent(nonEditableRegExps, content)) {
|
22918
|
+
node.name = '#text';
|
22919
|
+
node.type = 3;
|
22920
|
+
node.raw = true;
|
22921
|
+
node.value = content;
|
22922
|
+
} else {
|
22923
|
+
node.remove();
|
22924
|
+
}
|
22802
22925
|
} else {
|
22803
22926
|
node.attr(contentEditableAttrName, null);
|
22804
22927
|
}
|
@@ -24021,23 +24144,20 @@
|
|
24021
24144
|
lookupInfo.lookupData.then(lookupData => {
|
24022
24145
|
activeAutocompleter.get().map(ac => {
|
24023
24146
|
const context = lookupInfo.context;
|
24024
|
-
if (ac.trigger
|
24025
|
-
|
24026
|
-
|
24027
|
-
|
24028
|
-
|
24029
|
-
|
24030
|
-
|
24031
|
-
|
24032
|
-
|
24033
|
-
|
24034
|
-
|
24035
|
-
|
24036
|
-
|
24037
|
-
|
24038
|
-
fireAutocompleterStart(editor, { lookupData });
|
24039
|
-
}
|
24040
|
-
}
|
24147
|
+
if (ac.trigger !== context.trigger) {
|
24148
|
+
return;
|
24149
|
+
}
|
24150
|
+
activeAutocompleter.set({
|
24151
|
+
...ac,
|
24152
|
+
matchLength: context.text.length
|
24153
|
+
});
|
24154
|
+
if (uiActive.get()) {
|
24155
|
+
fireAutocompleterUpdateActiveRange(editor, { range: context.range });
|
24156
|
+
fireAutocompleterUpdate(editor, { lookupData });
|
24157
|
+
} else {
|
24158
|
+
uiActive.set(true);
|
24159
|
+
fireAutocompleterUpdateActiveRange(editor, { range: context.range });
|
24160
|
+
fireAutocompleterStart(editor, { lookupData });
|
24041
24161
|
}
|
24042
24162
|
});
|
24043
24163
|
});
|
@@ -24302,19 +24422,19 @@
|
|
24302
24422
|
},
|
24303
24423
|
{
|
24304
24424
|
keyCode: VK.BACKSPACE,
|
24305
|
-
action: action(backspaceDelete$
|
24425
|
+
action: action(backspaceDelete$7, editor, false)
|
24306
24426
|
},
|
24307
24427
|
{
|
24308
24428
|
keyCode: VK.DELETE,
|
24309
|
-
action: action(backspaceDelete$
|
24429
|
+
action: action(backspaceDelete$7, editor, true)
|
24310
24430
|
},
|
24311
24431
|
{
|
24312
24432
|
keyCode: VK.BACKSPACE,
|
24313
|
-
action: action(backspaceDelete$
|
24433
|
+
action: action(backspaceDelete$8, editor, false)
|
24314
24434
|
},
|
24315
24435
|
{
|
24316
24436
|
keyCode: VK.DELETE,
|
24317
|
-
action: action(backspaceDelete$
|
24437
|
+
action: action(backspaceDelete$8, editor, true)
|
24318
24438
|
},
|
24319
24439
|
{
|
24320
24440
|
keyCode: VK.BACKSPACE,
|
@@ -24326,11 +24446,11 @@
|
|
24326
24446
|
},
|
24327
24447
|
{
|
24328
24448
|
keyCode: VK.BACKSPACE,
|
24329
|
-
action: action(backspaceDelete$
|
24449
|
+
action: action(backspaceDelete$b, editor, false)
|
24330
24450
|
},
|
24331
24451
|
{
|
24332
24452
|
keyCode: VK.DELETE,
|
24333
|
-
action: action(backspaceDelete$
|
24453
|
+
action: action(backspaceDelete$b, editor, true)
|
24334
24454
|
},
|
24335
24455
|
{
|
24336
24456
|
keyCode: VK.BACKSPACE,
|
@@ -24386,19 +24506,19 @@
|
|
24386
24506
|
},
|
24387
24507
|
{
|
24388
24508
|
keyCode: VK.BACKSPACE,
|
24389
|
-
action: action(backspaceDelete$
|
24509
|
+
action: action(backspaceDelete$9, editor, false)
|
24390
24510
|
},
|
24391
24511
|
{
|
24392
24512
|
keyCode: VK.DELETE,
|
24393
|
-
action: action(backspaceDelete$
|
24513
|
+
action: action(backspaceDelete$9, editor, true)
|
24394
24514
|
},
|
24395
24515
|
{
|
24396
24516
|
keyCode: VK.BACKSPACE,
|
24397
|
-
action: action(backspaceDelete$
|
24517
|
+
action: action(backspaceDelete$a, editor, false)
|
24398
24518
|
},
|
24399
24519
|
{
|
24400
24520
|
keyCode: VK.DELETE,
|
24401
|
-
action: action(backspaceDelete$
|
24521
|
+
action: action(backspaceDelete$a, editor, true)
|
24402
24522
|
},
|
24403
24523
|
{
|
24404
24524
|
keyCode: VK.BACKSPACE,
|
@@ -24407,6 +24527,14 @@
|
|
24407
24527
|
{
|
24408
24528
|
keyCode: VK.DELETE,
|
24409
24529
|
action: action(backspaceDelete$3, editor, true)
|
24530
|
+
},
|
24531
|
+
{
|
24532
|
+
keyCode: VK.BACKSPACE,
|
24533
|
+
action: action(backspaceDelete$6, editor, false)
|
24534
|
+
},
|
24535
|
+
{
|
24536
|
+
keyCode: VK.DELETE,
|
24537
|
+
action: action(backspaceDelete$6, editor, true)
|
24410
24538
|
}
|
24411
24539
|
], evt).filter(_ => editor.selection.isEditable()).each(applyAction => {
|
24412
24540
|
evt.preventDefault();
|
@@ -25025,9 +25153,14 @@
|
|
25025
25153
|
} else if (isCaretAtStartOrEndOfBlock(false)) {
|
25026
25154
|
newBlock = insertNewBlockAfter();
|
25027
25155
|
} else if (isCaretAtStartOrEndOfBlock(true) && parentBlockParent) {
|
25156
|
+
const caretPos = CaretPosition.fromRangeStart(rng);
|
25157
|
+
const afterTable = isAfterTable(caretPos);
|
25158
|
+
const parentBlockSugar = SugarElement.fromDom(parentBlock);
|
25159
|
+
const afterBr = isAfterBr(parentBlockSugar, caretPos, editor.schema);
|
25160
|
+
const prevBrOpt = afterBr ? findPreviousBr(parentBlockSugar, caretPos, editor.schema).bind(pos => Optional.from(pos.getNode())) : Optional.none();
|
25028
25161
|
newBlock = parentBlockParent.insertBefore(createNewBlock$1(), parentBlock);
|
25029
|
-
const
|
25030
|
-
moveToCaretPosition(editor,
|
25162
|
+
const root = containerAndSiblingName(parentBlock, 'HR') || afterTable ? newBlock : prevBrOpt.getOr(parentBlock);
|
25163
|
+
moveToCaretPosition(editor, root);
|
25031
25164
|
} else {
|
25032
25165
|
const tmpRng = includeZwspInRange(rng).cloneRange();
|
25033
25166
|
tmpRng.setEndAfter(parentBlock);
|
@@ -26670,6 +26803,7 @@
|
|
26670
26803
|
setup$8(editor);
|
26671
26804
|
register$1(editor, pasteFormat);
|
26672
26805
|
setup$9(editor);
|
26806
|
+
editor.addQueryStateHandler('mceTogglePlainTextPaste', () => pasteFormat.get() === 'text');
|
26673
26807
|
editor.on('PreInit', () => {
|
26674
26808
|
register(editor);
|
26675
26809
|
setup$a(editor, draggingInternallyState);
|
@@ -29463,7 +29597,10 @@
|
|
29463
29597
|
const extendedOptions = Tools.extend(defaultOptions, defaultOverrideOptions, sectionResult.options(), isOnMobile(isMobileDevice, sectionResult) ? getSection(sectionResult, 'mobile') : {}, { external_plugins: getExternalPlugins(defaultOverrideOptions, sectionResult.options()) });
|
29464
29598
|
return processPlugins(isMobileDevice, sectionResult, defaultOverrideOptions, extendedOptions);
|
29465
29599
|
};
|
29466
|
-
const normalizeOptions = (defaultOverrideOptions, options) =>
|
29600
|
+
const normalizeOptions = (defaultOverrideOptions, options) => {
|
29601
|
+
const copiedOptions = merge(options);
|
29602
|
+
return combineOptions(isPhone || isTablet, isPhone, copiedOptions, defaultOverrideOptions, copiedOptions);
|
29603
|
+
};
|
29467
29604
|
|
29468
29605
|
const addVisual = (editor, elm) => addVisual$1(editor, elm);
|
29469
29606
|
|
@@ -30550,7 +30687,7 @@
|
|
30550
30687
|
}
|
30551
30688
|
return undefined;
|
30552
30689
|
};
|
30553
|
-
const create$5 = (editor, initialOptions) => {
|
30690
|
+
const create$5 = (editor, initialOptions, rawInitialOptions = initialOptions) => {
|
30554
30691
|
const registry = {};
|
30555
30692
|
const values = {};
|
30556
30693
|
const setValue = (name, value, processor) => {
|
@@ -30598,13 +30735,26 @@
|
|
30598
30735
|
return registered;
|
30599
30736
|
};
|
30600
30737
|
const isSet = name => has$2(values, name);
|
30738
|
+
const debug = () => {
|
30739
|
+
try {
|
30740
|
+
console.log(JSON.parse(JSON.stringify(rawInitialOptions, (_key, value) => {
|
30741
|
+
if (isBoolean(value) || isNumber(value) || isString(value) || isNull(value) || isArray$1(value) || isPlainObject(value)) {
|
30742
|
+
return value;
|
30743
|
+
}
|
30744
|
+
return Object.prototype.toString.call(value);
|
30745
|
+
})));
|
30746
|
+
} catch (error) {
|
30747
|
+
console.error(error);
|
30748
|
+
}
|
30749
|
+
};
|
30601
30750
|
return {
|
30602
30751
|
register,
|
30603
30752
|
isRegistered,
|
30604
30753
|
get,
|
30605
30754
|
set,
|
30606
30755
|
unset,
|
30607
|
-
isSet
|
30756
|
+
isSet,
|
30757
|
+
debug
|
30608
30758
|
};
|
30609
30759
|
};
|
30610
30760
|
|
@@ -30936,7 +31086,7 @@
|
|
30936
31086
|
this.id = id;
|
30937
31087
|
this.hidden = false;
|
30938
31088
|
const normalizedOptions = normalizeOptions(editorManager.defaultOptions, options);
|
30939
|
-
this.options = create$5(self, normalizedOptions);
|
31089
|
+
this.options = create$5(self, normalizedOptions, options);
|
30940
31090
|
register$7(self);
|
30941
31091
|
const getOption = this.options.get;
|
30942
31092
|
if (getOption('deprecation_warnings')) {
|
@@ -31341,8 +31491,8 @@
|
|
31341
31491
|
documentBaseURL: null,
|
31342
31492
|
suffix: null,
|
31343
31493
|
majorVersion: '7',
|
31344
|
-
minorVersion: '
|
31345
|
-
releaseDate: '2024-
|
31494
|
+
minorVersion: '2.0',
|
31495
|
+
releaseDate: '2024-06-19',
|
31346
31496
|
i18n: I18n,
|
31347
31497
|
activeEditor: null,
|
31348
31498
|
focusedEditor: null,
|