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,15 +1,15 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { Modal, Controller } from '../../modules';
|
|
1
|
+
import { PluginModal } from '../../interfaces';
|
|
2
|
+
import { Modal, Controller } from '../../modules/contract';
|
|
3
3
|
import { dom, env, converter } from '../../helper';
|
|
4
4
|
|
|
5
|
-
const { _w } = env;
|
|
5
|
+
const { _w, _d } = env;
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* @typedef {Object} MathPluginOptions
|
|
9
9
|
* @property {boolean} [canResize=true] - Whether the math modal can be resized.
|
|
10
10
|
* @property {boolean} [autoHeight=false] - Whether to automatically adjust the height of the modal.
|
|
11
11
|
* @property {Array<object>} [fontSizeList] - A list of font size options for rendering math expressions.
|
|
12
|
-
* @property {(...args: *) => *} [onPaste] - A callback function to handle paste events in the math input area.
|
|
12
|
+
* @property {?(...args: *) => *} [onPaste] - A callback function to handle paste events in the math input area.
|
|
13
13
|
* @property {Object} [formSize={}] - An object specifying the dimensions for the math modal.
|
|
14
14
|
* @property {string} [formSize.width="460px"] - The default width of the math modal.
|
|
15
15
|
* @property {string} [formSize.height="14em"] - The default height of the math modal.
|
|
@@ -22,31 +22,32 @@ const { _w } = env;
|
|
|
22
22
|
/**
|
|
23
23
|
* @class
|
|
24
24
|
* @description Math plugin.
|
|
25
|
-
* - This plugin provides support for rendering mathematical expressions using either the KaTeX or MathJax libraries.
|
|
25
|
+
* - This plugin provides support for rendering mathematical expressions using either the `KaTeX` or `MathJax` libraries.
|
|
26
26
|
* - If external library is provided, a warning is issued.
|
|
27
27
|
*/
|
|
28
|
-
class Math_ extends
|
|
28
|
+
class Math_ extends PluginModal {
|
|
29
29
|
static key = 'math';
|
|
30
|
-
static type = 'modal';
|
|
31
30
|
static className = '';
|
|
31
|
+
|
|
32
32
|
/**
|
|
33
|
-
* @this {Math_}
|
|
34
33
|
* @param {HTMLElement} node - The node to check.
|
|
35
34
|
* @returns {HTMLElement|null} Returns a node if the node is a valid component.
|
|
36
35
|
*/
|
|
37
36
|
static component(node) {
|
|
38
|
-
return dom.utils.hasClass(node, 'se-math|katex') && dom.
|
|
37
|
+
return dom.utils.hasClass(node, 'se-math|katex') && dom.check.isComponentContainer(node) ? node : null;
|
|
39
38
|
}
|
|
40
39
|
|
|
40
|
+
#element = null;
|
|
41
|
+
|
|
41
42
|
/**
|
|
42
43
|
* @constructor
|
|
43
|
-
* @param {
|
|
44
|
+
* @param {SunEditor.Kernel} editor - The core kernel
|
|
44
45
|
* @param {MathPluginOptions} pluginOptions
|
|
45
46
|
*/
|
|
46
47
|
constructor(editor, pluginOptions) {
|
|
47
48
|
// plugin basic properties
|
|
48
49
|
super(editor);
|
|
49
|
-
this.title = this
|
|
50
|
+
this.title = this.$.lang.math;
|
|
50
51
|
this.icon = 'math';
|
|
51
52
|
|
|
52
53
|
// external library
|
|
@@ -54,8 +55,10 @@ class Math_ extends EditorInjector {
|
|
|
54
55
|
this.mathjax = null;
|
|
55
56
|
|
|
56
57
|
// exception
|
|
57
|
-
if (!(this.katex = this.#CheckKatex(
|
|
58
|
-
console.warn(
|
|
58
|
+
if (!(this.katex = this.#CheckKatex()) && !(this.mathjax = this.#CheckMathJax())) {
|
|
59
|
+
console.warn(
|
|
60
|
+
'[SUNEDITOR.plugins.math.warn] The math plugin must need either "KaTeX" or "MathJax" library. Please add the katex or mathjax option. See: https://github.com/ARA-developer/suneditor/blob/develop/guide/external-libraries.md',
|
|
61
|
+
);
|
|
59
62
|
}
|
|
60
63
|
|
|
61
64
|
this.pluginOptions = {
|
|
@@ -66,29 +69,29 @@ class Math_ extends EditorInjector {
|
|
|
66
69
|
maxHeight: '',
|
|
67
70
|
minWidth: '400px',
|
|
68
71
|
minHeight: '40px',
|
|
69
|
-
...pluginOptions.formSize
|
|
72
|
+
...pluginOptions.formSize,
|
|
70
73
|
},
|
|
71
74
|
canResize: pluginOptions.canResize ?? true,
|
|
72
75
|
autoHeight: !!pluginOptions.autoHeight,
|
|
73
76
|
fontSizeList: pluginOptions.fontSizeList || [
|
|
74
77
|
{
|
|
75
78
|
text: '1',
|
|
76
|
-
value: '1em'
|
|
79
|
+
value: '1em',
|
|
77
80
|
},
|
|
78
81
|
{
|
|
79
82
|
text: '1.5',
|
|
80
|
-
value: '1.5em'
|
|
83
|
+
value: '1.5em',
|
|
81
84
|
},
|
|
82
85
|
{
|
|
83
86
|
text: '2',
|
|
84
|
-
value: '2em'
|
|
87
|
+
value: '2em',
|
|
85
88
|
},
|
|
86
89
|
{
|
|
87
90
|
text: '2.5',
|
|
88
|
-
value: '2.5em'
|
|
89
|
-
}
|
|
91
|
+
value: '2.5em',
|
|
92
|
+
},
|
|
90
93
|
],
|
|
91
|
-
onPaste: typeof pluginOptions.onPaste === 'function' ? pluginOptions.onPaste : null
|
|
94
|
+
onPaste: typeof pluginOptions.onPaste === 'function' ? pluginOptions.onPaste : null,
|
|
92
95
|
};
|
|
93
96
|
if (this.pluginOptions.autoHeight) {
|
|
94
97
|
this.pluginOptions.formSize.height = this.pluginOptions.formSize.minHeight;
|
|
@@ -97,11 +100,11 @@ class Math_ extends EditorInjector {
|
|
|
97
100
|
// create HTML
|
|
98
101
|
this.defaultFontSize = null;
|
|
99
102
|
const modalEl = CreateHTML_modal(this);
|
|
100
|
-
const controllerEl = CreateHTML_controller(
|
|
103
|
+
const controllerEl = CreateHTML_controller(this.$);
|
|
101
104
|
|
|
102
105
|
// modules
|
|
103
|
-
this.modal = new Modal(this, modalEl);
|
|
104
|
-
this.controller = new Controller(this, controllerEl, { position: 'bottom', disabled: true });
|
|
106
|
+
this.modal = new Modal(this, this.$, modalEl);
|
|
107
|
+
this.controller = new Controller(this, this.$, controllerEl, { position: 'bottom', disabled: true });
|
|
105
108
|
|
|
106
109
|
// members
|
|
107
110
|
/** @type {HTMLTextAreaElement} */
|
|
@@ -112,54 +115,33 @@ class Math_ extends EditorInjector {
|
|
|
112
115
|
this.fontSizeElement = modalEl.querySelector('.se-math-size');
|
|
113
116
|
|
|
114
117
|
this.isUpdateState = false;
|
|
115
|
-
this._element = null;
|
|
116
118
|
|
|
117
119
|
// init
|
|
118
120
|
this.previewElement.style.fontSize = this.defaultFontSize;
|
|
119
|
-
this
|
|
120
|
-
this
|
|
121
|
+
this.$.eventManager.addEvent(this.textArea, 'input', this.#RenderMathExp.bind(this));
|
|
122
|
+
this.$.eventManager.addEvent(
|
|
121
123
|
this.fontSizeElement,
|
|
122
124
|
'change',
|
|
123
125
|
function (e) {
|
|
124
126
|
this.fontSize = e.target.value;
|
|
125
|
-
}.bind(this.previewElement.style)
|
|
127
|
+
}.bind(this.previewElement.style),
|
|
126
128
|
);
|
|
127
129
|
if (this.pluginOptions.onPaste) {
|
|
128
|
-
this
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
/**
|
|
133
|
-
* @editorMethod Editor.component
|
|
134
|
-
* @description Executes the method that is called when a component of a plugin is selected.
|
|
135
|
-
* @param {HTMLElement} target Target component element
|
|
136
|
-
*/
|
|
137
|
-
select(target) {
|
|
138
|
-
if (dom.utils.hasClass(target, 'se-math|katex') && getValue(target)) {
|
|
139
|
-
this._element = target;
|
|
140
|
-
this.controller.open(target, null, { isWWTarget: false, initMethod: null, addOffset: null });
|
|
141
|
-
return;
|
|
130
|
+
this.$.eventManager.addEvent(this.textArea, 'paste', this.pluginOptions.onPaste.bind(this));
|
|
142
131
|
}
|
|
143
132
|
}
|
|
144
133
|
|
|
145
134
|
/**
|
|
146
|
-
* @
|
|
147
|
-
* @
|
|
135
|
+
* @override
|
|
136
|
+
* @type {PluginModal['open']}
|
|
148
137
|
*/
|
|
149
|
-
|
|
150
|
-
this.
|
|
138
|
+
open() {
|
|
139
|
+
this.modal.open();
|
|
151
140
|
}
|
|
152
141
|
|
|
153
142
|
/**
|
|
154
|
-
* @
|
|
155
|
-
* @
|
|
156
|
-
* - It ensures that the structure and attributes of the element are maintained and secure.
|
|
157
|
-
* - The method checks if the element is already wrapped in a valid container and updates its attributes if necessary.
|
|
158
|
-
* - If the element isn't properly contained, a new container is created to retain the format.
|
|
159
|
-
* @returns {{query: string, method: (element: HTMLElement) => void}} The format retention object containing the query and method to process the element.
|
|
160
|
-
* - query: The selector query to identify the relevant elements (in this case, 'audio').
|
|
161
|
-
* - method:The function to execute on the element to validate and preserve its format.
|
|
162
|
-
* - The function takes the element as an argument, checks if it is contained correctly, and applies necessary adjustments.
|
|
143
|
+
* @hook Editor.Core
|
|
144
|
+
* @type {SunEditor.Hook.Core.RetainFormat}
|
|
163
145
|
*/
|
|
164
146
|
retainFormat() {
|
|
165
147
|
return {
|
|
@@ -170,7 +152,7 @@ class Math_ extends EditorInjector {
|
|
|
170
152
|
const value = getValue(element);
|
|
171
153
|
if (!value) return;
|
|
172
154
|
|
|
173
|
-
const domParser =
|
|
155
|
+
const domParser = _d.createRange().createContextualFragment(this.#renderer(converter.entityToHTML(this.#escapeBackslashes(value, true))));
|
|
174
156
|
element.innerHTML = domParser.querySelector('.se-math, .katex').innerHTML;
|
|
175
157
|
element.setAttribute('contenteditable', 'false');
|
|
176
158
|
dom.utils.addClass(element, 'se-component|se-inline-component|se-disable-pointer|se-math');
|
|
@@ -184,44 +166,34 @@ class Math_ extends EditorInjector {
|
|
|
184
166
|
if (this.mathjax) {
|
|
185
167
|
this.#renderMathJax(this.mathjax);
|
|
186
168
|
}
|
|
187
|
-
}
|
|
169
|
+
},
|
|
188
170
|
};
|
|
189
171
|
}
|
|
190
172
|
|
|
191
173
|
/**
|
|
192
|
-
* @
|
|
193
|
-
* @
|
|
174
|
+
* @hook Modules.Modal
|
|
175
|
+
* @type {SunEditor.Hook.Modal.On}
|
|
194
176
|
*/
|
|
195
|
-
|
|
196
|
-
this.modal.open();
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
/**
|
|
200
|
-
* @editorMethod Modules.Modal
|
|
201
|
-
* @description Executes the method that is called when a plugin's modal is opened.
|
|
202
|
-
* @param {boolean} isUpdate "Indicates whether the modal is for editing an existing component (true) or registering a new one (false)."
|
|
203
|
-
*/
|
|
204
|
-
on(isUpdate) {
|
|
177
|
+
modalOn(isUpdate) {
|
|
205
178
|
this.isUpdateState = isUpdate;
|
|
206
179
|
if (!isUpdate) {
|
|
207
|
-
this.
|
|
180
|
+
this.modalInit();
|
|
208
181
|
} else if (this.controller.currentTarget) {
|
|
209
182
|
const currentTarget = this.controller.currentTarget;
|
|
210
|
-
const exp = converter.entityToHTML(this
|
|
183
|
+
const exp = converter.entityToHTML(this.#escapeBackslashes(getValue(currentTarget), true));
|
|
211
184
|
const fontSize = getType(currentTarget) || '1em';
|
|
212
185
|
this.textArea.value = exp;
|
|
213
186
|
this.fontSizeElement.value = fontSize;
|
|
214
|
-
this.previewElement.innerHTML = this
|
|
187
|
+
this.previewElement.innerHTML = this.#renderer(exp);
|
|
215
188
|
this.previewElement.style.fontSize = fontSize;
|
|
216
189
|
}
|
|
217
190
|
}
|
|
218
191
|
|
|
219
192
|
/**
|
|
220
|
-
* @
|
|
221
|
-
* @
|
|
222
|
-
* @returns {boolean} Success or failure
|
|
193
|
+
* @hook Modules.Modal
|
|
194
|
+
* @type {SunEditor.Hook.Modal.Action}
|
|
223
195
|
*/
|
|
224
|
-
modalAction() {
|
|
196
|
+
async modalAction() {
|
|
225
197
|
if (this.textArea.value.trim().length === 0 || dom.utils.hasClass(this.textArea, 'se-error')) {
|
|
226
198
|
this.textArea.focus();
|
|
227
199
|
return false;
|
|
@@ -235,7 +207,7 @@ class Math_ extends EditorInjector {
|
|
|
235
207
|
if (!mathEl) return false;
|
|
236
208
|
dom.utils.addClass(mathEl, 'se-component|se-inline-component|se-disable-pointer|se-math');
|
|
237
209
|
mathEl.setAttribute('contenteditable', 'false');
|
|
238
|
-
mathEl.setAttribute('data-se-value', converter.htmlToEntity(this
|
|
210
|
+
mathEl.setAttribute('data-se-value', converter.htmlToEntity(this.#escapeBackslashes(mathExp, false)));
|
|
239
211
|
mathEl.setAttribute('data-se-type', this.fontSizeElement.value);
|
|
240
212
|
mathEl.style.fontSize = this.fontSizeElement.value;
|
|
241
213
|
|
|
@@ -247,19 +219,19 @@ class Math_ extends EditorInjector {
|
|
|
247
219
|
}
|
|
248
220
|
|
|
249
221
|
if (!this.isUpdateState) {
|
|
250
|
-
const selectedFormats = this
|
|
222
|
+
const selectedFormats = this.$.format.getLines();
|
|
251
223
|
|
|
252
224
|
if (selectedFormats.length > 1) {
|
|
253
225
|
const oFormat = dom.utils.createElement(selectedFormats[0].nodeName, null, mathEl);
|
|
254
|
-
this
|
|
226
|
+
this.$.component.insert(oFormat, { insertBehavior: 'none', scrollTo: false });
|
|
255
227
|
} else {
|
|
256
|
-
this
|
|
228
|
+
this.$.component.insert(mathEl, { insertBehavior: 'none', scrollTo: false });
|
|
257
229
|
}
|
|
258
230
|
} else {
|
|
259
231
|
const containerEl = dom.query.getParentElement(this.controller.currentTarget, '.se-component');
|
|
260
232
|
containerEl.replaceWith(mathEl);
|
|
261
|
-
const compInfo = this
|
|
262
|
-
this
|
|
233
|
+
const compInfo = this.$.component.get(mathEl);
|
|
234
|
+
this.$.component.select(compInfo.target, compInfo.pluginName);
|
|
263
235
|
return true;
|
|
264
236
|
}
|
|
265
237
|
|
|
@@ -267,30 +239,29 @@ class Math_ extends EditorInjector {
|
|
|
267
239
|
this.#renderMathJax(this.mathjax);
|
|
268
240
|
}
|
|
269
241
|
|
|
270
|
-
const r = this
|
|
242
|
+
const r = this.$.selection.getNearRange(mathEl);
|
|
271
243
|
if (r) {
|
|
272
|
-
this
|
|
244
|
+
this.$.selection.setRange(r.container, r.offset, r.container, r.offset);
|
|
273
245
|
} else {
|
|
274
|
-
this
|
|
246
|
+
this.$.component.select(mathEl, Math_.key);
|
|
275
247
|
}
|
|
276
248
|
|
|
277
249
|
return true;
|
|
278
250
|
}
|
|
279
251
|
|
|
280
252
|
/**
|
|
281
|
-
* @
|
|
282
|
-
* @
|
|
253
|
+
* @hook Modules.Modal
|
|
254
|
+
* @type {SunEditor.Hook.Modal.Init}
|
|
283
255
|
*/
|
|
284
|
-
|
|
256
|
+
modalInit() {
|
|
285
257
|
this.textArea.value = '';
|
|
286
258
|
this.previewElement.innerHTML = '';
|
|
287
259
|
dom.utils.removeClass(this.textArea, 'se-error');
|
|
288
260
|
}
|
|
289
261
|
|
|
290
262
|
/**
|
|
291
|
-
* @
|
|
292
|
-
* @
|
|
293
|
-
* @param {HTMLButtonElement} target Target button element
|
|
263
|
+
* @hook Modules.Controller
|
|
264
|
+
* @type {SunEditor.Hook.Controller.Action}
|
|
294
265
|
*/
|
|
295
266
|
controllerAction(target) {
|
|
296
267
|
const command = target.getAttribute('data-command');
|
|
@@ -299,33 +270,52 @@ class Math_ extends EditorInjector {
|
|
|
299
270
|
this.modal.open();
|
|
300
271
|
break;
|
|
301
272
|
case 'copy':
|
|
302
|
-
this.#copyTextToClipboard(this
|
|
273
|
+
this.#copyTextToClipboard(this.#element);
|
|
303
274
|
break;
|
|
304
275
|
case 'delete':
|
|
305
|
-
this.
|
|
276
|
+
this.componentDestroy(this.controller.currentTarget);
|
|
306
277
|
}
|
|
307
278
|
}
|
|
308
279
|
|
|
309
280
|
/**
|
|
310
|
-
* @
|
|
311
|
-
* @
|
|
312
|
-
* @param {Node} target Target element
|
|
281
|
+
* @hook Modules.Controller
|
|
282
|
+
* @type {SunEditor.Hook.Controller.Close}
|
|
313
283
|
*/
|
|
314
|
-
|
|
284
|
+
controllerClose() {
|
|
285
|
+
this.#element = null;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
/**
|
|
289
|
+
* @hook Editor.Component
|
|
290
|
+
* @type {SunEditor.Hook.Component.Select}
|
|
291
|
+
*/
|
|
292
|
+
componentSelect(target) {
|
|
293
|
+
if (dom.utils.hasClass(target, 'se-math|katex') && getValue(target)) {
|
|
294
|
+
this.#element = target;
|
|
295
|
+
this.controller.open(target, null, { isWWTarget: false, initMethod: null, addOffset: null });
|
|
296
|
+
return;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* @hook Editor.Component
|
|
302
|
+
* @type {SunEditor.Hook.Component.Destroy}
|
|
303
|
+
*/
|
|
304
|
+
async componentDestroy(target) {
|
|
315
305
|
dom.utils.removeItem(target);
|
|
316
306
|
this.controller.close();
|
|
317
|
-
this.
|
|
318
|
-
this
|
|
307
|
+
this.$.focusManager.focus();
|
|
308
|
+
this.$.history.push(false);
|
|
319
309
|
}
|
|
320
310
|
|
|
321
311
|
/**
|
|
322
|
-
* @
|
|
323
|
-
* @description Renders the given math expression using KaTeX or MathJax.
|
|
312
|
+
* @description Renders the given math expression using `KaTeX` or `MathJax`.
|
|
324
313
|
* @param {string} exp - The math expression to render.
|
|
325
314
|
* @returns {string} - The rendered math expression as HTML.
|
|
326
315
|
*/
|
|
327
|
-
|
|
316
|
+
#renderer(exp) {
|
|
328
317
|
let result = '';
|
|
318
|
+
|
|
329
319
|
try {
|
|
330
320
|
dom.utils.removeClass(this.textArea, 'se-error');
|
|
331
321
|
if (this.katex) {
|
|
@@ -338,23 +328,32 @@ class Math_ extends EditorInjector {
|
|
|
338
328
|
} else {
|
|
339
329
|
result = `<span class="se-math">${result}</span>`;
|
|
340
330
|
}
|
|
331
|
+
} else {
|
|
332
|
+
/** @type {Error & { code?: string }} */
|
|
333
|
+
const err = new Error('404 Not found. "KaTeX" or "MathJax" library');
|
|
334
|
+
err.code = 'MATH_LIB_NOT_FOUND';
|
|
335
|
+
throw err;
|
|
341
336
|
}
|
|
342
337
|
} catch (error) {
|
|
343
338
|
dom.utils.addClass(this.textArea, 'se-error');
|
|
344
|
-
|
|
339
|
+
if (error.code === 'MATH_LIB_NOT_FOUND') {
|
|
340
|
+
result = `<span class="se-math-error">${error.message}</span>`;
|
|
341
|
+
} else {
|
|
342
|
+
result = `<span class="se-math-error">Math syntax error. (Refer ${this.katex ? `<a href="${env.KATEX_WEBSITE}" target="_blank">KaTeX</a>` : `<a href="${env.MATHJAX_WEBSITE}" target="_blank">MathJax</a>`})</span>`;
|
|
343
|
+
}
|
|
345
344
|
console.warn('[SUNEDITOR.math.error] ', error.message);
|
|
346
345
|
}
|
|
346
|
+
|
|
347
347
|
return result;
|
|
348
348
|
}
|
|
349
349
|
|
|
350
350
|
/**
|
|
351
|
-
* @private
|
|
352
351
|
* @description Escapes or unescapes backslashes in a given string.
|
|
353
352
|
* @param {string} str - The input string.
|
|
354
|
-
* @param {boolean} decode - If true
|
|
353
|
+
* @param {boolean} decode - If `true`, decodes escaped backslashes; otherwise, encodes them.
|
|
355
354
|
* @returns {string} - The processed string.
|
|
356
355
|
*/
|
|
357
|
-
|
|
356
|
+
#escapeBackslashes(str, decode) {
|
|
358
357
|
return str.replace(/\\{2}/g, decode ? '\\' : '\\\\');
|
|
359
358
|
}
|
|
360
359
|
|
|
@@ -368,7 +367,7 @@ class Math_ extends EditorInjector {
|
|
|
368
367
|
|
|
369
368
|
try {
|
|
370
369
|
const text = getValue(element);
|
|
371
|
-
await this
|
|
370
|
+
await this.$.html.copy(text);
|
|
372
371
|
dom.utils.addClass(element, 'se-copy');
|
|
373
372
|
// copy effect
|
|
374
373
|
_w.setTimeout(() => {
|
|
@@ -391,7 +390,7 @@ class Math_ extends EditorInjector {
|
|
|
391
390
|
eventTarget.style.height = eventTarget.scrollHeight + 5 + 'px';
|
|
392
391
|
}
|
|
393
392
|
|
|
394
|
-
this.previewElement.innerHTML = this
|
|
393
|
+
this.previewElement.innerHTML = this.#renderer(eventTarget.value);
|
|
395
394
|
if (this.mathjax) this.#renderMathJax(this.mathjax);
|
|
396
395
|
}
|
|
397
396
|
|
|
@@ -404,10 +403,10 @@ class Math_ extends EditorInjector {
|
|
|
404
403
|
}
|
|
405
404
|
|
|
406
405
|
/**
|
|
407
|
-
* @
|
|
408
|
-
* @returns {*} - The KaTeX instance or null if the instance is invalid.
|
|
406
|
+
* @returns {*} - The `KaTeX` instance or `null` if the instance is invalid.
|
|
409
407
|
*/
|
|
410
|
-
#CheckKatex(
|
|
408
|
+
#CheckKatex() {
|
|
409
|
+
const katex = this.$.options.get('externalLibs').katex;
|
|
411
410
|
if (!katex) return null;
|
|
412
411
|
if (!katex.src) {
|
|
413
412
|
console.warn('[SUNEDITOR.math.katex.fail] The katex option is set incorrectly.');
|
|
@@ -416,9 +415,9 @@ class Math_ extends EditorInjector {
|
|
|
416
415
|
|
|
417
416
|
const katexOptions = [
|
|
418
417
|
{
|
|
419
|
-
throwOnError: false
|
|
418
|
+
throwOnError: false,
|
|
420
419
|
},
|
|
421
|
-
katex.options || {}
|
|
420
|
+
katex.options || {},
|
|
422
421
|
].reduce((init, option) => {
|
|
423
422
|
for (const key in option) {
|
|
424
423
|
init[key] = option[key];
|
|
@@ -431,13 +430,12 @@ class Math_ extends EditorInjector {
|
|
|
431
430
|
}
|
|
432
431
|
|
|
433
432
|
/**
|
|
434
|
-
* @param {*} mathjax - The MathJax instance.
|
|
435
|
-
* @param {__se__EditorCore} editor - The root editor instance.
|
|
436
433
|
* @returns {*}
|
|
437
434
|
*/
|
|
438
|
-
#CheckMathJax(
|
|
435
|
+
#CheckMathJax() {
|
|
436
|
+
const mathjax = this.$.options.get('externalLibs').mathjax;
|
|
439
437
|
if (!mathjax) return null;
|
|
440
|
-
if (
|
|
438
|
+
if (this.$.frameOptions.get('iframe')) {
|
|
441
439
|
console.warn('[SUNEDITOR.math.mathjax.fail] The MathJax option is not supported in the iframe.');
|
|
442
440
|
}
|
|
443
441
|
|
|
@@ -450,7 +448,7 @@ class Math_ extends EditorInjector {
|
|
|
450
448
|
|
|
451
449
|
return mathjax.src.document(document, {
|
|
452
450
|
InputJax: tex,
|
|
453
|
-
OutputJax: chtml
|
|
451
|
+
OutputJax: chtml,
|
|
454
452
|
});
|
|
455
453
|
} catch (error) {
|
|
456
454
|
console.warn('[SUNEDITOR.math.mathjax.fail] The MathJax option is set incorrectly.', error);
|
|
@@ -459,8 +457,13 @@ class Math_ extends EditorInjector {
|
|
|
459
457
|
}
|
|
460
458
|
}
|
|
461
459
|
|
|
460
|
+
/**
|
|
461
|
+
* @param {Math_} inst - Math plugin instance
|
|
462
|
+
* @returns {HTMLElement}
|
|
463
|
+
*/
|
|
462
464
|
function CreateHTML_modal(inst) {
|
|
463
|
-
const {
|
|
465
|
+
const { $, pluginOptions, katex } = inst;
|
|
466
|
+
const { lang, icons } = $;
|
|
464
467
|
const { formSize, fontSizeList, canResize, autoHeight } = pluginOptions;
|
|
465
468
|
const { width, height, maxWidth, maxHeight, minWidth, minHeight } = formSize;
|
|
466
469
|
const resizeType = !canResize ? 'none' : autoHeight ? 'horizontal' : 'auto';
|
|
@@ -507,6 +510,10 @@ function CreateHTML_modal(inst) {
|
|
|
507
510
|
return dom.utils.createElement('DIV', { class: 'se-modal-content se-modal-responsive', style: `max-width: ${maxWidth}; max-height: ${maxHeight};` }, html);
|
|
508
511
|
}
|
|
509
512
|
|
|
513
|
+
/**
|
|
514
|
+
* @param {SunEditor.Deps} $ - Kernel dependencies
|
|
515
|
+
* @returns {HTMLElement}
|
|
516
|
+
*/
|
|
510
517
|
function CreateHTML_controller({ lang, icons }) {
|
|
511
518
|
const html = /*html*/ `
|
|
512
519
|
<div class="se-arrow se-arrow-up"></div>
|
|
@@ -553,7 +560,7 @@ function getType(element) {
|
|
|
553
560
|
if (seAttr) return seAttr;
|
|
554
561
|
|
|
555
562
|
// v2-migration
|
|
556
|
-
const v2SeAttr = element.getAttribute(`data-
|
|
563
|
+
const v2SeAttr = element.getAttribute(`data-font-size`);
|
|
557
564
|
if (!v2SeAttr) return null;
|
|
558
565
|
element.removeAttribute(`data-font-size`);
|
|
559
566
|
element.setAttribute(`data-se-type`, v2SeAttr);
|