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,48 +1,62 @@
1
1
  import EditorInjector from '../../editorInjector';
2
- import { domUtils } from '../../helper';
2
+ import { dom } from '../../helper';
3
3
 
4
4
  const DEFAULT_TYPE = 'disc';
5
5
 
6
- const List_bulleted = function (editor) {
7
- // plugin bisic properties
8
- EditorInjector.call(this, editor);
9
- this.title = this.lang.bulletedList;
10
- this.icon = 'list_bulleted';
11
- this.afterButton = domUtils.createElement(
12
- 'button',
13
- { class: 'se-btn se-tooltip se-sub-arrow-btn', 'data-command': List_bulleted.key, 'data-type': 'dropdown' },
14
- `${this.icons.arrow_down}<span class="se-tooltip-inner"><span class="se-tooltip-text">${this.lang.bulletedList}</span></span>`
15
- );
16
-
17
- // create HTML
18
- const menu = CreateHTML();
19
-
20
- // members
21
- this.listItems = menu.querySelectorAll('li button ul');
22
-
23
- // init
24
- this.menu.initDropdownTarget({ key: List_bulleted.key, type: 'dropdown' }, menu);
25
- };
26
-
27
- List_bulleted.key = 'list_bulleted';
28
- List_bulleted.type = 'command';
29
- List_bulleted.className = 'se-icon-flip-rtl';
30
- List_bulleted.prototype = {
6
+ /**
7
+ * @class
8
+ * @description List bulleted plugin, Several types of lists are provided.
9
+ */
10
+ class List_bulleted extends EditorInjector {
11
+ static key = 'list_bulleted';
12
+ static type = 'command';
13
+ static className = 'se-icon-flip-rtl';
14
+
15
+ /**
16
+ * @constructor
17
+ * @param {__se__EditorCore} editor - The root editor instance
18
+ */
19
+ constructor(editor) {
20
+ // plugin bisic properties
21
+ super(editor);
22
+ this.title = this.lang.bulletedList;
23
+ this.icon = 'list_bulleted';
24
+ this.afterItem = dom.utils.createElement(
25
+ 'button',
26
+ { class: 'se-btn se-tooltip se-sub-arrow-btn', 'data-command': List_bulleted.key, 'data-type': 'dropdown' },
27
+ `${this.icons.arrow_down}<span class="se-tooltip-inner"><span class="se-tooltip-text">${this.lang.bulletedList}</span></span>`
28
+ );
29
+
30
+ // create HTML
31
+ const menu = CreateHTML();
32
+
33
+ // members
34
+ this.listItems = menu.querySelectorAll('li button ul');
35
+
36
+ // init
37
+ this.menu.initDropdownTarget({ key: List_bulleted.key, type: 'dropdown' }, menu);
38
+ }
39
+
31
40
  /**
32
- * @override core
41
+ * @editorMethod Editor.EventManager
42
+ * @description Executes the method that is called whenever the cursor position changes.
43
+ * @param {?HTMLElement=} element - Node element where the cursor is currently located
44
+ * @param {?HTMLElement=} target - The plugin's toolbar button element
45
+ * @returns {boolean} - Whether the plugin is active
33
46
  */
34
47
  active(element, target) {
35
- if (domUtils.isListCell(element) && /^UL$/i.test(element.parentElement.nodeName)) {
36
- domUtils.addClass(target, 'active');
48
+ if (dom.check.isListCell(element) && /^UL$/i.test(element.parentElement.nodeName)) {
49
+ dom.utils.addClass(target, 'active');
37
50
  return true;
38
51
  }
39
52
 
40
- domUtils.removeClass(target, 'active');
53
+ dom.utils.removeClass(target, 'active');
41
54
  return false;
42
- },
55
+ }
43
56
 
44
57
  /**
45
- * @override dropdown
58
+ * @editorMethod Modules.Dropdown
59
+ * @description Executes the method that is called when a plugin's dropdown menu is opened.
46
60
  */
47
61
  on() {
48
62
  const list = this.listItems;
@@ -50,37 +64,59 @@ List_bulleted.prototype = {
50
64
  const type = el?.style ? el.style.listStyleType || DEFAULT_TYPE : '';
51
65
 
52
66
  for (let i = 0, len = list.length, l; i < len; i++) {
53
- l = list[i];
67
+ l = /** @type {HTMLElement} */ (list[i]);
54
68
  if (type === l.style.listStyleType) {
55
- domUtils.addClass(l.parentElement, 'active');
69
+ dom.utils.addClass(l.parentElement, 'active');
56
70
  } else {
57
- domUtils.removeClass(l.parentElement, 'active');
71
+ dom.utils.removeClass(l.parentElement, 'active');
58
72
  }
59
73
  }
60
- },
74
+ }
61
75
 
62
76
  /**
63
- * @override core
64
- * @param {Element|null} target Target command button
77
+ * @editorMethod Editor.core
78
+ * @description Executes the main execution method of the plugin.
79
+ * - Called when an item in the "dropdown" menu is clicked.
80
+ * @param {HTMLElement} target - The plugin's toolbar button element
65
81
  */
66
82
  action(target) {
67
83
  const el = this.format.getBlock(this.selection.getNode());
68
- const type = target?.querySelector('ul')?.style.listStyleType || '';
84
+ const type = target?.querySelector('ul')?.style.listStyleType;
69
85
 
70
- if (domUtils.isList(el) && type) {
86
+ if (dom.check.isList(el) && type) {
71
87
  el.style.listStyleType = type;
72
88
  } else {
73
- const range = this.format.applyList(`ul:${type}`, null, false);
74
- if (range) this.selection.setRange(range.sc, range.so, range.ec, range.eo);
89
+ this.submit(type);
75
90
  }
76
91
 
77
92
  this.menu.dropdownOff();
93
+ }
94
+
95
+ /**
96
+ * @editorMethod Editor.core
97
+ * @description Executes methods called by shortcut keys.
98
+ * @param {__se__PluginShortcutInfo} params - Information of the "shortcut" plugin
99
+ */
100
+ shortcut({ range, info }) {
101
+ const { startContainer } = range;
102
+ if (dom.check.isText(startContainer)) {
103
+ const newText = startContainer.substringData(info.key.length, startContainer.textContent.length - 1);
104
+ startContainer.textContent = newText;
105
+ }
106
+ this.submit();
107
+ }
108
+
109
+ /**
110
+ * @description Add a bulleted list
111
+ * @param {string} [type=""] List type
112
+ */
113
+ submit(type) {
114
+ const range = this.format.applyList(`ul:${type || ''}`, null, false);
115
+ if (range) this.selection.setRange(range.sc, range.so, range.ec, range.eo);
78
116
  this.editor.focus();
79
117
  this.history.push(false);
80
- },
81
-
82
- constructor: List_bulleted
83
- };
118
+ }
119
+ }
84
120
 
85
121
  function CreateHTML() {
86
122
  const html = /*html*/ `
@@ -90,7 +126,7 @@ function CreateHTML() {
90
126
  </ul>
91
127
  </div>`;
92
128
 
93
- return domUtils.createElement('DIV', { class: 'se-dropdown se-list-layer' }, html);
129
+ return dom.utils.createElement('DIV', { class: 'se-dropdown se-list-layer' }, html);
94
130
  }
95
131
 
96
132
  function _CreateLI(types) {
@@ -1,48 +1,62 @@
1
1
  import EditorInjector from '../../editorInjector';
2
- import { domUtils } from '../../helper';
2
+ import { dom } from '../../helper';
3
3
 
4
4
  const DEFAULT_TYPE = 'decimal';
5
5
 
6
- const List_numbered = function (editor) {
7
- // plugin bisic properties
8
- EditorInjector.call(this, editor);
9
- this.title = this.lang.numberedList;
10
- this.icon = 'list_numbered';
11
- this.afterButton = domUtils.createElement(
12
- 'button',
13
- { class: 'se-btn se-tooltip se-sub-arrow-btn', 'data-command': List_numbered.key, 'data-type': 'dropdown' },
14
- `${this.icons.arrow_down}<span class="se-tooltip-inner"><span class="se-tooltip-text">${this.lang.numberedList}</span></span>`
15
- );
16
-
17
- // create HTML
18
- const menu = CreateHTML();
19
-
20
- // members
21
- this.listItems = menu.querySelectorAll('li button ol');
22
-
23
- // init
24
- this.menu.initDropdownTarget({ key: List_numbered.key, type: 'dropdown' }, menu);
25
- };
26
-
27
- List_numbered.key = 'list_numbered';
28
- List_numbered.type = 'command';
29
- List_numbered.className = 'se-icon-flip-rtl';
30
- List_numbered.prototype = {
6
+ /**
7
+ * @class
8
+ * @description List numbered plugin, Several types of lists are provided.
9
+ */
10
+ class List_numbered extends EditorInjector {
11
+ static key = 'list_numbered';
12
+ static type = 'command';
13
+ static className = 'se-icon-flip-rtl';
14
+
15
+ /**
16
+ * @constructor
17
+ * @param {__se__EditorCore} editor - The root editor instance
18
+ */
19
+ constructor(editor) {
20
+ // plugin bisic properties
21
+ super(editor);
22
+ this.title = this.lang.numberedList;
23
+ this.icon = 'list_numbered';
24
+ this.afterItem = dom.utils.createElement(
25
+ 'button',
26
+ { class: 'se-btn se-tooltip se-sub-arrow-btn', 'data-command': List_numbered.key, 'data-type': 'dropdown' },
27
+ `${this.icons.arrow_down}<span class="se-tooltip-inner"><span class="se-tooltip-text">${this.lang.numberedList}</span></span>`
28
+ );
29
+
30
+ // create HTML
31
+ const menu = CreateHTML();
32
+
33
+ // members
34
+ this.listItems = menu.querySelectorAll('li button ol');
35
+
36
+ // init
37
+ this.menu.initDropdownTarget({ key: List_numbered.key, type: 'dropdown' }, menu);
38
+ }
39
+
31
40
  /**
32
- * @override core
41
+ * @editorMethod Editor.EventManager
42
+ * @description Executes the method that is called whenever the cursor position changes.
43
+ * @param {?HTMLElement=} element - Node element where the cursor is currently located
44
+ * @param {?HTMLElement=} target - The plugin's toolbar button element
45
+ * @returns {boolean} - Whether the plugin is active
33
46
  */
34
47
  active(element, target) {
35
- if (domUtils.isListCell(element) && /^OL$/i.test(element.parentElement.nodeName)) {
36
- domUtils.addClass(target, 'active');
48
+ if (dom.check.isListCell(element) && /^OL$/i.test(element.parentElement.nodeName)) {
49
+ dom.utils.addClass(target, 'active');
37
50
  return true;
38
51
  }
39
52
 
40
- domUtils.removeClass(target, 'active');
53
+ dom.utils.removeClass(target, 'active');
41
54
  return false;
42
- },
55
+ }
43
56
 
44
57
  /**
45
- * @override dropdown
58
+ * @editorMethod Modules.Dropdown
59
+ * @description Executes the method that is called when a plugin's dropdown menu is opened.
46
60
  */
47
61
  on() {
48
62
  const list = this.listItems;
@@ -50,37 +64,59 @@ List_numbered.prototype = {
50
64
  const type = el?.style ? el.style.listStyleType || DEFAULT_TYPE : '';
51
65
 
52
66
  for (let i = 0, len = list.length, l; i < len; i++) {
53
- l = list[i];
67
+ l = /** @type {HTMLElement} */ (list[i]);
54
68
  if (type === l.style.listStyleType) {
55
- domUtils.addClass(l.parentElement, 'active');
69
+ dom.utils.addClass(l.parentElement, 'active');
56
70
  } else {
57
- domUtils.removeClass(l.parentElement, 'active');
71
+ dom.utils.removeClass(l.parentElement, 'active');
58
72
  }
59
73
  }
60
- },
74
+ }
61
75
 
62
76
  /**
63
- * @override core
64
- * @param {Element|null} target Target command button
77
+ * @editorMethod Editor.core
78
+ * @description Executes the main execution method of the plugin.
79
+ * - Called when an item in the "dropdown" menu is clicked.
80
+ * @param {HTMLElement} target - The plugin's toolbar button element
65
81
  */
66
82
  action(target) {
67
83
  const el = this.format.getBlock(this.selection.getNode());
68
- const type = target?.querySelector('ol')?.style.listStyleType || '';
84
+ const type = target?.querySelector('ol')?.style.listStyleType;
69
85
 
70
- if (domUtils.isList(el) && type) {
86
+ if (dom.check.isList(el) && type) {
71
87
  el.style.listStyleType = type;
72
88
  } else {
73
- const range = this.format.applyList(`ol:${type}`, null, false);
74
- if (range) this.selection.setRange(range.sc, range.so, range.ec, range.eo);
89
+ this.submit(type);
75
90
  }
76
91
 
77
92
  this.menu.dropdownOff();
93
+ }
94
+
95
+ /**
96
+ * @editorMethod Editor.core
97
+ * @description Executes methods called by shortcut keys.
98
+ * @param {__se__PluginShortcutInfo} params - Information of the "shortcut" plugin
99
+ */
100
+ shortcut({ range, info }) {
101
+ const { startContainer } = range;
102
+ if (dom.check.isText(startContainer)) {
103
+ const newText = startContainer.substringData(info.key.length, startContainer.textContent.length - 1);
104
+ startContainer.textContent = newText;
105
+ }
106
+ this.submit();
107
+ }
108
+
109
+ /**
110
+ * @description Add a numbered list
111
+ * @param {string} [type=""] List type
112
+ */
113
+ submit(type) {
114
+ const range = this.format.applyList(`ol:${type || ''}`, null, false);
115
+ if (range) this.selection.setRange(range.sc, range.so, range.ec, range.eo);
78
116
  this.editor.focus();
79
117
  this.history.push(false);
80
- },
81
-
82
- constructor: List_numbered
83
- };
118
+ }
119
+ }
84
120
 
85
121
  function CreateHTML() {
86
122
  const html = /*html*/ `
@@ -93,7 +129,7 @@ function CreateHTML() {
93
129
  </ul>
94
130
  </div>`;
95
131
 
96
- return domUtils.createElement('DIV', { class: 'se-dropdown se-list-layer' }, html);
132
+ return dom.utils.createElement('DIV', { class: 'se-dropdown se-list-layer' }, html);
97
133
  }
98
134
 
99
135
  function _CreateLI(types) {
@@ -1,60 +1,72 @@
1
1
  import EditorInjector from '../../editorInjector';
2
- import { domUtils } from '../../helper';
3
-
4
- const Align = function (editor, pluginOptions) {
5
- // plugin bisic properties
6
- EditorInjector.call(this, editor);
7
- this.title = this.lang.align;
8
- this.icon = this.options.get('_rtl') ? 'align_right' : 'align_left';
9
-
10
- // create HTML
11
- const menu = CreateHTML(editor, pluginOptions.items);
12
- const commandArea = (this._itemMenu = menu.querySelector('ul'));
13
-
14
- // members
15
- this.defaultDir = editor.options.get('_rtl') ? 'right' : 'left';
16
- this.alignIcons = {
17
- justify: editor.icons.align_justify,
18
- left: editor.icons.align_left,
19
- right: editor.icons.align_right,
20
- center: editor.icons.align_center
21
- };
22
- this.alignList = commandArea.querySelectorAll('li button');
23
-
24
- // init
25
- this.menu.initDropdownTarget(Align, menu);
26
- };
27
-
28
- Align.key = 'align';
29
- Align.type = 'dropdown';
30
- Align.className = '';
31
- Align.prototype = {
2
+ import { dom } from '../../helper';
3
+
4
+ /**
5
+ * @class
6
+ * @description Align plugin
7
+ */
8
+ class Align extends EditorInjector {
9
+ static key = 'align';
10
+ static type = 'dropdown';
11
+ static className = '';
12
+
13
+ /**
14
+ * @param {__se__EditorCore} editor - The root editor instance
15
+ * @param {Object} pluginOptions
16
+ * @param {Array.<"right"|"center"|"left"|"justify">} pluginOptions.items - Align items
17
+ */
18
+ constructor(editor, pluginOptions) {
19
+ super(editor);
20
+ this.title = this.lang.align;
21
+ this.icon = this.options.get('_rtl') ? 'align_right' : 'align_left';
22
+
23
+ // create HTML
24
+ const menu = CreateHTML(editor, pluginOptions.items);
25
+ const commandArea = (this._itemMenu = menu.querySelector('ul'));
26
+
27
+ // members
28
+ this.defaultDir = editor.options.get('_rtl') ? 'right' : 'left';
29
+ this.alignIcons = {
30
+ justify: editor.icons.align_justify,
31
+ left: editor.icons.align_left,
32
+ right: editor.icons.align_right,
33
+ center: editor.icons.align_center
34
+ };
35
+ this.alignList = commandArea.querySelectorAll('li button');
36
+
37
+ // init
38
+ this.menu.initDropdownTarget(Align, menu);
39
+ }
40
+
32
41
  /**
33
- * @override core
34
- * @param {Node} element Selection node.
35
- * @param {Element} target Target button.
36
- * @returns {boolean}
42
+ * @editorMethod Editor.EventManager
43
+ * @description Executes the method that is called whenever the cursor position changes.
44
+ * @param {?HTMLElement=} element - Node element where the cursor is currently located
45
+ * @param {?HTMLElement=} target - The plugin's toolbar button element
46
+ * @returns {boolean} - Whether the plugin is active
37
47
  */
38
48
  active(element, target) {
39
49
  const targetChild = target.firstElementChild;
40
50
 
41
51
  if (!element) {
42
- domUtils.changeElement(targetChild, this.alignIcons[this.defaultDir]);
52
+ dom.utils.changeElement(targetChild, this.alignIcons[this.defaultDir]);
43
53
  target.removeAttribute('data-focus');
44
54
  } else if (this.format.isLine(element)) {
45
- const textAlign = element.style.textAlign;
55
+ const textAlign = /** @type {HTMLElement} */ (element).style.textAlign;
46
56
  if (textAlign) {
47
- domUtils.changeElement(targetChild, this.alignIcons[textAlign] || this.alignIcons[this.defaultDir]);
57
+ dom.utils.changeElement(targetChild, this.alignIcons[textAlign] || this.alignIcons[this.defaultDir]);
48
58
  target.setAttribute('data-focus', textAlign);
49
59
  return true;
50
60
  }
51
61
  }
52
62
 
53
63
  return false;
54
- },
64
+ }
55
65
 
56
66
  /**
57
- * @override dropdown
67
+ * @editorMethod Modules.Dropdown
68
+ * @description Executes the method that is called when a plugin's dropdown menu is opened.
69
+ * @param {HTMLElement} target Line element at the current cursor position
58
70
  */
59
71
  on(target) {
60
72
  const currentAlign = target.getAttribute('data-focus') || this.defaultDir;
@@ -63,16 +75,17 @@ Align.prototype = {
63
75
  const alignList = this.alignList;
64
76
  for (let i = 0, len = alignList.length; i < len; i++) {
65
77
  if (currentAlign === alignList[i].getAttribute('data-command')) {
66
- domUtils.addClass(alignList[i], 'active');
78
+ dom.utils.addClass(alignList[i], 'active');
67
79
  } else {
68
- domUtils.removeClass(alignList[i], 'active');
80
+ dom.utils.removeClass(alignList[i], 'active');
69
81
  }
70
82
  }
71
- },
83
+ }
72
84
 
73
85
  /**
74
- * @override core
75
- * @param {"rtl"|"ltr"} dir Direction
86
+ * @editorMethod Editor.core
87
+ * @description Executes the method called when the rtl, ltr mode changes. ("editor.setDir")
88
+ * @param {string} dir Direction ("rtl" or "ltr")
76
89
  */
77
90
  setDir(dir) {
78
91
  const _dir = dir === 'rtl' ? 'right' : 'left';
@@ -87,12 +100,13 @@ Align.prototype = {
87
100
  lp.appendChild(rightBtn);
88
101
  rp.appendChild(leftBtn);
89
102
  }
90
- },
103
+ }
91
104
 
92
105
  /**
93
- * @override core
94
- * @param {Element} target Target command button
95
- * @returns
106
+ * @editorMethod Editor.core
107
+ * @description Executes the main execution method of the plugin.
108
+ * - Called when an item in the "dropdown" menu is clicked.
109
+ * @param {HTMLElement} target - The plugin's toolbar button element
96
110
  */
97
111
  action(target) {
98
112
  const value = target.getAttribute('data-command');
@@ -101,17 +115,15 @@ Align.prototype = {
101
115
  const defaultDir = this.defaultDir;
102
116
  const selectedFormsts = this.format.getLines();
103
117
  for (let i = 0, len = selectedFormsts.length; i < len; i++) {
104
- domUtils.setStyle(selectedFormsts[i], 'textAlign', value === defaultDir ? '' : value);
118
+ dom.utils.setStyle(selectedFormsts[i], 'textAlign', value === defaultDir ? '' : value);
105
119
  }
106
120
 
107
121
  this.editor.effectNode = null;
108
122
  this.menu.dropdownOff();
109
123
  this.editor.focus();
110
124
  this.history.push(false);
111
- },
112
-
113
- constructor: Align
114
- };
125
+ }
126
+ }
115
127
 
116
128
  function CreateHTML({ lang, icons, options }, items) {
117
129
  const alignItems = Array.isArray(items) ? items : options.get('_rtl') ? ['right', 'center', 'left', 'justify'] : ['left', 'center', 'right', 'justify'];
@@ -128,7 +140,7 @@ function CreateHTML({ lang, icons, options }, items) {
128
140
  </li>`;
129
141
  }
130
142
 
131
- return domUtils.createElement(
143
+ return dom.utils.createElement(
132
144
  'div',
133
145
  {
134
146
  class: 'se-dropdown se-list-layer se-list-align'