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,5 +1,48 @@
|
|
|
1
1
|
import { _d, _w } from '../env';
|
|
2
|
-
import
|
|
2
|
+
import { isImportantDisabled } from './domCheck';
|
|
3
|
+
import { htmlToEntity } from '../converter';
|
|
4
|
+
|
|
5
|
+
// ----- iframe-safe type check [START] -----
|
|
6
|
+
/**
|
|
7
|
+
* @description iframe-safe : Node type [`HTMLCollection`, `NodeList`, `Array`] check.
|
|
8
|
+
* @param {*} element
|
|
9
|
+
* @returns {element is HTMLCollection|NodeList|Array}
|
|
10
|
+
*/
|
|
11
|
+
function IsElementArray(element) {
|
|
12
|
+
const type = Object.prototype.toString.call(element);
|
|
13
|
+
return type === '[object HTMLCollection]' || type === '[object NodeList]' || type === '[object Array]';
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* @description iframe-safe: check if element is an `HTMLImageElement`
|
|
18
|
+
* @param {*} element
|
|
19
|
+
* @returns {element is HTMLImageElement}
|
|
20
|
+
*/
|
|
21
|
+
function IsHTMLImageElement(element) {
|
|
22
|
+
const type = Object.prototype.toString.call(element);
|
|
23
|
+
return type === '[object HTMLImageElement]';
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* @description iframe-safe: check if element is an `HTMLMediaElement` (video or audio)
|
|
28
|
+
* @param {*} element
|
|
29
|
+
* @returns {element is HTMLMediaElement}
|
|
30
|
+
*/
|
|
31
|
+
function IsHTMLMediaElement(element) {
|
|
32
|
+
const type = Object.prototype.toString.call(element);
|
|
33
|
+
return type === '[object HTMLVideoElement]' || type === '[object HTMLAudioElement]';
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* @description iframe-safe: check if element is an `HTMLIFrameElement`
|
|
38
|
+
* @param {*} element
|
|
39
|
+
* @returns {element is HTMLIFrameElement}
|
|
40
|
+
*/
|
|
41
|
+
function IsHTMLIFrameElement(element) {
|
|
42
|
+
const type = Object.prototype.toString.call(element);
|
|
43
|
+
return type === '[object HTMLIFrameElement]';
|
|
44
|
+
}
|
|
45
|
+
// ----- iframe-safe type check [END] -----
|
|
3
46
|
|
|
4
47
|
/**
|
|
5
48
|
* @template {Node} T
|
|
@@ -15,9 +58,19 @@ export function clone(node, deep = false) {
|
|
|
15
58
|
/**
|
|
16
59
|
* @template {HTMLElement} T
|
|
17
60
|
* @description Create Element node
|
|
61
|
+
* @example
|
|
62
|
+
* // Create with attributes
|
|
63
|
+
* const span = dom.utils.createElement('SPAN', { style: 'color:red;', class: 'highlight' });
|
|
64
|
+
*
|
|
65
|
+
* // Create with HTML string content
|
|
66
|
+
* const div = dom.utils.createElement('DIV', null, '<p>Hello</p>');
|
|
67
|
+
*
|
|
68
|
+
* // Create with a child node
|
|
69
|
+
* const br = dom.utils.createElement('BR');
|
|
70
|
+
* const p = dom.utils.createElement('P', null, br);
|
|
18
71
|
* @param {string} elementName Element name
|
|
19
|
-
* @param {?Object<string, string
|
|
20
|
-
* @param {?string|Node
|
|
72
|
+
* @param {?Object<string, string>} [attributes] The attributes of the tag. {style: 'font-size:12px;..', class: 'el_class',..}
|
|
73
|
+
* @param {?string|Node} [inner] A innerHTML string or inner node.
|
|
21
74
|
* @returns {T}
|
|
22
75
|
*/
|
|
23
76
|
export function createElement(elementName, attributes, inner) {
|
|
@@ -52,7 +105,7 @@ export function createTextNode(text) {
|
|
|
52
105
|
/**
|
|
53
106
|
* @description Get attributes of argument element to string ('class="---" name="---" ')
|
|
54
107
|
* @param {Node} element Element object
|
|
55
|
-
* @param {Array<string
|
|
108
|
+
* @param {?Array<string>} exceptAttrs Array of attribute names to exclude from the result
|
|
56
109
|
* @returns {string}
|
|
57
110
|
*/
|
|
58
111
|
export function getAttributesToString(element, exceptAttrs) {
|
|
@@ -62,7 +115,7 @@ export function getAttributesToString(element, exceptAttrs) {
|
|
|
62
115
|
let attrString = '';
|
|
63
116
|
for (let i = 0, len = attrs.length; i < len; i++) {
|
|
64
117
|
if (exceptAttrs?.includes(attrs[i].name)) continue;
|
|
65
|
-
attrString += attrs[i].name + '="' + attrs[i].value + '" ';
|
|
118
|
+
attrString += attrs[i].name + '="' + htmlToEntity(attrs[i].value) + '" ';
|
|
66
119
|
}
|
|
67
120
|
|
|
68
121
|
return attrString;
|
|
@@ -70,18 +123,15 @@ export function getAttributesToString(element, exceptAttrs) {
|
|
|
70
123
|
|
|
71
124
|
/**
|
|
72
125
|
* @description Get the items array from the array that matches the condition.
|
|
73
|
-
* @param {
|
|
126
|
+
* @param {SunEditor.NodeCollection} array Array to get item
|
|
74
127
|
* @param {?(current: *) => boolean} validation Conditional function
|
|
75
128
|
* @returns {Array<Node>|null}
|
|
76
129
|
*/
|
|
77
130
|
export function arrayFilter(array, validation) {
|
|
78
131
|
if (!array || array.length === 0) return null;
|
|
79
132
|
|
|
80
|
-
validation
|
|
81
|
-
|
|
82
|
-
function () {
|
|
83
|
-
return true;
|
|
84
|
-
};
|
|
133
|
+
validation ||= () => true;
|
|
134
|
+
|
|
85
135
|
const arr = [];
|
|
86
136
|
|
|
87
137
|
for (let i = 0, len = array.length, a; i < len; i++) {
|
|
@@ -96,18 +146,14 @@ export function arrayFilter(array, validation) {
|
|
|
96
146
|
|
|
97
147
|
/**
|
|
98
148
|
* @description Get the item from the array that matches the condition.
|
|
99
|
-
* @param {
|
|
149
|
+
* @param {SunEditor.NodeCollection} array Array to get item
|
|
100
150
|
* @param {?(current: *) => boolean} validation Conditional function
|
|
101
151
|
* @returns {Node|null}
|
|
102
152
|
*/
|
|
103
153
|
export function arrayFind(array, validation) {
|
|
104
154
|
if (!array || array.length === 0) return null;
|
|
105
155
|
|
|
106
|
-
validation
|
|
107
|
-
validation ||
|
|
108
|
-
function () {
|
|
109
|
-
return true;
|
|
110
|
-
};
|
|
156
|
+
validation ||= () => true;
|
|
111
157
|
|
|
112
158
|
for (let i = 0, len = array.length, a; i < len; i++) {
|
|
113
159
|
a = array[i];
|
|
@@ -121,7 +167,7 @@ export function arrayFind(array, validation) {
|
|
|
121
167
|
|
|
122
168
|
/**
|
|
123
169
|
* @description Check if an array contains an element
|
|
124
|
-
* @param {
|
|
170
|
+
* @param {SunEditor.NodeCollection} array element array
|
|
125
171
|
* @param {Node} node The node to check for
|
|
126
172
|
* @returns {boolean}
|
|
127
173
|
*/
|
|
@@ -136,7 +182,7 @@ export function arrayIncludes(array, node) {
|
|
|
136
182
|
|
|
137
183
|
/**
|
|
138
184
|
* @description Get the index of the argument value in the element array
|
|
139
|
-
* @param {
|
|
185
|
+
* @param {SunEditor.NodeCollection} array element array
|
|
140
186
|
* @param {Node} node The element to find index
|
|
141
187
|
* @returns {number}
|
|
142
188
|
*/
|
|
@@ -154,7 +200,7 @@ export function getArrayIndex(array, node) {
|
|
|
154
200
|
|
|
155
201
|
/**
|
|
156
202
|
* @description Get the next index of the argument value in the element array
|
|
157
|
-
* @param {
|
|
203
|
+
* @param {SunEditor.NodeCollection} array element array
|
|
158
204
|
* @param {Node} item The element to find index
|
|
159
205
|
* @returns {number}
|
|
160
206
|
*/
|
|
@@ -166,7 +212,7 @@ export function nextIndex(array, item) {
|
|
|
166
212
|
|
|
167
213
|
/**
|
|
168
214
|
* @description Get the previous index of the argument value in the element array
|
|
169
|
-
* @param {
|
|
215
|
+
* @param {SunEditor.NodeCollection} array Element array
|
|
170
216
|
* @param {Node} item The element to find index
|
|
171
217
|
* @returns {number}
|
|
172
218
|
*/
|
|
@@ -180,12 +226,12 @@ export function prevIndex(array, item) {
|
|
|
180
226
|
* @description Add style and className of copyEl to originEl
|
|
181
227
|
* @param {Node} originEl Origin element
|
|
182
228
|
* @param {Node} copyEl Element to copy
|
|
183
|
-
* @param {?Array<string
|
|
229
|
+
* @param {?Array<string>} [blacklist] Blacklist array(LowerCase)
|
|
184
230
|
*/
|
|
185
231
|
export function copyTagAttributes(originEl, copyEl, blacklist) {
|
|
186
232
|
const o = /** @type {HTMLElement} */ (originEl);
|
|
187
233
|
const c = /** @type {HTMLElement} */ (copyEl);
|
|
188
|
-
if (c.style.
|
|
234
|
+
if (c.style.length > 0) {
|
|
189
235
|
const copyStyles = c.style;
|
|
190
236
|
for (let i = 0, len = copyStyles.length; i < len; i++) {
|
|
191
237
|
o.style[copyStyles[i]] = copyStyles[copyStyles[i]];
|
|
@@ -201,7 +247,7 @@ export function copyTagAttributes(originEl, copyEl, blacklist) {
|
|
|
201
247
|
}
|
|
202
248
|
|
|
203
249
|
/**
|
|
204
|
-
* @description Copy and apply attributes of format tag that should be maintained. (style, class) Ignore
|
|
250
|
+
* @description Copy and apply attributes of format tag that should be maintained. (style, class) Ignore `__se__format__` class
|
|
205
251
|
* @param {Node} originEl Origin element
|
|
206
252
|
* @param {Node} copyEl Element to copy
|
|
207
253
|
*/
|
|
@@ -255,7 +301,7 @@ export function changeTxt(node, txt) {
|
|
|
255
301
|
/**
|
|
256
302
|
* @description Set style, if all styles are deleted, the style properties are deleted.
|
|
257
303
|
* @param {Node|Node[]} elements Element to set style
|
|
258
|
-
* @param {string} styleName Style attribute name (marginLeft
|
|
304
|
+
* @param {string} styleName Style attribute name (`marginLeft`, `textAlign`...)
|
|
259
305
|
* @param {string|number} value Style value
|
|
260
306
|
*/
|
|
261
307
|
export function setStyle(elements, styleName, value) {
|
|
@@ -264,7 +310,7 @@ export function setStyle(elements, styleName, value) {
|
|
|
264
310
|
for (let i = 0, len = elements.length, e; i < len; i++) {
|
|
265
311
|
e = /** @type {HTMLElement} */ (elements[i]);
|
|
266
312
|
e.style[styleName] = value;
|
|
267
|
-
if (
|
|
313
|
+
if (e.style.length === 0) {
|
|
268
314
|
e.removeAttribute('style');
|
|
269
315
|
}
|
|
270
316
|
}
|
|
@@ -273,8 +319,8 @@ export function setStyle(elements, styleName, value) {
|
|
|
273
319
|
/**
|
|
274
320
|
* @description Gets the style value of the element. If the elements is an array, the style of the first element is returned.
|
|
275
321
|
* @param {Node} element Element to get style from.
|
|
276
|
-
* @param {string} styleName Style attribute name (e.g.,
|
|
277
|
-
* @returns {string | undefined} The value of the style attribute, or undefined if the element does not exist.
|
|
322
|
+
* @param {string} styleName Style attribute name (e.g., `marginLeft`, `textAlign`).
|
|
323
|
+
* @returns {string | undefined} The value of the style attribute, or `undefined` if the element does not exist.
|
|
278
324
|
*/
|
|
279
325
|
export function getStyle(element, styleName) {
|
|
280
326
|
if (element?.nodeType !== 1) {
|
|
@@ -285,15 +331,15 @@ export function getStyle(element, styleName) {
|
|
|
285
331
|
}
|
|
286
332
|
|
|
287
333
|
/**
|
|
288
|
-
* @description In the predefined code view mode, the buttons except the executable button are changed to the
|
|
289
|
-
* @param {
|
|
334
|
+
* @description In the predefined code view mode, the buttons except the executable button are changed to the `disabled` state.
|
|
335
|
+
* @param {SunEditor.NodeCollection} buttonList (Button | Input) Element array
|
|
290
336
|
* @param {boolean} disabled Disabled value
|
|
291
337
|
* @param {boolean} [important=false] If priveleged mode should be used (Necessary to switch importantDisabled buttons)
|
|
292
338
|
*/
|
|
293
339
|
export function setDisabled(buttonList, disabled, important) {
|
|
294
340
|
for (let i = 0, len = buttonList.length; i < len; i++) {
|
|
295
|
-
const button = buttonList[i];
|
|
296
|
-
if (important || !
|
|
341
|
+
const button = /** @type {HTMLButtonElement|HTMLInputElement} */ (buttonList[i]);
|
|
342
|
+
if (important || !isImportantDisabled(button)) button.disabled = disabled;
|
|
297
343
|
if (important) {
|
|
298
344
|
if (disabled) {
|
|
299
345
|
button.setAttribute('data-important-disabled', '');
|
|
@@ -312,19 +358,18 @@ export function setDisabled(buttonList, disabled, important) {
|
|
|
312
358
|
*/
|
|
313
359
|
export function hasClass(element, className) {
|
|
314
360
|
if (!element || element.nodeType !== 1) return;
|
|
315
|
-
|
|
316
|
-
return valid.test(/** @type {HTMLElement} */ (element).className);
|
|
361
|
+
return /** @type {HTMLElement} */ (element).classList.contains(className);
|
|
317
362
|
}
|
|
318
363
|
|
|
319
364
|
/**
|
|
320
365
|
* @description Append the className value of the argument value element
|
|
321
|
-
* @param {Node|
|
|
366
|
+
* @param {Node|SunEditor.NodeCollection} element Elements to add class name
|
|
322
367
|
* @param {string} className Class name to be add
|
|
323
368
|
*/
|
|
324
369
|
export function addClass(element, className) {
|
|
325
370
|
if (!element) return;
|
|
326
371
|
|
|
327
|
-
const elements = element
|
|
372
|
+
const elements = IsElementArray(element) ? element : [element];
|
|
328
373
|
const classNames = className.split('|');
|
|
329
374
|
|
|
330
375
|
for (let i = 0, len = elements.length; i < len; i++) {
|
|
@@ -338,13 +383,13 @@ export function addClass(element, className) {
|
|
|
338
383
|
|
|
339
384
|
/**
|
|
340
385
|
* @description Delete the className value of the argument value element
|
|
341
|
-
* @param {Node|
|
|
386
|
+
* @param {Node|SunEditor.NodeCollection} element Elements to remove class name
|
|
342
387
|
* @param {string} className Class name to be remove
|
|
343
388
|
*/
|
|
344
389
|
export function removeClass(element, className) {
|
|
345
390
|
if (!element) return;
|
|
346
391
|
|
|
347
|
-
const elements = element
|
|
392
|
+
const elements = IsElementArray(element) ? element : [element];
|
|
348
393
|
const classNames = className.split('|');
|
|
349
394
|
|
|
350
395
|
for (let i = 0, len = elements.length; i < len; i++) {
|
|
@@ -402,7 +447,7 @@ export function flashClass(element, className, duration = 120) {
|
|
|
402
447
|
export function getClientSize(doc = _d) {
|
|
403
448
|
return {
|
|
404
449
|
w: doc.documentElement.clientWidth,
|
|
405
|
-
h: doc.documentElement.clientHeight
|
|
450
|
+
h: doc.documentElement.clientHeight,
|
|
406
451
|
};
|
|
407
452
|
}
|
|
408
453
|
|
|
@@ -415,22 +460,22 @@ export function getViewportSize() {
|
|
|
415
460
|
return {
|
|
416
461
|
top: _w.visualViewport.pageTop,
|
|
417
462
|
left: _w.visualViewport.pageLeft,
|
|
418
|
-
scale: _w.visualViewport.scale
|
|
463
|
+
scale: _w.visualViewport.scale,
|
|
419
464
|
};
|
|
420
465
|
}
|
|
421
466
|
|
|
422
467
|
return {
|
|
423
468
|
top: 0,
|
|
424
469
|
left: 0,
|
|
425
|
-
scale: 1
|
|
470
|
+
scale: 1,
|
|
426
471
|
};
|
|
427
472
|
}
|
|
428
473
|
|
|
429
474
|
/**
|
|
430
|
-
* @description Copies the
|
|
431
|
-
* @param {Node} wwTarget Target element to copy(
|
|
432
|
-
* @param {boolean} includeWW Include the
|
|
433
|
-
* @param {
|
|
475
|
+
* @description Copies the `wwTarget` element and returns it with inline all styles applied.
|
|
476
|
+
* @param {Node} wwTarget Target element to copy(`.sun-editor.sun-editor-editable`)
|
|
477
|
+
* @param {boolean} includeWW Include the `wwTarget` element in the copy
|
|
478
|
+
* @param {Iterable<string>} styles Style list - kamel case
|
|
434
479
|
* @returns
|
|
435
480
|
*/
|
|
436
481
|
export function applyInlineStylesAll(wwTarget, includeWW, styles) {
|
|
@@ -494,19 +539,19 @@ export function waitForMediaLoad(target, timeout = 5000) {
|
|
|
494
539
|
|
|
495
540
|
const mediaPromises = mediaElements.map((element) => {
|
|
496
541
|
// image
|
|
497
|
-
if (element
|
|
542
|
+
if (IsHTMLImageElement(element)) {
|
|
498
543
|
if (element.complete) {
|
|
499
544
|
return Promise.resolve();
|
|
500
545
|
}
|
|
501
546
|
}
|
|
502
547
|
// video, audio
|
|
503
|
-
else if (element
|
|
548
|
+
else if (IsHTMLMediaElement(element)) {
|
|
504
549
|
if (element.readyState >= 2) {
|
|
505
550
|
return Promise.resolve();
|
|
506
551
|
}
|
|
507
552
|
}
|
|
508
553
|
// iframe
|
|
509
|
-
else if (element
|
|
554
|
+
else if (IsHTMLIFrameElement(element)) {
|
|
510
555
|
try {
|
|
511
556
|
if (element.contentDocument?.readyState === 'complete') {
|
|
512
557
|
return Promise.resolve();
|
|
@@ -529,6 +574,24 @@ export function waitForMediaLoad(target, timeout = 5000) {
|
|
|
529
574
|
});
|
|
530
575
|
}
|
|
531
576
|
|
|
577
|
+
/**
|
|
578
|
+
* @description Gets a CSS variable on the root element of the editor.
|
|
579
|
+
* @param {string} name - The CSS variable name (e.g. `--se-color-primary`)
|
|
580
|
+
* @return {string} The value of the CSS variable
|
|
581
|
+
*/
|
|
582
|
+
export function getRootCssVar(name) {
|
|
583
|
+
return _d.documentElement.style.getPropertyValue(name);
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
/**
|
|
587
|
+
* @description Sets a CSS variable on the root element of the editor.
|
|
588
|
+
* @param {string} name - The CSS variable name (e.g. `--se-color-primary`)
|
|
589
|
+
* @param {string} value - The CSS variable value
|
|
590
|
+
*/
|
|
591
|
+
export function setRootCssVar(name, value) {
|
|
592
|
+
_d.documentElement.style.setProperty(name, value);
|
|
593
|
+
}
|
|
594
|
+
|
|
532
595
|
/**
|
|
533
596
|
* @description Create tooltip HTML
|
|
534
597
|
* @param {string} text Tooltip text
|
|
@@ -566,7 +629,9 @@ const utils = {
|
|
|
566
629
|
getViewportSize,
|
|
567
630
|
applyInlineStylesAll,
|
|
568
631
|
waitForMediaLoad,
|
|
569
|
-
|
|
632
|
+
getRootCssVar,
|
|
633
|
+
setRootCssVar,
|
|
634
|
+
createTooltipInner,
|
|
570
635
|
};
|
|
571
636
|
|
|
572
637
|
export default utils;
|
package/src/helper/dom/index.js
CHANGED
package/src/helper/env.js
CHANGED
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
/** @type {Window} */
|
|
6
|
-
export const _w = window;
|
|
1
|
+
/** @type {SunEditor.GlobalWindow} */
|
|
2
|
+
export const _w = /** @type {SunEditor.GlobalWindow} */ (window);
|
|
7
3
|
/** @type {Document} */
|
|
8
4
|
export const _d = document;
|
|
9
5
|
|
|
@@ -22,7 +18,7 @@ export const ON_OVER_COMPONENT = Symbol('onOverComponent');
|
|
|
22
18
|
const userAgent = navigator.userAgent.toLowerCase();
|
|
23
19
|
|
|
24
20
|
/**
|
|
25
|
-
* @description Gets XMLHttpRequest object
|
|
21
|
+
* @description Gets `XMLHttpRequest` object
|
|
26
22
|
* @returns {XMLHttpRequest}
|
|
27
23
|
*/
|
|
28
24
|
export function getXMLHttpRequest() {
|
|
@@ -32,7 +28,7 @@ export function getXMLHttpRequest() {
|
|
|
32
28
|
/**
|
|
33
29
|
* @deprecated
|
|
34
30
|
* @description Returns the CSS text that has been applied to the current page.
|
|
35
|
-
* @param {Document
|
|
31
|
+
* @param {?Document} doc To get the CSS text of an document. If `null` get the current document.
|
|
36
32
|
* @returns {string} Styles string
|
|
37
33
|
*/
|
|
38
34
|
export function getPageStyle(doc) {
|
|
@@ -40,13 +36,11 @@ export function getPageStyle(doc) {
|
|
|
40
36
|
const sheets = (doc || _d).styleSheets;
|
|
41
37
|
|
|
42
38
|
for (let i = 0, len = sheets.length, rules; i < len; i++) {
|
|
43
|
-
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
44
39
|
try {
|
|
45
40
|
rules = sheets[i].cssRules;
|
|
46
|
-
} catch
|
|
41
|
+
} catch {
|
|
47
42
|
continue;
|
|
48
43
|
}
|
|
49
|
-
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
50
44
|
|
|
51
45
|
if (rules) {
|
|
52
46
|
for (let c = 0, cLen = rules.length; c < cLen; c++) {
|
|
@@ -63,7 +57,7 @@ export function getPageStyle(doc) {
|
|
|
63
57
|
* @description Get the the tag path of the arguments value
|
|
64
58
|
* @param {Array<string>} nameArray File name array
|
|
65
59
|
* @param {string} extension js, css
|
|
66
|
-
* @returns {string} If not found, return the first found value
|
|
60
|
+
* @returns {string} If not found, return the first found value.
|
|
67
61
|
*/
|
|
68
62
|
export function getIncludePath(nameArray, extension) {
|
|
69
63
|
let path = '';
|
|
@@ -93,34 +87,33 @@ export function getIncludePath(nameArray, extension) {
|
|
|
93
87
|
}
|
|
94
88
|
}
|
|
95
89
|
|
|
90
|
+
if (!path) {
|
|
91
|
+
throw new Error('[SUNEDITOR.helper.env.getIncludePath.fail] The SUNEDITOR installation path could not be automatically detected. (path: +' + path + ', extension: ' + extension + ')');
|
|
92
|
+
}
|
|
93
|
+
|
|
96
94
|
if (path === '') path = pathList.length > 0 ? pathList[0][src] : '';
|
|
97
95
|
|
|
98
96
|
if (!path.includes(':/') && '//' !== path.slice(0, 2)) {
|
|
99
97
|
path = false === path.includes('/') ? location.href.match(/^.*?:\/\/[^/]*/)[0] + path : location.href.match(/^[^?]*\/(?:)/)[0] + path;
|
|
100
98
|
}
|
|
101
99
|
|
|
102
|
-
if (!path) {
|
|
103
|
-
throw '[SUNEDITOR.helper.env.getIncludePath.fail] The SUNEDITOR installation path could not be automatically detected. (path: +' + path + ', extension: ' + extension + ')';
|
|
104
|
-
}
|
|
105
|
-
|
|
106
100
|
return path;
|
|
107
101
|
}
|
|
108
102
|
|
|
109
103
|
/** --- Check browser --- */
|
|
110
104
|
/**
|
|
111
|
-
* @description Check if support ResizeObserver function
|
|
112
|
-
* @returns {boolean} Whether support ResizeObserver function or not.
|
|
105
|
+
* @description Check if support `ResizeObserver` function
|
|
106
|
+
* @returns {boolean} Whether support `ResizeObserver` function or not.
|
|
113
107
|
*/
|
|
114
108
|
export const isResizeObserverSupported = (() => {
|
|
115
109
|
return typeof ResizeObserver === 'function';
|
|
116
110
|
})();
|
|
117
111
|
|
|
118
112
|
/**
|
|
119
|
-
* @description Check if support navigator.clipboard
|
|
120
|
-
* @returns {boolean} Whether support navigator.clipboard or not.
|
|
113
|
+
* @description Check if support `navigator.clipboard`
|
|
114
|
+
* @returns {boolean} Whether support `navigator.clipboard` or not.
|
|
121
115
|
*/
|
|
122
116
|
export const isClipboardSupported = (() => {
|
|
123
|
-
/* eslint-disable-next-line compat/compat */
|
|
124
117
|
return typeof navigator.clipboard?.write === 'function';
|
|
125
118
|
})();
|
|
126
119
|
|
|
@@ -161,7 +154,7 @@ export const isGecko = (() => {
|
|
|
161
154
|
* @type {boolean}
|
|
162
155
|
*/
|
|
163
156
|
export const isChromium = (() => {
|
|
164
|
-
return !!(/** @type {
|
|
157
|
+
return !!(/** @type {window & { chrome: any }} */ (_w).chrome);
|
|
165
158
|
})();
|
|
166
159
|
|
|
167
160
|
/**
|
|
@@ -174,12 +167,18 @@ export const isSafari = (() => {
|
|
|
174
167
|
|
|
175
168
|
/**
|
|
176
169
|
* @description Check if User Agent is Mobile device.
|
|
177
|
-
* - when the device is touchable, it is judged as a mobile device.
|
|
178
170
|
* @type {boolean}
|
|
179
171
|
*/
|
|
180
172
|
export const isMobile = (() => {
|
|
181
|
-
|
|
182
|
-
|
|
173
|
+
return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(userAgent);
|
|
174
|
+
})();
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* @description Check if the device is touchable.
|
|
178
|
+
* @type {boolean}
|
|
179
|
+
*/
|
|
180
|
+
export const isTouchDevice = (() => {
|
|
181
|
+
return navigator.maxTouchPoints > 0 && 'ontouchstart' in _w;
|
|
183
182
|
})();
|
|
184
183
|
|
|
185
184
|
/**
|
|
@@ -230,11 +229,12 @@ const env = {
|
|
|
230
229
|
isOSX_IOS,
|
|
231
230
|
isAndroid,
|
|
232
231
|
isMobile,
|
|
232
|
+
isTouchDevice,
|
|
233
233
|
cmdIcon,
|
|
234
234
|
shiftIcon,
|
|
235
235
|
DPI,
|
|
236
236
|
KATEX_WEBSITE,
|
|
237
|
-
MATHJAX_WEBSITE
|
|
237
|
+
MATHJAX_WEBSITE,
|
|
238
238
|
};
|
|
239
239
|
|
|
240
240
|
export default env;
|
package/src/helper/index.js
CHANGED