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,74 +1,115 @@
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
+ * @class
6
+ * @description HR Plugin
7
+ */
8
+ class HR extends EditorInjector {
9
+ static key = 'hr';
10
+ static type = 'dropdown';
11
+ static className = '';
27
12
  /**
28
- * @override component
29
- * @description Called when a container is selected.
30
- * @param {Element} element Target element
13
+ * @this {HR}
14
+ * @param {HTMLElement} node - The node to check.
15
+ * @returns {HTMLElement|null} Returns a node if the node is a valid component.
31
16
  */
32
- select(element) {
33
- domUtils.addClass(element, 'on');
34
- },
17
+ static component(node) {
18
+ return /^hr$/i.test(node?.nodeName) ? node : null;
19
+ }
20
+
21
+ /**
22
+ * @constructor
23
+ * @param {__se__EditorCore} editor - The root editor instance
24
+ * @param {Object} pluginOptions
25
+ * @param {Array<{name: string, class: string}>} pluginOptions.items - HR list
26
+ */
27
+ constructor(editor, pluginOptions) {
28
+ // plugin bisic properties
29
+ super(editor);
30
+ this.title = this.lang.horizontalLine;
31
+ this.icon = 'horizontal_line';
32
+
33
+ // create HTML
34
+ const HRMenus = CreateHTML(editor, pluginOptions.items);
35
+
36
+ // members
37
+ this.list = HRMenus.querySelectorAll('button');
38
+
39
+ // init
40
+ this.menu.initDropdownTarget(HR, HRMenus);
41
+ }
35
42
 
36
43
  /**
37
- * @override component
44
+ * @editorMethod Editor.Component
45
+ * @description Executes the method that is called when a component of a plugin is selected.
46
+ * @param {HTMLElement} target Target component element
47
+ */
48
+ select(target) {
49
+ dom.utils.addClass(target, 'on');
50
+ }
51
+
52
+ /**
53
+ * @editorMethod Editor.Component
38
54
  * @description Called when a container is deselected.
39
- * @param {Element} element Target element
55
+ * @param {HTMLElement} element Target element
40
56
  */
41
57
  deselect(element) {
42
- domUtils.removeClass(element, 'on');
43
- },
58
+ dom.utils.removeClass(element, 'on');
59
+ }
44
60
 
45
- destroy(element) {
46
- if (!element) return;
61
+ /**
62
+ * @editorMethod Editor.Component
63
+ * @description Method to delete a component of a plugin, called by the "FileManager", "Controller" module.
64
+ * @param {HTMLElement} target Target element
65
+ */
66
+ destroy(target) {
67
+ if (!target) return;
47
68
 
48
- const focusEl = element.previousElementSibling || element.nextElementSibling;
49
- domUtils.removeItem(element);
69
+ const focusEl = target.previousElementSibling || target.nextElementSibling;
70
+ dom.utils.removeItem(target);
50
71
 
51
72
  // focus
52
73
  this.editor.focusEdge(focusEl);
53
74
  this.history.push(false);
54
- },
75
+ }
55
76
 
56
77
  /**
57
- * @override core
58
- * @param {Element} target Target command button
78
+ * @editorMethod Editor.core
79
+ * @description Executes the main execution method of the plugin.
80
+ * - Called when an item in the "dropdown" menu is clicked.
81
+ * @param {HTMLElement} target - The plugin's toolbar button element
59
82
  */
60
83
  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
-
84
+ const hr = this.submit(target.firstElementChild.className);
66
85
  const line = this.format.addLine(hr);
67
86
  this.selection.setRange(line, 1, line, 1);
68
- },
87
+ this.menu.dropdownOff();
88
+ }
69
89
 
70
- constructor: HR
71
- };
90
+ /**
91
+ * @editorMethod Editor.core
92
+ * @description Executes methods called by shortcut keys.
93
+ * @param {__se__PluginShortcutInfo} params - Information of the "shortcut" plugin
94
+ */
95
+ shortcut({ line, range }) {
96
+ const newLine = this.nodeTransform.split(range.endContainer, range.endOffset, 0);
97
+ this.submit('__se__solid');
98
+ dom.utils.removeItem(line);
99
+ this.selection.setRange(newLine, 0, newLine, 0);
100
+ }
101
+
102
+ /**
103
+ * @description Add a hr element
104
+ * @param {string} className HR class name
105
+ */
106
+ submit(className) {
107
+ const hr = dom.utils.createElement('hr', { class: className });
108
+ this.editor.focus();
109
+ this.component.insert(hr, { skipCharCount: false, skipSelection: true, skipHistory: false });
110
+ return hr;
111
+ }
112
+ }
72
113
 
73
114
  function CreateHTML({ lang }, HRItems) {
74
115
  const items = HRItems || [
@@ -96,7 +137,7 @@ function CreateHTML({ lang }, HRItems) {
96
137
  </li>`;
97
138
  }
98
139
 
99
- return domUtils.createElement(
140
+ return dom.utils.createElement(
100
141
  'DIV',
101
142
  {
102
143
  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;