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,162 +1,172 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { PluginCommand, PluginDropdown, PluginInput } from '../../interfaces';
|
|
2
2
|
import { dom, numbers, keyCodeMap } from '../../helper';
|
|
3
3
|
|
|
4
|
+
void PluginCommand;
|
|
5
|
+
void PluginDropdown;
|
|
6
|
+
|
|
4
7
|
const DEFAULT_UNIT_MAP = {
|
|
5
8
|
text: {
|
|
6
9
|
default: '13px',
|
|
7
10
|
list: [
|
|
8
11
|
{
|
|
9
12
|
title: 'XX-Small',
|
|
10
|
-
size: '8px'
|
|
13
|
+
size: '8px',
|
|
11
14
|
},
|
|
12
15
|
{
|
|
13
16
|
title: 'X-Small',
|
|
14
|
-
size: '10px'
|
|
17
|
+
size: '10px',
|
|
15
18
|
},
|
|
16
19
|
{
|
|
17
20
|
title: 'Small',
|
|
18
|
-
size: '13px'
|
|
21
|
+
size: '13px',
|
|
19
22
|
},
|
|
20
23
|
{
|
|
21
24
|
title: 'Medium',
|
|
22
|
-
size: '16px'
|
|
25
|
+
size: '16px',
|
|
23
26
|
},
|
|
24
27
|
{
|
|
25
28
|
title: 'Large',
|
|
26
|
-
size: '18px'
|
|
29
|
+
size: '18px',
|
|
27
30
|
},
|
|
28
31
|
{
|
|
29
32
|
title: 'X-Large',
|
|
30
|
-
size: '24px'
|
|
33
|
+
size: '24px',
|
|
31
34
|
},
|
|
32
35
|
{
|
|
33
36
|
title: 'XX-Large',
|
|
34
|
-
size: '32px'
|
|
35
|
-
}
|
|
36
|
-
]
|
|
37
|
+
size: '32px',
|
|
38
|
+
},
|
|
39
|
+
],
|
|
37
40
|
},
|
|
38
41
|
px: {
|
|
39
42
|
default: 13,
|
|
40
43
|
inc: 1,
|
|
41
44
|
min: 8,
|
|
42
45
|
max: 72,
|
|
43
|
-
list: [8, 10, 13, 15, 18, 20, 22, 26, 28, 36, 48, 72]
|
|
46
|
+
list: [8, 10, 13, 15, 18, 20, 22, 26, 28, 36, 48, 72],
|
|
44
47
|
},
|
|
45
48
|
pt: {
|
|
46
49
|
default: 10,
|
|
47
50
|
inc: 1,
|
|
48
51
|
min: 6,
|
|
49
52
|
max: 72,
|
|
50
|
-
list: [6, 8, 10, 12, 14, 18, 22, 26, 32]
|
|
53
|
+
list: [6, 8, 10, 12, 14, 18, 22, 26, 32],
|
|
51
54
|
},
|
|
52
55
|
em: {
|
|
53
56
|
default: 1,
|
|
54
57
|
inc: 0.1,
|
|
55
58
|
min: 0.5,
|
|
56
59
|
max: 5,
|
|
57
|
-
list: [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 2.5, 3]
|
|
60
|
+
list: [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 2.5, 3],
|
|
58
61
|
},
|
|
59
62
|
rem: {
|
|
60
63
|
default: 1,
|
|
61
64
|
inc: 0.1,
|
|
62
65
|
min: 0.5,
|
|
63
66
|
max: 5,
|
|
64
|
-
list: [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 2.5, 3]
|
|
67
|
+
list: [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 2.5, 3],
|
|
65
68
|
},
|
|
66
69
|
vw: {
|
|
67
70
|
inc: 0.1,
|
|
68
71
|
min: 0.5,
|
|
69
72
|
max: 10,
|
|
70
|
-
list: [2, 3.5, 4, 4.5, 6, 8]
|
|
73
|
+
list: [2, 3.5, 4, 4.5, 6, 8],
|
|
71
74
|
},
|
|
72
75
|
vh: {
|
|
73
76
|
default: 1.5,
|
|
74
77
|
inc: 0.1,
|
|
75
78
|
min: 0.5,
|
|
76
79
|
max: 10,
|
|
77
|
-
list: [1, 1.5, 2, 2.5, 3, 3.5, 4]
|
|
80
|
+
list: [1, 1.5, 2, 2.5, 3, 3.5, 4],
|
|
78
81
|
},
|
|
79
82
|
'%': {
|
|
80
83
|
default: 100,
|
|
81
84
|
inc: 1,
|
|
82
85
|
min: 50,
|
|
83
86
|
max: 200,
|
|
84
|
-
list: [50, 70, 90, 100, 120, 140, 160, 180, 200]
|
|
85
|
-
}
|
|
87
|
+
list: [50, 70, 90, 100, 120, 140, 160, 180, 200],
|
|
88
|
+
},
|
|
86
89
|
};
|
|
87
90
|
|
|
91
|
+
/**
|
|
92
|
+
* @typedef {Object} FontSizePluginOptions
|
|
93
|
+
* @property {string} [sizeUnit='px'] - The unit for the font size.
|
|
94
|
+
* - Accepted values include: `'px'`, `'pt'`, `'em'`, `'rem'`, `'vw'`, `'vh'`, `'%'` or `'text'`.
|
|
95
|
+
* - If `'text'` is used, a text-based font size list is applied.
|
|
96
|
+
* @property {boolean} [showDefaultSizeLabel=true] - Determines whether the default size label is displayed in the dropdown menu.
|
|
97
|
+
* @property {boolean} [showIncDecControls=false] - When `true`, displays increase and decrease buttons for font size adjustments.
|
|
98
|
+
* @property {boolean} [disableInput=true] - When `true`, disables the direct font size input box.
|
|
99
|
+
* @property {Object<string, {default: number, inc: number, min: number, max: number, list: Array<number>}>} [unitMap={}] - Optional object to override or extend the default unit mapping for font sizes.
|
|
100
|
+
*/
|
|
101
|
+
|
|
88
102
|
/**
|
|
89
103
|
* @class
|
|
104
|
+
* @implements {PluginCommand}
|
|
105
|
+
* @implements {PluginDropdown}
|
|
90
106
|
* @description FontSize Plugin
|
|
91
107
|
* - This plugin enables users to modify the font size of selected text within the editor.
|
|
92
108
|
* - It supports various measurement units (e.g., 'px', 'pt', 'em', 'rem', 'vw', 'vh', '%') and
|
|
93
109
|
* - provides multiple interfaces: dropdown menus, direct input, and optional increment/decrement buttons.
|
|
94
110
|
*/
|
|
95
|
-
class FontSize extends
|
|
111
|
+
class FontSize extends PluginInput {
|
|
96
112
|
static key = 'fontSize';
|
|
97
|
-
static type = 'input';
|
|
98
113
|
static className = 'se-btn-select se-btn-input se-btn-tool-font-size';
|
|
99
114
|
|
|
115
|
+
#disableInput;
|
|
116
|
+
|
|
100
117
|
/**
|
|
101
118
|
* @constructor
|
|
102
|
-
* @param {
|
|
103
|
-
* @param {
|
|
104
|
-
* @param {string=} [pluginOptions.sizeUnit='px'] - The unit for the font size.
|
|
105
|
-
* - Accepted values include: 'px', 'pt', 'em', 'rem', 'vw', 'vh', '%' or 'text'.
|
|
106
|
-
* - If 'text' is used, a text-based font size list is applied.
|
|
107
|
-
* @param {boolean=} [pluginOptions.showDefaultSizeLabel=true] - Determines whether the default size label is displayed in the dropdown menu.
|
|
108
|
-
* @param {boolean=} [pluginOptions.showIncDecControls=false] - When true, displays increase and decrease buttons for font size adjustments.
|
|
109
|
-
* @param {boolean=} [pluginOptions.disableInput=true] - When true, disables the direct font size input box.
|
|
110
|
-
* @param {Object<string, {default: number, inc: number, min: number, max: number, list: Array<number>}>} [pluginOptions.unitMap={}] - Optional object to override or extend the default unit mapping for font sizes.
|
|
119
|
+
* @param {SunEditor.Kernel} editor - The core kernel
|
|
120
|
+
* @param {FontSizePluginOptions} pluginOptions - Configuration options for the FontSize plugin.
|
|
111
121
|
*/
|
|
112
122
|
constructor(editor, pluginOptions) {
|
|
113
123
|
super(editor);
|
|
114
124
|
|
|
115
125
|
// create HTML
|
|
116
126
|
this.unitMap = { ...DEFAULT_UNIT_MAP, ...(pluginOptions.unitMap || {}) };
|
|
117
|
-
this.sizeUnit = /text/.test(pluginOptions.sizeUnit) ? '' : pluginOptions.sizeUnit || this
|
|
127
|
+
this.sizeUnit = /text/.test(pluginOptions.sizeUnit) ? '' : pluginOptions.sizeUnit || this.$.options.get('fontSizeUnits')[0];
|
|
118
128
|
|
|
119
129
|
const unitMap = this.unitMap[this.sizeUnit || 'text'];
|
|
120
|
-
const menu = CreateHTML(
|
|
130
|
+
const menu = CreateHTML(this.$, unitMap, this.sizeUnit, pluginOptions.showDefaultSizeLabel);
|
|
121
131
|
|
|
122
132
|
// plugin basic properties
|
|
123
|
-
const showIncDec = this.sizeUnit ? pluginOptions.showIncDecControls ?? false : false;
|
|
124
|
-
const disableInput = this.sizeUnit ? pluginOptions.disableInput ?? false : true;
|
|
133
|
+
const showIncDec = this.sizeUnit ? (pluginOptions.showIncDecControls ?? false) : false;
|
|
134
|
+
const disableInput = this.sizeUnit ? (pluginOptions.disableInput ?? false) : true;
|
|
125
135
|
|
|
126
|
-
this.title = this
|
|
136
|
+
this.title = this.$.lang.fontSize;
|
|
127
137
|
this.inner =
|
|
128
138
|
disableInput && !showIncDec
|
|
129
139
|
? false
|
|
130
140
|
: disableInput
|
|
131
|
-
|
|
132
|
-
|
|
141
|
+
? `<span class="se-txt se-not-arrow-text __se__font_size">${this.$.lang.fontSize}</span>`
|
|
142
|
+
: `<input type="text" class="__se__font_size se-not-arrow-text" placeholder="${this.$.lang.fontSize}" />`;
|
|
133
143
|
|
|
134
144
|
// increase, decrease buttons
|
|
135
145
|
if (showIncDec) {
|
|
136
146
|
this.beforeItem = dom.utils.createElement(
|
|
137
147
|
'button',
|
|
138
148
|
{ class: 'se-btn se-tooltip se-sub-btn', 'data-command': FontSize.key, 'data-type': 'command', 'data-value': 'dec' },
|
|
139
|
-
`${this
|
|
149
|
+
`${this.$.icons.minus}<span class="se-tooltip-inner"><span class="se-tooltip-text">${this.$.lang.decrease}</span></span>`,
|
|
140
150
|
);
|
|
141
151
|
this.afterItem = dom.utils.createElement(
|
|
142
152
|
'button',
|
|
143
153
|
{ class: 'se-btn se-tooltip se-sub-btn', 'data-command': FontSize.key, 'data-type': 'command', 'data-value': 'inc' },
|
|
144
|
-
`${this
|
|
154
|
+
`${this.$.icons.plus}<span class="se-tooltip-inner"><span class="se-tooltip-text">${this.$.lang.increase}</span></span>`,
|
|
145
155
|
);
|
|
146
156
|
} else if (!disableInput) {
|
|
147
157
|
this.afterItem = dom.utils.createElement(
|
|
148
158
|
'button',
|
|
149
159
|
{ class: 'se-btn se-tooltip se-sub-arrow-btn', 'data-command': FontSize.key, 'data-type': 'dropdown' },
|
|
150
|
-
`${this
|
|
160
|
+
`${this.$.icons.arrow_down}<span class="se-tooltip-inner"><span class="se-tooltip-text">${this.$.lang.fontSize}</span></span>`,
|
|
151
161
|
);
|
|
152
|
-
this
|
|
162
|
+
this.$.menu.initDropdownTarget({ key: FontSize.key, type: 'dropdown' }, menu);
|
|
153
163
|
} else if (disableInput && !showIncDec) {
|
|
154
164
|
this.replaceButton = dom.utils.createElement(
|
|
155
165
|
'button',
|
|
156
166
|
{ class: 'se-btn se-tooltip se-btn-select se-btn-tool-font-size', 'data-command': FontSize.key, 'data-type': 'dropdown' },
|
|
157
|
-
`<span class="se-txt __se__font_size">${this
|
|
167
|
+
`<span class="se-txt __se__font_size">${this.$.lang.fontSize}</span>${this.$.icons.arrow_down}<span class="se-tooltip-inner"><span class="se-tooltip-text">${this.$.lang.fontSize}</span></span>`,
|
|
158
168
|
);
|
|
159
|
-
this
|
|
169
|
+
this.$.menu.initDropdownTarget({ key: FontSize.key, type: 'dropdown' }, menu);
|
|
160
170
|
}
|
|
161
171
|
|
|
162
172
|
// members
|
|
@@ -164,30 +174,26 @@ class FontSize extends EditorInjector {
|
|
|
164
174
|
this.sizeList = menu.querySelectorAll('li button');
|
|
165
175
|
this.hasInputFocus = false;
|
|
166
176
|
this.isInputActive = false; // input target event
|
|
167
|
-
this
|
|
177
|
+
this.#disableInput = disableInput;
|
|
168
178
|
|
|
169
179
|
// init
|
|
170
|
-
this
|
|
180
|
+
this.$.menu.initDropdownTarget(FontSize, menu);
|
|
171
181
|
}
|
|
172
182
|
|
|
173
183
|
/**
|
|
174
|
-
* @
|
|
175
|
-
* @
|
|
176
|
-
* @param {?HTMLElement=} element - Node element where the cursor is currently located
|
|
177
|
-
* @param {?HTMLElement=} target - The plugin's toolbar button element
|
|
178
|
-
* @returns {boolean} - Whether the plugin is active
|
|
179
|
-
* - If it returns "undefined", it will no longer be called in this scope.
|
|
184
|
+
* @hook Editor.EventManager
|
|
185
|
+
* @type {SunEditor.Hook.Event.Active}
|
|
180
186
|
*/
|
|
181
187
|
active(element, target) {
|
|
182
188
|
if (!dom.utils.hasClass(target, '__se__font_size')) return false;
|
|
183
189
|
|
|
184
190
|
let fontSize = '';
|
|
185
191
|
if (!element) {
|
|
186
|
-
this
|
|
187
|
-
} else if (this
|
|
192
|
+
this.#setSize(target, this.#getDefaultSize());
|
|
193
|
+
} else if (this.$.format.isLine(element)) {
|
|
188
194
|
return undefined;
|
|
189
195
|
} else if ((fontSize = dom.utils.getStyle(element, 'fontSize'))) {
|
|
190
|
-
this
|
|
196
|
+
this.#setSize(target, fontSize);
|
|
191
197
|
return true;
|
|
192
198
|
}
|
|
193
199
|
|
|
@@ -195,23 +201,20 @@ class FontSize extends EditorInjector {
|
|
|
195
201
|
}
|
|
196
202
|
|
|
197
203
|
/**
|
|
198
|
-
* @
|
|
199
|
-
* @
|
|
200
|
-
* @param {Object} params
|
|
201
|
-
* @param {HTMLElement} params.target Input element
|
|
202
|
-
* @param {KeyboardEvent} params.event Event object
|
|
204
|
+
* @override
|
|
205
|
+
* @type {PluginInput['toolbarInputKeyDown']}
|
|
203
206
|
*/
|
|
204
|
-
|
|
207
|
+
toolbarInputKeyDown({ target, event }) {
|
|
205
208
|
const keyCode = event.code;
|
|
206
209
|
|
|
207
|
-
if (this
|
|
210
|
+
if (this.#disableInput || keyCodeMap.isSpace(keyCode)) {
|
|
208
211
|
event.preventDefault();
|
|
209
212
|
return;
|
|
210
213
|
}
|
|
211
214
|
|
|
212
|
-
if (!/^(
|
|
215
|
+
if (!/^(ArrowUp|ArrowDown|Enter)$/.test(keyCode)) return;
|
|
213
216
|
|
|
214
|
-
const { value, unit } = this
|
|
217
|
+
const { value, unit } = this.#getSize(target);
|
|
215
218
|
if (!value) return;
|
|
216
219
|
|
|
217
220
|
const numValue = numbers.get(value);
|
|
@@ -231,11 +234,11 @@ class FontSize extends EditorInjector {
|
|
|
231
234
|
|
|
232
235
|
try {
|
|
233
236
|
this.isInputActive = true;
|
|
234
|
-
const size = this
|
|
235
|
-
if (this
|
|
237
|
+
const size = this.#setSize(target, changeValue + unit);
|
|
238
|
+
if (this.#disableInput) return;
|
|
236
239
|
|
|
237
240
|
const newNode = dom.utils.createElement('SPAN', { style: 'font-size: ' + size + ';' });
|
|
238
|
-
this.
|
|
241
|
+
this.$.inline.apply(newNode, { stylesToModify: ['font-size'], nodesToRemove: null, strictRemove: null });
|
|
239
242
|
|
|
240
243
|
if (!keyCodeMap.isEnter(keyCode)) target.focus();
|
|
241
244
|
} finally {
|
|
@@ -244,37 +247,35 @@ class FontSize extends EditorInjector {
|
|
|
244
247
|
}
|
|
245
248
|
|
|
246
249
|
/**
|
|
247
|
-
* @
|
|
248
|
-
* @
|
|
249
|
-
* @param {__se__PluginToolbarInputChangeEventInfo} params
|
|
250
|
+
* @override
|
|
251
|
+
* @type {PluginInput['toolbarInputChange']}
|
|
250
252
|
*/
|
|
251
|
-
|
|
252
|
-
if (this
|
|
253
|
+
toolbarInputChange({ target, value: changeValue, event }) {
|
|
254
|
+
if (this.#disableInput) return;
|
|
253
255
|
|
|
254
256
|
try {
|
|
255
257
|
this.isInputActive = true;
|
|
256
258
|
|
|
257
259
|
// eslint-disable-next-line prefer-const
|
|
258
|
-
let { value, unit } = this
|
|
260
|
+
let { value, unit } = this.#getSize(changeValue);
|
|
259
261
|
const { max, min } = this.unitMap[unit];
|
|
260
262
|
value = value > max ? max : value < min ? min : value;
|
|
261
263
|
|
|
262
|
-
const newNode = dom.utils.createElement('SPAN', { style: 'font-size: ' + this
|
|
263
|
-
this.
|
|
264
|
+
const newNode = dom.utils.createElement('SPAN', { style: 'font-size: ' + this.#setSize(target, value + unit) + ';' });
|
|
265
|
+
this.$.inline.apply(newNode, { stylesToModify: ['font-size'], nodesToRemove: null, strictRemove: null });
|
|
264
266
|
} finally {
|
|
265
267
|
this.isInputActive = false;
|
|
266
268
|
event.preventDefault();
|
|
267
|
-
this.
|
|
269
|
+
this.$.focusManager.focus();
|
|
268
270
|
}
|
|
269
271
|
}
|
|
270
272
|
|
|
271
273
|
/**
|
|
272
|
-
* @
|
|
273
|
-
* @
|
|
274
|
-
* @param {HTMLElement} target Line element at the current cursor position
|
|
274
|
+
* @imple Dropdown
|
|
275
|
+
* @type {PluginDropdown['on']}
|
|
275
276
|
*/
|
|
276
277
|
on(target) {
|
|
277
|
-
const { value, unit } = this
|
|
278
|
+
const { value, unit } = this.#getSize(target);
|
|
278
279
|
const currentSize = value + unit;
|
|
279
280
|
|
|
280
281
|
if (currentSize === this.currentSize) return;
|
|
@@ -292,80 +293,75 @@ class FontSize extends EditorInjector {
|
|
|
292
293
|
}
|
|
293
294
|
|
|
294
295
|
/**
|
|
295
|
-
* @
|
|
296
|
-
* @
|
|
297
|
-
* - Called when an item in the "dropdown" menu is clicked.
|
|
298
|
-
* @param {HTMLElement} target - The plugin's toolbar button element
|
|
296
|
+
* @imple Command
|
|
297
|
+
* @type {PluginCommand['action']}
|
|
299
298
|
*/
|
|
300
299
|
action(target) {
|
|
301
300
|
const commandValue = target.getAttribute('data-command');
|
|
302
301
|
|
|
303
302
|
if (commandValue === FontSize.key) {
|
|
304
|
-
const { value, unit } = this
|
|
303
|
+
const { value, unit } = this.#getSize(target);
|
|
305
304
|
let newSize = numbers.get(value) + (target.getAttribute('data-value') === 'inc' ? 1 : -1);
|
|
306
305
|
const { min, max } = this.unitMap[unit];
|
|
307
306
|
newSize = newSize < min ? min : newSize > max ? max : newSize;
|
|
308
307
|
|
|
309
308
|
const newNode = dom.utils.createElement('SPAN', { style: 'font-size: ' + newSize + unit + ';' });
|
|
310
|
-
this.
|
|
309
|
+
this.$.inline.apply(newNode, { stylesToModify: ['font-size'], nodesToRemove: null, strictRemove: null });
|
|
311
310
|
} else if (commandValue) {
|
|
312
311
|
const newNode = dom.utils.createElement('SPAN', { style: 'font-size: ' + commandValue + ';' });
|
|
313
|
-
this.
|
|
312
|
+
this.$.inline.apply(newNode, { stylesToModify: ['font-size'], nodesToRemove: null, strictRemove: null });
|
|
314
313
|
} else {
|
|
315
|
-
this.
|
|
314
|
+
this.$.inline.apply(null, { stylesToModify: ['font-size'], nodesToRemove: ['span'], strictRemove: true });
|
|
316
315
|
}
|
|
317
316
|
|
|
318
|
-
this
|
|
317
|
+
this.$.menu.dropdownOff();
|
|
319
318
|
}
|
|
320
319
|
|
|
321
320
|
/**
|
|
322
|
-
* @private
|
|
323
321
|
* @description Retrieves the default font size of the editor.
|
|
324
322
|
* @returns {string} - The computed font size from the editor.
|
|
325
323
|
*/
|
|
326
|
-
|
|
327
|
-
return this
|
|
324
|
+
#getDefaultSize() {
|
|
325
|
+
return this.$.frameContext.get('wwComputedStyle').fontSize;
|
|
328
326
|
}
|
|
329
327
|
|
|
330
328
|
/**
|
|
331
|
-
* @private
|
|
332
329
|
* @description Extracts the font size and unit from the given element or input value.
|
|
333
330
|
* @param {string|Element} target - The target input or element.
|
|
334
331
|
* @returns {{ unit: string, value: number|string }} - An object containing:
|
|
335
332
|
* - `unit` (string): The detected font size unit.
|
|
336
333
|
* - `value` (number|string): The numeric font size value or text-based size.
|
|
337
334
|
*/
|
|
338
|
-
|
|
335
|
+
#getSize(target) {
|
|
339
336
|
target = typeof target === 'string' ? target : target.parentElement.querySelector('.__se__font_size');
|
|
340
337
|
if (!target)
|
|
341
338
|
return {
|
|
342
339
|
unit: this.sizeUnit,
|
|
343
|
-
value: this.sizeUnit ? 0 : ''
|
|
340
|
+
value: this.sizeUnit ? 0 : '',
|
|
344
341
|
};
|
|
345
342
|
|
|
346
343
|
const size = typeof target === 'string' ? target : dom.check.isInputElement(target) ? target.value : target.textContent;
|
|
347
344
|
const splitValue = this.sizeUnit ? size.split(/(\d+)/) : [size, ''];
|
|
348
345
|
|
|
349
346
|
let unit = (splitValue.pop() || '').trim().toLowerCase();
|
|
350
|
-
unit = this
|
|
347
|
+
unit = this.$.options.get('fontSizeUnits').includes(unit) ? unit : this.sizeUnit;
|
|
351
348
|
|
|
352
349
|
const tempValue = splitValue.pop();
|
|
353
350
|
const value = unit ? Number(tempValue) : tempValue;
|
|
354
351
|
|
|
355
352
|
return {
|
|
356
353
|
unit,
|
|
357
|
-
value
|
|
354
|
+
value,
|
|
358
355
|
};
|
|
359
356
|
}
|
|
360
357
|
|
|
361
358
|
/**
|
|
362
|
-
* @private
|
|
363
359
|
* @description Sets the font size in the toolbar input field or button label.
|
|
364
360
|
* @param {HTMLElement} target - The target element in the toolbar.
|
|
365
361
|
* @param {string|number} value - The font size value.
|
|
366
362
|
* @returns {string|number} - The applied font size.
|
|
367
363
|
*/
|
|
368
|
-
|
|
364
|
+
#setSize(target, value) {
|
|
369
365
|
target = target.parentElement.querySelector('.__se__font_size');
|
|
370
366
|
if (!target) return 0;
|
|
371
367
|
|
|
@@ -377,6 +373,13 @@ class FontSize extends EditorInjector {
|
|
|
377
373
|
}
|
|
378
374
|
}
|
|
379
375
|
|
|
376
|
+
/**
|
|
377
|
+
* @param {SunEditor.Deps} $ - Kernel dependencies
|
|
378
|
+
* @param {{list: Array<number|{title: string, size: string}>, default?: number|string}} unitMap - Font size unit map
|
|
379
|
+
* @param {string} sizeUnit - Size unit string
|
|
380
|
+
* @param {boolean} showDefaultSizeLabel - Whether to show default size label
|
|
381
|
+
* @returns {HTMLElement}
|
|
382
|
+
*/
|
|
380
383
|
function CreateHTML({ lang }, unitMap, sizeUnit, showDefaultSizeLabel) {
|
|
381
384
|
const sizeList = unitMap.list;
|
|
382
385
|
const defaultSize = unitMap.default;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { PluginInput } from '../../interfaces';
|
|
2
2
|
import { dom } from '../../helper';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -9,20 +9,19 @@ import { dom } from '../../helper';
|
|
|
9
9
|
* - the total number of pages. When the user changes the value in the input field, the plugin triggers
|
|
10
10
|
* - a page navigation event through the editor's document context.
|
|
11
11
|
*/
|
|
12
|
-
class PageNavigator extends
|
|
12
|
+
class PageNavigator extends PluginInput {
|
|
13
13
|
static key = 'pageNavigator';
|
|
14
|
-
static type = 'input';
|
|
15
14
|
static className = 'se-btn-input se-btn-tool-pageNavigator';
|
|
16
15
|
|
|
17
16
|
/**
|
|
18
17
|
* @constructor
|
|
19
|
-
* @param {
|
|
18
|
+
* @param {SunEditor.Kernel} editor - The core kernel
|
|
20
19
|
*/
|
|
21
20
|
constructor(editor) {
|
|
22
21
|
super(editor);
|
|
23
22
|
|
|
24
23
|
// create HTML
|
|
25
|
-
this.title = this
|
|
24
|
+
this.title = this.$.lang.pageNumber;
|
|
26
25
|
this.inner = CreateInner();
|
|
27
26
|
this.afterItem = dom.utils.createElement('span', { class: 'se-btn se-sub-btn' }, ``);
|
|
28
27
|
|
|
@@ -31,13 +30,14 @@ class PageNavigator extends EditorInjector {
|
|
|
31
30
|
this.totalPages = 1;
|
|
32
31
|
|
|
33
32
|
// init
|
|
34
|
-
this
|
|
33
|
+
this.$.eventManager.addEvent(this.inner, 'change', this.#OnChangeInner.bind(this));
|
|
35
34
|
}
|
|
35
|
+
|
|
36
36
|
/**
|
|
37
|
-
*
|
|
38
|
-
* @description Updates the displayed page number and total pages in the navigator.
|
|
37
|
+
* Updates the displayed page number and total pages in the navigator.
|
|
39
38
|
* @param {number} pageNum - The current page number to display.
|
|
40
39
|
* @param {number} totalPages - The total number of pages in the document.
|
|
40
|
+
* @returns {void}
|
|
41
41
|
*/
|
|
42
42
|
display(pageNum, totalPages) {
|
|
43
43
|
// data update
|
|
@@ -53,16 +53,19 @@ class PageNavigator extends EditorInjector {
|
|
|
53
53
|
* @param {InputEvent} e - Event object
|
|
54
54
|
*/
|
|
55
55
|
#OnChangeInner(e) {
|
|
56
|
-
if (!this
|
|
56
|
+
if (!this.$.frameContext.has('documentType_use_page')) return;
|
|
57
57
|
|
|
58
58
|
/** @type {HTMLInputElement} */
|
|
59
59
|
const eventTarget = dom.query.getEventTarget(e);
|
|
60
60
|
|
|
61
61
|
const value = Number(eventTarget.value) || 1;
|
|
62
|
-
this
|
|
62
|
+
this.$.frameContext.get('documentType').pageGo(value);
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
+
/**
|
|
67
|
+
* @returns {HTMLInputElement}
|
|
68
|
+
*/
|
|
66
69
|
function CreateInner() {
|
|
67
70
|
return /** @type {HTMLInputElement} */ (dom.utils.createElement('input', { type: 'number', class: 'se-not-arrow-text', placeholder: '1', value: '1', min: '1' }, null));
|
|
68
71
|
}
|