@opentiny/fluent-editor 4.0.0-alpha.1 → 4.0.0-alpha.3
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 +7 -24
- package/es/config/editor.utils.es.js +0 -2
- package/es/config/editor.utils.es.js.map +1 -1
- package/es/config/index.es.js +2 -2
- package/es/config/index.es.js.map +1 -1
- package/es/config/types/index.es.js +0 -20
- package/es/config/types/index.es.js.map +1 -1
- package/es/core/fluent-editor.es.js +4 -1
- package/es/core/fluent-editor.es.js.map +1 -1
- package/es/fluent-editor.es.js +26 -19
- package/es/fluent-editor.es.js.map +1 -1
- package/es/formats/emoji.es.js +14 -0
- package/es/formats/emoji.es.js.map +1 -0
- package/es/formats/index.es.js +11 -0
- package/es/formats/index.es.js.map +1 -0
- package/es/formats/soft-break.es.js +12 -5
- package/es/formats/soft-break.es.js.map +1 -1
- package/es/formats/strike.es.js +8 -5
- package/es/formats/strike.es.js.map +1 -1
- package/es/formats/video.es.js +14 -10
- package/es/formats/video.es.js.map +1 -1
- package/es/index.es.js +90 -31
- package/es/index.es.js.map +1 -1
- package/es/modules/ai/index.es.js +238 -0
- package/es/modules/ai/index.es.js.map +1 -0
- package/es/modules/counter.es.js +8 -3
- package/es/modules/counter.es.js.map +1 -1
- package/es/modules/custom-clipboard.es.js +20 -22
- package/es/modules/custom-clipboard.es.js.map +1 -1
- package/es/modules/custom-image/actions/action.es.js +19 -0
- package/es/modules/custom-image/actions/action.es.js.map +1 -0
- package/es/modules/custom-image/actions/{CustomResizeAction.es.js → custom-resize-action.es.js} +24 -11
- package/es/modules/custom-image/actions/{CustomResizeAction.es.js.map → custom-resize-action.es.js.map} +1 -1
- package/es/modules/custom-image/actions/{DeleteAction.es.js → delete-action.es.js} +8 -5
- package/es/modules/custom-image/actions/delete-action.es.js.map +1 -0
- package/es/modules/custom-image/actions/image-toolbar-buttons.es.js +137 -0
- package/es/modules/custom-image/actions/image-toolbar-buttons.es.js.map +1 -0
- package/es/modules/custom-image/actions/index.es.js +18 -0
- package/es/modules/custom-image/actions/index.es.js.map +1 -0
- package/es/modules/custom-image/actions/toolbar-action.es.js +33 -0
- package/es/modules/custom-image/actions/toolbar-action.es.js.map +1 -0
- package/es/modules/custom-image/actions/toolbar.es.js +110 -0
- package/es/modules/custom-image/actions/toolbar.es.js.map +1 -0
- package/es/modules/custom-image/{BlotFormatter.es.js → blot-formatter.es.js} +23 -49
- package/es/modules/custom-image/blot-formatter.es.js.map +1 -0
- package/es/modules/custom-image/image.es.js +31 -6
- package/es/modules/custom-image/image.es.js.map +1 -1
- package/es/modules/custom-image/index.es.js +9 -0
- package/es/modules/custom-image/index.es.js.map +1 -0
- package/es/modules/custom-image/options.es.js +85 -0
- package/es/modules/custom-image/options.es.js.map +1 -0
- package/es/modules/custom-image/specs/blot-spec.es.js +33 -0
- package/es/modules/custom-image/specs/blot-spec.es.js.map +1 -0
- package/es/modules/custom-image/specs/{CustomImageSpec.es.js → custom-image-spec.es.js} +13 -14
- package/es/modules/custom-image/specs/custom-image-spec.es.js.map +1 -0
- package/es/modules/custom-image/specs/image-spec.es.js +32 -0
- package/es/modules/custom-image/specs/image-spec.es.js.map +1 -0
- package/es/modules/custom-image/specs/index.es.js +9 -0
- package/es/modules/custom-image/specs/index.es.js.map +1 -0
- package/es/modules/custom-uploader.es.js +6 -4
- package/es/modules/custom-uploader.es.js.map +1 -1
- package/es/modules/divider.es.js +8 -7
- package/es/modules/divider.es.js.map +1 -1
- package/es/modules/emoji.es.js +175 -0
- package/es/modules/emoji.es.js.map +1 -0
- package/es/modules/file/formats/file.es.js +10 -8
- package/es/modules/file/formats/file.es.js.map +1 -1
- package/es/modules/file/index.es.js +6 -28
- package/es/modules/file/index.es.js.map +1 -1
- package/es/modules/file/modules/file-bar.es.js +11 -3
- package/es/modules/file/modules/file-bar.es.js.map +1 -1
- package/es/modules/file/modules/file-module.es.js +35 -0
- package/es/modules/file/modules/file-module.es.js.map +1 -0
- package/es/modules/i18n.es.js +6 -3
- package/es/modules/i18n.es.js.map +1 -1
- package/es/modules/index.es.js +26 -0
- package/es/modules/index.es.js.map +1 -0
- package/es/modules/link/formats/link.es.js +14 -10
- package/es/modules/link/formats/link.es.js.map +1 -1
- package/es/modules/link/index.es.js +4 -12
- package/es/modules/link/index.es.js.map +1 -1
- package/es/modules/link/modules/tooltip.es.js +28 -19
- package/es/modules/link/modules/tooltip.es.js.map +1 -1
- package/es/modules/mathlive/formats.es.js +10 -7
- package/es/modules/mathlive/formats.es.js.map +1 -1
- package/es/modules/mathlive/index.es.js +6 -30
- package/es/modules/mathlive/index.es.js.map +1 -1
- package/es/modules/mathlive/module.es.js +40 -0
- package/es/modules/mathlive/module.es.js.map +1 -0
- package/es/modules/mathlive/tooltip.es.js +9 -5
- package/es/modules/mathlive/tooltip.es.js.map +1 -1
- package/es/modules/mention/index.es.js +7 -0
- package/es/modules/{emoji/emoji-list → mention}/index.es.js.map +1 -1
- package/es/modules/mention/{MentionLink.es.js → mention-link.es.js} +14 -6
- package/es/modules/mention/mention-link.es.js.map +1 -0
- package/es/modules/mention/{Mention.es.js → mention.es.js} +28 -20
- package/es/modules/mention/mention.es.js.map +1 -0
- package/es/modules/shortcut-key/index.es.js.map +1 -1
- package/es/modules/syntax.es.js +4 -0
- package/es/modules/syntax.es.js.map +1 -1
- package/es/modules/table-up/index.es.js +4 -0
- package/es/modules/table-up/index.es.js.map +1 -1
- package/es/modules/toolbar/better-picker.es.js +5 -0
- package/es/modules/toolbar/better-picker.es.js.map +1 -1
- package/es/modules/toolbar/better-toolbar.es.js +138 -0
- package/es/modules/toolbar/better-toolbar.es.js.map +1 -0
- package/es/modules/toolbar/index.es.js +5 -135
- package/es/modules/toolbar/index.es.js.map +1 -1
- package/es/node_modules/.pnpm/@emoji-mart_data@1.2.1/node_modules/@emoji-mart/data/sets/15/native.json.es.js +40145 -0
- package/es/node_modules/.pnpm/@emoji-mart_data@1.2.1/node_modules/@emoji-mart/data/sets/15/native.json.es.js.map +1 -0
- package/es/node_modules/.pnpm/@floating-ui_core@1.7.2/node_modules/@floating-ui/core/dist/floating-ui.core.es.js +938 -0
- package/es/node_modules/.pnpm/@floating-ui_core@1.7.2/node_modules/@floating-ui/core/dist/floating-ui.core.es.js.map +1 -0
- package/es/node_modules/.pnpm/@floating-ui_dom@1.7.2/node_modules/@floating-ui/dom/dist/floating-ui.dom.es.js +624 -0
- package/es/node_modules/.pnpm/@floating-ui_dom@1.7.2/node_modules/@floating-ui/dom/dist/floating-ui.dom.es.js.map +1 -0
- package/es/node_modules/.pnpm/@floating-ui_utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.es.js +174 -0
- package/es/node_modules/.pnpm/@floating-ui_utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.es.js.map +1 -0
- package/es/node_modules/.pnpm/@floating-ui_utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.es.js +159 -0
- package/es/node_modules/.pnpm/@floating-ui_utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.es.js.map +1 -0
- package/es/node_modules/.pnpm/emoji-mart@5.6.0/node_modules/emoji-mart/dist/module.es.js +2849 -0
- package/es/node_modules/.pnpm/emoji-mart@5.6.0/node_modules/emoji-mart/dist/module.es.js.map +1 -0
- package/es/themes/snow.es.js +6 -10
- package/es/themes/snow.es.js.map +1 -1
- package/es/tools/fullscreen.es.js.map +1 -1
- package/es/ui/icons.config.es.js +23 -0
- package/es/ui/icons.config.es.js.map +1 -1
- package/es/ui/icons.es.js +2 -1
- package/es/ui/icons.es.js.map +1 -1
- package/es/utils/is.es.js.map +1 -1
- package/lib/config/editor.utils.cjs.js +0 -2
- package/lib/config/editor.utils.cjs.js.map +1 -1
- package/lib/config/index.cjs.js +1 -1
- package/lib/config/index.cjs.js.map +1 -1
- package/lib/config/types/index.cjs.js +0 -20
- package/lib/config/types/index.cjs.js.map +1 -1
- package/lib/core/fluent-editor.cjs.js +4 -1
- package/lib/core/fluent-editor.cjs.js.map +1 -1
- package/lib/fluent-editor.cjs.js +35 -28
- package/lib/fluent-editor.cjs.js.map +1 -1
- package/lib/formats/emoji.cjs.js +14 -0
- package/lib/formats/emoji.cjs.js.map +1 -0
- package/lib/formats/index.cjs.js +11 -0
- package/lib/formats/index.cjs.js.map +1 -0
- package/lib/formats/soft-break.cjs.js +13 -6
- package/lib/formats/soft-break.cjs.js.map +1 -1
- package/lib/formats/strike.cjs.js +9 -6
- package/lib/formats/strike.cjs.js.map +1 -1
- package/lib/formats/video.cjs.js +15 -11
- package/lib/formats/video.cjs.js.map +1 -1
- package/lib/index.cjs.js +111 -34
- package/lib/index.cjs.js.map +1 -1
- package/lib/modules/ai/index.cjs.js +238 -0
- package/lib/modules/ai/index.cjs.js.map +1 -0
- package/lib/modules/counter.cjs.js +8 -3
- package/lib/modules/counter.cjs.js.map +1 -1
- package/lib/modules/custom-clipboard.cjs.js +21 -23
- package/lib/modules/custom-clipboard.cjs.js.map +1 -1
- package/lib/modules/custom-image/actions/action.cjs.js +19 -0
- package/lib/modules/custom-image/actions/action.cjs.js.map +1 -0
- package/lib/modules/custom-image/actions/{CustomResizeAction.cjs.js → custom-resize-action.cjs.js} +26 -13
- package/lib/modules/custom-image/actions/{CustomResizeAction.cjs.js.map → custom-resize-action.cjs.js.map} +1 -1
- package/lib/modules/custom-image/actions/{DeleteAction.cjs.js → delete-action.cjs.js} +10 -7
- package/lib/modules/custom-image/actions/delete-action.cjs.js.map +1 -0
- package/lib/modules/custom-image/actions/image-toolbar-buttons.cjs.js +137 -0
- package/lib/modules/custom-image/actions/image-toolbar-buttons.cjs.js.map +1 -0
- package/lib/modules/custom-image/actions/index.cjs.js +18 -0
- package/lib/modules/custom-image/actions/index.cjs.js.map +1 -0
- package/lib/modules/custom-image/actions/toolbar-action.cjs.js +33 -0
- package/lib/modules/custom-image/actions/toolbar-action.cjs.js.map +1 -0
- package/lib/modules/custom-image/actions/toolbar.cjs.js +110 -0
- package/lib/modules/custom-image/actions/toolbar.cjs.js.map +1 -0
- package/lib/modules/custom-image/{BlotFormatter.cjs.js → blot-formatter.cjs.js} +24 -50
- package/lib/modules/custom-image/blot-formatter.cjs.js.map +1 -0
- package/lib/modules/custom-image/image.cjs.js +32 -7
- package/lib/modules/custom-image/image.cjs.js.map +1 -1
- package/lib/modules/custom-image/index.cjs.js +9 -0
- package/lib/modules/custom-image/index.cjs.js.map +1 -0
- package/lib/modules/custom-image/options.cjs.js +85 -0
- package/lib/modules/custom-image/options.cjs.js.map +1 -0
- package/lib/modules/custom-image/specs/blot-spec.cjs.js +33 -0
- package/lib/modules/custom-image/specs/blot-spec.cjs.js.map +1 -0
- package/lib/modules/custom-image/specs/{CustomImageSpec.cjs.js → custom-image-spec.cjs.js} +14 -15
- package/lib/modules/custom-image/specs/custom-image-spec.cjs.js.map +1 -0
- package/lib/modules/custom-image/specs/image-spec.cjs.js +32 -0
- package/lib/modules/custom-image/specs/image-spec.cjs.js.map +1 -0
- package/lib/modules/custom-image/specs/index.cjs.js +9 -0
- package/lib/modules/custom-image/specs/index.cjs.js.map +1 -0
- package/lib/modules/custom-uploader.cjs.js +6 -4
- package/lib/modules/custom-uploader.cjs.js.map +1 -1
- package/lib/modules/divider.cjs.js +9 -8
- package/lib/modules/divider.cjs.js.map +1 -1
- package/lib/modules/emoji.cjs.js +175 -0
- package/lib/modules/emoji.cjs.js.map +1 -0
- package/lib/modules/file/formats/file.cjs.js +11 -9
- package/lib/modules/file/formats/file.cjs.js.map +1 -1
- package/lib/modules/file/index.cjs.js +5 -27
- package/lib/modules/file/index.cjs.js.map +1 -1
- package/lib/modules/file/modules/file-bar.cjs.js +12 -4
- package/lib/modules/file/modules/file-bar.cjs.js.map +1 -1
- package/lib/modules/file/modules/file-module.cjs.js +35 -0
- package/lib/modules/file/modules/file-module.cjs.js.map +1 -0
- package/lib/modules/i18n.cjs.js +6 -3
- package/lib/modules/i18n.cjs.js.map +1 -1
- package/lib/modules/index.cjs.js +26 -0
- package/lib/modules/index.cjs.js.map +1 -0
- package/lib/modules/link/formats/link.cjs.js +15 -11
- package/lib/modules/link/formats/link.cjs.js.map +1 -1
- package/lib/modules/link/index.cjs.js +4 -12
- package/lib/modules/link/index.cjs.js.map +1 -1
- package/lib/modules/link/modules/tooltip.cjs.js +28 -19
- package/lib/modules/link/modules/tooltip.cjs.js.map +1 -1
- package/lib/modules/mathlive/formats.cjs.js +11 -8
- package/lib/modules/mathlive/formats.cjs.js.map +1 -1
- package/lib/modules/mathlive/index.cjs.js +5 -29
- package/lib/modules/mathlive/index.cjs.js.map +1 -1
- package/lib/modules/mathlive/module.cjs.js +40 -0
- package/lib/modules/mathlive/module.cjs.js.map +1 -0
- package/lib/modules/mathlive/tooltip.cjs.js +10 -6
- package/lib/modules/mathlive/tooltip.cjs.js.map +1 -1
- package/lib/modules/mention/index.cjs.js +7 -0
- package/lib/modules/{emoji/emoji-list → mention}/index.cjs.js.map +1 -1
- package/lib/modules/mention/{MentionLink.cjs.js → mention-link.cjs.js} +15 -7
- package/lib/modules/mention/mention-link.cjs.js.map +1 -0
- package/lib/modules/mention/{Mention.cjs.js → mention.cjs.js} +30 -22
- package/lib/modules/mention/mention.cjs.js.map +1 -0
- package/lib/modules/shortcut-key/index.cjs.js.map +1 -1
- package/lib/modules/syntax.cjs.js +4 -0
- package/lib/modules/syntax.cjs.js.map +1 -1
- package/lib/modules/table-up/index.cjs.js +4 -0
- package/lib/modules/table-up/index.cjs.js.map +1 -1
- package/lib/modules/toolbar/better-picker.cjs.js +5 -0
- package/lib/modules/toolbar/better-picker.cjs.js.map +1 -1
- package/lib/modules/toolbar/better-toolbar.cjs.js +138 -0
- package/lib/modules/toolbar/better-toolbar.cjs.js.map +1 -0
- package/lib/modules/toolbar/index.cjs.js +6 -136
- package/lib/modules/toolbar/index.cjs.js.map +1 -1
- package/lib/node_modules/.pnpm/@emoji-mart_data@1.2.1/node_modules/@emoji-mart/data/sets/15/native.json.cjs.js +40145 -0
- package/lib/node_modules/.pnpm/@emoji-mart_data@1.2.1/node_modules/@emoji-mart/data/sets/15/native.json.cjs.js.map +1 -0
- package/lib/node_modules/.pnpm/@floating-ui_core@1.7.2/node_modules/@floating-ui/core/dist/floating-ui.core.cjs.js +938 -0
- package/lib/node_modules/.pnpm/@floating-ui_core@1.7.2/node_modules/@floating-ui/core/dist/floating-ui.core.cjs.js.map +1 -0
- package/lib/node_modules/.pnpm/@floating-ui_dom@1.7.2/node_modules/@floating-ui/dom/dist/floating-ui.dom.cjs.js +624 -0
- package/lib/node_modules/.pnpm/@floating-ui_dom@1.7.2/node_modules/@floating-ui/dom/dist/floating-ui.dom.cjs.js.map +1 -0
- package/lib/node_modules/.pnpm/@floating-ui_utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.cjs.js +159 -0
- package/lib/node_modules/.pnpm/@floating-ui_utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.cjs.js.map +1 -0
- package/lib/node_modules/.pnpm/@floating-ui_utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.cjs.js +174 -0
- package/lib/node_modules/.pnpm/@floating-ui_utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.cjs.js.map +1 -0
- package/lib/node_modules/.pnpm/emoji-mart@5.6.0/node_modules/emoji-mart/dist/module.cjs.js +2847 -0
- package/lib/node_modules/.pnpm/emoji-mart@5.6.0/node_modules/emoji-mart/dist/module.cjs.js.map +1 -0
- package/lib/themes/snow.cjs.js +7 -11
- package/lib/themes/snow.cjs.js.map +1 -1
- package/lib/tools/fullscreen.cjs.js.map +1 -1
- package/lib/ui/icons.cjs.js +1 -0
- package/lib/ui/icons.cjs.js.map +1 -1
- package/lib/ui/icons.config.cjs.js +23 -0
- package/lib/ui/icons.config.cjs.js.map +1 -1
- package/lib/utils/is.cjs.js.map +1 -1
- package/package.json +8 -7
- package/style.css +92 -933
- package/types/config/editor.utils.d.ts +0 -1
- package/types/config/index.d.ts +1 -0
- package/types/config/types/editor-config.interface.d.ts +0 -7
- package/types/config/types/editor-modules.interface.d.ts +21 -12
- package/types/config/types/index.d.ts +0 -20
- package/types/config/types/type.d.ts +0 -4
- package/types/core/fluent-editor.d.ts +0 -1
- package/types/formats/emoji.d.ts +9 -0
- package/types/formats/index.d.ts +4 -0
- package/types/formats/soft-break.d.ts +6 -7
- package/types/formats/strike.d.ts +6 -4
- package/types/formats/video.d.ts +4 -6
- package/types/index.d.ts +6 -5
- package/types/modules/ai/index.d.ts +39 -0
- package/types/modules/counter.d.ts +8 -1
- package/types/modules/custom-clipboard.d.ts +3 -6
- package/types/modules/custom-image/Options.d.ts +34 -23
- package/types/modules/custom-image/actions/Action.d.ts +5 -3
- package/types/modules/custom-image/actions/custom-resize-action.d.ts +24 -0
- package/types/modules/custom-image/actions/delete-action.d.ts +7 -0
- package/types/modules/custom-image/actions/image-toolbar-buttons.d.ts +17 -0
- package/types/modules/custom-image/actions/index.d.ts +6 -0
- package/types/modules/custom-image/actions/toolbar-action.d.ts +12 -0
- package/types/modules/custom-image/actions/toolbar.d.ts +20 -0
- package/types/modules/custom-image/blot-formatter.d.ts +24 -0
- package/types/modules/custom-image/image-bar.d.ts +9 -7
- package/types/modules/custom-image/image.d.ts +15 -13
- package/types/modules/custom-image/index.d.ts +4 -0
- package/types/modules/custom-image/specs/blot-spec.d.ts +13 -0
- package/types/modules/custom-image/specs/custom-image-spec.d.ts +18 -0
- package/types/modules/custom-image/specs/image-spec.d.ts +9 -0
- package/types/modules/custom-image/specs/index.d.ts +3 -0
- package/types/modules/custom-uploader.d.ts +41 -0
- package/types/modules/divider.d.ts +6 -4
- package/types/modules/emoji/formats/emoji-blot.d.ts +9 -7
- package/types/modules/emoji/index.d.ts +3 -10
- package/types/modules/emoji/modules/emoji.d.ts +6 -6
- package/types/modules/emoji/modules/toolbar-emoji.d.ts +7 -6
- package/types/modules/emoji.d.ts +35 -0
- package/types/modules/file/formats/file.d.ts +2 -2
- package/types/modules/file/index.d.ts +3 -11
- package/types/modules/file/modules/file-bar.d.ts +1 -1
- package/types/modules/file/modules/file-module.d.ts +10 -0
- package/types/modules/i18n.d.ts +1 -2
- package/types/modules/index.d.ts +15 -0
- package/types/modules/link/formats/link.d.ts +5 -5
- package/types/modules/link/index.d.ts +2 -6
- package/types/modules/link/modules/tooltip.d.ts +5 -10
- package/types/modules/mathlive/formats.d.ts +2 -2
- package/types/modules/mathlive/index.d.ts +3 -9
- package/types/modules/mathlive/module.d.ts +10 -0
- package/types/modules/mathlive/tooltip.d.ts +1 -1
- package/types/modules/mention/Mention.d.ts +3 -4
- package/types/modules/mention/index.d.ts +2 -0
- package/types/modules/mention/mention-link.d.ts +17 -0
- package/types/modules/shortcut-key/index.d.ts +12 -8
- package/types/modules/table-up/index.d.ts +3 -3
- package/types/modules/toolbar/better-toolbar.d.ts +8 -0
- package/types/modules/toolbar/index.d.ts +2 -8
- package/types/tools/fullscreen.d.ts +5 -1
- package/types/ui/icons.config.d.ts +2 -0
- package/types/utils/is.d.ts +1 -1
- package/es/config/types/additional-toolbar-item.interface.es.js +0 -2
- package/es/config/types/additional-toolbar-item.interface.es.js.map +0 -1
- package/es/config/types/content-change.interface.es.js +0 -2
- package/es/config/types/content-change.interface.es.js.map +0 -1
- package/es/config/types/content-save.interface.es.js +0 -2
- package/es/config/types/content-save.interface.es.js.map +0 -1
- package/es/config/types/counter-option.interface.es.js +0 -2
- package/es/config/types/counter-option.interface.es.js.map +0 -1
- package/es/config/types/editor-toolbar.interface.es.js +0 -2
- package/es/config/types/editor-toolbar.interface.es.js.map +0 -1
- package/es/config/types/file-operation.interface.es.js +0 -2
- package/es/config/types/file-operation.interface.es.js.map +0 -1
- package/es/config/types/focus-change.interface.es.js +0 -2
- package/es/config/types/focus-change.interface.es.js.map +0 -1
- package/es/config/types/fullscreen-module.interface.es.js +0 -2
- package/es/config/types/fullscreen-module.interface.es.js.map +0 -1
- package/es/config/types/help-panel-item.interface.es.js +0 -2
- package/es/config/types/help-panel-item.interface.es.js.map +0 -1
- package/es/config/types/help-panel-option.interface.es.js +0 -2
- package/es/config/types/help-panel-option.interface.es.js.map +0 -1
- package/es/config/types/image-module.interface.es.js +0 -2
- package/es/config/types/image-module.interface.es.js.map +0 -1
- package/es/config/types/image-upload.interface.es.js +0 -2
- package/es/config/types/image-upload.interface.es.js.map +0 -1
- package/es/config/types/load-on-demand-module.interface.es.js +0 -2
- package/es/config/types/load-on-demand-module.interface.es.js.map +0 -1
- package/es/config/types/mention-module.interface.es.js +0 -2
- package/es/config/types/mention-module.interface.es.js.map +0 -1
- package/es/config/types/paste-change.interface.es.js +0 -2
- package/es/config/types/paste-change.interface.es.js.map +0 -1
- package/es/config/types/quick-menu-module.interface.es.js +0 -2
- package/es/config/types/quick-menu-module.interface.es.js.map +0 -1
- package/es/config/types/range.interface.es.js +0 -2
- package/es/config/types/range.interface.es.js.map +0 -1
- package/es/config/types/registry-options.interface.es.js +0 -2
- package/es/config/types/registry-options.interface.es.js.map +0 -1
- package/es/config/types/selection-change.interface.es.js +0 -2
- package/es/config/types/selection-change.interface.es.js.map +0 -1
- package/es/config/types/toolbar-item.interface.es.js +0 -2
- package/es/config/types/toolbar-item.interface.es.js.map +0 -1
- package/es/config/types/validate-error.interface.es.js +0 -2
- package/es/config/types/validate-error.interface.es.js.map +0 -1
- package/es/modules/custom-image/BlotFormatter.es.js.map +0 -1
- package/es/modules/custom-image/Options.es.js +0 -95
- package/es/modules/custom-image/Options.es.js.map +0 -1
- package/es/modules/custom-image/actions/Action.es.js +0 -15
- package/es/modules/custom-image/actions/Action.es.js.map +0 -1
- package/es/modules/custom-image/actions/DeleteAction.es.js.map +0 -1
- package/es/modules/custom-image/image-bar.es.js +0 -127
- package/es/modules/custom-image/image-bar.es.js.map +0 -1
- package/es/modules/custom-image/specs/BlotSpec.es.js +0 -27
- package/es/modules/custom-image/specs/BlotSpec.es.js.map +0 -1
- package/es/modules/custom-image/specs/CustomImageSpec.es.js.map +0 -1
- package/es/modules/custom-image/specs/ImageSpec.es.js +0 -29
- package/es/modules/custom-image/specs/ImageSpec.es.js.map +0 -1
- package/es/modules/emoji/emoji-list/index.es.js +0 -5
- package/es/modules/emoji/emoji-list/people.es.js +0 -114
- package/es/modules/emoji/emoji-list/people.es.js.map +0 -1
- package/es/modules/emoji/emoji-list.es.js +0 -9
- package/es/modules/emoji/emoji-list.es.js.map +0 -1
- package/es/modules/emoji/emoji-map.es.js +0 -9
- package/es/modules/emoji/emoji-map.es.js.map +0 -1
- package/es/modules/emoji/emoji-sprite.es.js +0 -5
- package/es/modules/emoji/emoji-sprite.es.js.map +0 -1
- package/es/modules/emoji/formats/emoji-blot.es.js +0 -41
- package/es/modules/emoji/formats/emoji-blot.es.js.map +0 -1
- package/es/modules/emoji/index.es.js +0 -8
- package/es/modules/emoji/index.es.js.map +0 -1
- package/es/modules/emoji/modules/emoji.es.js +0 -248
- package/es/modules/emoji/modules/emoji.es.js.map +0 -1
- package/es/modules/emoji/modules/toolbar-emoji.es.js +0 -153
- package/es/modules/emoji/modules/toolbar-emoji.es.js.map +0 -1
- package/es/modules/emoji/utils.es.js +0 -19
- package/es/modules/emoji/utils.es.js.map +0 -1
- package/es/modules/mention/Mention.es.js.map +0 -1
- package/es/modules/mention/MentionLink.es.js.map +0 -1
- package/lib/config/types/additional-toolbar-item.interface.cjs.js +0 -2
- package/lib/config/types/additional-toolbar-item.interface.cjs.js.map +0 -1
- package/lib/config/types/content-change.interface.cjs.js +0 -2
- package/lib/config/types/content-change.interface.cjs.js.map +0 -1
- package/lib/config/types/content-save.interface.cjs.js +0 -2
- package/lib/config/types/content-save.interface.cjs.js.map +0 -1
- package/lib/config/types/counter-option.interface.cjs.js +0 -2
- package/lib/config/types/counter-option.interface.cjs.js.map +0 -1
- package/lib/config/types/editor-toolbar.interface.cjs.js +0 -2
- package/lib/config/types/editor-toolbar.interface.cjs.js.map +0 -1
- package/lib/config/types/file-operation.interface.cjs.js +0 -2
- package/lib/config/types/file-operation.interface.cjs.js.map +0 -1
- package/lib/config/types/focus-change.interface.cjs.js +0 -2
- package/lib/config/types/focus-change.interface.cjs.js.map +0 -1
- package/lib/config/types/fullscreen-module.interface.cjs.js +0 -2
- package/lib/config/types/fullscreen-module.interface.cjs.js.map +0 -1
- package/lib/config/types/help-panel-item.interface.cjs.js +0 -2
- package/lib/config/types/help-panel-item.interface.cjs.js.map +0 -1
- package/lib/config/types/help-panel-option.interface.cjs.js +0 -2
- package/lib/config/types/help-panel-option.interface.cjs.js.map +0 -1
- package/lib/config/types/image-module.interface.cjs.js +0 -2
- package/lib/config/types/image-module.interface.cjs.js.map +0 -1
- package/lib/config/types/image-upload.interface.cjs.js +0 -2
- package/lib/config/types/image-upload.interface.cjs.js.map +0 -1
- package/lib/config/types/load-on-demand-module.interface.cjs.js +0 -2
- package/lib/config/types/load-on-demand-module.interface.cjs.js.map +0 -1
- package/lib/config/types/mention-module.interface.cjs.js +0 -2
- package/lib/config/types/mention-module.interface.cjs.js.map +0 -1
- package/lib/config/types/paste-change.interface.cjs.js +0 -2
- package/lib/config/types/paste-change.interface.cjs.js.map +0 -1
- package/lib/config/types/quick-menu-module.interface.cjs.js +0 -2
- package/lib/config/types/quick-menu-module.interface.cjs.js.map +0 -1
- package/lib/config/types/range.interface.cjs.js +0 -2
- package/lib/config/types/range.interface.cjs.js.map +0 -1
- package/lib/config/types/registry-options.interface.cjs.js +0 -2
- package/lib/config/types/registry-options.interface.cjs.js.map +0 -1
- package/lib/config/types/selection-change.interface.cjs.js +0 -2
- package/lib/config/types/selection-change.interface.cjs.js.map +0 -1
- package/lib/config/types/toolbar-item.interface.cjs.js +0 -2
- package/lib/config/types/toolbar-item.interface.cjs.js.map +0 -1
- package/lib/config/types/validate-error.interface.cjs.js +0 -2
- package/lib/config/types/validate-error.interface.cjs.js.map +0 -1
- package/lib/modules/custom-image/BlotFormatter.cjs.js.map +0 -1
- package/lib/modules/custom-image/Options.cjs.js +0 -95
- package/lib/modules/custom-image/Options.cjs.js.map +0 -1
- package/lib/modules/custom-image/actions/Action.cjs.js +0 -15
- package/lib/modules/custom-image/actions/Action.cjs.js.map +0 -1
- package/lib/modules/custom-image/actions/DeleteAction.cjs.js.map +0 -1
- package/lib/modules/custom-image/image-bar.cjs.js +0 -127
- package/lib/modules/custom-image/image-bar.cjs.js.map +0 -1
- package/lib/modules/custom-image/specs/BlotSpec.cjs.js +0 -27
- package/lib/modules/custom-image/specs/BlotSpec.cjs.js.map +0 -1
- package/lib/modules/custom-image/specs/CustomImageSpec.cjs.js.map +0 -1
- package/lib/modules/custom-image/specs/ImageSpec.cjs.js +0 -29
- package/lib/modules/custom-image/specs/ImageSpec.cjs.js.map +0 -1
- package/lib/modules/emoji/emoji-list/index.cjs.js +0 -5
- package/lib/modules/emoji/emoji-list/people.cjs.js +0 -114
- package/lib/modules/emoji/emoji-list/people.cjs.js.map +0 -1
- package/lib/modules/emoji/emoji-list.cjs.js +0 -9
- package/lib/modules/emoji/emoji-list.cjs.js.map +0 -1
- package/lib/modules/emoji/emoji-map.cjs.js +0 -9
- package/lib/modules/emoji/emoji-map.cjs.js.map +0 -1
- package/lib/modules/emoji/emoji-sprite.cjs.js +0 -5
- package/lib/modules/emoji/emoji-sprite.cjs.js.map +0 -1
- package/lib/modules/emoji/formats/emoji-blot.cjs.js +0 -41
- package/lib/modules/emoji/formats/emoji-blot.cjs.js.map +0 -1
- package/lib/modules/emoji/index.cjs.js +0 -8
- package/lib/modules/emoji/index.cjs.js.map +0 -1
- package/lib/modules/emoji/modules/emoji.cjs.js +0 -248
- package/lib/modules/emoji/modules/emoji.cjs.js.map +0 -1
- package/lib/modules/emoji/modules/toolbar-emoji.cjs.js +0 -153
- package/lib/modules/emoji/modules/toolbar-emoji.cjs.js.map +0 -1
- package/lib/modules/emoji/utils.cjs.js +0 -19
- package/lib/modules/emoji/utils.cjs.js.map +0 -1
- package/lib/modules/mention/Mention.cjs.js.map +0 -1
- package/lib/modules/mention/MentionLink.cjs.js.map +0 -1
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
4
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
6
|
const Quill = require("quill");
|
|
4
7
|
const editor_utils = require("../../../config/editor.utils.cjs.js");
|
|
5
8
|
const Embed = Quill.import("blots/embed");
|
|
6
9
|
const FILE_ATTRIBUTES = ["id", "title", "size", "lastModified"];
|
|
7
|
-
|
|
10
|
+
class File extends Embed {
|
|
8
11
|
static create(value) {
|
|
9
12
|
const node = super.create(value);
|
|
10
13
|
const size = value.size / 1024;
|
|
@@ -44,11 +47,10 @@ const _File = class _File extends Embed {
|
|
|
44
47
|
static sanitize(url) {
|
|
45
48
|
return editor_utils.sanitize(url, this.PROTOCOL_WHITELIST) && url || "";
|
|
46
49
|
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
exports.default = File;
|
|
50
|
+
}
|
|
51
|
+
__publicField(File, "blotName", "file");
|
|
52
|
+
__publicField(File, "tagName", "A");
|
|
53
|
+
__publicField(File, "className", "ql-file-item");
|
|
54
|
+
__publicField(File, "PROTOCOL_WHITELIST", ["http", "https", "blob"]);
|
|
55
|
+
exports.File = File;
|
|
54
56
|
//# sourceMappingURL=file.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file.cjs.js","sources":["../../../../../src/modules/file/formats/file.ts"],"sourcesContent":["import type TypeEmbed from 'quill/blots/embed'\r\nimport Quill from 'quill'\r\nimport { sanitize } from '../../../config/editor.utils'\r\n\r\nconst Embed = Quill.import('blots/embed') as typeof TypeEmbed\r\nconst FILE_ATTRIBUTES = ['id', 'title', 'size', 'lastModified']\r\n\r\nexport interface FileValue {\r\n size: number\r\n src: string\r\n title: string\r\n}\r\
|
|
1
|
+
{"version":3,"file":"file.cjs.js","sources":["../../../../../src/modules/file/formats/file.ts"],"sourcesContent":["import type TypeEmbed from 'quill/blots/embed'\r\nimport Quill from 'quill'\r\nimport { sanitize } from '../../../config/editor.utils'\r\n\r\nconst Embed = Quill.import('blots/embed') as typeof TypeEmbed\r\nconst FILE_ATTRIBUTES = ['id', 'title', 'size', 'lastModified']\r\n\r\nexport interface FileValue {\r\n size: number\r\n src: string\r\n title: string\r\n}\r\nexport class File extends Embed {\r\n static blotName = 'file'\r\n static tagName = 'A'\r\n static className = 'ql-file-item'\r\n static PROTOCOL_WHITELIST = ['http', 'https', 'blob']\r\n\r\n static create(value: FileValue) {\r\n const node = super.create(value) as HTMLAnchorElement\r\n const size = value.size / 1024\r\n const fixSize = !size ? 0 : size < 1 ? 1 : size.toFixed(0)\r\n node.classList.add('icon-file')\r\n node.setAttribute('contenteditable', 'false')\r\n const fileSvg = '<svg viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"><path d=\"M854.6 288.6L639.4 73.4c-6-6-14.1-9.4-22.6-9.4H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V311.3c0-8.5-3.4-16.7-9.4-22.7zM790.2 326H602V137.8L790.2 326z m1.8 562H232V136h302v216c0 23.2 18.8 42 42 42h216v494z\" p-id=\"2307\"></path></svg>'\r\n node.innerHTML = `${fileSvg} ${value.title} (${fixSize} KB)`\r\n const src = this.sanitize(value.src)\r\n if (src) {\r\n node.href = src\r\n node.target = '_blank'\r\n }\r\n FILE_ATTRIBUTES.forEach((key) => {\r\n if (value[key]) {\r\n node.dataset[key] = value[key]\r\n }\r\n })\r\n return node\r\n }\r\n\r\n static value(domNode: HTMLAnchorElement) {\r\n return this.getFormats(domNode)\r\n }\r\n\r\n static getFormats(domNode: HTMLAnchorElement) {\r\n const formats: Record<string, string> = {}\r\n const href = this.sanitize(domNode.href)\r\n if (href) {\r\n formats.src = href\r\n }\r\n FILE_ATTRIBUTES.forEach((key) => {\r\n if (domNode.dataset[key]) {\r\n formats[key] = domNode.dataset[key]\r\n }\r\n })\r\n return formats\r\n }\r\n\r\n static sanitize(url: string) {\r\n return (sanitize(url, this.PROTOCOL_WHITELIST) && url) || ''\r\n }\r\n}\r\n"],"names":["sanitize"],"mappings":";;;;;;;AAIA,MAAM,QAAQ,MAAM,OAAO,aAAa;AACxC,MAAM,kBAAkB,CAAC,MAAM,SAAS,QAAQ,cAAc;AAOvD,MAAM,aAAa,MAAM;AAAA,EAM9B,OAAO,OAAO,OAAkB;AACxB,UAAA,OAAO,MAAM,OAAO,KAAK;AACzB,UAAA,OAAO,MAAM,OAAO;AACpB,UAAA,UAAU,CAAC,OAAO,IAAI,OAAO,IAAI,IAAI,KAAK,QAAQ,CAAC;AACpD,SAAA,UAAU,IAAI,WAAW;AACzB,SAAA,aAAa,mBAAmB,OAAO;AAC5C,UAAM,UAAU;AAChB,SAAK,YAAY,GAAG,OAAO,IAAI,MAAM,KAAK,KAAK,OAAO;AACtD,UAAM,MAAM,KAAK,SAAS,MAAM,GAAG;AACnC,QAAI,KAAK;AACP,WAAK,OAAO;AACZ,WAAK,SAAS;AAAA,IAAA;AAEA,oBAAA,QAAQ,CAAC,QAAQ;AAC3B,UAAA,MAAM,GAAG,GAAG;AACd,aAAK,QAAQ,GAAG,IAAI,MAAM,GAAG;AAAA,MAAA;AAAA,IAC/B,CACD;AACM,WAAA;AAAA,EAAA;AAAA,EAGT,OAAO,MAAM,SAA4B;AAChC,WAAA,KAAK,WAAW,OAAO;AAAA,EAAA;AAAA,EAGhC,OAAO,WAAW,SAA4B;AAC5C,UAAM,UAAkC,CAAC;AACzC,UAAM,OAAO,KAAK,SAAS,QAAQ,IAAI;AACvC,QAAI,MAAM;AACR,cAAQ,MAAM;AAAA,IAAA;AAEA,oBAAA,QAAQ,CAAC,QAAQ;AAC3B,UAAA,QAAQ,QAAQ,GAAG,GAAG;AACxB,gBAAQ,GAAG,IAAI,QAAQ,QAAQ,GAAG;AAAA,MAAA;AAAA,IACpC,CACD;AACM,WAAA;AAAA,EAAA;AAAA,EAGT,OAAO,SAAS,KAAa;AAC3B,WAAQA,aAAAA,SAAS,KAAK,KAAK,kBAAkB,KAAK,OAAQ;AAAA,EAAA;AAE9D;AA/CE,cADW,MACJ,YAAW;AAClB,cAFW,MAEJ,WAAU;AACjB,cAHW,MAGJ,aAAY;AACnB,cAJW,MAIJ,sBAAqB,CAAC,QAAQ,SAAS,MAAM;;"}
|
|
@@ -1,31 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.
|
|
3
|
-
const Quill = require("quill");
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
4
3
|
const file = require("./formats/file.cjs.js");
|
|
5
4
|
const fileBar = require("./modules/file-bar.cjs.js");
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
quill.root.addEventListener("click", (event) => this.clickEvent(event), false);
|
|
11
|
-
}
|
|
12
|
-
static register() {
|
|
13
|
-
Quill.register("formats/file", file.default, true);
|
|
14
|
-
}
|
|
15
|
-
clickEvent(event) {
|
|
16
|
-
event.preventDefault();
|
|
17
|
-
const target = event.target;
|
|
18
|
-
const fileDom = target.closest("a.ql-file-item");
|
|
19
|
-
if (fileDom) {
|
|
20
|
-
if (this.fileBar) {
|
|
21
|
-
this.fileBar.destroy();
|
|
22
|
-
}
|
|
23
|
-
this.fileBar = new fileBar.default(this.quill, fileDom);
|
|
24
|
-
} else if (this.fileBar && !target.closest(".ql-file-bar")) {
|
|
25
|
-
this.fileBar.destroy();
|
|
26
|
-
this.fileBar = null;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
exports.default = FileModule;
|
|
5
|
+
const fileModule = require("./modules/file-module.cjs.js");
|
|
6
|
+
exports.File = file.File;
|
|
7
|
+
exports.FileBar = fileBar.FileBar;
|
|
8
|
+
exports.FileModule = fileModule.FileModule;
|
|
31
9
|
//# sourceMappingURL=index.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":[
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
|
|
@@ -1,17 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
4
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
6
|
const Quill = require("quill");
|
|
4
7
|
const selection = require("quill/core/selection");
|
|
5
8
|
const method = require("../../../utils/method.cjs.js");
|
|
6
9
|
const file = require("../formats/file.cjs.js");
|
|
7
|
-
const Delta = Quill.
|
|
10
|
+
const Delta = Quill.import("delta");
|
|
8
11
|
class FileBar {
|
|
9
12
|
constructor(quill, target) {
|
|
13
|
+
__publicField(this, "quill");
|
|
14
|
+
__publicField(this, "file");
|
|
15
|
+
__publicField(this, "domNode");
|
|
16
|
+
__publicField(this, "fileRange");
|
|
17
|
+
__publicField(this, "template");
|
|
10
18
|
this.quill = quill;
|
|
11
19
|
this.file = target;
|
|
12
20
|
const fileBlot = Quill.find(target);
|
|
13
21
|
const index = this.quill.getIndex(fileBlot);
|
|
14
|
-
const [fileItem, offset] = this.quill.scroll.descendant(file.
|
|
22
|
+
const [fileItem, offset] = this.quill.scroll.descendant(file.File, index);
|
|
15
23
|
const length = fileItem && fileItem.length();
|
|
16
24
|
this.fileRange = new selection.Range(index - offset, length);
|
|
17
25
|
const timestamp = Number(this.file.dataset.lastModified);
|
|
@@ -121,5 +129,5 @@ class FileBar {
|
|
|
121
129
|
return Number.isNaN(year) ? "--" : `${year}/${month}/${day} ${hour}:${minute}`;
|
|
122
130
|
}
|
|
123
131
|
}
|
|
124
|
-
exports.
|
|
132
|
+
exports.FileBar = FileBar;
|
|
125
133
|
//# sourceMappingURL=file-bar.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-bar.cjs.js","sources":["../../../../../src/modules/file/modules/file-bar.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { Range } from 'quill/core/selection'\r\nimport { unshiftString } from '../../../utils/method'\r\nimport File from '../formats/file'\r\n\r\nconst Delta = Quill.
|
|
1
|
+
{"version":3,"file":"file-bar.cjs.js","sources":["../../../../../src/modules/file/modules/file-bar.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { Range } from 'quill/core/selection'\r\nimport { unshiftString } from '../../../utils/method'\r\nimport { File } from '../formats/file'\r\n\r\nconst Delta = Quill.import('delta')\r\n\r\nexport class FileBar {\r\n quill: any\r\n file: any\r\n domNode: HTMLElement\r\n fileRange: any\r\n template: string\r\n\r\n constructor(quill, target) {\r\n this.quill = quill\r\n this.file = target\r\n const fileBlot = Quill.find(target)\r\n const index = this.quill.getIndex(fileBlot)\r\n const [fileItem, offset] = this.quill.scroll.descendant(File, index)\r\n const length = fileItem && fileItem.length()\r\n this.fileRange = new Range(index - offset, length)\r\n\r\n const timestamp = Number(this.file.dataset.lastModified)\r\n const _lastModifiedDate = this.formatDate(timestamp)\r\n this.template = [\r\n // `<a class=\"ql-last-modified-date\" href=\"${this.file.href}\" target=\"_blank\">${this.file.href}</a>`,\r\n // '<span class=\"ql-split\"></span>',\r\n // `<a class=\"ql-file-preview\"><i class=\"icon-preview\"></i></a>`,\r\n `<a class=\"ql-file-download\"><i class=\"icon-download\"></i></a>`,\r\n '<a class=\"ql-file-delete\"><i class=\"icon-delete\"></i></a>',\r\n ].join('')\r\n\r\n this.createFileBar()\r\n }\r\n\r\n createFileBar() {\r\n this.domNode = document.createElement('div')\r\n this.domNode.className = 'ql-file-bar'\r\n this.domNode.innerHTML = this.template\r\n // 查看文件\r\n const filePreview = this.domNode.querySelector('a.ql-file-preview')\r\n if (filePreview) {\r\n filePreview.addEventListener('click', (event) => {\r\n this.operateFile(event, 'view')\r\n })\r\n }\r\n // 下载文件\r\n const fileDownload = this.domNode.querySelector('a.ql-file-download')\r\n if (fileDownload) {\r\n fileDownload.addEventListener('click', (event) => {\r\n this.operateFile(event, 'download')\r\n })\r\n }\r\n // 删除文件\r\n const fileDelete = this.domNode.querySelector('a.ql-file-delete')\r\n if (fileDelete) {\r\n fileDelete.addEventListener('click', (event) => {\r\n this.operateFile(event, 'delete')\r\n const delta = new Delta()\r\n .retain(this.fileRange.index)\r\n .delete(this.fileRange.length)\r\n this.quill.updateContents(delta, Quill.sources.USER)\r\n this.quill.setSelection(this.fileRange.index)\r\n })\r\n }\r\n\r\n this.setPosition()\r\n this.quill.root.parentNode.appendChild(this.domNode)\r\n }\r\n\r\n destroy() {\r\n if (this.domNode) {\r\n this.domNode.remove()\r\n this.domNode = null\r\n this.file = null\r\n }\r\n }\r\n\r\n operateFile(event, operate) {\r\n event.preventDefault()\r\n const fileId = this.file.dataset.id || ''\r\n const fileName = this.file.dataset.title || ''\r\n const fileDownloadUrl = this.file.href || ''\r\n if (fileId) {\r\n this.quill.emitter.emit('file-change', {\r\n operation: operate,\r\n data: { fileId, fileDownloadUrl },\r\n })\r\n }\r\n if (operate === 'download') {\r\n const a = document.createElement('a')\r\n a.href = fileDownloadUrl\r\n a.target = '_blank'\r\n a.id = 'exppub'\r\n a.download = fileName\r\n document.body.appendChild(a)\r\n const alink = document.getElementById('exppub')\r\n alink.click()\r\n alink.parentNode.removeChild(a)\r\n }\r\n this.destroy()\r\n }\r\n\r\n setPosition() {\r\n if (this.domNode && this.file) {\r\n const parent = this.quill.root.parentNode\r\n const child = this.file.querySelector('span')\r\n const containerRect = parent.getBoundingClientRect()\r\n const fileRect = child.getBoundingClientRect()\r\n this.css(this.domNode, {\r\n left: `${fileRect.left - containerRect.left}px`,\r\n top: `${fileRect.top - containerRect.top + 10}px`,\r\n })\r\n }\r\n }\r\n\r\n css(domNode, rules) {\r\n if (typeof rules === 'object') {\r\n for (const prop in rules) {\r\n if (prop) {\r\n if (Array.isArray(rules[prop])) {\r\n // 兼容IE11浏览器\r\n rules[prop].forEach((val) => {\r\n domNode.style[prop] = val\r\n })\r\n }\r\n else {\r\n domNode.style[prop] = rules[prop]\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n formatDate(timestamp) {\r\n const date = new Date(timestamp)\r\n const year = date.getFullYear()\r\n // TODO\r\n const month = unshiftString(`${date.getMonth() + 1}`, 2, '0')\r\n const day = unshiftString(`${date.getDate()}`, 2, '0')\r\n const hour = unshiftString(`${date.getHours()}`, 2, '0')\r\n const minute = unshiftString(`${date.getMinutes()}`, 2, '0')\r\n return Number.isNaN(year) ? '--' : `${year}/${month}/${day} ${hour}:${minute}`\r\n }\r\n}\r\n"],"names":["File","Range","unshiftString"],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
4
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
6
|
+
const Quill = require("quill");
|
|
7
|
+
const file = require("../formats/file.cjs.js");
|
|
8
|
+
const fileBar = require("./file-bar.cjs.js");
|
|
9
|
+
class FileModule {
|
|
10
|
+
constructor(quill) {
|
|
11
|
+
__publicField(this, "fileBar");
|
|
12
|
+
this.quill = quill;
|
|
13
|
+
this.quill = quill;
|
|
14
|
+
quill.root.addEventListener("click", (event) => this.clickEvent(event), false);
|
|
15
|
+
}
|
|
16
|
+
static register() {
|
|
17
|
+
Quill.register("formats/file", file.File, true);
|
|
18
|
+
}
|
|
19
|
+
clickEvent(event) {
|
|
20
|
+
event.preventDefault();
|
|
21
|
+
const target = event.target;
|
|
22
|
+
const fileDom = target.closest("a.ql-file-item");
|
|
23
|
+
if (fileDom) {
|
|
24
|
+
if (this.fileBar) {
|
|
25
|
+
this.fileBar.destroy();
|
|
26
|
+
}
|
|
27
|
+
this.fileBar = new fileBar.FileBar(this.quill, fileDom);
|
|
28
|
+
} else if (this.fileBar && !target.closest(".ql-file-bar")) {
|
|
29
|
+
this.fileBar.destroy();
|
|
30
|
+
this.fileBar = null;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.FileModule = FileModule;
|
|
35
|
+
//# sourceMappingURL=file-module.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-module.cjs.js","sources":["../../../../../src/modules/file/modules/file-module.ts"],"sourcesContent":["import type FluentEditor from '../../../core/fluent-editor'\r\nimport Quill from 'quill'\r\nimport { File } from '../formats/file'\r\nimport { FileBar } from './file-bar'\r\n\r\nexport class FileModule {\r\n fileBar: FileBar\r\n\r\n static register() {\r\n Quill.register('formats/file', File, true)\r\n }\r\n\r\n constructor(public quill: FluentEditor) {\r\n this.quill = quill\r\n quill.root.addEventListener('click', event => this.clickEvent(event), false)\r\n }\r\n\r\n clickEvent(event: MouseEvent) {\r\n event.preventDefault()\r\n const target = event.target as HTMLElement\r\n const fileDom = target.closest('a.ql-file-item')\r\n if (fileDom) {\r\n if (this.fileBar) {\r\n this.fileBar.destroy()\r\n }\r\n this.fileBar = new FileBar(this.quill, fileDom)\r\n }\r\n else if (this.fileBar && !target.closest('.ql-file-bar')) {\r\n this.fileBar.destroy()\r\n this.fileBar = null\r\n }\r\n }\r\n}\r\n"],"names":["File","FileBar"],"mappings":";;;;;;;;AAKO,MAAM,WAAW;AAAA,EAOtB,YAAmB,OAAqB;AANxC;AAMmB,SAAA,QAAA;AACjB,SAAK,QAAQ;AACP,UAAA,KAAK,iBAAiB,SAAS,CAAA,UAAS,KAAK,WAAW,KAAK,GAAG,KAAK;AAAA,EAAA;AAAA,EAN7E,OAAO,WAAW;AACV,UAAA,SAAS,gBAAgBA,KAAAA,MAAM,IAAI;AAAA,EAAA;AAAA,EAQ3C,WAAW,OAAmB;AAC5B,UAAM,eAAe;AACrB,UAAM,SAAS,MAAM;AACf,UAAA,UAAU,OAAO,QAAQ,gBAAgB;AAC/C,QAAI,SAAS;AACX,UAAI,KAAK,SAAS;AAChB,aAAK,QAAQ,QAAQ;AAAA,MAAA;AAEvB,WAAK,UAAU,IAAIC,QAAAA,QAAQ,KAAK,OAAO,OAAO;AAAA,IAAA,WAEvC,KAAK,WAAW,CAAC,OAAO,QAAQ,cAAc,GAAG;AACxD,WAAK,QAAQ,QAAQ;AACrB,WAAK,UAAU;AAAA,IAAA;AAAA,EACjB;AAEJ;;"}
|
package/lib/modules/i18n.cjs.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
4
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
2
5
|
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
6
|
require("../config/index.cjs.js");
|
|
4
7
|
const is = require("../utils/is.cjs.js");
|
|
@@ -6,10 +9,10 @@ const editor_config = require("../config/editor.config.cjs.js");
|
|
|
6
9
|
const langs = {};
|
|
7
10
|
class I18N {
|
|
8
11
|
constructor(quill, options) {
|
|
9
|
-
this
|
|
10
|
-
this.options = {
|
|
12
|
+
__publicField(this, "options", {
|
|
11
13
|
lang: ""
|
|
12
|
-
};
|
|
14
|
+
});
|
|
15
|
+
this.quill = quill;
|
|
13
16
|
this.options = Object.assign({}, options, this.resolveLanguageOption(options || {}));
|
|
14
17
|
Promise.resolve().then(() => this.changeLanguage(this.options, true));
|
|
15
18
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.cjs.js","sources":["../../../src/modules/i18n.ts"],"sourcesContent":["import type FluentEditor from '../fluent-editor'\r\nimport { CHANGE_LANGUAGE_EVENT, defaultLanguage } from '../config'\r\nimport { isUndefined } from '../utils/is'\r\n\r\nconst langs: Record<string, Record<string, string>> = {}\r\n\r\
|
|
1
|
+
{"version":3,"file":"i18n.cjs.js","sources":["../../../src/modules/i18n.ts"],"sourcesContent":["import type FluentEditor from '../fluent-editor'\r\nimport { CHANGE_LANGUAGE_EVENT, defaultLanguage } from '../config'\r\nimport { isUndefined } from '../utils/is'\r\n\r\nconst langs: Record<string, Record<string, string>> = {}\r\n\r\nexport interface I18NOptions {\r\n lang: string\r\n}\r\nexport class I18N {\r\n static register(inputLangs: Record<string, Record<string, string>>, isCover: boolean = true) {\r\n for (const lang in inputLangs) {\r\n const texts = inputLangs[lang]\r\n if (isCover) {\r\n langs[lang] = texts\r\n }\r\n else {\r\n if (!langs[lang]) langs[lang] = {}\r\n Object.assign(langs[lang], texts)\r\n }\r\n }\r\n }\r\n\r\n static parserText(text: string, lang: string): string {\r\n const i18nPattern = /^_i18n\"([^\"]*)\"/\r\n const match = text.match(i18nPattern)\r\n let key = text\r\n if (match) {\r\n key = match[1]\r\n }\r\n return langs[lang]?.[key] || key\r\n }\r\n\r\n options: I18NOptions = {\r\n lang: '',\r\n }\r\n\r\n constructor(public quill: FluentEditor, options: Partial<I18NOptions>) {\r\n this.options = Object.assign({}, options, this.resolveLanguageOption(options || {}))\r\n // wait until all module registed\r\n Promise.resolve().then(() => this.changeLanguage(this.options, true))\r\n }\r\n\r\n resolveLanguageOption(options: Partial<I18NOptions>): I18NOptions {\r\n if (isUndefined(options.lang)) {\r\n options.lang = defaultLanguage\r\n }\r\n if (!(options.lang in langs)) {\r\n console.warn(`The language ${options.lang} is not supported. Use the default language: ${defaultLanguage}`)\r\n options.lang = defaultLanguage\r\n }\r\n return {\r\n lang: options.lang,\r\n }\r\n }\r\n\r\n changeLanguage(options: Partial<I18NOptions>, force: boolean = false) {\r\n const currentLang = this.options.lang\r\n const langOps = this.resolveLanguageOption(options)\r\n if (langOps.lang === currentLang && !force) return\r\n this.options.lang = langOps.lang\r\n this.quill.emitter.emit(CHANGE_LANGUAGE_EVENT, this.options.lang, langs[langOps.lang])\r\n }\r\n}\r\n\r\nexport default I18N\r\n"],"names":["isUndefined","defaultLanguage","CHANGE_LANGUAGE_EVENT"],"mappings":";;;;;;;;AAIA,MAAM,QAAgD,CAAC;AAKhD,MAAM,KAAK;AAAA,EA4BhB,YAAmB,OAAqB,SAA+B;AAJvE,mCAAuB;AAAA,MACrB,MAAM;AAAA,IACR;AAEmB,SAAA,QAAA;AACZ,SAAA,UAAU,OAAO,OAAO,CAAC,GAAG,SAAS,KAAK,sBAAsB,WAAW,CAAA,CAAE,CAAC;AAE3E,YAAA,UAAU,KAAK,MAAM,KAAK,eAAe,KAAK,SAAS,IAAI,CAAC;AAAA,EAAA;AAAA,EA9BtE,OAAO,SAAS,YAAoD,UAAmB,MAAM;AAC3F,eAAW,QAAQ,YAAY;AACvB,YAAA,QAAQ,WAAW,IAAI;AAC7B,UAAI,SAAS;AACX,cAAM,IAAI,IAAI;AAAA,MAAA,OAEX;AACH,YAAI,CAAC,MAAM,IAAI,EAAS,OAAA,IAAI,IAAI,CAAC;AACjC,eAAO,OAAO,MAAM,IAAI,GAAG,KAAK;AAAA,MAAA;AAAA,IAClC;AAAA,EACF;AAAA,EAGF,OAAO,WAAW,MAAc,MAAsB;;AACpD,UAAM,cAAc;AACd,UAAA,QAAQ,KAAK,MAAM,WAAW;AACpC,QAAI,MAAM;AACV,QAAI,OAAO;AACT,YAAM,MAAM,CAAC;AAAA,IAAA;AAEf,aAAO,WAAM,IAAI,MAAV,mBAAc,SAAQ;AAAA,EAAA;AAAA,EAa/B,sBAAsB,SAA4C;AAC5D,QAAAA,GAAA,YAAY,QAAQ,IAAI,GAAG;AAC7B,cAAQ,OAAOC,cAAA;AAAA,IAAA;AAEb,QAAA,EAAE,QAAQ,QAAQ,QAAQ;AAC5B,cAAQ,KAAK,gBAAgB,QAAQ,IAAI,gDAAgDA,cAAe,eAAA,EAAE;AAC1G,cAAQ,OAAOA,cAAA;AAAA,IAAA;AAEV,WAAA;AAAA,MACL,MAAM,QAAQ;AAAA,IAChB;AAAA,EAAA;AAAA,EAGF,eAAe,SAA+B,QAAiB,OAAO;AAC9D,UAAA,cAAc,KAAK,QAAQ;AAC3B,UAAA,UAAU,KAAK,sBAAsB,OAAO;AAClD,QAAI,QAAQ,SAAS,eAAe,CAAC,MAAO;AACvC,SAAA,QAAQ,OAAO,QAAQ;AACvB,SAAA,MAAM,QAAQ,KAAKC,cAAAA,uBAAuB,KAAK,QAAQ,MAAM,MAAM,QAAQ,IAAI,CAAC;AAAA,EAAA;AAEzF;;;"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
require("./counter.cjs.js");
|
|
4
|
+
const customClipboard = require("./custom-clipboard.cjs.js");
|
|
5
|
+
require("./custom-image/index.cjs.js");
|
|
6
|
+
const customUploader = require("./custom-uploader.cjs.js");
|
|
7
|
+
const divider = require("./divider.cjs.js");
|
|
8
|
+
const emoji = require("./emoji.cjs.js");
|
|
9
|
+
require("./file/index.cjs.js");
|
|
10
|
+
const i18n = require("./i18n.cjs.js");
|
|
11
|
+
require("./link/index.cjs.js");
|
|
12
|
+
require("./mathlive/index.cjs.js");
|
|
13
|
+
require("./mention/index.cjs.js");
|
|
14
|
+
const index = require("./shortcut-key/index.cjs.js");
|
|
15
|
+
require("./syntax.cjs.js");
|
|
16
|
+
const index$1 = require("./table-up/index.cjs.js");
|
|
17
|
+
require("./toolbar/index.cjs.js");
|
|
18
|
+
exports.CustomClipboard = customClipboard.CustomClipboard;
|
|
19
|
+
exports.FileUploader = customUploader.FileUploader;
|
|
20
|
+
exports.DividerBlot = divider.DividerBlot;
|
|
21
|
+
exports.EmojiModule = emoji.EmojiModule;
|
|
22
|
+
exports.I18N = i18n.I18N;
|
|
23
|
+
exports.ShortCutKey = index.ShortCutKey;
|
|
24
|
+
exports.shortKey = index.shortKey;
|
|
25
|
+
exports.generateTableUp = index$1.generateTableUp;
|
|
26
|
+
//# sourceMappingURL=index.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var
|
|
3
|
-
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
4
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
4
6
|
const Quill = require("quill");
|
|
5
7
|
const editor_utils = require("../../../config/editor.utils.cjs.js");
|
|
6
8
|
const Inline = Quill.import("blots/inline");
|
|
7
|
-
|
|
9
|
+
const _LinkBlot = class _LinkBlot extends Inline {
|
|
8
10
|
static create(value) {
|
|
9
11
|
const node = super.create(value);
|
|
10
12
|
let href = value;
|
|
@@ -26,14 +28,16 @@ let Link$1 = (_a = class extends Inline {
|
|
|
26
28
|
if (name !== this.statics.blotName || [false, null].includes(value)) {
|
|
27
29
|
super.format(name, value);
|
|
28
30
|
} else {
|
|
29
|
-
this.domNode.setAttribute("href",
|
|
31
|
+
this.domNode.setAttribute("href", _LinkBlot.sanitize(value));
|
|
30
32
|
}
|
|
31
33
|
}
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
34
|
+
};
|
|
35
|
+
__publicField(_LinkBlot, "blotName", "link");
|
|
36
|
+
__publicField(_LinkBlot, "tagName", "A");
|
|
37
|
+
__publicField(_LinkBlot, "SANITIZED_URL", "about:blank");
|
|
38
|
+
__publicField(_LinkBlot, "PROTOCOL_WHITELIST", ["http", "https", "mailto", "tel"]);
|
|
39
|
+
__publicField(_LinkBlot, "className", "ql-normal-link");
|
|
40
|
+
__publicField(_LinkBlot, "autoProtocol", "");
|
|
41
|
+
let LinkBlot = _LinkBlot;
|
|
42
|
+
exports.LinkBlot = LinkBlot;
|
|
39
43
|
//# sourceMappingURL=link.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link.cjs.js","sources":["../../../../../src/modules/link/formats/link.ts"],"sourcesContent":["import type TypeInline from 'quill/blots/inline'\r\nimport Quill from 'quill'\r\nimport { hadProtocol, sanitize } from '../../../config/editor.utils'\r\n\r\nconst Inline = Quill.import('blots/inline') as typeof TypeInline\r\n\r\
|
|
1
|
+
{"version":3,"file":"link.cjs.js","sources":["../../../../../src/modules/link/formats/link.ts"],"sourcesContent":["import type TypeInline from 'quill/blots/inline'\r\nimport Quill from 'quill'\r\nimport { hadProtocol, sanitize } from '../../../config/editor.utils'\r\n\r\nconst Inline = Quill.import('blots/inline') as typeof TypeInline\r\n\r\nexport class LinkBlot extends Inline {\r\n static blotName = 'link'\r\n static tagName = 'A'\r\n static SANITIZED_URL = 'about:blank'\r\n static PROTOCOL_WHITELIST = ['http', 'https', 'mailto', 'tel']\r\n static className = 'ql-normal-link'\r\n\r\n static autoProtocol: string = ''\r\n static create(value: string) {\r\n const node = super.create(value)\r\n let href = value\r\n if (!hadProtocol(href) && this.autoProtocol) {\r\n href = `${this.autoProtocol}://${value}`\r\n }\r\n href = this.sanitize(href)\r\n node.setAttribute('href', href)\r\n node.setAttribute('target', '_blank')\r\n return node\r\n }\r\n\r\n static formats(domNode: HTMLElement): string | null {\r\n return domNode.getAttribute('href')\r\n }\r\n\r\n static sanitize(url: string) {\r\n return sanitize(url, this.PROTOCOL_WHITELIST) ? url : this.SANITIZED_URL\r\n }\r\n\r\n format(name: string, value: any) {\r\n if (name !== this.statics.blotName || [false, null].includes(value)) {\r\n super.format(name, value)\r\n }\r\n else {\r\n this.domNode.setAttribute('href', LinkBlot.sanitize(value))\r\n }\r\n }\r\n}\r\n"],"names":["hadProtocol","sanitize"],"mappings":";;;;;;;AAIA,MAAM,SAAS,MAAM,OAAO,cAAc;AAEnC,MAAM,YAAN,MAAM,kBAAiB,OAAO;AAAA,EAQnC,OAAO,OAAO,OAAe;AACrB,UAAA,OAAO,MAAM,OAAO,KAAK;AAC/B,QAAI,OAAO;AACX,QAAI,CAACA,aAAAA,YAAY,IAAI,KAAK,KAAK,cAAc;AAC3C,aAAO,GAAG,KAAK,YAAY,MAAM,KAAK;AAAA,IAAA;AAEjC,WAAA,KAAK,SAAS,IAAI;AACpB,SAAA,aAAa,QAAQ,IAAI;AACzB,SAAA,aAAa,UAAU,QAAQ;AAC7B,WAAA;AAAA,EAAA;AAAA,EAGT,OAAO,QAAQ,SAAqC;AAC3C,WAAA,QAAQ,aAAa,MAAM;AAAA,EAAA;AAAA,EAGpC,OAAO,SAAS,KAAa;AAC3B,WAAOC,aAAAA,SAAS,KAAK,KAAK,kBAAkB,IAAI,MAAM,KAAK;AAAA,EAAA;AAAA,EAG7D,OAAO,MAAc,OAAY;AAC3B,QAAA,SAAS,KAAK,QAAQ,YAAY,CAAC,OAAO,IAAI,EAAE,SAAS,KAAK,GAAG;AAC7D,YAAA,OAAO,MAAM,KAAK;AAAA,IAAA,OAErB;AACH,WAAK,QAAQ,aAAa,QAAQ,UAAS,SAAS,KAAK,CAAC;AAAA,IAAA;AAAA,EAC5D;AAEJ;AAnCE,cADW,WACJ,YAAW;AAClB,cAFW,WAEJ,WAAU;AACjB,cAHW,WAGJ,iBAAgB;AACvB,cAJW,WAIJ,sBAAqB,CAAC,QAAQ,SAAS,UAAU,KAAK;AAC7D,cALW,WAKJ,aAAY;AAEnB,cAPW,WAOJ,gBAAuB;AAPzB,IAAM,WAAN;;"}
|
|
@@ -1,15 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.
|
|
3
|
-
const Quill = require("quill");
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
4
3
|
const link = require("./formats/link.cjs.js");
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
Quill.register("blots/link", link.default, true);
|
|
9
|
-
}
|
|
10
|
-
constructor(quill, options) {
|
|
11
|
-
super(quill, options);
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
exports.default = Link;
|
|
4
|
+
const tooltip = require("./modules/tooltip.cjs.js");
|
|
5
|
+
exports.LinkBlot = link.LinkBlot;
|
|
6
|
+
exports.LinkTooltip = tooltip.LinkTooltip;
|
|
15
7
|
//# sourceMappingURL=index.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":[
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
4
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
6
|
const Quill = require("quill");
|
|
4
7
|
const Emitter = require("quill/core/emitter");
|
|
5
8
|
const base = require("quill/themes/base");
|
|
@@ -9,17 +12,22 @@ const enUs = require("../../../config/i18n/en-us.cjs.js");
|
|
|
9
12
|
const debounce = require("../../../utils/debounce.cjs.js");
|
|
10
13
|
const link = require("../formats/link.cjs.js");
|
|
11
14
|
const editor_config = require("../../../config/editor.config.cjs.js");
|
|
12
|
-
|
|
15
|
+
class LinkTooltip extends base.BaseTooltip {
|
|
13
16
|
constructor(quill, bounds) {
|
|
14
17
|
super(quill, bounds);
|
|
15
|
-
this
|
|
18
|
+
__publicField(this, "isInputFocus");
|
|
19
|
+
__publicField(this, "isHover");
|
|
20
|
+
__publicField(this, "debouncedHideToolTip");
|
|
21
|
+
__publicField(this, "debouncedShowToolTip");
|
|
22
|
+
__publicField(this, "options", {
|
|
16
23
|
autoProtocol: "https"
|
|
17
|
-
};
|
|
24
|
+
});
|
|
25
|
+
this.quill = quill;
|
|
18
26
|
this.setTemplate();
|
|
19
27
|
this.isInputFocus = false;
|
|
20
28
|
this.isHover = false;
|
|
21
29
|
this.resolveOptions();
|
|
22
|
-
link.
|
|
30
|
+
link.LinkBlot.autoProtocol = this.options.autoProtocol;
|
|
23
31
|
this.debouncedHideToolTip = debounce.debounce(this.hideToolTip, 300);
|
|
24
32
|
this.debouncedShowToolTip = debounce.debounce(this.showToolTip, 300);
|
|
25
33
|
this.quill.emitter.on(editor_config.CHANGE_LANGUAGE_EVENT, () => {
|
|
@@ -74,14 +82,14 @@ const _Tooltip = class _Tooltip extends base.BaseTooltip {
|
|
|
74
82
|
}
|
|
75
83
|
this.isHover = true;
|
|
76
84
|
const linkNode = event.target;
|
|
77
|
-
const preview = link.
|
|
78
|
-
if (preview.startsWith("#")) {
|
|
85
|
+
const preview = link.LinkBlot.formats(linkNode);
|
|
86
|
+
if (!preview || preview.startsWith("#")) {
|
|
79
87
|
return;
|
|
80
88
|
}
|
|
81
89
|
const linkBlot = Quill.find(linkNode);
|
|
82
90
|
const index = this.quill.getIndex(linkBlot);
|
|
83
91
|
const [link$1, offset] = this.quill.scroll.descendant(
|
|
84
|
-
link.
|
|
92
|
+
link.LinkBlot,
|
|
85
93
|
index
|
|
86
94
|
);
|
|
87
95
|
const length = link$1 && link$1.length();
|
|
@@ -103,7 +111,8 @@ const _Tooltip = class _Tooltip extends base.BaseTooltip {
|
|
|
103
111
|
this.quill.root.addEventListener(
|
|
104
112
|
"mouseover",
|
|
105
113
|
(event) => {
|
|
106
|
-
|
|
114
|
+
const target = event.target;
|
|
115
|
+
if ((target.tagName.toUpperCase() !== "A" || !target.classList.contains(link.LinkBlot.className)) && !target.closest(`a.${link.LinkBlot.className}`)) {
|
|
107
116
|
return;
|
|
108
117
|
}
|
|
109
118
|
this.handleMouseEnter(event);
|
|
@@ -113,7 +122,8 @@ const _Tooltip = class _Tooltip extends base.BaseTooltip {
|
|
|
113
122
|
this.quill.root.addEventListener(
|
|
114
123
|
"mouseout",
|
|
115
124
|
(event) => {
|
|
116
|
-
|
|
125
|
+
const target = event.target;
|
|
126
|
+
if (target.tagName.toUpperCase() !== "A" && !target.closest(`a.${link.LinkBlot.className}`)) {
|
|
117
127
|
return;
|
|
118
128
|
}
|
|
119
129
|
this.handleMouseLeave();
|
|
@@ -129,7 +139,7 @@ const _Tooltip = class _Tooltip extends base.BaseTooltip {
|
|
|
129
139
|
);
|
|
130
140
|
this.root.addEventListener("mouseleave", this.handleMouseLeave.bind(this), false);
|
|
131
141
|
this.root.querySelector("a.ql-preview").addEventListener("click", (event) => {
|
|
132
|
-
const link$1 = link.
|
|
142
|
+
const link$1 = link.LinkBlot.sanitize(this.textbox.value);
|
|
133
143
|
window.open(link$1, "_blank");
|
|
134
144
|
event.preventDefault();
|
|
135
145
|
});
|
|
@@ -146,12 +156,12 @@ const _Tooltip = class _Tooltip extends base.BaseTooltip {
|
|
|
146
156
|
if (editor_utils.isNullOrUndefined(range)) return;
|
|
147
157
|
if (source === Emitter.sources.USER) {
|
|
148
158
|
const [link$1, offset] = this.quill.scroll.descendant(
|
|
149
|
-
link.
|
|
159
|
+
link.LinkBlot,
|
|
150
160
|
range.index
|
|
151
161
|
);
|
|
152
162
|
if (!editor_utils.isNullOrUndefined(link$1)) {
|
|
153
163
|
this.linkRange = new Quill.Range(range.index - offset, link$1.length());
|
|
154
|
-
const preview = link.
|
|
164
|
+
const preview = link.LinkBlot.formats(link$1.domNode);
|
|
155
165
|
if (!preview.startsWith("#")) {
|
|
156
166
|
this.edit("link", preview, this.linkRange);
|
|
157
167
|
}
|
|
@@ -170,7 +180,7 @@ const _Tooltip = class _Tooltip extends base.BaseTooltip {
|
|
|
170
180
|
const index = selection && selection.index;
|
|
171
181
|
setTimeout(() => {
|
|
172
182
|
const link$1 = this.quill.scroll.descendant(
|
|
173
|
-
link.
|
|
183
|
+
link.LinkBlot,
|
|
174
184
|
index
|
|
175
185
|
)[0];
|
|
176
186
|
if (!link$1) {
|
|
@@ -295,13 +305,12 @@ const _Tooltip = class _Tooltip extends base.BaseTooltip {
|
|
|
295
305
|
}
|
|
296
306
|
return result;
|
|
297
307
|
}
|
|
298
|
-
}
|
|
299
|
-
|
|
308
|
+
}
|
|
309
|
+
__publicField(LinkTooltip, "TEMPLATE", [
|
|
300
310
|
`<input type="text" data-formula="e=mc^2" data-link="${enUs.EN_US.linkplaceholder}" data-video="Embed URL" style="width: 225px;">`,
|
|
301
311
|
'<span class="ql-split"></span>',
|
|
302
312
|
'<a class="ql-preview"><i class="icon-share"></i></a>',
|
|
303
313
|
'<a class="ql-remove"><i class="icon-delete"></i></a>'
|
|
304
|
-
].join("");
|
|
305
|
-
|
|
306
|
-
exports.default = Tooltip;
|
|
314
|
+
].join(""));
|
|
315
|
+
exports.LinkTooltip = LinkTooltip;
|
|
307
316
|
//# sourceMappingURL=tooltip.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tooltip.cjs.js","sources":["../../../../../src/modules/link/modules/tooltip.ts"],"sourcesContent":["import Quill, { Range } from 'quill'\r\nimport Emitter from 'quill/core/emitter'\r\nimport { BaseTooltip } from 'quill/themes/base'\r\nimport { CHANGE_LANGUAGE_EVENT } from '../../../config'\r\nimport { hadProtocol, isNullOrUndefined } from '../../../config/editor.utils'\r\nimport { EN_US } from '../../../config/i18n/en-us'\r\nimport { debounce } from '../../../utils/debounce'\r\nimport LinkBlot from '../formats/link'\r\n\r\n// @dynamic\r\nexport default class Tooltip extends BaseTooltip {\r\n static TEMPLATE: string = [\r\n `<input type=\"text\" data-formula=\"e=mc^2\" data-link=\"${EN_US.linkplaceholder}\" data-video=\"Embed URL\" style=\"width: 225px;\">`,\r\n '<span class=\"ql-split\"></span>',\r\n '<a class=\"ql-preview\"><i class=\"icon-share\"></i></a>',\r\n '<a class=\"ql-remove\"><i class=\"icon-delete\"></i></a>',\r\n ].join('')\r\n\r\n isInputFocus: boolean\r\n isHover: boolean\r\n debouncedHideToolTip: any\r\n debouncedShowToolTip: any\r\n hide: any\r\n linkRange: any\r\n quill: any\r\n root: any\r\n restoreFocus: any\r\n textbox: any\r\n boundsContainer: any\r\n options: { autoProtocol: string } = {\r\n autoProtocol: 'https',\r\n }\r\n\r\n constructor(quill, bounds) {\r\n super(quill, bounds)\r\n this.setTemplate()\r\n this.isInputFocus = false\r\n this.isHover = false\r\n\r\n this.resolveOptions()\r\n LinkBlot.autoProtocol = this.options.autoProtocol\r\n this.debouncedHideToolTip = debounce(this.hideToolTip, 300)\r\n this.debouncedShowToolTip = debounce(this.showToolTip, 300)\r\n this.quill.emitter.on(CHANGE_LANGUAGE_EVENT, () => {\r\n this.setTemplate()\r\n })\r\n }\r\n\r\n setTemplate() {\r\n this.root.innerHTML = [\r\n `<input type=\"text\" data-formula=\"e=mc^2\" data-link=\"${this.quill.getLangText('linkplaceholder')}\" data-video=\"Embed URL\" style=\"width: 225px;\">`,\r\n '<span class=\"ql-split\"></span>',\r\n '<a class=\"ql-preview\"><i class=\"icon-share\"></i></a>',\r\n '<a class=\"ql-remove\"><i class=\"icon-delete\"></i></a>',\r\n ].join('')\r\n this.textbox = this.root.querySelector('input[type=\"text\"]')\r\n this.listen()\r\n }\r\n\r\n resolveOptions() {\r\n this.options = {\r\n autoProtocol: 'https',\r\n }\r\n const value = this.quill.options.autoProtocol\r\n if (value && typeof value === 'string') {\r\n this.options.autoProtocol = value\r\n }\r\n else if (typeof value === 'boolean' && !value) {\r\n this.options.autoProtocol = ''\r\n }\r\n }\r\n\r\n shouldHide() {\r\n return !this.isHover && !this.isInputFocus\r\n }\r\n\r\n hideToolTip() {\r\n if (this.shouldHide()) {\r\n this.hide()\r\n }\r\n }\r\n\r\n showToolTip(name, value, range) {\r\n if (!this.shouldHide()) {\r\n this.edit(name, value, range)\r\n }\r\n }\r\n\r\n handleMouseLeave() {\r\n this.isHover = false\r\n this.debouncedHideToolTip()\r\n }\r\n\r\n handleMouseEnter(event) {\r\n const isTooltipShow = !this.root.classList.contains('ql-hidden')\r\n if (isTooltipShow) {\r\n return\r\n }\r\n\r\n if (this.isInputFocus) {\r\n this.save()\r\n }\r\n this.isHover = true\r\n const linkNode = event.target\r\n const preview = LinkBlot.formats(linkNode)\r\n if (preview.startsWith('#')) {\r\n return\r\n }\r\n const linkBlot = Quill.find(linkNode)\r\n const index = this.quill.getIndex(linkBlot)\r\n const [link, offset] = this.quill.scroll.descendant(\r\n LinkBlot,\r\n index,\r\n )\r\n const length = link && link.length()\r\n this.linkRange = new Range(index - offset, length)\r\n this.debouncedShowToolTip('link', preview, this.linkRange)\r\n }\r\n\r\n listen() {\r\n super.listen()\r\n this.root.querySelector('a.ql-remove').addEventListener('click', (event) => {\r\n if (!isNullOrUndefined(this.linkRange)) {\r\n const range = this.linkRange\r\n this.restoreFocus()\r\n this.quill.formatText(range, 'link', false, Emitter.sources.API)\r\n delete this.linkRange\r\n }\r\n event.preventDefault()\r\n this.hide()\r\n })\r\n\r\n this.quill.root.addEventListener(\r\n 'mouseover',\r\n (event) => {\r\n if (\r\n (event.target.tagName.toUpperCase() !== 'A'\r\n || !event.target.classList.contains(LinkBlot.className))\r\n && !event.target.closest(`a.${LinkBlot.className}`)\r\n ) {\r\n return\r\n }\r\n this.handleMouseEnter(event)\r\n },\r\n false,\r\n )\r\n\r\n this.quill.root.addEventListener(\r\n 'mouseout',\r\n (event) => {\r\n if (event.target.tagName.toUpperCase() !== 'A' && !event.target.closest(`a.${LinkBlot.className}`)) {\r\n return\r\n }\r\n this.handleMouseLeave()\r\n },\r\n false,\r\n )\r\n\r\n this.root.addEventListener(\r\n 'mouseenter',\r\n () => {\r\n this.isHover = true\r\n },\r\n false,\r\n )\r\n\r\n this.root.addEventListener('mouseleave', this.handleMouseLeave.bind(this), false)\r\n\r\n this.root.querySelector('a.ql-preview').addEventListener('click', (event) => {\r\n const link = LinkBlot.sanitize(this.textbox.value)\r\n window.open(link, '_blank')\r\n event.preventDefault()\r\n })\r\n this.root.querySelector('input[type=\"text\"]').addEventListener('focus', () => {\r\n this.isInputFocus = true\r\n })\r\n this.root.querySelector('input[type=\"text\"]').addEventListener('blur', () => {\r\n this.isInputFocus = false\r\n this.save()\r\n })\r\n this.quill.on(\r\n Emitter.events.SELECTION_CHANGE,\r\n (range, _oldRange, source) => {\r\n if (isNullOrUndefined(range)) return\r\n if (source === Emitter.sources.USER) {\r\n const [link, offset] = this.quill.scroll.descendant(\r\n LinkBlot,\r\n range.index,\r\n )\r\n\r\n if (!isNullOrUndefined(link)) {\r\n this.linkRange = new Range(range.index - offset, link.length())\r\n const preview = LinkBlot.formats(link.domNode)\r\n if (!preview.startsWith('#')) {\r\n this.edit('link', preview, this.linkRange)\r\n }\r\n return\r\n }\r\n }\r\n if (this.shouldHide()) {\r\n this.hide()\r\n }\r\n },\r\n )\r\n this.quill.on(\r\n Emitter.events.TEXT_CHANGE,\r\n () => {\r\n const selection = this.quill.getSelection()\r\n const index = selection && selection.index\r\n setTimeout(() => {\r\n const link = this.quill.scroll.descendant(\r\n LinkBlot,\r\n index,\r\n )[0]\r\n if (!link) {\r\n this.handleMouseLeave()\r\n }\r\n })\r\n },\r\n )\r\n }\r\n\r\n save() {\r\n let value = this.textbox.value\r\n if (!value) return\r\n this.textbox.value = ''\r\n switch (this.root.getAttribute('data-mode')) {\r\n case 'link': {\r\n const { scrollTop } = this.quill.root\r\n if (this.options.autoProtocol) {\r\n value = this.addHttpProtocol(value)\r\n }\r\n\r\n if (this.linkRange) {\r\n this.quill.formatText(\r\n this.linkRange,\r\n 'link',\r\n value,\r\n Emitter.sources.USER,\r\n )\r\n this.restoreFocus()\r\n }\r\n else {\r\n this.restoreFocus()\r\n this.quill.format('link', value, Emitter.sources.USER)\r\n }\r\n this.quill.root.scrollTop = scrollTop\r\n break\r\n }\r\n case 'formula': {\r\n const range = this.quill.getSelection(true)\r\n if (!isNullOrUndefined(range)) {\r\n const index = range.index + range.length\r\n this.quill.insertEmbed(\r\n index,\r\n this.root.getAttribute('data-mode'),\r\n value,\r\n Emitter.sources.USER,\r\n )\r\n if (this.root.getAttribute('data-mode') === 'formula') {\r\n this.quill.insertText(index + 1, ' ', Emitter.sources.USER)\r\n }\r\n this.quill.setSelection(index + 2, Emitter.sources.USER)\r\n }\r\n break\r\n }\r\n case 'video': {\r\n const range = this.quill.getSelection(true)\r\n this.quill.insertText(range.index, '\\n', Emitter.sources.USER)\r\n this.quill.insertEmbed(range.index + 1, 'video', { src: value }, Emitter.sources.USER)\r\n this.quill.insertText(range.index + 2, '\\n', Emitter.sources.USER)\r\n this.quill.setSelection(range.index + 3, Emitter.sources.SILENT)\r\n this.textbox.value = ''\r\n this.hide()\r\n break\r\n }\r\n default:\r\n }\r\n }\r\n\r\n position(reference) {\r\n const left = reference.left\r\n const top = reference.bottom + this.quill.root.scrollTop\r\n this.root.style.left = `${left}px`\r\n this.root.style.top = `${top}px`\r\n this.root.classList.remove('ql-flip')\r\n const containerBounds = this.boundsContainer.getBoundingClientRect()\r\n const rootBounds = this.root.getBoundingClientRect()\r\n let shift = 0\r\n if (rootBounds.right > containerBounds.right) {\r\n shift = containerBounds.right - rootBounds.right\r\n this.root.style.left = `${left + shift}px`\r\n }\r\n if (rootBounds.left < containerBounds.left) {\r\n shift = containerBounds.left - rootBounds.left\r\n this.root.style.left = `${left + shift}px`\r\n }\r\n if (rootBounds.bottom > containerBounds.bottom) {\r\n const height = rootBounds.bottom - rootBounds.top\r\n const verticalShift = reference.bottom - reference.top + height\r\n const fixedTop = top - verticalShift\r\n this.root.style.top = `${fixedTop < 0 ? this.quill.root.scrollTop + reference.top : fixedTop}px`\r\n this.root.classList.add('ql-flip')\r\n }\r\n return shift\r\n }\r\n\r\n // @ts-expect-error\r\n edit(mode: string = 'link', preview = null, range) {\r\n this.linkRange = range || this.quill.selection.savedRange\r\n this.root.classList.remove('ql-hidden')\r\n this.root.classList.add('ql-editing')\r\n if (!isNullOrUndefined(preview)) {\r\n this.textbox.value = preview\r\n }\r\n else if (mode !== this.root.getAttribute('data-mode')) {\r\n this.textbox.value = ''\r\n }\r\n this.position(this.quill.getBounds(range || this.quill.selection.savedRange))\r\n if (this.textbox.value === '') {\r\n this.textbox.focus()\r\n }\r\n this.textbox.setAttribute(\r\n 'placeholder',\r\n this.textbox.getAttribute(`data-${mode}`) || '',\r\n )\r\n this.root.setAttribute('data-mode', mode)\r\n }\r\n\r\n show() {\r\n super.show()\r\n this.root.removeAttribute('data-mode')\r\n }\r\n\r\n addHttpProtocol(url: string) {\r\n let result = url\r\n if (!url) {\r\n return ''\r\n }\r\n if (!hadProtocol(url)) {\r\n result = `${this.options.autoProtocol}://${url}`\r\n }\r\n return result\r\n }\r\n}\r\n"],"names":["BaseTooltip","LinkBlot","debounce","CHANGE_LANGUAGE_EVENT","link","Range","isNullOrUndefined","hadProtocol","EN_US"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tooltip.cjs.js","sources":["../../../../../src/modules/link/modules/tooltip.ts"],"sourcesContent":["import type { Parchment as TypeParchment } from 'quill'\r\nimport type FluentEditor from '../../../core/fluent-editor'\r\nimport Quill, { Range } from 'quill'\r\nimport Emitter from 'quill/core/emitter'\r\nimport { BaseTooltip } from 'quill/themes/base'\r\nimport { CHANGE_LANGUAGE_EVENT } from '../../../config'\r\nimport { hadProtocol, isNullOrUndefined } from '../../../config/editor.utils'\r\nimport { EN_US } from '../../../config/i18n/en-us'\r\nimport { debounce } from '../../../utils/debounce'\r\nimport { LinkBlot } from '../formats/link'\r\n\r\nexport class LinkTooltip extends BaseTooltip {\r\n static TEMPLATE: string = [\r\n `<input type=\"text\" data-formula=\"e=mc^2\" data-link=\"${EN_US.linkplaceholder}\" data-video=\"Embed URL\" style=\"width: 225px;\">`,\r\n '<span class=\"ql-split\"></span>',\r\n '<a class=\"ql-preview\"><i class=\"icon-share\"></i></a>',\r\n '<a class=\"ql-remove\"><i class=\"icon-delete\"></i></a>',\r\n ].join('')\r\n\r\n isInputFocus: boolean\r\n isHover: boolean\r\n debouncedHideToolTip: any\r\n debouncedShowToolTip: any\r\n options: { autoProtocol: string } = {\r\n autoProtocol: 'https',\r\n }\r\n\r\n constructor(public quill: FluentEditor, bounds) {\r\n super(quill, bounds)\r\n this.setTemplate()\r\n this.isInputFocus = false\r\n this.isHover = false\r\n\r\n this.resolveOptions()\r\n LinkBlot.autoProtocol = this.options.autoProtocol\r\n this.debouncedHideToolTip = debounce(this.hideToolTip, 300)\r\n this.debouncedShowToolTip = debounce(this.showToolTip, 300)\r\n this.quill.emitter.on(CHANGE_LANGUAGE_EVENT, () => {\r\n this.setTemplate()\r\n })\r\n }\r\n\r\n setTemplate() {\r\n this.root.innerHTML = [\r\n `<input type=\"text\" data-formula=\"e=mc^2\" data-link=\"${this.quill.getLangText('linkplaceholder')}\" data-video=\"Embed URL\" style=\"width: 225px;\">`,\r\n '<span class=\"ql-split\"></span>',\r\n '<a class=\"ql-preview\"><i class=\"icon-share\"></i></a>',\r\n '<a class=\"ql-remove\"><i class=\"icon-delete\"></i></a>',\r\n ].join('')\r\n this.textbox = this.root.querySelector('input[type=\"text\"]')\r\n this.listen()\r\n }\r\n\r\n resolveOptions() {\r\n this.options = {\r\n autoProtocol: 'https',\r\n }\r\n const value = this.quill.options.autoProtocol\r\n if (value && typeof value === 'string') {\r\n this.options.autoProtocol = value\r\n }\r\n else if (typeof value === 'boolean' && !value) {\r\n this.options.autoProtocol = ''\r\n }\r\n }\r\n\r\n shouldHide() {\r\n return !this.isHover && !this.isInputFocus\r\n }\r\n\r\n hideToolTip() {\r\n if (this.shouldHide()) {\r\n this.hide()\r\n }\r\n }\r\n\r\n showToolTip(name, value, range) {\r\n if (!this.shouldHide()) {\r\n this.edit(name, value, range)\r\n }\r\n }\r\n\r\n handleMouseLeave() {\r\n this.isHover = false\r\n this.debouncedHideToolTip()\r\n }\r\n\r\n handleMouseEnter(event: MouseEvent) {\r\n const isTooltipShow = !this.root.classList.contains('ql-hidden')\r\n if (isTooltipShow) {\r\n return\r\n }\r\n\r\n if (this.isInputFocus) {\r\n this.save()\r\n }\r\n this.isHover = true\r\n const linkNode = event.target as HTMLElement\r\n const preview = LinkBlot.formats(linkNode)\r\n if (!preview || preview.startsWith('#')) {\r\n return\r\n }\r\n const linkBlot = Quill.find(linkNode) as TypeParchment.Blot\r\n const index = this.quill.getIndex(linkBlot)\r\n const [link, offset] = this.quill.scroll.descendant(\r\n LinkBlot,\r\n index,\r\n )\r\n const length = link && link.length()\r\n this.linkRange = new Range(index - offset, length)\r\n this.debouncedShowToolTip('link', preview, this.linkRange)\r\n }\r\n\r\n listen() {\r\n super.listen()\r\n this.root.querySelector('a.ql-remove').addEventListener('click', (event) => {\r\n if (!isNullOrUndefined(this.linkRange)) {\r\n const range = this.linkRange\r\n this.restoreFocus()\r\n this.quill.formatText(range, 'link', false, Emitter.sources.API)\r\n delete this.linkRange\r\n }\r\n event.preventDefault()\r\n this.hide()\r\n })\r\n\r\n this.quill.root.addEventListener(\r\n 'mouseover',\r\n (event) => {\r\n const target = event.target as HTMLElement\r\n if (\r\n (target.tagName.toUpperCase() !== 'A'\r\n || !target.classList.contains(LinkBlot.className))\r\n && !target.closest(`a.${LinkBlot.className}`)\r\n ) {\r\n return\r\n }\r\n this.handleMouseEnter(event)\r\n },\r\n false,\r\n )\r\n\r\n this.quill.root.addEventListener(\r\n 'mouseout',\r\n (event) => {\r\n const target = event.target as HTMLElement\r\n if (target.tagName.toUpperCase() !== 'A' && !target.closest(`a.${LinkBlot.className}`)) {\r\n return\r\n }\r\n this.handleMouseLeave()\r\n },\r\n false,\r\n )\r\n\r\n this.root.addEventListener(\r\n 'mouseenter',\r\n () => {\r\n this.isHover = true\r\n },\r\n false,\r\n )\r\n\r\n this.root.addEventListener('mouseleave', this.handleMouseLeave.bind(this), false)\r\n\r\n this.root.querySelector('a.ql-preview').addEventListener('click', (event) => {\r\n const link = LinkBlot.sanitize(this.textbox.value)\r\n window.open(link, '_blank')\r\n event.preventDefault()\r\n })\r\n this.root.querySelector('input[type=\"text\"]').addEventListener('focus', () => {\r\n this.isInputFocus = true\r\n })\r\n this.root.querySelector('input[type=\"text\"]').addEventListener('blur', () => {\r\n this.isInputFocus = false\r\n this.save()\r\n })\r\n this.quill.on(\r\n Emitter.events.SELECTION_CHANGE,\r\n (range, _oldRange, source) => {\r\n if (isNullOrUndefined(range)) return\r\n if (source === Emitter.sources.USER) {\r\n const [link, offset] = this.quill.scroll.descendant(\r\n LinkBlot,\r\n range.index,\r\n )\r\n\r\n if (!isNullOrUndefined(link)) {\r\n this.linkRange = new Range(range.index - offset, link.length())\r\n const preview = LinkBlot.formats(link.domNode)\r\n if (!preview.startsWith('#')) {\r\n this.edit('link', preview, this.linkRange)\r\n }\r\n return\r\n }\r\n }\r\n if (this.shouldHide()) {\r\n this.hide()\r\n }\r\n },\r\n )\r\n this.quill.on(\r\n Emitter.events.TEXT_CHANGE,\r\n () => {\r\n const selection = this.quill.getSelection()\r\n const index = selection && selection.index\r\n setTimeout(() => {\r\n const link = this.quill.scroll.descendant(\r\n LinkBlot,\r\n index,\r\n )[0]\r\n if (!link) {\r\n this.handleMouseLeave()\r\n }\r\n })\r\n },\r\n )\r\n }\r\n\r\n save() {\r\n let value = this.textbox.value\r\n if (!value) return\r\n this.textbox.value = ''\r\n switch (this.root.getAttribute('data-mode')) {\r\n case 'link': {\r\n const { scrollTop } = this.quill.root\r\n if (this.options.autoProtocol) {\r\n value = this.addHttpProtocol(value)\r\n }\r\n\r\n if (this.linkRange) {\r\n this.quill.formatText(\r\n this.linkRange,\r\n 'link',\r\n value,\r\n Emitter.sources.USER,\r\n )\r\n this.restoreFocus()\r\n }\r\n else {\r\n this.restoreFocus()\r\n this.quill.format('link', value, Emitter.sources.USER)\r\n }\r\n this.quill.root.scrollTop = scrollTop\r\n break\r\n }\r\n case 'formula': {\r\n const range = this.quill.getSelection(true)\r\n if (!isNullOrUndefined(range)) {\r\n const index = range.index + range.length\r\n this.quill.insertEmbed(\r\n index,\r\n this.root.getAttribute('data-mode'),\r\n value,\r\n Emitter.sources.USER,\r\n )\r\n if (this.root.getAttribute('data-mode') === 'formula') {\r\n this.quill.insertText(index + 1, ' ', Emitter.sources.USER)\r\n }\r\n this.quill.setSelection(index + 2, Emitter.sources.USER)\r\n }\r\n break\r\n }\r\n case 'video': {\r\n const range = this.quill.getSelection(true)\r\n this.quill.insertText(range.index, '\\n', Emitter.sources.USER)\r\n this.quill.insertEmbed(range.index + 1, 'video', { src: value }, Emitter.sources.USER)\r\n this.quill.insertText(range.index + 2, '\\n', Emitter.sources.USER)\r\n this.quill.setSelection(range.index + 3, Emitter.sources.SILENT)\r\n this.textbox.value = ''\r\n this.hide()\r\n break\r\n }\r\n default:\r\n }\r\n }\r\n\r\n position(reference) {\r\n const left = reference.left\r\n const top = reference.bottom + this.quill.root.scrollTop\r\n this.root.style.left = `${left}px`\r\n this.root.style.top = `${top}px`\r\n this.root.classList.remove('ql-flip')\r\n const containerBounds = this.boundsContainer.getBoundingClientRect()\r\n const rootBounds = this.root.getBoundingClientRect()\r\n let shift = 0\r\n if (rootBounds.right > containerBounds.right) {\r\n shift = containerBounds.right - rootBounds.right\r\n this.root.style.left = `${left + shift}px`\r\n }\r\n if (rootBounds.left < containerBounds.left) {\r\n shift = containerBounds.left - rootBounds.left\r\n this.root.style.left = `${left + shift}px`\r\n }\r\n if (rootBounds.bottom > containerBounds.bottom) {\r\n const height = rootBounds.bottom - rootBounds.top\r\n const verticalShift = reference.bottom - reference.top + height\r\n const fixedTop = top - verticalShift\r\n this.root.style.top = `${fixedTop < 0 ? this.quill.root.scrollTop + reference.top : fixedTop}px`\r\n this.root.classList.add('ql-flip')\r\n }\r\n return shift\r\n }\r\n\r\n // @ts-expect-error\r\n edit(mode: string = 'link', preview = null, range) {\r\n this.linkRange = range || this.quill.selection.savedRange\r\n this.root.classList.remove('ql-hidden')\r\n this.root.classList.add('ql-editing')\r\n if (!isNullOrUndefined(preview)) {\r\n this.textbox.value = preview\r\n }\r\n else if (mode !== this.root.getAttribute('data-mode')) {\r\n this.textbox.value = ''\r\n }\r\n this.position(this.quill.getBounds(range || this.quill.selection.savedRange))\r\n if (this.textbox.value === '') {\r\n this.textbox.focus()\r\n }\r\n this.textbox.setAttribute(\r\n 'placeholder',\r\n this.textbox.getAttribute(`data-${mode}`) || '',\r\n )\r\n this.root.setAttribute('data-mode', mode)\r\n }\r\n\r\n show() {\r\n super.show()\r\n this.root.removeAttribute('data-mode')\r\n }\r\n\r\n addHttpProtocol(url: string) {\r\n let result = url\r\n if (!url) {\r\n return ''\r\n }\r\n if (!hadProtocol(url)) {\r\n result = `${this.options.autoProtocol}://${url}`\r\n }\r\n return result\r\n }\r\n}\r\n"],"names":["BaseTooltip","LinkBlot","debounce","CHANGE_LANGUAGE_EVENT","link","Range","isNullOrUndefined","hadProtocol","EN_US"],"mappings":"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"}
|