tinymce-rails 7.1.0 → 7.2.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.
- 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,
|