suneditor 3.0.0-alpha.2 → 3.0.0-alpha.20

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 (306) hide show
  1. package/.eslintrc.json +4 -3
  2. package/CONTRIBUTING.md +4 -2
  3. package/README.md +19 -11
  4. package/README_V3_TEMP.md +705 -0
  5. package/dist/suneditor.min.css +1 -0
  6. package/dist/suneditor.min.js +1 -0
  7. package/example.md +587 -0
  8. package/package.json +15 -9
  9. package/src/assets/icons/_default.js +166 -131
  10. package/src/assets/{suneditor-content.css → suneditor-contents.css} +182 -45
  11. package/src/assets/suneditor.css +1195 -556
  12. package/src/assets/variables.css +138 -0
  13. package/src/core/base/eventHandlers/handler_toolbar.js +35 -14
  14. package/src/core/base/eventHandlers/handler_ww_clipboard.js +29 -4
  15. package/src/core/base/eventHandlers/handler_ww_dragDrop.js +59 -15
  16. package/src/core/base/eventHandlers/handler_ww_key_input.js +426 -212
  17. package/src/core/base/eventHandlers/handler_ww_mouse.js +108 -32
  18. package/src/core/base/eventManager.js +540 -209
  19. package/src/core/base/events.js +616 -320
  20. package/src/core/base/history.js +93 -39
  21. package/src/core/class/char.js +29 -13
  22. package/src/core/class/component.js +332 -145
  23. package/src/core/class/format.js +671 -509
  24. package/src/core/class/html.js +504 -290
  25. package/src/core/class/menu.js +114 -47
  26. package/src/core/class/nodeTransform.js +111 -66
  27. package/src/core/class/offset.js +409 -105
  28. package/src/core/class/selection.js +220 -108
  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 +330 -0
  32. package/src/core/class/viewer.js +178 -74
  33. package/src/core/editor.js +489 -384
  34. package/src/core/section/actives.js +118 -22
  35. package/src/core/section/constructor.js +504 -170
  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/helper/converter.js +137 -19
  42. package/src/helper/dom/domCheck.js +294 -0
  43. package/src/helper/dom/domQuery.js +609 -0
  44. package/src/helper/dom/domUtils.js +533 -0
  45. package/src/helper/dom/index.js +12 -0
  46. package/src/helper/env.js +42 -19
  47. package/src/helper/index.js +7 -4
  48. package/src/helper/keyCodeMap.js +183 -0
  49. package/src/helper/numbers.js +8 -8
  50. package/src/helper/unicode.js +5 -5
  51. package/src/langs/ckb.js +69 -3
  52. package/src/langs/cs.js +67 -1
  53. package/src/langs/da.js +68 -2
  54. package/src/langs/de.js +68 -3
  55. package/src/langs/en.js +29 -1
  56. package/src/langs/es.js +68 -3
  57. package/src/langs/fa.js +70 -2
  58. package/src/langs/fr.js +68 -2
  59. package/src/langs/he.js +68 -3
  60. package/src/langs/hu.js +226 -0
  61. package/src/langs/index.js +3 -2
  62. package/src/langs/it.js +65 -0
  63. package/src/langs/ja.js +68 -3
  64. package/src/langs/ko.js +66 -1
  65. package/src/langs/lv.js +68 -3
  66. package/src/langs/nl.js +68 -3
  67. package/src/langs/pl.js +68 -3
  68. package/src/langs/pt_br.js +65 -0
  69. package/src/langs/ro.js +69 -4
  70. package/src/langs/ru.js +68 -3
  71. package/src/langs/se.js +68 -3
  72. package/src/langs/tr.js +68 -0
  73. package/src/langs/ua.js +68 -3
  74. package/src/langs/ur.js +71 -6
  75. package/src/langs/zh_cn.js +69 -4
  76. package/src/modules/ApiManager.js +77 -54
  77. package/src/modules/Browser.js +667 -0
  78. package/src/modules/ColorPicker.js +162 -102
  79. package/src/modules/Controller.js +233 -136
  80. package/src/modules/Figure.js +913 -489
  81. package/src/modules/FileManager.js +141 -72
  82. package/src/modules/HueSlider.js +113 -61
  83. package/src/modules/Modal.js +292 -113
  84. package/src/modules/ModalAnchorEditor.js +380 -230
  85. package/src/modules/SelectMenu.js +270 -168
  86. package/src/modules/_DragHandle.js +2 -1
  87. package/src/modules/index.js +3 -3
  88. package/src/plugins/browser/audioGallery.js +83 -0
  89. package/src/plugins/browser/fileBrowser.js +103 -0
  90. package/src/plugins/browser/fileGallery.js +83 -0
  91. package/src/plugins/browser/imageGallery.js +81 -0
  92. package/src/plugins/browser/videoGallery.js +103 -0
  93. package/src/plugins/command/blockquote.js +40 -27
  94. package/src/plugins/command/exportPDF.js +134 -0
  95. package/src/plugins/command/fileUpload.js +226 -158
  96. package/src/plugins/command/list_bulleted.js +93 -47
  97. package/src/plugins/command/list_numbered.js +93 -47
  98. package/src/plugins/dropdown/align.js +66 -54
  99. package/src/plugins/dropdown/backgroundColor.js +76 -45
  100. package/src/plugins/dropdown/font.js +71 -47
  101. package/src/plugins/dropdown/fontColor.js +78 -46
  102. package/src/plugins/dropdown/formatBlock.js +74 -33
  103. package/src/plugins/dropdown/hr.js +102 -51
  104. package/src/plugins/dropdown/layout.js +37 -26
  105. package/src/plugins/dropdown/lineHeight.js +54 -38
  106. package/src/plugins/dropdown/list.js +60 -45
  107. package/src/plugins/dropdown/paragraphStyle.js +51 -30
  108. package/src/plugins/dropdown/table.js +1269 -777
  109. package/src/plugins/dropdown/template.js +38 -26
  110. package/src/plugins/dropdown/textStyle.js +43 -31
  111. package/src/plugins/field/mention.js +144 -82
  112. package/src/plugins/index.js +32 -6
  113. package/src/plugins/input/fontSize.js +161 -108
  114. package/src/plugins/input/pageNavigator.js +70 -0
  115. package/src/plugins/modal/audio.js +341 -169
  116. package/src/plugins/modal/drawing.js +530 -0
  117. package/src/plugins/modal/embed.js +886 -0
  118. package/src/plugins/modal/image.js +673 -358
  119. package/src/plugins/modal/link.js +100 -71
  120. package/src/plugins/modal/math.js +384 -168
  121. package/src/plugins/modal/video.js +693 -336
  122. package/src/plugins/popup/anchor.js +222 -0
  123. package/src/suneditor.js +54 -12
  124. package/src/themes/dark.css +85 -0
  125. package/src/typedef.js +86 -0
  126. package/types/assets/icons/_default.d.ts +152 -0
  127. package/types/core/base/eventHandlers/handler_toolbar.d.ts +41 -0
  128. package/types/core/base/eventHandlers/handler_ww_clipboard.d.ts +40 -0
  129. package/types/core/base/eventHandlers/handler_ww_dragDrop.d.ts +35 -0
  130. package/types/core/base/eventHandlers/handler_ww_key_input.d.ts +45 -0
  131. package/types/core/base/eventHandlers/handler_ww_mouse.d.ts +39 -0
  132. package/types/core/base/eventManager.d.ts +377 -0
  133. package/types/core/base/events.d.ts +297 -0
  134. package/types/core/base/history.d.ts +81 -0
  135. package/types/core/class/char.d.ts +60 -0
  136. package/types/core/class/component.d.ts +259 -0
  137. package/types/core/class/format.d.ts +615 -0
  138. package/types/core/class/html.d.ts +377 -0
  139. package/types/core/class/menu.d.ts +118 -0
  140. package/types/core/class/nodeTransform.d.ts +93 -0
  141. package/types/core/class/offset.d.ts +512 -0
  142. package/types/core/class/selection.d.ts +188 -0
  143. package/types/core/class/shortcuts.d.ts +142 -0
  144. package/types/core/class/toolbar.d.ts +189 -0
  145. package/types/core/class/ui.d.ts +144 -0
  146. package/types/core/class/viewer.d.ts +140 -0
  147. package/types/core/editor.d.ts +606 -0
  148. package/types/core/section/actives.d.ts +46 -0
  149. package/types/core/section/constructor.d.ts +748 -0
  150. package/types/core/section/context.d.ts +45 -0
  151. package/types/core/section/documentType.d.ts +178 -0
  152. package/types/editorInjector/_classes.d.ts +41 -0
  153. package/types/editorInjector/_core.d.ts +92 -0
  154. package/types/editorInjector/index.d.ts +71 -0
  155. package/types/helper/converter.d.ts +150 -0
  156. package/types/helper/dom/domCheck.d.ts +182 -0
  157. package/types/helper/dom/domQuery.d.ts +214 -0
  158. package/types/helper/dom/domUtils.d.ts +211 -0
  159. package/types/helper/dom/index.d.ts +9 -0
  160. package/types/helper/env.d.ts +149 -0
  161. package/types/helper/index.d.ts +163 -0
  162. package/types/helper/keyCodeMap.d.ts +110 -0
  163. package/types/helper/numbers.d.ts +43 -0
  164. package/types/helper/unicode.d.ts +28 -0
  165. package/types/index.d.ts +0 -0
  166. package/{typings/Lang.d.ts → types/langs/_Lang.d.ts} +170 -103
  167. package/types/langs/ckb.d.ts +384 -0
  168. package/types/langs/cs.d.ts +384 -0
  169. package/types/langs/da.d.ts +384 -0
  170. package/types/langs/de.d.ts +384 -0
  171. package/types/langs/en.d.ts +384 -0
  172. package/types/langs/es.d.ts +384 -0
  173. package/types/langs/fa.d.ts +384 -0
  174. package/types/langs/fr.d.ts +384 -0
  175. package/types/langs/he.d.ts +384 -0
  176. package/types/langs/hu.d.ts +384 -0
  177. package/types/langs/index.d.ts +48 -0
  178. package/types/langs/it.d.ts +384 -0
  179. package/types/langs/ja.d.ts +384 -0
  180. package/types/langs/ko.d.ts +384 -0
  181. package/types/langs/lv.d.ts +384 -0
  182. package/types/langs/nl.d.ts +384 -0
  183. package/types/langs/pl.d.ts +384 -0
  184. package/types/langs/pt_br.d.ts +384 -0
  185. package/types/langs/ro.d.ts +384 -0
  186. package/types/langs/ru.d.ts +384 -0
  187. package/types/langs/se.d.ts +384 -0
  188. package/types/langs/tr.d.ts +384 -0
  189. package/types/langs/ua.d.ts +384 -0
  190. package/types/langs/ur.d.ts +384 -0
  191. package/types/langs/zh_cn.d.ts +384 -0
  192. package/types/modules/ApiManager.d.ts +125 -0
  193. package/types/modules/Browser.d.ts +326 -0
  194. package/types/modules/ColorPicker.d.ts +131 -0
  195. package/types/modules/Controller.d.ts +231 -0
  196. package/types/modules/Figure.d.ts +504 -0
  197. package/types/modules/FileManager.d.ts +202 -0
  198. package/types/modules/HueSlider.d.ts +136 -0
  199. package/types/modules/Modal.d.ts +117 -0
  200. package/types/modules/ModalAnchorEditor.d.ts +236 -0
  201. package/types/modules/SelectMenu.d.ts +194 -0
  202. package/types/modules/_DragHandle.d.ts +7 -0
  203. package/types/modules/index.d.ts +26 -0
  204. package/types/plugins/browser/audioGallery.d.ts +55 -0
  205. package/types/plugins/browser/fileBrowser.d.ts +64 -0
  206. package/types/plugins/browser/fileGallery.d.ts +55 -0
  207. package/types/plugins/browser/imageGallery.d.ts +51 -0
  208. package/types/plugins/browser/videoGallery.d.ts +57 -0
  209. package/types/plugins/command/blockquote.d.ts +28 -0
  210. package/types/plugins/command/exportPDF.d.ts +46 -0
  211. package/types/plugins/command/fileUpload.d.ts +156 -0
  212. package/types/plugins/command/list_bulleted.d.ts +56 -0
  213. package/types/plugins/command/list_numbered.d.ts +56 -0
  214. package/types/plugins/dropdown/align.d.ts +60 -0
  215. package/types/plugins/dropdown/backgroundColor.d.ts +63 -0
  216. package/types/plugins/dropdown/font.d.ts +54 -0
  217. package/types/plugins/dropdown/fontColor.d.ts +63 -0
  218. package/types/plugins/dropdown/formatBlock.d.ts +58 -0
  219. package/types/plugins/dropdown/hr.d.ts +81 -0
  220. package/types/plugins/dropdown/layout.d.ts +40 -0
  221. package/types/plugins/dropdown/lineHeight.d.ts +50 -0
  222. package/types/plugins/dropdown/list.d.ts +39 -0
  223. package/types/plugins/dropdown/paragraphStyle.d.ts +54 -0
  224. package/types/plugins/dropdown/table.d.ts +579 -0
  225. package/types/plugins/dropdown/template.d.ts +40 -0
  226. package/types/plugins/dropdown/textStyle.d.ts +41 -0
  227. package/types/plugins/field/mention.d.ts +102 -0
  228. package/types/plugins/index.d.ts +107 -0
  229. package/types/plugins/input/fontSize.d.ts +170 -0
  230. package/types/plugins/input/pageNavigator.d.ts +28 -0
  231. package/types/plugins/modal/audio.d.ts +269 -0
  232. package/types/plugins/modal/drawing.d.ts +246 -0
  233. package/types/plugins/modal/embed.d.ts +387 -0
  234. package/types/plugins/modal/image.d.ts +451 -0
  235. package/types/plugins/modal/link.d.ts +128 -0
  236. package/types/plugins/modal/math.d.ts +193 -0
  237. package/types/plugins/modal/video.d.ts +485 -0
  238. package/types/plugins/popup/anchor.d.ts +56 -0
  239. package/types/suneditor.d.ts +51 -0
  240. package/types/typedef-global.d.ts +144 -0
  241. package/src/core/class/notice.js +0 -42
  242. package/src/helper/domUtils.js +0 -1177
  243. package/src/modules/FileBrowser.js +0 -271
  244. package/src/plugins/command/exportPdf.js +0 -168
  245. package/src/plugins/fileBrowser/imageGallery.js +0 -81
  246. package/src/themes/test.css +0 -61
  247. package/typings/CommandPlugin.d.ts +0 -8
  248. package/typings/DialogPlugin.d.ts +0 -20
  249. package/typings/FileBrowserPlugin.d.ts +0 -30
  250. package/typings/Module.d.ts +0 -15
  251. package/typings/Plugin.d.ts +0 -42
  252. package/typings/SubmenuPlugin.d.ts +0 -8
  253. package/typings/_classes.d.ts +0 -17
  254. package/typings/_colorPicker.d.ts +0 -60
  255. package/typings/_core.d.ts +0 -55
  256. package/typings/align.d.ts +0 -5
  257. package/typings/audio.d.ts +0 -5
  258. package/typings/backgroundColor.d.ts +0 -5
  259. package/typings/blockquote.d.ts +0 -5
  260. package/typings/char.d.ts +0 -39
  261. package/typings/component.d.ts +0 -38
  262. package/typings/context.d.ts +0 -39
  263. package/typings/converter.d.ts +0 -33
  264. package/typings/dialog.d.ts +0 -28
  265. package/typings/domUtils.d.ts +0 -361
  266. package/typings/editor.d.ts +0 -7
  267. package/typings/editor.ts +0 -542
  268. package/typings/env.d.ts +0 -70
  269. package/typings/eventManager.d.ts +0 -37
  270. package/typings/events.d.ts +0 -262
  271. package/typings/fileBrowser.d.ts +0 -42
  272. package/typings/fileManager.d.ts +0 -67
  273. package/typings/font.d.ts +0 -5
  274. package/typings/fontColor.d.ts +0 -5
  275. package/typings/fontSize.d.ts +0 -5
  276. package/typings/format.d.ts +0 -191
  277. package/typings/formatBlock.d.ts +0 -5
  278. package/typings/history.d.ts +0 -48
  279. package/typings/horizontalRule.d.ts +0 -5
  280. package/typings/image.d.ts +0 -5
  281. package/typings/imageGallery.d.ts +0 -5
  282. package/typings/index.d.ts +0 -21
  283. package/typings/index.modules.d.ts +0 -11
  284. package/typings/index.plugins.d.ts +0 -58
  285. package/typings/lineHeight.d.ts +0 -5
  286. package/typings/link.d.ts +0 -5
  287. package/typings/list.d.ts +0 -5
  288. package/typings/math.d.ts +0 -5
  289. package/typings/mediaContainer.d.ts +0 -25
  290. package/typings/mention.d.ts +0 -5
  291. package/typings/node.d.ts +0 -57
  292. package/typings/notice.d.ts +0 -16
  293. package/typings/numbers.d.ts +0 -29
  294. package/typings/offset.d.ts +0 -24
  295. package/typings/options.d.ts +0 -589
  296. package/typings/paragraphStyle.d.ts +0 -5
  297. package/typings/resizing.d.ts +0 -141
  298. package/typings/selection.d.ts +0 -94
  299. package/typings/shortcuts.d.ts +0 -13
  300. package/typings/suneditor.d.ts +0 -9
  301. package/typings/table.d.ts +0 -5
  302. package/typings/template.d.ts +0 -5
  303. package/typings/textStyle.d.ts +0 -5
  304. package/typings/toolbar.d.ts +0 -32
  305. package/typings/unicode.d.ts +0 -25
  306. package/typings/video.d.ts +0 -5
@@ -1,74 +1,125 @@
1
1
  import EditorInjector from '../../editorInjector';
2
- import { domUtils } from '../../helper';
3
-
4
- const HR = function (editor, pluginOptions) {
5
- // plugin bisic properties
6
- EditorInjector.call(this, editor);
7
- this.title = this.lang.horizontalLine;
8
- this.icon = 'horizontal_line';
9
-
10
- // create HTML
11
- const HRMenus = CreateHTML(editor, pluginOptions.items);
12
-
13
- // members
14
- this.list = HRMenus.querySelectorAll('button');
15
-
16
- // init
17
- this.menu.initDropdownTarget(HR, HRMenus);
18
- };
19
-
20
- HR.key = 'hr';
21
- HR.type = 'dropdown';
22
- HR.className = '';
23
- HR.component = function (node) {
24
- return /^hr$/i.test(node?.nodeName) ? node : null;
25
- };
26
- HR.prototype = {
2
+ import { dom } from '../../helper';
3
+
4
+ /**
5
+ * @typedef {import('../../core/class/shortcuts').ShortcutInfo} ShortcutInfo
6
+ */
7
+
8
+ /**
9
+ * @class
10
+ * @description HR Plugin
11
+ */
12
+ class HR extends EditorInjector {
13
+ static key = 'hr';
14
+ static type = 'dropdown';
15
+ static className = '';
27
16
  /**
28
- * @override component
29
- * @description Called when a container is selected.
30
- * @param {Element} element Target element
17
+ * @this {HR}
18
+ * @param {HTMLElement} node - The node to check.
19
+ * @returns {HTMLElement|null} Returns a node if the node is a valid component.
31
20
  */
32
- select(element) {
33
- domUtils.addClass(element, 'on');
34
- },
21
+ static component(node) {
22
+ return /^hr$/i.test(node?.nodeName) ? node : null;
23
+ }
24
+
25
+ /**
26
+ * @constructor
27
+ * @param {__se__EditorCore} editor - The root editor instance
28
+ * @param {Object} pluginOptions
29
+ * @param {Array<{name: string, class: string}>} pluginOptions.items - HR list
30
+ */
31
+ constructor(editor, pluginOptions) {
32
+ // plugin bisic properties
33
+ super(editor);
34
+ this.title = this.lang.horizontalLine;
35
+ this.icon = 'horizontal_line';
36
+
37
+ // create HTML
38
+ const HRMenus = CreateHTML(editor, pluginOptions.items);
39
+
40
+ // members
41
+ this.list = HRMenus.querySelectorAll('button');
42
+
43
+ // init
44
+ this.menu.initDropdownTarget(HR, HRMenus);
45
+ }
35
46
 
36
47
  /**
37
- * @override component
48
+ * @editorMethod Editor.Component
49
+ * @description Executes the method that is called when a component of a plugin is selected.
50
+ * @param {HTMLElement} target Target component element
51
+ */
52
+ select(target) {
53
+ dom.utils.addClass(target, 'on');
54
+ }
55
+
56
+ /**
57
+ * @editorMethod Editor.Component
38
58
  * @description Called when a container is deselected.
39
- * @param {Element} element Target element
59
+ * @param {HTMLElement} element Target element
40
60
  */
41
61
  deselect(element) {
42
- domUtils.removeClass(element, 'on');
43
- },
62
+ dom.utils.removeClass(element, 'on');
63
+ }
44
64
 
45
- destroy(element) {
46
- if (!element) return;
65
+ /**
66
+ * @editorMethod Editor.Component
67
+ * @description Method to delete a component of a plugin, called by the "FileManager", "Controller" module.
68
+ * @param {HTMLElement} target Target element
69
+ */
70
+ destroy(target) {
71
+ if (!target) return;
47
72
 
48
- const focusEl = element.previousElementSibling || element.nextElementSibling;
49
- domUtils.removeItem(element);
73
+ const focusEl = target.previousElementSibling || target.nextElementSibling;
74
+ dom.utils.removeItem(target);
50
75
 
51
76
  // focus
52
77
  this.editor.focusEdge(focusEl);
53
78
  this.history.push(false);
54
- },
79
+ }
55
80
 
56
81
  /**
57
- * @override core
58
- * @param {Element} target Target command button
82
+ * @editorMethod Editor.core
83
+ * @description Executes the main execution method of the plugin.
84
+ * - Called when an item in the "dropdown" menu is clicked.
85
+ * @param {HTMLElement} target - The plugin's toolbar button element
59
86
  */
60
87
  action(target) {
61
- const hr = target.firstElementChild.cloneNode(false);
62
- this.editor.focus();
63
- this.component.insert(hr, false, false);
64
- this.menu.dropdownOff();
65
-
88
+ const hr = this.submit(target.firstElementChild.className);
66
89
  const line = this.format.addLine(hr);
67
90
  this.selection.setRange(line, 1, line, 1);
68
- },
91
+ this.menu.dropdownOff();
92
+ }
69
93
 
70
- constructor: HR
71
- };
94
+ /**
95
+ * @editorMethod Editor.core
96
+ * @description Executes methods called by shortcut keys.
97
+ * @param {Object} params - Information of the "shortcut" plugin
98
+ * @param {Range} params.range - Range object
99
+ * @param {HTMLElement} params.line - The line element of the current range
100
+ * @param {ShortcutInfo} params.info - Information of the shortcut
101
+ * @param {KeyboardEvent} params.event - Key event object
102
+ * @param {string} params.keyCode - KeyBoardEvent.code
103
+ * @param {__se__EditorCore} params.editor - The root editor instance
104
+ */
105
+ shortcut({ line, range }) {
106
+ const newLine = this.nodeTransform.split(range.endContainer, range.endOffset, 0);
107
+ this.submit('__se__solid');
108
+ dom.utils.removeItem(line);
109
+ this.selection.setRange(newLine, 0, newLine, 0);
110
+ }
111
+
112
+ /**
113
+ * @description Add a hr element
114
+ * @param {string} className HR class name
115
+ */
116
+ submit(className) {
117
+ const hr = dom.utils.createElement('hr', { class: className });
118
+ this.editor.focus();
119
+ this.component.insert(hr, { skipCharCount: false, skipSelection: true, skipHistory: false });
120
+ return hr;
121
+ }
122
+ }
72
123
 
73
124
  function CreateHTML({ lang }, HRItems) {
74
125
  const items = HRItems || [
@@ -96,7 +147,7 @@ function CreateHTML({ lang }, HRItems) {
96
147
  </li>`;
97
148
  }
98
149
 
99
- return domUtils.createElement(
150
+ return dom.utils.createElement(
100
151
  'DIV',
101
152
  {
102
153
  class: 'se-dropdown se-list-layer se-list-line'
@@ -1,33 +1,46 @@
1
1
  import EditorInjector from '../../editorInjector';
2
- import { domUtils } from '../../helper';
2
+ import { dom } from '../../helper';
3
3
 
4
- const Layout = function (editor, pluginOptions) {
5
- // plugin bisic properties
6
- EditorInjector.call(this, editor);
7
- this.title = this.lang.layout;
8
- this.icon = 'layout';
4
+ /**
5
+ * @class
6
+ * @description Layout Plugin, Apply layout to the entire editor.
7
+ */
8
+ class Layout extends EditorInjector {
9
+ static key = 'layout';
10
+ static type = 'dropdown';
11
+ static className = '';
9
12
 
10
- // members
11
- this.selectedIndex = -1;
12
- this.items = pluginOptions.items;
13
+ /**
14
+ * @constructor
15
+ * @param {__se__EditorCore} editor - The root editor instance
16
+ * @param {Object} pluginOptions
17
+ * @param {Array<{name: string, html: string}>} pluginOptions.items - Layout list
18
+ */
19
+ constructor(editor, pluginOptions) {
20
+ // plugin bisic properties
21
+ super(editor);
22
+ this.title = this.lang.layout;
23
+ this.icon = 'layout';
13
24
 
14
- // create HTML
15
- const menu = CreateHTML(this.items);
25
+ // members
26
+ this.selectedIndex = -1;
27
+ this.items = pluginOptions.items;
16
28
 
17
- // init
18
- this.menu.initDropdownTarget(Layout, menu);
19
- };
29
+ // create HTML
30
+ const menu = CreateHTML(this.items);
31
+
32
+ // init
33
+ this.menu.initDropdownTarget(Layout, menu);
34
+ }
20
35
 
21
- Layout.key = 'layout';
22
- Layout.type = 'dropdown';
23
- Layout.className = '';
24
- Layout.prototype = {
25
36
  /**
26
- * @override core
27
- * @param {Element} target Target command button
37
+ * @editorMethod Editor.core
38
+ * @description Executes the main execution method of the plugin.
39
+ * - Called when an item in the "dropdown" menu is clicked.
40
+ * @param {HTMLElement} target - The plugin's toolbar button element
28
41
  */
29
42
  action(target) {
30
- const index = target.getAttribute('data-value') * 1;
43
+ const index = Number(target.getAttribute('data-value'));
31
44
  const temp = this.items[(this.selectedIndex = index)];
32
45
 
33
46
  if (temp.html) {
@@ -38,10 +51,8 @@ Layout.prototype = {
38
51
  }
39
52
 
40
53
  this.menu.dropdownOff();
41
- },
42
-
43
- constructor: Layout
44
- };
54
+ }
55
+ }
45
56
 
46
57
  function CreateHTML(layoutList) {
47
58
  if (!layoutList || layoutList.length === 0) {
@@ -66,7 +77,7 @@ function CreateHTML(layoutList) {
66
77
  </ul>
67
78
  </div>`;
68
79
 
69
- return domUtils.createElement('DIV', { class: 'se-list-layer' }, list);
80
+ return dom.utils.createElement('DIV', { class: 'se-list-layer' }, list);
70
81
  }
71
82
 
72
83
  export default Layout;
@@ -1,42 +1,58 @@
1
1
  import EditorInjector from '../../editorInjector';
2
- import { domUtils } from '../../helper';
2
+ import { dom } from '../../helper';
3
3
 
4
- const LineHeight = function (editor, pluginOptions) {
5
- // plugin bisic properties
6
- EditorInjector.call(this, editor);
7
- this.title = this.lang.lineHeight;
8
- this.icon = 'line_height';
4
+ /**
5
+ * @class
6
+ * @description Line height Plugin
7
+ */
8
+ class LineHeight extends EditorInjector {
9
+ static key = 'lineHeight';
10
+ static type = 'dropdown';
11
+ static className = '';
9
12
 
10
- // create HTML
11
- const menu = CreateHTML(editor, pluginOptions.items);
13
+ /**
14
+ * @constructor
15
+ * @param {__se__EditorCore} editor - The root editor instance
16
+ * @param {Object} pluginOptions
17
+ * @param {Array<{text: string, value: number}>} pluginOptions.items - Line height list
18
+ */
19
+ constructor(editor, pluginOptions) {
20
+ // plugin bisic properties
21
+ super(editor);
22
+ this.title = this.lang.lineHeight;
23
+ this.icon = 'line_height';
12
24
 
13
- // members
14
- this.sizeList = menu.querySelectorAll('li button');
15
- this.currentSize = -1;
25
+ // create HTML
26
+ const menu = CreateHTML(editor, pluginOptions.items);
16
27
 
17
- // init
18
- this.menu.initDropdownTarget(LineHeight, menu);
19
- };
28
+ // members
29
+ this.sizeList = menu.querySelectorAll('li button');
30
+ this.currentSize = null;
31
+
32
+ // init
33
+ this.menu.initDropdownTarget(LineHeight, menu);
34
+ }
20
35
 
21
- LineHeight.key = 'lineHeight';
22
- LineHeight.type = 'dropdown';
23
- LineHeight.className = '';
24
- LineHeight.prototype = {
25
36
  /**
26
- * @override core
37
+ * @editorMethod Editor.EventManager
38
+ * @description Executes the method that is called whenever the cursor position changes.
39
+ * @param {?HTMLElement=} element - Node element where the cursor is currently located
40
+ * @param {?HTMLElement=} target - The plugin's toolbar button element
41
+ * @returns {boolean} - Whether the plugin is active
27
42
  */
28
43
  active(element, target) {
29
44
  if (element?.style?.lineHeight.length > 0) {
30
- domUtils.addClass(target, 'active');
45
+ dom.utils.addClass(target, 'active');
31
46
  return true;
32
47
  }
33
48
 
34
- domUtils.removeClass(target, 'active');
49
+ dom.utils.removeClass(target, 'active');
35
50
  return false;
36
- },
51
+ }
37
52
 
38
53
  /**
39
- * @override dropdown
54
+ * @editorMethod Modules.Dropdown
55
+ * @description Executes the method that is called when a plugin's dropdown menu is opened.
40
56
  */
41
57
  on() {
42
58
  const format = this.format.getLine(this.selection.getNode());
@@ -46,19 +62,21 @@ LineHeight.prototype = {
46
62
  const sizeList = this.sizeList;
47
63
  for (let i = 0, len = sizeList.length; i < len; i++) {
48
64
  if (currentSize === sizeList[i].getAttribute('data-command')) {
49
- domUtils.addClass(sizeList[i], 'active');
65
+ dom.utils.addClass(sizeList[i], 'active');
50
66
  } else {
51
- domUtils.removeClass(sizeList[i], 'active');
67
+ dom.utils.removeClass(sizeList[i], 'active');
52
68
  }
53
69
  }
54
70
 
55
71
  this.currentSize = currentSize;
56
72
  }
57
- },
73
+ }
58
74
 
59
75
  /**
60
- * @override core
61
- * @param {Element} target Target command button
76
+ * @editorMethod Editor.core
77
+ * @description Executes the main execution method of the plugin.
78
+ * - Called when an item in the "dropdown" menu is clicked.
79
+ * @param {HTMLElement} target - The plugin's toolbar button element
62
80
  */
63
81
  action(target) {
64
82
  const value = target.getAttribute('data-command') || '';
@@ -72,24 +90,22 @@ LineHeight.prototype = {
72
90
 
73
91
  this.editor.effectNode = null;
74
92
  this.history.push(false);
75
- },
76
-
77
- constructor: LineHeight
78
- };
93
+ }
94
+ }
79
95
 
80
96
  function CreateHTML({ lang }, items) {
81
97
  const sizeList = items || [
82
- { text: '1', value: 1 },
83
- { text: '1.15', value: 1.15 },
84
- { text: '1.5', value: 1.5 },
85
- { text: '2', value: 2 }
98
+ { text: '1', value: '1em' },
99
+ { text: '1.2', value: '1.2em' },
100
+ { text: '1.7', value: '1.7em' },
101
+ { text: '2', value: '2em' }
86
102
  ];
87
103
 
88
104
  let list = /*html*/ `
89
105
  <div class="se-list-inner">
90
106
  <ul class="se-list-basic">
91
107
  <li>
92
- <button type="button" class="default_value se-btn-list" title="${lang.default}" aria-label="${lang.default}">
108
+ <button type="button" class="se-btn se-btn-list default_value" data-command="" title="${lang.default}" aria-label="${lang.default}">
93
109
  (${lang.default})
94
110
  </button>
95
111
  </li>`;
@@ -108,7 +124,7 @@ function CreateHTML({ lang }, items) {
108
124
  </ul>
109
125
  </div>`;
110
126
 
111
- return domUtils.createElement('DIV', { class: 'se-dropdown se-list-layer' }, list);
127
+ return dom.utils.createElement('DIV', { class: 'se-dropdown se-list-layer' }, list);
112
128
  }
113
129
 
114
130
  export default LineHeight;
@@ -1,75 +1,92 @@
1
1
  import EditorInjector from '../../editorInjector';
2
- import { domUtils } from '../../helper';
3
-
4
- const List = function (editor) {
5
- // plugin bisic properties
6
- EditorInjector.call(this, editor);
7
- this.title = this.lang.list;
8
- this.icon = 'list_numbered';
9
-
10
- // create HTML
11
- const menu = CreateHTML(editor);
12
-
13
- // members
14
- this.listItems = menu.querySelectorAll('li button');
15
- this.icons = {
16
- bulleted: editor.icons.list_bulleted,
17
- numbered: editor.icons.list_numbered
18
- };
19
-
20
- // init
21
- this.menu.initDropdownTarget(List, menu);
22
- };
23
-
24
- List.key = 'list';
25
- List.type = 'dropdown';
26
- List.className = 'se-icon-flip-rtl';
27
- List.prototype = {
2
+ import { dom } from '../../helper';
3
+
4
+ /**
5
+ * @class
6
+ * @description List Plugin (OL, UL)
7
+ */
8
+ class List extends EditorInjector {
9
+ static key = 'list';
10
+ static type = 'dropdown';
11
+ static className = 'se-icon-flip-rtl';
12
+
28
13
  /**
29
- * @override core
14
+ * @constructor
15
+ * @param {__se__EditorCore} editor - The root editor instance
16
+ */
17
+ constructor(editor) {
18
+ // plugin bisic properties
19
+ super(editor);
20
+ this.title = this.lang.list;
21
+ this.icon = 'list_numbered';
22
+
23
+ // create HTML
24
+ const menu = CreateHTML(editor);
25
+
26
+ // members
27
+ this.listItems = menu.querySelectorAll('li button');
28
+ this.icons = {
29
+ bulleted: editor.icons.list_bulleted,
30
+ numbered: editor.icons.list_numbered
31
+ };
32
+
33
+ // init
34
+ this.menu.initDropdownTarget(List, menu);
35
+ }
36
+
37
+ /**
38
+ * @editorMethod Editor.EventManager
39
+ * @description Executes the method that is called whenever the cursor position changes.
40
+ * @param {?HTMLElement=} element - Node element where the cursor is currently located
41
+ * @param {?HTMLElement=} target - The plugin's toolbar button element
42
+ * @returns {boolean} - Whether the plugin is active
30
43
  */
31
44
  active(element, target) {
32
45
  const icon = target.firstElementChild;
33
46
 
34
- if (domUtils.isList(element)) {
47
+ if (dom.check.isList(element)) {
35
48
  const nodeName = element.nodeName.toLowerCase();
36
49
  target.setAttribute('data-focus', nodeName);
37
- domUtils.addClass(target, 'active');
50
+ dom.utils.addClass(target, 'active');
38
51
 
39
52
  if (/^ul$/.test(nodeName)) {
40
- domUtils.changeElement(icon, this.icons.bulleted);
53
+ dom.utils.changeElement(icon, this.icons.bulleted);
41
54
  } else {
42
- domUtils.changeElement(icon, this.icons.numbered);
55
+ dom.utils.changeElement(icon, this.icons.numbered);
43
56
  }
44
57
 
45
58
  return true;
46
59
  }
47
60
 
48
61
  target.removeAttribute('data-focus');
49
- domUtils.changeElement(icon, this.icons.number);
50
- domUtils.removeClass(target, 'active');
62
+ dom.utils.changeElement(icon, this.icons.number);
63
+ dom.utils.removeClass(target, 'active');
51
64
 
52
65
  return false;
53
- },
66
+ }
54
67
 
55
68
  /**
56
- * @override dropdown
69
+ * @editorMethod Modules.Dropdown
70
+ * @description Executes the method that is called when a plugin's dropdown menu is opened.
71
+ * @param {HTMLElement} target Line element at the current cursor position
57
72
  */
58
73
  on(target) {
59
74
  const currentList = target.getAttribute('data-focus') || '';
60
75
  const list = this.listItems;
61
76
  for (let i = 0, len = list.length; i < len; i++) {
62
77
  if (currentList === list[i].getAttribute('data-command')) {
63
- domUtils.addClass(list[i], 'active');
78
+ dom.utils.addClass(list[i], 'active');
64
79
  } else {
65
- domUtils.removeClass(list[i], 'active');
80
+ dom.utils.removeClass(list[i], 'active');
66
81
  }
67
82
  }
68
- },
83
+ }
69
84
 
70
85
  /**
71
- * @override core
72
- * @param {Element} target Target command button
86
+ * @editorMethod Editor.core
87
+ * @description Executes the main execution method of the plugin.
88
+ * - Called when an item in the "dropdown" menu is clicked.
89
+ * @param {HTMLElement} target - The plugin's toolbar button element
73
90
  */
74
91
  action(target) {
75
92
  const command = target.getAttribute('data-command');
@@ -79,10 +96,8 @@ List.prototype = {
79
96
 
80
97
  this.menu.dropdownOff();
81
98
  this.history.push(false);
82
- },
83
-
84
- constructor: List
85
- };
99
+ }
100
+ }
86
101
 
87
102
  function CreateHTML({ lang, icons }) {
88
103
  const html = /*html*/ `
@@ -101,7 +116,7 @@ function CreateHTML({ lang, icons }) {
101
116
  </ul>
102
117
  </div>`;
103
118
 
104
- return domUtils.createElement('DIV', { class: 'se-dropdown se-list-layer' }, html);
119
+ return dom.utils.createElement('DIV', { class: 'se-dropdown se-list-layer' }, html);
105
120
  }
106
121
 
107
122
  export default List;