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,36 +1,42 @@
|
|
|
1
|
-
|
|
2
|
-
* @fileoverview Node util class
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import CoreInjector from '../../editorInjector/_core';
|
|
6
|
-
import { dom, unicode, numbers } from '../../helper';
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* @typedef {Omit<NodeTransform & Partial<__se__EditorInjector>, 'nodeTransform'>} NodeTransformThis
|
|
10
|
-
*/
|
|
1
|
+
import { dom, unicode, numbers } from '../../../helper';
|
|
11
2
|
|
|
12
3
|
/**
|
|
13
|
-
* @constructor
|
|
14
|
-
* @this {NodeTransformThis}
|
|
15
4
|
* @description Node utility class. split, merge, etc.
|
|
16
|
-
* @param {__se__EditorCore} editor - The root editor instance
|
|
17
5
|
*/
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
6
|
+
class NodeTransform {
|
|
7
|
+
#$;
|
|
8
|
+
#options;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @constructor
|
|
12
|
+
* @param {SunEditor.Kernel} kernel
|
|
13
|
+
*/
|
|
14
|
+
constructor(kernel) {
|
|
15
|
+
this.#$ = kernel.$;
|
|
16
|
+
this.#options = this.#$.options;
|
|
17
|
+
}
|
|
21
18
|
|
|
22
|
-
NodeTransform.prototype = {
|
|
23
19
|
/**
|
|
24
|
-
* @this {NodeTransformThis}
|
|
25
20
|
* @template {HTMLElement} T
|
|
26
|
-
* @description Split all tags based on
|
|
21
|
+
* @description Split all tags based on `baseNode`
|
|
27
22
|
* @param {Node} baseNode Element or text node on which to base
|
|
28
|
-
* @param {?number|Node} offset Text offset of
|
|
23
|
+
* @param {?(number|Node)} offset Text offset of `baseNode` (Only valid when `baseNode` is a text node)
|
|
29
24
|
* @param {number} [depth=0] The nesting depth of the element being split. (default: 0)
|
|
30
25
|
* @returns {T} The last element of the splited tag.
|
|
26
|
+
* @example
|
|
27
|
+
* // Split at text offset
|
|
28
|
+
* const textNode = editor.selection.getNode();
|
|
29
|
+
* const newElement = editor.nodeTransform.split(textNode, 5, 0);
|
|
30
|
+
*
|
|
31
|
+
* // Split at specific depth to preserve parent structure
|
|
32
|
+
* const paragraph = editor.selection.getNode().closest('p');
|
|
33
|
+
* editor.nodeTransform.split(textNode, 10, 2);
|
|
34
|
+
*
|
|
35
|
+
* // Split by node reference
|
|
36
|
+
* const splitResult = editor.nodeTransform.split(parentNode, childNode, 1);
|
|
31
37
|
*/
|
|
32
38
|
split(baseNode, offset, depth) {
|
|
33
|
-
if (dom.check.isWysiwygFrame(baseNode) || this
|
|
39
|
+
if (dom.check.isWysiwygFrame(baseNode) || this.#$.component.is(baseNode) || !baseNode) return /** @type {T} */ (baseNode);
|
|
34
40
|
|
|
35
41
|
if (offset && !numbers.is(offset)) {
|
|
36
42
|
const children = baseNode.childNodes;
|
|
@@ -111,7 +117,7 @@ NodeTransform.prototype = {
|
|
|
111
117
|
}
|
|
112
118
|
}
|
|
113
119
|
|
|
114
|
-
if (depthEl.childNodes.length <= 1 &&
|
|
120
|
+
if (depthEl.nodeType === 1 && depthEl.childNodes.length <= 1 && !depthEl.firstChild?.textContent?.length) /** @type {HTMLElement} */ (depthEl).innerHTML = '<br>';
|
|
115
121
|
|
|
116
122
|
const pElement = depthEl.parentNode;
|
|
117
123
|
if (next) depthEl = depthEl.nextSibling;
|
|
@@ -130,21 +136,30 @@ NodeTransform.prototype = {
|
|
|
130
136
|
if (bp.childNodes.length === 0) dom.utils.removeItem(bp);
|
|
131
137
|
|
|
132
138
|
return /** @type {T} */ (newEl);
|
|
133
|
-
}
|
|
139
|
+
}
|
|
134
140
|
|
|
135
141
|
/**
|
|
136
|
-
* @
|
|
137
|
-
*
|
|
138
|
-
* -
|
|
139
|
-
* - An array containing change offsets is returned in the order of the "nodePathArray" array.
|
|
142
|
+
* @description Use with `npdePath` (dom-query-GetNodePath) to merge the same attributes and tags if they are present and modify the nodepath.
|
|
143
|
+
* - If `offset` has been changed, it will return as much `offset` as it has been modified.
|
|
144
|
+
* - An array containing change offsets is returned in the order of the `nodePathArray` array.
|
|
140
145
|
* @param {Node} element Element
|
|
141
|
-
* @param {?number[][]
|
|
142
|
-
* @param {?boolean
|
|
146
|
+
* @param {?number[][]} [nodePathArray] Array of `NodePath` object ([dom-query-GetNodePath(), ..])
|
|
147
|
+
* @param {?boolean} [onlyText] If `true`, non-text nodes like `span`, `strong`.. are ignored.
|
|
143
148
|
* @returns {Array<number>} [offset, ..]
|
|
149
|
+
* @example
|
|
150
|
+
* // Merge adjacent tags with same attributes
|
|
151
|
+
* const container = editor.selection.getNode().closest('div');
|
|
152
|
+
* editor.nodeTransform.mergeSameTags(container, null, false);
|
|
153
|
+
*
|
|
154
|
+
* // Merge with path tracking
|
|
155
|
+
* const startPath = [0, 1, 2];
|
|
156
|
+
* const endPath = [0, 2, 1];
|
|
157
|
+
* const offsets = editor.nodeTransform.mergeSameTags(element, [startPath, endPath], false);
|
|
158
|
+
*
|
|
159
|
+
* // Merge only text nodes
|
|
160
|
+
* editor.nodeTransform.mergeSameTags(paragraph, null, true);
|
|
144
161
|
*/
|
|
145
162
|
mergeSameTags(element, nodePathArray, onlyText) {
|
|
146
|
-
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
147
|
-
const inst = this;
|
|
148
163
|
const nodePathLen = nodePathArray ? nodePathArray.length : 0;
|
|
149
164
|
let offsets = null;
|
|
150
165
|
|
|
@@ -152,7 +167,7 @@ NodeTransform.prototype = {
|
|
|
152
167
|
offsets = Array.apply(null, new Array(nodePathLen)).map(Number.prototype.valueOf, 0);
|
|
153
168
|
}
|
|
154
169
|
|
|
155
|
-
|
|
170
|
+
const recursionFunc = (current, depth, depthIndex) => {
|
|
156
171
|
const children = current.childNodes;
|
|
157
172
|
|
|
158
173
|
for (let i = 0, len = children.length, child, next; i < len; i++) {
|
|
@@ -160,7 +175,7 @@ NodeTransform.prototype = {
|
|
|
160
175
|
next = /** @type {HTMLElement} */ (children[i + 1]);
|
|
161
176
|
if (!child) break;
|
|
162
177
|
if (dom.check.isBreak(child) || dom.check.isMedia(child) || dom.check.isInputElement(child)) continue;
|
|
163
|
-
if ((onlyText &&
|
|
178
|
+
if ((onlyText && this.#$.inline._isIgnoreNodeChange(child)) || (!onlyText && (dom.check.isTableElements(child) || dom.check.isListCell(child) || (this.#$.format.isLine(child) && !this.#$.format.isBrLine(child))))) {
|
|
164
179
|
if (dom.check.isTableElements(child) || dom.check.isListCell(child)) {
|
|
165
180
|
recursionFunc(child, depth + 1, i);
|
|
166
181
|
}
|
|
@@ -275,16 +290,17 @@ NodeTransform.prototype = {
|
|
|
275
290
|
recursionFunc(child, depth + 1, i);
|
|
276
291
|
}
|
|
277
292
|
}
|
|
278
|
-
}
|
|
293
|
+
};
|
|
294
|
+
|
|
295
|
+
recursionFunc(element, 0, 0);
|
|
279
296
|
|
|
280
297
|
return offsets;
|
|
281
|
-
}
|
|
298
|
+
}
|
|
282
299
|
|
|
283
300
|
/**
|
|
284
|
-
* @this {NodeTransformThis}
|
|
285
301
|
* @description Remove nested tags without other child nodes.
|
|
286
302
|
* @param {Node} element Element object
|
|
287
|
-
* @param {?(current: Node) => boolean|string
|
|
303
|
+
* @param {?(((current: Node) => boolean)|string)} [validation] Validation function / String(`tag1|tag2..`) / If `null`, all tags are applicable.
|
|
288
304
|
*/
|
|
289
305
|
mergeNestedTags(element, validation) {
|
|
290
306
|
if (typeof validation === 'string') {
|
|
@@ -309,27 +325,38 @@ NodeTransform.prototype = {
|
|
|
309
325
|
recursionFunc(current.children[i]);
|
|
310
326
|
}
|
|
311
327
|
})(/** @type {Element} */ (element));
|
|
312
|
-
}
|
|
328
|
+
}
|
|
313
329
|
|
|
314
330
|
/**
|
|
315
|
-
* @this {NodeTransformThis}
|
|
316
331
|
* @description Delete itself and all parent nodes that match the condition.
|
|
317
|
-
* - Returns an {sc: previousSibling, ec: nextSibling}(the deleted node reference) or null
|
|
332
|
+
* - Returns an {sc: previousSibling, ec: nextSibling}(the deleted node reference) or `null`.
|
|
318
333
|
* @param {Node} item Node to be remove
|
|
319
|
-
* @param {?(current: Node) => boolean
|
|
320
|
-
* @param {?Node
|
|
321
|
-
* @returns {{sc: Node|null, ec: Node|null}|null} {sc: previousSibling, ec: nextSibling} (the deleted node reference) or null
|
|
334
|
+
* @param {?(current: Node) => boolean} [validation] Validation function. default(Deleted if it only have `breakLine` and blanks)
|
|
335
|
+
* @param {?Node} [stopParent] Stop when the parent node reaches `stopParent`
|
|
336
|
+
* @returns {{sc: Node|null, ec: Node|null}|null} {sc: previousSibling, ec: nextSibling} (the deleted node reference) or `null`.
|
|
337
|
+
* @example
|
|
338
|
+
* // Remove empty parent elements recursively
|
|
339
|
+
* const emptySpan = document.querySelector('span:empty');
|
|
340
|
+
* const result = editor.nodeTransform.removeAllParents(emptySpan, null, null);
|
|
341
|
+
*
|
|
342
|
+
* // Remove with custom validation
|
|
343
|
+
* editor.nodeTransform.removeAllParents(node, (current) => {
|
|
344
|
+
* return current.textContent.trim().length === 0;
|
|
345
|
+
* }, null);
|
|
346
|
+
*
|
|
347
|
+
* // Remove up to specific parent
|
|
348
|
+
* const stopAt = editor.selection.getNode().closest('.container');
|
|
349
|
+
* editor.nodeTransform.removeAllParents(childNode, null, stopAt);
|
|
322
350
|
*/
|
|
323
351
|
removeAllParents(item, validation, stopParent) {
|
|
324
352
|
if (!item) return null;
|
|
325
353
|
let cc = null;
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
}
|
|
354
|
+
|
|
355
|
+
validation ||= (current) => {
|
|
356
|
+
if (current === stopParent || this.#$.component.is(current)) return false;
|
|
357
|
+
const text = current.textContent.trim();
|
|
358
|
+
return text.length === 0 || /^(\n|\u200B)+$/.test(text);
|
|
359
|
+
};
|
|
333
360
|
|
|
334
361
|
(function recursionFunc(element) {
|
|
335
362
|
if (!dom.check.isWysiwygFrame(element)) {
|
|
@@ -337,7 +364,7 @@ NodeTransform.prototype = {
|
|
|
337
364
|
if (parent && validation(element)) {
|
|
338
365
|
cc = {
|
|
339
366
|
sc: element.previousElementSibling,
|
|
340
|
-
ec: element.nextElementSibling
|
|
367
|
+
ec: element.nextElementSibling,
|
|
341
368
|
};
|
|
342
369
|
dom.utils.removeItem(element);
|
|
343
370
|
recursionFunc(/** @type {Element} */ (parent));
|
|
@@ -346,26 +373,21 @@ NodeTransform.prototype = {
|
|
|
346
373
|
})(/** @type {Element} */ (item));
|
|
347
374
|
|
|
348
375
|
return cc;
|
|
349
|
-
}
|
|
376
|
+
}
|
|
350
377
|
|
|
351
378
|
/**
|
|
352
|
-
* @this {NodeTransformThis}
|
|
353
379
|
* @description Delete a empty child node of argument element
|
|
354
380
|
* @param {Node} element Element node
|
|
355
381
|
* @param {?Node} notRemoveNode Do not remove node
|
|
356
382
|
* @param {boolean} forceDelete When all child nodes are deleted, the parent node is also deleted.
|
|
357
383
|
*/
|
|
358
384
|
removeEmptyNode(element, notRemoveNode, forceDelete) {
|
|
359
|
-
|
|
360
|
-
const inst = this;
|
|
361
|
-
const allowedEmptyTags = this.options.get('allowedEmptyTags');
|
|
385
|
+
const allowedEmptyTags = this.#options.get('allowedEmptyTags');
|
|
362
386
|
|
|
363
|
-
|
|
364
|
-
notRemoveNode = dom.query.getParentElement(notRemoveNode, (current) => element === current.parentElement);
|
|
365
|
-
}
|
|
387
|
+
notRemoveNode &&= dom.query.getParentElement(notRemoveNode, (current) => element === current.parentElement);
|
|
366
388
|
|
|
367
|
-
|
|
368
|
-
if (
|
|
389
|
+
const recursionFunc = (current) => {
|
|
390
|
+
if (this.#$.format._isNotTextNode(current) || current === notRemoveNode || dom.check.isNonEditable(current)) return 0;
|
|
369
391
|
if (current !== element && dom.check.isZeroWidth(current.textContent) && (!current.firstChild || !dom.check.isBreak(current.firstChild)) && !current.querySelector(allowedEmptyTags)) {
|
|
370
392
|
if (current.parentNode) {
|
|
371
393
|
current.parentNode.removeChild(current);
|
|
@@ -374,13 +396,14 @@ NodeTransform.prototype = {
|
|
|
374
396
|
} else {
|
|
375
397
|
const children = current.children;
|
|
376
398
|
for (let i = 0, len = children.length, r = 0; i < len; i++) {
|
|
377
|
-
if (!children[i + r] ||
|
|
399
|
+
if (!children[i + r] || this.#$.component.is(children[i + r])) continue;
|
|
378
400
|
r += recursionFunc(children[i + r]);
|
|
379
401
|
}
|
|
380
402
|
}
|
|
381
403
|
|
|
382
404
|
return 0;
|
|
383
|
-
}
|
|
405
|
+
};
|
|
406
|
+
recursionFunc(/** @type {Element} */ (element));
|
|
384
407
|
|
|
385
408
|
if (element.childNodes.length === 0) {
|
|
386
409
|
if (forceDelete) {
|
|
@@ -389,13 +412,12 @@ NodeTransform.prototype = {
|
|
|
389
412
|
/** @type {HTMLElement} */ (element).innerHTML = '<br>';
|
|
390
413
|
}
|
|
391
414
|
}
|
|
392
|
-
}
|
|
415
|
+
}
|
|
393
416
|
|
|
394
417
|
/**
|
|
395
|
-
* @this {NodeTransformThis}
|
|
396
418
|
* @description Creates a nested node structure from the given array of nodes.
|
|
397
|
-
* @param {
|
|
398
|
-
* @param {?(current: Node) => boolean
|
|
419
|
+
* @param {SunEditor.NodeCollection} nodeArray An array of nodes to clone. The first node in the array will be the top-level parent.
|
|
420
|
+
* @param {?(current: Node) => boolean} [validate] A validate function.
|
|
399
421
|
* @returns {{ parent: Node, inner: Node }} An object containing the top-level parent node and the innermost child node.
|
|
400
422
|
*/
|
|
401
423
|
createNestedNode(nodeArray, validate) {
|
|
@@ -414,11 +436,9 @@ NodeTransform.prototype = {
|
|
|
414
436
|
|
|
415
437
|
return {
|
|
416
438
|
parent: el,
|
|
417
|
-
inner: n
|
|
439
|
+
inner: n,
|
|
418
440
|
};
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
constructor: NodeTransform
|
|
422
|
-
};
|
|
441
|
+
}
|
|
442
|
+
}
|
|
423
443
|
|
|
424
444
|
export default NodeTransform;
|