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
|
@@ -0,0 +1,452 @@
|
|
|
1
|
+
import { dom, converter } from '../../helper';
|
|
2
|
+
import { InitOptions, CreateStatusbar } from '../section/constructor';
|
|
3
|
+
import { OPTION_FRAME_FIXED_FLAG, OPTION_FIXED_FLAG } from '../schema/options';
|
|
4
|
+
import { UpdateStatusbarContext } from '../schema/frameContext';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @typedef {import('../schema/options').ProcessedBaseOptions} ConfigAllBaseOptions
|
|
8
|
+
* @typedef {import('../schema/options').ProcessedFrameOptions} ConfigAllFrameOptions
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @typedef {Object} BaseOptionsMap
|
|
13
|
+
* - A Map containing all processed editor base options.
|
|
14
|
+
* - This Map contains all keys from {@link ConfigAllBaseOptions}, where:
|
|
15
|
+
* - Keys are option names (string)
|
|
16
|
+
* - Values depend on the specific option (see {@link ConfigAllBaseOptions} for details)
|
|
17
|
+
*
|
|
18
|
+
* @property {<K extends keyof ConfigAllBaseOptions>(k: K) => ConfigAllBaseOptions[K]} get - Retrieves the value of a specific option.
|
|
19
|
+
* @property {<K extends keyof ConfigAllBaseOptions>(k: K, v: ConfigAllBaseOptions[K]) => void} set - Sets the value of a specific option.
|
|
20
|
+
* @property {<K extends keyof ConfigAllBaseOptions>(k: K) => boolean} has - Checks if a specific option exists.
|
|
21
|
+
* @property {() => Object<keyof ConfigAllBaseOptions, *>} getAll - Retrieves all options as an object.
|
|
22
|
+
* @property {(options: Map<*, *>) => void} setMany - Sets multiple options at once.
|
|
23
|
+
* @property {(newMap: SunEditor.InitOptions) => void} reset - Replaces all options with a new Map.
|
|
24
|
+
* @property {() => number} size - Get option size
|
|
25
|
+
* @property {() => void} clear - Clears all stored options.
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* @typedef {Object} FrameOptionsMap
|
|
30
|
+
* - A Map containing all processed frame-level options.
|
|
31
|
+
* - This Map contains all keys from {@link ConfigAllFrameOptions}, where:
|
|
32
|
+
* - Keys are option names (string)
|
|
33
|
+
* - Values depend on the specific option (see {@link ConfigAllFrameOptions} for details)
|
|
34
|
+
*
|
|
35
|
+
* @property {<K extends keyof ConfigAllFrameOptions>(k: K) => ConfigAllFrameOptions[K]} get - Retrieves the value of a specific option.
|
|
36
|
+
* @property {<K extends keyof ConfigAllFrameOptions>(k: K, v: ConfigAllFrameOptions[K]) => void} set - Sets the value of a specific option.
|
|
37
|
+
* @property {<K extends keyof ConfigAllFrameOptions>(k: K) => boolean} has - Checks if a specific option exists.
|
|
38
|
+
* @property {() => Object<keyof ConfigAllFrameOptions, *>} getAll - Retrieves all options as an object.
|
|
39
|
+
* @property {(options: Map<*, *>) => void} setMany - Sets multiple options at once.
|
|
40
|
+
* @property {(newMap: SunEditor.FrameOptions) => void} reset - Replaces all options with a new Map.
|
|
41
|
+
* @property {() => number} size - Get option size
|
|
42
|
+
* @property {() => void} clear - Clears all stored options.
|
|
43
|
+
*/
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* @description Provides Map-based access to editor options (base and per-frame).
|
|
47
|
+
*/
|
|
48
|
+
export default class OptionProvider {
|
|
49
|
+
#kernel;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* @description Origin options
|
|
53
|
+
* @type {SunEditor.InitOptions}
|
|
54
|
+
*/
|
|
55
|
+
#originOptions;
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* @description Utility object that manages the editor's runtime options.
|
|
59
|
+
* Provides methods to get, set, and inspect internal editor options.
|
|
60
|
+
* @type {BaseOptionsMap}
|
|
61
|
+
*/
|
|
62
|
+
#optionsMap;
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* @description Utility object that manages the editor's runtime [frame] options.
|
|
66
|
+
* Provides methods to get, set, and inspect internal [frame] options.
|
|
67
|
+
* @type {FrameOptionsMap}
|
|
68
|
+
*/
|
|
69
|
+
#frameOptionsMap;
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* @constructor
|
|
73
|
+
* @param {SunEditor.Kernel} kernel
|
|
74
|
+
* @param {import('../section/constructor').ConstructorReturnType} product
|
|
75
|
+
*/
|
|
76
|
+
constructor(kernel, product, options) {
|
|
77
|
+
this.#kernel = kernel;
|
|
78
|
+
|
|
79
|
+
this.#originOptions = options;
|
|
80
|
+
|
|
81
|
+
this.#optionsMap = this.#CreateOptionsMap({ value: product.options });
|
|
82
|
+
this.#frameOptionsMap = this.#CreateFrameOptionsMap({ value: new Map() });
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* @return {BaseOptionsMap}
|
|
87
|
+
*/
|
|
88
|
+
get options() {
|
|
89
|
+
return this.#optionsMap;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
get frameOptions() {
|
|
93
|
+
return this.#frameOptionsMap;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* @description Add or reset option property (Editor is reloaded)
|
|
98
|
+
* @param {SunEditor.InitOptions} newOptions Options
|
|
99
|
+
*/
|
|
100
|
+
reset(newOptions) {
|
|
101
|
+
const { $ } = this.#kernel;
|
|
102
|
+
|
|
103
|
+
// use kernel
|
|
104
|
+
const frameRoots = $.frameRoots;
|
|
105
|
+
const context = $.context;
|
|
106
|
+
const eventManager = $.eventManager;
|
|
107
|
+
const format = $.format;
|
|
108
|
+
const html = $.html;
|
|
109
|
+
const char = $.char;
|
|
110
|
+
const viewer = $.viewer;
|
|
111
|
+
const plugins = $.plugins;
|
|
112
|
+
const history = $.history;
|
|
113
|
+
const ui = $.ui;
|
|
114
|
+
|
|
115
|
+
const eventOrchestrator = this.#kernel._eventOrchestrator;
|
|
116
|
+
|
|
117
|
+
viewer.codeView(false);
|
|
118
|
+
viewer.showBlocks(false);
|
|
119
|
+
|
|
120
|
+
const rootDiff = new Map();
|
|
121
|
+
const newRoots = [];
|
|
122
|
+
const newRootKeys = new Map();
|
|
123
|
+
|
|
124
|
+
// frame roots
|
|
125
|
+
const nRoot = {};
|
|
126
|
+
for (const k in newOptions) {
|
|
127
|
+
if (OPTION_FRAME_FIXED_FLAG[k] === undefined) continue;
|
|
128
|
+
nRoot[k] = newOptions[k];
|
|
129
|
+
delete newOptions[k];
|
|
130
|
+
}
|
|
131
|
+
for (const rootKey of frameRoots.keys()) {
|
|
132
|
+
newOptions[rootKey || ''] = { ...nRoot, ...newOptions[rootKey || ''] };
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// check reoption validation
|
|
136
|
+
const newOptionKeys = Object.keys(newOptions);
|
|
137
|
+
this.#CheckResetKeys(newOptionKeys, plugins, '');
|
|
138
|
+
if (newOptionKeys.length === 0) return;
|
|
139
|
+
|
|
140
|
+
if (frameRoots.size === 1) {
|
|
141
|
+
newOptionKeys.unshift(null);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// option merge
|
|
145
|
+
const _originOptions = [this.#originOptions, newOptions].reduce((init, option) => {
|
|
146
|
+
for (const key in option) {
|
|
147
|
+
if (frameRoots.has(key || null)) {
|
|
148
|
+
this.#RestoreFrameOptions(key, option, frameRoots, rootDiff, newRootKeys, newRoots);
|
|
149
|
+
} else {
|
|
150
|
+
init[key] = option[key];
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return init;
|
|
154
|
+
}, /** @type {SunEditor.InitOptions} */ ({}));
|
|
155
|
+
|
|
156
|
+
// init options
|
|
157
|
+
const options = this.#optionsMap;
|
|
158
|
+
const newO = InitOptions(_originOptions, newRoots, plugins);
|
|
159
|
+
|
|
160
|
+
const newOptionMap = newO.o;
|
|
161
|
+
const newFrameMap = newO.frameMap;
|
|
162
|
+
/** --------- [root start] --------- */
|
|
163
|
+
for (let i = 0, len = newOptionKeys.length, k; i < len; i++) {
|
|
164
|
+
k = /** @type {keyof ConfigAllBaseOptions} */ (newOptionKeys[i] || null);
|
|
165
|
+
|
|
166
|
+
if (newRootKeys.has(k)) {
|
|
167
|
+
const diff = rootDiff.get(k);
|
|
168
|
+
const fc = frameRoots.get(k);
|
|
169
|
+
const originOptions = fc.get('options');
|
|
170
|
+
const newRootOptions = newFrameMap.get(k);
|
|
171
|
+
|
|
172
|
+
// --- set options : fc ---
|
|
173
|
+
fc.set('options', newRootOptions);
|
|
174
|
+
|
|
175
|
+
// statusbar-changed
|
|
176
|
+
if (diff.has('statusbar-changed')) {
|
|
177
|
+
// statusbar
|
|
178
|
+
dom.utils.removeItem(fc.get('statusbar'));
|
|
179
|
+
if (newRootOptions.get('statusbar')) {
|
|
180
|
+
const statusbar = CreateStatusbar(newRootOptions, null).statusbar;
|
|
181
|
+
fc.get('container').appendChild(statusbar);
|
|
182
|
+
UpdateStatusbarContext(statusbar, fc);
|
|
183
|
+
eventOrchestrator.__addStatusbarEvent(fc, newRootOptions);
|
|
184
|
+
} else {
|
|
185
|
+
eventManager.removeEvent(originOptions.get('__statusbarEvent'));
|
|
186
|
+
newRootOptions.set('__statusbarEvent', null);
|
|
187
|
+
UpdateStatusbarContext(null, fc);
|
|
188
|
+
}
|
|
189
|
+
// charCounter
|
|
190
|
+
if (fc.get('statusbar')) {
|
|
191
|
+
char.display(fc);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
// iframe's options
|
|
196
|
+
if (diff.has('iframe_attributes')) {
|
|
197
|
+
const frame = fc.get('wysiwygFrame');
|
|
198
|
+
const originAttr = originOptions.get('iframe_attributes');
|
|
199
|
+
const newAttr = newRootOptions.get('iframe_attributes');
|
|
200
|
+
for (const origin_k in originAttr) frame.removeAttribute(origin_k);
|
|
201
|
+
for (const new_k in newAttr) frame.setAttribute(new_k, newAttr[new_k]);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
if (diff.has('iframe_cssFileName')) {
|
|
205
|
+
const docHead = fc.get('_wd').head;
|
|
206
|
+
const links = docHead.getElementsByTagName('link');
|
|
207
|
+
while (links[0]) docHead.removeChild(links[0]);
|
|
208
|
+
const parseDocument = new DOMParser().parseFromString(converter._setIframeStyleLinks(newRootOptions.get('iframe_cssFileName')), 'text/html');
|
|
209
|
+
const newLinks = parseDocument.head.children;
|
|
210
|
+
const sTag = docHead.querySelector('style');
|
|
211
|
+
while (newLinks[0]) docHead.insertBefore(newLinks[0], sTag);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
if (diff.has('placeholder')) {
|
|
215
|
+
fc.get('placeholder').textContent = newRootOptions.get('placeholder');
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
// frame styles
|
|
219
|
+
ui.setEditorStyle(newRootOptions.get('editorStyle'), fc);
|
|
220
|
+
|
|
221
|
+
// frame attributes
|
|
222
|
+
const frame = fc.get('wysiwyg');
|
|
223
|
+
const originAttr = originOptions.get('editableFrameAttributes');
|
|
224
|
+
const newAttr = newRootOptions.get('editableFrameAttributes');
|
|
225
|
+
for (const origin_k in originAttr) frame.removeAttribute(origin_k);
|
|
226
|
+
for (const new_k in newAttr) frame.setAttribute(new_k, newAttr[new_k]);
|
|
227
|
+
|
|
228
|
+
continue;
|
|
229
|
+
}
|
|
230
|
+
/** --------- [root end] --------- */
|
|
231
|
+
|
|
232
|
+
/** Options that require a function call */
|
|
233
|
+
switch (k) {
|
|
234
|
+
case 'theme': {
|
|
235
|
+
ui.setTheme(newOptionMap.get('theme'));
|
|
236
|
+
break;
|
|
237
|
+
}
|
|
238
|
+
case 'events': {
|
|
239
|
+
const events = newOptionMap.get('events');
|
|
240
|
+
for (const name in events) {
|
|
241
|
+
eventManager.events[name] = events[name];
|
|
242
|
+
}
|
|
243
|
+
break;
|
|
244
|
+
}
|
|
245
|
+
case 'autoStyleify': {
|
|
246
|
+
html.__resetAutoStyleify(newOptionMap.get('autoStyleify'));
|
|
247
|
+
break;
|
|
248
|
+
}
|
|
249
|
+
case 'textDirection': {
|
|
250
|
+
ui.setDir(newOptionMap.get('textDirection') === 'rtl' ? 'rtl' : 'ltr');
|
|
251
|
+
break;
|
|
252
|
+
}
|
|
253
|
+
case 'historyStackDelayTime': {
|
|
254
|
+
history.resetDelayTime(newOptionMap.get('historyStackDelayTime'));
|
|
255
|
+
break;
|
|
256
|
+
}
|
|
257
|
+
case 'defaultLineBreakFormat': {
|
|
258
|
+
format.__resetBrLineBreak(newOptionMap.get('defaultLineBreakFormat'));
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
// --- set options ---
|
|
264
|
+
options.setMany(newOptionMap);
|
|
265
|
+
|
|
266
|
+
/** apply options */
|
|
267
|
+
// _origin
|
|
268
|
+
this.#originOptions = _originOptions;
|
|
269
|
+
|
|
270
|
+
// --- [toolbar] ---
|
|
271
|
+
const toolbar = context.get('toolbar_main');
|
|
272
|
+
// width
|
|
273
|
+
if (/inline|balloon/i.test(options.get('mode')) && newOptionKeys.includes('toolbar_width')) {
|
|
274
|
+
toolbar.style.width = options.get('toolbar_width');
|
|
275
|
+
}
|
|
276
|
+
// hide
|
|
277
|
+
if (options.get('toolbar_hide')) {
|
|
278
|
+
toolbar.style.display = 'none';
|
|
279
|
+
} else {
|
|
280
|
+
toolbar.style.display = '';
|
|
281
|
+
}
|
|
282
|
+
// shortcuts hint
|
|
283
|
+
if (options.get('shortcutsHint')) {
|
|
284
|
+
dom.utils.removeClass(toolbar, 'se-shortcut-hide');
|
|
285
|
+
} else {
|
|
286
|
+
dom.utils.addClass(toolbar, 'se-shortcut-hide');
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
/**
|
|
291
|
+
* @description Add or reset frame option property (Editor is reloaded)
|
|
292
|
+
* @param {SunEditor.FrameOptions} newOptions Options
|
|
293
|
+
*/
|
|
294
|
+
resetFrame(newOptions) {
|
|
295
|
+
this.#frameOptionsMap.reset(newOptions);
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
#RestoreFrameOptions(key, option, frameRoots, rootDiff, newRootKeys, newRoots) {
|
|
299
|
+
const nro = option[key];
|
|
300
|
+
const newKeys = Object.keys(nro);
|
|
301
|
+
this.#CheckResetKeys(newKeys, null, key + '.');
|
|
302
|
+
if (newKeys.length === 0) return false;
|
|
303
|
+
|
|
304
|
+
const rootKey = key || null;
|
|
305
|
+
rootDiff.set(rootKey, new Map());
|
|
306
|
+
|
|
307
|
+
const o = frameRoots.get(rootKey).get('options').get('_origin');
|
|
308
|
+
const no = {};
|
|
309
|
+
const hasOwn = Object.prototype.hasOwnProperty;
|
|
310
|
+
for (const rk in nro) {
|
|
311
|
+
if (!hasOwn.call(OPTION_FRAME_FIXED_FLAG, rk)) continue;
|
|
312
|
+
const roV = nro[rk];
|
|
313
|
+
if (!newKeys.includes(rk) || o[rk] === roV) continue;
|
|
314
|
+
rootDiff.get(rootKey).set(this.#GetResetDiffKey(rk), true);
|
|
315
|
+
no[rk] = roV;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
const newO = { ...o, ...no };
|
|
319
|
+
newRootKeys.set(rootKey, new Map(Object.entries(newO)));
|
|
320
|
+
newRoots.push({ key: rootKey, options: newO });
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
#GetResetDiffKey(key) {
|
|
324
|
+
if (/^statusbar|^charCounter/.test(key)) return 'statusbar-changed';
|
|
325
|
+
return key;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
#CheckResetKeys(keys, plugins, root) {
|
|
329
|
+
for (let i = 0, len = keys.length, k; i < len; i++) {
|
|
330
|
+
k = keys[i];
|
|
331
|
+
if (OPTION_FIXED_FLAG[k] === 'fixed' || OPTION_FRAME_FIXED_FLAG[k] === 'fixed' || (plugins && plugins[k])) {
|
|
332
|
+
console.warn(`[SUNEDITOR.warn.resetOptions] The "[${root + k}]" option cannot be changed after the editor is created.`);
|
|
333
|
+
keys.splice(i--, 1);
|
|
334
|
+
len--;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
/**
|
|
340
|
+
* @description Creates a utility wrapper for editor base options.
|
|
341
|
+
* - Provides get, set, has, getAll, and setMany methods with internal Map support.
|
|
342
|
+
* @param {*} _options - Origin options object
|
|
343
|
+
* @returns {BaseOptionsMap}
|
|
344
|
+
*/
|
|
345
|
+
#CreateOptionsMap(_options) {
|
|
346
|
+
let store = _options.value;
|
|
347
|
+
|
|
348
|
+
return {
|
|
349
|
+
/**
|
|
350
|
+
* @template {keyof ConfigAllBaseOptions} K
|
|
351
|
+
* @param {K} k
|
|
352
|
+
* @returns {ConfigAllBaseOptions[K]}
|
|
353
|
+
*/
|
|
354
|
+
get(k) {
|
|
355
|
+
return store.get(k);
|
|
356
|
+
},
|
|
357
|
+
/**
|
|
358
|
+
* @template {keyof ConfigAllBaseOptions} K
|
|
359
|
+
* @param {K} k
|
|
360
|
+
* @param {ConfigAllBaseOptions[K]} v
|
|
361
|
+
*/
|
|
362
|
+
set(k, v) {
|
|
363
|
+
return store.set(k, v);
|
|
364
|
+
},
|
|
365
|
+
/**
|
|
366
|
+
* @template {keyof ConfigAllBaseOptions} K
|
|
367
|
+
* @param {K} k
|
|
368
|
+
* @returns {boolean}
|
|
369
|
+
*/
|
|
370
|
+
has(k) {
|
|
371
|
+
return store.has(k);
|
|
372
|
+
},
|
|
373
|
+
getAll() {
|
|
374
|
+
return Object.fromEntries(store.entries());
|
|
375
|
+
},
|
|
376
|
+
/** @param {Map<*, *>} obj */
|
|
377
|
+
setMany(obj) {
|
|
378
|
+
obj.forEach((v, k) => store.set(k, v));
|
|
379
|
+
},
|
|
380
|
+
/** @param {SunEditor.InitOptions} newMap */
|
|
381
|
+
reset(newMap) {
|
|
382
|
+
store = _options.value = newMap;
|
|
383
|
+
},
|
|
384
|
+
size() {
|
|
385
|
+
return store.size;
|
|
386
|
+
},
|
|
387
|
+
clear() {
|
|
388
|
+
store.clear();
|
|
389
|
+
},
|
|
390
|
+
};
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
/**
|
|
394
|
+
* @description Creates a utility wrapper for editor frame options.
|
|
395
|
+
* Provides get, set, has, getAll, and setMany methods with internal Map support.
|
|
396
|
+
* @param {*} _options - Origin options object
|
|
397
|
+
* @returns {FrameOptionsMap}
|
|
398
|
+
*/
|
|
399
|
+
#CreateFrameOptionsMap(_options) {
|
|
400
|
+
let store = _options.value;
|
|
401
|
+
|
|
402
|
+
return {
|
|
403
|
+
/**
|
|
404
|
+
* @template {keyof ConfigAllFrameOptions} K
|
|
405
|
+
* @param {K} k
|
|
406
|
+
* @returns {ConfigAllFrameOptions[K]}
|
|
407
|
+
*/
|
|
408
|
+
get(k) {
|
|
409
|
+
return store.get(k);
|
|
410
|
+
},
|
|
411
|
+
/**
|
|
412
|
+
* @template {keyof ConfigAllFrameOptions} K
|
|
413
|
+
* @param {K} k
|
|
414
|
+
* @param {ConfigAllFrameOptions[K]} v
|
|
415
|
+
*/
|
|
416
|
+
set(k, v) {
|
|
417
|
+
return store.set(k, v);
|
|
418
|
+
},
|
|
419
|
+
/**
|
|
420
|
+
* @template {keyof ConfigAllFrameOptions} K
|
|
421
|
+
* @param {K} k
|
|
422
|
+
* @returns {boolean}
|
|
423
|
+
*/
|
|
424
|
+
has(k) {
|
|
425
|
+
return store.has(k);
|
|
426
|
+
},
|
|
427
|
+
getAll() {
|
|
428
|
+
return Object.fromEntries(store.entries());
|
|
429
|
+
},
|
|
430
|
+
/** @param {Map<*, *>} obj */
|
|
431
|
+
setMany(obj) {
|
|
432
|
+
obj.forEach((v, k) => store.set(k, v));
|
|
433
|
+
},
|
|
434
|
+
/** @param {SunEditor.FrameOptions} newMap */
|
|
435
|
+
reset(newMap) {
|
|
436
|
+
store = _options.value = newMap;
|
|
437
|
+
},
|
|
438
|
+
size() {
|
|
439
|
+
return store.size;
|
|
440
|
+
},
|
|
441
|
+
clear() {
|
|
442
|
+
store.clear();
|
|
443
|
+
},
|
|
444
|
+
};
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
_destroy() {
|
|
448
|
+
this.#originOptions = null;
|
|
449
|
+
this.#optionsMap.clear();
|
|
450
|
+
this.#frameOptionsMap.clear();
|
|
451
|
+
}
|
|
452
|
+
}
|