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,14 +1,25 @@
1
1
  /**
2
- * @fileoverview Menu class
2
+ * @fileoverview Toolbar Menu class
3
3
  */
4
4
 
5
5
  import CoreInjector from '../../editorInjector/_core';
6
- import { domUtils, converter } from '../../helper';
6
+ import { dom, converter } from '../../helper';
7
7
 
8
- const Menu = function (editor) {
8
+ /**
9
+ * @typedef {Omit<Menu & Partial<__se__EditorInjector>, 'menu'>} MenuThis
10
+ */
11
+
12
+ /**
13
+ * @constructor
14
+ * @this {MenuThis}
15
+ * @description Dropdown and container menu management class
16
+ * @param {__se__EditorCore} editor - The root editor instance
17
+ */
18
+ function Menu(editor) {
9
19
  CoreInjector.call(this, editor);
10
20
 
11
- // members--
21
+ // members
22
+ /** @type {Object<string, HTMLElement>} */
12
23
  this.targetMap = {};
13
24
  this.index = -1;
14
25
  this.menus = [];
@@ -20,6 +31,7 @@ const Menu = function (editor) {
20
31
  // container
21
32
  this.currentContainer = null;
22
33
  this.currentContainerActiveButton = null;
34
+ this.currentContainerName = '';
23
35
  // event
24
36
  this._dropdownCommands = [];
25
37
  this.__globalEventHandler = {
@@ -33,37 +45,39 @@ const Menu = function (editor) {
33
45
  this._bindClose_dropdown_key = null;
34
46
  this._bindClose_cons_mouse = null;
35
47
  this.currentDropdownPlugin = null;
36
- };
48
+ }
37
49
 
38
50
  Menu.prototype = {
39
51
  /**
52
+ * @this {MenuThis}
40
53
  * @description Method for managing dropdown element.
41
- * You must add the "dropdown" element using the this method at custom plugin.
54
+ * - You must add the "dropdown" element using the this method at custom plugin.
42
55
  * @param {{key: string, type: string}} classObj Class object
43
- * @param {Element} menu Dropdown element
56
+ * @param {Node} menu Dropdown element
44
57
  */
45
58
  initDropdownTarget({ key, type }, menu) {
46
59
  if (key) {
47
60
  if (!/free$/.test(type)) {
48
- menu.setAttribute('data-key', key);
61
+ /** @type {HTMLElement} */ (menu).setAttribute('data-key', key);
49
62
  this._dropdownCommands.push(key);
50
63
  }
51
64
  this.context.get('menuTray').appendChild(menu);
52
- this.targetMap[key] = menu;
65
+ this.targetMap[key] = /** @type {HTMLElement} */ (menu);
53
66
  } else {
54
67
  throw Error("[SUNEDITOR.init.fail] The plugin's key is not added.");
55
68
  }
56
69
  },
57
70
 
58
71
  /**
72
+ * @this {MenuThis}
59
73
  * @description On dropdown
60
- * @param {Element} button Dropdown's button element to call
74
+ * @param {Node} button Dropdown's button element to call
61
75
  */
62
76
  dropdownOn(button) {
63
77
  this.__removeGlobalEvent();
64
78
  const moreBtn = this._checkMoreLayer(button);
65
79
  if (moreBtn) {
66
- const target = domUtils.getParentElement(moreBtn, '.se-btn-tray').querySelector('[data-command="' + moreBtn.getAttribute('data-ref') + '"]');
80
+ const target = dom.query.getParentElement(moreBtn, '.se-btn-tray').querySelector('[data-command="' + moreBtn.getAttribute('data-ref') + '"]');
67
81
  if (target) {
68
82
  this.editor.runFromTarget(target);
69
83
  this.dropdownOn(button);
@@ -71,15 +85,16 @@ Menu.prototype = {
71
85
  }
72
86
  }
73
87
 
74
- const dropdownName = (this.currentDropdownName = button.getAttribute('data-command'));
75
- this.currentDropdownType = button.getAttribute('data-type');
88
+ const btnEl = /** @type {HTMLButtonElement} */ (button);
89
+ const dropdownName = (this.currentDropdownName = btnEl.getAttribute('data-command'));
90
+ this.currentDropdownType = btnEl.getAttribute('data-type');
76
91
  const menu = (this.currentDropdown = this.targetMap[dropdownName]);
77
- this.currentDropdownActiveButton = button;
78
- this._setMenuPosition(button, menu);
92
+ this.currentDropdownActiveButton = btnEl;
93
+ this._setMenuPosition(btnEl, menu);
79
94
 
80
95
  this._bindClose_dropdown_mouse = this.eventManager.addGlobalEvent('mousedown', this.__globalEventHandler.mousedown, false);
81
96
  if (this._dropdownCommands.includes(dropdownName)) {
82
- this.menus = converter.nodeListToArray(menu.querySelectorAll('.se-toolbar-btn[data-command]'));
97
+ this.menus = converter.nodeListToArray(menu.querySelectorAll('[data-command]'));
83
98
  if (this.menus.length > 0) {
84
99
  this._bindClose_dropdown_key = this.eventManager.addGlobalEvent('keydown', this.__globalEventHandler.keydown, false);
85
100
  menu.addEventListener('mousemove', this.__globalEventHandler.mousemove, false);
@@ -88,11 +103,12 @@ Menu.prototype = {
88
103
  }
89
104
 
90
105
  this.currentDropdownPlugin = this.plugins[dropdownName];
91
- if (typeof this.currentDropdownPlugin?.on === 'function') this.currentDropdownPlugin.on(button);
92
- this.editor._antiBlur = true;
106
+ if (typeof this.currentDropdownPlugin?.on === 'function') this.currentDropdownPlugin.on(btnEl);
107
+ this.editor._preventBlur = true;
93
108
  },
94
109
 
95
110
  /**
111
+ * @this {MenuThis}
96
112
  * @description Off dropdown
97
113
  */
98
114
  dropdownOff() {
@@ -106,72 +122,82 @@ Menu.prototype = {
106
122
  this.currentDropdown.style.display = 'none';
107
123
  this.currentDropdown = null;
108
124
  if (this.currentDropdownActiveButton) {
109
- domUtils.removeClass(this.currentDropdownActiveButton.parentElement.children, 'on');
125
+ dom.utils.removeClass(this.currentDropdownActiveButton.parentElement.children, 'on');
110
126
  }
111
127
  this.currentDropdownActiveButton = null;
112
128
  this.editor._notHideToolbar = false;
113
129
  }
114
130
 
115
- this.editor._antiBlur = false;
131
+ this.editor._preventBlur = false;
116
132
 
117
133
  if (typeof this.currentDropdownPlugin?.off === 'function') this.currentDropdownPlugin.off();
118
134
  this.currentDropdownPlugin = null;
119
135
  },
120
136
 
121
137
  /**
138
+ * @this {MenuThis}
122
139
  * @description On menu container
123
- * @param {Element} button Container's button element to call
140
+ * @param {Node} button Container's button element to call
124
141
  */
125
142
  containerOn(button) {
126
143
  this.__removeGlobalEvent();
127
144
 
128
- const containerName = (this._containerName = button.getAttribute('data-command'));
129
- this.currentContainerActiveButton = button;
145
+ this.currentContainerActiveButton = /** @type {HTMLButtonElement} */ (button);
146
+ const containerName = (this.currentContainerName = this.currentContainerActiveButton.getAttribute('data-command'));
130
147
  this._setMenuPosition(button, (this.currentContainer = this.targetMap[containerName]));
131
148
 
132
149
  this._bindClose_cons_mouse = this.eventManager.addGlobalEvent('mousedown', this.__globalEventHandler.containerDown, false);
133
150
 
134
151
  if (this.plugins[containerName].on) this.plugins[containerName].on(button);
135
- this.editor._antiBlur = true;
152
+ this.editor._preventBlur = true;
136
153
  },
137
154
 
138
155
  /**
156
+ * @this {MenuThis}
139
157
  * @description Off menu container
140
158
  */
141
159
  containerOff() {
142
160
  this.__removeGlobalEvent();
143
161
 
144
162
  if (this.currentContainer) {
145
- this._containerName = '';
163
+ this.currentContainerName = '';
146
164
  this.currentContainer.style.display = 'none';
147
165
  this.currentContainer = null;
148
- domUtils.removeClass(this.currentContainerActiveButton, 'on');
166
+ dom.utils.removeClass(this.currentContainerActiveButton, 'on');
149
167
  this.currentContainerActiveButton = null;
150
168
  this.editor._notHideToolbar = false;
151
169
  }
152
170
 
153
- this.editor._antiBlur = false;
171
+ this.editor._preventBlur = false;
154
172
  },
155
173
 
156
174
  /**
157
- * @description Set the menu position. (dropdown, container)
158
- * @param {*} element Button element
159
- * @param {*} menu Menu element
160
175
  * @private
176
+ * @this {MenuThis}
177
+ * @description Set the menu position.
178
+ * @param {Node} element Button element
179
+ * @param {HTMLElement} menu Menu element
161
180
  */
162
181
  _setMenuPosition(element, menu) {
163
182
  menu.style.visibility = 'hidden';
164
183
  menu.style.display = 'block';
165
184
  menu.style.height = '';
166
- domUtils.addClass(element.parentElement.children, 'on');
185
+ dom.utils.addClass(element.parentElement.children, 'on');
167
186
 
168
- this.offset.setRelPosition(menu, this.carrierWrapper, element.parentElement, domUtils.getParentElement(element, '.se-toolbar'), false);
187
+ this.offset.setRelPosition(menu, this.carrierWrapper, element.parentElement, dom.query.getParentElement(element, '.se-toolbar'), false);
169
188
 
170
189
  menu.style.visibility = '';
171
190
  },
172
191
 
192
+ /**
193
+ * @private
194
+ * @this {MenuThis}
195
+ * @description Check if the element is part of a more layer
196
+ * @param {Node} element The element to check
197
+ * @returns {HTMLElement|null} The more layer element or null
198
+ */
173
199
  _checkMoreLayer(element) {
174
- const more = domUtils.getParentElement(element, '.se-more-layer');
200
+ const more = dom.query.getParentElement(element, '.se-more-layer');
175
201
  if (more && more.style.display !== 'block') {
176
202
  return more.getAttribute('data-ref') ? more : null;
177
203
  } else {
@@ -179,29 +205,40 @@ Menu.prototype = {
179
205
  }
180
206
  },
181
207
 
208
+ /**
209
+ * @private
210
+ * @this {MenuThis}
211
+ * @description Move the selected item in the dropdown menu
212
+ * @param {number} num Direction and amount to move (-1 for up, 1 for down)
213
+ */
182
214
  _moveItem(num) {
183
- domUtils.removeClass(this.currentDropdown, 'se-select-menu-mouse-move');
184
- domUtils.addClass(this.currentDropdown, 'se-select-menu-key-action');
215
+ dom.utils.removeClass(this.currentDropdown, 'se-select-menu-mouse-move');
216
+ dom.utils.addClass(this.currentDropdown, 'se-select-menu-key-action');
185
217
  num = this.index + num;
186
218
  const len = this.menus.length;
187
219
  const selectIndex = (this.index = num >= len ? 0 : num < 0 ? len - 1 : num);
188
220
 
189
221
  for (let i = 0; i < len; i++) {
190
222
  if (i === selectIndex) {
191
- domUtils.addClass(this.menus[i], 'on');
223
+ dom.utils.addClass(this.menus[i], 'on');
192
224
  } else {
193
- domUtils.removeClass(this.menus[i], 'on');
225
+ dom.utils.removeClass(this.menus[i], 'on');
194
226
  }
195
227
  }
196
228
  },
197
229
 
230
+ /**
231
+ * @private
232
+ * @this {MenuThis}
233
+ * @description Remove global event listeners
234
+ */
198
235
  __removeGlobalEvent() {
199
236
  if (this._bindClose_dropdown_mouse) this._bindClose_dropdown_mouse = this.eventManager.removeGlobalEvent(this._bindClose_dropdown_mouse);
200
237
  if (this._bindClose_cons_mouse) this._bindClose_cons_mouse = this.eventManager.removeGlobalEvent(this._bindClose_cons_mouse);
201
238
  if (this._bindClose_dropdown_key) {
202
239
  this._bindClose_dropdown_key = this.eventManager.removeGlobalEvent(this._bindClose_dropdown_key);
203
- domUtils.removeClass(this.menus, 'on');
204
- domUtils.removeClass(this.currentDropdown, 'se-select-menu-key-action|se-select-menu-mouse-move');
240
+ dom.utils.removeClass(this.menus, 'on');
241
+ dom.utils.removeClass(this.currentDropdown, 'se-select-menu-key-action|se-select-menu-mouse-move');
205
242
  this.currentDropdown.removeEventListener('mousemove', this.__globalEventHandler.mousemove, false);
206
243
  this.currentDropdown.removeEventListener('mouseout', this.__globalEventHandler.mouseout, false);
207
244
  }
@@ -210,30 +247,55 @@ Menu.prototype = {
210
247
  constructor: Menu
211
248
  };
212
249
 
250
+ /**
251
+ * @private
252
+ * @this {MenuThis}
253
+ * @param {MouseEvent} e - Event object
254
+ */
213
255
  function OnMouseDown_dropdown(e) {
214
- if (domUtils.getParentElement(e.target, '.se-dropdown')) return;
256
+ const eventTarget = dom.query.getEventTarget(e);
257
+ if (dom.query.getParentElement(eventTarget, '.se-dropdown')) return;
215
258
  this.dropdownOff();
216
259
  }
217
260
 
261
+ /**
262
+ * @private
263
+ * @this {MenuThis}
264
+ */
218
265
  function OnMouseout_dropdown() {
219
266
  this.index = -1;
220
267
  }
221
268
 
269
+ /**
270
+ * @private
271
+ * @this {MenuThis}
272
+ * @param {KeyboardEvent} e - Event object
273
+ */
222
274
  function OnKeyDown_dropdown(e) {
223
- const keyCode = e.keyCode;
275
+ const keyCode = e.code;
224
276
  switch (keyCode) {
225
- case 38: // up
277
+ case 'ArrowUp': // up
278
+ e.preventDefault();
279
+ e.stopPropagation();
280
+ this._moveItem(-1);
281
+ break;
282
+ case 'ArrowDown': // down
283
+ e.preventDefault();
284
+ e.stopPropagation();
285
+ this._moveItem(1);
286
+ break;
287
+ case 'ArrowLeft': // left
226
288
  e.preventDefault();
227
289
  e.stopPropagation();
228
290
  this._moveItem(-1);
229
291
  break;
230
- case 40: // down
292
+ case 'ArrowRight': //right
231
293
  e.preventDefault();
232
294
  e.stopPropagation();
233
295
  this._moveItem(1);
234
296
  break;
235
- case 13:
236
- case /* enter, space */ 32: {
297
+ case 'Enter':
298
+ case 'Space': /* enter, space */ {
237
299
  if (this.index < 0) break;
238
300
 
239
301
  const target = this.menus[this.index];
@@ -248,9 +310,14 @@ function OnKeyDown_dropdown(e) {
248
310
  }
249
311
  }
250
312
 
313
+ /**
314
+ * @private
315
+ * @this {MenuThis}
316
+ * @param {MouseEvent} e - Event object
317
+ */
251
318
  function OnMousemove_dropdown(e) {
252
- domUtils.addClass(this.currentDropdown, 'se-select-menu-mouse-move');
253
- domUtils.removeClass(this.currentDropdown, 'se-select-menu-key-action');
319
+ dom.utils.addClass(this.currentDropdown, 'se-select-menu-mouse-move');
320
+ dom.utils.removeClass(this.currentDropdown, 'se-select-menu-key-action');
254
321
 
255
322
  const index = this.menus.indexOf(e.target);
256
323
  if (index === -1) return;