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,44 +1,42 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { Browser } from '../../modules';
|
|
1
|
+
import { PluginBrowser } from '../../interfaces';
|
|
2
|
+
import { Browser } from '../../modules/contract';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
* @typedef {
|
|
5
|
+
* @typedef {Object} FileBrowserPluginOptions
|
|
6
|
+
* @property {Object<string, *>|Array<*>} [data] - Direct data without server calls
|
|
7
|
+
* @property {string} [url] - Server request URL
|
|
8
|
+
* @property {Object<string, string>} [headers] - Server request headers
|
|
9
|
+
* @property {string|((item: SunEditor.Module.Browser.File) => string)} [thumbnail] - Default thumbnail
|
|
10
|
+
* @property {Array<string>} [props] - Additional tag names
|
|
6
11
|
*/
|
|
7
12
|
|
|
8
13
|
/**
|
|
9
14
|
* @class
|
|
10
|
-
* @extends EditorInjector
|
|
11
15
|
* @description File browser plugin. Can contain any media type.
|
|
12
16
|
*/
|
|
13
|
-
class FileBrowser extends
|
|
17
|
+
class FileBrowser extends PluginBrowser {
|
|
14
18
|
static key = 'fileBrowser';
|
|
15
|
-
static type = 'browser';
|
|
16
19
|
static className = '';
|
|
17
20
|
|
|
18
21
|
/**
|
|
19
22
|
* @constructor
|
|
20
|
-
* @param {
|
|
21
|
-
* @param {
|
|
22
|
-
* @param {Object<string, *>|Array<*>=} pluginOptions.data - direct data without server calls
|
|
23
|
-
* @param {string} pluginOptions.url - server request url
|
|
24
|
-
* @param {Object<string, string>=} pluginOptions.headers - server request headers
|
|
25
|
-
* @param {string|((item: BrowserFile_fileBrowser) => string)} pluginOptions.thumbnail - default thumbnail
|
|
26
|
-
* @param {Array<string>} pluginOptions.props - additional tag names
|
|
23
|
+
* @param {SunEditor.Kernel} editor - The core kernel
|
|
24
|
+
* @param {FileBrowserPluginOptions} pluginOptions
|
|
27
25
|
*/
|
|
28
26
|
constructor(editor, pluginOptions) {
|
|
29
27
|
// plugin bisic properties
|
|
30
28
|
super(editor);
|
|
31
|
-
this.title = this
|
|
29
|
+
this.title = this.$.lang.fileBrowser;
|
|
32
30
|
this.icon = 'file_browser';
|
|
33
31
|
|
|
34
32
|
// members
|
|
35
33
|
this.onSelectfunction = null;
|
|
36
34
|
|
|
37
35
|
// modules
|
|
38
|
-
const thumbnail = { video: this
|
|
39
|
-
const defaultThumbnail = this
|
|
40
|
-
this.browser = new Browser(this, {
|
|
41
|
-
title: this
|
|
36
|
+
const thumbnail = { video: this.$.icons.video_thumbnail, audio: this.$.icons.audio_thumbnail, file: this.$.icons.file_thumbnail };
|
|
37
|
+
const defaultThumbnail = this.$.icons.file_thumbnail;
|
|
38
|
+
this.browser = new Browser(this, this.$, {
|
|
39
|
+
title: this.$.lang.fileBrowser,
|
|
42
40
|
data: pluginOptions.data,
|
|
43
41
|
url: pluginOptions.url,
|
|
44
42
|
headers: pluginOptions.headers,
|
|
@@ -46,14 +44,13 @@ class FileBrowser extends EditorInjector {
|
|
|
46
44
|
columnSize: 4,
|
|
47
45
|
className: 'se-file-browser',
|
|
48
46
|
thumbnail: typeof pluginOptions.thumbnail === 'function' ? pluginOptions.thumbnail : (item) => thumbnail[item.type] || defaultThumbnail,
|
|
49
|
-
props: [...new Set((pluginOptions.props ?? []).concat(['frame']))]
|
|
47
|
+
props: [...new Set((pluginOptions.props ?? []).concat(['frame']))],
|
|
50
48
|
});
|
|
51
49
|
}
|
|
52
50
|
|
|
53
51
|
/**
|
|
54
|
-
* @
|
|
55
|
-
* @
|
|
56
|
-
* @param {?(targe: Node) => *=} onSelectfunction method to be executed after selecting an item in the gallery
|
|
52
|
+
* @override
|
|
53
|
+
* @type {PluginBrowser['open']}
|
|
57
54
|
*/
|
|
58
55
|
open(onSelectfunction) {
|
|
59
56
|
this.onSelectfunction = onSelectfunction;
|
|
@@ -61,8 +58,8 @@ class FileBrowser extends EditorInjector {
|
|
|
61
58
|
}
|
|
62
59
|
|
|
63
60
|
/**
|
|
64
|
-
* @
|
|
65
|
-
* @
|
|
61
|
+
* @override
|
|
62
|
+
* @type {PluginBrowser['close']}
|
|
66
63
|
*/
|
|
67
64
|
close() {
|
|
68
65
|
this.onSelectfunction = null;
|
|
@@ -80,19 +77,19 @@ class FileBrowser extends EditorInjector {
|
|
|
80
77
|
const type = target.getAttribute('data-type');
|
|
81
78
|
switch (type) {
|
|
82
79
|
case 'image': {
|
|
83
|
-
this
|
|
80
|
+
this.$.plugins.imageGallery.browser.selectorHandler(target);
|
|
84
81
|
break;
|
|
85
82
|
}
|
|
86
83
|
case 'video': {
|
|
87
|
-
this
|
|
84
|
+
this.$.plugins.videoGallery.browser.selectorHandler(target);
|
|
88
85
|
break;
|
|
89
86
|
}
|
|
90
87
|
case 'audio': {
|
|
91
|
-
this
|
|
88
|
+
this.$.plugins.audioGallery.browser.selectorHandler(target);
|
|
92
89
|
break;
|
|
93
90
|
}
|
|
94
91
|
case 'file': {
|
|
95
|
-
this
|
|
92
|
+
this.$.plugins.fileGallery.browser.selectorHandler(target);
|
|
96
93
|
break;
|
|
97
94
|
}
|
|
98
95
|
}
|
|
@@ -1,56 +1,53 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { Browser } from '../../modules';
|
|
1
|
+
import { PluginBrowser } from '../../interfaces';
|
|
2
|
+
import { Browser } from '../../modules/contract';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
* @typedef {
|
|
5
|
+
* @typedef {Object} FileGalleryPluginOptions
|
|
6
|
+
* @property {Array<SunEditor.Module.Browser.File>} [data] - Direct data without server calls
|
|
7
|
+
* @property {string} [url] - Server request URL
|
|
8
|
+
* @property {Object<string, string>} [headers] - Server request headers
|
|
9
|
+
* @property {string|((item: SunEditor.Module.Browser.File) => string)} [thumbnail] - Default thumbnail
|
|
6
10
|
*/
|
|
7
11
|
|
|
8
12
|
/**
|
|
9
13
|
* @class
|
|
10
|
-
* @extends EditorInjector
|
|
11
14
|
* @description File gallery plugin
|
|
12
15
|
*/
|
|
13
|
-
class FileGallery extends
|
|
16
|
+
class FileGallery extends PluginBrowser {
|
|
14
17
|
static key = 'fileGallery';
|
|
15
|
-
static type = 'browser';
|
|
16
18
|
static className = '';
|
|
17
19
|
|
|
18
20
|
/**
|
|
19
21
|
* @constructor
|
|
20
|
-
* @param {
|
|
21
|
-
* @param {
|
|
22
|
-
* @param {Array<*>=} pluginOptions.data - direct data without server calls
|
|
23
|
-
* @param {string} pluginOptions.url - server request url
|
|
24
|
-
* @param {Object<string, string>=} pluginOptions.headers - server request headers
|
|
25
|
-
* @param {string|((item: BrowserFile_fileGallery) => string)} pluginOptions.thumbnail - default thumbnail
|
|
22
|
+
* @param {SunEditor.Kernel} editor - The core kernel
|
|
23
|
+
* @param {FileGalleryPluginOptions} pluginOptions
|
|
26
24
|
*/
|
|
27
25
|
constructor(editor, pluginOptions) {
|
|
28
26
|
// plugin bisic properties
|
|
29
27
|
super(editor);
|
|
30
|
-
this.title = this
|
|
28
|
+
this.title = this.$.lang.fileGallery;
|
|
31
29
|
this.icon = 'file_gallery';
|
|
32
30
|
|
|
33
31
|
// members
|
|
34
32
|
this.onSelectfunction = null;
|
|
35
33
|
|
|
36
34
|
// modules
|
|
37
|
-
const thumbnail = typeof pluginOptions.thumbnail === 'string' ? pluginOptions.thumbnail : this
|
|
38
|
-
this.browser = new Browser(this, {
|
|
39
|
-
title: this
|
|
35
|
+
const thumbnail = typeof pluginOptions.thumbnail === 'string' ? pluginOptions.thumbnail : this.$.icons.file_thumbnail;
|
|
36
|
+
this.browser = new Browser(this, this.$, {
|
|
37
|
+
title: this.$.lang.fileGallery,
|
|
40
38
|
data: pluginOptions.data,
|
|
41
39
|
url: pluginOptions.url,
|
|
42
40
|
headers: pluginOptions.headers,
|
|
43
41
|
selectorHandler: this.#SetItem.bind(this),
|
|
44
42
|
columnSize: 4,
|
|
45
43
|
className: 'se-file-gallery',
|
|
46
|
-
thumbnail: typeof pluginOptions.thumbnail === 'function' ? pluginOptions.thumbnail : () => thumbnail
|
|
44
|
+
thumbnail: typeof pluginOptions.thumbnail === 'function' ? pluginOptions.thumbnail : () => thumbnail,
|
|
47
45
|
});
|
|
48
46
|
}
|
|
49
47
|
|
|
50
48
|
/**
|
|
51
|
-
* @
|
|
52
|
-
* @
|
|
53
|
-
* @param {?(targe: Node) => *=} onSelectfunction method to be executed after selecting an item in the gallery
|
|
49
|
+
* @override
|
|
50
|
+
* @type {PluginBrowser['open']}
|
|
54
51
|
*/
|
|
55
52
|
open(onSelectfunction) {
|
|
56
53
|
this.onSelectfunction = onSelectfunction;
|
|
@@ -58,8 +55,8 @@ class FileGallery extends EditorInjector {
|
|
|
58
55
|
}
|
|
59
56
|
|
|
60
57
|
/**
|
|
61
|
-
* @
|
|
62
|
-
* @
|
|
58
|
+
* @override
|
|
59
|
+
* @type {PluginBrowser['close']}
|
|
63
60
|
*/
|
|
64
61
|
close() {
|
|
65
62
|
this.onSelectfunction = null;
|
|
@@ -75,7 +72,7 @@ class FileGallery extends EditorInjector {
|
|
|
75
72
|
this.onSelectfunction(target);
|
|
76
73
|
} else {
|
|
77
74
|
const file = { name: target.getAttribute('data-name'), size: 0 };
|
|
78
|
-
this
|
|
75
|
+
this.$.plugins.fileUpload.create(target.getAttribute('data-command'), file, true);
|
|
79
76
|
}
|
|
80
77
|
}
|
|
81
78
|
}
|
|
@@ -1,53 +1,54 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { Browser } from '../../modules';
|
|
1
|
+
import { PluginBrowser } from '../../interfaces';
|
|
2
|
+
import { Browser } from '../../modules/contract';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @typedef ImageGalleryPluginOptions
|
|
6
|
+
* @property {Array<*>} [data] - Direct data without server calls
|
|
7
|
+
* @property {string} [url] - Server request URL
|
|
8
|
+
* @property {Object<string, string>} [headers] - Server request headers
|
|
9
|
+
*/
|
|
3
10
|
|
|
4
11
|
/**
|
|
5
12
|
* @class
|
|
6
|
-
* @extends EditorInjector
|
|
7
13
|
* @description Image gallery plugin
|
|
8
14
|
*/
|
|
9
|
-
class ImageGallery extends
|
|
15
|
+
class ImageGallery extends PluginBrowser {
|
|
10
16
|
static key = 'imageGallery';
|
|
11
|
-
static type = 'browser';
|
|
12
17
|
static className = '';
|
|
13
18
|
|
|
14
19
|
/**
|
|
15
20
|
* @constructor
|
|
16
|
-
* @param {
|
|
17
|
-
* @param {
|
|
18
|
-
* @param {Array<*>=} pluginOptions.data - direct data without server calls
|
|
19
|
-
* @param {string=} pluginOptions.url - server request url
|
|
20
|
-
* @param {Object<string, string>=} pluginOptions.headers - server request headers
|
|
21
|
+
* @param {SunEditor.Kernel} editor - The core kernel
|
|
22
|
+
* @param {ImageGalleryPluginOptions} pluginOptions
|
|
21
23
|
*/
|
|
22
24
|
constructor(editor, pluginOptions) {
|
|
23
25
|
// plugin bisic properties
|
|
24
26
|
super(editor);
|
|
25
|
-
this.title = this
|
|
27
|
+
this.title = this.$.lang.imageGallery;
|
|
26
28
|
this.icon = 'image_gallery';
|
|
27
29
|
|
|
28
30
|
// members
|
|
29
31
|
this.onSelectfunction = null;
|
|
30
32
|
|
|
31
33
|
// modules
|
|
32
|
-
this.browser = new Browser(this, {
|
|
33
|
-
title: this
|
|
34
|
+
this.browser = new Browser(this, this.$, {
|
|
35
|
+
title: this.$.lang.imageGallery,
|
|
34
36
|
data: pluginOptions.data,
|
|
35
37
|
url: pluginOptions.url,
|
|
36
38
|
headers: pluginOptions.headers,
|
|
37
39
|
selectorHandler: this.#SetItem.bind(this),
|
|
38
40
|
columnSize: 4,
|
|
39
|
-
className: 'se-image-gallery'
|
|
41
|
+
className: 'se-image-gallery',
|
|
40
42
|
});
|
|
41
43
|
|
|
42
44
|
// members
|
|
43
|
-
this.width = this
|
|
44
|
-
this.height = this
|
|
45
|
+
this.width = this.$.plugins.image.pluginOptions.defaultWidth === 'auto' ? '' : this.$.plugins.image.pluginOptions.defaultWidth;
|
|
46
|
+
this.height = this.$.plugins.image.pluginOptions.defaultHeight === 'auto' ? '' : this.$.plugins.image.pluginOptions.defaultHeight;
|
|
45
47
|
}
|
|
46
48
|
|
|
47
49
|
/**
|
|
48
|
-
* @
|
|
49
|
-
* @
|
|
50
|
-
* @param {?(targe: Node) => *=} onSelectfunction method to be executed after selecting an item in the gallery
|
|
50
|
+
* @override
|
|
51
|
+
* @type {PluginBrowser['open']}
|
|
51
52
|
*/
|
|
52
53
|
open(onSelectfunction) {
|
|
53
54
|
this.onSelectfunction = onSelectfunction;
|
|
@@ -55,8 +56,8 @@ class ImageGallery extends EditorInjector {
|
|
|
55
56
|
}
|
|
56
57
|
|
|
57
58
|
/**
|
|
58
|
-
* @
|
|
59
|
-
* @
|
|
59
|
+
* @override
|
|
60
|
+
* @type {PluginBrowser['close']}
|
|
60
61
|
*/
|
|
61
62
|
close() {
|
|
62
63
|
this.onSelectfunction = null;
|
|
@@ -72,8 +73,8 @@ class ImageGallery extends EditorInjector {
|
|
|
72
73
|
this.onSelectfunction(target);
|
|
73
74
|
} else {
|
|
74
75
|
const file = { name: target.getAttribute('data-name'), size: 0 };
|
|
75
|
-
this
|
|
76
|
-
this
|
|
76
|
+
this.$.plugins.image.modalInit();
|
|
77
|
+
this.$.plugins.image.create(target.getAttribute('data-command'), null, this.width, this.height, 'none', file, target.alt, true);
|
|
77
78
|
}
|
|
78
79
|
}
|
|
79
80
|
}
|
|
@@ -1,42 +1,40 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { Browser } from '../../modules';
|
|
1
|
+
import { PluginBrowser } from '../../interfaces';
|
|
2
|
+
import { Browser } from '../../modules/contract';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
* @typedef {
|
|
5
|
+
* @typedef {Object} VideoGalleryPluginOptions
|
|
6
|
+
* @property {Array<SunEditor.Module.Browser.File>} [data] - Direct data without server calls
|
|
7
|
+
* @property {string} [url] - Server request URL
|
|
8
|
+
* @property {Object<string, string>} [headers] - Server request headers
|
|
9
|
+
* @property {string|((item: SunEditor.Module.Browser.File) => string)} [thumbnail] - Default thumbnail
|
|
6
10
|
*/
|
|
7
11
|
|
|
8
12
|
/**
|
|
9
13
|
* @class
|
|
10
|
-
* @extends EditorInjector
|
|
11
14
|
* @description Video gallery plugin
|
|
12
15
|
*/
|
|
13
|
-
class VideoGallery extends
|
|
16
|
+
class VideoGallery extends PluginBrowser {
|
|
14
17
|
static key = 'videoGallery';
|
|
15
|
-
static type = 'browser';
|
|
16
18
|
static className = '';
|
|
17
19
|
|
|
18
20
|
/**
|
|
19
21
|
* @constructor
|
|
20
|
-
* @param {
|
|
21
|
-
* @param {
|
|
22
|
-
* @param {Array<*>=} pluginOptions.data - direct data without server calls
|
|
23
|
-
* @param {string=} pluginOptions.url - server request url
|
|
24
|
-
* @param {Object<string, string>=} pluginOptions.headers - server request headers
|
|
25
|
-
* @param {string|((item: BrowserFile_videoGallery) => string)} pluginOptions.thumbnail - default thumbnail
|
|
22
|
+
* @param {SunEditor.Kernel} editor - The core kernel
|
|
23
|
+
* @param {VideoGalleryPluginOptions} pluginOptions
|
|
26
24
|
*/
|
|
27
25
|
constructor(editor, pluginOptions) {
|
|
28
26
|
// plugin bisic properties
|
|
29
27
|
super(editor);
|
|
30
|
-
this.title = this
|
|
28
|
+
this.title = this.$.lang.videoGallery;
|
|
31
29
|
this.icon = 'video_gallery';
|
|
32
30
|
|
|
33
31
|
// members
|
|
34
32
|
this.onSelectfunction = null;
|
|
35
33
|
|
|
36
34
|
// modules
|
|
37
|
-
const thumbnail = typeof pluginOptions.thumbnail === 'string' ? pluginOptions.thumbnail : this
|
|
38
|
-
this.browser = new Browser(this, {
|
|
39
|
-
title: this
|
|
35
|
+
const thumbnail = typeof pluginOptions.thumbnail === 'string' ? pluginOptions.thumbnail : this.$.icons.video_thumbnail;
|
|
36
|
+
this.browser = new Browser(this, this.$, {
|
|
37
|
+
title: this.$.lang.videoGallery,
|
|
40
38
|
data: pluginOptions.data,
|
|
41
39
|
url: pluginOptions.url,
|
|
42
40
|
headers: pluginOptions.headers,
|
|
@@ -44,18 +42,17 @@ class VideoGallery extends EditorInjector {
|
|
|
44
42
|
columnSize: 4,
|
|
45
43
|
className: 'se-video-gallery',
|
|
46
44
|
thumbnail: typeof pluginOptions.thumbnail === 'function' ? pluginOptions.thumbnail : () => thumbnail,
|
|
47
|
-
props: ['frame']
|
|
45
|
+
props: ['frame'],
|
|
48
46
|
});
|
|
49
47
|
|
|
50
48
|
// members
|
|
51
|
-
this.width = this
|
|
52
|
-
this.height = this
|
|
49
|
+
this.width = this.$.plugins.video.pluginOptions.defaultWidth === 'auto' ? '' : this.$.plugins.video.pluginOptions.defaultWidth;
|
|
50
|
+
this.height = this.$.plugins.video.pluginOptions.defaultHeight === 'auto' ? '' : this.$.plugins.video.pluginOptions.defaultHeight;
|
|
53
51
|
}
|
|
54
52
|
|
|
55
53
|
/**
|
|
56
|
-
* @
|
|
57
|
-
* @
|
|
58
|
-
* @param {?(targe: Node) => *=} onSelectfunction method to be executed after selecting an item in the gallery
|
|
54
|
+
* @override
|
|
55
|
+
* @type {PluginBrowser['open']}
|
|
59
56
|
*/
|
|
60
57
|
open(onSelectfunction) {
|
|
61
58
|
this.onSelectfunction = onSelectfunction;
|
|
@@ -63,8 +60,8 @@ class VideoGallery extends EditorInjector {
|
|
|
63
60
|
}
|
|
64
61
|
|
|
65
62
|
/**
|
|
66
|
-
* @
|
|
67
|
-
* @
|
|
63
|
+
* @override
|
|
64
|
+
* @type {PluginBrowser['close']}
|
|
68
65
|
*/
|
|
69
66
|
close() {
|
|
70
67
|
this.onSelectfunction = null;
|
|
@@ -80,21 +77,22 @@ class VideoGallery extends EditorInjector {
|
|
|
80
77
|
this.onSelectfunction(target);
|
|
81
78
|
} else {
|
|
82
79
|
let url = target.getAttribute('data-command');
|
|
83
|
-
const processUrl = this
|
|
80
|
+
const processUrl = this.$.plugins.video.findProcessUrl(url);
|
|
84
81
|
if (processUrl) {
|
|
85
82
|
url = processUrl.url;
|
|
86
83
|
}
|
|
87
84
|
|
|
88
85
|
const file = { name: target.getAttribute('data-name'), size: 0 };
|
|
89
|
-
this
|
|
90
|
-
this
|
|
91
|
-
this
|
|
86
|
+
this.$.plugins.video.modalInit();
|
|
87
|
+
this.$.plugins.video.create(
|
|
88
|
+
this.$.plugins.video[target.getAttribute('data-frame') === 'iframe' ? 'createIframeTag' : 'createVideoTag']({ poster: target.getAttribute('data-thumbnail') }),
|
|
92
89
|
url,
|
|
93
90
|
null,
|
|
94
91
|
this.width,
|
|
95
92
|
this.height,
|
|
96
93
|
false,
|
|
97
|
-
file
|
|
94
|
+
file,
|
|
95
|
+
true,
|
|
98
96
|
);
|
|
99
97
|
}
|
|
100
98
|
}
|
|
@@ -1,23 +1,22 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { PluginCommand } from '../../interfaces';
|
|
2
2
|
import { dom } from '../../helper';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* @class
|
|
6
6
|
* @description Blockquote plugin
|
|
7
7
|
*/
|
|
8
|
-
class Blockquote extends
|
|
8
|
+
class Blockquote extends PluginCommand {
|
|
9
9
|
static key = 'blockquote';
|
|
10
|
-
static type = 'command';
|
|
11
10
|
static className = '';
|
|
12
11
|
|
|
13
12
|
/**
|
|
14
13
|
* @constructor
|
|
15
|
-
* @param {
|
|
14
|
+
* @param {SunEditor.Kernel} editor - The core kernel
|
|
16
15
|
*/
|
|
17
16
|
constructor(editor) {
|
|
18
17
|
super(editor);
|
|
19
18
|
// plugin basic properties
|
|
20
|
-
this.title = this
|
|
19
|
+
this.title = this.$.lang.tag_blockquote;
|
|
21
20
|
this.icon = 'blockquote';
|
|
22
21
|
|
|
23
22
|
// members
|
|
@@ -25,12 +24,8 @@ class Blockquote extends EditorInjector {
|
|
|
25
24
|
}
|
|
26
25
|
|
|
27
26
|
/**
|
|
28
|
-
* @
|
|
29
|
-
* @
|
|
30
|
-
* @param {?HTMLElement=} element - Node element where the cursor is currently located
|
|
31
|
-
* @param {?HTMLElement=} target - The plugin's toolbar button element
|
|
32
|
-
* @returns {boolean} - Whether the plugin is active
|
|
33
|
-
* - If it returns "undefined", it will no longer be called in this scope.
|
|
27
|
+
* @hook Editor.EventManager
|
|
28
|
+
* @type {SunEditor.Hook.Event.Active}
|
|
34
29
|
*/
|
|
35
30
|
active(element, target) {
|
|
36
31
|
if (/blockquote/i.test(element?.nodeName)) {
|
|
@@ -43,17 +38,16 @@ class Blockquote extends EditorInjector {
|
|
|
43
38
|
}
|
|
44
39
|
|
|
45
40
|
/**
|
|
46
|
-
* @
|
|
47
|
-
* @
|
|
48
|
-
* - It is executed by clicking a toolbar "command" button or calling an API.
|
|
41
|
+
* @override
|
|
42
|
+
* @type {PluginCommand['action']}
|
|
49
43
|
*/
|
|
50
44
|
action() {
|
|
51
|
-
const currentBlockquote = dom.query.getParentElement(this
|
|
45
|
+
const currentBlockquote = dom.query.getParentElement(this.$.selection.getNode(), 'blockquote');
|
|
52
46
|
|
|
53
47
|
if (currentBlockquote) {
|
|
54
|
-
this
|
|
48
|
+
this.$.format.removeBlock(currentBlockquote, { selectedFormats: null, newBlockElement: null, shouldDelete: false, skipHistory: false });
|
|
55
49
|
} else {
|
|
56
|
-
this
|
|
50
|
+
this.$.format.applyBlock(this.quoteTag.cloneNode(false));
|
|
57
51
|
}
|
|
58
52
|
}
|
|
59
53
|
}
|
|
@@ -1,29 +1,32 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { PluginCommand } from '../../interfaces';
|
|
2
2
|
import { dom, env } from '../../helper';
|
|
3
|
-
import { ApiManager } from '../../modules';
|
|
3
|
+
import { ApiManager } from '../../modules/manager';
|
|
4
4
|
|
|
5
5
|
const { _w, _d } = env;
|
|
6
6
|
|
|
7
|
+
/**
|
|
8
|
+
* @typedef ExportPDFPluginOptions
|
|
9
|
+
* @property {string} apiUrl - Server request URL for PDF generation
|
|
10
|
+
* @property {string} [fileName="suneditor-pdf"] - Name of the generated PDF file
|
|
11
|
+
*/
|
|
12
|
+
|
|
7
13
|
/**
|
|
8
14
|
* @class
|
|
9
15
|
* @description Export PDF plugin
|
|
10
16
|
*/
|
|
11
|
-
class ExportPDF extends
|
|
17
|
+
class ExportPDF extends PluginCommand {
|
|
12
18
|
static key = 'exportPDF';
|
|
13
|
-
static type = 'command';
|
|
14
19
|
static className = 'se-component-enabled';
|
|
15
20
|
|
|
16
21
|
/**
|
|
17
22
|
* @constructor
|
|
18
|
-
* @param {
|
|
19
|
-
* @param {
|
|
20
|
-
* @param {string} pluginOptions.apiUrl - server request url
|
|
21
|
-
* @param {string} pluginOptions.fileName - file name
|
|
23
|
+
* @param {SunEditor.Kernel} editor - The core kernel
|
|
24
|
+
* @param {ExportPDFPluginOptions} pluginOptions - plugin options
|
|
22
25
|
*/
|
|
23
26
|
constructor(editor, pluginOptions) {
|
|
24
27
|
super(editor);
|
|
25
28
|
// plugin basic properties
|
|
26
|
-
this.title = this
|
|
29
|
+
this.title = this.$.lang.exportPDF;
|
|
27
30
|
this.icon = 'PDF';
|
|
28
31
|
|
|
29
32
|
// plugin options
|
|
@@ -34,22 +37,20 @@ class ExportPDF extends EditorInjector {
|
|
|
34
37
|
if (!this.apiUrl) {
|
|
35
38
|
console.warn('[SUNEDITOR.plugins.exportPDF.error] Requires exportPDF."apiUrl" options.');
|
|
36
39
|
} else {
|
|
37
|
-
this.apiManager = new ApiManager(this, {
|
|
40
|
+
this.apiManager = new ApiManager(this, this.$, {
|
|
38
41
|
method: 'POST',
|
|
39
42
|
url: this.apiUrl,
|
|
40
43
|
headers: {
|
|
41
|
-
'Content-Type': 'application/json'
|
|
44
|
+
'Content-Type': 'application/json',
|
|
42
45
|
},
|
|
43
|
-
responseType: 'blob'
|
|
46
|
+
responseType: 'blob',
|
|
44
47
|
});
|
|
45
48
|
}
|
|
46
49
|
}
|
|
47
50
|
|
|
48
51
|
/**
|
|
49
|
-
* @
|
|
50
|
-
* @
|
|
51
|
-
* - It is executed by clicking a toolbar "command" button or calling an API.
|
|
52
|
-
* @returns {Promise<void>}
|
|
52
|
+
* @override
|
|
53
|
+
* @type {PluginCommand['action']}
|
|
53
54
|
*/
|
|
54
55
|
async action() {
|
|
55
56
|
if (!this.apiUrl) {
|
|
@@ -57,16 +58,16 @@ class ExportPDF extends EditorInjector {
|
|
|
57
58
|
return;
|
|
58
59
|
}
|
|
59
60
|
|
|
60
|
-
this
|
|
61
|
+
this.$.ui.showLoading();
|
|
61
62
|
let ww = null;
|
|
62
63
|
|
|
63
64
|
try {
|
|
64
|
-
const standardWW = this
|
|
65
|
+
const standardWW = this.$.frameContext.get('documentTypePageMirror') || this.$.frameContext.get('wysiwygFrame');
|
|
65
66
|
const editableDiv = dom.utils.createElement('div', { class: standardWW.className }, standardWW.innerHTML);
|
|
66
67
|
ww = dom.utils.createElement('div', { style: `position: absolute; top: -10000px; left: -10000px; width: 21cm; columns: 21cm; height: auto;` }, editableDiv);
|
|
67
68
|
|
|
68
|
-
const innerPadding =
|
|
69
|
-
const inlineWW = dom.utils.applyInlineStylesAll(editableDiv, true, this
|
|
69
|
+
const innerPadding = _w.getComputedStyle(standardWW).padding;
|
|
70
|
+
const inlineWW = dom.utils.applyInlineStylesAll(editableDiv, true, this.$.options.get('allUsedStyles'));
|
|
70
71
|
inlineWW.style.padding = inlineWW.style.paddingTop = inlineWW.style.paddingBottom = inlineWW.style.paddingLeft = inlineWW.style.paddingRight = '0';
|
|
71
72
|
ww.innerHTML = `
|
|
72
73
|
<style>
|
|
@@ -80,30 +81,29 @@ class ExportPDF extends EditorInjector {
|
|
|
80
81
|
_d.body.appendChild(ww);
|
|
81
82
|
|
|
82
83
|
// before event
|
|
83
|
-
if ((await this.triggerEvent('onExportPDFBefore', { target: ww })) === false) return;
|
|
84
|
+
if ((await this.$.eventManager.triggerEvent('onExportPDFBefore', { target: ww })) === false) return;
|
|
84
85
|
|
|
85
86
|
// at server
|
|
86
|
-
await this
|
|
87
|
+
await this.#createByServer(ww);
|
|
87
88
|
return;
|
|
88
89
|
} catch (error) {
|
|
89
90
|
console.error('[SUNEDITOR.plugins.exportPDF.error]', error.message);
|
|
90
91
|
} finally {
|
|
91
92
|
dom.utils.removeItem(ww);
|
|
92
|
-
this
|
|
93
|
+
this.$.ui.hideLoading();
|
|
93
94
|
}
|
|
94
95
|
}
|
|
95
96
|
|
|
96
97
|
/**
|
|
97
|
-
* @private
|
|
98
98
|
* @description Sends the editor content to the server for PDF generation.
|
|
99
99
|
* @param {HTMLElement} ww - A temporary container holding the formatted editor content.
|
|
100
100
|
* @returns {Promise<void>} Resolves when the PDF file is successfully downloaded.
|
|
101
101
|
* @throws {Error} Throws an error if the server response indicates a failure.
|
|
102
102
|
*/
|
|
103
|
-
async
|
|
103
|
+
async #createByServer(ww) {
|
|
104
104
|
const data = {
|
|
105
105
|
fileName: this.fileName,
|
|
106
|
-
htmlContent: ww.innerHTML
|
|
106
|
+
htmlContent: ww.innerHTML,
|
|
107
107
|
};
|
|
108
108
|
|
|
109
109
|
const xhr = await this.apiManager.asyncCall({ data: JSON.stringify(data) });
|