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.
- package/README.md +65 -57
- package/dist/suneditor-contents.min.css +1 -0
- package/dist/suneditor.min.css +1 -1
- package/dist/suneditor.min.js +1 -1
- package/package.json +110 -61
- package/src/assets/design/color.css +36 -17
- package/src/assets/design/size.css +2 -0
- package/src/assets/icons/defaultIcons.js +17 -2
- package/src/assets/suneditor-contents.css +51 -16
- package/src/assets/suneditor.css +116 -43
- package/src/core/config/contextProvider.js +288 -0
- package/src/core/config/eventManager.js +188 -0
- package/src/core/config/instanceCheck.js +59 -0
- package/src/core/config/optionProvider.js +452 -0
- package/src/core/editor.js +166 -1637
- package/src/core/event/actions/index.js +229 -0
- package/src/core/event/effects/common.registry.js +74 -0
- package/src/core/event/effects/keydown.registry.js +573 -0
- package/src/core/event/effects/ruleHelpers.js +148 -0
- package/src/core/event/eventOrchestrator.js +944 -0
- package/src/core/event/executor.js +27 -0
- package/src/core/{base/eventHandlers → event/handlers}/handler_toolbar.js +27 -28
- package/src/core/{base/eventHandlers → event/handlers}/handler_ww_clipboard.js +10 -8
- package/src/core/{base/eventHandlers → event/handlers}/handler_ww_dragDrop.js +22 -23
- package/src/core/event/handlers/handler_ww_input.js +75 -0
- package/src/core/event/handlers/handler_ww_key.js +228 -0
- package/src/core/event/handlers/handler_ww_mouse.js +166 -0
- package/src/core/event/ports.js +211 -0
- package/src/core/event/reducers/keydown.reducer.js +97 -0
- package/src/core/event/rules/keydown.rule.arrow.js +63 -0
- package/src/core/event/rules/keydown.rule.backspace.js +208 -0
- package/src/core/event/rules/keydown.rule.delete.js +132 -0
- package/src/core/event/rules/keydown.rule.enter.js +150 -0
- package/src/core/event/rules/keydown.rule.tab.js +35 -0
- package/src/core/event/support/defaultLineManager.js +136 -0
- package/src/core/event/support/selectionState.js +204 -0
- package/src/core/kernel/coreKernel.js +320 -0
- package/src/core/kernel/kernelInjector.js +19 -0
- package/src/core/kernel/store.js +173 -0
- package/src/core/{class → logic/dom}/char.js +42 -45
- package/src/core/logic/dom/format.js +1075 -0
- package/src/core/{class → logic/dom}/html.js +743 -624
- package/src/core/logic/dom/inline.js +1847 -0
- package/src/core/logic/dom/listFormat.js +601 -0
- package/src/core/{class → logic/dom}/nodeTransform.js +92 -72
- package/src/core/{class → logic/dom}/offset.js +254 -317
- package/src/core/logic/dom/selection.js +754 -0
- package/src/core/logic/panel/menu.js +389 -0
- package/src/core/logic/panel/toolbar.js +449 -0
- package/src/core/logic/panel/viewer.js +761 -0
- package/src/core/logic/shell/_commandExecutor.js +380 -0
- package/src/core/logic/shell/commandDispatcher.js +241 -0
- package/src/core/logic/shell/component.js +970 -0
- package/src/core/logic/shell/focusManager.js +110 -0
- package/src/core/{base → logic/shell}/history.js +110 -60
- package/src/core/logic/shell/pluginManager.js +363 -0
- package/src/core/logic/shell/shortcuts.js +130 -0
- package/src/core/logic/shell/ui.js +904 -0
- package/src/core/schema/context.js +66 -0
- package/src/core/schema/frameContext.js +160 -0
- package/src/core/schema/options.js +628 -0
- package/src/core/section/constructor.js +194 -500
- package/src/core/section/documentType.js +297 -222
- package/src/events.js +808 -543
- package/src/helper/clipboard.js +27 -16
- package/src/helper/converter.js +100 -78
- package/src/helper/dom/domCheck.js +56 -30
- package/src/helper/dom/domQuery.js +159 -89
- package/src/helper/dom/domUtils.js +114 -49
- package/src/helper/dom/index.js +5 -1
- package/src/helper/env.js +26 -26
- package/src/helper/index.js +1 -1
- package/src/helper/keyCodeMap.js +25 -28
- package/src/helper/numbers.js +4 -8
- package/src/helper/unicode.js +4 -8
- package/src/hooks/base.js +307 -0
- package/src/hooks/params.js +130 -0
- package/src/interfaces/contracts.js +227 -0
- package/src/interfaces/index.js +7 -0
- package/src/interfaces/plugins.js +239 -0
- package/src/langs/ckb.js +4 -4
- package/src/langs/cs.js +4 -4
- package/src/langs/da.js +4 -4
- package/src/langs/de.js +4 -4
- package/src/langs/en.js +4 -4
- package/src/langs/es.js +4 -4
- package/src/langs/fa.js +4 -4
- package/src/langs/fr.js +4 -4
- package/src/langs/he.js +4 -4
- package/src/langs/hu.js +4 -4
- package/src/langs/it.js +4 -4
- package/src/langs/ja.js +4 -4
- package/src/langs/km.js +4 -4
- package/src/langs/ko.js +4 -4
- package/src/langs/lv.js +4 -4
- package/src/langs/nl.js +4 -4
- package/src/langs/pl.js +4 -4
- package/src/langs/pt_br.js +13 -13
- package/src/langs/ro.js +4 -4
- package/src/langs/ru.js +4 -4
- package/src/langs/se.js +4 -4
- package/src/langs/tr.js +4 -4
- package/src/langs/uk.js +4 -4
- package/src/langs/ur.js +4 -4
- package/src/langs/zh_cn.js +4 -4
- package/src/modules/{Browser.js → contract/Browser.js} +119 -128
- package/src/modules/{ColorPicker.js → contract/ColorPicker.js} +132 -142
- package/src/modules/contract/Controller.js +589 -0
- package/src/modules/{Figure.js → contract/Figure.js} +591 -411
- package/src/modules/{HueSlider.js → contract/HueSlider.js} +125 -86
- package/src/modules/contract/Modal.js +357 -0
- package/src/modules/contract/index.js +9 -0
- package/src/modules/manager/ApiManager.js +197 -0
- package/src/modules/{FileManager.js → manager/FileManager.js} +128 -160
- package/src/modules/manager/index.js +5 -0
- package/src/modules/{ModalAnchorEditor.js → ui/ModalAnchorEditor.js} +108 -138
- package/src/modules/{SelectMenu.js → ui/SelectMenu.js} +119 -120
- package/src/modules/{_DragHandle.js → ui/_DragHandle.js} +1 -1
- package/src/modules/ui/index.js +6 -0
- package/src/plugins/browser/audioGallery.js +23 -26
- package/src/plugins/browser/fileBrowser.js +25 -28
- package/src/plugins/browser/fileGallery.js +20 -23
- package/src/plugins/browser/imageGallery.js +24 -23
- package/src/plugins/browser/videoGallery.js +27 -29
- package/src/plugins/command/blockquote.js +11 -17
- package/src/plugins/command/exportPDF.js +26 -26
- package/src/plugins/command/fileUpload.js +138 -133
- package/src/plugins/command/list_bulleted.js +48 -44
- package/src/plugins/command/list_numbered.js +48 -44
- package/src/plugins/dropdown/align.js +64 -50
- package/src/plugins/dropdown/backgroundColor.js +34 -35
- package/src/plugins/dropdown/{formatBlock.js → blockStyle.js} +43 -37
- package/src/plugins/dropdown/font.js +50 -36
- package/src/plugins/dropdown/fontColor.js +34 -35
- package/src/plugins/dropdown/hr.js +55 -50
- package/src/plugins/dropdown/layout.js +20 -15
- package/src/plugins/dropdown/lineHeight.js +46 -30
- package/src/plugins/dropdown/list.js +32 -33
- package/src/plugins/dropdown/paragraphStyle.js +40 -34
- package/src/plugins/dropdown/table/index.js +915 -0
- package/src/plugins/dropdown/table/render/table.html.js +308 -0
- package/src/plugins/dropdown/table/render/table.menu.js +121 -0
- package/src/plugins/dropdown/table/services/table.cell.js +465 -0
- package/src/plugins/dropdown/table/services/table.clipboard.js +414 -0
- package/src/plugins/dropdown/table/services/table.grid.js +504 -0
- package/src/plugins/dropdown/table/services/table.resize.js +463 -0
- package/src/plugins/dropdown/table/services/table.selection.js +466 -0
- package/src/plugins/dropdown/table/services/table.style.js +844 -0
- package/src/plugins/dropdown/table/shared/table.constants.js +109 -0
- package/src/plugins/dropdown/table/shared/table.utils.js +219 -0
- package/src/plugins/dropdown/template.js +20 -15
- package/src/plugins/dropdown/textStyle.js +28 -22
- package/src/plugins/field/mention.js +54 -49
- package/src/plugins/index.js +5 -5
- package/src/plugins/input/fontSize.js +100 -97
- package/src/plugins/input/pageNavigator.js +13 -10
- package/src/plugins/modal/audio.js +208 -219
- package/src/plugins/modal/drawing.js +99 -104
- package/src/plugins/modal/embed.js +323 -312
- package/src/plugins/modal/image/index.js +942 -0
- package/src/plugins/modal/image/render/image.html.js +150 -0
- package/src/plugins/modal/image/services/image.size.js +198 -0
- package/src/plugins/modal/image/services/image.upload.js +216 -0
- package/src/plugins/modal/image/shared/image.constants.js +20 -0
- package/src/plugins/modal/link.js +74 -54
- package/src/plugins/modal/math.js +126 -119
- package/src/plugins/modal/video/index.js +858 -0
- package/src/plugins/modal/video/render/video.html.js +131 -0
- package/src/plugins/modal/video/services/video.size.js +281 -0
- package/src/plugins/modal/video/services/video.upload.js +92 -0
- package/src/plugins/popup/anchor.js +57 -49
- package/src/suneditor.js +73 -61
- package/src/themes/cobalt.css +155 -0
- package/src/themes/dark.css +143 -120
- package/src/typedef.js +214 -63
- package/types/assets/icons/defaultIcons.d.ts +8 -0
- package/types/assets/suneditor-contents.css.d.ts +1 -0
- package/types/assets/suneditor.css.d.ts +1 -0
- package/types/core/config/contextProvider.d.ts +148 -0
- package/types/core/config/eventManager.d.ts +68 -0
- package/types/core/config/instanceCheck.d.ts +33 -0
- package/types/core/config/optionProvider.d.ts +147 -0
- package/types/core/editor.d.ts +27 -586
- package/types/core/event/actions/index.d.ts +50 -0
- package/types/core/event/effects/common.registry.d.ts +56 -0
- package/types/core/event/effects/keydown.registry.d.ts +80 -0
- package/types/core/event/effects/ruleHelpers.d.ts +36 -0
- package/types/core/event/eventOrchestrator.d.ts +191 -0
- package/types/core/event/executor.d.ts +13 -0
- package/types/core/event/handlers/handler_toolbar.d.ts +38 -0
- package/types/core/event/handlers/handler_ww_clipboard.d.ts +36 -0
- package/types/core/event/handlers/handler_ww_dragDrop.d.ts +26 -0
- package/types/core/event/handlers/handler_ww_input.d.ts +38 -0
- package/types/core/event/handlers/handler_ww_key.d.ts +40 -0
- package/types/core/event/handlers/handler_ww_mouse.d.ts +47 -0
- package/types/core/event/ports.d.ts +256 -0
- package/types/core/event/reducers/keydown.reducer.d.ts +84 -0
- package/types/core/event/rules/keydown.rule.arrow.d.ts +19 -0
- package/types/core/event/rules/keydown.rule.backspace.d.ts +18 -0
- package/types/core/event/rules/keydown.rule.delete.d.ts +18 -0
- package/types/core/event/rules/keydown.rule.enter.d.ts +18 -0
- package/types/core/event/rules/keydown.rule.tab.d.ts +18 -0
- package/types/core/event/support/defaultLineManager.d.ts +22 -0
- package/types/core/event/support/selectionState.d.ts +29 -0
- package/types/core/kernel/coreKernel.d.ts +219 -0
- package/types/core/kernel/kernelInjector.d.ts +16 -0
- package/types/core/kernel/store.d.ts +170 -0
- package/types/core/logic/dom/char.d.ts +46 -0
- package/types/core/logic/dom/format.d.ts +234 -0
- package/types/core/logic/dom/html.d.ts +290 -0
- package/types/core/logic/dom/inline.d.ts +93 -0
- package/types/core/logic/dom/listFormat.d.ts +101 -0
- package/types/core/logic/dom/nodeTransform.d.ts +110 -0
- package/types/core/logic/dom/offset.d.ts +335 -0
- package/types/core/logic/dom/selection.d.ts +165 -0
- package/types/core/logic/panel/menu.d.ts +93 -0
- package/types/core/logic/panel/toolbar.d.ts +128 -0
- package/types/core/logic/panel/viewer.d.ts +89 -0
- package/types/core/logic/shell/_commandExecutor.d.ts +18 -0
- package/types/core/logic/shell/commandDispatcher.d.ts +65 -0
- package/types/core/logic/shell/component.d.ts +182 -0
- package/types/core/logic/shell/focusManager.d.ts +31 -0
- package/types/core/{base → logic/shell}/history.d.ts +13 -12
- package/types/core/logic/shell/pluginManager.d.ts +115 -0
- package/types/core/logic/shell/shortcuts.d.ts +131 -0
- package/types/core/logic/shell/ui.d.ts +261 -0
- package/types/core/schema/context.d.ts +104 -0
- package/types/core/schema/frameContext.d.ts +320 -0
- package/types/core/schema/options.d.ts +1241 -0
- package/types/core/section/constructor.d.ts +117 -652
- package/types/core/section/documentType.d.ts +43 -61
- package/types/events.d.ts +796 -65
- package/types/helper/clipboard.d.ts +5 -4
- package/types/helper/converter.d.ts +55 -43
- package/types/helper/dom/domCheck.d.ts +27 -19
- package/types/helper/dom/domQuery.d.ts +76 -57
- package/types/helper/dom/domUtils.d.ts +62 -39
- package/types/helper/dom/index.d.ts +87 -1
- package/types/helper/env.d.ts +16 -13
- package/types/helper/index.d.ts +8 -2
- package/types/helper/keyCodeMap.d.ts +24 -23
- package/types/helper/numbers.d.ts +4 -6
- package/types/helper/unicode.d.ts +4 -3
- package/types/hooks/base.d.ts +239 -0
- package/types/hooks/params.d.ts +65 -0
- package/types/index.d.ts +20 -117
- package/types/interfaces/contracts.d.ts +183 -0
- package/types/interfaces/index.d.ts +3 -0
- package/types/interfaces/plugins.d.ts +168 -0
- package/types/langs/_Lang.d.ts +2 -2
- package/types/langs/index.d.ts +2 -2
- package/types/modules/contract/Browser.d.ts +262 -0
- package/types/modules/contract/ColorPicker.d.ts +99 -0
- package/types/modules/contract/Controller.d.ts +204 -0
- package/types/modules/contract/Figure.d.ts +529 -0
- package/types/modules/{HueSlider.d.ts → contract/HueSlider.d.ts} +39 -28
- package/types/modules/contract/Modal.d.ts +62 -0
- package/types/modules/contract/index.d.ts +7 -0
- package/types/modules/manager/ApiManager.d.ts +106 -0
- package/types/modules/manager/FileManager.d.ts +124 -0
- package/types/modules/manager/index.d.ts +3 -0
- package/types/modules/ui/ModalAnchorEditor.d.ts +152 -0
- package/types/modules/ui/SelectMenu.d.ts +107 -0
- package/types/modules/{_DragHandle.d.ts → ui/_DragHandle.d.ts} +1 -0
- package/types/modules/ui/index.d.ts +4 -0
- package/types/plugins/browser/audioGallery.d.ts +33 -41
- package/types/plugins/browser/fileBrowser.d.ts +42 -50
- package/types/plugins/browser/fileGallery.d.ts +33 -41
- package/types/plugins/browser/imageGallery.d.ts +30 -37
- package/types/plugins/browser/videoGallery.d.ts +33 -41
- package/types/plugins/command/blockquote.d.ts +4 -21
- package/types/plugins/command/exportPDF.d.ts +23 -33
- package/types/plugins/command/fileUpload.d.ts +80 -100
- package/types/plugins/command/list_bulleted.d.ts +9 -35
- package/types/plugins/command/list_numbered.d.ts +9 -35
- package/types/plugins/dropdown/align.d.ts +23 -46
- package/types/plugins/dropdown/backgroundColor.d.ts +35 -53
- package/types/plugins/dropdown/blockStyle.d.ts +45 -0
- package/types/plugins/dropdown/font.d.ts +18 -41
- package/types/plugins/dropdown/fontColor.d.ts +35 -53
- package/types/plugins/dropdown/hr.d.ts +26 -52
- package/types/plugins/dropdown/layout.d.ts +19 -25
- package/types/plugins/dropdown/lineHeight.d.ts +21 -39
- package/types/plugins/dropdown/list.d.ts +6 -34
- package/types/plugins/dropdown/paragraphStyle.d.ts +34 -45
- package/types/plugins/dropdown/table/index.d.ts +158 -0
- package/types/plugins/dropdown/table/render/table.html.d.ts +71 -0
- package/types/plugins/dropdown/table/render/table.menu.d.ts +59 -0
- package/types/plugins/dropdown/table/services/table.cell.d.ts +76 -0
- package/types/plugins/dropdown/table/services/table.clipboard.d.ts +26 -0
- package/types/plugins/dropdown/table/services/table.grid.d.ts +77 -0
- package/types/plugins/dropdown/table/services/table.resize.d.ts +72 -0
- package/types/plugins/dropdown/table/services/table.selection.d.ts +59 -0
- package/types/plugins/dropdown/table/services/table.style.d.ts +162 -0
- package/types/plugins/dropdown/table/shared/table.constants.d.ts +134 -0
- package/types/plugins/dropdown/table/shared/table.utils.d.ts +91 -0
- package/types/plugins/dropdown/template.d.ts +19 -25
- package/types/plugins/dropdown/textStyle.d.ts +23 -30
- package/types/plugins/field/mention.d.ts +66 -72
- package/types/plugins/index.d.ts +41 -40
- package/types/plugins/input/fontSize.d.ts +57 -96
- package/types/plugins/input/pageNavigator.d.ts +5 -8
- package/types/plugins/modal/audio.d.ts +60 -153
- package/types/plugins/modal/drawing.d.ts +16 -118
- package/types/plugins/modal/embed.d.ts +46 -166
- package/types/plugins/modal/image/index.d.ts +281 -0
- package/types/plugins/modal/image/render/image.html.d.ts +45 -0
- package/types/plugins/modal/image/services/image.size.d.ts +55 -0
- package/types/plugins/modal/image/services/image.upload.d.ts +24 -0
- package/types/plugins/modal/image/shared/image.constants.d.ts +17 -0
- package/types/plugins/modal/link.d.ts +46 -66
- package/types/plugins/modal/math.d.ts +17 -86
- package/types/plugins/modal/{video.d.ts → video/index.d.ts} +89 -221
- package/types/plugins/modal/video/render/video.html.d.ts +37 -0
- package/types/plugins/modal/video/services/video.size.d.ts +74 -0
- package/types/plugins/modal/video/services/video.upload.d.ts +19 -0
- package/types/plugins/popup/anchor.d.ts +8 -38
- package/types/suneditor.d.ts +55 -24
- package/types/typedef.d.ts +344 -228
- package/CONTRIBUTING.md +0 -186
- package/src/core/base/eventHandlers/handler_ww_key_input.js +0 -1200
- package/src/core/base/eventHandlers/handler_ww_mouse.js +0 -194
- package/src/core/base/eventManager.js +0 -1523
- package/src/core/class/component.js +0 -856
- package/src/core/class/format.js +0 -3433
- package/src/core/class/menu.js +0 -346
- package/src/core/class/selection.js +0 -610
- package/src/core/class/shortcuts.js +0 -98
- package/src/core/class/toolbar.js +0 -431
- package/src/core/class/ui.js +0 -424
- package/src/core/class/viewer.js +0 -750
- package/src/core/section/actives.js +0 -266
- package/src/core/section/context.js +0 -102
- package/src/editorInjector/_classes.js +0 -36
- package/src/editorInjector/_core.js +0 -87
- package/src/editorInjector/index.js +0 -73
- package/src/modules/ApiManager.js +0 -191
- package/src/modules/Controller.js +0 -474
- package/src/modules/Modal.js +0 -346
- package/src/modules/index.js +0 -14
- package/src/plugins/dropdown/table.js +0 -4034
- package/src/plugins/modal/image.js +0 -1376
- package/src/plugins/modal/video.js +0 -1226
- package/types/core/base/eventHandlers/handler_toolbar.d.ts +0 -41
- package/types/core/base/eventHandlers/handler_ww_clipboard.d.ts +0 -40
- package/types/core/base/eventHandlers/handler_ww_dragDrop.d.ts +0 -35
- package/types/core/base/eventHandlers/handler_ww_key_input.d.ts +0 -45
- package/types/core/base/eventHandlers/handler_ww_mouse.d.ts +0 -39
- package/types/core/base/eventManager.d.ts +0 -401
- package/types/core/class/char.d.ts +0 -61
- package/types/core/class/component.d.ts +0 -213
- package/types/core/class/format.d.ts +0 -623
- package/types/core/class/html.d.ts +0 -430
- package/types/core/class/menu.d.ts +0 -126
- package/types/core/class/nodeTransform.d.ts +0 -93
- package/types/core/class/offset.d.ts +0 -522
- package/types/core/class/selection.d.ts +0 -188
- package/types/core/class/shortcuts.d.ts +0 -142
- package/types/core/class/toolbar.d.ts +0 -189
- package/types/core/class/ui.d.ts +0 -164
- package/types/core/class/viewer.d.ts +0 -140
- package/types/core/section/actives.d.ts +0 -46
- package/types/core/section/context.d.ts +0 -45
- package/types/editorInjector/_classes.d.ts +0 -41
- package/types/editorInjector/_core.d.ts +0 -87
- package/types/editorInjector/index.d.ts +0 -69
- package/types/modules/ApiManager.d.ts +0 -125
- package/types/modules/Browser.d.ts +0 -326
- package/types/modules/ColorPicker.d.ts +0 -135
- package/types/modules/Controller.d.ts +0 -251
- package/types/modules/Figure.d.ts +0 -517
- package/types/modules/FileManager.d.ts +0 -202
- package/types/modules/Modal.d.ts +0 -111
- package/types/modules/ModalAnchorEditor.d.ts +0 -236
- package/types/modules/SelectMenu.d.ts +0 -194
- package/types/modules/index.d.ts +0 -26
- package/types/plugins/dropdown/formatBlock.d.ts +0 -55
- package/types/plugins/dropdown/table.d.ts +0 -627
- package/types/plugins/modal/image.d.ts +0 -451
- /package/{LICENSE → LICENSE.txt} +0 -0
|
@@ -1,35 +1,48 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { dom, env, keyCodeMap } from '../helper';
|
|
1
|
+
import { dom, env, keyCodeMap } from '../../helper';
|
|
3
2
|
|
|
3
|
+
const { _w } = env;
|
|
4
4
|
const MENU_MIN_HEIGHT = 38;
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* @typedef {Object} SelectMenuParams
|
|
8
|
-
* @property {string} position Position of the select menu, specified as "[left|right]-[middle|top|bottom]" or "[top|bottom]-[center|left|right]"
|
|
9
|
-
* @property {boolean} [checkList=false] Flag to determine if the checklist is enabled (true or false)
|
|
10
|
-
* @property {"rtl" | "ltr"} [dir="ltr"] Optional text direction: "rtl" for right-to-left, "ltr" for left-to-right
|
|
8
|
+
* @property {string} position Position of the select menu, specified as `"[left|right]-[middle|top|bottom]"` or `"[top|bottom]-[center|left|right]"`
|
|
9
|
+
* @property {boolean} [checkList=false] Flag to determine if the checklist is enabled (`true` or `false`)
|
|
10
|
+
* @property {"rtl" | "ltr"} [dir="ltr"] Optional text direction: `"rtl"` for right-to-left, `"ltr"` for left-to-right
|
|
11
11
|
* @property {number} [splitNum=0] Optional split number for horizontal positioning; defines how many items per row
|
|
12
|
-
* @property {() => void
|
|
13
|
-
* @property {() => void
|
|
12
|
+
* @property {() => void} [openMethod] Optional method to call when the menu is opened
|
|
13
|
+
* @property {() => void} [closeMethod] Optional method to call when the menu is closed
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
17
|
* @class
|
|
18
18
|
* @description Creates a select menu
|
|
19
19
|
*/
|
|
20
|
-
class SelectMenu
|
|
20
|
+
class SelectMenu {
|
|
21
|
+
#$;
|
|
22
|
+
|
|
23
|
+
#dirPosition;
|
|
24
|
+
#dirSubPosition;
|
|
25
|
+
#textDirDiff;
|
|
26
|
+
#eventHandlers;
|
|
27
|
+
#globalEventHandlers;
|
|
28
|
+
|
|
29
|
+
#refer = null;
|
|
30
|
+
#keydownTarget = null;
|
|
31
|
+
#selectMethod = null;
|
|
32
|
+
#bindClose_key = null;
|
|
33
|
+
#bindClose_mousedown = null;
|
|
34
|
+
#bindClose_click = null;
|
|
35
|
+
#events = null;
|
|
36
|
+
|
|
21
37
|
/**
|
|
22
38
|
* @constructor
|
|
23
|
-
* @param {
|
|
24
|
-
* @param {SelectMenuParams} params
|
|
39
|
+
* @param {SunEditor.Deps} $ Kernel dependencies
|
|
40
|
+
* @param {SelectMenuParams} params SelectMenu options
|
|
25
41
|
*/
|
|
26
|
-
constructor(
|
|
27
|
-
|
|
28
|
-
super(inst.editor);
|
|
42
|
+
constructor($, params) {
|
|
43
|
+
this.#$ = $;
|
|
29
44
|
|
|
30
45
|
// members
|
|
31
|
-
this.kink = inst.constructor.key || inst.constructor.name;
|
|
32
|
-
this.inst = inst;
|
|
33
46
|
const positionItems = params.position.split('-');
|
|
34
47
|
this.form = null;
|
|
35
48
|
this.items = [];
|
|
@@ -42,47 +55,41 @@ class SelectMenu extends CoreInjector {
|
|
|
42
55
|
this.checkList = !!params.checkList;
|
|
43
56
|
this.position = positionItems[0];
|
|
44
57
|
this.subPosition = positionItems[1];
|
|
45
|
-
this._dirPosition = /^(left|right)$/.test(this.position) ? (this.position === 'left' ? 'right' : 'left') : this.position;
|
|
46
|
-
this._dirSubPosition = /^(left|right)$/.test(this.subPosition) ? (this.subPosition === 'left' ? 'right' : 'left') : this.subPosition;
|
|
47
|
-
this._textDirDiff = params.dir === 'ltr' ? false : params.dir === 'rtl' ? true : null;
|
|
48
58
|
this.splitNum = params.splitNum || 0;
|
|
49
59
|
this.horizontal = !!this.splitNum;
|
|
50
60
|
this.openMethod = params.openMethod;
|
|
51
61
|
this.closeMethod = params.closeMethod;
|
|
52
|
-
|
|
53
|
-
this
|
|
54
|
-
this
|
|
55
|
-
this
|
|
56
|
-
|
|
57
|
-
this
|
|
58
|
-
this._closeSignal = false;
|
|
59
|
-
this.__events = null;
|
|
60
|
-
this.__eventHandlers = {
|
|
62
|
+
|
|
63
|
+
this.#dirPosition = /^(left|right)$/.test(this.position) ? (this.position === 'left' ? 'right' : 'left') : this.position;
|
|
64
|
+
this.#dirSubPosition = /^(left|right)$/.test(this.subPosition) ? (this.subPosition === 'left' ? 'right' : 'left') : this.subPosition;
|
|
65
|
+
this.#textDirDiff = params.dir === 'ltr' ? false : params.dir === 'rtl' ? true : null;
|
|
66
|
+
|
|
67
|
+
this.#eventHandlers = {
|
|
61
68
|
mousedown: this.#OnMousedown_list.bind(this),
|
|
62
69
|
mousemove: this.#OnMouseMove_list.bind(this),
|
|
63
70
|
click: this.#OnClick_list.bind(this),
|
|
64
|
-
keydown: this.#OnKeyDown_refer.bind(this)
|
|
71
|
+
keydown: this.#OnKeyDown_refer.bind(this),
|
|
65
72
|
};
|
|
66
|
-
this
|
|
73
|
+
this.#globalEventHandlers = { keydown: this.#CloseListener_key.bind(this), mousedown: this.#CloseListener_mousedown.bind(this), click: this.#CloseListener_click.bind(this) };
|
|
67
74
|
}
|
|
68
75
|
|
|
69
76
|
/**
|
|
70
77
|
* @description Creates the select menu items.
|
|
71
|
-
* @param {Array<string>|
|
|
72
|
-
* @param {Array<string>|
|
|
78
|
+
* @param {Array<string>|SunEditor.NodeCollection} items - Command list of selectable items.
|
|
79
|
+
* @param {Array<string>|SunEditor.NodeCollection} [menus] - Optional list of menu display elements; defaults to `items`.
|
|
73
80
|
*/
|
|
74
81
|
create(items, menus) {
|
|
75
82
|
this.form.firstElementChild.innerHTML = '';
|
|
76
|
-
menus
|
|
83
|
+
menus ||= items;
|
|
77
84
|
let html = '';
|
|
78
85
|
for (let i = 0, len = menus.length; i < len; i++) {
|
|
79
86
|
if (i > 0 && i % this.splitNum === 0) {
|
|
80
|
-
this
|
|
87
|
+
this.#createFormat(html);
|
|
81
88
|
html = '';
|
|
82
89
|
}
|
|
83
90
|
html += `<li class="se-select-item" data-index="${i}">${typeof menus[i] === 'string' ? menus[i] : /** @type {HTMLElement} */ (menus[i]).outerHTML}</li>`;
|
|
84
91
|
}
|
|
85
|
-
this
|
|
92
|
+
this.#createFormat(html);
|
|
86
93
|
|
|
87
94
|
this.items = /** @type {Array<string|Node>} */ (items);
|
|
88
95
|
this.menus = Array.from(this.form.querySelectorAll('li'));
|
|
@@ -95,36 +102,37 @@ class SelectMenu extends CoreInjector {
|
|
|
95
102
|
* @param {(command: string) => void} selectMethod - The function to execute when an item is selected.
|
|
96
103
|
* @param {{class?: string, style?: string}} [attr={}] - Additional attributes for the select menu container.
|
|
97
104
|
*/
|
|
98
|
-
on(referElement, selectMethod, attr) {
|
|
99
|
-
|
|
100
|
-
this
|
|
101
|
-
this
|
|
102
|
-
this._selectMethod = selectMethod;
|
|
105
|
+
on(referElement, selectMethod, attr = {}) {
|
|
106
|
+
this.#refer = /** @type {HTMLElement} */ (referElement);
|
|
107
|
+
this.#keydownTarget = dom.check.isInputElement(referElement) ? referElement : this.#$.frameContext.get('_ww');
|
|
108
|
+
this.#selectMethod = selectMethod;
|
|
103
109
|
this.form = dom.utils.createElement(
|
|
104
110
|
'DIV',
|
|
105
111
|
{
|
|
106
112
|
class: 'se-select-menu' + (attr.class ? ' ' + attr.class : ''),
|
|
107
|
-
style: attr.style || ''
|
|
113
|
+
style: attr.style || '',
|
|
108
114
|
},
|
|
109
|
-
'<div class="se-list-inner"></div>'
|
|
115
|
+
'<div class="se-list-inner"></div>',
|
|
110
116
|
);
|
|
111
117
|
referElement.parentNode.insertBefore(this.form, referElement);
|
|
112
118
|
}
|
|
113
119
|
|
|
114
120
|
/**
|
|
115
121
|
* @description Select menu open
|
|
116
|
-
* @param {?string
|
|
117
|
-
* @param {?string
|
|
122
|
+
* @param {?string} [position] `"[left|right]-[middle|top|bottom] | [top|bottom]-[center|left|right]"`
|
|
123
|
+
* @param {?string} [onItemQuerySelector] The querySelector string of the menu to be activated
|
|
118
124
|
*/
|
|
119
125
|
open(position, onItemQuerySelector) {
|
|
120
|
-
this.
|
|
121
|
-
|
|
122
|
-
this.
|
|
123
|
-
|
|
126
|
+
this.#$.ui.selectMenuOn = true;
|
|
127
|
+
|
|
128
|
+
this.openMethod?.();
|
|
129
|
+
|
|
130
|
+
this.#addEvents();
|
|
131
|
+
this.#addGlobalEvent();
|
|
124
132
|
const positionItems = position ? position.split('-') : [];
|
|
125
|
-
const mainPosition = positionItems[0] || (this
|
|
126
|
-
const subPosition = positionItems[1] || (this
|
|
127
|
-
this
|
|
133
|
+
const mainPosition = positionItems[0] || (this.#textDirDiff !== null && this.#textDirDiff !== this.#$.options.get('_rtl') ? this.#dirPosition : this.position);
|
|
134
|
+
const subPosition = positionItems[1] || (this.#textDirDiff !== null && this.#textDirDiff !== this.#$.options.get('_rtl') ? this.#dirSubPosition : this.subPosition);
|
|
135
|
+
this.#setPosition(mainPosition, subPosition, onItemQuerySelector);
|
|
128
136
|
this.isOpen = true;
|
|
129
137
|
}
|
|
130
138
|
|
|
@@ -132,12 +140,13 @@ class SelectMenu extends CoreInjector {
|
|
|
132
140
|
* @description Select menu close
|
|
133
141
|
*/
|
|
134
142
|
close() {
|
|
135
|
-
this.
|
|
136
|
-
dom.utils.removeClass(this
|
|
137
|
-
this
|
|
138
|
-
|
|
143
|
+
this.#$.ui.selectMenuOn = false;
|
|
144
|
+
dom.utils.removeClass(this.#refer, 'on');
|
|
145
|
+
this.#init();
|
|
146
|
+
this.form?.removeAttribute('style');
|
|
139
147
|
this.isOpen = false;
|
|
140
|
-
|
|
148
|
+
|
|
149
|
+
this.closeMethod?.();
|
|
141
150
|
}
|
|
142
151
|
|
|
143
152
|
/**
|
|
@@ -154,25 +163,23 @@ class SelectMenu extends CoreInjector {
|
|
|
154
163
|
* @param {number} index Item index
|
|
155
164
|
*/
|
|
156
165
|
setItem(index) {
|
|
157
|
-
this
|
|
166
|
+
this.#selectItem(index);
|
|
158
167
|
}
|
|
159
168
|
|
|
160
169
|
/**
|
|
161
|
-
* @private
|
|
162
170
|
* @description Appends a formatted list of items to the menu.
|
|
163
171
|
* @param {string} html - The HTML string representing the menu items.
|
|
164
172
|
*/
|
|
165
|
-
|
|
173
|
+
#createFormat(html) {
|
|
166
174
|
this.form.firstElementChild.innerHTML += `<ul class="se-list-basic se-list-checked${this.horizontal ? ' se-list-horizontal' : ''}">${html}</ul>`;
|
|
167
175
|
}
|
|
168
176
|
|
|
169
177
|
/**
|
|
170
|
-
* @private
|
|
171
178
|
* @description Resets the menu state and removes event listeners.
|
|
172
179
|
*/
|
|
173
|
-
|
|
174
|
-
this
|
|
175
|
-
this
|
|
180
|
+
#init() {
|
|
181
|
+
this.#removeEvents();
|
|
182
|
+
this.#removeGlobalEvent();
|
|
176
183
|
this.index = -1;
|
|
177
184
|
this.item = null;
|
|
178
185
|
if (this._onItem) {
|
|
@@ -182,24 +189,22 @@ class SelectMenu extends CoreInjector {
|
|
|
182
189
|
}
|
|
183
190
|
|
|
184
191
|
/**
|
|
185
|
-
* @private
|
|
186
192
|
* @description Moves the selection up or down by a specified number of items.
|
|
187
193
|
* @param {number} num - The number of items to move (negative for up, positive for down).
|
|
188
194
|
*/
|
|
189
|
-
|
|
195
|
+
#moveItem(num) {
|
|
190
196
|
num = this.index + num;
|
|
191
197
|
const len = this.menuLen;
|
|
192
198
|
const selectIndex = (this.index = num >= len ? 0 : num < 0 ? len - 1 : num);
|
|
193
199
|
|
|
194
|
-
this
|
|
200
|
+
this.#selectItem(selectIndex);
|
|
195
201
|
}
|
|
196
202
|
|
|
197
203
|
/**
|
|
198
|
-
* @private
|
|
199
204
|
* @description Highlights and selects an item by index.
|
|
200
205
|
* @param {number} selectIndex - The index of the item to select.
|
|
201
206
|
*/
|
|
202
|
-
|
|
207
|
+
#selectItem(selectIndex) {
|
|
203
208
|
dom.utils.removeClass(this.form, 'se-select-menu-mouse-move');
|
|
204
209
|
|
|
205
210
|
const len = this.menuLen;
|
|
@@ -216,17 +221,16 @@ class SelectMenu extends CoreInjector {
|
|
|
216
221
|
}
|
|
217
222
|
|
|
218
223
|
/**
|
|
219
|
-
* @private
|
|
220
224
|
* @description Sets the position of the select menu relative to the reference element.
|
|
221
|
-
* @param {string} position Menu position ("left"
|
|
222
|
-
* @param {string} subPosition Sub position ("middle"
|
|
225
|
+
* @param {string} position Menu position (`"left"`|`"right"`) | (`"top"`|`"bottom"`)
|
|
226
|
+
* @param {string} subPosition Sub position (`"middle"`|`"top"`|`"bottom"`) | (`"center"`|`"left"`|`"right"`)
|
|
223
227
|
* @param {string} [onItemQuerySelector] - A query selector string to highlight a specific item.
|
|
224
228
|
* @param {boolean} [_re=false] - Whether this is a retry after adjusting the position.
|
|
225
229
|
*/
|
|
226
|
-
|
|
230
|
+
#setPosition(position, subPosition, onItemQuerySelector, _re) {
|
|
227
231
|
const originP = position;
|
|
228
232
|
const form = this.form;
|
|
229
|
-
const target = this
|
|
233
|
+
const target = this.#refer;
|
|
230
234
|
form.style.visibility = 'hidden';
|
|
231
235
|
form.style.display = 'block';
|
|
232
236
|
dom.utils.removeClass(form, 'se-select-menu-scroll');
|
|
@@ -250,11 +254,11 @@ class SelectMenu extends CoreInjector {
|
|
|
250
254
|
}
|
|
251
255
|
|
|
252
256
|
// set top position
|
|
253
|
-
const globalTarget = this
|
|
257
|
+
const globalTarget = this.#$.offset.get(target);
|
|
254
258
|
const targetOffsetTop = target.offsetTop;
|
|
255
259
|
const targetGlobalTop = globalTarget.top;
|
|
256
260
|
const targetHeight = target.offsetHeight;
|
|
257
|
-
const wbottom = dom.utils.getClientSize().h - (targetGlobalTop -
|
|
261
|
+
const wbottom = dom.utils.getClientSize().h - (targetGlobalTop - _w.scrollY + targetHeight);
|
|
258
262
|
const sideAddH = side ? targetHeight : 0;
|
|
259
263
|
let overH = 10000;
|
|
260
264
|
switch (position) {
|
|
@@ -268,14 +272,14 @@ class SelectMenu extends CoreInjector {
|
|
|
268
272
|
form.style.top = t + 'px';
|
|
269
273
|
}
|
|
270
274
|
// over bottom
|
|
271
|
-
let formT = this
|
|
275
|
+
let formT = this.#$.offset.getGlobal(form).top;
|
|
272
276
|
const modH = h - (targetGlobalTop - formT) - wbottom - targetHeight;
|
|
273
277
|
if (modH > 0) {
|
|
274
278
|
t -= modH + 4;
|
|
275
279
|
form.style.top = t + 'px';
|
|
276
280
|
}
|
|
277
281
|
// over height
|
|
278
|
-
formT = this
|
|
282
|
+
formT = this.#$.offset.getGlobal(form).top;
|
|
279
283
|
if (formT < 0) {
|
|
280
284
|
h += formT - 4;
|
|
281
285
|
t -= formT - 4;
|
|
@@ -308,7 +312,7 @@ class SelectMenu extends CoreInjector {
|
|
|
308
312
|
}
|
|
309
313
|
|
|
310
314
|
if (overH < MENU_MIN_HEIGHT && !_re && position !== 'middle') {
|
|
311
|
-
this
|
|
315
|
+
this.#setPosition(position === 'top' ? 'bottom' : 'top', subPosition, onItemQuerySelector, true);
|
|
312
316
|
return;
|
|
313
317
|
}
|
|
314
318
|
|
|
@@ -327,27 +331,27 @@ class SelectMenu extends CoreInjector {
|
|
|
327
331
|
}
|
|
328
332
|
|
|
329
333
|
form.style.left = l + 'px';
|
|
330
|
-
const fl = this
|
|
334
|
+
const fl = this.#$.offset.getGlobal(form).left;
|
|
331
335
|
let overW = 0;
|
|
332
336
|
switch (side + '-' + (side ? originP : subPosition)) {
|
|
333
337
|
case 'true-left':
|
|
334
|
-
overW = globalTarget.left -
|
|
338
|
+
overW = globalTarget.left - _w.scrollX + fl;
|
|
335
339
|
if (overW < 0) l = l = targetL + targetW + 1;
|
|
336
340
|
break;
|
|
337
341
|
case 'true-right':
|
|
338
|
-
overW =
|
|
342
|
+
overW = _w.innerWidth - (fl + formW);
|
|
339
343
|
if (overW < 0) l = targetL - formW - 1;
|
|
340
344
|
break;
|
|
341
345
|
case 'false-center': {
|
|
342
|
-
overW =
|
|
346
|
+
overW = _w.innerWidth - (fl + formW);
|
|
343
347
|
if (overW < 0) l += overW - 4;
|
|
344
348
|
form.style.left = l + 'px';
|
|
345
|
-
const centerfl = this
|
|
349
|
+
const centerfl = this.#$.offset.getGlobal(form).left;
|
|
346
350
|
if (centerfl < 0) l -= centerfl - 4;
|
|
347
351
|
break;
|
|
348
352
|
}
|
|
349
353
|
case 'false-left':
|
|
350
|
-
overW =
|
|
354
|
+
overW = _w.innerWidth - (globalTarget.left - _w.scrollX + formW);
|
|
351
355
|
if (overW < 0) l += overW - 4;
|
|
352
356
|
break;
|
|
353
357
|
case 'false-right':
|
|
@@ -369,59 +373,54 @@ class SelectMenu extends CoreInjector {
|
|
|
369
373
|
}
|
|
370
374
|
|
|
371
375
|
/**
|
|
372
|
-
* @private
|
|
373
376
|
* @description Selects an item and triggers the callback function.
|
|
374
377
|
* @param {number} index - The index of the item to select.
|
|
375
378
|
*/
|
|
376
|
-
|
|
379
|
+
#select(index) {
|
|
377
380
|
if (this.checkList) dom.utils.toggleClass(this.menus[index], 'se-checked');
|
|
378
|
-
this
|
|
381
|
+
this.#selectMethod(this.getItem(index));
|
|
379
382
|
}
|
|
380
383
|
|
|
381
384
|
/**
|
|
382
|
-
* @private
|
|
383
385
|
* @description Adds event listeners for menu interactions.
|
|
384
386
|
*/
|
|
385
|
-
|
|
386
|
-
this
|
|
387
|
-
this
|
|
388
|
-
this.form.addEventListener('mousedown', this.
|
|
389
|
-
this.form.addEventListener('mousemove', this.
|
|
390
|
-
this.form.addEventListener('click', this.
|
|
391
|
-
this.
|
|
387
|
+
#addEvents() {
|
|
388
|
+
this.#removeEvents();
|
|
389
|
+
this.#events = this.#eventHandlers;
|
|
390
|
+
this.form.addEventListener('mousedown', this.#events.mousedown);
|
|
391
|
+
this.form.addEventListener('mousemove', this.#events.mousemove);
|
|
392
|
+
this.form.addEventListener('click', this.#events.click);
|
|
393
|
+
this.#keydownTarget.addEventListener('keydown', this.#events.keydown);
|
|
392
394
|
}
|
|
393
395
|
|
|
394
396
|
/**
|
|
395
|
-
* @private
|
|
396
397
|
* @description Removes event listeners for menu interactions.
|
|
397
398
|
*/
|
|
398
|
-
|
|
399
|
-
if (!this
|
|
400
|
-
this.form.removeEventListener('mousedown', this.
|
|
401
|
-
this.form.removeEventListener('mousemove', this.
|
|
402
|
-
this.form.removeEventListener('click', this.
|
|
403
|
-
this.
|
|
404
|
-
this
|
|
399
|
+
#removeEvents() {
|
|
400
|
+
if (!this.#events) return;
|
|
401
|
+
this.form.removeEventListener('mousedown', this.#events.mousedown);
|
|
402
|
+
this.form.removeEventListener('mousemove', this.#events.mousemove);
|
|
403
|
+
this.form.removeEventListener('click', this.#events.click);
|
|
404
|
+
this.#keydownTarget.removeEventListener('keydown', this.#events.keydown);
|
|
405
|
+
this.#events = null;
|
|
405
406
|
}
|
|
406
407
|
|
|
407
408
|
/**
|
|
408
|
-
* @private
|
|
409
409
|
* @description Adds global event listeners for closing the menu.
|
|
410
410
|
*/
|
|
411
|
-
|
|
412
|
-
this
|
|
413
|
-
this
|
|
414
|
-
this
|
|
411
|
+
#addGlobalEvent() {
|
|
412
|
+
this.#removeGlobalEvent();
|
|
413
|
+
this.#bindClose_key = this.#$.eventManager.addGlobalEvent('keydown', this.#globalEventHandlers.keydown, true);
|
|
414
|
+
this.#bindClose_mousedown = this.#$.eventManager.addGlobalEvent('mousedown', this.#globalEventHandlers.mousedown, true);
|
|
415
415
|
}
|
|
416
416
|
|
|
417
417
|
/**
|
|
418
|
-
* @private
|
|
419
418
|
* @description Removes global event listeners for closing the menu.
|
|
420
419
|
*/
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
420
|
+
#removeGlobalEvent() {
|
|
421
|
+
this.#bindClose_key &&= this.#$.eventManager.removeGlobalEvent(this.#bindClose_key);
|
|
422
|
+
this.#bindClose_mousedown &&= this.#$.eventManager.removeGlobalEvent(this.#bindClose_mousedown);
|
|
423
|
+
this.#bindClose_click &&= this.#$.eventManager.removeGlobalEvent(this.#bindClose_click);
|
|
425
424
|
}
|
|
426
425
|
|
|
427
426
|
/**
|
|
@@ -465,14 +464,14 @@ class SelectMenu extends CoreInjector {
|
|
|
465
464
|
if (this.index > -1) {
|
|
466
465
|
e.preventDefault();
|
|
467
466
|
e.stopPropagation();
|
|
468
|
-
this
|
|
467
|
+
this.#select(this.index);
|
|
469
468
|
} else {
|
|
470
469
|
this.close();
|
|
471
470
|
}
|
|
472
471
|
break;
|
|
473
472
|
}
|
|
474
473
|
|
|
475
|
-
if (moveIndex) this
|
|
474
|
+
if (moveIndex) this.#moveItem(moveIndex);
|
|
476
475
|
}
|
|
477
476
|
|
|
478
477
|
/**
|
|
@@ -482,7 +481,7 @@ class SelectMenu extends CoreInjector {
|
|
|
482
481
|
if (env.isGecko) {
|
|
483
482
|
const eventTarget = dom.query.getEventTarget(e);
|
|
484
483
|
const target = dom.query.getParentElement(eventTarget, '.se-select-item');
|
|
485
|
-
if (target) this
|
|
484
|
+
if (target) this.#$.eventManager._injectActiveEvent(target);
|
|
486
485
|
}
|
|
487
486
|
}
|
|
488
487
|
|
|
@@ -510,7 +509,7 @@ class SelectMenu extends CoreInjector {
|
|
|
510
509
|
}
|
|
511
510
|
|
|
512
511
|
if (!index) return;
|
|
513
|
-
this
|
|
512
|
+
this.#select(Number(index));
|
|
514
513
|
}
|
|
515
514
|
|
|
516
515
|
/**
|
|
@@ -527,10 +526,10 @@ class SelectMenu extends CoreInjector {
|
|
|
527
526
|
#CloseListener_mousedown(e) {
|
|
528
527
|
const eventTarget = dom.query.getEventTarget(e);
|
|
529
528
|
if (this.form.contains(eventTarget)) return;
|
|
530
|
-
if (e.target !== this
|
|
529
|
+
if (e.target !== this.#refer) {
|
|
531
530
|
this.close();
|
|
532
531
|
} else if (!dom.check.isInputElement(eventTarget)) {
|
|
533
|
-
this
|
|
532
|
+
this.#bindClose_click = this.#$.eventManager.addGlobalEvent('click', this.#globalEventHandlers.click, true);
|
|
534
533
|
}
|
|
535
534
|
}
|
|
536
535
|
|
|
@@ -538,8 +537,8 @@ class SelectMenu extends CoreInjector {
|
|
|
538
537
|
* @param {MouseEvent} e - Event object
|
|
539
538
|
*/
|
|
540
539
|
#CloseListener_click(e) {
|
|
541
|
-
this
|
|
542
|
-
if (e.target === this
|
|
540
|
+
this.#bindClose_click = this.#$.eventManager.removeGlobalEvent(this.#bindClose_click);
|
|
541
|
+
if (e.target === this.#refer) {
|
|
543
542
|
e.stopPropagation();
|
|
544
543
|
this.close();
|
|
545
544
|
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// UI Modules - Helper classes, no callbacks required
|
|
3
|
+
// ============================================================
|
|
4
|
+
export { default as _DragHandle } from './_DragHandle.js';
|
|
5
|
+
export { default as ModalAnchorEditor } from './ModalAnchorEditor.js';
|
|
6
|
+
export { default as SelectMenu } from './SelectMenu.js';
|
|
@@ -1,56 +1,53 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { Browser } from '../../modules';
|
|
1
|
+
import { PluginBrowser } from '../../interfaces';
|
|
2
|
+
import { Browser } from '../../modules/contract';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
* @typedef {
|
|
5
|
+
* @typedef {Object} AudioGalleryPluginOptions
|
|
6
|
+
* @property {Array<SunEditor.Module.Browser.File>} [data] - Direct data without server calls
|
|
7
|
+
* @property {string} [url] - Server request URL
|
|
8
|
+
* @property {Object<string, string>} [headers] - Server request headers
|
|
9
|
+
* @property {string|((item: SunEditor.Module.Browser.File) => string)} [thumbnail] - Default thumbnail
|
|
6
10
|
*/
|
|
7
11
|
|
|
8
12
|
/**
|
|
9
13
|
* @class
|
|
10
|
-
* @extends EditorInjector
|
|
11
14
|
* @description Audio gallery plugin
|
|
12
15
|
*/
|
|
13
|
-
class AudioGallery extends
|
|
16
|
+
class AudioGallery extends PluginBrowser {
|
|
14
17
|
static key = 'audioGallery';
|
|
15
|
-
static type = 'browser';
|
|
16
18
|
static className = '';
|
|
17
19
|
|
|
18
20
|
/**
|
|
19
21
|
* @constructor
|
|
20
|
-
* @param {
|
|
21
|
-
* @param {
|
|
22
|
-
* @param {Array<*>=} pluginOptions.data - direct data without server calls
|
|
23
|
-
* @param {string} pluginOptions.url - server request url
|
|
24
|
-
* @param {Object<string, string>=} pluginOptions.headers - server request headers
|
|
25
|
-
* @param {string|((item: BrowserFile_audioGallery) => string)} pluginOptions.thumbnail - default thumbnail
|
|
22
|
+
* @param {SunEditor.Kernel} kernel - The core kernel
|
|
23
|
+
* @param {AudioGalleryPluginOptions} pluginOptions
|
|
26
24
|
*/
|
|
27
|
-
constructor(
|
|
25
|
+
constructor(kernel, pluginOptions) {
|
|
28
26
|
// plugin bisic properties
|
|
29
|
-
super(
|
|
30
|
-
this.title = this
|
|
27
|
+
super(kernel);
|
|
28
|
+
this.title = this.$.lang.audioGallery;
|
|
31
29
|
this.icon = 'audio_gallery';
|
|
32
30
|
|
|
33
31
|
// members
|
|
34
32
|
this.onSelectfunction = null;
|
|
35
33
|
|
|
36
34
|
// modules
|
|
37
|
-
const thumbnail = typeof pluginOptions.thumbnail === 'string' ? pluginOptions.thumbnail : this
|
|
38
|
-
this.browser = new Browser(this, {
|
|
39
|
-
title: this
|
|
35
|
+
const thumbnail = typeof pluginOptions.thumbnail === 'string' ? pluginOptions.thumbnail : this.$.icons.audio_thumbnail;
|
|
36
|
+
this.browser = new Browser(this, this.$, {
|
|
37
|
+
title: this.$.lang.audioGallery,
|
|
40
38
|
data: pluginOptions.data,
|
|
41
39
|
url: pluginOptions.url,
|
|
42
40
|
headers: pluginOptions.headers,
|
|
43
41
|
selectorHandler: this.#SetItem.bind(this),
|
|
44
42
|
columnSize: 4,
|
|
45
43
|
className: 'se-audio-gallery',
|
|
46
|
-
thumbnail: typeof pluginOptions.thumbnail === 'function' ? pluginOptions.thumbnail : () => thumbnail
|
|
44
|
+
thumbnail: typeof pluginOptions.thumbnail === 'function' ? pluginOptions.thumbnail : () => thumbnail,
|
|
47
45
|
});
|
|
48
46
|
}
|
|
49
47
|
|
|
50
48
|
/**
|
|
51
|
-
* @
|
|
52
|
-
* @
|
|
53
|
-
* @param {?(targe: Node) => *=} onSelectfunction method to be executed after selecting an item in the gallery
|
|
49
|
+
* @override
|
|
50
|
+
* @type {PluginBrowser['open']}
|
|
54
51
|
*/
|
|
55
52
|
open(onSelectfunction) {
|
|
56
53
|
this.onSelectfunction = onSelectfunction;
|
|
@@ -58,8 +55,8 @@ class AudioGallery extends EditorInjector {
|
|
|
58
55
|
}
|
|
59
56
|
|
|
60
57
|
/**
|
|
61
|
-
* @
|
|
62
|
-
* @
|
|
58
|
+
* @override
|
|
59
|
+
* @type {PluginBrowser['close']}
|
|
63
60
|
*/
|
|
64
61
|
close() {
|
|
65
62
|
this.onSelectfunction = null;
|
|
@@ -74,8 +71,8 @@ class AudioGallery extends EditorInjector {
|
|
|
74
71
|
if (this.onSelectfunction) {
|
|
75
72
|
this.onSelectfunction(target);
|
|
76
73
|
} else {
|
|
77
|
-
this
|
|
78
|
-
this
|
|
74
|
+
this.$.plugins.audio.modalInit();
|
|
75
|
+
this.$.plugins.audio.submitURL(target.getAttribute('data-command'));
|
|
79
76
|
}
|
|
80
77
|
}
|
|
81
78
|
}
|