suneditor 3.0.0-beta.9 → 3.0.0-rc.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 (380) hide show
  1. package/README.md +65 -57
  2. package/dist/suneditor-contents.min.css +1 -0
  3. package/dist/suneditor.min.css +1 -1
  4. package/dist/suneditor.min.js +1 -1
  5. package/package.json +110 -61
  6. package/src/assets/design/color.css +36 -17
  7. package/src/assets/design/size.css +2 -0
  8. package/src/assets/icons/defaultIcons.js +17 -2
  9. package/src/assets/suneditor-contents.css +51 -16
  10. package/src/assets/suneditor.css +116 -43
  11. package/src/core/config/contextProvider.js +288 -0
  12. package/src/core/config/eventManager.js +188 -0
  13. package/src/core/config/instanceCheck.js +59 -0
  14. package/src/core/config/optionProvider.js +452 -0
  15. package/src/core/editor.js +166 -1637
  16. package/src/core/event/actions/index.js +229 -0
  17. package/src/core/event/effects/common.registry.js +74 -0
  18. package/src/core/event/effects/keydown.registry.js +573 -0
  19. package/src/core/event/effects/ruleHelpers.js +148 -0
  20. package/src/core/event/eventOrchestrator.js +944 -0
  21. package/src/core/event/executor.js +27 -0
  22. package/src/core/{base/eventHandlers → event/handlers}/handler_toolbar.js +27 -28
  23. package/src/core/{base/eventHandlers → event/handlers}/handler_ww_clipboard.js +10 -8
  24. package/src/core/{base/eventHandlers → event/handlers}/handler_ww_dragDrop.js +22 -23
  25. package/src/core/event/handlers/handler_ww_input.js +75 -0
  26. package/src/core/event/handlers/handler_ww_key.js +228 -0
  27. package/src/core/event/handlers/handler_ww_mouse.js +166 -0
  28. package/src/core/event/ports.js +211 -0
  29. package/src/core/event/reducers/keydown.reducer.js +97 -0
  30. package/src/core/event/rules/keydown.rule.arrow.js +63 -0
  31. package/src/core/event/rules/keydown.rule.backspace.js +208 -0
  32. package/src/core/event/rules/keydown.rule.delete.js +132 -0
  33. package/src/core/event/rules/keydown.rule.enter.js +150 -0
  34. package/src/core/event/rules/keydown.rule.tab.js +35 -0
  35. package/src/core/event/support/defaultLineManager.js +136 -0
  36. package/src/core/event/support/selectionState.js +204 -0
  37. package/src/core/kernel/coreKernel.js +320 -0
  38. package/src/core/kernel/kernelInjector.js +19 -0
  39. package/src/core/kernel/store.js +173 -0
  40. package/src/core/{class → logic/dom}/char.js +42 -45
  41. package/src/core/logic/dom/format.js +1075 -0
  42. package/src/core/{class → logic/dom}/html.js +743 -624
  43. package/src/core/logic/dom/inline.js +1847 -0
  44. package/src/core/logic/dom/listFormat.js +601 -0
  45. package/src/core/{class → logic/dom}/nodeTransform.js +92 -72
  46. package/src/core/{class → logic/dom}/offset.js +254 -317
  47. package/src/core/logic/dom/selection.js +754 -0
  48. package/src/core/logic/panel/menu.js +389 -0
  49. package/src/core/logic/panel/toolbar.js +449 -0
  50. package/src/core/logic/panel/viewer.js +761 -0
  51. package/src/core/logic/shell/_commandExecutor.js +380 -0
  52. package/src/core/logic/shell/commandDispatcher.js +241 -0
  53. package/src/core/logic/shell/component.js +970 -0
  54. package/src/core/logic/shell/focusManager.js +110 -0
  55. package/src/core/{base → logic/shell}/history.js +110 -60
  56. package/src/core/logic/shell/pluginManager.js +363 -0
  57. package/src/core/logic/shell/shortcuts.js +130 -0
  58. package/src/core/logic/shell/ui.js +904 -0
  59. package/src/core/schema/context.js +66 -0
  60. package/src/core/schema/frameContext.js +160 -0
  61. package/src/core/schema/options.js +628 -0
  62. package/src/core/section/constructor.js +194 -500
  63. package/src/core/section/documentType.js +297 -222
  64. package/src/events.js +808 -543
  65. package/src/helper/clipboard.js +27 -16
  66. package/src/helper/converter.js +100 -78
  67. package/src/helper/dom/domCheck.js +56 -30
  68. package/src/helper/dom/domQuery.js +159 -89
  69. package/src/helper/dom/domUtils.js +114 -49
  70. package/src/helper/dom/index.js +5 -1
  71. package/src/helper/env.js +26 -26
  72. package/src/helper/index.js +1 -1
  73. package/src/helper/keyCodeMap.js +25 -28
  74. package/src/helper/numbers.js +4 -8
  75. package/src/helper/unicode.js +4 -8
  76. package/src/hooks/base.js +307 -0
  77. package/src/hooks/params.js +130 -0
  78. package/src/interfaces/contracts.js +227 -0
  79. package/src/interfaces/index.js +7 -0
  80. package/src/interfaces/plugins.js +239 -0
  81. package/src/langs/ckb.js +4 -4
  82. package/src/langs/cs.js +4 -4
  83. package/src/langs/da.js +4 -4
  84. package/src/langs/de.js +4 -4
  85. package/src/langs/en.js +4 -4
  86. package/src/langs/es.js +4 -4
  87. package/src/langs/fa.js +4 -4
  88. package/src/langs/fr.js +4 -4
  89. package/src/langs/he.js +4 -4
  90. package/src/langs/hu.js +4 -4
  91. package/src/langs/it.js +4 -4
  92. package/src/langs/ja.js +4 -4
  93. package/src/langs/km.js +4 -4
  94. package/src/langs/ko.js +4 -4
  95. package/src/langs/lv.js +4 -4
  96. package/src/langs/nl.js +4 -4
  97. package/src/langs/pl.js +4 -4
  98. package/src/langs/pt_br.js +13 -13
  99. package/src/langs/ro.js +4 -4
  100. package/src/langs/ru.js +4 -4
  101. package/src/langs/se.js +4 -4
  102. package/src/langs/tr.js +4 -4
  103. package/src/langs/uk.js +4 -4
  104. package/src/langs/ur.js +4 -4
  105. package/src/langs/zh_cn.js +4 -4
  106. package/src/modules/{Browser.js → contract/Browser.js} +119 -128
  107. package/src/modules/{ColorPicker.js → contract/ColorPicker.js} +132 -142
  108. package/src/modules/contract/Controller.js +589 -0
  109. package/src/modules/{Figure.js → contract/Figure.js} +591 -411
  110. package/src/modules/{HueSlider.js → contract/HueSlider.js} +125 -86
  111. package/src/modules/contract/Modal.js +357 -0
  112. package/src/modules/contract/index.js +9 -0
  113. package/src/modules/manager/ApiManager.js +197 -0
  114. package/src/modules/{FileManager.js → manager/FileManager.js} +128 -160
  115. package/src/modules/manager/index.js +5 -0
  116. package/src/modules/{ModalAnchorEditor.js → ui/ModalAnchorEditor.js} +108 -138
  117. package/src/modules/{SelectMenu.js → ui/SelectMenu.js} +119 -120
  118. package/src/modules/{_DragHandle.js → ui/_DragHandle.js} +1 -1
  119. package/src/modules/ui/index.js +6 -0
  120. package/src/plugins/browser/audioGallery.js +23 -26
  121. package/src/plugins/browser/fileBrowser.js +25 -28
  122. package/src/plugins/browser/fileGallery.js +20 -23
  123. package/src/plugins/browser/imageGallery.js +24 -23
  124. package/src/plugins/browser/videoGallery.js +27 -29
  125. package/src/plugins/command/blockquote.js +11 -17
  126. package/src/plugins/command/exportPDF.js +26 -26
  127. package/src/plugins/command/fileUpload.js +138 -133
  128. package/src/plugins/command/list_bulleted.js +48 -44
  129. package/src/plugins/command/list_numbered.js +48 -44
  130. package/src/plugins/dropdown/align.js +64 -50
  131. package/src/plugins/dropdown/backgroundColor.js +34 -35
  132. package/src/plugins/dropdown/{formatBlock.js → blockStyle.js} +43 -37
  133. package/src/plugins/dropdown/font.js +50 -36
  134. package/src/plugins/dropdown/fontColor.js +34 -35
  135. package/src/plugins/dropdown/hr.js +55 -50
  136. package/src/plugins/dropdown/layout.js +20 -15
  137. package/src/plugins/dropdown/lineHeight.js +46 -30
  138. package/src/plugins/dropdown/list.js +32 -33
  139. package/src/plugins/dropdown/paragraphStyle.js +40 -34
  140. package/src/plugins/dropdown/table/index.js +915 -0
  141. package/src/plugins/dropdown/table/render/table.html.js +308 -0
  142. package/src/plugins/dropdown/table/render/table.menu.js +121 -0
  143. package/src/plugins/dropdown/table/services/table.cell.js +465 -0
  144. package/src/plugins/dropdown/table/services/table.clipboard.js +414 -0
  145. package/src/plugins/dropdown/table/services/table.grid.js +504 -0
  146. package/src/plugins/dropdown/table/services/table.resize.js +463 -0
  147. package/src/plugins/dropdown/table/services/table.selection.js +466 -0
  148. package/src/plugins/dropdown/table/services/table.style.js +844 -0
  149. package/src/plugins/dropdown/table/shared/table.constants.js +109 -0
  150. package/src/plugins/dropdown/table/shared/table.utils.js +219 -0
  151. package/src/plugins/dropdown/template.js +20 -15
  152. package/src/plugins/dropdown/textStyle.js +28 -22
  153. package/src/plugins/field/mention.js +54 -49
  154. package/src/plugins/index.js +5 -5
  155. package/src/plugins/input/fontSize.js +100 -97
  156. package/src/plugins/input/pageNavigator.js +13 -10
  157. package/src/plugins/modal/audio.js +208 -219
  158. package/src/plugins/modal/drawing.js +99 -104
  159. package/src/plugins/modal/embed.js +323 -312
  160. package/src/plugins/modal/image/index.js +942 -0
  161. package/src/plugins/modal/image/render/image.html.js +150 -0
  162. package/src/plugins/modal/image/services/image.size.js +198 -0
  163. package/src/plugins/modal/image/services/image.upload.js +216 -0
  164. package/src/plugins/modal/image/shared/image.constants.js +20 -0
  165. package/src/plugins/modal/link.js +74 -54
  166. package/src/plugins/modal/math.js +126 -119
  167. package/src/plugins/modal/video/index.js +858 -0
  168. package/src/plugins/modal/video/render/video.html.js +131 -0
  169. package/src/plugins/modal/video/services/video.size.js +281 -0
  170. package/src/plugins/modal/video/services/video.upload.js +92 -0
  171. package/src/plugins/popup/anchor.js +57 -49
  172. package/src/suneditor.js +73 -61
  173. package/src/themes/cobalt.css +155 -0
  174. package/src/themes/dark.css +143 -120
  175. package/src/typedef.js +214 -63
  176. package/types/assets/icons/defaultIcons.d.ts +8 -0
  177. package/types/assets/suneditor-contents.css.d.ts +1 -0
  178. package/types/assets/suneditor.css.d.ts +1 -0
  179. package/types/core/config/contextProvider.d.ts +148 -0
  180. package/types/core/config/eventManager.d.ts +68 -0
  181. package/types/core/config/instanceCheck.d.ts +33 -0
  182. package/types/core/config/optionProvider.d.ts +147 -0
  183. package/types/core/editor.d.ts +27 -586
  184. package/types/core/event/actions/index.d.ts +50 -0
  185. package/types/core/event/effects/common.registry.d.ts +56 -0
  186. package/types/core/event/effects/keydown.registry.d.ts +80 -0
  187. package/types/core/event/effects/ruleHelpers.d.ts +36 -0
  188. package/types/core/event/eventOrchestrator.d.ts +191 -0
  189. package/types/core/event/executor.d.ts +13 -0
  190. package/types/core/event/handlers/handler_toolbar.d.ts +38 -0
  191. package/types/core/event/handlers/handler_ww_clipboard.d.ts +36 -0
  192. package/types/core/event/handlers/handler_ww_dragDrop.d.ts +26 -0
  193. package/types/core/event/handlers/handler_ww_input.d.ts +38 -0
  194. package/types/core/event/handlers/handler_ww_key.d.ts +40 -0
  195. package/types/core/event/handlers/handler_ww_mouse.d.ts +47 -0
  196. package/types/core/event/ports.d.ts +256 -0
  197. package/types/core/event/reducers/keydown.reducer.d.ts +84 -0
  198. package/types/core/event/rules/keydown.rule.arrow.d.ts +19 -0
  199. package/types/core/event/rules/keydown.rule.backspace.d.ts +18 -0
  200. package/types/core/event/rules/keydown.rule.delete.d.ts +18 -0
  201. package/types/core/event/rules/keydown.rule.enter.d.ts +18 -0
  202. package/types/core/event/rules/keydown.rule.tab.d.ts +18 -0
  203. package/types/core/event/support/defaultLineManager.d.ts +22 -0
  204. package/types/core/event/support/selectionState.d.ts +29 -0
  205. package/types/core/kernel/coreKernel.d.ts +219 -0
  206. package/types/core/kernel/kernelInjector.d.ts +16 -0
  207. package/types/core/kernel/store.d.ts +170 -0
  208. package/types/core/logic/dom/char.d.ts +46 -0
  209. package/types/core/logic/dom/format.d.ts +234 -0
  210. package/types/core/logic/dom/html.d.ts +290 -0
  211. package/types/core/logic/dom/inline.d.ts +93 -0
  212. package/types/core/logic/dom/listFormat.d.ts +101 -0
  213. package/types/core/logic/dom/nodeTransform.d.ts +110 -0
  214. package/types/core/logic/dom/offset.d.ts +335 -0
  215. package/types/core/logic/dom/selection.d.ts +165 -0
  216. package/types/core/logic/panel/menu.d.ts +93 -0
  217. package/types/core/logic/panel/toolbar.d.ts +128 -0
  218. package/types/core/logic/panel/viewer.d.ts +89 -0
  219. package/types/core/logic/shell/_commandExecutor.d.ts +18 -0
  220. package/types/core/logic/shell/commandDispatcher.d.ts +65 -0
  221. package/types/core/logic/shell/component.d.ts +182 -0
  222. package/types/core/logic/shell/focusManager.d.ts +31 -0
  223. package/types/core/{base → logic/shell}/history.d.ts +13 -12
  224. package/types/core/logic/shell/pluginManager.d.ts +115 -0
  225. package/types/core/logic/shell/shortcuts.d.ts +131 -0
  226. package/types/core/logic/shell/ui.d.ts +261 -0
  227. package/types/core/schema/context.d.ts +104 -0
  228. package/types/core/schema/frameContext.d.ts +320 -0
  229. package/types/core/schema/options.d.ts +1241 -0
  230. package/types/core/section/constructor.d.ts +117 -652
  231. package/types/core/section/documentType.d.ts +43 -61
  232. package/types/events.d.ts +796 -65
  233. package/types/helper/clipboard.d.ts +5 -4
  234. package/types/helper/converter.d.ts +55 -43
  235. package/types/helper/dom/domCheck.d.ts +27 -19
  236. package/types/helper/dom/domQuery.d.ts +76 -57
  237. package/types/helper/dom/domUtils.d.ts +62 -39
  238. package/types/helper/dom/index.d.ts +87 -1
  239. package/types/helper/env.d.ts +16 -13
  240. package/types/helper/index.d.ts +8 -2
  241. package/types/helper/keyCodeMap.d.ts +24 -23
  242. package/types/helper/numbers.d.ts +4 -6
  243. package/types/helper/unicode.d.ts +4 -3
  244. package/types/hooks/base.d.ts +239 -0
  245. package/types/hooks/params.d.ts +65 -0
  246. package/types/index.d.ts +20 -117
  247. package/types/interfaces/contracts.d.ts +183 -0
  248. package/types/interfaces/index.d.ts +3 -0
  249. package/types/interfaces/plugins.d.ts +168 -0
  250. package/types/langs/_Lang.d.ts +2 -2
  251. package/types/langs/index.d.ts +2 -2
  252. package/types/modules/contract/Browser.d.ts +262 -0
  253. package/types/modules/contract/ColorPicker.d.ts +99 -0
  254. package/types/modules/contract/Controller.d.ts +204 -0
  255. package/types/modules/contract/Figure.d.ts +529 -0
  256. package/types/modules/{HueSlider.d.ts → contract/HueSlider.d.ts} +39 -28
  257. package/types/modules/contract/Modal.d.ts +62 -0
  258. package/types/modules/contract/index.d.ts +7 -0
  259. package/types/modules/manager/ApiManager.d.ts +106 -0
  260. package/types/modules/manager/FileManager.d.ts +124 -0
  261. package/types/modules/manager/index.d.ts +3 -0
  262. package/types/modules/ui/ModalAnchorEditor.d.ts +152 -0
  263. package/types/modules/ui/SelectMenu.d.ts +107 -0
  264. package/types/modules/{_DragHandle.d.ts → ui/_DragHandle.d.ts} +1 -0
  265. package/types/modules/ui/index.d.ts +4 -0
  266. package/types/plugins/browser/audioGallery.d.ts +33 -41
  267. package/types/plugins/browser/fileBrowser.d.ts +42 -50
  268. package/types/plugins/browser/fileGallery.d.ts +33 -41
  269. package/types/plugins/browser/imageGallery.d.ts +30 -37
  270. package/types/plugins/browser/videoGallery.d.ts +33 -41
  271. package/types/plugins/command/blockquote.d.ts +4 -21
  272. package/types/plugins/command/exportPDF.d.ts +23 -33
  273. package/types/plugins/command/fileUpload.d.ts +80 -100
  274. package/types/plugins/command/list_bulleted.d.ts +9 -35
  275. package/types/plugins/command/list_numbered.d.ts +9 -35
  276. package/types/plugins/dropdown/align.d.ts +23 -46
  277. package/types/plugins/dropdown/backgroundColor.d.ts +35 -53
  278. package/types/plugins/dropdown/blockStyle.d.ts +45 -0
  279. package/types/plugins/dropdown/font.d.ts +18 -41
  280. package/types/plugins/dropdown/fontColor.d.ts +35 -53
  281. package/types/plugins/dropdown/hr.d.ts +26 -52
  282. package/types/plugins/dropdown/layout.d.ts +19 -25
  283. package/types/plugins/dropdown/lineHeight.d.ts +21 -39
  284. package/types/plugins/dropdown/list.d.ts +6 -34
  285. package/types/plugins/dropdown/paragraphStyle.d.ts +34 -45
  286. package/types/plugins/dropdown/table/index.d.ts +158 -0
  287. package/types/plugins/dropdown/table/render/table.html.d.ts +71 -0
  288. package/types/plugins/dropdown/table/render/table.menu.d.ts +59 -0
  289. package/types/plugins/dropdown/table/services/table.cell.d.ts +76 -0
  290. package/types/plugins/dropdown/table/services/table.clipboard.d.ts +26 -0
  291. package/types/plugins/dropdown/table/services/table.grid.d.ts +77 -0
  292. package/types/plugins/dropdown/table/services/table.resize.d.ts +72 -0
  293. package/types/plugins/dropdown/table/services/table.selection.d.ts +59 -0
  294. package/types/plugins/dropdown/table/services/table.style.d.ts +162 -0
  295. package/types/plugins/dropdown/table/shared/table.constants.d.ts +134 -0
  296. package/types/plugins/dropdown/table/shared/table.utils.d.ts +91 -0
  297. package/types/plugins/dropdown/template.d.ts +19 -25
  298. package/types/plugins/dropdown/textStyle.d.ts +23 -30
  299. package/types/plugins/field/mention.d.ts +66 -72
  300. package/types/plugins/index.d.ts +41 -40
  301. package/types/plugins/input/fontSize.d.ts +57 -96
  302. package/types/plugins/input/pageNavigator.d.ts +5 -8
  303. package/types/plugins/modal/audio.d.ts +60 -153
  304. package/types/plugins/modal/drawing.d.ts +16 -118
  305. package/types/plugins/modal/embed.d.ts +46 -166
  306. package/types/plugins/modal/image/index.d.ts +281 -0
  307. package/types/plugins/modal/image/render/image.html.d.ts +45 -0
  308. package/types/plugins/modal/image/services/image.size.d.ts +55 -0
  309. package/types/plugins/modal/image/services/image.upload.d.ts +24 -0
  310. package/types/plugins/modal/image/shared/image.constants.d.ts +17 -0
  311. package/types/plugins/modal/link.d.ts +46 -66
  312. package/types/plugins/modal/math.d.ts +17 -86
  313. package/types/plugins/modal/{video.d.ts → video/index.d.ts} +89 -221
  314. package/types/plugins/modal/video/render/video.html.d.ts +37 -0
  315. package/types/plugins/modal/video/services/video.size.d.ts +74 -0
  316. package/types/plugins/modal/video/services/video.upload.d.ts +19 -0
  317. package/types/plugins/popup/anchor.d.ts +8 -38
  318. package/types/suneditor.d.ts +55 -24
  319. package/types/typedef.d.ts +344 -228
  320. package/CONTRIBUTING.md +0 -186
  321. package/src/core/base/eventHandlers/handler_ww_key_input.js +0 -1200
  322. package/src/core/base/eventHandlers/handler_ww_mouse.js +0 -194
  323. package/src/core/base/eventManager.js +0 -1523
  324. package/src/core/class/component.js +0 -856
  325. package/src/core/class/format.js +0 -3433
  326. package/src/core/class/menu.js +0 -346
  327. package/src/core/class/selection.js +0 -610
  328. package/src/core/class/shortcuts.js +0 -98
  329. package/src/core/class/toolbar.js +0 -431
  330. package/src/core/class/ui.js +0 -424
  331. package/src/core/class/viewer.js +0 -750
  332. package/src/core/section/actives.js +0 -266
  333. package/src/core/section/context.js +0 -102
  334. package/src/editorInjector/_classes.js +0 -36
  335. package/src/editorInjector/_core.js +0 -87
  336. package/src/editorInjector/index.js +0 -73
  337. package/src/modules/ApiManager.js +0 -191
  338. package/src/modules/Controller.js +0 -474
  339. package/src/modules/Modal.js +0 -346
  340. package/src/modules/index.js +0 -14
  341. package/src/plugins/dropdown/table.js +0 -4034
  342. package/src/plugins/modal/image.js +0 -1376
  343. package/src/plugins/modal/video.js +0 -1226
  344. package/types/core/base/eventHandlers/handler_toolbar.d.ts +0 -41
  345. package/types/core/base/eventHandlers/handler_ww_clipboard.d.ts +0 -40
  346. package/types/core/base/eventHandlers/handler_ww_dragDrop.d.ts +0 -35
  347. package/types/core/base/eventHandlers/handler_ww_key_input.d.ts +0 -45
  348. package/types/core/base/eventHandlers/handler_ww_mouse.d.ts +0 -39
  349. package/types/core/base/eventManager.d.ts +0 -401
  350. package/types/core/class/char.d.ts +0 -61
  351. package/types/core/class/component.d.ts +0 -213
  352. package/types/core/class/format.d.ts +0 -623
  353. package/types/core/class/html.d.ts +0 -430
  354. package/types/core/class/menu.d.ts +0 -126
  355. package/types/core/class/nodeTransform.d.ts +0 -93
  356. package/types/core/class/offset.d.ts +0 -522
  357. package/types/core/class/selection.d.ts +0 -188
  358. package/types/core/class/shortcuts.d.ts +0 -142
  359. package/types/core/class/toolbar.d.ts +0 -189
  360. package/types/core/class/ui.d.ts +0 -164
  361. package/types/core/class/viewer.d.ts +0 -140
  362. package/types/core/section/actives.d.ts +0 -46
  363. package/types/core/section/context.d.ts +0 -45
  364. package/types/editorInjector/_classes.d.ts +0 -41
  365. package/types/editorInjector/_core.d.ts +0 -87
  366. package/types/editorInjector/index.d.ts +0 -69
  367. package/types/modules/ApiManager.d.ts +0 -125
  368. package/types/modules/Browser.d.ts +0 -326
  369. package/types/modules/ColorPicker.d.ts +0 -135
  370. package/types/modules/Controller.d.ts +0 -251
  371. package/types/modules/Figure.d.ts +0 -517
  372. package/types/modules/FileManager.d.ts +0 -202
  373. package/types/modules/Modal.d.ts +0 -111
  374. package/types/modules/ModalAnchorEditor.d.ts +0 -236
  375. package/types/modules/SelectMenu.d.ts +0 -194
  376. package/types/modules/index.d.ts +0 -26
  377. package/types/plugins/dropdown/formatBlock.d.ts +0 -55
  378. package/types/plugins/dropdown/table.d.ts +0 -627
  379. package/types/plugins/modal/image.d.ts +0 -451
  380. /package/{LICENSE → LICENSE.txt} +0 -0
@@ -1,53 +1,56 @@
1
- import EditorInjector from '../../editorInjector';
1
+ import { PluginDropdown } from '../../interfaces';
2
2
  import { dom } from '../../helper';
3
3
 
4
+ /**
5
+ * @typedef {{tag: string, command: "line"|"br-line"|"block", name?: string, class?: string}} BlockStyleItem
6
+ */
7
+
8
+ /**
9
+ * @typedef {Object} BlockStylePluginOptions
10
+ * @property {Array<"p"|"div"|"blockquote"|"pre"|"h1"|"h2"|"h3"|"h4"|"h5"|"h6"|string|BlockStyleItem>} [items] - Format list
11
+ */
12
+
4
13
  /**
5
14
  * @class
6
- * @description FormatBlock Plugin (P, BLOCKQUOTE, PRE, H1, H2...)
15
+ * @description BlockStyle Plugin (`P`, `BLOCKQUOTE`, `PRE`, `H1`, `H2`...)
7
16
  */
8
- class FormatBlock extends EditorInjector {
9
- static key = 'formatBlock';
10
- static type = 'dropdown';
17
+ class BlockStyle extends PluginDropdown {
18
+ static key = 'blockStyle';
11
19
  static className = 'se-btn-select se-btn-tool-format';
12
20
 
13
21
  /**
14
22
  * @constructor
15
- * @param {__se__EditorCore} editor - The root editor instance
16
- * @param {Object} pluginOptions
17
- * @param {Array<string>} pluginOptions.items - Format list
23
+ * @param {SunEditor.Kernel} editor - The core kernel
24
+ * @param {BlockStylePluginOptions} pluginOptions - Plugin options
18
25
  */
19
26
  constructor(editor, pluginOptions) {
20
27
  super(editor);
21
28
  // plugin basic properties
22
- this.title = this.lang.formats;
23
- this.inner = '<span class="se-txt">' + this.lang.formats + '</span>' + this.icons.arrow_down;
29
+ this.title = this.$.lang.formats;
30
+ this.inner = '<span class="se-txt">' + this.$.lang.formats + '</span>' + this.$.icons.arrow_down;
24
31
 
25
32
  // create HTML
26
- const menu = CreateHTML(editor, pluginOptions.items);
33
+ const menu = CreateHTML(this.$, pluginOptions.items);
27
34
 
28
35
  // members
29
36
  this.formatList = menu.querySelectorAll('li button');
30
37
  this.currentFormat = '';
31
38
 
32
39
  // init
33
- this.menu.initDropdownTarget(FormatBlock, menu);
40
+ this.$.menu.initDropdownTarget(BlockStyle, menu);
34
41
  }
35
42
 
36
43
  /**
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
42
- * - If it returns "undefined", it will no longer be called in this scope.
44
+ * @hook Editor.EventManager
45
+ * @type {SunEditor.Hook.Event.Active}
43
46
  */
44
47
  active(element, target) {
45
- let formatTitle = this.lang.formats;
48
+ let formatTitle = this.$.lang.formats;
46
49
  const targetText = target.querySelector('.se-txt');
47
50
 
48
51
  if (!element) {
49
52
  dom.utils.changeTxt(targetText, formatTitle);
50
- } else if (this.format.isLine(element)) {
53
+ } else if (this.$.format.isLine(element)) {
51
54
  const formatList = this.formatList;
52
55
  const nodeName = element.nodeName.toLowerCase();
53
56
  const className = (element.className.match(/(\s|^)__se__format__[^\s]+/) || [''])[0].trim();
@@ -71,9 +74,8 @@ class FormatBlock extends EditorInjector {
71
74
  }
72
75
 
73
76
  /**
74
- * @editorMethod Modules.Dropdown
75
- * @description Executes the method that is called when a plugin's dropdown menu is opened.
76
- * @param {HTMLElement} target Line element at the current cursor position
77
+ * @override
78
+ * @type {PluginDropdown['on']}
77
79
  */
78
80
  on(target) {
79
81
  const formatList = this.formatList;
@@ -95,38 +97,41 @@ class FormatBlock extends EditorInjector {
95
97
  }
96
98
 
97
99
  /**
98
- * @editorMethod Editor.core
99
- * @description Executes the main execution method of the plugin.
100
- * - Called when an item in the "dropdown" menu is clicked.
101
- * @param {HTMLElement} target - The plugin's toolbar button element
100
+ * @override
101
+ * @type {PluginDropdown['action']}
102
102
  */
103
103
  action(target) {
104
104
  // "line"|"br-line"|"block"
105
105
  const command = target.getAttribute('data-command');
106
106
  const tag = target.firstElementChild;
107
107
  if (command === 'block') {
108
- this.format.applyBlock(tag);
108
+ this.$.format.applyBlock(tag);
109
109
  } else if (command === 'br-line') {
110
- this.format.setBrLine(tag);
110
+ this.$.format.setBrLine(tag);
111
111
  } else {
112
- this.format.setLine(tag);
112
+ this.$.format.setLine(tag);
113
113
  }
114
114
 
115
- this.menu.dropdownOff();
115
+ this.$.menu.dropdownOff();
116
116
  }
117
117
 
118
118
  /**
119
- * @description Create a header tag, call by "shortcut" class
120
- * - (e.g. shortcuts._h1: ['c+s+49+$~formatBlock.applyHeaderByShortcut', ''])
121
- * @param {__se__PluginShortcutInfo} params - Information of the "shortcut" plugin
119
+ * @description Create a header tag, call by `shortcut` class
120
+ * - (e.g. shortcuts._h1: ['c+s+49+$~blockStyle.applyHeaderByShortcut', ''])
121
+ * @param {SunEditor.HookParams.Shortcut} params - Information of the `shortcut` plugin
122
122
  */
123
123
  applyHeaderByShortcut({ keyCode }) {
124
124
  const headerNum = keyCode.match(/\d+$/)?.[0];
125
125
  const tag = dom.utils.createElement(`H${headerNum}`);
126
- this.format.setLine(tag);
126
+ this.$.format.setLine(tag);
127
127
  }
128
128
  }
129
129
 
130
+ /**
131
+ * @param {SunEditor.Deps} $ - Kernel dependencies
132
+ * @param {Array<string|BlockStyleItem>} [items] - Block style items
133
+ * @returns {HTMLElement}
134
+ */
130
135
  function CreateHTML({ lang }, items) {
131
136
  const defaultFormats = ['p', 'blockquote', 'pre', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'];
132
137
  const formatList = !items || items.length === 0 ? defaultFormats : items;
@@ -138,7 +143,8 @@ function CreateHTML({ lang }, items) {
138
143
  for (let i = 0, len = formatList.length, format, tagName, command, name, h, attrs, className; i < len; i++) {
139
144
  format = formatList[i];
140
145
 
141
- if (typeof format === 'string' && defaultFormats.includes(format)) {
146
+ if (typeof format === 'string') {
147
+ if (!defaultFormats.includes(format)) continue;
142
148
  tagName = format.toLowerCase();
143
149
  command = tagName === 'blockquote' ? 'block' : tagName === 'pre' ? 'br-line' : 'line';
144
150
  h = /^h/.test(tagName) ? tagName.match(/\d+/)[0] : '';
@@ -167,4 +173,4 @@ function CreateHTML({ lang }, items) {
167
173
  return dom.utils.createElement('DIV', { class: 'se-dropdown se-list-layer se-list-format' }, list);
168
174
  }
169
175
 
170
- export default FormatBlock;
176
+ export default BlockStyle;
@@ -1,49 +1,50 @@
1
- import EditorInjector from '../../editorInjector';
1
+ import { PluginDropdown } from '../../interfaces';
2
2
  import { dom } from '../../helper';
3
3
 
4
+ /**
5
+ * @typedef {Object} FontPluginOptions
6
+ * @property {Array<string>} [items] - Font list
7
+ */
8
+
4
9
  /**
5
10
  * @class
6
11
  * @description Text font plugin
7
12
  */
8
- class Font extends EditorInjector {
13
+ class Font extends PluginDropdown {
9
14
  static key = 'font';
10
- static type = 'dropdown';
11
15
  static className = 'se-btn-select se-btn-tool-font';
12
16
 
17
+ #defaultValue;
18
+
13
19
  /**
14
20
  * @constructor
15
- * @param {__se__EditorCore} editor - The root editor instance
16
- * @param {Object} pluginOptions
17
- * @param {Array<string>} pluginOptions.items - Font list
18
- * @param {number} pluginOptions.splitNum - Number of colors per line
19
- * @param {boolean} pluginOptions.disableHEXInput - Disable HEX input
21
+ * @param {SunEditor.Kernel} editor - The core kernel
22
+ * @param {FontPluginOptions} pluginOptions - plugin options
20
23
  */
21
24
  constructor(editor, pluginOptions) {
22
25
  super(editor);
23
26
  // plugin basic properties
24
- this.title = this.lang.font;
25
- this.inner = '<span class="se-txt">' + this.lang.font + '</span>' + this.icons.arrow_down;
27
+ this.title = this.$.lang.font;
28
+ this.inner = '<span class="se-txt">' + this.$.lang.font + '</span>' + this.$.icons.arrow_down;
26
29
 
27
30
  // create HTML
28
31
  const fontList = pluginOptions.items || ['Arial', 'Comic Sans MS', 'Courier New', 'Impact', 'Georgia', 'tahoma', 'Trebuchet MS', 'Verdana'];
29
- const menu = CreateHTML(editor, fontList);
32
+ const menu = CreateHTML(this.$, fontList);
30
33
 
31
34
  // members
32
35
  this.currentFont = '';
33
36
  this.fontList = menu.querySelectorAll('ul li button');
34
37
  this.fontArray = fontList;
35
38
 
39
+ this.#defaultValue = /** @type {HTMLSpanElement} */ (menu.querySelector('.se-sub-list span'));
40
+
36
41
  // init
37
- this.menu.initDropdownTarget(Font, menu);
42
+ this.$.menu.initDropdownTarget(Font, menu);
38
43
  }
39
44
 
40
45
  /**
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
46
- * - If it returns "undefined", it will no longer be called in this scope.
46
+ * @hook Editor.EventManager
47
+ * @type {SunEditor.Hook.Event.Active}
47
48
  */
48
49
  active(element, target) {
49
50
  const targetText = target.querySelector('.se-txt');
@@ -51,15 +52,15 @@ class Font extends EditorInjector {
51
52
 
52
53
  let fontFamily = '';
53
54
  if (!element) {
54
- const font = this.status.hasFocus ? this.editor.frameContext.get('wwComputedStyle').fontFamily : this.lang.font;
55
+ const font = this.$.store.get('hasFocus') ? this.$.frameContext.get('wwComputedStyle').fontFamily : this.$.lang.font;
55
56
  dom.utils.changeTxt(targetText, font);
56
- dom.utils.changeTxt(tooltip, this.status.hasFocus ? this.lang.font + (font ? ' (' + font + ')' : '') : font);
57
- } else if (this.format.isLine(element)) {
57
+ dom.utils.changeTxt(tooltip, this.$.store.get('hasFocus') ? this.$.lang.font + (font ? ' (' + font + ')' : '') : font);
58
+ } else if (this.$.format.isLine(element)) {
58
59
  return undefined;
59
60
  } else if ((fontFamily = dom.utils.getStyle(element, 'fontFamily'))) {
60
61
  const selectFont = fontFamily.replace(/["']/g, '');
61
62
  dom.utils.changeTxt(targetText, selectFont);
62
- dom.utils.changeTxt(tooltip, this.lang.font + ' (' + selectFont + ')');
63
+ dom.utils.changeTxt(tooltip, this.$.lang.font + ' (' + selectFont + ')');
63
64
  return true;
64
65
  }
65
66
 
@@ -67,33 +68,38 @@ class Font extends EditorInjector {
67
68
  }
68
69
 
69
70
  /**
70
- * @editorMethod Modules.Dropdown
71
- * @description Executes the method that is called when a plugin's dropdown menu is opened.
72
- * @param {HTMLElement} target Line element at the current cursor position
71
+ * @override
72
+ * @type {PluginDropdown['on']}
73
73
  */
74
74
  on(target) {
75
75
  const fontList = this.fontList;
76
76
  const currentFont = target.querySelector('.se-txt').textContent;
77
77
 
78
78
  if (currentFont !== this.currentFont) {
79
+ let found = false;
79
80
  for (let i = 0, len = fontList.length; i < len; i++) {
80
81
  if (currentFont === (fontList[i].getAttribute('data-command') || '').replace(/'|"/g, '')) {
81
82
  dom.utils.addClass(fontList[i], 'active');
83
+ found = true;
82
84
  } else {
83
85
  dom.utils.removeClass(fontList[i], 'active');
84
86
  }
85
87
  }
86
88
 
87
89
  this.currentFont = currentFont;
90
+
91
+ if (!found) {
92
+ this.#defaultValue.textContent = currentFont;
93
+ this.#defaultValue.style.display = 'block';
94
+ } else {
95
+ this.#defaultValue.style.display = 'none';
96
+ }
88
97
  }
89
98
  }
90
99
 
91
100
  /**
92
- * @editorMethod Editor.core
93
- * @description Executes the main execution method of the plugin.
94
- * - Called when an item in the "dropdown" menu is clicked.
95
- * @param {HTMLElement} target - The plugin's toolbar button element
96
- * @returns {Promise<void>}
101
+ * @override
102
+ * @type {PluginDropdown['action']}
97
103
  */
98
104
  async action(target) {
99
105
  let value = target.getAttribute('data-command');
@@ -103,25 +109,33 @@ class Font extends EditorInjector {
103
109
  }
104
110
 
105
111
  // before event
106
- if ((await this.triggerEvent('onFontActionBefore', { value })) === false) return;
112
+ if ((await this.$.eventManager.triggerEvent('onFontActionBefore', { value })) === false) return;
107
113
 
108
114
  const newNode = dom.utils.createElement('SPAN', { style: 'font-family: ' + value + ';' });
109
- this.format.applyInlineElement(newNode, { stylesToModify: ['font-family'], nodesToRemove: null, strictRemove: null });
115
+ this.$.inline.apply(newNode, { stylesToModify: ['font-family'], nodesToRemove: null, strictRemove: null });
110
116
  } else {
111
- this.format.applyInlineElement(null, { stylesToModify: ['font-family'], nodesToRemove: ['span'], strictRemove: true });
117
+ this.$.inline.apply(null, { stylesToModify: ['font-family'], nodesToRemove: ['span'], strictRemove: true });
112
118
  }
113
119
 
114
- this.menu.dropdownOff();
120
+ this.$.menu.dropdownOff();
115
121
  }
116
122
  }
117
123
 
124
+ /**
125
+ * @param {SunEditor.Deps} $ - Kernel dependencies
126
+ * @param {string[]} fontList - Font name list
127
+ * @returns {HTMLElement}
128
+ */
118
129
  function CreateHTML({ lang }, fontList) {
119
130
  let list = /*html*/ `
120
131
  <div class="se-list-inner">
121
132
  <ul class="se-list-basic">
122
133
  <li>
123
- <button type="button" class="se-btn se-btn-list default_value" data-command="" title="${lang.default}" aria-label="${lang.default}">(${lang.default})</button>
124
- </li>`;
134
+ <button type="button" class="se-btn se-btn-list default_value" data-command="" title="${lang.default}" aria-label="${lang.default}">
135
+ ${lang.default}
136
+ </button>
137
+ </li>
138
+ <li class="se-btn-list se-sub-list"><span></span></li>`;
125
139
 
126
140
  for (let i = 0, len = fontList.length, font, text; i < len; i++) {
127
141
  font = fontList[i];
@@ -1,53 +1,52 @@
1
- import EditorInjector from '../../editorInjector';
2
- import ColorPicker from '../../modules/ColorPicker';
1
+ import { PluginDropdownFree } from '../../interfaces';
2
+ import { ColorPicker } from '../../modules/contract';
3
3
  import { dom } from '../../helper';
4
4
 
5
+ /**
6
+ * @typedef {Object} FontColorPluginOptions
7
+ * @property {Array<string|{value: string, name: string}>} [items] - Color list
8
+ * @property {number} [splitNum] - Number of colors per line
9
+ * @property {boolean} [disableHEXInput] - Disable HEX input
10
+ */
11
+
5
12
  /**
6
13
  * @class
7
14
  * @description Font color plugin
8
15
  */
9
- class FontColor extends EditorInjector {
16
+ class FontColor extends PluginDropdownFree {
10
17
  static key = 'fontColor';
11
- static type = 'dropdown-free';
12
18
  static className = '';
13
19
 
14
20
  /**
15
21
  * @constructor
16
- * @param {__se__EditorCore} editor - The root editor instance
17
- * @param {Object} pluginOptions
18
- * @param {Array<string|{value: string, name: string}>} pluginOptions.items - Color list
19
- * @param {number} pluginOptions.splitNum - Number of colors per line
20
- * @param {boolean} pluginOptions.disableHEXInput - Disable HEX input
22
+ * @param {SunEditor.Kernel} editor - The core kernel
23
+ * @param {FontColorPluginOptions} pluginOptions - Plugin options
21
24
  */
22
25
  constructor(editor, pluginOptions) {
23
26
  super(editor);
24
27
  // plugin basic properties
25
- this.title = this.lang.fontColor;
28
+ this.title = this.$.lang.fontColor;
26
29
  this.icon = 'font_color';
27
30
 
28
31
  // create HTML
29
32
  const menu = CreateHTML();
30
33
 
31
34
  // members
32
- this.colorPicker = new ColorPicker(this, 'color', {
35
+ this.colorPicker = new ColorPicker(this, this.$, 'color', {
36
+ form: menu,
33
37
  colorList: pluginOptions.items,
34
38
  splitNum: pluginOptions.splitNum,
35
39
  disableHEXInput: pluginOptions.disableHEXInput,
36
- hueSliderOptions: { controllerOptions: { parents: [menu], isOutsideForm: true } }
40
+ hueSliderOptions: { controllerOptions: { isOutsideForm: true } },
37
41
  });
38
42
 
39
- // itit
40
- menu.appendChild(this.colorPicker.target);
41
- this.menu.initDropdownTarget(FontColor, menu);
43
+ // init
44
+ this.$.menu.initDropdownTarget(FontColor, menu);
42
45
  }
43
46
 
44
47
  /**
45
- * @editorMethod Editor.EventManager
46
- * @description Executes the method that is called whenever the cursor position changes.
47
- * @param {?HTMLElement=} element - Node element where the cursor is currently located
48
- * @param {?HTMLElement=} target - The plugin's toolbar button element
49
- * @returns {boolean} - Whether the plugin is active
50
- * - If it returns "undefined", it will no longer be called in this scope.
48
+ * @hook Editor.EventManager
49
+ * @type {SunEditor.Hook.Event.Active}
51
50
  */
52
51
  active(element, target) {
53
52
  /** @type {HTMLElement} */
@@ -57,7 +56,7 @@ class FontColor extends EditorInjector {
57
56
  let color = '';
58
57
  if (!element) {
59
58
  colorHelper.style.color = color;
60
- } else if (this.format.isLine(element)) {
59
+ } else if (this.$.format.isLine(element)) {
61
60
  return undefined;
62
61
  } else if ((color = dom.utils.getStyle(element, 'color'))) {
63
62
  colorHelper.style.color = color;
@@ -68,40 +67,40 @@ class FontColor extends EditorInjector {
68
67
  }
69
68
 
70
69
  /**
71
- * @editorMethod Modules.Dropdown
72
- * @description Executes the method that is called when a plugin's dropdown menu is opened.
73
- * @param {HTMLElement} target Line element at the current cursor position
70
+ * @override
71
+ * @type {PluginDropdownFree['on']}
74
72
  */
75
73
  on(target) {
76
- this.colorPicker.init(this.selection.getNode(), target, (current) => this.format.isLine(current));
74
+ this.colorPicker.init(this.$.selection.getNode(), target, (current) => this.$.format.isLine(current));
77
75
  }
78
76
 
79
77
  /**
80
- * @editorMethod Modules.Dropdown
81
- * @Override Executes the method that is called when a plugin's dropdown menu is closed.
78
+ * @override
79
+ * @type {PluginDropdownFree['off']}
82
80
  */
83
81
  off() {
84
82
  this.colorPicker.hueSliderClose();
85
83
  }
86
84
 
87
85
  /**
88
- * @editorMethod Modules.ColorPicker
89
- * @description Executes the method called when a button of "ColorPicker" module is clicked.
90
- * - This plugin is by applying the "ColorPicker" module globally to the "dropdown" menu, the default "action" method is not called.
91
- * @param {string} color - Color code (hex)
86
+ * @hook Modules.ColorPicker
87
+ * @type {SunEditor.Hook.ColorPicker.Action}
92
88
  */
93
89
  colorPickerAction(color) {
94
90
  if (color) {
95
91
  const newNode = dom.utils.createElement('SPAN', { style: 'color: ' + color + ';' });
96
- this.format.applyInlineElement(newNode, { stylesToModify: ['color'], nodesToRemove: null, strictRemove: null });
92
+ this.$.inline.apply(newNode, { stylesToModify: ['color'], nodesToRemove: null, strictRemove: null });
97
93
  } else {
98
- this.format.applyInlineElement(null, { stylesToModify: ['color'], nodesToRemove: ['span'], strictRemove: true });
94
+ this.$.inline.apply(null, { stylesToModify: ['color'], nodesToRemove: ['span'], strictRemove: true });
99
95
  }
100
96
 
101
- this.menu.dropdownOff();
97
+ this.$.menu.dropdownOff();
102
98
  }
103
99
  }
104
100
 
101
+ /**
102
+ * @returns {HTMLElement}
103
+ */
105
104
  function CreateHTML() {
106
105
  return dom.utils.createElement('DIV', { class: 'se-dropdown se-list-layer' }, null);
107
106
  }
@@ -1,16 +1,20 @@
1
- import EditorInjector from '../../editorInjector';
1
+ import { PluginDropdown } from '../../interfaces';
2
2
  import { dom } from '../../helper';
3
3
 
4
+ /**
5
+ * @typedef {Object} HRPluginOptions
6
+ * @property {Array<{name: string, class: string, style?: string}>} [items] - HR list
7
+ */
8
+
4
9
  /**
5
10
  * @class
6
11
  * @description HR Plugin
7
12
  */
8
- class HR extends EditorInjector {
13
+ class HR extends PluginDropdown {
9
14
  static key = 'hr';
10
- static type = 'dropdown';
11
15
  static className = '';
16
+
12
17
  /**
13
- * @this {HR}
14
18
  * @param {HTMLElement} node - The node to check.
15
19
  * @returns {HTMLElement|null} Returns a node if the node is a valid component.
16
20
  */
@@ -20,111 +24,112 @@ class HR extends EditorInjector {
20
24
 
21
25
  /**
22
26
  * @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
27
+ * @param {SunEditor.Kernel} editor - The core kernel
28
+ * @param {HRPluginOptions} pluginOptions - Plugin options
26
29
  */
27
30
  constructor(editor, pluginOptions) {
28
31
  // plugin bisic properties
29
32
  super(editor);
30
- this.title = this.lang.horizontalLine;
33
+ this.title = this.$.lang.horizontalLine;
31
34
  this.icon = 'horizontal_line';
32
35
 
33
36
  // create HTML
34
- const HRMenus = CreateHTML(editor, pluginOptions.items);
37
+ const HRMenus = CreateHTML(this.$, pluginOptions.items);
35
38
 
36
39
  // members
37
40
  this.list = HRMenus.querySelectorAll('button');
38
41
 
39
42
  // init
40
- this.menu.initDropdownTarget(HR, HRMenus);
43
+ this.$.menu.initDropdownTarget(HR, HRMenus);
41
44
  }
42
45
 
43
46
  /**
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
+ * @hook Editor.Component
48
+ * @type {SunEditor.Hook.Component.Select}
47
49
  */
48
- select(target) {
50
+ componentSelect(target) {
49
51
  dom.utils.addClass(target, 'on');
50
52
  }
51
53
 
52
54
  /**
53
- * @editorMethod Editor.Component
54
- * @description Called when a container is deselected.
55
- * @param {HTMLElement} element Target element
55
+ * @hook Editor.Component
56
+ * @type {SunEditor.Hook.Component.Deselect}
56
57
  */
57
- deselect(element) {
58
+ componentDeselect(element) {
58
59
  dom.utils.removeClass(element, 'on');
59
60
  }
60
61
 
61
62
  /**
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
63
+ * @hook Editor.Component
64
+ * @type {SunEditor.Hook.Component.Destroy}
65
65
  */
66
- destroy(target) {
66
+ componentDestroy(target) {
67
67
  if (!target) return;
68
68
 
69
69
  const focusEl = target.previousElementSibling || target.nextElementSibling;
70
70
  dom.utils.removeItem(target);
71
71
 
72
72
  // focus
73
- this.editor.focusEdge(focusEl);
74
- this.history.push(false);
73
+ this.$.focusManager.focusEdge(focusEl);
74
+ this.$.history.push(false);
75
75
  }
76
76
 
77
77
  /**
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
78
+ * @hook Editor.Core
79
+ * @type {SunEditor.Hook.Core.Shortcut}
82
80
  */
83
- action(target) {
84
- const hr = this.submit(target.firstElementChild.className);
85
- const line = this.format.addLine(hr);
86
- this.selection.setRange(line, 1, line, 1);
87
- this.menu.dropdownOff();
81
+ shortcut({ line, range }) {
82
+ const newLine = this.$.nodeTransform.split(range.endContainer, range.endOffset, 0);
83
+ this.submit('__se__solid');
84
+ dom.utils.removeItem(line);
85
+ this.$.selection.setRange(newLine, 0, newLine, 0);
88
86
  }
89
87
 
90
88
  /**
91
- * @editorMethod Editor.core
92
- * @description Executes methods called by shortcut keys.
93
- * @param {__se__PluginShortcutInfo} params - Information of the "shortcut" plugin
89
+ * @override
90
+ * @type {PluginDropdown['action']}
94
91
  */
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);
92
+ action(target) {
93
+ const hr = this.submit(target.firstElementChild.className);
94
+ const line = this.$.format.addLine(hr);
95
+ this.$.selection.setRange(line, 1, line, 1);
96
+ this.$.menu.dropdownOff();
100
97
  }
101
98
 
102
99
  /**
103
- * @description Add a hr element
100
+ * @description Add a `hr` element
104
101
  * @param {string} className HR class name
105
102
  */
106
103
  submit(className) {
107
104
  const hr = dom.utils.createElement('hr', { class: className });
108
- this.editor.focus();
109
- this.component.insert(hr, { skipCharCount: false, skipSelection: true, skipHistory: false });
105
+ this.$.focusManager.focus();
106
+ this.$.component.insert(hr, { insertBehavior: 'line' });
110
107
  return hr;
111
108
  }
112
109
  }
113
110
 
111
+ /**
112
+ * @param {SunEditor.Deps} $ - Kernel dependencies
113
+ * @param {Array<{name: string, class: string, style?: string}>} [HRItems] - HR style items
114
+ * @returns {HTMLElement}
115
+ */
114
116
  function CreateHTML({ lang }, HRItems) {
115
117
  const items = HRItems || [
116
118
  {
117
119
  name: lang.hr_solid,
118
- class: '__se__solid'
120
+ class: '__se__solid',
121
+ style: null,
119
122
  },
120
123
  {
121
124
  name: lang.hr_dashed,
122
- class: '__se__dashed'
125
+ class: '__se__dashed',
126
+ style: null,
123
127
  },
124
128
  {
125
129
  name: lang.hr_dotted,
126
- class: '__se__dotted'
127
- }
130
+ class: '__se__dotted',
131
+ style: null,
132
+ },
128
133
  ];
129
134
 
130
135
  let list = '';
@@ -140,12 +145,12 @@ function CreateHTML({ lang }, HRItems) {
140
145
  return dom.utils.createElement(
141
146
  'DIV',
142
147
  {
143
- class: 'se-dropdown se-list-layer se-list-line'
148
+ class: 'se-dropdown se-list-layer se-list-line',
144
149
  },
145
150
  /*html*/ `
146
151
  <div class="se-list-inner">
147
152
  <ul class="se-list-basic">${list}</ul>
148
- </div>`
153
+ </div>`,
149
154
  );
150
155
  }
151
156