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,9 +1,24 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
1
|
+
import { PluginField } from '../../interfaces';
|
|
2
|
+
import { Controller } from '../../modules/contract';
|
|
3
|
+
import { ApiManager } from '../../modules/manager';
|
|
4
|
+
import { SelectMenu } from '../../modules/ui';
|
|
3
5
|
import { dom, converter } from '../../helper';
|
|
4
6
|
|
|
5
7
|
const { debounce } = converter;
|
|
6
8
|
|
|
9
|
+
/**
|
|
10
|
+
* @typedef {Object} MentionPluginOptions
|
|
11
|
+
* @property {string} [triggerText="@"] - The character that triggers the mention list.
|
|
12
|
+
* @property {number} [limitSize=5] - The number of items to display in the mention list
|
|
13
|
+
* @property {number} [searchStartLength=0] - The number of characters to start searching for the mention list
|
|
14
|
+
* @property {number} [delayTime=200] - The time to wait before displaying the mention list
|
|
15
|
+
* @property {Array<{key: string, name: string, url: string}>} [data] - Use data without using API
|
|
16
|
+
* @property {string} [apiUrl] - The URL to call the mention list
|
|
17
|
+
* @property {Object<string, string>} [apiHeaders] - The headers to send with the API call
|
|
18
|
+
* @property {boolean} [useCachingData=true] - Whether to cache the mention list data
|
|
19
|
+
* @property {boolean} [useCachingFieldData=true] - Whether to cache the mention list data in the field
|
|
20
|
+
*/
|
|
21
|
+
|
|
7
22
|
/**
|
|
8
23
|
* @class
|
|
9
24
|
* @description Mention Plugin
|
|
@@ -12,29 +27,23 @@ const { debounce } = converter;
|
|
|
12
27
|
* - Supports fetching mention data from an API or a predefined data array.
|
|
13
28
|
* - Uses caching for optimized performance.
|
|
14
29
|
*/
|
|
15
|
-
class Mention extends
|
|
30
|
+
class Mention extends PluginField {
|
|
16
31
|
static key = 'mention';
|
|
17
|
-
static type = 'field';
|
|
18
32
|
static className = '';
|
|
19
33
|
|
|
34
|
+
#lastAtPos = 0;
|
|
35
|
+
#anchorOffset = 0;
|
|
36
|
+
#anchorNode = null;
|
|
37
|
+
|
|
20
38
|
/**
|
|
21
39
|
* @constructor
|
|
22
|
-
* @param {
|
|
23
|
-
* @param {
|
|
24
|
-
* @param {string=} [pluginOptions.triggerText="@"] The character that triggers the mention list. Default is '@'.
|
|
25
|
-
* @param {number=} [pluginOptions.limitSize=5] The number of items to display in the mention list. Default is 5.
|
|
26
|
-
* @param {number=} [pluginOptions.searchStartLength=0] The number of characters to start searching for the mention list. Default is 0.
|
|
27
|
-
* @param {number=} [pluginOptions.delayTime=200] The time to wait before displaying the mention list. Default is 200ms.
|
|
28
|
-
* @param {Array<{key: string, name: string, url: string}>=} pluginOptions.data Use data without using API.
|
|
29
|
-
* @param {string=} pluginOptions.apiUrl The URL to call the mention list. Default is ''.
|
|
30
|
-
* @param {Object<string, string>=} pluginOptions.apiHeaders The headers to send with the API call. Default is {}.
|
|
31
|
-
* @param {boolean=} [pluginOptions.useCachingData=true] Whether to cache the mention list data. Default is true.
|
|
32
|
-
* @param {boolean=} [pluginOptions.useCachingFieldData=true] Whether to cache the mention list data in the field. Default is true.
|
|
40
|
+
* @param {SunEditor.Kernel} editor - The core kernel
|
|
41
|
+
* @param {MentionPluginOptions} pluginOptions
|
|
33
42
|
*/
|
|
34
43
|
constructor(editor, pluginOptions) {
|
|
35
44
|
super(editor);
|
|
36
45
|
// plugin basic properties
|
|
37
|
-
this.title = this
|
|
46
|
+
this.title = this.$.lang.mention;
|
|
38
47
|
this.icon = 'mention';
|
|
39
48
|
|
|
40
49
|
// members
|
|
@@ -44,29 +53,26 @@ class Mention extends EditorInjector {
|
|
|
44
53
|
this.delayTime = typeof pluginOptions.delayTime === 'number' ? pluginOptions.delayTime : 200;
|
|
45
54
|
this.directData = pluginOptions.data;
|
|
46
55
|
this.apiUrl = pluginOptions.apiUrl?.replace(/\s/g, '').replace(/\{limitSize\}/i, String(this.limitSize)) || '';
|
|
47
|
-
this._delay = 0;
|
|
48
|
-
this._lastAtPos = 0;
|
|
49
|
-
this._anchorOffset = 0;
|
|
50
|
-
this._anchorNode = null;
|
|
51
56
|
// members - api, caching
|
|
52
|
-
this.apiManager = new ApiManager(this, { headers: pluginOptions.apiHeaders });
|
|
53
|
-
this.cachingData = pluginOptions.useCachingData ?? true ? new Map() : null;
|
|
54
|
-
this.cachingFieldData = pluginOptions.useCachingFieldData ?? true ? [] : null;
|
|
57
|
+
this.apiManager = new ApiManager(this, this.$, { headers: pluginOptions.apiHeaders });
|
|
58
|
+
this.cachingData = (pluginOptions.useCachingData ?? true) ? new Map() : null;
|
|
59
|
+
this.cachingFieldData = (pluginOptions.useCachingFieldData ?? true) ? [] : null;
|
|
55
60
|
|
|
56
61
|
// controller
|
|
57
62
|
const controllerEl = CreateHTML_controller();
|
|
58
|
-
this.selectMenu = new SelectMenu(this
|
|
63
|
+
this.selectMenu = new SelectMenu(this.$, { position: 'right-bottom', dir: 'ltr', closeMethod: () => this.controller.close() });
|
|
59
64
|
this.controller = new Controller(
|
|
60
65
|
this,
|
|
66
|
+
this.$,
|
|
61
67
|
controllerEl,
|
|
62
68
|
{
|
|
63
69
|
position: 'bottom',
|
|
64
70
|
initMethod: () => {
|
|
65
71
|
this.apiManager.cancel();
|
|
66
72
|
this.selectMenu.close();
|
|
67
|
-
}
|
|
73
|
+
},
|
|
68
74
|
},
|
|
69
|
-
null
|
|
75
|
+
null,
|
|
70
76
|
);
|
|
71
77
|
this.selectMenu.on(controllerEl.firstElementChild, this.#SelectMention.bind(this));
|
|
72
78
|
|
|
@@ -75,19 +81,18 @@ class Mention extends EditorInjector {
|
|
|
75
81
|
}
|
|
76
82
|
|
|
77
83
|
/**
|
|
78
|
-
* @
|
|
79
|
-
* @
|
|
80
|
-
* @returns {Promise<boolean>}
|
|
84
|
+
* @hook Editor.EventManager
|
|
85
|
+
* @type {SunEditor.Hook.Event.OnInputAsync}
|
|
81
86
|
*/
|
|
82
87
|
async onInput() {
|
|
83
88
|
if (!this.directData) {
|
|
84
89
|
this.apiManager.cancel();
|
|
85
90
|
}
|
|
86
91
|
|
|
87
|
-
const sel = this
|
|
92
|
+
const sel = this.$.selection.get();
|
|
88
93
|
if (!sel.rangeCount) {
|
|
89
94
|
this.selectMenu.close();
|
|
90
|
-
return
|
|
95
|
+
return;
|
|
91
96
|
}
|
|
92
97
|
|
|
93
98
|
const anchorNode = sel.anchorNode;
|
|
@@ -99,19 +104,19 @@ class Mention extends EditorInjector {
|
|
|
99
104
|
const mentionQuery = textBeforeCursor.substring(lastAtPos + 1, anchorOffset);
|
|
100
105
|
const beforeText = textBeforeCursor[lastAtPos - 1]?.trim();
|
|
101
106
|
if (!/\s/.test(mentionQuery) && (!beforeText || dom.check.isZeroWidth(beforeText))) {
|
|
102
|
-
if (mentionQuery.length < this.searchStartLength) return
|
|
107
|
+
if (mentionQuery.length < this.searchStartLength) return;
|
|
103
108
|
|
|
104
109
|
const anchorParent = anchorNode.parentNode;
|
|
105
110
|
if (dom.check.isAnchor(anchorParent) && !anchorParent.getAttribute('data-se-mention')) {
|
|
106
|
-
return
|
|
111
|
+
return;
|
|
107
112
|
}
|
|
108
113
|
|
|
109
114
|
try {
|
|
110
|
-
|
|
111
|
-
this
|
|
112
|
-
this
|
|
113
|
-
this
|
|
114
|
-
return
|
|
115
|
+
await this.#createMentionList(mentionQuery, anchorNode);
|
|
116
|
+
this.#lastAtPos = lastAtPos;
|
|
117
|
+
this.#anchorNode = anchorNode;
|
|
118
|
+
this.#anchorOffset = anchorOffset;
|
|
119
|
+
return;
|
|
115
120
|
} catch (error) {
|
|
116
121
|
console.warn('[SUNEDITOR.mention.api.file] ', error);
|
|
117
122
|
}
|
|
@@ -119,11 +124,9 @@ class Mention extends EditorInjector {
|
|
|
119
124
|
}
|
|
120
125
|
|
|
121
126
|
this.selectMenu.close();
|
|
122
|
-
return true;
|
|
123
127
|
}
|
|
124
128
|
|
|
125
129
|
/**
|
|
126
|
-
* @private
|
|
127
130
|
* @description Generates the mention list based on user input.
|
|
128
131
|
* - Fetches data from cache, direct data, or an API.
|
|
129
132
|
* - Creates and opens the mention dropdown.
|
|
@@ -132,7 +135,7 @@ class Mention extends EditorInjector {
|
|
|
132
135
|
* @param {Node} targetNode - The node where the mention is triggered.
|
|
133
136
|
* @returns {Promise<boolean>} - Returns `true` if the mention list is displayed, `false` otherwise.
|
|
134
137
|
*/
|
|
135
|
-
async
|
|
138
|
+
async #createMentionList(value, targetNode) {
|
|
136
139
|
const limit = this.limitSize;
|
|
137
140
|
const lowerValue = value.toLowerCase();
|
|
138
141
|
let response = null;
|
|
@@ -144,7 +147,7 @@ class Mention extends EditorInjector {
|
|
|
144
147
|
if (this.directData) {
|
|
145
148
|
response = this.directData.filter((item) => item.key.toLowerCase().startsWith(lowerValue)).slice(0, limit);
|
|
146
149
|
} else {
|
|
147
|
-
const xmlHttp = await this.apiManager.asyncCall({ method: 'GET', url: this
|
|
150
|
+
const xmlHttp = await this.apiManager.asyncCall({ method: 'GET', url: this.#createUrl(value) });
|
|
148
151
|
response = JSON.parse(xmlHttp.responseText);
|
|
149
152
|
}
|
|
150
153
|
}
|
|
@@ -190,26 +193,25 @@ class Mention extends EditorInjector {
|
|
|
190
193
|
}
|
|
191
194
|
|
|
192
195
|
/**
|
|
193
|
-
* @private
|
|
194
196
|
* @description Constructs the API request URL with the mention query.
|
|
195
197
|
* @param {string} key - The mention query text.
|
|
196
198
|
* @returns {string} - The formatted API request URL.
|
|
197
199
|
*/
|
|
198
|
-
|
|
200
|
+
#createUrl(key) {
|
|
199
201
|
return this.apiUrl.replace(/\{key\}/i, key);
|
|
200
202
|
}
|
|
201
203
|
|
|
202
204
|
/**
|
|
203
205
|
* @description Inserts a mention link into the editor when a user selects a mention from the list.
|
|
204
206
|
* @param {{ key: string, name: string, url: string }} item - The selected mention item.
|
|
205
|
-
* @returns {boolean}
|
|
207
|
+
* @returns {boolean} Returns `false` if insertion fails, otherwise completes execution.
|
|
206
208
|
*/
|
|
207
209
|
#SelectMention(item) {
|
|
208
210
|
if (!item) return false;
|
|
209
211
|
|
|
210
212
|
let oA = null;
|
|
211
213
|
const { key, name, url } = item;
|
|
212
|
-
const anchorParent = this.
|
|
214
|
+
const anchorParent = this.#anchorNode.parentNode;
|
|
213
215
|
|
|
214
216
|
if (dom.check.isAnchor(anchorParent)) {
|
|
215
217
|
oA = anchorParent;
|
|
@@ -218,16 +220,16 @@ class Mention extends EditorInjector {
|
|
|
218
220
|
oA.setAttribute('title', name);
|
|
219
221
|
oA.textContent = this.triggerText + key;
|
|
220
222
|
} else {
|
|
221
|
-
this
|
|
223
|
+
this.$.selection.setRange(this.#anchorNode, this.#lastAtPos, this.#anchorNode, this.#anchorOffset);
|
|
222
224
|
oA = dom.utils.createElement('A', { 'data-se-mention': key, href: url, title: name, target: '_blank' }, this.triggerText + key);
|
|
223
|
-
if (!this
|
|
225
|
+
if (!this.$.html.insertNode(oA, { afterNode: null, skipCharCount: false })) return false;
|
|
224
226
|
}
|
|
225
227
|
|
|
226
228
|
this.selectMenu.close();
|
|
227
229
|
|
|
228
230
|
const space = dom.utils.createTextNode('\u00A0');
|
|
229
231
|
oA.parentNode.insertBefore(space, oA.nextSibling);
|
|
230
|
-
this
|
|
232
|
+
this.$.selection.setRange(space, 1, space, 1);
|
|
231
233
|
|
|
232
234
|
if (this.cachingFieldData && !this.cachingFieldData.some((data) => data.key === item.key)) {
|
|
233
235
|
this.cachingFieldData.push(item);
|
|
@@ -235,6 +237,9 @@ class Mention extends EditorInjector {
|
|
|
235
237
|
}
|
|
236
238
|
}
|
|
237
239
|
|
|
240
|
+
/**
|
|
241
|
+
* @returns {HTMLElement}
|
|
242
|
+
*/
|
|
238
243
|
function CreateHTML_controller() {
|
|
239
244
|
return dom.utils.createElement('DIV', { class: 'se-controller se-empty-controller' }, '<div></div>');
|
|
240
245
|
}
|
package/src/plugins/index.js
CHANGED
|
@@ -16,7 +16,7 @@ import backgroundColor from './dropdown/backgroundColor';
|
|
|
16
16
|
import hr from './dropdown/hr';
|
|
17
17
|
import list from './dropdown/list';
|
|
18
18
|
import table from './dropdown/table';
|
|
19
|
-
import
|
|
19
|
+
import blockStyle from './dropdown/blockStyle';
|
|
20
20
|
import layout from './dropdown/layout';
|
|
21
21
|
import lineHeight from './dropdown/lineHeight';
|
|
22
22
|
import template from './dropdown/template';
|
|
@@ -59,7 +59,7 @@ export {
|
|
|
59
59
|
backgroundColor,
|
|
60
60
|
list,
|
|
61
61
|
table,
|
|
62
|
-
|
|
62
|
+
blockStyle,
|
|
63
63
|
hr,
|
|
64
64
|
layout,
|
|
65
65
|
lineHeight,
|
|
@@ -80,7 +80,7 @@ export {
|
|
|
80
80
|
fileBrowser,
|
|
81
81
|
fontSize,
|
|
82
82
|
pageNavigator,
|
|
83
|
-
anchor
|
|
83
|
+
anchor,
|
|
84
84
|
};
|
|
85
85
|
export default {
|
|
86
86
|
blockquote,
|
|
@@ -95,7 +95,7 @@ export default {
|
|
|
95
95
|
backgroundColor,
|
|
96
96
|
list,
|
|
97
97
|
table,
|
|
98
|
-
|
|
98
|
+
blockStyle,
|
|
99
99
|
hr,
|
|
100
100
|
layout,
|
|
101
101
|
lineHeight,
|
|
@@ -116,5 +116,5 @@ export default {
|
|
|
116
116
|
fileBrowser,
|
|
117
117
|
fontSize,
|
|
118
118
|
pageNavigator,
|
|
119
|
-
anchor
|
|
119
|
+
anchor,
|
|
120
120
|
};
|