@richscripts/richtexteditor 2.14.1 → 2.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +173 -10
- package/angular/build-manifest.json +23 -0
- package/angular/index.d.ts +71 -76
- package/angular/index.mjs +2 -0
- package/angular/package.json +4 -0
- package/headless/index.d.ts +3 -1
- package/headless/index.js +72 -16
- package/index.d.ts +33 -54
- package/integrations/initialization-scope.js +27 -0
- package/integrations/native-mount.js +30 -0
- package/integrations/shared.d.ts +23 -1
- package/integrations/shared.js +58 -22
- package/package.json +25 -3
- package/react/index.js +118 -37
- package/react/index.mjs +29 -0
- package/richtexteditor/all_plugins.js +7001 -1078
- package/richtexteditor/all_plugins.min.js +62 -59
- package/richtexteditor/lang/emoji/LICENSE-CLDR.txt +41 -0
- package/richtexteditor/lang/emoji/rte-emoji-de.js +3 -0
- package/richtexteditor/lang/emoji/rte-emoji-es.js +3 -0
- package/richtexteditor/lang/emoji/rte-emoji-fr.js +3 -0
- package/richtexteditor/lang/emoji/rte-emoji-it.js +3 -0
- package/richtexteditor/lang/emoji/rte-emoji-ja.js +3 -0
- package/richtexteditor/lang/emoji/rte-emoji-ko.js +3 -0
- package/richtexteditor/lang/emoji/rte-emoji-nl.js +3 -0
- package/richtexteditor/lang/emoji/rte-emoji-pt-pt.js +3 -0
- package/richtexteditor/lang/emoji/rte-emoji-pt.js +3 -0
- package/richtexteditor/lang/emoji/rte-emoji-ru.js +3 -0
- package/richtexteditor/lang/emoji/rte-emoji-zh-Hans.js +3 -0
- package/richtexteditor/lang/emoji/rte-emoji-zh-Hant.js +3 -0
- package/richtexteditor/lang/rte-lang-af.js +1 -0
- package/richtexteditor/lang/rte-lang-ar.js +1 -0
- package/richtexteditor/lang/rte-lang-bg.js +1 -0
- package/richtexteditor/lang/rte-lang-bn.js +1 -0
- package/richtexteditor/lang/rte-lang-bs.js +1 -0
- package/richtexteditor/lang/rte-lang-ca.js +1 -0
- package/richtexteditor/lang/rte-lang-cs.js +1 -0
- package/richtexteditor/lang/rte-lang-cy.js +1 -0
- package/richtexteditor/lang/rte-lang-da.js +1 -0
- package/richtexteditor/lang/rte-lang-de.js +1017 -2
- package/richtexteditor/lang/rte-lang-el.js +1 -0
- package/richtexteditor/lang/rte-lang-en.js +1 -0
- package/richtexteditor/lang/rte-lang-es.js +1023 -2
- package/richtexteditor/lang/rte-lang-et.js +1 -0
- package/richtexteditor/lang/rte-lang-fa.js +1 -0
- package/richtexteditor/lang/rte-lang-fi.js +1 -0
- package/richtexteditor/lang/rte-lang-fil.js +1 -0
- package/richtexteditor/lang/rte-lang-fj.js +1 -0
- package/richtexteditor/lang/rte-lang-fr.js +1023 -2
- package/richtexteditor/lang/rte-lang-ga.js +1 -0
- package/richtexteditor/lang/rte-lang-gu.js +1 -0
- package/richtexteditor/lang/rte-lang-he.js +1 -0
- package/richtexteditor/lang/rte-lang-hi.js +1 -0
- package/richtexteditor/lang/rte-lang-hr.js +1 -0
- package/richtexteditor/lang/rte-lang-ht.js +1 -0
- package/richtexteditor/lang/rte-lang-hu.js +1 -0
- package/richtexteditor/lang/rte-lang-id.js +1 -0
- package/richtexteditor/lang/rte-lang-is.js +1 -0
- package/richtexteditor/lang/rte-lang-it.js +1023 -2
- package/richtexteditor/lang/rte-lang-ja.js +1023 -2
- package/richtexteditor/lang/rte-lang-kn.js +1 -0
- package/richtexteditor/lang/rte-lang-ko.js +1023 -2
- package/richtexteditor/lang/rte-lang-lt.js +1 -0
- package/richtexteditor/lang/rte-lang-lv.js +1 -0
- package/richtexteditor/lang/rte-lang-mg.js +1 -0
- package/richtexteditor/lang/rte-lang-mi.js +1 -0
- package/richtexteditor/lang/rte-lang-ml.js +1 -0
- package/richtexteditor/lang/rte-lang-mr.js +1 -0
- package/richtexteditor/lang/rte-lang-ms.js +1 -0
- package/richtexteditor/lang/rte-lang-mt.js +1 -0
- package/richtexteditor/lang/rte-lang-mww.js +1 -0
- package/richtexteditor/lang/rte-lang-nb.js +1 -0
- package/richtexteditor/lang/rte-lang-nl.js +1023 -2
- package/richtexteditor/lang/rte-lang-otq.js +1 -0
- package/richtexteditor/lang/rte-lang-pa.js +1 -0
- package/richtexteditor/lang/rte-lang-pl.js +1 -0
- package/richtexteditor/lang/rte-lang-pt-pt.js +1023 -2
- package/richtexteditor/lang/rte-lang-pt.js +1023 -2
- package/richtexteditor/lang/rte-lang-ro.js +1 -0
- package/richtexteditor/lang/rte-lang-ru.js +1023 -2
- package/richtexteditor/lang/rte-lang-sk.js +1 -0
- package/richtexteditor/lang/rte-lang-sl.js +1 -0
- package/richtexteditor/lang/rte-lang-sm.js +1 -0
- package/richtexteditor/lang/rte-lang-sr-Cyrl.js +1 -0
- package/richtexteditor/lang/rte-lang-sr-Latn.js +1 -0
- package/richtexteditor/lang/rte-lang-sv.js +1 -0
- package/richtexteditor/lang/rte-lang-sw.js +1 -0
- package/richtexteditor/lang/rte-lang-ta.js +1 -0
- package/richtexteditor/lang/rte-lang-te.js +1 -0
- package/richtexteditor/lang/rte-lang-th.js +1 -0
- package/richtexteditor/lang/rte-lang-tlh-Latn.js +1 -0
- package/richtexteditor/lang/rte-lang-tlh-Piqd.js +1 -0
- package/richtexteditor/lang/rte-lang-to.js +1 -0
- package/richtexteditor/lang/rte-lang-tr.js +1 -0
- package/richtexteditor/lang/rte-lang-ty.js +1 -0
- package/richtexteditor/lang/rte-lang-uk.js +1 -0
- package/richtexteditor/lang/rte-lang-ur.js +1 -0
- package/richtexteditor/lang/rte-lang-vi.js +1 -0
- package/richtexteditor/lang/rte-lang-yua.js +1 -0
- package/richtexteditor/lang/rte-lang-zh-Hans.js +1017 -2
- package/richtexteditor/lang/rte-lang-zh-Hant.js +1017 -2
- package/richtexteditor/plugins/a11yenhance.js +2 -1
- package/richtexteditor/plugins/a11yenhance.min.js +1 -1
- package/richtexteditor/plugins/accessibilitychecker.js +252 -60
- package/richtexteditor/plugins/accessibilitychecker.min.js +1 -1
- package/richtexteditor/plugins/aitoolkit.js +966 -303
- package/richtexteditor/plugins/aitoolkit.min.js +7 -7
- package/richtexteditor/plugins/all_plugins.js +7001 -1078
- package/richtexteditor/plugins/all_plugins.min.js +62 -59
- package/richtexteditor/plugins/autocorrect.js +66 -31
- package/richtexteditor/plugins/autocorrect.min.js +1 -1
- package/richtexteditor/plugins/autoembed.js +17 -0
- package/richtexteditor/plugins/autoembed.min.js +1 -1
- package/richtexteditor/plugins/blocktypes.js +18 -9
- package/richtexteditor/plugins/blocktypes.min.js +1 -1
- package/richtexteditor/plugins/bookmarkcard.js +12 -5
- package/richtexteditor/plugins/bookmarkcard.min.js +2 -2
- package/richtexteditor/plugins/changecase.js +72 -19
- package/richtexteditor/plugins/changecase.min.js +1 -1
- package/richtexteditor/plugins/charlimit.js +62 -2
- package/richtexteditor/plugins/charlimit.min.js +2 -2
- package/richtexteditor/plugins/comments.js +458 -59
- package/richtexteditor/plugins/comments.min.js +4 -3
- package/richtexteditor/plugins/contentminimap.js +25 -6
- package/richtexteditor/plugins/contentminimap.min.js +1 -1
- package/richtexteditor/plugins/crossreference.js +1 -1
- package/richtexteditor/plugins/crossreference.min.js +1 -1
- package/richtexteditor/plugins/dialoga11y.js +26 -4
- package/richtexteditor/plugins/dialoga11y.min.js +1 -1
- package/richtexteditor/plugins/dictation.js +1 -1
- package/richtexteditor/plugins/documentimport.js +220 -51
- package/richtexteditor/plugins/documentimport.min.js +4 -4
- package/richtexteditor/plugins/documentoutline.js +47 -8
- package/richtexteditor/plugins/documentoutline.min.js +1 -1
- package/richtexteditor/plugins/docxexport.js +204 -32
- package/richtexteditor/plugins/docxexport.min.js +2 -2
- package/richtexteditor/plugins/draghandle.js +267 -3
- package/richtexteditor/plugins/draghandle.min.js +1 -1
- package/richtexteditor/plugins/emailtoolkit.js +28 -14
- package/richtexteditor/plugins/emailtoolkit.min.js +1 -1
- package/richtexteditor/plugins/emojiautocomplete.js +110 -56
- package/richtexteditor/plugins/emojiautocomplete.min.js +1 -1
- package/richtexteditor/plugins/footnotes.js +65 -11
- package/richtexteditor/plugins/footnotes.min.js +1 -1
- package/richtexteditor/plugins/formatpainter.js +10 -0
- package/richtexteditor/plugins/formatpainter.min.js +1 -1
- package/richtexteditor/plugins/formattingmarks.js +6 -6
- package/richtexteditor/plugins/formattingmarks.min.js +1 -1
- package/richtexteditor/plugins/gapcursor.js +60 -0
- package/richtexteditor/plugins/gapcursor.min.js +1 -1
- package/richtexteditor/plugins/ghostcomplete.js +1 -1
- package/richtexteditor/plugins/html2pdf.js +1 -1
- package/richtexteditor/plugins/html2pdf.min.js +1 -1
- package/richtexteditor/plugins/imageeditor.js +12 -6
- package/richtexteditor/plugins/imageeditor.min.js +1 -1
- package/richtexteditor/plugins/importstyles.js +1 -1
- package/richtexteditor/plugins/inlinecode.js +25 -0
- package/richtexteditor/plugins/inlinecode.min.js +1 -1
- package/richtexteditor/plugins/insertcode.js +21 -3
- package/richtexteditor/plugins/insertcode.min.js +4 -4
- package/richtexteditor/plugins/insertemoji.js +112 -15
- package/richtexteditor/plugins/insertemoji.min.js +1 -1
- package/richtexteditor/plugins/insertgallery.js +42 -36
- package/richtexteditor/plugins/insertgallery.min.js +1 -1
- package/richtexteditor/plugins/inserttemplate.js +33 -17
- package/richtexteditor/plugins/inserttemplate.min.js +1 -1
- package/richtexteditor/plugins/keyboarda11y.js +66 -3
- package/richtexteditor/plugins/keyboarda11y.min.js +1 -1
- package/richtexteditor/plugins/layouttable.js +20 -0
- package/richtexteditor/plugins/layouttable.min.js +1 -1
- package/richtexteditor/plugins/linkchecker.js +29 -9
- package/richtexteditor/plugins/linkchecker.min.js +1 -1
- package/richtexteditor/plugins/localdraft.js +51 -7
- package/richtexteditor/plugins/localdraft.min.js +1 -1
- package/richtexteditor/plugins/markdownexport.js +159 -0
- package/richtexteditor/plugins/markdownexport.min.js +2 -2
- package/richtexteditor/plugins/mathdialog.js +11 -5
- package/richtexteditor/plugins/mathdialog.min.js +1 -1
- package/richtexteditor/plugins/mentionplugin.js +88 -25
- package/richtexteditor/plugins/mentionplugin.min.js +1 -1
- package/richtexteditor/plugins/mermaiddiagram.js +9 -3
- package/richtexteditor/plugins/mermaiddiagram.min.js +2 -2
- package/richtexteditor/plugins/multilevellist.js +4 -0
- package/richtexteditor/plugins/multilevellist.min.js +1 -1
- package/richtexteditor/plugins/pdfexport.js +235 -35
- package/richtexteditor/plugins/pdfexport.min.js +12 -12
- package/richtexteditor/plugins/permanentpen.js +3 -3
- package/richtexteditor/plugins/permanentpen.min.js +1 -1
- package/richtexteditor/plugins/readabilitystats.js +25 -11
- package/richtexteditor/plugins/readabilitystats.min.js +1 -1
- package/richtexteditor/plugins/readaloud.js +29 -15
- package/richtexteditor/plugins/readaloud.min.js +1 -1
- package/richtexteditor/plugins/restrictedediting.js +166 -0
- package/richtexteditor/plugins/restrictedediting.min.js +2 -2
- package/richtexteditor/plugins/revisionhistory.js +169 -37
- package/richtexteditor/plugins/revisionhistory.min.js +3 -3
- package/richtexteditor/plugins/rubyannotation.js +19 -9
- package/richtexteditor/plugins/rubyannotation.min.js +1 -1
- package/richtexteditor/plugins/sanitizer.js +62 -3
- package/richtexteditor/plugins/sanitizer.min.js +1 -1
- package/richtexteditor/plugins/slashcommand.js +30 -16
- package/richtexteditor/plugins/slashcommand.min.js +2 -2
- package/richtexteditor/plugins/smartchips.js +36 -22
- package/richtexteditor/plugins/smartchips.min.js +2 -2
- package/richtexteditor/plugins/spellcheck.js +17 -8
- package/richtexteditor/plugins/spellcheck.min.js +2 -2
- package/richtexteditor/plugins/stateinspector.js +19 -9
- package/richtexteditor/plugins/stateinspector.min.js +2 -2
- package/richtexteditor/plugins/structured-content-bridge.js +56 -24
- package/richtexteditor/plugins/structured-content-bridge.min.js +7 -7
- package/richtexteditor/plugins/tableofcontents.js +5 -2
- package/richtexteditor/plugins/tableofcontents.min.js +1 -1
- package/richtexteditor/plugins/tabletools.js +388 -3
- package/richtexteditor/plugins/tabletools.min.js +1 -1
- package/richtexteditor/plugins/textdirection.js +18 -5
- package/richtexteditor/plugins/textdirection.min.js +1 -1
- package/richtexteditor/plugins/textpartlanguage.js +161 -32
- package/richtexteditor/plugins/textpartlanguage.min.js +1 -1
- package/richtexteditor/plugins/todolist.js +90 -6
- package/richtexteditor/plugins/todolist.min.js +1 -1
- package/richtexteditor/plugins/trackedchanges.js +1812 -25
- package/richtexteditor/plugins/trackedchanges.min.js +5 -3
- package/richtexteditor/plugins/wordexport.js +2 -2
- package/richtexteditor/plugins/yjscollab.js +9 -4
- package/richtexteditor/plugins/yjscollab.min.js +1 -1
- package/richtexteditor/plugins/zz_richtextbox_dialog_style.js +22 -13
- package/richtexteditor/plugins/zz_richtextbox_dialog_style.min.js +1 -1
- package/richtexteditor/rte-config.js +130 -50
- package/richtexteditor/rte-headless.js +19 -4
- package/richtexteditor/rte-webcomponent.js +89 -16
- package/richtexteditor/rte.js +132 -52
- package/scripts/build-angular.mjs +97 -0
- package/svelte/index.d.ts +2 -1
- package/svelte/index.js +80 -9
- package/vue/index.js +130 -34
- package/angular/component.ts +0 -297
- package/angular/index.ts +0 -24
|
@@ -104,6 +104,16 @@ function RTE_Plugin_StateInspector() {
|
|
|
104
104
|
appendToolbarCommand("toolbar_default", "#{stateinspector}");
|
|
105
105
|
appendToolbarCommand("toolbar_full", "#{stateinspector}");
|
|
106
106
|
}
|
|
107
|
+
// 2026-10-03 Build the shell NOW, before the editor creates its iframe. ensureShell() moves the
|
|
108
|
+
// editor container; done in InitEditor it moved the live iframe, which then gets a fresh
|
|
109
|
+
// document - and every plugin that had already bound listeners to the old one went deaf (the
|
|
110
|
+
// slash menu, @mentions and emoji autocomplete, until they moved to editor.bindDocumentEvent;
|
|
111
|
+
// customer plugins binding the document directly still were). Nothing is loaded yet here.
|
|
112
|
+
// InitEditor's own ensureShell() call finds the shell and returns it.
|
|
113
|
+
// tools/keyboard/plugin-listeners.mjs
|
|
114
|
+
if (config.stateInspectorEnabled !== false && config.container && config.container.parentNode) {
|
|
115
|
+
try { ensureShell(); } catch (e) { /* InitEditor builds it */ }
|
|
116
|
+
}
|
|
107
117
|
};
|
|
108
118
|
|
|
109
119
|
obj.InitEditor = function (argeditor) {
|
|
@@ -198,7 +208,7 @@ function RTE_Plugin_StateInspector() {
|
|
|
198
208
|
if (!list) return attrs;
|
|
199
209
|
for (var i = 0; i < list.length; i++) {
|
|
200
210
|
var value = list[i].value;
|
|
201
|
-
attrs[list[i].name] = value.length > 220 ? value.substring(0, 220) + "
|
|
211
|
+
attrs[list[i].name] = value.length > 220 ? value.substring(0, 220) + "\u2026" : value;
|
|
202
212
|
}
|
|
203
213
|
return attrs;
|
|
204
214
|
}
|
|
@@ -211,7 +221,7 @@ function RTE_Plugin_StateInspector() {
|
|
|
211
221
|
return {
|
|
212
222
|
type: "text",
|
|
213
223
|
length: text.length,
|
|
214
|
-
text: text.length > 80 ? text.substring(0, 80) + "
|
|
224
|
+
text: text.length > 80 ? text.substring(0, 80) + "\u2026" : text
|
|
215
225
|
};
|
|
216
226
|
}
|
|
217
227
|
if (node.nodeType === 8) {
|
|
@@ -284,7 +294,7 @@ function RTE_Plugin_StateInspector() {
|
|
|
284
294
|
try {
|
|
285
295
|
var selected = String(range.toString() || "");
|
|
286
296
|
info.textLength = selected.length;
|
|
287
|
-
info.text = selected.length > 120 ? selected.substring(0, 120) + "
|
|
297
|
+
info.text = selected.length > 120 ? selected.substring(0, 120) + "\u2026" : selected;
|
|
288
298
|
} catch (e) {
|
|
289
299
|
info.textLength = 0;
|
|
290
300
|
}
|
|
@@ -716,9 +726,9 @@ function RTE_Plugin_StateInspector() {
|
|
|
716
726
|
// Kept short on purpose: the toolbar row ellipsises, and "3 errors" is
|
|
717
727
|
// the part that must survive the truncation. Full counts are in the
|
|
718
728
|
// snapshot and the tree tab.
|
|
719
|
-
summaryEl.innerText = tree.counters.elements + " el
|
|
729
|
+
summaryEl.innerText = tree.counters.elements + " el \xb7 " +
|
|
720
730
|
analysis.issues.length + " issue" + (analysis.issues.length === 1 ? "" : "s") +
|
|
721
|
-
(errors ? "
|
|
731
|
+
(errors ? " \xb7 " + errors + " error" + (errors === 1 ? "" : "s") : "");
|
|
722
732
|
}
|
|
723
733
|
|
|
724
734
|
clear(body);
|
|
@@ -747,7 +757,7 @@ function RTE_Plugin_StateInspector() {
|
|
|
747
757
|
msg.innerText = item.message;
|
|
748
758
|
var meta = hostDoc.createElement("div");
|
|
749
759
|
meta.className = "rte-state-inspector-issue-meta";
|
|
750
|
-
meta.innerText = (item.detail || "(document root)") + "
|
|
760
|
+
meta.innerText = (item.detail || "(document root)") + " \xb7 " + item.id;
|
|
751
761
|
wrap.appendChild(msg);
|
|
752
762
|
wrap.appendChild(meta);
|
|
753
763
|
body.appendChild(wrap);
|
|
@@ -787,10 +797,10 @@ function RTE_Plugin_StateInspector() {
|
|
|
787
797
|
for (var i = 0; i < keys.length && i < 4; i++) {
|
|
788
798
|
label += " " + keys[i] + "=" + JSON.stringify(node.attrs[keys[i]]);
|
|
789
799
|
}
|
|
790
|
-
if (keys.length > 4) label += "
|
|
800
|
+
if (keys.length > 4) label += " \u2026+" + (keys.length - 4);
|
|
791
801
|
}
|
|
792
802
|
label += ">";
|
|
793
|
-
if (node.truncated) label += "
|
|
803
|
+
if (node.truncated) label += " \u2026 " + node.childCount + " children (depth limit)";
|
|
794
804
|
lines.push(label);
|
|
795
805
|
for (var c = 0; c < (node.children || []).length; c++) {
|
|
796
806
|
lines = lines.concat(formatTree(node.children[c], depth + 1));
|
|
@@ -821,7 +831,7 @@ function RTE_Plugin_StateInspector() {
|
|
|
821
831
|
var out = boundary.node + " @ " + boundary.offset;
|
|
822
832
|
if (typeof boundary.length === "number") out += " (len " + boundary.length + ")";
|
|
823
833
|
if (typeof boundary.childCount === "number") out += " (" + boundary.childCount + " children)";
|
|
824
|
-
if (boundary.zeroLength) out += "
|
|
834
|
+
if (boundary.zeroLength) out += " \u2190 zero-length text node";
|
|
825
835
|
return out;
|
|
826
836
|
}
|
|
827
837
|
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
window.RTE_DefaultConfig||(window.RTE_DefaultConfig={}),RTE_DefaultConfig.plugin_stateinspector=RTE_Plugin_StateInspector;function RTE_Plugin_StateInspector(){var T=this,o,c,p=null,g=null,u=null,b=null,y=null,R=0,v="issues",C=[],h=[],I=60,M=[{id:"issues",label:"Issues"},{id:"tree",label:"Tree"},{id:"selection",label:"Selection"},{id:"plugins",label:"Plugins"},{id:"log",label:"Log"}],A={A:1,ABBR:1,B:1,BDI:1,BDO:1,CITE:1,CODE:1,DEL:1,DFN:1,EM:1,I:1,INS:1,KBD:1,MARK:1,Q:1,S:1,SAMP:1,SMALL:1,SPAN:1,STRONG:1,SUB:1,SUP:1,U:1,VAR:1,FONT:1},q={AREA:1,BASE:1,BR:1,COL:1,EMBED:1,HR:1,IMG:1,INPUT:1,LINK:1,META:1,PARAM:1,SOURCE:1,TRACK:1,WBR:1},Z={ADDRESS:1,ARTICLE:1,ASIDE:1,BLOCKQUOTE:1,DIV:1,DL:1,DT:1,DD:1,FIELDSET:1,FIGCAPTION:1,FIGURE:1,FOOTER:1,FORM:1,H1:1,H2:1,H3:1,H4:1,H5:1,H6:1,HEADER:1,HR:1,LI:1,MAIN:1,NAV:1,OL:1,P:1,PRE:1,SECTION:1,TABLE:1,UL:1},X=/[\u0000-\u0008\u000B\u000C\u000E-\u001F]/;T.PluginName="StateInspector",T.InitConfig=function(e){o=e,o.stateInspectorEnabled!==!1&&(o.stateInspectorTitle=o.stateInspectorTitle||"State inspector",o.stateInspectorHint=o.stateInspectorHint||"Derived document model, structural checks, and a copyable snapshot for bug reports.",o.stateInspectorEmptyText=o.stateInspectorEmptyText||"No content to inspect yet.",typeof o.stateInspectorAutoOpen!="boolean"&&(o.stateInspectorAutoOpen=!1),typeof o.stateInspectorToolbarButton!="boolean"&&(o.stateInspectorToolbarButton=!1),typeof o.stateInspectorMaxDepth!="number"&&(o.stateInspectorMaxDepth=24),typeof o.stateInspectorLogLimit=="number"&&(I=Math.max(10,Math.min(500,o.stateInspectorLogLimit))),C=Y(o),o.stateInspectorToolbarButton&&(D("toolbar_default","#{stateinspector}"),D("toolbar_full","#{stateinspector}")))},T.InitEditor=function(e){c=e,o.stateInspectorEnabled!==!1&&(c.stateInspector={close:function(){k()},isOpen:function(){return!!(p&&p.classList.contains("is-open"))},issues:function(){return S(L()).issues},log:function(){return h.slice(0)},open:function(){E()},plugins:function(){return C.slice(0)},refresh:function(){N()},snapshot:function(){return _()},toggle:function(){G()}},ie(),c.toolbarFactoryMap=c.toolbarFactoryMap||{},c.toolbarFactoryMap.stateinspector=function(t){return c.createToolbarButton(t)},c.attachEvent("exec_command_stateinspector",function(t){t.returnValue=!0,t.stopBubble=!0,G()}),c.attachEvent("change",function(){z("change"),K()}),c.attachEvent("selectionchange",function(){z("selectionchange"),K()}),c.slashCommands&&c.slashCommands.register&&c.slashCommands.register({id:"stateinspector",section:"Tools",title:o.stateInspectorTitle,description:"Inspect document structure, selection, and structural issues",keywords:["inspect","debug","devtools","state","structure"],run:function(){E()}}),U(),o.stateInspectorAutoOpen&&E())};function D(e,t){o[e]&&o[e].indexOf(t)===-1&&(o[e]=o[e]+t)}function Y(e){var t=[];for(var r in e)r[0]!=="p"||r.substr(0,7)!=="plugin_"||!e[r]||!(e[r]instanceof Function)||t.push({index:t.length,key:r,name:r.substring(7)});return t}function z(e){h.push({at:Date.now(),event:e}),h.length>I&&h.splice(0,h.length-I)}function $(e){var t={},r=e.attributes;if(!r)return t;for(var n=0;n<r.length;n++){var a=r[n].value;t[r[n].name]=a.length>220?a.substring(0,220)+"\u2026":a}return t}function H(e,t,r,n){if(e.nodeType===3){var a=e.nodeValue||"";return n.textNodes++,n.characters+=a.length,{type:"text",length:a.length,text:a.length>80?a.substring(0,80)+"\u2026":a}}if(e.nodeType===8)return n.comments++,{type:"comment",length:(e.nodeValue||"").length};if(e.nodeType!==1)return null;n.elements++;var i=e.nodeName;n.tags[i]=(n.tags[i]||0)+1;var s={type:"element",name:i.toLowerCase(),attrs:$(e),children:[]};if(t>=r)return s.truncated=!0,s.childCount=e.childNodes.length,s;for(var l=0;l<e.childNodes.length;l++){var d=H(e.childNodes[l],t+1,r,n);d&&s.children.push(d)}return s}function L(){var e=c&&c.getEditable?c.getEditable():null,t={elements:0,textNodes:0,comments:0,characters:0,tags:{}};if(!e)return{root:null,counters:t,editable:null};for(var r=Math.max(2,o.stateInspectorMaxDepth||24),n={type:"element",name:"root",attrs:{},children:[]},a=0;a<e.childNodes.length;a++){var i=H(e.childNodes[a],1,r,t);i&&n.children.push(i)}return{root:n,counters:t,editable:e}}function P(){var e=c&&c.getDocument?c.getDocument():null,t=c&&c.getEditable?c.getEditable():null,r={available:!1};if(!e||!e.getSelection)return r;var n;try{n=e.getSelection()}catch{return r}if(!n||n.rangeCount===0)return r;var a;try{a=n.getRangeAt(0)}catch{return r}if(!a)return r;r.available=!0,r.collapsed=!!a.collapsed,r.anchor=F(a.startContainer,a.startOffset),r.focus=F(a.endContainer,a.endOffset),r.insideEditable=!!(t&&t.contains(a.startContainer)&&t.contains(a.endContainer));try{var i=String(a.toString()||"");r.textLength=i.length,r.text=i.length>120?i.substring(0,120)+"\u2026":i}catch{r.textLength=0}return r.block=ee(a.startContainer,t),r}function F(e,t){if(!e)return{node:"(none)",offset:t};if(e.nodeType===3){var r=e.nodeValue||"";return{node:"#text",offset:t,length:r.length,zeroLength:r.length===0}}return{node:e.nodeName?e.nodeName.toLowerCase():"(unknown)",offset:t,childCount:e.childNodes?e.childNodes.length:0}}function ee(e,t){for(var r=[],n=e;n&&n!==t;)n.nodeType===1&&r.unshift(n.nodeName.toLowerCase()),n=n.parentNode;return r.join(" > ")}function _(){var e=L(),t=S(e);return{snapshotVersion:1,generatedAt:new Date().toISOString(),counters:e.counters,issues:t.issues,plugins:C.slice(0),recentEvents:h.slice(-20),selection:P(),tree:e.root}}function f(e,t,r,n,a){e.push({id:t,severity:r,message:n,detail:a||""})}function w(e,t){for(var r=[],n=e;n&&n!==t&&n.nodeType===1;){var a=n.nodeName.toLowerCase();n.id&&(a+="#"+n.id),r.unshift(a),n=n.parentNode}return r.join(" > ")}function te(e){if((e.textContent||"").replace(/[\s\u200B\uFEFF]/g,"")!=="")return!0;for(var t=0;t<e.childNodes.length;t++){var r=e.childNodes[t];if(r.nodeType===1&&q[r.nodeName])return!0}return!1}function S(e){var t=[],r=e.editable;if(!r)return{issues:t};for(var n=r.ownerDocument.createTreeWalker(r,5,null,!1),a=0,i;i=n.nextNode();){if(i.nodeType===3){ne(i,r,t);continue}ae(i,r,t);var s=re(i);s&&(a&&s>a+1&&f(t,"heading-skip","warn","Heading level jumps from h"+a+" to h"+s,w(i,r)),a=s)}for(var l=0;l<r.childNodes.length;l++){var d=r.childNodes[l];d.nodeType===1&&d.nodeName==="IMG"&&j(d,r,t)}return{issues:t}}function re(e){var t=e.nodeName;return t.length===2&&t[0]==="H"&&t[1]>="1"&&t[1]<="6"?parseInt(t[1],10):0}function ne(e,t,r){var n=e.nodeValue||"";if(n.length===0){f(r,"zero-length-text","warn","Zero-length text node",w(e.parentNode,t));return}X.test(n)&&f(r,"control-characters","error","Text contains control characters - Word will reject an exported .docx",w(e.parentNode,t))}function ae(e,t,r){for(var n=e.nodeName,a=w(e,t),i=e.attributes,s=0;i&&s<i.length;s++){var l=i[s].name.toLowerCase(),d=i[s].value||"";if(l.indexOf("on")===0&&l.length>2&&f(r,"event-handler-attribute","error","Inline event handler "+l+" present in document content",a),l==="href"||l==="src"||l==="xlink:href"){var x=d.replace(/[\u0000-\u0020]/g,"").toLowerCase();x.indexOf("javascript:")===0?f(r,"unsafe-url-scheme","error","javascript: URL in "+l,a):(x.indexOf("data:text/html")===0||x.indexOf("data:image/svg+xml")===0)&&f(r,"unsafe-url-scheme","error","Scriptable data: URL in "+l,a)}}if(n==="IFRAME"&&e.hasAttribute("srcdoc")&&f(r,"iframe-srcdoc","error","iframe[srcdoc] executes when the saved content is rendered downstream",a),A[n]&&!te(e)&&f(r,"empty-inline","warn","Empty inline <"+n.toLowerCase()+"> - a caret entering it cannot leave by typing",a),A[n]&&e.parentNode&&e.parentNode.nodeName===n&&f(r,"nested-duplicate-inline","warn","<"+n.toLowerCase()+"> nested directly inside another <"+n.toLowerCase()+">",a),A[n])for(var O=0;O<e.childNodes.length;O++){var B=e.childNodes[O];if(B.nodeType===1&&Z[B.nodeName]){f(r,"block-inside-inline","warn","Block <"+B.nodeName.toLowerCase()+"> inside inline <"+n.toLowerCase()+">",a);break}}if(n==="LI"){var Q=e.parentNode?e.parentNode.nodeName:"";Q!=="UL"&&Q!=="OL"&&f(r,"orphan-list-item","warn","<li> outside a <ul> or <ol>",a)}n==="IMG"&&j(e,t,r),e.hasAttribute&&e.hasAttribute("data-rte-atomic")&&e.getAttribute("contenteditable")!=="false"&&f(r,"atomic-not-protected","error",'Atomic element without contenteditable="false"',a)}function j(e,t,r){if(!(e.getAttribute("role")==="presentation"||e.getAttribute("aria-hidden")==="true")){var n=e.getAttribute("alt");n===null&&f(r,"image-missing-alt","warn","Image has no alt attribute",w(e,t))}}function ie(){var e=o.container.ownerDocument;if(!e.getElementById("rte-state-inspector-style")){var t=e.createElement("style");t.id="rte-state-inspector-style",t.innerHTML=[".rte-state-inspector-shell{display:flex;align-items:stretch;gap:10px;}",".rte-state-inspector-shell>.rte-state-inspector-host{flex:1 1 auto;min-width:0;}",".rte-state-inspector-panel{display:none;flex:0 0 340px;min-width:290px;max-width:min(400px,36vw);border:1px solid rgba(148,163,184,.22);border-radius:8px;background:#fff;box-shadow:0 14px 32px rgba(29,78,216,.1),0 2px 8px rgba(15,23,42,.06);overflow:hidden;color:#172033;font-family:Aptos,'Segoe UI',sans-serif;}",".rte-state-inspector-shell.is-open>.rte-state-inspector-panel{display:flex;flex-direction:column;}",".rte-state-inspector-header{padding:12px 12px 9px 14px;border-bottom:1px solid rgba(148,163,184,.16);background:rgba(248,251,255,.72);}",".rte-state-inspector-kicker{font-size:10px;line-height:1.3;letter-spacing:.08em;text-transform:uppercase;color:#52657e;font-weight:850;}",".rte-state-inspector-title{margin-top:3px;font-size:15px;line-height:1.2;font-weight:850;color:#172033;}",".rte-state-inspector-copy{margin-top:5px;font-size:12px;line-height:1.42;color:#52657e;}",".rte-state-inspector-toolbar{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 10px 8px 14px;border-bottom:1px solid rgba(148,163,184,.16);}",".rte-state-inspector-summary{min-width:0;font-size:12px;font-weight:750;color:#52657e;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}",".rte-state-inspector-actions{display:flex;gap:6px;flex:0 0 auto;}",".rte-state-inspector-btn{appearance:none;border:1px solid rgba(100,116,139,.18);background:#fff;color:#315277;cursor:pointer;font-size:12px;font-weight:750;padding:6px 9px;border-radius:7px;line-height:1;}",".rte-state-inspector-btn:hover,.rte-state-inspector-btn:focus-visible{background:#eef4ff;color:#0f3f9f;border-color:rgba(37,99,235,.28);}",".rte-state-inspector-tabs{display:flex;gap:2px;padding:8px 10px 0 10px;border-bottom:1px solid rgba(148,163,184,.16);}",".rte-state-inspector-tab{appearance:none;border:1px solid transparent;border-bottom:none;background:transparent;color:#52657e;cursor:pointer;font-size:12px;font-weight:800;padding:7px 10px;border-radius:7px 7px 0 0;line-height:1;}",".rte-state-inspector-tab:hover,.rte-state-inspector-tab:focus-visible{background:#f8fbff;color:#0f3f9f;}",".rte-state-inspector-tab[aria-selected='true']{background:#eef4ff;border-color:rgba(37,99,235,.26);color:#0f3f9f;}",".rte-state-inspector-body{padding:10px;overflow:auto;min-height:160px;max-height:540px;scrollbar-width:thin;font-size:12px;line-height:1.5;}",".rte-state-inspector-issue{display:block;padding:8px 10px;margin-bottom:6px;border:1px solid rgba(148,163,184,.24);border-left-width:3px;border-radius:7px;background:#fff;}",".rte-state-inspector-issue.is-error{border-left-color:#dc2626;background:#fef4f4;}",".rte-state-inspector-issue.is-warn{border-left-color:#d97706;background:#fffaf1;}",".rte-state-inspector-issue-msg{font-weight:750;color:#172033;}",".rte-state-inspector-issue-meta{margin-top:3px;font-size:11px;color:#52657e;font-family:Consolas,'Cascadia Mono',monospace;word-break:break-all;}",".rte-state-inspector-ok{padding:14px;color:#166534;font-weight:750;background:#f0fdf4;border:1px dashed rgba(22,101,52,.3);border-radius:8px;}",".rte-state-inspector-empty{padding:14px;color:#52657e;font-weight:700;background:#fff;border:1px dashed rgba(148,163,184,.34);border-radius:8px;}",".rte-state-inspector-pre{margin:0;font-family:Consolas,'Cascadia Mono',monospace;font-size:11px;line-height:1.55;color:#172033;white-space:pre;}",".rte-state-inspector-row{display:flex;gap:8px;padding:4px 0;border-bottom:1px solid rgba(148,163,184,.14);}",".rte-state-inspector-row-key{flex:0 0 116px;color:#52657e;font-weight:750;}",".rte-state-inspector-row-val{flex:1 1 auto;min-width:0;font-family:Consolas,'Cascadia Mono',monospace;word-break:break-all;}",".rte-state-inspector-row.is-flagged .rte-state-inspector-row-val{color:#b91c1c;font-weight:750;}","@media (max-width: 1100px){.rte-state-inspector-shell{display:block;}.rte-state-inspector-panel{margin-top:12px;max-width:none;width:100%;}.rte-state-inspector-body{max-height:340px;}}"].join(""),e.head.appendChild(t),c&&typeof c.ensureStyleSheetLive=="function"&&c.ensureStyleSheetLive(e,t,"rte-state-inspector-style",t.textContent)}}function U(){if(p)return p;var e=o.container,t=e.ownerDocument;p=t.createElement("div"),p.className="rte-state-inspector-shell";var r=t.createElement("div");r.className="rte-state-inspector-host",e.parentNode.insertBefore(p,e),p.appendChild(r),r.appendChild(e),g=t.createElement("aside"),g.className="rte-state-inspector-panel",g.setAttribute("role","complementary"),g.setAttribute("aria-label",o.stateInspectorTitle);var n=t.createElement("div");n.className="rte-state-inspector-header";var a=t.createElement("div");a.className="rte-state-inspector-kicker",a.innerText="Developer";var i=t.createElement("div");i.className="rte-state-inspector-title",i.innerText=o.stateInspectorTitle;var s=t.createElement("div");s.className="rte-state-inspector-copy",s.innerText=o.stateInspectorHint,n.appendChild(a),n.appendChild(i),n.appendChild(s);var l=t.createElement("div");l.className="rte-state-inspector-toolbar",y=t.createElement("div"),y.className="rte-state-inspector-summary",y.setAttribute("data-rte-inspector-summary","1");var d=t.createElement("div");d.className="rte-state-inspector-actions",d.appendChild(V(t,"Copy","Copy the state snapshot as JSON",le)),d.appendChild(V(t,"Hide","Hide the state inspector",k)),l.appendChild(y),l.appendChild(d),b=t.createElement("div"),b.className="rte-state-inspector-tabs",b.setAttribute("role","tablist");for(var x=0;x<M.length;x++)b.appendChild(oe(t,M[x]));return u=t.createElement("div"),u.className="rte-state-inspector-body",g.appendChild(n),g.appendChild(l),g.appendChild(b),g.appendChild(u),p.appendChild(g),p}function V(e,t,r,n){var a=e.createElement("button");return a.type="button",a.className="rte-state-inspector-btn",a.innerText=t,a.setAttribute("aria-label",r),a.onclick=n,a}function oe(e,t){var r=e.createElement("button");return r.type="button",r.className="rte-state-inspector-tab",r.innerText=t.label,r.setAttribute("role","tab"),r.setAttribute("data-rte-inspector-tab",t.id),r.setAttribute("aria-selected",t.id===v?"true":"false"),r.onclick=function(){v=t.id,se(),N()},r}function se(){if(b)for(var e=b.querySelectorAll("[data-rte-inspector-tab]"),t=0;t<e.length;t++){var r=e[t].getAttribute("data-rte-inspector-tab");e[t].setAttribute("aria-selected",r===v?"true":"false")}}function G(){p&&p.classList.contains("is-open")?k():E()}function E(){U(),p.classList.add("is-open"),N()}function k(){p&&p.classList.remove("is-open")}function K(){!p||!p.classList.contains("is-open")||(clearTimeout(R),R=setTimeout(function(){N()},120))}function le(){var e=JSON.stringify(_(),null,2);if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(e);return}var t=o.container.ownerDocument,r=t.createElement("textarea");r.value=e,r.style.position="fixed",r.style.opacity="0",t.body.appendChild(r),r.select();try{t.execCommand("copy")}catch{}t.body.removeChild(r)}function ce(e){for(;e.firstChild;)e.removeChild(e.firstChild)}function N(){if(!(!p||!u)){for(var e=L(),t=S(e),r=o.container.ownerDocument,n=0,a=0;a<t.issues.length;a++)t.issues[a].severity==="error"&&n++;y&&(y.innerText=e.counters.elements+" el \xB7 "+t.issues.length+" issue"+(t.issues.length===1?"":"s")+(n?" \xB7 "+n+" error"+(n===1?"":"s"):"")),ce(u),v==="issues"?pe(r,t.issues):v==="tree"?de(r,e):v==="selection"?ue(r):v==="plugins"?fe(r):v==="log"&&he(r)}}function pe(e,t){if(!t.length){var r=e.createElement("div");r.className="rte-state-inspector-ok",r.innerText="No structural issues found.",u.appendChild(r);return}for(var n=0;n<t.length;n++){var a=t[n],i=e.createElement("div");i.className="rte-state-inspector-issue is-"+(a.severity==="error"?"error":"warn"),i.setAttribute("data-rte-issue-id",a.id);var s=e.createElement("div");s.className="rte-state-inspector-issue-msg",s.innerText=a.message;var l=e.createElement("div");l.className="rte-state-inspector-issue-meta",l.innerText=(a.detail||"(document root)")+" \xB7 "+a.id,i.appendChild(s),i.appendChild(l),u.appendChild(i)}}function de(e,t){if(!t.root||!t.root.children.length){var r=e.createElement("div");r.className="rte-state-inspector-empty",r.innerText=o.stateInspectorEmptyText,u.appendChild(r);return}var n=e.createElement("pre");n.className="rte-state-inspector-pre",n.innerText=J(t.root,0).join(`
|
|
2
|
-
`),u.appendChild(n)}function J(e,t){var r=[],n=new Array(t+1).join(" ");if(e.type==="text")return r.push(n+"#text("+e.length+") "+JSON.stringify(e.text)),r;if(e.type==="comment")return r.push(n+"#comment("+e.length+")"),r;var a=n+"<"+e.name,i=[];for(var s in e.attrs)i.push(s);if(i.length){i.sort();for(var l=0;l<i.length&&l<4;l++)a+=" "+i[l]+"="+JSON.stringify(e.attrs[i[l]]);i.length>4&&(a+=" \u2026+"+(i.length-4))}a+=">",e.truncated&&(a+=" \u2026 "+e.childCount+" children (depth limit)"),r.push(a);for(var d=0;d<(e.children||[]).length;d++)r=r.concat(J(e.children[d],t+1));return r}function ue(e){var t=
|
|
1
|
+
window.RTE_DefaultConfig||(window.RTE_DefaultConfig={}),RTE_DefaultConfig.plugin_stateinspector=RTE_Plugin_StateInspector;function RTE_Plugin_StateInspector(){var T=this,o,c,p=null,g=null,u=null,b=null,y=null,M=0,v="issues",C=[],h=[],I=60,D=[{id:"issues",label:"Issues"},{id:"tree",label:"Tree"},{id:"selection",label:"Selection"},{id:"plugins",label:"Plugins"},{id:"log",label:"Log"}],A={A:1,ABBR:1,B:1,BDI:1,BDO:1,CITE:1,CODE:1,DEL:1,DFN:1,EM:1,I:1,INS:1,KBD:1,MARK:1,Q:1,S:1,SAMP:1,SMALL:1,SPAN:1,STRONG:1,SUB:1,SUP:1,U:1,VAR:1,FONT:1},q={AREA:1,BASE:1,BR:1,COL:1,EMBED:1,HR:1,IMG:1,INPUT:1,LINK:1,META:1,PARAM:1,SOURCE:1,TRACK:1,WBR:1},Z={ADDRESS:1,ARTICLE:1,ASIDE:1,BLOCKQUOTE:1,DIV:1,DL:1,DT:1,DD:1,FIELDSET:1,FIGCAPTION:1,FIGURE:1,FOOTER:1,FORM:1,H1:1,H2:1,H3:1,H4:1,H5:1,H6:1,HEADER:1,HR:1,LI:1,MAIN:1,NAV:1,OL:1,P:1,PRE:1,SECTION:1,TABLE:1,UL:1},X=/[\u0000-\u0008\u000B\u000C\u000E-\u001F]/;T.PluginName="StateInspector",T.InitConfig=function(e){if(o=e,o.stateInspectorEnabled!==!1&&(o.stateInspectorTitle=o.stateInspectorTitle||"State inspector",o.stateInspectorHint=o.stateInspectorHint||"Derived document model, structural checks, and a copyable snapshot for bug reports.",o.stateInspectorEmptyText=o.stateInspectorEmptyText||"No content to inspect yet.",typeof o.stateInspectorAutoOpen!="boolean"&&(o.stateInspectorAutoOpen=!1),typeof o.stateInspectorToolbarButton!="boolean"&&(o.stateInspectorToolbarButton=!1),typeof o.stateInspectorMaxDepth!="number"&&(o.stateInspectorMaxDepth=24),typeof o.stateInspectorLogLimit=="number"&&(I=Math.max(10,Math.min(500,o.stateInspectorLogLimit))),C=Y(o),o.stateInspectorToolbarButton&&(z("toolbar_default","#{stateinspector}"),z("toolbar_full","#{stateinspector}")),o.stateInspectorEnabled!==!1&&o.container&&o.container.parentNode))try{k()}catch{}},T.InitEditor=function(e){c=e,o.stateInspectorEnabled!==!1&&(c.stateInspector={close:function(){O()},isOpen:function(){return!!(p&&p.classList.contains("is-open"))},issues:function(){return S(L()).issues},log:function(){return h.slice(0)},open:function(){E()},plugins:function(){return C.slice(0)},refresh:function(){N()},snapshot:function(){return j()},toggle:function(){G()}},ie(),c.toolbarFactoryMap=c.toolbarFactoryMap||{},c.toolbarFactoryMap.stateinspector=function(t){return c.createToolbarButton(t)},c.attachEvent("exec_command_stateinspector",function(t){t.returnValue=!0,t.stopBubble=!0,G()}),c.attachEvent("change",function(){H("change"),K()}),c.attachEvent("selectionchange",function(){H("selectionchange"),K()}),c.slashCommands&&c.slashCommands.register&&c.slashCommands.register({id:"stateinspector",section:"Tools",title:o.stateInspectorTitle,description:"Inspect document structure, selection, and structural issues",keywords:["inspect","debug","devtools","state","structure"],run:function(){E()}}),k(),o.stateInspectorAutoOpen&&E())};function z(e,t){o[e]&&o[e].indexOf(t)===-1&&(o[e]=o[e]+t)}function Y(e){var t=[];for(var r in e)r[0]!=="p"||r.substr(0,7)!=="plugin_"||!e[r]||!(e[r]instanceof Function)||t.push({index:t.length,key:r,name:r.substring(7)});return t}function H(e){h.push({at:Date.now(),event:e}),h.length>I&&h.splice(0,h.length-I)}function $(e){var t={},r=e.attributes;if(!r)return t;for(var n=0;n<r.length;n++){var a=r[n].value;t[r[n].name]=a.length>220?a.substring(0,220)+"\u2026":a}return t}function P(e,t,r,n){if(e.nodeType===3){var a=e.nodeValue||"";return n.textNodes++,n.characters+=a.length,{type:"text",length:a.length,text:a.length>80?a.substring(0,80)+"\u2026":a}}if(e.nodeType===8)return n.comments++,{type:"comment",length:(e.nodeValue||"").length};if(e.nodeType!==1)return null;n.elements++;var i=e.nodeName;n.tags[i]=(n.tags[i]||0)+1;var s={type:"element",name:i.toLowerCase(),attrs:$(e),children:[]};if(t>=r)return s.truncated=!0,s.childCount=e.childNodes.length,s;for(var l=0;l<e.childNodes.length;l++){var d=P(e.childNodes[l],t+1,r,n);d&&s.children.push(d)}return s}function L(){var e=c&&c.getEditable?c.getEditable():null,t={elements:0,textNodes:0,comments:0,characters:0,tags:{}};if(!e)return{root:null,counters:t,editable:null};for(var r=Math.max(2,o.stateInspectorMaxDepth||24),n={type:"element",name:"root",attrs:{},children:[]},a=0;a<e.childNodes.length;a++){var i=P(e.childNodes[a],1,r,t);i&&n.children.push(i)}return{root:n,counters:t,editable:e}}function F(){var e=c&&c.getDocument?c.getDocument():null,t=c&&c.getEditable?c.getEditable():null,r={available:!1};if(!e||!e.getSelection)return r;var n;try{n=e.getSelection()}catch{return r}if(!n||n.rangeCount===0)return r;var a;try{a=n.getRangeAt(0)}catch{return r}if(!a)return r;r.available=!0,r.collapsed=!!a.collapsed,r.anchor=_(a.startContainer,a.startOffset),r.focus=_(a.endContainer,a.endOffset),r.insideEditable=!!(t&&t.contains(a.startContainer)&&t.contains(a.endContainer));try{var i=String(a.toString()||"");r.textLength=i.length,r.text=i.length>120?i.substring(0,120)+"\u2026":i}catch{r.textLength=0}return r.block=ee(a.startContainer,t),r}function _(e,t){if(!e)return{node:"(none)",offset:t};if(e.nodeType===3){var r=e.nodeValue||"";return{node:"#text",offset:t,length:r.length,zeroLength:r.length===0}}return{node:e.nodeName?e.nodeName.toLowerCase():"(unknown)",offset:t,childCount:e.childNodes?e.childNodes.length:0}}function ee(e,t){for(var r=[],n=e;n&&n!==t;)n.nodeType===1&&r.unshift(n.nodeName.toLowerCase()),n=n.parentNode;return r.join(" > ")}function j(){var e=L(),t=S(e);return{snapshotVersion:1,generatedAt:new Date().toISOString(),counters:e.counters,issues:t.issues,plugins:C.slice(0),recentEvents:h.slice(-20),selection:F(),tree:e.root}}function f(e,t,r,n,a){e.push({id:t,severity:r,message:n,detail:a||""})}function w(e,t){for(var r=[],n=e;n&&n!==t&&n.nodeType===1;){var a=n.nodeName.toLowerCase();n.id&&(a+="#"+n.id),r.unshift(a),n=n.parentNode}return r.join(" > ")}function te(e){if((e.textContent||"").replace(/[\s\u200B\uFEFF]/g,"")!=="")return!0;for(var t=0;t<e.childNodes.length;t++){var r=e.childNodes[t];if(r.nodeType===1&&q[r.nodeName])return!0}return!1}function S(e){var t=[],r=e.editable;if(!r)return{issues:t};for(var n=r.ownerDocument.createTreeWalker(r,5,null,!1),a=0,i;i=n.nextNode();){if(i.nodeType===3){ne(i,r,t);continue}ae(i,r,t);var s=re(i);s&&(a&&s>a+1&&f(t,"heading-skip","warn","Heading level jumps from h"+a+" to h"+s,w(i,r)),a=s)}for(var l=0;l<r.childNodes.length;l++){var d=r.childNodes[l];d.nodeType===1&&d.nodeName==="IMG"&&U(d,r,t)}return{issues:t}}function re(e){var t=e.nodeName;return t.length===2&&t[0]==="H"&&t[1]>="1"&&t[1]<="6"?parseInt(t[1],10):0}function ne(e,t,r){var n=e.nodeValue||"";if(n.length===0){f(r,"zero-length-text","warn","Zero-length text node",w(e.parentNode,t));return}X.test(n)&&f(r,"control-characters","error","Text contains control characters - Word will reject an exported .docx",w(e.parentNode,t))}function ae(e,t,r){for(var n=e.nodeName,a=w(e,t),i=e.attributes,s=0;i&&s<i.length;s++){var l=i[s].name.toLowerCase(),d=i[s].value||"";if(l.indexOf("on")===0&&l.length>2&&f(r,"event-handler-attribute","error","Inline event handler "+l+" present in document content",a),l==="href"||l==="src"||l==="xlink:href"){var x=d.replace(/[\u0000-\u0020]/g,"").toLowerCase();x.indexOf("javascript:")===0?f(r,"unsafe-url-scheme","error","javascript: URL in "+l,a):(x.indexOf("data:text/html")===0||x.indexOf("data:image/svg+xml")===0)&&f(r,"unsafe-url-scheme","error","Scriptable data: URL in "+l,a)}}if(n==="IFRAME"&&e.hasAttribute("srcdoc")&&f(r,"iframe-srcdoc","error","iframe[srcdoc] executes when the saved content is rendered downstream",a),A[n]&&!te(e)&&f(r,"empty-inline","warn","Empty inline <"+n.toLowerCase()+"> - a caret entering it cannot leave by typing",a),A[n]&&e.parentNode&&e.parentNode.nodeName===n&&f(r,"nested-duplicate-inline","warn","<"+n.toLowerCase()+"> nested directly inside another <"+n.toLowerCase()+">",a),A[n])for(var B=0;B<e.childNodes.length;B++){var R=e.childNodes[B];if(R.nodeType===1&&Z[R.nodeName]){f(r,"block-inside-inline","warn","Block <"+R.nodeName.toLowerCase()+"> inside inline <"+n.toLowerCase()+">",a);break}}if(n==="LI"){var Q=e.parentNode?e.parentNode.nodeName:"";Q!=="UL"&&Q!=="OL"&&f(r,"orphan-list-item","warn","<li> outside a <ul> or <ol>",a)}n==="IMG"&&U(e,t,r),e.hasAttribute&&e.hasAttribute("data-rte-atomic")&&e.getAttribute("contenteditable")!=="false"&&f(r,"atomic-not-protected","error",'Atomic element without contenteditable="false"',a)}function U(e,t,r){if(!(e.getAttribute("role")==="presentation"||e.getAttribute("aria-hidden")==="true")){var n=e.getAttribute("alt");n===null&&f(r,"image-missing-alt","warn","Image has no alt attribute",w(e,t))}}function ie(){var e=o.container.ownerDocument;if(!e.getElementById("rte-state-inspector-style")){var t=e.createElement("style");t.id="rte-state-inspector-style",t.innerHTML=[".rte-state-inspector-shell{display:flex;align-items:stretch;gap:10px;}",".rte-state-inspector-shell>.rte-state-inspector-host{flex:1 1 auto;min-width:0;}",".rte-state-inspector-panel{display:none;flex:0 0 340px;min-width:290px;max-width:min(400px,36vw);border:1px solid rgba(148,163,184,.22);border-radius:8px;background:#fff;box-shadow:0 14px 32px rgba(29,78,216,.1),0 2px 8px rgba(15,23,42,.06);overflow:hidden;color:#172033;font-family:Aptos,'Segoe UI',sans-serif;}",".rte-state-inspector-shell.is-open>.rte-state-inspector-panel{display:flex;flex-direction:column;}",".rte-state-inspector-header{padding:12px 12px 9px 14px;border-bottom:1px solid rgba(148,163,184,.16);background:rgba(248,251,255,.72);}",".rte-state-inspector-kicker{font-size:10px;line-height:1.3;letter-spacing:.08em;text-transform:uppercase;color:#52657e;font-weight:850;}",".rte-state-inspector-title{margin-top:3px;font-size:15px;line-height:1.2;font-weight:850;color:#172033;}",".rte-state-inspector-copy{margin-top:5px;font-size:12px;line-height:1.42;color:#52657e;}",".rte-state-inspector-toolbar{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 10px 8px 14px;border-bottom:1px solid rgba(148,163,184,.16);}",".rte-state-inspector-summary{min-width:0;font-size:12px;font-weight:750;color:#52657e;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}",".rte-state-inspector-actions{display:flex;gap:6px;flex:0 0 auto;}",".rte-state-inspector-btn{appearance:none;border:1px solid rgba(100,116,139,.18);background:#fff;color:#315277;cursor:pointer;font-size:12px;font-weight:750;padding:6px 9px;border-radius:7px;line-height:1;}",".rte-state-inspector-btn:hover,.rte-state-inspector-btn:focus-visible{background:#eef4ff;color:#0f3f9f;border-color:rgba(37,99,235,.28);}",".rte-state-inspector-tabs{display:flex;gap:2px;padding:8px 10px 0 10px;border-bottom:1px solid rgba(148,163,184,.16);}",".rte-state-inspector-tab{appearance:none;border:1px solid transparent;border-bottom:none;background:transparent;color:#52657e;cursor:pointer;font-size:12px;font-weight:800;padding:7px 10px;border-radius:7px 7px 0 0;line-height:1;}",".rte-state-inspector-tab:hover,.rte-state-inspector-tab:focus-visible{background:#f8fbff;color:#0f3f9f;}",".rte-state-inspector-tab[aria-selected='true']{background:#eef4ff;border-color:rgba(37,99,235,.26);color:#0f3f9f;}",".rte-state-inspector-body{padding:10px;overflow:auto;min-height:160px;max-height:540px;scrollbar-width:thin;font-size:12px;line-height:1.5;}",".rte-state-inspector-issue{display:block;padding:8px 10px;margin-bottom:6px;border:1px solid rgba(148,163,184,.24);border-left-width:3px;border-radius:7px;background:#fff;}",".rte-state-inspector-issue.is-error{border-left-color:#dc2626;background:#fef4f4;}",".rte-state-inspector-issue.is-warn{border-left-color:#d97706;background:#fffaf1;}",".rte-state-inspector-issue-msg{font-weight:750;color:#172033;}",".rte-state-inspector-issue-meta{margin-top:3px;font-size:11px;color:#52657e;font-family:Consolas,'Cascadia Mono',monospace;word-break:break-all;}",".rte-state-inspector-ok{padding:14px;color:#166534;font-weight:750;background:#f0fdf4;border:1px dashed rgba(22,101,52,.3);border-radius:8px;}",".rte-state-inspector-empty{padding:14px;color:#52657e;font-weight:700;background:#fff;border:1px dashed rgba(148,163,184,.34);border-radius:8px;}",".rte-state-inspector-pre{margin:0;font-family:Consolas,'Cascadia Mono',monospace;font-size:11px;line-height:1.55;color:#172033;white-space:pre;}",".rte-state-inspector-row{display:flex;gap:8px;padding:4px 0;border-bottom:1px solid rgba(148,163,184,.14);}",".rte-state-inspector-row-key{flex:0 0 116px;color:#52657e;font-weight:750;}",".rte-state-inspector-row-val{flex:1 1 auto;min-width:0;font-family:Consolas,'Cascadia Mono',monospace;word-break:break-all;}",".rte-state-inspector-row.is-flagged .rte-state-inspector-row-val{color:#b91c1c;font-weight:750;}","@media (max-width: 1100px){.rte-state-inspector-shell{display:block;}.rte-state-inspector-panel{margin-top:12px;max-width:none;width:100%;}.rte-state-inspector-body{max-height:340px;}}"].join(""),e.head.appendChild(t),c&&typeof c.ensureStyleSheetLive=="function"&&c.ensureStyleSheetLive(e,t,"rte-state-inspector-style",t.textContent)}}function k(){if(p)return p;var e=o.container,t=e.ownerDocument;p=t.createElement("div"),p.className="rte-state-inspector-shell";var r=t.createElement("div");r.className="rte-state-inspector-host",e.parentNode.insertBefore(p,e),p.appendChild(r),r.appendChild(e),g=t.createElement("aside"),g.className="rte-state-inspector-panel",g.setAttribute("role","complementary"),g.setAttribute("aria-label",o.stateInspectorTitle);var n=t.createElement("div");n.className="rte-state-inspector-header";var a=t.createElement("div");a.className="rte-state-inspector-kicker",a.innerText="Developer";var i=t.createElement("div");i.className="rte-state-inspector-title",i.innerText=o.stateInspectorTitle;var s=t.createElement("div");s.className="rte-state-inspector-copy",s.innerText=o.stateInspectorHint,n.appendChild(a),n.appendChild(i),n.appendChild(s);var l=t.createElement("div");l.className="rte-state-inspector-toolbar",y=t.createElement("div"),y.className="rte-state-inspector-summary",y.setAttribute("data-rte-inspector-summary","1");var d=t.createElement("div");d.className="rte-state-inspector-actions",d.appendChild(V(t,"Copy","Copy the state snapshot as JSON",le)),d.appendChild(V(t,"Hide","Hide the state inspector",O)),l.appendChild(y),l.appendChild(d),b=t.createElement("div"),b.className="rte-state-inspector-tabs",b.setAttribute("role","tablist");for(var x=0;x<D.length;x++)b.appendChild(oe(t,D[x]));return u=t.createElement("div"),u.className="rte-state-inspector-body",g.appendChild(n),g.appendChild(l),g.appendChild(b),g.appendChild(u),p.appendChild(g),p}function V(e,t,r,n){var a=e.createElement("button");return a.type="button",a.className="rte-state-inspector-btn",a.innerText=t,a.setAttribute("aria-label",r),a.onclick=n,a}function oe(e,t){var r=e.createElement("button");return r.type="button",r.className="rte-state-inspector-tab",r.innerText=t.label,r.setAttribute("role","tab"),r.setAttribute("data-rte-inspector-tab",t.id),r.setAttribute("aria-selected",t.id===v?"true":"false"),r.onclick=function(){v=t.id,se(),N()},r}function se(){if(b)for(var e=b.querySelectorAll("[data-rte-inspector-tab]"),t=0;t<e.length;t++){var r=e[t].getAttribute("data-rte-inspector-tab");e[t].setAttribute("aria-selected",r===v?"true":"false")}}function G(){p&&p.classList.contains("is-open")?O():E()}function E(){k(),p.classList.add("is-open"),N()}function O(){p&&p.classList.remove("is-open")}function K(){!p||!p.classList.contains("is-open")||(clearTimeout(M),M=setTimeout(function(){N()},120))}function le(){var e=JSON.stringify(j(),null,2);if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(e);return}var t=o.container.ownerDocument,r=t.createElement("textarea");r.value=e,r.style.position="fixed",r.style.opacity="0",t.body.appendChild(r),r.select();try{t.execCommand("copy")}catch{}t.body.removeChild(r)}function ce(e){for(;e.firstChild;)e.removeChild(e.firstChild)}function N(){if(!(!p||!u)){for(var e=L(),t=S(e),r=o.container.ownerDocument,n=0,a=0;a<t.issues.length;a++)t.issues[a].severity==="error"&&n++;y&&(y.innerText=e.counters.elements+" el \xB7 "+t.issues.length+" issue"+(t.issues.length===1?"":"s")+(n?" \xB7 "+n+" error"+(n===1?"":"s"):"")),ce(u),v==="issues"?pe(r,t.issues):v==="tree"?de(r,e):v==="selection"?ue(r):v==="plugins"?fe(r):v==="log"&&he(r)}}function pe(e,t){if(!t.length){var r=e.createElement("div");r.className="rte-state-inspector-ok",r.innerText="No structural issues found.",u.appendChild(r);return}for(var n=0;n<t.length;n++){var a=t[n],i=e.createElement("div");i.className="rte-state-inspector-issue is-"+(a.severity==="error"?"error":"warn"),i.setAttribute("data-rte-issue-id",a.id);var s=e.createElement("div");s.className="rte-state-inspector-issue-msg",s.innerText=a.message;var l=e.createElement("div");l.className="rte-state-inspector-issue-meta",l.innerText=(a.detail||"(document root)")+" \xB7 "+a.id,i.appendChild(s),i.appendChild(l),u.appendChild(i)}}function de(e,t){if(!t.root||!t.root.children.length){var r=e.createElement("div");r.className="rte-state-inspector-empty",r.innerText=o.stateInspectorEmptyText,u.appendChild(r);return}var n=e.createElement("pre");n.className="rte-state-inspector-pre",n.innerText=J(t.root,0).join(`
|
|
2
|
+
`),u.appendChild(n)}function J(e,t){var r=[],n=new Array(t+1).join(" ");if(e.type==="text")return r.push(n+"#text("+e.length+") "+JSON.stringify(e.text)),r;if(e.type==="comment")return r.push(n+"#comment("+e.length+")"),r;var a=n+"<"+e.name,i=[];for(var s in e.attrs)i.push(s);if(i.length){i.sort();for(var l=0;l<i.length&&l<4;l++)a+=" "+i[l]+"="+JSON.stringify(e.attrs[i[l]]);i.length>4&&(a+=" \u2026+"+(i.length-4))}a+=">",e.truncated&&(a+=" \u2026 "+e.childCount+" children (depth limit)"),r.push(a);for(var d=0;d<(e.children||[]).length;d++)r=r.concat(J(e.children[d],t+1));return r}function ue(e){var t=F();if(!t.available){var r=e.createElement("div");r.className="rte-state-inspector-empty",r.innerText="No selection in the document.",u.appendChild(r);return}m(e,"Collapsed",String(t.collapsed)),m(e,"In editable",String(t.insideEditable),!t.insideEditable),m(e,"Block path",t.block||"(root)"),m(e,"Anchor",W(t.anchor),!!(t.anchor&&t.anchor.zeroLength)),m(e,"Focus",W(t.focus),!!(t.focus&&t.focus.zeroLength)),m(e,"Selected",t.textLength+" chars"),t.text&&m(e,"Text",t.text)}function W(e){if(!e)return"(none)";var t=e.node+" @ "+e.offset;return typeof e.length=="number"&&(t+=" (len "+e.length+")"),typeof e.childCount=="number"&&(t+=" ("+e.childCount+" children)"),e.zeroLength&&(t+=" \u2190 zero-length text node"),t}function m(e,t,r,n){var a=e.createElement("div");a.className="rte-state-inspector-row"+(n?" is-flagged":"");var i=e.createElement("div");i.className="rte-state-inspector-row-key",i.innerText=t;var s=e.createElement("div");s.className="rte-state-inspector-row-val",s.innerText=r,a.appendChild(i),a.appendChild(s),u.appendChild(a)}function fe(e){if(!C.length){var t=e.createElement("div");t.className="rte-state-inspector-empty",t.innerText="No plugins registered.",u.appendChild(t);return}var r=e.createElement("div");r.className="rte-state-inspector-copy",r.innerText="Initialization order. A plugin can only register into another plugin's API if it appears below it.",u.appendChild(r);for(var n=0;n<C.length;n++)m(e,String(n+1).padStart?String(n+1).padStart(3,"0"):String(n+1),C[n].name)}function he(e){if(!h.length){var t=e.createElement("div");t.className="rte-state-inspector-empty",t.innerText="No editor events recorded yet.",u.appendChild(t);return}for(var r=h[0].at,n=h.length-1;n>=0;n--)m(e,"+"+(h[n].at-r)+"ms",h[n].event)}}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
var pendingLoadsByBasePath =
|
|
1
|
+
var pendingLoadsByBasePath = Object.create(null);
|
|
2
|
+
var failedLoadsByBasePath = Object.create(null);
|
|
2
3
|
|
|
3
4
|
var INLINE_CONTAINER_TAGS = {
|
|
4
5
|
a: true,
|
|
@@ -138,7 +139,7 @@ function getPlainTextFromHtml(html) {
|
|
|
138
139
|
// Japanese hiragana/katakana, and the ideographic iteration marks. Hangul is
|
|
139
140
|
// intentionally excluded — Korean is written with inter-word spaces, so it is
|
|
140
141
|
// counted as whitespace-delimited tokens like Latin text (matching Word/Docs).
|
|
141
|
-
var CJK_WORD_CHAR = /[
|
|
142
|
+
var CJK_WORD_CHAR = /[\u3005\u3007\u3040-\u30ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff]/g;
|
|
142
143
|
|
|
143
144
|
function countWords(value) {
|
|
144
145
|
var normalized = normalizePlainText(value);
|
|
@@ -1798,7 +1799,7 @@ function parseBlockNode(node) {
|
|
|
1798
1799
|
}
|
|
1799
1800
|
var orderedListAttrs = {};
|
|
1800
1801
|
if (startValue) {
|
|
1801
|
-
orderedListAttrs.start = parseInt(startValue, 10)
|
|
1802
|
+
orderedListAttrs.start = (isFinite(parseInt(startValue, 10)) ? parseInt(startValue, 10) : 1);
|
|
1802
1803
|
}
|
|
1803
1804
|
if (orderedListType) {
|
|
1804
1805
|
orderedListAttrs.orderedListType = orderedListType;
|
|
@@ -2538,7 +2539,7 @@ function escapeHtml(value) {
|
|
|
2538
2539
|
}
|
|
2539
2540
|
|
|
2540
2541
|
function escapeAttribute(value) {
|
|
2541
|
-
return escapeHtml(value).replace(/"/g, """);
|
|
2542
|
+
return escapeHtml(value === undefined || value === null ? "" : String(value)).replace(/"/g, """);
|
|
2542
2543
|
}
|
|
2543
2544
|
|
|
2544
2545
|
function buildAttributeString(attrs) {
|
|
@@ -2791,7 +2792,7 @@ function serializeNode(node, inlineMode) {
|
|
|
2791
2792
|
|
|
2792
2793
|
if (node.type === "orderedList") {
|
|
2793
2794
|
var listAttrs = {};
|
|
2794
|
-
if (node.attrs && node.attrs.start) {
|
|
2795
|
+
if (node.attrs && node.attrs.start !== undefined && node.attrs.start !== null) {
|
|
2795
2796
|
listAttrs.start = node.attrs.start;
|
|
2796
2797
|
}
|
|
2797
2798
|
if (node.attrs) {
|
|
@@ -3192,8 +3193,8 @@ function validateNode(node, path, mode, issues) {
|
|
|
3192
3193
|
|
|
3193
3194
|
if (node.type === "bulletList" || node.type === "orderedList") {
|
|
3194
3195
|
if (node.type === "orderedList" && node.attrs && node.attrs.start !== undefined) {
|
|
3195
|
-
if (typeof node.attrs.start !== "number" || node.attrs.start
|
|
3196
|
-
issues.push(createValidationIssue(path + ".attrs.start", "Ordered lists require a
|
|
3196
|
+
if (typeof node.attrs.start !== "number" || !isFinite(node.attrs.start) || Math.floor(node.attrs.start) !== node.attrs.start || Math.abs(node.attrs.start) > 9007199254740991) {
|
|
3197
|
+
issues.push(createValidationIssue(path + ".attrs.start", "Ordered lists require a finite safe integer start value."));
|
|
3197
3198
|
}
|
|
3198
3199
|
}
|
|
3199
3200
|
if (node.type === "orderedList" && node.attrs && node.attrs.orderedListType !== undefined) {
|
|
@@ -3928,12 +3929,12 @@ function getMarkdownListMatch(line) {
|
|
|
3928
3929
|
};
|
|
3929
3930
|
}
|
|
3930
3931
|
|
|
3931
|
-
var orderedMatch = /^(\s*)(\d
|
|
3932
|
+
var orderedMatch = /^(\s*)(\d{1,9})\.\s+(.*)$/.exec(line);
|
|
3932
3933
|
if (orderedMatch) {
|
|
3933
3934
|
return {
|
|
3934
3935
|
indent: orderedMatch[1].length,
|
|
3935
3936
|
ordered: true,
|
|
3936
|
-
start: parseInt(orderedMatch[2], 10)
|
|
3937
|
+
start: parseInt(orderedMatch[2], 10),
|
|
3937
3938
|
text: orderedMatch[3],
|
|
3938
3939
|
marker: orderedMatch[2] + ".",
|
|
3939
3940
|
contentIndent: orderedMatch[1].length + orderedMatch[2].length + 2,
|
|
@@ -4923,8 +4924,13 @@ function serializeMarkdownBlocks(nodes) {
|
|
|
4923
4924
|
|
|
4924
4925
|
if (node.type === "bulletList" || node.type === "orderedList") {
|
|
4925
4926
|
var listParts = [];
|
|
4926
|
-
var start = node.type === "orderedList" && node.attrs && node.attrs.start ? parseInt(node.attrs.start, 10)
|
|
4927
|
+
var start = node.type === "orderedList" && node.attrs && node.attrs.start !== undefined ? parseInt(node.attrs.start, 10) : 1;
|
|
4928
|
+
if (!isFinite(start)) start = 1;
|
|
4927
4929
|
var listItems = node.content || [];
|
|
4930
|
+
if (node.type === "orderedList" && (start < 0 || start + Math.max(0, listItems.length - 1) > 999999999)) {
|
|
4931
|
+
parts.push(serializeNode(node, false));
|
|
4932
|
+
continue;
|
|
4933
|
+
}
|
|
4928
4934
|
for (var itemIndex = 0; itemIndex < listItems.length; itemIndex++) {
|
|
4929
4935
|
var prefix = node.type === "orderedList" ? (start + itemIndex) + ". " : "- ";
|
|
4930
4936
|
listParts.push(serializeMarkdownListItem(listItems[itemIndex].content || [], prefix));
|
|
@@ -5069,15 +5075,28 @@ function installStructuredContentBridge() {
|
|
|
5069
5075
|
}
|
|
5070
5076
|
|
|
5071
5077
|
function ensureStylesheet(href) {
|
|
5072
|
-
|
|
5073
|
-
|
|
5074
|
-
|
|
5075
|
-
|
|
5076
|
-
|
|
5077
|
-
|
|
5078
|
-
|
|
5079
|
-
|
|
5080
|
-
|
|
5078
|
+
return new Promise(function (resolve, reject) {
|
|
5079
|
+
var existing = document.querySelector('link[data-rte-style="' + href + '"]');
|
|
5080
|
+
if (existing && (existing.getAttribute("data-rte-loaded") === "true" || existing.sheet)) {
|
|
5081
|
+
resolve();
|
|
5082
|
+
return;
|
|
5083
|
+
}
|
|
5084
|
+
var link = existing || document.createElement("link");
|
|
5085
|
+
link.addEventListener("load", function () {
|
|
5086
|
+
link.setAttribute("data-rte-loaded", "true");
|
|
5087
|
+
resolve();
|
|
5088
|
+
}, { once: true });
|
|
5089
|
+
link.addEventListener("error", function () {
|
|
5090
|
+
if (link.parentNode) link.parentNode.removeChild(link);
|
|
5091
|
+
reject(new Error("Failed to load " + href));
|
|
5092
|
+
}, { once: true });
|
|
5093
|
+
if (!existing) {
|
|
5094
|
+
link.rel = "stylesheet";
|
|
5095
|
+
link.href = href;
|
|
5096
|
+
link.setAttribute("data-rte-style", href);
|
|
5097
|
+
document.head.appendChild(link);
|
|
5098
|
+
}
|
|
5099
|
+
});
|
|
5081
5100
|
}
|
|
5082
5101
|
|
|
5083
5102
|
function loadScript(src) {
|
|
@@ -5107,6 +5126,7 @@ function loadScript(src) {
|
|
|
5107
5126
|
resolve(script);
|
|
5108
5127
|
};
|
|
5109
5128
|
script.onerror = function () {
|
|
5129
|
+
if (script.parentNode) script.parentNode.removeChild(script);
|
|
5110
5130
|
reject(new Error("Failed to load " + src));
|
|
5111
5131
|
};
|
|
5112
5132
|
|
|
@@ -5123,18 +5143,30 @@ function loadRichTextEditorAssets(options) {
|
|
|
5123
5143
|
|
|
5124
5144
|
var basePath = trimTrailingSlash(options && options.basePath ? options.basePath : "/richtexteditor");
|
|
5125
5145
|
|
|
5126
|
-
if (
|
|
5146
|
+
if (pendingLoadsByBasePath[basePath]) {
|
|
5147
|
+
return pendingLoadsByBasePath[basePath];
|
|
5148
|
+
}
|
|
5149
|
+
|
|
5150
|
+
if (window.RichTextEditor && !failedLoadsByBasePath[basePath]) {
|
|
5127
5151
|
return Promise.resolve(installStructuredContentBridge());
|
|
5128
5152
|
}
|
|
5129
5153
|
|
|
5130
5154
|
if (!pendingLoadsByBasePath[basePath]) {
|
|
5131
|
-
ensureStylesheet(basePath + "/rte_theme_default.css");
|
|
5132
|
-
|
|
5155
|
+
var themeReady = ensureStylesheet(basePath + "/rte_theme_default.css");
|
|
5156
|
+
var scriptsReady = loadScript(basePath + "/rte.js")
|
|
5133
5157
|
.then(function () {
|
|
5158
|
+
if (window.RTE_DefaultConfig) window.RTE_DefaultConfig.url_base = basePath;
|
|
5134
5159
|
return loadScript(basePath + "/plugins/all_plugins.js");
|
|
5135
|
-
})
|
|
5160
|
+
});
|
|
5161
|
+
pendingLoadsByBasePath[basePath] = Promise.all([themeReady, scriptsReady])
|
|
5136
5162
|
.then(function () {
|
|
5163
|
+
delete failedLoadsByBasePath[basePath];
|
|
5137
5164
|
return installStructuredContentBridge();
|
|
5165
|
+
})
|
|
5166
|
+
.catch(function (error) {
|
|
5167
|
+
delete pendingLoadsByBasePath[basePath];
|
|
5168
|
+
failedLoadsByBasePath[basePath] = true;
|
|
5169
|
+
throw error;
|
|
5138
5170
|
});
|
|
5139
5171
|
}
|
|
5140
5172
|
|
|
@@ -5175,4 +5207,4 @@ window.RichTextEditorStructuredBridge = {
|
|
|
5175
5207
|
setEditorValue: setEditorValue,
|
|
5176
5208
|
toMarkdown: toMarkdown,
|
|
5177
5209
|
validateStructuredContent: validateStructuredContent
|
|
5178
|
-
};
|
|
5210
|
+
};
|