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,49 +1,49 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { PluginCommand, PluginDropdown } from '../../interfaces';
|
|
2
2
|
import { dom } from '../../helper';
|
|
3
3
|
|
|
4
|
+
void PluginDropdown;
|
|
5
|
+
|
|
4
6
|
const DEFAULT_TYPE = 'disc';
|
|
5
7
|
|
|
6
8
|
/**
|
|
7
9
|
* @class
|
|
10
|
+
* @implements {PluginDropdown}
|
|
8
11
|
* @description List bulleted plugin, Several types of lists are provided.
|
|
9
12
|
*/
|
|
10
|
-
class List_bulleted extends
|
|
13
|
+
class List_bulleted extends PluginCommand {
|
|
11
14
|
static key = 'list_bulleted';
|
|
12
|
-
static type = 'command';
|
|
13
15
|
static className = 'se-icon-flip-rtl';
|
|
14
16
|
|
|
17
|
+
#listItems;
|
|
18
|
+
|
|
15
19
|
/**
|
|
16
20
|
* @constructor
|
|
17
|
-
* @param {
|
|
21
|
+
* @param {SunEditor.Kernel} editor - The core kernel
|
|
18
22
|
*/
|
|
19
23
|
constructor(editor) {
|
|
20
24
|
// plugin bisic properties
|
|
21
25
|
super(editor);
|
|
22
|
-
this.title = this
|
|
26
|
+
this.title = this.$.lang.bulletedList;
|
|
23
27
|
this.icon = 'list_bulleted';
|
|
24
28
|
this.afterItem = dom.utils.createElement(
|
|
25
29
|
'button',
|
|
26
30
|
{ class: 'se-btn se-tooltip se-sub-arrow-btn', 'data-command': List_bulleted.key, 'data-type': 'dropdown' },
|
|
27
|
-
`${this
|
|
31
|
+
`${this.$.icons.arrow_down}<span class="se-tooltip-inner"><span class="se-tooltip-text">${this.$.lang.bulletedList}</span></span>`,
|
|
28
32
|
);
|
|
29
33
|
|
|
30
34
|
// create HTML
|
|
31
35
|
const menu = CreateHTML();
|
|
32
36
|
|
|
33
37
|
// members
|
|
34
|
-
this
|
|
38
|
+
this.#listItems = menu.querySelectorAll('li button ul');
|
|
35
39
|
|
|
36
40
|
// init
|
|
37
|
-
this
|
|
41
|
+
this.$.menu.initDropdownTarget({ key: List_bulleted.key, type: 'dropdown' }, menu);
|
|
38
42
|
}
|
|
39
43
|
|
|
40
44
|
/**
|
|
41
|
-
* @
|
|
42
|
-
* @
|
|
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.
|
|
45
|
+
* @hook Editor.EventManager
|
|
46
|
+
* @type {SunEditor.Hook.Event.Active}
|
|
47
47
|
*/
|
|
48
48
|
active(element, target) {
|
|
49
49
|
if (dom.check.isListCell(element) && /^UL$/i.test(element.parentElement.nodeName)) {
|
|
@@ -56,12 +56,29 @@ class List_bulleted extends EditorInjector {
|
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
/**
|
|
59
|
-
* @
|
|
60
|
-
* @
|
|
59
|
+
* @override
|
|
60
|
+
* @type {PluginCommand['action']}
|
|
61
|
+
*/
|
|
62
|
+
action(target) {
|
|
63
|
+
const el = this.$.format.getBlock(this.$.selection.getNode());
|
|
64
|
+
const type = target?.querySelector('ul')?.style.listStyleType;
|
|
65
|
+
|
|
66
|
+
if (dom.check.isList(el) && type) {
|
|
67
|
+
el.style.listStyleType = type;
|
|
68
|
+
} else {
|
|
69
|
+
this.submit(type);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
this.$.menu.dropdownOff();
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* @impl Dropdown
|
|
77
|
+
* @type {PluginDropdown['on']}
|
|
61
78
|
*/
|
|
62
79
|
on() {
|
|
63
|
-
const list = this
|
|
64
|
-
const el = this
|
|
80
|
+
const list = this.#listItems;
|
|
81
|
+
const el = this.$.format.getBlock(this.$.selection.getNode());
|
|
65
82
|
const type = el?.style ? el.style.listStyleType || DEFAULT_TYPE : '';
|
|
66
83
|
|
|
67
84
|
for (let i = 0, len = list.length, l; i < len; i++) {
|
|
@@ -75,28 +92,8 @@ class List_bulleted extends EditorInjector {
|
|
|
75
92
|
}
|
|
76
93
|
|
|
77
94
|
/**
|
|
78
|
-
* @
|
|
79
|
-
* @
|
|
80
|
-
* - Called when an item in the "dropdown" menu is clicked.
|
|
81
|
-
* @param {HTMLElement} target - The plugin's toolbar button element
|
|
82
|
-
*/
|
|
83
|
-
action(target) {
|
|
84
|
-
const el = this.format.getBlock(this.selection.getNode());
|
|
85
|
-
const type = target?.querySelector('ul')?.style.listStyleType;
|
|
86
|
-
|
|
87
|
-
if (dom.check.isList(el) && type) {
|
|
88
|
-
el.style.listStyleType = type;
|
|
89
|
-
} else {
|
|
90
|
-
this.submit(type);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
this.menu.dropdownOff();
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
/**
|
|
97
|
-
* @editorMethod Editor.core
|
|
98
|
-
* @description Executes methods called by shortcut keys.
|
|
99
|
-
* @param {__se__PluginShortcutInfo} params - Information of the "shortcut" plugin
|
|
95
|
+
* @hook Editor.Core
|
|
96
|
+
* @type {SunEditor.Hook.Core.Shortcut}
|
|
100
97
|
*/
|
|
101
98
|
shortcut({ range, info }) {
|
|
102
99
|
const { startContainer } = range;
|
|
@@ -112,13 +109,16 @@ class List_bulleted extends EditorInjector {
|
|
|
112
109
|
* @param {string} [type=""] List type
|
|
113
110
|
*/
|
|
114
111
|
submit(type) {
|
|
115
|
-
const range = this.
|
|
116
|
-
if (range) this
|
|
117
|
-
this.
|
|
118
|
-
this
|
|
112
|
+
const range = this.$.listFormat.apply(`ul:${type || ''}`, null, false);
|
|
113
|
+
if (range) this.$.selection.setRange(range.sc, range.so, range.ec, range.eo);
|
|
114
|
+
this.$.focusManager.focus();
|
|
115
|
+
this.$.history.push(false);
|
|
119
116
|
}
|
|
120
117
|
}
|
|
121
118
|
|
|
119
|
+
/**
|
|
120
|
+
* @returns {HTMLElement}
|
|
121
|
+
*/
|
|
122
122
|
function CreateHTML() {
|
|
123
123
|
const html = /*html*/ `
|
|
124
124
|
<div class="se-list-inner">
|
|
@@ -130,6 +130,10 @@ function CreateHTML() {
|
|
|
130
130
|
return dom.utils.createElement('DIV', { class: 'se-dropdown se-list-layer' }, html);
|
|
131
131
|
}
|
|
132
132
|
|
|
133
|
+
/**
|
|
134
|
+
* @param {string[]} types - List style types
|
|
135
|
+
* @returns {string} HTML string
|
|
136
|
+
*/
|
|
133
137
|
function _CreateLI(types) {
|
|
134
138
|
return types
|
|
135
139
|
.map((v) => {
|
|
@@ -1,49 +1,49 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { PluginCommand, PluginDropdown } from '../../interfaces';
|
|
2
2
|
import { dom } from '../../helper';
|
|
3
3
|
|
|
4
|
+
void PluginDropdown;
|
|
5
|
+
|
|
4
6
|
const DEFAULT_TYPE = 'decimal';
|
|
5
7
|
|
|
6
8
|
/**
|
|
7
9
|
* @class
|
|
10
|
+
* @implements {PluginDropdown}
|
|
8
11
|
* @description List numbered plugin, Several types of lists are provided.
|
|
9
12
|
*/
|
|
10
|
-
class List_numbered extends
|
|
13
|
+
class List_numbered extends PluginCommand {
|
|
11
14
|
static key = 'list_numbered';
|
|
12
|
-
static type = 'command';
|
|
13
15
|
static className = 'se-icon-flip-rtl';
|
|
14
16
|
|
|
17
|
+
#listItems;
|
|
18
|
+
|
|
15
19
|
/**
|
|
16
20
|
* @constructor
|
|
17
|
-
* @param {
|
|
21
|
+
* @param {SunEditor.Kernel} editor - The core kernel
|
|
18
22
|
*/
|
|
19
23
|
constructor(editor) {
|
|
20
24
|
// plugin bisic properties
|
|
21
25
|
super(editor);
|
|
22
|
-
this.title = this
|
|
26
|
+
this.title = this.$.lang.numberedList;
|
|
23
27
|
this.icon = 'list_numbered';
|
|
24
28
|
this.afterItem = dom.utils.createElement(
|
|
25
29
|
'button',
|
|
26
30
|
{ class: 'se-btn se-tooltip se-sub-arrow-btn', 'data-command': List_numbered.key, 'data-type': 'dropdown' },
|
|
27
|
-
`${this
|
|
31
|
+
`${this.$.icons.arrow_down}<span class="se-tooltip-inner"><span class="se-tooltip-text">${this.$.lang.numberedList}</span></span>`,
|
|
28
32
|
);
|
|
29
33
|
|
|
30
34
|
// create HTML
|
|
31
35
|
const menu = CreateHTML();
|
|
32
36
|
|
|
33
37
|
// members
|
|
34
|
-
this
|
|
38
|
+
this.#listItems = menu.querySelectorAll('li button ol');
|
|
35
39
|
|
|
36
40
|
// init
|
|
37
|
-
this
|
|
41
|
+
this.$.menu.initDropdownTarget({ key: List_numbered.key, type: 'dropdown' }, menu);
|
|
38
42
|
}
|
|
39
43
|
|
|
40
44
|
/**
|
|
41
|
-
* @
|
|
42
|
-
* @
|
|
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.
|
|
45
|
+
* @hook Editor.EventManager
|
|
46
|
+
* @type {SunEditor.Hook.Event.Active}
|
|
47
47
|
*/
|
|
48
48
|
active(element, target) {
|
|
49
49
|
if (dom.check.isListCell(element) && /^OL$/i.test(element.parentElement.nodeName)) {
|
|
@@ -56,12 +56,29 @@ class List_numbered extends EditorInjector {
|
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
/**
|
|
59
|
-
* @
|
|
60
|
-
* @
|
|
59
|
+
* @override
|
|
60
|
+
* @type {PluginCommand['action']}
|
|
61
|
+
*/
|
|
62
|
+
action(target) {
|
|
63
|
+
const el = this.$.format.getBlock(this.$.selection.getNode());
|
|
64
|
+
const type = target?.querySelector('ol')?.style.listStyleType;
|
|
65
|
+
|
|
66
|
+
if (dom.check.isList(el) && type) {
|
|
67
|
+
el.style.listStyleType = type;
|
|
68
|
+
} else {
|
|
69
|
+
this.submit(type);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
this.$.menu.dropdownOff();
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* @hook Dropdown
|
|
77
|
+
* @type {PluginDropdown['on']}
|
|
61
78
|
*/
|
|
62
79
|
on() {
|
|
63
|
-
const list = this
|
|
64
|
-
const el = this
|
|
80
|
+
const list = this.#listItems;
|
|
81
|
+
const el = this.$.format.getBlock(this.$.selection.getNode());
|
|
65
82
|
const type = el?.style ? el.style.listStyleType || DEFAULT_TYPE : '';
|
|
66
83
|
|
|
67
84
|
for (let i = 0, len = list.length, l; i < len; i++) {
|
|
@@ -75,28 +92,8 @@ class List_numbered extends EditorInjector {
|
|
|
75
92
|
}
|
|
76
93
|
|
|
77
94
|
/**
|
|
78
|
-
* @
|
|
79
|
-
* @
|
|
80
|
-
* - Called when an item in the "dropdown" menu is clicked.
|
|
81
|
-
* @param {HTMLElement} target - The plugin's toolbar button element
|
|
82
|
-
*/
|
|
83
|
-
action(target) {
|
|
84
|
-
const el = this.format.getBlock(this.selection.getNode());
|
|
85
|
-
const type = target?.querySelector('ol')?.style.listStyleType;
|
|
86
|
-
|
|
87
|
-
if (dom.check.isList(el) && type) {
|
|
88
|
-
el.style.listStyleType = type;
|
|
89
|
-
} else {
|
|
90
|
-
this.submit(type);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
this.menu.dropdownOff();
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
/**
|
|
97
|
-
* @editorMethod Editor.core
|
|
98
|
-
* @description Executes methods called by shortcut keys.
|
|
99
|
-
* @param {__se__PluginShortcutInfo} params - Information of the "shortcut" plugin
|
|
95
|
+
* @hook Editor.Core
|
|
96
|
+
* @type {SunEditor.Hook.Core.Shortcut}
|
|
100
97
|
*/
|
|
101
98
|
shortcut({ range, info }) {
|
|
102
99
|
const { startContainer } = range;
|
|
@@ -112,13 +109,16 @@ class List_numbered extends EditorInjector {
|
|
|
112
109
|
* @param {string} [type=""] List type
|
|
113
110
|
*/
|
|
114
111
|
submit(type) {
|
|
115
|
-
const range = this.
|
|
116
|
-
if (range) this
|
|
117
|
-
this.
|
|
118
|
-
this
|
|
112
|
+
const range = this.$.listFormat.apply(`ol:${type || ''}`, null, false);
|
|
113
|
+
if (range) this.$.selection.setRange(range.sc, range.so, range.ec, range.eo);
|
|
114
|
+
this.$.focusManager.focus();
|
|
115
|
+
this.$.history.push(false);
|
|
119
116
|
}
|
|
120
117
|
}
|
|
121
118
|
|
|
119
|
+
/**
|
|
120
|
+
* @returns {HTMLElement}
|
|
121
|
+
*/
|
|
122
122
|
function CreateHTML() {
|
|
123
123
|
const html = /*html*/ `
|
|
124
124
|
<div class="se-list-inner">
|
|
@@ -133,6 +133,10 @@ function CreateHTML() {
|
|
|
133
133
|
return dom.utils.createElement('DIV', { class: 'se-dropdown se-list-layer' }, html);
|
|
134
134
|
}
|
|
135
135
|
|
|
136
|
+
/**
|
|
137
|
+
* @param {string[]} types - List style types
|
|
138
|
+
* @returns {string} HTML string
|
|
139
|
+
*/
|
|
136
140
|
function _CreateLI(types) {
|
|
137
141
|
return types
|
|
138
142
|
.map((v) => {
|
|
@@ -1,50 +1,49 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { PluginDropdown } from '../../interfaces';
|
|
2
2
|
import { dom } from '../../helper';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* @typedef {Object} AlignPluginOptions
|
|
6
|
+
* @property {Array.<"right"|"center"|"left"|"justify">} [items] - Align items
|
|
7
|
+
*/
|
|
8
|
+
|
|
4
9
|
/**
|
|
5
10
|
* @class
|
|
6
11
|
* @description Align plugin
|
|
7
12
|
*/
|
|
8
|
-
class Align extends
|
|
13
|
+
class Align extends PluginDropdown {
|
|
9
14
|
static key = 'align';
|
|
10
|
-
static type = 'dropdown';
|
|
11
15
|
static className = '';
|
|
12
16
|
|
|
13
17
|
/**
|
|
14
|
-
* @param {
|
|
15
|
-
* @param {
|
|
16
|
-
* @param {Array.<"right"|"center"|"left"|"justify">} pluginOptions.items - Align items
|
|
18
|
+
* @param {SunEditor.Kernel} editor - The core kernel
|
|
19
|
+
* @param {AlignPluginOptions} pluginOptions - Plugin options
|
|
17
20
|
*/
|
|
18
21
|
constructor(editor, pluginOptions) {
|
|
19
22
|
super(editor);
|
|
20
|
-
this.title = this
|
|
21
|
-
this.icon = this
|
|
23
|
+
this.title = this.$.lang.align;
|
|
24
|
+
this.icon = this.$.options.get('_rtl') ? 'align_right' : 'align_left';
|
|
22
25
|
|
|
23
26
|
// create HTML
|
|
24
|
-
const menu = CreateHTML(
|
|
27
|
+
const menu = CreateHTML(this.$, pluginOptions.items);
|
|
25
28
|
const commandArea = (this._itemMenu = menu.querySelector('ul'));
|
|
26
29
|
|
|
27
30
|
// members
|
|
28
|
-
this.defaultDir =
|
|
31
|
+
this.defaultDir = '';
|
|
29
32
|
this.alignIcons = {
|
|
30
|
-
justify:
|
|
31
|
-
left:
|
|
32
|
-
right:
|
|
33
|
-
center:
|
|
33
|
+
justify: this.$.icons.align_justify,
|
|
34
|
+
left: this.$.icons.align_left,
|
|
35
|
+
right: this.$.icons.align_right,
|
|
36
|
+
center: this.$.icons.align_center,
|
|
34
37
|
};
|
|
35
38
|
this.alignList = commandArea.querySelectorAll('li button');
|
|
36
39
|
|
|
37
40
|
// init
|
|
38
|
-
this
|
|
41
|
+
this.$.menu.initDropdownTarget(Align, menu);
|
|
39
42
|
}
|
|
40
43
|
|
|
41
44
|
/**
|
|
42
|
-
* @
|
|
43
|
-
* @
|
|
44
|
-
* @param {?HTMLElement=} element - Node element where the cursor is currently located
|
|
45
|
-
* @param {?HTMLElement=} target - The plugin's toolbar button element
|
|
46
|
-
* @returns {boolean} - Whether the plugin is active
|
|
47
|
-
* - If it returns "undefined", it will no longer be called in this scope.
|
|
45
|
+
* @hook Editor.EventManager
|
|
46
|
+
* @type {SunEditor.Hook.Event.Active}
|
|
48
47
|
*/
|
|
49
48
|
active(element, target) {
|
|
50
49
|
const targetChild = target.firstElementChild;
|
|
@@ -52,8 +51,8 @@ class Align extends EditorInjector {
|
|
|
52
51
|
if (!element) {
|
|
53
52
|
dom.utils.changeElement(targetChild, this.alignIcons[this.defaultDir]);
|
|
54
53
|
target.removeAttribute('data-focus');
|
|
55
|
-
} else if (this
|
|
56
|
-
const textAlign =
|
|
54
|
+
} else if (this.$.format.isLine(element)) {
|
|
55
|
+
const textAlign = element.style.textAlign;
|
|
57
56
|
if (textAlign) {
|
|
58
57
|
dom.utils.changeElement(targetChild, this.alignIcons[textAlign] || this.alignIcons[this.defaultDir]);
|
|
59
58
|
target.setAttribute('data-focus', textAlign);
|
|
@@ -66,9 +65,8 @@ class Align extends EditorInjector {
|
|
|
66
65
|
}
|
|
67
66
|
|
|
68
67
|
/**
|
|
69
|
-
* @
|
|
70
|
-
* @
|
|
71
|
-
* @param {HTMLElement} target Line element at the current cursor position
|
|
68
|
+
* @override
|
|
69
|
+
* @type {PluginDropdown['on']}
|
|
72
70
|
*/
|
|
73
71
|
on(target) {
|
|
74
72
|
const currentAlign = target.getAttribute('data-focus') || this.defaultDir;
|
|
@@ -85,12 +83,31 @@ class Align extends EditorInjector {
|
|
|
85
83
|
}
|
|
86
84
|
|
|
87
85
|
/**
|
|
88
|
-
* @
|
|
89
|
-
* @
|
|
90
|
-
* @param {string} dir Direction ("rtl" or "ltr")
|
|
86
|
+
* @override
|
|
87
|
+
* @type {PluginDropdown['action']}
|
|
91
88
|
*/
|
|
92
|
-
|
|
93
|
-
const
|
|
89
|
+
action(target) {
|
|
90
|
+
const value = target.getAttribute('data-command');
|
|
91
|
+
if (!value) return;
|
|
92
|
+
|
|
93
|
+
const defaultDir = this.defaultDir;
|
|
94
|
+
const selectedFormsts = this.$.format.getLines();
|
|
95
|
+
for (let i = 0, len = selectedFormsts.length; i < len; i++) {
|
|
96
|
+
dom.utils.setStyle(selectedFormsts[i], 'textAlign', value === defaultDir ? '' : value);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
this.$.store.set('_lastSelectionNode', null);
|
|
100
|
+
this.$.menu.dropdownOff();
|
|
101
|
+
this.$.focusManager.focus();
|
|
102
|
+
this.$.history.push(false);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* @hook Editor.Core
|
|
107
|
+
* @type {SunEditor.Hook.Core.SetDir}
|
|
108
|
+
*/
|
|
109
|
+
setDir() {
|
|
110
|
+
const _dir = this.#findDefaultDir();
|
|
94
111
|
if (this.defaultDir === _dir) return;
|
|
95
112
|
|
|
96
113
|
this.defaultDir = _dir;
|
|
@@ -105,28 +122,25 @@ class Align extends EditorInjector {
|
|
|
105
122
|
}
|
|
106
123
|
|
|
107
124
|
/**
|
|
108
|
-
* @
|
|
109
|
-
* @
|
|
110
|
-
* - Called when an item in the "dropdown" menu is clicked.
|
|
111
|
-
* @param {HTMLElement} target - The plugin's toolbar button element
|
|
125
|
+
* @hook Editor.Core
|
|
126
|
+
* @type {SunEditor.Hook.Core.Init}
|
|
112
127
|
*/
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
const defaultDir = this.defaultDir;
|
|
118
|
-
const selectedFormsts = this.format.getLines();
|
|
119
|
-
for (let i = 0, len = selectedFormsts.length; i < len; i++) {
|
|
120
|
-
dom.utils.setStyle(selectedFormsts[i], 'textAlign', value === defaultDir ? '' : value);
|
|
121
|
-
}
|
|
128
|
+
init() {
|
|
129
|
+
this.defaultDir = this.#findDefaultDir();
|
|
130
|
+
}
|
|
122
131
|
|
|
123
|
-
|
|
124
|
-
this.
|
|
125
|
-
|
|
126
|
-
this.
|
|
132
|
+
#findDefaultDir() {
|
|
133
|
+
const align = this.$.frameContext.get('wwComputedStyle').getPropertyValue('text-align');
|
|
134
|
+
const valid = ['left', 'center', 'right', 'justify'];
|
|
135
|
+
return valid.includes(align) ? align : this.$.options.get('_rtl') ? 'right' : 'left';
|
|
127
136
|
}
|
|
128
137
|
}
|
|
129
138
|
|
|
139
|
+
/**
|
|
140
|
+
* @param {SunEditor.Deps} $ - Kernel dependencies
|
|
141
|
+
* @param {string[]} [items] - Align items list
|
|
142
|
+
* @returns {HTMLElement}
|
|
143
|
+
*/
|
|
130
144
|
function CreateHTML({ lang, icons, options }, items) {
|
|
131
145
|
const alignItems = Array.isArray(items) ? items : options.get('_rtl') ? ['right', 'center', 'left', 'justify'] : ['left', 'center', 'right', 'justify'];
|
|
132
146
|
|
|
@@ -145,12 +159,12 @@ function CreateHTML({ lang, icons, options }, items) {
|
|
|
145
159
|
return dom.utils.createElement(
|
|
146
160
|
'div',
|
|
147
161
|
{
|
|
148
|
-
class: 'se-dropdown se-list-layer se-list-align'
|
|
162
|
+
class: 'se-dropdown se-list-layer se-list-align',
|
|
149
163
|
},
|
|
150
164
|
/*html*/ `
|
|
151
165
|
<div class="se-list-inner">
|
|
152
166
|
<ul class="se-list-basic">${html}</ul>
|
|
153
|
-
</div
|
|
167
|
+
</div>`,
|
|
154
168
|
);
|
|
155
169
|
}
|
|
156
170
|
|
|
@@ -1,53 +1,52 @@
|
|
|
1
|
-
import
|
|
2
|
-
import ColorPicker from '../../modules/
|
|
1
|
+
import { PluginDropdownFree } from '../../interfaces';
|
|
2
|
+
import { ColorPicker } from '../../modules/contract';
|
|
3
3
|
import { dom } from '../../helper';
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* @typedef {Object} BackgroundColorPluginOptions
|
|
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 Text background color plugin
|
|
8
15
|
*/
|
|
9
|
-
class BackgroundColor extends
|
|
16
|
+
class BackgroundColor extends PluginDropdownFree {
|
|
10
17
|
static key = 'backgroundColor';
|
|
11
|
-
static type = 'dropdown-free';
|
|
12
18
|
static className = '';
|
|
13
19
|
|
|
14
20
|
/**
|
|
15
21
|
* @constructor
|
|
16
|
-
* @param {
|
|
17
|
-
* @param {
|
|
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 {BackgroundColorPluginOptions} pluginOptions - Plugin options
|
|
21
24
|
*/
|
|
22
25
|
constructor(editor, pluginOptions) {
|
|
23
26
|
super(editor);
|
|
24
27
|
// plugin basic properties
|
|
25
|
-
this.title = this
|
|
28
|
+
this.title = this.$.lang.backgroundColor;
|
|
26
29
|
this.icon = 'background_color';
|
|
27
30
|
|
|
28
31
|
// create HTML
|
|
29
32
|
const menu = CreateHTML();
|
|
30
33
|
|
|
31
34
|
// members
|
|
32
|
-
this.colorPicker = new ColorPicker(this, 'backgroundColor', {
|
|
35
|
+
this.colorPicker = new ColorPicker(this, this.$, 'backgroundColor', {
|
|
36
|
+
form: menu,
|
|
33
37
|
colorList: pluginOptions.items,
|
|
34
38
|
splitNum: pluginOptions.splitNum,
|
|
35
39
|
disableHEXInput: pluginOptions.disableHEXInput,
|
|
36
|
-
hueSliderOptions: { controllerOptions: {
|
|
40
|
+
hueSliderOptions: { controllerOptions: { isOutsideForm: true } },
|
|
37
41
|
});
|
|
38
42
|
|
|
39
|
-
//
|
|
40
|
-
menu.
|
|
41
|
-
this.menu.initDropdownTarget(BackgroundColor, menu);
|
|
43
|
+
// init
|
|
44
|
+
this.$.menu.initDropdownTarget(BackgroundColor, menu);
|
|
42
45
|
}
|
|
43
46
|
|
|
44
47
|
/**
|
|
45
|
-
* @
|
|
46
|
-
* @
|
|
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
|
const colorHelper = /** @type {SVGPathElement} */ (target.querySelector('path.se-svg-color-helper'));
|
|
@@ -56,7 +55,7 @@ class BackgroundColor extends EditorInjector {
|
|
|
56
55
|
let color = '';
|
|
57
56
|
if (!element) {
|
|
58
57
|
colorHelper.style.color = color;
|
|
59
|
-
} else if (this
|
|
58
|
+
} else if (this.$.format.isLine(element)) {
|
|
60
59
|
return undefined;
|
|
61
60
|
} else if ((color = dom.utils.getStyle(element, 'backgroundColor'))) {
|
|
62
61
|
colorHelper.style.color = color;
|
|
@@ -67,40 +66,40 @@ class BackgroundColor extends EditorInjector {
|
|
|
67
66
|
}
|
|
68
67
|
|
|
69
68
|
/**
|
|
70
|
-
* @
|
|
71
|
-
* @
|
|
72
|
-
* @param {HTMLElement} target Line element at the current cursor position
|
|
69
|
+
* @override
|
|
70
|
+
* @type {PluginDropdownFree['on']}
|
|
73
71
|
*/
|
|
74
72
|
on(target) {
|
|
75
|
-
this.colorPicker.init(this
|
|
73
|
+
this.colorPicker.init(this.$.selection.getNode(), target, (current) => this.$.format.isLine(current));
|
|
76
74
|
}
|
|
77
75
|
|
|
78
76
|
/**
|
|
79
|
-
* @
|
|
80
|
-
* @
|
|
77
|
+
* @override
|
|
78
|
+
* @type {PluginDropdownFree['off']}
|
|
81
79
|
*/
|
|
82
80
|
off() {
|
|
83
81
|
this.colorPicker.hueSliderClose();
|
|
84
82
|
}
|
|
85
83
|
|
|
86
84
|
/**
|
|
87
|
-
* @
|
|
88
|
-
* @
|
|
89
|
-
* - This plugin is by applying the "ColorPicker" module globally to the "dropdown" menu, the default "action" method is not called.
|
|
90
|
-
* @param {string} color - Color code (hex)
|
|
85
|
+
* @hook Modules.ColorPicker
|
|
86
|
+
* @type {SunEditor.Hook.ColorPicker.Action}
|
|
91
87
|
*/
|
|
92
88
|
colorPickerAction(color) {
|
|
93
89
|
if (color) {
|
|
94
90
|
const newNode = dom.utils.createElement('SPAN', { style: 'background-color: ' + color + ';' });
|
|
95
|
-
this.
|
|
91
|
+
this.$.inline.apply(newNode, { stylesToModify: ['background-color'], nodesToRemove: null, strictRemove: null });
|
|
96
92
|
} else {
|
|
97
|
-
this.
|
|
93
|
+
this.$.inline.apply(null, { stylesToModify: ['background-color'], nodesToRemove: ['span'], strictRemove: true });
|
|
98
94
|
}
|
|
99
95
|
|
|
100
|
-
this
|
|
96
|
+
this.$.menu.dropdownOff();
|
|
101
97
|
}
|
|
102
98
|
}
|
|
103
99
|
|
|
100
|
+
/**
|
|
101
|
+
* @returns {HTMLElement}
|
|
102
|
+
*/
|
|
104
103
|
function CreateHTML() {
|
|
105
104
|
return dom.utils.createElement('DIV', { class: 'se-dropdown se-list-layer' }, null);
|
|
106
105
|
}
|