suneditor 3.0.0-alpha.9 → 3.0.0-beta.2

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 (315) hide show
  1. package/CONTRIBUTING.md +170 -22
  2. package/{LICENSE.txt → LICENSE} +9 -9
  3. package/README.md +168 -30
  4. package/dist/suneditor.min.css +1 -1
  5. package/dist/suneditor.min.js +1 -1
  6. package/package.json +47 -21
  7. package/src/assets/design/color.css +121 -0
  8. package/src/assets/design/index.css +3 -0
  9. package/src/assets/design/size.css +35 -0
  10. package/src/assets/design/typography.css +37 -0
  11. package/src/assets/icons/defaultIcons.js +232 -0
  12. package/src/assets/suneditor-contents.css +181 -46
  13. package/src/assets/suneditor.css +1403 -650
  14. package/src/core/base/eventHandlers/handler_toolbar.js +35 -14
  15. package/src/core/base/eventHandlers/handler_ww_clipboard.js +23 -4
  16. package/src/core/base/eventHandlers/handler_ww_dragDrop.js +49 -10
  17. package/src/core/base/eventHandlers/handler_ww_key_input.js +422 -224
  18. package/src/core/base/eventHandlers/handler_ww_mouse.js +83 -36
  19. package/src/core/base/eventManager.js +520 -179
  20. package/src/core/base/history.js +95 -41
  21. package/src/core/class/char.js +26 -11
  22. package/src/core/class/component.js +345 -137
  23. package/src/core/class/format.js +683 -519
  24. package/src/core/class/html.js +485 -305
  25. package/src/core/class/menu.js +133 -47
  26. package/src/core/class/nodeTransform.js +90 -71
  27. package/src/core/class/offset.js +408 -92
  28. package/src/core/class/selection.js +216 -106
  29. package/src/core/class/shortcuts.js +68 -8
  30. package/src/core/class/toolbar.js +106 -116
  31. package/src/core/class/ui.js +422 -0
  32. package/src/core/class/viewer.js +178 -74
  33. package/src/core/editor.js +496 -389
  34. package/src/core/section/actives.js +123 -27
  35. package/src/core/section/constructor.js +615 -206
  36. package/src/core/section/context.js +28 -23
  37. package/src/core/section/documentType.js +561 -0
  38. package/src/editorInjector/_classes.js +19 -5
  39. package/src/editorInjector/_core.js +71 -7
  40. package/src/editorInjector/index.js +63 -1
  41. package/src/events.js +622 -0
  42. package/src/helper/clipboard.js +59 -0
  43. package/src/helper/converter.js +202 -26
  44. package/src/helper/dom/domCheck.js +304 -0
  45. package/src/helper/dom/domQuery.js +669 -0
  46. package/src/helper/dom/domUtils.js +557 -0
  47. package/src/helper/dom/index.js +12 -0
  48. package/src/helper/env.js +46 -56
  49. package/src/helper/index.js +10 -4
  50. package/src/helper/keyCodeMap.js +183 -0
  51. package/src/helper/numbers.js +12 -8
  52. package/src/helper/unicode.js +9 -5
  53. package/src/langs/ckb.js +74 -4
  54. package/src/langs/cs.js +72 -2
  55. package/src/langs/da.js +73 -3
  56. package/src/langs/de.js +73 -4
  57. package/src/langs/en.js +23 -3
  58. package/src/langs/es.js +73 -4
  59. package/src/langs/fa.js +75 -3
  60. package/src/langs/fr.js +73 -3
  61. package/src/langs/he.js +73 -4
  62. package/src/langs/hu.js +230 -0
  63. package/src/langs/index.js +7 -3
  64. package/src/langs/it.js +70 -1
  65. package/src/langs/ja.js +72 -4
  66. package/src/langs/km.js +230 -0
  67. package/src/langs/ko.js +22 -2
  68. package/src/langs/lv.js +74 -5
  69. package/src/langs/nl.js +73 -4
  70. package/src/langs/pl.js +73 -4
  71. package/src/langs/pt_br.js +70 -1
  72. package/src/langs/ro.js +74 -5
  73. package/src/langs/ru.js +73 -4
  74. package/src/langs/se.js +73 -4
  75. package/src/langs/tr.js +73 -1
  76. package/src/langs/{ua.js → uk.js} +75 -6
  77. package/src/langs/ur.js +77 -8
  78. package/src/langs/zh_cn.js +74 -5
  79. package/src/modules/ApiManager.js +77 -54
  80. package/src/modules/Browser.js +667 -0
  81. package/src/modules/ColorPicker.js +162 -102
  82. package/src/modules/Controller.js +273 -142
  83. package/src/modules/Figure.js +925 -484
  84. package/src/modules/FileManager.js +121 -69
  85. package/src/modules/HueSlider.js +113 -61
  86. package/src/modules/Modal.js +291 -122
  87. package/src/modules/ModalAnchorEditor.js +383 -234
  88. package/src/modules/SelectMenu.js +270 -168
  89. package/src/modules/_DragHandle.js +2 -1
  90. package/src/modules/index.js +3 -3
  91. package/src/plugins/browser/audioGallery.js +83 -0
  92. package/src/plugins/browser/fileBrowser.js +103 -0
  93. package/src/plugins/browser/fileGallery.js +83 -0
  94. package/src/plugins/browser/imageGallery.js +81 -0
  95. package/src/plugins/browser/videoGallery.js +103 -0
  96. package/src/plugins/command/blockquote.js +40 -27
  97. package/src/plugins/command/exportPDF.js +134 -0
  98. package/src/plugins/command/fileUpload.js +229 -162
  99. package/src/plugins/command/list_bulleted.js +83 -47
  100. package/src/plugins/command/list_numbered.js +83 -47
  101. package/src/plugins/dropdown/align.js +66 -54
  102. package/src/plugins/dropdown/backgroundColor.js +63 -49
  103. package/src/plugins/dropdown/font.js +71 -47
  104. package/src/plugins/dropdown/fontColor.js +63 -48
  105. package/src/plugins/dropdown/formatBlock.js +70 -33
  106. package/src/plugins/dropdown/hr.js +92 -51
  107. package/src/plugins/dropdown/layout.js +37 -26
  108. package/src/plugins/dropdown/lineHeight.js +54 -38
  109. package/src/plugins/dropdown/list.js +60 -45
  110. package/src/plugins/dropdown/paragraphStyle.js +51 -30
  111. package/src/plugins/dropdown/table.js +2003 -813
  112. package/src/plugins/dropdown/template.js +38 -26
  113. package/src/plugins/dropdown/textStyle.js +43 -31
  114. package/src/plugins/field/mention.js +147 -86
  115. package/src/plugins/index.js +32 -6
  116. package/src/plugins/input/fontSize.js +161 -108
  117. package/src/plugins/input/pageNavigator.js +70 -0
  118. package/src/plugins/modal/audio.js +358 -173
  119. package/src/plugins/modal/drawing.js +531 -0
  120. package/src/plugins/modal/embed.js +886 -0
  121. package/src/plugins/modal/image.js +674 -362
  122. package/src/plugins/modal/link.js +100 -71
  123. package/src/plugins/modal/math.js +367 -167
  124. package/src/plugins/modal/video.js +691 -335
  125. package/src/plugins/popup/anchor.js +222 -0
  126. package/src/suneditor.js +50 -13
  127. package/src/themes/dark.css +122 -0
  128. package/src/typedef.js +130 -0
  129. package/types/assets/icons/defaultIcons.d.ts +153 -0
  130. package/types/core/base/eventHandlers/handler_toolbar.d.ts +41 -0
  131. package/types/core/base/eventHandlers/handler_ww_clipboard.d.ts +40 -0
  132. package/types/core/base/eventHandlers/handler_ww_dragDrop.d.ts +35 -0
  133. package/types/core/base/eventHandlers/handler_ww_key_input.d.ts +45 -0
  134. package/types/core/base/eventHandlers/handler_ww_mouse.d.ts +39 -0
  135. package/types/core/base/eventManager.d.ts +385 -0
  136. package/types/core/base/history.d.ts +81 -0
  137. package/types/core/class/char.d.ts +60 -0
  138. package/types/core/class/component.d.ts +212 -0
  139. package/types/core/class/format.d.ts +616 -0
  140. package/types/core/class/html.d.ts +422 -0
  141. package/types/core/class/menu.d.ts +126 -0
  142. package/types/core/class/nodeTransform.d.ts +93 -0
  143. package/types/core/class/offset.d.ts +522 -0
  144. package/types/core/class/selection.d.ts +188 -0
  145. package/types/core/class/shortcuts.d.ts +142 -0
  146. package/types/core/class/toolbar.d.ts +189 -0
  147. package/types/core/class/ui.d.ts +164 -0
  148. package/types/core/class/viewer.d.ts +140 -0
  149. package/types/core/editor.d.ts +610 -0
  150. package/types/core/section/actives.d.ts +46 -0
  151. package/types/core/section/constructor.d.ts +777 -0
  152. package/types/core/section/context.d.ts +45 -0
  153. package/types/core/section/documentType.d.ts +178 -0
  154. package/types/editorInjector/_classes.d.ts +41 -0
  155. package/types/editorInjector/_core.d.ts +92 -0
  156. package/types/editorInjector/index.d.ts +71 -0
  157. package/types/events.d.ts +273 -0
  158. package/types/helper/clipboard.d.ts +12 -0
  159. package/types/helper/converter.d.ts +197 -0
  160. package/types/helper/dom/domCheck.d.ts +189 -0
  161. package/types/helper/dom/domQuery.d.ts +223 -0
  162. package/types/helper/dom/domUtils.d.ts +226 -0
  163. package/types/helper/dom/index.d.ts +9 -0
  164. package/types/helper/env.d.ts +132 -0
  165. package/types/helper/index.d.ts +174 -0
  166. package/types/helper/keyCodeMap.d.ts +110 -0
  167. package/types/helper/numbers.d.ts +46 -0
  168. package/types/helper/unicode.d.ts +28 -0
  169. package/types/index.d.ts +120 -0
  170. package/{typings/Lang.d.ts → types/langs/_Lang.d.ts} +173 -103
  171. package/types/langs/ckb.d.ts +3 -0
  172. package/types/langs/cs.d.ts +3 -0
  173. package/types/langs/da.d.ts +3 -0
  174. package/types/langs/de.d.ts +3 -0
  175. package/types/langs/en.d.ts +3 -0
  176. package/types/langs/es.d.ts +3 -0
  177. package/types/langs/fa.d.ts +3 -0
  178. package/types/langs/fr.d.ts +3 -0
  179. package/types/langs/he.d.ts +3 -0
  180. package/types/langs/hu.d.ts +3 -0
  181. package/types/langs/index.d.ts +54 -0
  182. package/types/langs/it.d.ts +3 -0
  183. package/types/langs/ja.d.ts +3 -0
  184. package/types/langs/km.d.ts +3 -0
  185. package/types/langs/ko.d.ts +3 -0
  186. package/types/langs/lv.d.ts +3 -0
  187. package/types/langs/nl.d.ts +3 -0
  188. package/types/langs/pl.d.ts +3 -0
  189. package/types/langs/pt_br.d.ts +3 -0
  190. package/types/langs/ro.d.ts +3 -0
  191. package/types/langs/ru.d.ts +3 -0
  192. package/types/langs/se.d.ts +3 -0
  193. package/types/langs/tr.d.ts +3 -0
  194. package/types/langs/uk.d.ts +3 -0
  195. package/types/langs/ur.d.ts +3 -0
  196. package/types/langs/zh_cn.d.ts +3 -0
  197. package/types/modules/ApiManager.d.ts +125 -0
  198. package/types/modules/Browser.d.ts +326 -0
  199. package/types/modules/ColorPicker.d.ts +131 -0
  200. package/types/modules/Controller.d.ts +251 -0
  201. package/types/modules/Figure.d.ts +517 -0
  202. package/types/modules/FileManager.d.ts +202 -0
  203. package/types/modules/HueSlider.d.ts +136 -0
  204. package/types/modules/Modal.d.ts +111 -0
  205. package/types/modules/ModalAnchorEditor.d.ts +236 -0
  206. package/types/modules/SelectMenu.d.ts +194 -0
  207. package/types/modules/_DragHandle.d.ts +7 -0
  208. package/types/modules/index.d.ts +26 -0
  209. package/types/plugins/browser/audioGallery.d.ts +55 -0
  210. package/types/plugins/browser/fileBrowser.d.ts +64 -0
  211. package/types/plugins/browser/fileGallery.d.ts +55 -0
  212. package/types/plugins/browser/imageGallery.d.ts +51 -0
  213. package/types/plugins/browser/videoGallery.d.ts +57 -0
  214. package/types/plugins/command/blockquote.d.ts +28 -0
  215. package/types/plugins/command/exportPDF.d.ts +46 -0
  216. package/types/plugins/command/fileUpload.d.ts +156 -0
  217. package/types/plugins/command/list_bulleted.d.ts +46 -0
  218. package/types/plugins/command/list_numbered.d.ts +46 -0
  219. package/types/plugins/dropdown/align.d.ts +60 -0
  220. package/types/plugins/dropdown/backgroundColor.d.ts +63 -0
  221. package/types/plugins/dropdown/font.d.ts +54 -0
  222. package/types/plugins/dropdown/fontColor.d.ts +63 -0
  223. package/types/plugins/dropdown/formatBlock.d.ts +54 -0
  224. package/types/plugins/dropdown/hr.d.ts +71 -0
  225. package/types/plugins/dropdown/layout.d.ts +40 -0
  226. package/types/plugins/dropdown/lineHeight.d.ts +50 -0
  227. package/types/plugins/dropdown/list.d.ts +39 -0
  228. package/types/plugins/dropdown/paragraphStyle.d.ts +54 -0
  229. package/types/plugins/dropdown/table.d.ts +627 -0
  230. package/types/plugins/dropdown/template.d.ts +40 -0
  231. package/types/plugins/dropdown/textStyle.d.ts +41 -0
  232. package/types/plugins/field/mention.d.ts +102 -0
  233. package/types/plugins/index.d.ts +107 -0
  234. package/types/plugins/input/fontSize.d.ts +170 -0
  235. package/types/plugins/input/pageNavigator.d.ts +28 -0
  236. package/types/plugins/modal/audio.d.ts +269 -0
  237. package/types/plugins/modal/drawing.d.ts +246 -0
  238. package/types/plugins/modal/embed.d.ts +387 -0
  239. package/types/plugins/modal/image.d.ts +451 -0
  240. package/types/plugins/modal/link.d.ts +128 -0
  241. package/types/plugins/modal/math.d.ts +193 -0
  242. package/types/plugins/modal/video.d.ts +485 -0
  243. package/types/plugins/popup/anchor.d.ts +56 -0
  244. package/types/suneditor.d.ts +51 -0
  245. package/types/typedef.d.ts +233 -0
  246. package/.eslintignore +0 -7
  247. package/.eslintrc.json +0 -64
  248. package/src/assets/icons/_default.js +0 -194
  249. package/src/core/base/events.js +0 -320
  250. package/src/core/class/notice.js +0 -42
  251. package/src/helper/domUtils.js +0 -1177
  252. package/src/modules/FileBrowser.js +0 -271
  253. package/src/plugins/command/exportPdf.js +0 -168
  254. package/src/plugins/fileBrowser/imageGallery.js +0 -81
  255. package/src/themes/test.css +0 -61
  256. package/typings/CommandPlugin.d.ts +0 -8
  257. package/typings/DialogPlugin.d.ts +0 -20
  258. package/typings/FileBrowserPlugin.d.ts +0 -30
  259. package/typings/Module.d.ts +0 -15
  260. package/typings/Plugin.d.ts +0 -42
  261. package/typings/SubmenuPlugin.d.ts +0 -8
  262. package/typings/_classes.d.ts +0 -17
  263. package/typings/_colorPicker.d.ts +0 -60
  264. package/typings/_core.d.ts +0 -55
  265. package/typings/align.d.ts +0 -5
  266. package/typings/audio.d.ts +0 -5
  267. package/typings/backgroundColor.d.ts +0 -5
  268. package/typings/blockquote.d.ts +0 -5
  269. package/typings/char.d.ts +0 -39
  270. package/typings/component.d.ts +0 -38
  271. package/typings/context.d.ts +0 -39
  272. package/typings/converter.d.ts +0 -33
  273. package/typings/dialog.d.ts +0 -28
  274. package/typings/domUtils.d.ts +0 -361
  275. package/typings/editor.d.ts +0 -7
  276. package/typings/editor.ts +0 -542
  277. package/typings/env.d.ts +0 -70
  278. package/typings/eventManager.d.ts +0 -37
  279. package/typings/events.d.ts +0 -262
  280. package/typings/fileBrowser.d.ts +0 -42
  281. package/typings/fileManager.d.ts +0 -67
  282. package/typings/font.d.ts +0 -5
  283. package/typings/fontColor.d.ts +0 -5
  284. package/typings/fontSize.d.ts +0 -5
  285. package/typings/format.d.ts +0 -191
  286. package/typings/formatBlock.d.ts +0 -5
  287. package/typings/history.d.ts +0 -48
  288. package/typings/horizontalRule.d.ts +0 -5
  289. package/typings/image.d.ts +0 -5
  290. package/typings/imageGallery.d.ts +0 -5
  291. package/typings/index.d.ts +0 -21
  292. package/typings/index.modules.d.ts +0 -11
  293. package/typings/index.plugins.d.ts +0 -58
  294. package/typings/lineHeight.d.ts +0 -5
  295. package/typings/link.d.ts +0 -5
  296. package/typings/list.d.ts +0 -5
  297. package/typings/math.d.ts +0 -5
  298. package/typings/mediaContainer.d.ts +0 -25
  299. package/typings/mention.d.ts +0 -5
  300. package/typings/node.d.ts +0 -57
  301. package/typings/notice.d.ts +0 -16
  302. package/typings/numbers.d.ts +0 -29
  303. package/typings/offset.d.ts +0 -24
  304. package/typings/options.d.ts +0 -589
  305. package/typings/paragraphStyle.d.ts +0 -5
  306. package/typings/resizing.d.ts +0 -141
  307. package/typings/selection.d.ts +0 -94
  308. package/typings/shortcuts.d.ts +0 -13
  309. package/typings/suneditor.d.ts +0 -9
  310. package/typings/table.d.ts +0 -5
  311. package/typings/template.d.ts +0 -5
  312. package/typings/textStyle.d.ts +0 -5
  313. package/typings/toolbar.d.ts +0 -32
  314. package/typings/unicode.d.ts +0 -25
  315. package/typings/video.d.ts +0 -5
@@ -1,6 +1,9 @@
1
- import { domUtils, env } from '../../helper';
1
+ import { dom, env, keyCodeMap } from '../../helper';
2
2
  const { NO_EVENT } = env;
3
3
 
4
+ /**
5
+ * @constant {Object.<string, string[]>} StyleMap - Map of font styles to CSS properties.
6
+ */
4
7
  const StyleMap = {
5
8
  bold: ['font-weight'],
6
9
  underline: ['text-decoration'],
@@ -10,48 +13,113 @@ const StyleMap = {
10
13
 
11
14
  let __globalEventKeydown = null;
12
15
  let __globalEventMousedown = null;
16
+
17
+ /**
18
+ * @private
19
+ * @this {__se__EditorCore}
20
+ * @param {Node} ww Wywsiwyg element
21
+ * @param {Node} button Button element
22
+ */
13
23
  const __RemoveCopyformt = function (ww, button) {
14
24
  __globalEventKeydown = this.eventManager.removeGlobalEvent('keydown', __globalEventKeydown);
15
25
  __globalEventMousedown = this.eventManager.removeGlobalEvent('mousedown', __globalEventMousedown);
16
26
  this._onCopyFormatInfo = null;
17
27
  this._onCopyFormatInitMethod = null;
18
- domUtils.removeClass(ww, 'se-copy-format-cursor');
19
- domUtils.removeClass(button, 'on');
28
+ dom.utils.removeClass(ww, 'se-copy-format-cursor');
29
+ dom.utils.removeClass(button, 'on');
20
30
 
21
31
  return true;
22
32
  };
23
33
 
34
+ /**
35
+ * @description List of commands that trigger active event handling in the editor.
36
+ * - These commands typically apply inline formatting or structural changes.
37
+ * @constant {string[]}
38
+ */
24
39
  export const ACTIVE_EVENT_COMMANDS = ['bold', 'underline', 'italic', 'strike', 'subscript', 'superscript', 'indent', 'outdent'];
40
+
41
+ /**
42
+ * @description List of basic editor commands, including active event commands and additional actions
43
+ * - such as undo, redo, saving, full-screen toggle, and text direction commands.
44
+ * @constant {string[]}
45
+ */
25
46
  export const BASIC_COMMANDS = ACTIVE_EVENT_COMMANDS.concat(['undo', 'redo', 'save', 'fullScreen', 'showBlocks', 'codeView', 'dir', 'dir_ltr', 'dir_rtl']);
26
47
 
48
+ /**
49
+ * @description Selects all content in the editor.
50
+ * @param {__se__EditorCore} editor - The root editor instance
51
+ */
27
52
  export function SELECT_ALL(editor) {
28
- editor._offCurrentController();
53
+ editor.ui._offCurrentController();
29
54
  editor.menu.containerOff();
30
- const figcaption = domUtils.getParentElement(editor.selection.getNode(), 'FIGCAPTION');
31
- const selectArea = figcaption || editor.frameContext.get('wysiwyg');
32
55
 
33
- let first = domUtils.getEdgeChild(selectArea.firstChild, (current) => current.childNodes.length === 0 || current.nodeType === 3 || domUtils.isTable(current), false) || selectArea.firstChild;
34
- let last = domUtils.getEdgeChild(selectArea.lastChild, (current) => current.childNodes.length === 0 || current.nodeType === 3 || domUtils.isTable(current), true) || selectArea.lastChild;
56
+ // check all tags
57
+ const ww = editor.frameContext.get('wysiwyg');
58
+ let prevScopeTag = null;
59
+ let prevScopeTagName = '';
60
+ const scopeSelectionTags = editor.options.get('scopeSelectionTags');
61
+ const range = editor.selection.getRange();
62
+ if (!range.collapsed) {
63
+ let commonNode = range.commonAncestorContainer;
64
+ let commonNodeName = commonNode.nodeName?.toLowerCase();
65
+
66
+ while (commonNode && ((!commonNode.nextSibling && !commonNode.previousSibling && !scopeSelectionTags.includes(commonNodeName)) || dom.check.isContentLess(commonNodeName)) && commonNode !== ww) {
67
+ commonNode = commonNode.parentElement;
68
+ commonNodeName = commonNode.nodeName?.toLowerCase();
69
+ }
70
+
71
+ if (scopeSelectionTags.includes(commonNodeName)) {
72
+ prevScopeTag = commonNode;
73
+ prevScopeTagName = commonNodeName;
74
+ }
75
+ }
76
+
77
+ // select all
78
+ const scopeTagList = scopeSelectionTags.filter((tagName) => tagName !== prevScopeTagName);
79
+ const scopeBaseTag = dom.query.getParentElement(prevScopeTag || editor.selection.getNode(), (current) => scopeTagList.includes(current.nodeName?.toLowerCase()));
80
+ const selectArea = scopeBaseTag || ww;
81
+
82
+ let first =
83
+ dom.query.getEdgeChild(
84
+ dom.query.getEdgeChild(selectArea, (current) => !dom.check.isContentLess(current), false),
85
+ (current) => {
86
+ return current.childNodes.length === 0 || current.nodeType === 3 || dom.check.isTable(current);
87
+ },
88
+ false
89
+ ) || selectArea.firstChild;
90
+ let last =
91
+ dom.query.getEdgeChild(
92
+ selectArea.lastChild,
93
+ (current) => {
94
+ return current.childNodes.length === 0 || current.nodeType === 3 || dom.check.isTable(current);
95
+ },
96
+ true
97
+ ) || selectArea.lastChild;
35
98
 
36
99
  if (!first || !last) return;
37
100
 
38
- if (domUtils.isMedia(first) || domUtils.isTableElements(first)) {
39
- const info = editor.component.get(first);
40
- const br = domUtils.createElement('BR');
41
- const format = domUtils.createElement(editor.options.get('defaultLine'), null, br);
101
+ if (dom.check.isMedia(first) || editor.component.is(first.parentElement) || dom.check.isTableElements(first)) {
102
+ const info = editor.component.get(first) || editor.component.get(first.parentElement);
103
+ const br = dom.utils.createElement('BR');
104
+ const format = dom.utils.createElement(editor.options.get('defaultLine'), null, br);
42
105
  first = info ? info.container || info.cover : first;
43
106
  first.parentNode.insertBefore(format, first);
44
107
  first = br;
45
108
  }
46
109
 
47
- if (domUtils.isMedia(last) || domUtils.isTableElements(last)) {
48
- last = domUtils.createElement('BR');
49
- selectArea.appendChild(domUtils.createElement(editor.options.get('defaultLine'), null, last));
110
+ if (dom.check.isMedia(last) || editor.component.is(last.parentElement) || dom.check.isTableElements(last)) {
111
+ last = dom.utils.createElement('BR');
112
+ selectArea.appendChild(dom.utils.createElement(editor.options.get('defaultLine'), null, last));
50
113
  }
51
114
 
52
115
  editor.toolbar._showBalloon(editor.selection.setRange(first, 0, last, last.textContent.length));
53
116
  }
54
117
 
118
+ /**
119
+ * @description Toggles direction button active state.
120
+ * @param {__se__EditorCore} editor - The root editor instance
121
+ * @param {boolean} rtl - Whether the text direction is right-to-left.
122
+ */
55
123
  export function DIR_BTN_ACTIVE(editor, rtl) {
56
124
  const icons = editor.icons;
57
125
  const commandTargets = editor.commandTargets;
@@ -68,18 +136,24 @@ export function DIR_BTN_ACTIVE(editor, rtl) {
68
136
 
69
137
  // change dir buttons
70
138
  editor.applyCommandTargets('dir', (e) => {
71
- domUtils.changeTxt(e.querySelector('.se-tooltip-text'), editor.lang[rtl ? 'dir_ltr' : 'dir_rtl']);
72
- domUtils.changeElement(e.firstElementChild, icons[rtl ? 'dir_ltr' : 'dir_rtl']);
139
+ dom.utils.changeTxt(e.querySelector('.se-tooltip-text'), editor.lang[rtl ? 'dir_ltr' : 'dir_rtl']);
140
+ dom.utils.changeElement(e.firstElementChild, icons[rtl ? 'dir_ltr' : 'dir_rtl']);
73
141
  });
142
+
74
143
  if (rtl) {
75
- domUtils.addClass(commandTargets.get('dir_rtl'), 'active');
76
- domUtils.removeClass(commandTargets.get('dir_ltr'), 'active');
144
+ dom.utils.addClass(commandTargets.get('dir_rtl'), 'active');
145
+ dom.utils.removeClass(commandTargets.get('dir_ltr'), 'active');
77
146
  } else {
78
- domUtils.addClass(commandTargets.get('dir_ltr'), 'active');
79
- domUtils.removeClass(commandTargets.get('dir_rtl'), 'active');
147
+ dom.utils.addClass(commandTargets.get('dir_ltr'), 'active');
148
+ dom.utils.removeClass(commandTargets.get('dir_rtl'), 'active');
80
149
  }
81
150
  }
82
151
 
152
+ /**
153
+ * @description Saves the editor content.
154
+ * @param {__se__EditorCore} editor - The root editor instance
155
+ * @returns {Promise<void>}
156
+ */
83
157
  export async function SAVE(editor) {
84
158
  const fc = editor.frameContext;
85
159
  if (!fc.get('isChanged')) return;
@@ -102,10 +176,15 @@ export async function SAVE(editor) {
102
176
 
103
177
  // set save button disable
104
178
  editor.applyCommandTargets('save', (e) => {
105
- e.setAttribute('disabled', true);
179
+ e.disabled = true;
106
180
  });
107
181
  }
108
182
 
183
+ /**
184
+ * @description Copies formatting from selected text.
185
+ * @param {__se__EditorCore} editor - The root editor instance
186
+ * @param {Node} button - The button triggering the copy format function.
187
+ */
109
188
  export function COPY_FORMAT(editor, button) {
110
189
  if (typeof editor._onCopyFormatInitMethod === 'function') {
111
190
  editor._onCopyFormatInitMethod();
@@ -115,11 +194,11 @@ export function COPY_FORMAT(editor, button) {
115
194
  const ww = editor.frameContext.get('wysiwyg');
116
195
  editor._onCopyFormatInfo = [...editor.eventManager.__cacheStyleNodes];
117
196
  editor._onCopyFormatInitMethod = __RemoveCopyformt.bind(editor, ww, button);
118
- domUtils.addClass(ww, 'se-copy-format-cursor');
119
- domUtils.addClass(button, 'on');
197
+ dom.utils.addClass(ww, 'se-copy-format-cursor');
198
+ dom.utils.addClass(button, 'on');
120
199
 
121
200
  __globalEventKeydown = editor.eventManager.addGlobalEvent('keydown', (e) => {
122
- if (e.keyCode !== 27) return;
201
+ if (!keyCodeMap.isEsc(e.code)) return;
123
202
  editor._onCopyFormatInitMethod?.();
124
203
  });
125
204
  __globalEventMousedown = editor.eventManager.addGlobalEvent('mousedown', (e) => {
@@ -128,11 +207,16 @@ export function COPY_FORMAT(editor, button) {
128
207
  });
129
208
  }
130
209
 
210
+ /**
211
+ * @description Applies font styling to selected text.
212
+ * @param {__se__EditorCore} editor - The root editor instance
213
+ * @param {string} command - The font style command (e.g., bold, italic, underline).
214
+ */
131
215
  export function FONT_STYLE(editor, command) {
132
216
  command = editor.options.get('_defaultTagCommand')[command.toLowerCase()] || command;
133
217
  let nodeName = editor.options.get('convertTextTags')[command] || command;
134
218
  const nodesMap = editor.status.currentNodesMap;
135
- const el = nodesMap.includes(editor.options.get('_styleCommandMap')[nodeName]) ? null : domUtils.createElement(nodeName);
219
+ const el = nodesMap.includes(editor.options.get('_styleCommandMap')[nodeName]) ? null : dom.utils.createElement(nodeName);
136
220
 
137
221
  if (/^sub$/i.test(nodeName) && nodesMap.includes('superscript')) {
138
222
  nodeName = 'sup';
@@ -140,6 +224,18 @@ export function FONT_STYLE(editor, command) {
140
224
  nodeName = 'sub';
141
225
  }
142
226
 
143
- editor.format.applyTextStyle(el, StyleMap[command] || null, [nodeName], false);
227
+ editor.format.applyInlineElement(el, { stylesToModify: StyleMap[command] || null, nodesToRemove: [nodeName], strictRemove: false });
144
228
  editor.focus();
145
229
  }
230
+
231
+ /**
232
+ * @description Inserts a page break element into the editor.
233
+ * @param {__se__EditorCore} editor - The root editor instance
234
+ */
235
+ export function PAGE_BREAK(editor) {
236
+ const pageBreak = dom.utils.createElement('DIV', { class: 'se-component se-component-line-break se-page-break' });
237
+ editor.component.insert(pageBreak, { skipCharCount: true, skipSelection: true, skipHistory: false });
238
+ const line = pageBreak.nextElementSibling || editor.format.addLine(pageBreak);
239
+ editor.selection.setRange(line, 1, line, 1);
240
+ editor.history.push(false);
241
+ }