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.
Files changed (241) hide show
  1. package/CONTRIBUTING.md +8 -8
  2. package/README.md +44 -49
  3. package/dist/suneditor.min.css +1 -1
  4. package/dist/suneditor.min.js +1 -1
  5. package/package.json +95 -53
  6. package/src/assets/design/color.css +2 -2
  7. package/src/assets/design/size.css +2 -0
  8. package/src/assets/icons/defaultIcons.js +16 -1
  9. package/src/assets/suneditor-contents.css +9 -8
  10. package/src/assets/suneditor.css +29 -26
  11. package/src/core/{section → base}/actives.js +20 -12
  12. package/src/core/base/history.js +4 -4
  13. package/src/core/class/char.js +10 -10
  14. package/src/core/class/component.js +146 -57
  15. package/src/core/class/format.js +94 -2458
  16. package/src/core/class/html.js +187 -129
  17. package/src/core/class/inline.js +1853 -0
  18. package/src/core/class/listFormat.js +582 -0
  19. package/src/core/class/menu.js +14 -3
  20. package/src/core/class/nodeTransform.js +9 -14
  21. package/src/core/class/offset.js +162 -197
  22. package/src/core/class/selection.js +137 -34
  23. package/src/core/class/toolbar.js +73 -52
  24. package/src/core/class/ui.js +11 -11
  25. package/src/core/class/viewer.js +56 -55
  26. package/src/core/config/context.js +122 -0
  27. package/src/core/config/frameContext.js +204 -0
  28. package/src/core/config/options.js +639 -0
  29. package/src/core/editor.js +181 -108
  30. package/src/core/event/actions/index.js +229 -0
  31. package/src/core/event/effects/common.registry.js +60 -0
  32. package/src/core/event/effects/keydown.registry.js +551 -0
  33. package/src/core/event/effects/ruleHelpers.js +145 -0
  34. package/src/core/{base → event}/eventManager.js +119 -201
  35. package/src/core/event/executor.js +21 -0
  36. package/src/core/{base/eventHandlers → event/handlers}/handler_toolbar.js +4 -4
  37. package/src/core/{base/eventHandlers → event/handlers}/handler_ww_dragDrop.js +2 -2
  38. package/src/core/event/handlers/handler_ww_input.js +77 -0
  39. package/src/core/event/handlers/handler_ww_key.js +228 -0
  40. package/src/core/{base/eventHandlers → event/handlers}/handler_ww_mouse.js +3 -3
  41. package/src/core/event/ports.js +211 -0
  42. package/src/core/event/reducers/keydown.reducer.js +89 -0
  43. package/src/core/event/rules/keydown.rule.arrow.js +54 -0
  44. package/src/core/event/rules/keydown.rule.backspace.js +202 -0
  45. package/src/core/event/rules/keydown.rule.delete.js +126 -0
  46. package/src/core/event/rules/keydown.rule.enter.js +144 -0
  47. package/src/core/event/rules/keydown.rule.tab.js +29 -0
  48. package/src/core/section/constructor.js +79 -388
  49. package/src/core/section/documentType.js +47 -26
  50. package/src/core/util/instanceCheck.js +59 -0
  51. package/src/editorInjector/_classes.js +4 -0
  52. package/src/editorInjector/_core.js +17 -7
  53. package/src/editorInjector/index.js +10 -2
  54. package/src/events.js +6 -0
  55. package/src/helper/clipboard.js +24 -10
  56. package/src/helper/converter.js +17 -12
  57. package/src/helper/dom/domCheck.js +22 -3
  58. package/src/helper/dom/domQuery.js +91 -45
  59. package/src/helper/dom/domUtils.js +93 -19
  60. package/src/helper/dom/index.js +4 -0
  61. package/src/helper/env.js +11 -7
  62. package/src/helper/keyCodeMap.js +4 -3
  63. package/src/langs/ckb.js +1 -1
  64. package/src/langs/cs.js +1 -1
  65. package/src/langs/da.js +1 -1
  66. package/src/langs/de.js +1 -1
  67. package/src/langs/en.js +1 -1
  68. package/src/langs/es.js +1 -1
  69. package/src/langs/fa.js +1 -1
  70. package/src/langs/fr.js +1 -1
  71. package/src/langs/he.js +1 -1
  72. package/src/langs/hu.js +1 -1
  73. package/src/langs/it.js +1 -1
  74. package/src/langs/ja.js +1 -1
  75. package/src/langs/km.js +1 -1
  76. package/src/langs/ko.js +1 -1
  77. package/src/langs/lv.js +1 -1
  78. package/src/langs/nl.js +1 -1
  79. package/src/langs/pl.js +1 -1
  80. package/src/langs/pt_br.js +10 -10
  81. package/src/langs/ro.js +1 -1
  82. package/src/langs/ru.js +1 -1
  83. package/src/langs/se.js +1 -1
  84. package/src/langs/tr.js +1 -1
  85. package/src/langs/uk.js +1 -1
  86. package/src/langs/ur.js +1 -1
  87. package/src/langs/zh_cn.js +1 -1
  88. package/src/modules/ApiManager.js +25 -18
  89. package/src/modules/Browser.js +52 -61
  90. package/src/modules/ColorPicker.js +37 -38
  91. package/src/modules/Controller.js +85 -79
  92. package/src/modules/Figure.js +275 -187
  93. package/src/modules/FileManager.js +86 -92
  94. package/src/modules/HueSlider.js +67 -35
  95. package/src/modules/Modal.js +84 -77
  96. package/src/modules/ModalAnchorEditor.js +62 -79
  97. package/src/modules/SelectMenu.js +89 -86
  98. package/src/plugins/browser/audioGallery.js +9 -5
  99. package/src/plugins/browser/fileBrowser.js +10 -6
  100. package/src/plugins/browser/fileGallery.js +9 -5
  101. package/src/plugins/browser/imageGallery.js +9 -5
  102. package/src/plugins/browser/videoGallery.js +11 -6
  103. package/src/plugins/command/blockquote.js +1 -0
  104. package/src/plugins/command/exportPDF.js +11 -8
  105. package/src/plugins/command/fileUpload.js +41 -29
  106. package/src/plugins/command/list_bulleted.js +2 -1
  107. package/src/plugins/command/list_numbered.js +2 -1
  108. package/src/plugins/dropdown/align.js +8 -2
  109. package/src/plugins/dropdown/backgroundColor.js +19 -11
  110. package/src/plugins/dropdown/font.js +15 -9
  111. package/src/plugins/dropdown/fontColor.js +19 -11
  112. package/src/plugins/dropdown/formatBlock.js +7 -2
  113. package/src/plugins/dropdown/hr.js +7 -3
  114. package/src/plugins/dropdown/layout.js +6 -2
  115. package/src/plugins/dropdown/lineHeight.js +8 -3
  116. package/src/plugins/dropdown/list.js +2 -1
  117. package/src/plugins/dropdown/paragraphStyle.js +15 -11
  118. package/src/plugins/dropdown/{table.js → table/index.js} +514 -362
  119. package/src/plugins/dropdown/template.js +6 -2
  120. package/src/plugins/dropdown/textStyle.js +7 -3
  121. package/src/plugins/field/mention.js +33 -27
  122. package/src/plugins/input/fontSize.js +44 -37
  123. package/src/plugins/input/pageNavigator.js +3 -2
  124. package/src/plugins/modal/audio.js +90 -85
  125. package/src/plugins/modal/drawing.js +58 -66
  126. package/src/plugins/modal/embed.js +193 -180
  127. package/src/plugins/modal/image.js +441 -439
  128. package/src/plugins/modal/link.js +31 -8
  129. package/src/plugins/modal/math.js +23 -22
  130. package/src/plugins/modal/video.js +233 -230
  131. package/src/plugins/popup/anchor.js +24 -18
  132. package/src/suneditor.js +69 -24
  133. package/src/typedef.js +42 -19
  134. package/types/assets/icons/defaultIcons.d.ts +8 -0
  135. package/types/core/class/char.d.ts +1 -1
  136. package/types/core/class/component.d.ts +29 -7
  137. package/types/core/class/format.d.ts +4 -354
  138. package/types/core/class/html.d.ts +13 -4
  139. package/types/core/class/inline.d.ts +263 -0
  140. package/types/core/class/listFormat.d.ts +135 -0
  141. package/types/core/class/menu.d.ts +10 -2
  142. package/types/core/class/offset.d.ts +24 -26
  143. package/types/core/class/selection.d.ts +2 -0
  144. package/types/core/class/toolbar.d.ts +24 -11
  145. package/types/core/class/ui.d.ts +1 -1
  146. package/types/core/class/viewer.d.ts +1 -1
  147. package/types/core/config/context.d.ts +157 -0
  148. package/types/core/config/frameContext.d.ts +367 -0
  149. package/types/core/config/options.d.ts +1119 -0
  150. package/types/core/editor.d.ts +101 -66
  151. package/types/core/event/actions/index.d.ts +47 -0
  152. package/types/core/event/effects/common.registry.d.ts +50 -0
  153. package/types/core/event/effects/keydown.registry.d.ts +73 -0
  154. package/types/core/event/effects/ruleHelpers.d.ts +31 -0
  155. package/types/core/{base → event}/eventManager.d.ts +15 -46
  156. package/types/core/event/executor.d.ts +6 -0
  157. package/types/core/event/handlers/handler_ww_input.d.ts +41 -0
  158. package/types/core/{base/eventHandlers/handler_ww_key_input.d.ts → event/handlers/handler_ww_key.d.ts} +4 -6
  159. package/types/core/event/ports.d.ts +255 -0
  160. package/types/core/event/reducers/keydown.reducer.d.ts +75 -0
  161. package/types/core/event/rules/keydown.rule.arrow.d.ts +8 -0
  162. package/types/core/event/rules/keydown.rule.backspace.d.ts +9 -0
  163. package/types/core/event/rules/keydown.rule.delete.d.ts +9 -0
  164. package/types/core/event/rules/keydown.rule.enter.d.ts +9 -0
  165. package/types/core/event/rules/keydown.rule.tab.d.ts +9 -0
  166. package/types/core/section/constructor.d.ts +101 -631
  167. package/types/core/section/documentType.d.ts +14 -4
  168. package/types/core/util/instanceCheck.d.ts +50 -0
  169. package/types/editorInjector/_classes.d.ts +4 -0
  170. package/types/editorInjector/_core.d.ts +17 -7
  171. package/types/editorInjector/index.d.ts +10 -2
  172. package/types/events.d.ts +1 -0
  173. package/types/helper/clipboard.d.ts +2 -2
  174. package/types/helper/converter.d.ts +6 -9
  175. package/types/helper/dom/domCheck.d.ts +7 -0
  176. package/types/helper/dom/domQuery.d.ts +19 -8
  177. package/types/helper/dom/domUtils.d.ts +24 -2
  178. package/types/helper/dom/index.d.ts +86 -1
  179. package/types/helper/env.d.ts +6 -1
  180. package/types/helper/index.d.ts +7 -1
  181. package/types/helper/keyCodeMap.d.ts +3 -3
  182. package/types/index.d.ts +23 -117
  183. package/types/langs/index.d.ts +2 -2
  184. package/types/modules/ApiManager.d.ts +1 -8
  185. package/types/modules/Browser.d.ts +4 -62
  186. package/types/modules/ColorPicker.d.ts +4 -21
  187. package/types/modules/Controller.d.ts +8 -64
  188. package/types/modules/Figure.d.ts +54 -50
  189. package/types/modules/FileManager.d.ts +1 -13
  190. package/types/modules/HueSlider.d.ts +13 -3
  191. package/types/modules/Modal.d.ts +0 -43
  192. package/types/modules/ModalAnchorEditor.d.ts +0 -73
  193. package/types/modules/SelectMenu.d.ts +0 -85
  194. package/types/modules/index.d.ts +3 -3
  195. package/types/plugins/browser/audioGallery.d.ts +29 -18
  196. package/types/plugins/browser/fileBrowser.d.ts +38 -27
  197. package/types/plugins/browser/fileGallery.d.ts +29 -18
  198. package/types/plugins/browser/imageGallery.d.ts +24 -16
  199. package/types/plugins/browser/videoGallery.d.ts +29 -18
  200. package/types/plugins/command/blockquote.d.ts +1 -0
  201. package/types/plugins/command/exportPDF.d.ts +18 -18
  202. package/types/plugins/command/fileUpload.d.ts +65 -45
  203. package/types/plugins/command/list_bulleted.d.ts +1 -0
  204. package/types/plugins/command/list_numbered.d.ts +1 -0
  205. package/types/plugins/dropdown/align.d.ts +13 -8
  206. package/types/plugins/dropdown/backgroundColor.d.ts +30 -19
  207. package/types/plugins/dropdown/font.d.ts +13 -12
  208. package/types/plugins/dropdown/fontColor.d.ts +30 -19
  209. package/types/plugins/dropdown/formatBlock.d.ts +13 -8
  210. package/types/plugins/dropdown/hr.d.ts +15 -11
  211. package/types/plugins/dropdown/layout.d.ts +15 -11
  212. package/types/plugins/dropdown/lineHeight.d.ts +16 -11
  213. package/types/plugins/dropdown/list.d.ts +1 -0
  214. package/types/plugins/dropdown/paragraphStyle.d.ts +31 -27
  215. package/types/plugins/dropdown/table/index.d.ts +582 -0
  216. package/types/plugins/dropdown/table.d.ts +41 -86
  217. package/types/plugins/dropdown/template.d.ts +15 -11
  218. package/types/plugins/dropdown/textStyle.d.ts +19 -11
  219. package/types/plugins/field/mention.d.ts +58 -56
  220. package/types/plugins/index.d.ts +38 -38
  221. package/types/plugins/input/fontSize.d.ts +46 -50
  222. package/types/plugins/modal/audio.d.ts +26 -56
  223. package/types/plugins/modal/drawing.d.ts +0 -85
  224. package/types/plugins/modal/embed.d.ts +15 -79
  225. package/types/plugins/modal/image.d.ts +24 -136
  226. package/types/plugins/modal/link.d.ts +34 -15
  227. package/types/plugins/modal/math.d.ts +0 -16
  228. package/types/plugins/modal/video.d.ts +17 -86
  229. package/types/plugins/popup/anchor.d.ts +1 -8
  230. package/types/suneditor.d.ts +70 -19
  231. package/types/typedef.d.ts +60 -46
  232. package/src/core/base/eventHandlers/handler_ww_key_input.js +0 -1200
  233. package/src/core/section/context.js +0 -102
  234. package/types/core/section/context.d.ts +0 -45
  235. package/types/langs/_Lang.d.ts +0 -194
  236. /package/src/core/{base/eventHandlers → event/handlers}/handler_ww_clipboard.js +0 -0
  237. /package/types/core/{section → base}/actives.d.ts +0 -0
  238. /package/types/core/{base/eventHandlers → event/handlers}/handler_toolbar.d.ts +0 -0
  239. /package/types/core/{base/eventHandlers → event/handlers}/handler_ww_clipboard.d.ts +0 -0
  240. /package/types/core/{base/eventHandlers → event/handlers}/handler_ww_dragDrop.d.ts +0 -0
  241. /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 {Object} LinkPluginOptions
7
- * @property {boolean} [textToDisplay=true] - Whether to display the link text.
8
- * @property {boolean} [title=true] - Whether to display the link title.
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 tempLink = this.controller.form.querySelector('a');
74
- tempLink.href = element.href;
75
- tempLink.title = element.textContent;
76
- tempLink.textContent = element.textContent;
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.format.applyInlineElement(null, { stylesToModify: null, nodesToRemove: ['A'], strictRemove: false });
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.utils.hasClass(node, 'se-component') ? node : null;
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.options.get('externalLibs').katex)) && !(this.mathjax = this.#CheckMathJax(editor.options.get('externalLibs').mathjax, 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._element = null;
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._element = target;
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._element = null;
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 = this._d.createRange().createContextualFragment(this._renderer(converter.entityToHTML(this._escapeBackslashes(value, true))));
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._escapeBackslashes(getValue(currentTarget), true));
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._renderer(exp);
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._escapeBackslashes(mathExp, false)));
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, { skipCharCount: false, skipSelection: true, skipHistory: false });
256
+ this.component.insert(oFormat, { insertBehavior: 'none', scrollTo: false });
255
257
  } else {
256
- this.component.insert(mathEl, { skipCharCount: false, skipSelection: true, skipHistory: false });
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._element);
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
- _renderer(exp) {
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
- _escapeBackslashes(str, decode) {
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._renderer(eventTarget.value);
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 {*} katex - The KaTeX instance.
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(katex) {
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(mathjax, editor) {
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.');