suneditor 3.0.0-beta.3 → 3.0.0-beta.30
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/CONTRIBUTING.md +8 -8
- package/README.md +44 -49
- package/dist/suneditor.min.css +1 -1
- package/dist/suneditor.min.js +1 -1
- package/package.json +95 -53
- package/src/assets/design/color.css +2 -2
- package/src/assets/design/size.css +2 -0
- package/src/assets/icons/defaultIcons.js +16 -1
- package/src/assets/suneditor-contents.css +9 -8
- package/src/assets/suneditor.css +29 -26
- package/src/core/{section → base}/actives.js +20 -12
- package/src/core/base/history.js +4 -4
- package/src/core/class/char.js +10 -10
- package/src/core/class/component.js +146 -57
- package/src/core/class/format.js +94 -2458
- package/src/core/class/html.js +187 -129
- package/src/core/class/inline.js +1853 -0
- package/src/core/class/listFormat.js +582 -0
- package/src/core/class/menu.js +14 -3
- package/src/core/class/nodeTransform.js +9 -14
- package/src/core/class/offset.js +162 -197
- package/src/core/class/selection.js +137 -34
- package/src/core/class/toolbar.js +73 -52
- package/src/core/class/ui.js +11 -11
- package/src/core/class/viewer.js +56 -55
- package/src/core/config/context.js +122 -0
- package/src/core/config/frameContext.js +204 -0
- package/src/core/config/options.js +639 -0
- package/src/core/editor.js +181 -108
- package/src/core/event/actions/index.js +229 -0
- package/src/core/event/effects/common.registry.js +60 -0
- package/src/core/event/effects/keydown.registry.js +551 -0
- package/src/core/event/effects/ruleHelpers.js +145 -0
- package/src/core/{base → event}/eventManager.js +119 -201
- package/src/core/event/executor.js +21 -0
- package/src/core/{base/eventHandlers → event/handlers}/handler_toolbar.js +4 -4
- package/src/core/{base/eventHandlers → event/handlers}/handler_ww_dragDrop.js +2 -2
- package/src/core/event/handlers/handler_ww_input.js +77 -0
- package/src/core/event/handlers/handler_ww_key.js +228 -0
- package/src/core/{base/eventHandlers → event/handlers}/handler_ww_mouse.js +3 -3
- package/src/core/event/ports.js +211 -0
- package/src/core/event/reducers/keydown.reducer.js +89 -0
- package/src/core/event/rules/keydown.rule.arrow.js +54 -0
- package/src/core/event/rules/keydown.rule.backspace.js +202 -0
- package/src/core/event/rules/keydown.rule.delete.js +126 -0
- package/src/core/event/rules/keydown.rule.enter.js +144 -0
- package/src/core/event/rules/keydown.rule.tab.js +29 -0
- package/src/core/section/constructor.js +79 -388
- package/src/core/section/documentType.js +47 -26
- package/src/core/util/instanceCheck.js +59 -0
- package/src/editorInjector/_classes.js +4 -0
- package/src/editorInjector/_core.js +17 -7
- package/src/editorInjector/index.js +10 -2
- package/src/events.js +6 -0
- package/src/helper/clipboard.js +24 -10
- package/src/helper/converter.js +17 -12
- package/src/helper/dom/domCheck.js +22 -3
- package/src/helper/dom/domQuery.js +91 -45
- package/src/helper/dom/domUtils.js +93 -19
- package/src/helper/dom/index.js +4 -0
- package/src/helper/env.js +11 -7
- package/src/helper/keyCodeMap.js +4 -3
- package/src/langs/ckb.js +1 -1
- package/src/langs/cs.js +1 -1
- package/src/langs/da.js +1 -1
- package/src/langs/de.js +1 -1
- package/src/langs/en.js +1 -1
- package/src/langs/es.js +1 -1
- package/src/langs/fa.js +1 -1
- package/src/langs/fr.js +1 -1
- package/src/langs/he.js +1 -1
- package/src/langs/hu.js +1 -1
- package/src/langs/it.js +1 -1
- package/src/langs/ja.js +1 -1
- package/src/langs/km.js +1 -1
- package/src/langs/ko.js +1 -1
- package/src/langs/lv.js +1 -1
- package/src/langs/nl.js +1 -1
- package/src/langs/pl.js +1 -1
- package/src/langs/pt_br.js +10 -10
- package/src/langs/ro.js +1 -1
- package/src/langs/ru.js +1 -1
- package/src/langs/se.js +1 -1
- package/src/langs/tr.js +1 -1
- package/src/langs/uk.js +1 -1
- package/src/langs/ur.js +1 -1
- package/src/langs/zh_cn.js +1 -1
- package/src/modules/ApiManager.js +25 -18
- package/src/modules/Browser.js +52 -61
- package/src/modules/ColorPicker.js +37 -38
- package/src/modules/Controller.js +85 -79
- package/src/modules/Figure.js +275 -187
- package/src/modules/FileManager.js +86 -92
- package/src/modules/HueSlider.js +67 -35
- package/src/modules/Modal.js +84 -77
- package/src/modules/ModalAnchorEditor.js +62 -79
- package/src/modules/SelectMenu.js +89 -86
- package/src/plugins/browser/audioGallery.js +9 -5
- package/src/plugins/browser/fileBrowser.js +10 -6
- package/src/plugins/browser/fileGallery.js +9 -5
- package/src/plugins/browser/imageGallery.js +9 -5
- package/src/plugins/browser/videoGallery.js +11 -6
- package/src/plugins/command/blockquote.js +1 -0
- package/src/plugins/command/exportPDF.js +11 -8
- package/src/plugins/command/fileUpload.js +41 -29
- package/src/plugins/command/list_bulleted.js +2 -1
- package/src/plugins/command/list_numbered.js +2 -1
- package/src/plugins/dropdown/align.js +8 -2
- package/src/plugins/dropdown/backgroundColor.js +19 -11
- package/src/plugins/dropdown/font.js +15 -9
- package/src/plugins/dropdown/fontColor.js +19 -11
- package/src/plugins/dropdown/formatBlock.js +7 -2
- package/src/plugins/dropdown/hr.js +7 -3
- package/src/plugins/dropdown/layout.js +6 -2
- package/src/plugins/dropdown/lineHeight.js +8 -3
- package/src/plugins/dropdown/list.js +2 -1
- package/src/plugins/dropdown/paragraphStyle.js +15 -11
- package/src/plugins/dropdown/{table.js → table/index.js} +514 -362
- package/src/plugins/dropdown/template.js +6 -2
- package/src/plugins/dropdown/textStyle.js +7 -3
- package/src/plugins/field/mention.js +33 -27
- package/src/plugins/input/fontSize.js +44 -37
- package/src/plugins/input/pageNavigator.js +3 -2
- package/src/plugins/modal/audio.js +90 -85
- package/src/plugins/modal/drawing.js +58 -66
- package/src/plugins/modal/embed.js +193 -180
- package/src/plugins/modal/image.js +441 -439
- package/src/plugins/modal/link.js +31 -8
- package/src/plugins/modal/math.js +23 -22
- package/src/plugins/modal/video.js +233 -230
- package/src/plugins/popup/anchor.js +24 -18
- package/src/suneditor.js +69 -24
- package/src/typedef.js +42 -19
- package/types/assets/icons/defaultIcons.d.ts +8 -0
- package/types/core/class/char.d.ts +1 -1
- package/types/core/class/component.d.ts +29 -7
- package/types/core/class/format.d.ts +4 -354
- package/types/core/class/html.d.ts +13 -4
- package/types/core/class/inline.d.ts +263 -0
- package/types/core/class/listFormat.d.ts +135 -0
- package/types/core/class/menu.d.ts +10 -2
- package/types/core/class/offset.d.ts +24 -26
- package/types/core/class/selection.d.ts +2 -0
- package/types/core/class/toolbar.d.ts +24 -11
- package/types/core/class/ui.d.ts +1 -1
- package/types/core/class/viewer.d.ts +1 -1
- package/types/core/config/context.d.ts +157 -0
- package/types/core/config/frameContext.d.ts +367 -0
- package/types/core/config/options.d.ts +1119 -0
- package/types/core/editor.d.ts +101 -66
- package/types/core/event/actions/index.d.ts +47 -0
- package/types/core/event/effects/common.registry.d.ts +50 -0
- package/types/core/event/effects/keydown.registry.d.ts +73 -0
- package/types/core/event/effects/ruleHelpers.d.ts +31 -0
- package/types/core/{base → event}/eventManager.d.ts +15 -46
- package/types/core/event/executor.d.ts +6 -0
- package/types/core/event/handlers/handler_ww_input.d.ts +41 -0
- package/types/core/{base/eventHandlers/handler_ww_key_input.d.ts → event/handlers/handler_ww_key.d.ts} +4 -6
- package/types/core/event/ports.d.ts +255 -0
- package/types/core/event/reducers/keydown.reducer.d.ts +75 -0
- package/types/core/event/rules/keydown.rule.arrow.d.ts +8 -0
- package/types/core/event/rules/keydown.rule.backspace.d.ts +9 -0
- package/types/core/event/rules/keydown.rule.delete.d.ts +9 -0
- package/types/core/event/rules/keydown.rule.enter.d.ts +9 -0
- package/types/core/event/rules/keydown.rule.tab.d.ts +9 -0
- package/types/core/section/constructor.d.ts +101 -631
- package/types/core/section/documentType.d.ts +14 -4
- package/types/core/util/instanceCheck.d.ts +50 -0
- package/types/editorInjector/_classes.d.ts +4 -0
- package/types/editorInjector/_core.d.ts +17 -7
- package/types/editorInjector/index.d.ts +10 -2
- package/types/events.d.ts +1 -0
- package/types/helper/clipboard.d.ts +2 -2
- package/types/helper/converter.d.ts +6 -9
- package/types/helper/dom/domCheck.d.ts +7 -0
- package/types/helper/dom/domQuery.d.ts +19 -8
- package/types/helper/dom/domUtils.d.ts +24 -2
- package/types/helper/dom/index.d.ts +86 -1
- package/types/helper/env.d.ts +6 -1
- package/types/helper/index.d.ts +7 -1
- package/types/helper/keyCodeMap.d.ts +3 -3
- package/types/index.d.ts +23 -117
- package/types/langs/index.d.ts +2 -2
- package/types/modules/ApiManager.d.ts +1 -8
- package/types/modules/Browser.d.ts +4 -62
- package/types/modules/ColorPicker.d.ts +4 -21
- package/types/modules/Controller.d.ts +8 -64
- package/types/modules/Figure.d.ts +54 -50
- package/types/modules/FileManager.d.ts +1 -13
- package/types/modules/HueSlider.d.ts +13 -3
- package/types/modules/Modal.d.ts +0 -43
- package/types/modules/ModalAnchorEditor.d.ts +0 -73
- package/types/modules/SelectMenu.d.ts +0 -85
- package/types/modules/index.d.ts +3 -3
- package/types/plugins/browser/audioGallery.d.ts +29 -18
- package/types/plugins/browser/fileBrowser.d.ts +38 -27
- package/types/plugins/browser/fileGallery.d.ts +29 -18
- package/types/plugins/browser/imageGallery.d.ts +24 -16
- package/types/plugins/browser/videoGallery.d.ts +29 -18
- package/types/plugins/command/blockquote.d.ts +1 -0
- package/types/plugins/command/exportPDF.d.ts +18 -18
- package/types/plugins/command/fileUpload.d.ts +65 -45
- package/types/plugins/command/list_bulleted.d.ts +1 -0
- package/types/plugins/command/list_numbered.d.ts +1 -0
- package/types/plugins/dropdown/align.d.ts +13 -8
- package/types/plugins/dropdown/backgroundColor.d.ts +30 -19
- package/types/plugins/dropdown/font.d.ts +13 -12
- package/types/plugins/dropdown/fontColor.d.ts +30 -19
- package/types/plugins/dropdown/formatBlock.d.ts +13 -8
- package/types/plugins/dropdown/hr.d.ts +15 -11
- package/types/plugins/dropdown/layout.d.ts +15 -11
- package/types/plugins/dropdown/lineHeight.d.ts +16 -11
- package/types/plugins/dropdown/list.d.ts +1 -0
- package/types/plugins/dropdown/paragraphStyle.d.ts +31 -27
- package/types/plugins/dropdown/table/index.d.ts +582 -0
- package/types/plugins/dropdown/table.d.ts +41 -86
- package/types/plugins/dropdown/template.d.ts +15 -11
- package/types/plugins/dropdown/textStyle.d.ts +19 -11
- package/types/plugins/field/mention.d.ts +58 -56
- package/types/plugins/index.d.ts +38 -38
- package/types/plugins/input/fontSize.d.ts +46 -50
- package/types/plugins/modal/audio.d.ts +26 -56
- package/types/plugins/modal/drawing.d.ts +0 -85
- package/types/plugins/modal/embed.d.ts +15 -79
- package/types/plugins/modal/image.d.ts +24 -136
- package/types/plugins/modal/link.d.ts +34 -15
- package/types/plugins/modal/math.d.ts +0 -16
- package/types/plugins/modal/video.d.ts +17 -86
- package/types/plugins/popup/anchor.d.ts +1 -8
- package/types/suneditor.d.ts +70 -19
- package/types/typedef.d.ts +60 -46
- package/src/core/base/eventHandlers/handler_ww_key_input.js +0 -1200
- package/src/core/section/context.js +0 -102
- package/types/core/section/context.d.ts +0 -45
- package/types/langs/_Lang.d.ts +0 -194
- /package/src/core/{base/eventHandlers → event/handlers}/handler_ww_clipboard.js +0 -0
- /package/types/core/{section → base}/actives.d.ts +0 -0
- /package/types/core/{base/eventHandlers → event/handlers}/handler_toolbar.d.ts +0 -0
- /package/types/core/{base/eventHandlers → event/handlers}/handler_ww_clipboard.d.ts +0 -0
- /package/types/core/{base/eventHandlers → event/handlers}/handler_ww_dragDrop.d.ts +0 -0
- /package/types/core/{base/eventHandlers → event/handlers}/handler_ww_mouse.d.ts +0 -0
|
@@ -3,9 +3,11 @@ import { Modal, Controller, ModalAnchorEditor } from '../../modules';
|
|
|
3
3
|
import { dom, numbers } from '../../helper';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
* @typedef {
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
* @typedef {import('../../modules/ModalAnchorEditor').ModalAnchorEditorParams} ModalAnchorEditorParams_link
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @typedef {Object} LinkOptions
|
|
9
11
|
* @property {string} [uploadUrl] - The URL endpoint for file uploads.
|
|
10
12
|
* @property {Object<string, string>} [uploadHeaders] - Additional headers for file upload requests.
|
|
11
13
|
* @property {number} [uploadSizeLimit] - The total file upload size limit in bytes.
|
|
@@ -13,6 +15,10 @@ import { dom, numbers } from '../../helper';
|
|
|
13
15
|
* @property {string} [acceptedFormats] - Accepted file formats for link uploads.
|
|
14
16
|
*/
|
|
15
17
|
|
|
18
|
+
/**
|
|
19
|
+
* @typedef {Omit<LinkOptions & ModalAnchorEditorParams_link, ''>} LinkPluginOptions
|
|
20
|
+
*/
|
|
21
|
+
|
|
16
22
|
/**
|
|
17
23
|
* @class
|
|
18
24
|
* @description Link plugin.
|
|
@@ -24,6 +30,8 @@ class Link extends EditorInjector {
|
|
|
24
30
|
static type = 'modal';
|
|
25
31
|
static className = 'se-icon-flip-rtl';
|
|
26
32
|
|
|
33
|
+
#controllerATarget;
|
|
34
|
+
|
|
27
35
|
/**
|
|
28
36
|
* @constructor
|
|
29
37
|
* @param {__se__EditorCore} editor - The root editor instance
|
|
@@ -45,6 +53,7 @@ class Link extends EditorInjector {
|
|
|
45
53
|
|
|
46
54
|
// members
|
|
47
55
|
const uploadUrl = typeof pluginOptions.uploadUrl === 'string' ? pluginOptions.uploadUrl : null;
|
|
56
|
+
this.target = null;
|
|
48
57
|
this.isUpdateState = false;
|
|
49
58
|
this.pluginOptions = {
|
|
50
59
|
...pluginOptions,
|
|
@@ -60,6 +69,8 @@ class Link extends EditorInjector {
|
|
|
60
69
|
this.anchor = new ModalAnchorEditor(this, modalEl, this.pluginOptions);
|
|
61
70
|
this.modal = new Modal(this, modalEl);
|
|
62
71
|
this.controller = new Controller(this, controllerEl, { position: 'bottom', disabled: false });
|
|
72
|
+
|
|
73
|
+
this.#controllerATarget = this.controller.form.querySelector('a');
|
|
63
74
|
}
|
|
64
75
|
|
|
65
76
|
/**
|
|
@@ -67,18 +78,21 @@ class Link extends EditorInjector {
|
|
|
67
78
|
* @description Executes the method that is called whenever the cursor position changes.
|
|
68
79
|
* @param {?HTMLElement=} element - Node element where the cursor is currently located
|
|
69
80
|
* @returns {boolean} - Whether the plugin is active
|
|
81
|
+
* - If it returns "undefined", it will no longer be called in this scope.
|
|
70
82
|
*/
|
|
71
83
|
active(element) {
|
|
72
84
|
if (dom.check.isAnchor(element) && !element.hasAttribute('data-se-non-link')) {
|
|
73
|
-
const
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
85
|
+
const a = this.#controllerATarget;
|
|
86
|
+
const href = element.getAttribute('href');
|
|
87
|
+
a.href = href;
|
|
88
|
+
a.textContent = a.title = element.textContent;
|
|
89
|
+
a.target = href?.startsWith('#') ? element.target : '_blank';
|
|
77
90
|
|
|
78
91
|
dom.utils.addClass(element, 'on');
|
|
79
92
|
|
|
80
93
|
this.anchor.set(element);
|
|
81
94
|
this.controller.open(element, null, { isWWTarget: false, initMethod: null, addOffset: null });
|
|
95
|
+
this.target = element;
|
|
82
96
|
|
|
83
97
|
return true;
|
|
84
98
|
}
|
|
@@ -130,6 +144,7 @@ class Link extends EditorInjector {
|
|
|
130
144
|
this.selection.setRange(textNode, 0, textNode, textNode.textContent.length);
|
|
131
145
|
}
|
|
132
146
|
|
|
147
|
+
this.history.push(false);
|
|
133
148
|
return true;
|
|
134
149
|
}
|
|
135
150
|
|
|
@@ -152,6 +167,8 @@ class Link extends EditorInjector {
|
|
|
152
167
|
|
|
153
168
|
if (/update/.test(command)) {
|
|
154
169
|
this.modal.open();
|
|
170
|
+
} else if (/copy/.test(command)) {
|
|
171
|
+
this.html.copy(this.target);
|
|
155
172
|
} else if (/unlink/.test(command)) {
|
|
156
173
|
const sc = dom.query.getEdgeChild(
|
|
157
174
|
this.controller.currentTarget,
|
|
@@ -168,7 +185,7 @@ class Link extends EditorInjector {
|
|
|
168
185
|
true
|
|
169
186
|
);
|
|
170
187
|
this.selection.setRange(sc, 0, ec, ec.textContent.length);
|
|
171
|
-
this.
|
|
188
|
+
this.inline.apply(null, { stylesToModify: null, nodesToRemove: ['A'], strictRemove: false });
|
|
172
189
|
} else {
|
|
173
190
|
/** delete */
|
|
174
191
|
dom.utils.removeItem(this.controller.currentTarget);
|
|
@@ -219,6 +236,12 @@ function CreateHTML_controller({ lang, icons }) {
|
|
|
219
236
|
<span class="se-tooltip-text">${lang.edit}</span>
|
|
220
237
|
</span>
|
|
221
238
|
</button>
|
|
239
|
+
<button type="button" data-command="copy" tabindex="-1" class="se-btn se-tooltip">
|
|
240
|
+
${icons.copy}
|
|
241
|
+
<span class="se-tooltip-inner">
|
|
242
|
+
<span class="se-tooltip-text">${lang.copy}</span>
|
|
243
|
+
</span>
|
|
244
|
+
</button>
|
|
222
245
|
<button type="button" data-command="unlink" tabindex="-1" class="se-btn se-tooltip se-icon-flip-rtl">
|
|
223
246
|
${icons.unlink}
|
|
224
247
|
<span class="se-tooltip-inner">
|
|
@@ -2,7 +2,7 @@ import EditorInjector from '../../editorInjector';
|
|
|
2
2
|
import { Modal, Controller } from '../../modules';
|
|
3
3
|
import { dom, env, converter } from '../../helper';
|
|
4
4
|
|
|
5
|
-
const { _w } = env;
|
|
5
|
+
const { _w, _d } = env;
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* @typedef {Object} MathPluginOptions
|
|
@@ -35,9 +35,11 @@ class Math_ extends EditorInjector {
|
|
|
35
35
|
* @returns {HTMLElement|null} Returns a node if the node is a valid component.
|
|
36
36
|
*/
|
|
37
37
|
static component(node) {
|
|
38
|
-
return dom.utils.hasClass(node, 'se-math|katex') && dom.
|
|
38
|
+
return dom.utils.hasClass(node, 'se-math|katex') && dom.check.isComponentContainer(node) ? node : null;
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
+
#element;
|
|
42
|
+
|
|
41
43
|
/**
|
|
42
44
|
* @constructor
|
|
43
45
|
* @param {__se__EditorCore} editor - The root editor instance
|
|
@@ -54,7 +56,7 @@ class Math_ extends EditorInjector {
|
|
|
54
56
|
this.mathjax = null;
|
|
55
57
|
|
|
56
58
|
// exception
|
|
57
|
-
if (!(this.katex = this.#CheckKatex(editor
|
|
59
|
+
if (!(this.katex = this.#CheckKatex(editor)) && !(this.mathjax = this.#CheckMathJax(editor))) {
|
|
58
60
|
console.warn('[SUNEDITOR.plugins.math.warn] The math plugin must need either "KaTeX" or "MathJax" library. Please add the katex or mathjax option.');
|
|
59
61
|
}
|
|
60
62
|
|
|
@@ -112,7 +114,7 @@ class Math_ extends EditorInjector {
|
|
|
112
114
|
this.fontSizeElement = modalEl.querySelector('.se-math-size');
|
|
113
115
|
|
|
114
116
|
this.isUpdateState = false;
|
|
115
|
-
this
|
|
117
|
+
this.#element = null;
|
|
116
118
|
|
|
117
119
|
// init
|
|
118
120
|
this.previewElement.style.fontSize = this.defaultFontSize;
|
|
@@ -136,7 +138,7 @@ class Math_ extends EditorInjector {
|
|
|
136
138
|
*/
|
|
137
139
|
select(target) {
|
|
138
140
|
if (dom.utils.hasClass(target, 'se-math|katex') && getValue(target)) {
|
|
139
|
-
this
|
|
141
|
+
this.#element = target;
|
|
140
142
|
this.controller.open(target, null, { isWWTarget: false, initMethod: null, addOffset: null });
|
|
141
143
|
return;
|
|
142
144
|
}
|
|
@@ -147,7 +149,7 @@ class Math_ extends EditorInjector {
|
|
|
147
149
|
* @description This function is called before the "controller" before it is closed.
|
|
148
150
|
*/
|
|
149
151
|
close() {
|
|
150
|
-
this
|
|
152
|
+
this.#element = null;
|
|
151
153
|
}
|
|
152
154
|
|
|
153
155
|
/**
|
|
@@ -170,7 +172,7 @@ class Math_ extends EditorInjector {
|
|
|
170
172
|
const value = getValue(element);
|
|
171
173
|
if (!value) return;
|
|
172
174
|
|
|
173
|
-
const domParser =
|
|
175
|
+
const domParser = _d.createRange().createContextualFragment(this.#renderer(converter.entityToHTML(this.#escapeBackslashes(value, true))));
|
|
174
176
|
element.innerHTML = domParser.querySelector('.se-math, .katex').innerHTML;
|
|
175
177
|
element.setAttribute('contenteditable', 'false');
|
|
176
178
|
dom.utils.addClass(element, 'se-component|se-inline-component|se-disable-pointer|se-math');
|
|
@@ -207,11 +209,11 @@ class Math_ extends EditorInjector {
|
|
|
207
209
|
this.init();
|
|
208
210
|
} else if (this.controller.currentTarget) {
|
|
209
211
|
const currentTarget = this.controller.currentTarget;
|
|
210
|
-
const exp = converter.entityToHTML(this
|
|
212
|
+
const exp = converter.entityToHTML(this.#escapeBackslashes(getValue(currentTarget), true));
|
|
211
213
|
const fontSize = getType(currentTarget) || '1em';
|
|
212
214
|
this.textArea.value = exp;
|
|
213
215
|
this.fontSizeElement.value = fontSize;
|
|
214
|
-
this.previewElement.innerHTML = this
|
|
216
|
+
this.previewElement.innerHTML = this.#renderer(exp);
|
|
215
217
|
this.previewElement.style.fontSize = fontSize;
|
|
216
218
|
}
|
|
217
219
|
}
|
|
@@ -235,7 +237,7 @@ class Math_ extends EditorInjector {
|
|
|
235
237
|
if (!mathEl) return false;
|
|
236
238
|
dom.utils.addClass(mathEl, 'se-component|se-inline-component|se-disable-pointer|se-math');
|
|
237
239
|
mathEl.setAttribute('contenteditable', 'false');
|
|
238
|
-
mathEl.setAttribute('data-se-value', converter.htmlToEntity(this
|
|
240
|
+
mathEl.setAttribute('data-se-value', converter.htmlToEntity(this.#escapeBackslashes(mathExp, false)));
|
|
239
241
|
mathEl.setAttribute('data-se-type', this.fontSizeElement.value);
|
|
240
242
|
mathEl.style.fontSize = this.fontSizeElement.value;
|
|
241
243
|
|
|
@@ -251,9 +253,9 @@ class Math_ extends EditorInjector {
|
|
|
251
253
|
|
|
252
254
|
if (selectedFormats.length > 1) {
|
|
253
255
|
const oFormat = dom.utils.createElement(selectedFormats[0].nodeName, null, mathEl);
|
|
254
|
-
this.component.insert(oFormat, {
|
|
256
|
+
this.component.insert(oFormat, { insertBehavior: 'none', scrollTo: false });
|
|
255
257
|
} else {
|
|
256
|
-
this.component.insert(mathEl, {
|
|
258
|
+
this.component.insert(mathEl, { insertBehavior: 'none', scrollTo: false });
|
|
257
259
|
}
|
|
258
260
|
} else {
|
|
259
261
|
const containerEl = dom.query.getParentElement(this.controller.currentTarget, '.se-component');
|
|
@@ -299,7 +301,7 @@ class Math_ extends EditorInjector {
|
|
|
299
301
|
this.modal.open();
|
|
300
302
|
break;
|
|
301
303
|
case 'copy':
|
|
302
|
-
this.#copyTextToClipboard(this
|
|
304
|
+
this.#copyTextToClipboard(this.#element);
|
|
303
305
|
break;
|
|
304
306
|
case 'delete':
|
|
305
307
|
this.destroy(this.controller.currentTarget);
|
|
@@ -319,12 +321,11 @@ class Math_ extends EditorInjector {
|
|
|
319
321
|
}
|
|
320
322
|
|
|
321
323
|
/**
|
|
322
|
-
* @private
|
|
323
324
|
* @description Renders the given math expression using KaTeX or MathJax.
|
|
324
325
|
* @param {string} exp - The math expression to render.
|
|
325
326
|
* @returns {string} - The rendered math expression as HTML.
|
|
326
327
|
*/
|
|
327
|
-
|
|
328
|
+
#renderer(exp) {
|
|
328
329
|
let result = '';
|
|
329
330
|
try {
|
|
330
331
|
dom.utils.removeClass(this.textArea, 'se-error');
|
|
@@ -348,13 +349,12 @@ class Math_ extends EditorInjector {
|
|
|
348
349
|
}
|
|
349
350
|
|
|
350
351
|
/**
|
|
351
|
-
* @private
|
|
352
352
|
* @description Escapes or unescapes backslashes in a given string.
|
|
353
353
|
* @param {string} str - The input string.
|
|
354
354
|
* @param {boolean} decode - If true, decodes escaped backslashes; otherwise, encodes them.
|
|
355
355
|
* @returns {string} - The processed string.
|
|
356
356
|
*/
|
|
357
|
-
|
|
357
|
+
#escapeBackslashes(str, decode) {
|
|
358
358
|
return str.replace(/\\{2}/g, decode ? '\\' : '\\\\');
|
|
359
359
|
}
|
|
360
360
|
|
|
@@ -391,7 +391,7 @@ class Math_ extends EditorInjector {
|
|
|
391
391
|
eventTarget.style.height = eventTarget.scrollHeight + 5 + 'px';
|
|
392
392
|
}
|
|
393
393
|
|
|
394
|
-
this.previewElement.innerHTML = this
|
|
394
|
+
this.previewElement.innerHTML = this.#renderer(eventTarget.value);
|
|
395
395
|
if (this.mathjax) this.#renderMathJax(this.mathjax);
|
|
396
396
|
}
|
|
397
397
|
|
|
@@ -404,10 +404,11 @@ class Math_ extends EditorInjector {
|
|
|
404
404
|
}
|
|
405
405
|
|
|
406
406
|
/**
|
|
407
|
-
* @param {
|
|
407
|
+
* @param {__se__EditorCore} editor - The root editor instance.
|
|
408
408
|
* @returns {*} - The KaTeX instance or null if the instance is invalid.
|
|
409
409
|
*/
|
|
410
|
-
#CheckKatex(
|
|
410
|
+
#CheckKatex(editor) {
|
|
411
|
+
const katex = editor.options.get('externalLibs').katex;
|
|
411
412
|
if (!katex) return null;
|
|
412
413
|
if (!katex.src) {
|
|
413
414
|
console.warn('[SUNEDITOR.math.katex.fail] The katex option is set incorrectly.');
|
|
@@ -431,11 +432,11 @@ class Math_ extends EditorInjector {
|
|
|
431
432
|
}
|
|
432
433
|
|
|
433
434
|
/**
|
|
434
|
-
* @param {*} mathjax - The MathJax instance.
|
|
435
435
|
* @param {__se__EditorCore} editor - The root editor instance.
|
|
436
436
|
* @returns {*}
|
|
437
437
|
*/
|
|
438
|
-
#CheckMathJax(
|
|
438
|
+
#CheckMathJax(editor) {
|
|
439
|
+
const mathjax = editor.options.get('externalLibs').mathjax;
|
|
439
440
|
if (!mathjax) return null;
|
|
440
441
|
if (editor.frameOptions.get('iframe')) {
|
|
441
442
|
console.warn('[SUNEDITOR.math.mathjax.fail] The MathJax option is not supported in the iframe.');
|