@opentiny/fluent-editor 3.20.1 → 3.20.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 → dist/README.md} +99 -99
- package/dist/es/attributors/line-height.es.js.map +1 -0
- package/dist/es/config/base64-image.es.js.map +1 -0
- package/dist/es/config/editor.config.es.js.map +1 -0
- package/dist/es/config/editor.utils.es.js.map +1 -0
- package/dist/es/config/i18n/en-us.es.js.map +1 -0
- package/dist/es/config/i18n/zh-cn.es.js.map +1 -0
- package/dist/es/config/icons.config.es.js.map +1 -0
- package/{es/config.es.js → dist/es/config/index.es.js} +14 -7
- package/dist/es/config/index.es.js.map +1 -0
- package/{es → dist/es}/counter/index.es.js +2 -1
- package/dist/es/counter/index.es.js.map +1 -0
- package/dist/es/custom-clipboard.es.js.map +1 -0
- package/dist/es/custom-image/BlotFormatter.es.js.map +1 -0
- package/dist/es/custom-image/Options.es.js.map +1 -0
- package/dist/es/custom-image/actions/Action.es.js.map +1 -0
- package/dist/es/custom-image/actions/CustomResizeAction.es.js.map +1 -0
- package/dist/es/custom-image/actions/DeleteAction.es.js.map +1 -0
- package/dist/es/custom-image/image.es.js.map +1 -0
- package/dist/es/custom-image/specs/BlotSpec.es.js.map +1 -0
- package/dist/es/custom-image/specs/CustomImageSpec.es.js.map +1 -0
- package/dist/es/custom-image/specs/ImageSpec.es.js.map +1 -0
- package/dist/es/custom-uploader.es.js.map +1 -0
- package/dist/es/emoji/emoji-list/people.es.js.map +1 -0
- package/dist/es/emoji/emoji-list.es.js.map +1 -0
- package/dist/es/emoji/emoji-map.es.js.map +1 -0
- package/dist/es/emoji/formats/emoji-blot.es.js.map +1 -0
- package/dist/es/emoji/index.es.js.map +1 -0
- package/dist/es/emoji/modules/emoji.es.js.map +1 -0
- package/dist/es/emoji/modules/toolbar-emoji.es.js.map +1 -0
- package/dist/es/emoji/utils.es.js.map +1 -0
- package/dist/es/file/formats/file.es.js.map +1 -0
- package/dist/es/file/index.es.js.map +1 -0
- package/dist/es/file/modules/file-bar.es.js.map +1 -0
- package/{es → dist/es}/fluent-editor.es.js +1 -1
- package/dist/es/fluent-editor.es.js.map +1 -0
- package/dist/es/global-link/constants.es.js.map +1 -0
- package/dist/es/global-link/formats/customer-widget-link.es.js.map +1 -0
- package/dist/es/global-link/formats/doc-link.es.js.map +1 -0
- package/dist/es/global-link/formats/wiki-link.es.js.map +1 -0
- package/dist/es/global-link/formats/work-item-link.es.js.map +1 -0
- package/dist/es/global-link/index.es.js.map +1 -0
- package/dist/es/global-link/utils/createTable.es.js.map +1 -0
- package/dist/es/index.es.js +21 -0
- package/{es → dist/es}/index.es.js.map +1 -1
- package/dist/es/link/formats/link.es.js.map +1 -0
- package/dist/es/link/index.es.js.map +1 -0
- package/dist/es/link/modules/tooltip.es.js.map +1 -0
- package/dist/es/mention/Mention.es.js.map +1 -0
- package/dist/es/mention/MentionLink.es.js.map +1 -0
- package/dist/es/mention/constants.es.js.map +1 -0
- package/dist/es/quick-menu/index.es.js.map +1 -0
- package/dist/es/screenshot/index.es.js.map +1 -0
- package/dist/es/soft-break/index.es.js.map +1 -0
- package/dist/es/strike/index.es.js.map +1 -0
- package/dist/es/syntax/index.es.js.map +1 -0
- package/dist/es/table/better-table.es.js.map +1 -0
- package/dist/es/table/formats/header.es.js.map +1 -0
- package/dist/es/table/formats/list.es.js.map +1 -0
- package/dist/es/table/formats/table.es.js.map +1 -0
- package/dist/es/table/modules/table-column-tool.es.js.map +1 -0
- package/dist/es/table/modules/table-operation-menu.es.js.map +1 -0
- package/dist/es/table/modules/table-scroll-bar.es.js.map +1 -0
- package/dist/es/table/modules/table-selection.es.js.map +1 -0
- package/dist/es/table/table-config.es.js.map +1 -0
- package/dist/es/table/utils/index.es.js.map +1 -0
- package/dist/es/table/utils/node-matchers.es.js.map +1 -0
- package/dist/es/toolbar/better-picker.es.js.map +1 -0
- package/dist/es/toolbar/index.es.js.map +1 -0
- package/dist/es/utils/debounce.es.js.map +1 -0
- package/dist/es/utils/method.es.js.map +1 -0
- package/dist/es/video/index.es.js.map +1 -0
- package/dist/lib/attributors/line-height.cjs.js.map +1 -0
- package/dist/lib/config/base64-image.cjs.js.map +1 -0
- package/dist/lib/config/editor.config.cjs.js.map +1 -0
- package/dist/lib/config/editor.utils.cjs.js.map +1 -0
- package/dist/lib/config/i18n/en-us.cjs.js.map +1 -0
- package/dist/lib/config/i18n/zh-cn.cjs.js.map +1 -0
- package/dist/lib/config/icons.config.cjs.js.map +1 -0
- package/{lib/config.cjs.js → dist/lib/config/index.cjs.js} +27 -21
- package/dist/lib/config/index.cjs.js.map +1 -0
- package/{lib → dist/lib}/counter/index.cjs.js +5 -4
- package/dist/lib/counter/index.cjs.js.map +1 -0
- package/dist/lib/custom-clipboard.cjs.js.map +1 -0
- package/dist/lib/custom-image/BlotFormatter.cjs.js.map +1 -0
- package/dist/lib/custom-image/Options.cjs.js.map +1 -0
- package/dist/lib/custom-image/actions/Action.cjs.js.map +1 -0
- package/dist/lib/custom-image/actions/CustomResizeAction.cjs.js.map +1 -0
- package/dist/lib/custom-image/actions/DeleteAction.cjs.js.map +1 -0
- package/dist/lib/custom-image/image.cjs.js.map +1 -0
- package/dist/lib/custom-image/specs/BlotSpec.cjs.js.map +1 -0
- package/dist/lib/custom-image/specs/CustomImageSpec.cjs.js.map +1 -0
- package/dist/lib/custom-image/specs/ImageSpec.cjs.js.map +1 -0
- package/dist/lib/custom-uploader.cjs.js.map +1 -0
- package/dist/lib/emoji/emoji-list/people.cjs.js.map +1 -0
- package/dist/lib/emoji/emoji-list.cjs.js.map +1 -0
- package/dist/lib/emoji/emoji-map.cjs.js.map +1 -0
- package/dist/lib/emoji/formats/emoji-blot.cjs.js.map +1 -0
- package/dist/lib/emoji/index.cjs.js.map +1 -0
- package/dist/lib/emoji/modules/emoji.cjs.js.map +1 -0
- package/dist/lib/emoji/modules/toolbar-emoji.cjs.js.map +1 -0
- package/dist/lib/emoji/utils.cjs.js.map +1 -0
- package/dist/lib/file/formats/file.cjs.js.map +1 -0
- package/dist/lib/file/index.cjs.js.map +1 -0
- package/dist/lib/file/modules/file-bar.cjs.js.map +1 -0
- package/{lib → dist/lib}/fluent-editor.cjs.js +31 -31
- package/dist/lib/fluent-editor.cjs.js.map +1 -0
- package/dist/lib/global-link/constants.cjs.js.map +1 -0
- package/dist/lib/global-link/formats/customer-widget-link.cjs.js.map +1 -0
- package/dist/lib/global-link/formats/doc-link.cjs.js.map +1 -0
- package/dist/lib/global-link/formats/wiki-link.cjs.js.map +1 -0
- package/dist/lib/global-link/formats/work-item-link.cjs.js.map +1 -0
- package/dist/lib/global-link/index.cjs.js.map +1 -0
- package/dist/lib/global-link/utils/createTable.cjs.js.map +1 -0
- package/dist/lib/index.cjs.js +21 -0
- package/{lib → dist/lib}/index.cjs.js.map +1 -1
- package/dist/lib/link/formats/link.cjs.js.map +1 -0
- package/dist/lib/link/index.cjs.js.map +1 -0
- package/dist/lib/link/modules/tooltip.cjs.js.map +1 -0
- package/dist/lib/mention/Mention.cjs.js.map +1 -0
- package/dist/lib/mention/MentionLink.cjs.js.map +1 -0
- package/dist/lib/mention/constants.cjs.js.map +1 -0
- package/dist/lib/quick-menu/index.cjs.js.map +1 -0
- package/dist/lib/screenshot/index.cjs.js.map +1 -0
- package/dist/lib/soft-break/index.cjs.js.map +1 -0
- package/dist/lib/strike/index.cjs.js.map +1 -0
- package/dist/lib/syntax/index.cjs.js.map +1 -0
- package/dist/lib/table/better-table.cjs.js.map +1 -0
- package/dist/lib/table/formats/header.cjs.js.map +1 -0
- package/dist/lib/table/formats/list.cjs.js.map +1 -0
- package/dist/lib/table/formats/table.cjs.js.map +1 -0
- package/dist/lib/table/modules/table-column-tool.cjs.js.map +1 -0
- package/dist/lib/table/modules/table-operation-menu.cjs.js.map +1 -0
- package/dist/lib/table/modules/table-scroll-bar.cjs.js.map +1 -0
- package/dist/lib/table/modules/table-selection.cjs.js.map +1 -0
- package/dist/lib/table/table-config.cjs.js.map +1 -0
- package/dist/lib/table/utils/index.cjs.js.map +1 -0
- package/dist/lib/table/utils/node-matchers.cjs.js.map +1 -0
- package/dist/lib/toolbar/better-picker.cjs.js.map +1 -0
- package/dist/lib/toolbar/index.cjs.js.map +1 -0
- package/dist/lib/utils/debounce.cjs.js.map +1 -0
- package/dist/lib/utils/method.cjs.js.map +1 -0
- package/dist/lib/video/index.cjs.js.map +1 -0
- package/dist/package.json +52 -0
- package/{theme → dist}/style.css +74 -17
- package/package.json +52 -61
- package/scripts/pre-release.js +34 -0
- package/src/assets/better-table.scss +367 -0
- package/src/assets/common.scss +279 -0
- package/src/assets/counter.scss +19 -0
- package/src/assets/custom-image.scss +20 -0
- package/src/assets/editor.scss +365 -0
- package/src/assets/emoji/emoji.scss +461 -0
- package/src/assets/emoji/style.scss +252 -0
- package/src/assets/fileBar.scss +116 -0
- package/src/assets/font.scss +36 -0
- package/src/assets/fullscreen.scss +21 -0
- package/src/assets/iconfont/iconfont.ttf +0 -0
- package/src/assets/iconfont/iconfont.woff +0 -0
- package/src/assets/iconfont/iconfont.woff2 +0 -0
- package/src/assets/image1.png +0 -0
- package/src/assets/lineHeight.scss +16 -0
- package/src/assets/link.scss +130 -0
- package/src/assets/mention.scss +48 -0
- package/src/assets/screenshot.scss +78 -0
- package/src/assets/size.scss +13 -0
- package/src/assets/style.scss +39 -0
- package/src/assets/tasklist.scss +76 -0
- package/src/assets/toolbar.scss +416 -0
- package/src/attributors/font-size.ts +6 -0
- package/src/attributors/font-style.ts +6 -0
- package/src/attributors/index.ts +4 -0
- package/src/attributors/line-height.ts +6 -0
- package/src/attributors/text-indent.ts +6 -0
- package/src/config/base64-image.ts +8 -0
- package/src/config/editor.config.ts +88 -0
- package/src/config/editor.utils.ts +199 -0
- package/src/config/i18n/en-us.ts +106 -0
- package/src/config/i18n/zh-cn.ts +104 -0
- package/src/config/icons.config.ts +297 -0
- package/src/config/index.ts +171 -0
- package/src/config/types/additional-toolbar-item.interface.ts +8 -0
- package/src/config/types/content-change.interface.ts +13 -0
- package/src/config/types/content-save.interface.ts +6 -0
- package/src/config/types/counter-option.interface.ts +9 -0
- package/src/config/types/editor-config.interface.ts +22 -0
- package/src/config/types/editor-modules.interface.ts +41 -0
- package/src/config/types/file-operation.interface.ts +12 -0
- package/src/config/types/focus-change.interface.ts +4 -0
- package/src/config/types/fullscreen-module.interface.ts +4 -0
- package/src/config/types/help-panel-item.interface.ts +5 -0
- package/src/config/types/help-panel-option.interface.ts +7 -0
- package/src/config/types/image-module.interface.ts +3 -0
- package/src/config/types/image-upload.interface.ts +7 -0
- package/src/config/types/index.ts +22 -0
- package/src/config/types/load-on-demand-module.interface.ts +5 -0
- package/src/config/types/mention-module.interface.ts +8 -0
- package/src/config/types/paste-change.interface.ts +6 -0
- package/src/config/types/quick-menu-module.interface.ts +3 -0
- package/src/config/types/range.interface.ts +4 -0
- package/src/config/types/registry-options.interface.ts +5 -0
- package/src/config/types/selection-change.interface.ts +8 -0
- package/src/config/types/toolbar-item.interface.ts +13 -0
- package/src/config/types/type.ts +5 -0
- package/src/config/types/validate-error.interface.ts +11 -0
- package/src/counter/index.ts +69 -0
- package/src/custom-clipboard.ts +633 -0
- package/src/custom-image/BlotFormatter.ts +167 -0
- package/src/custom-image/Options.ts +150 -0
- package/src/custom-image/actions/Action.ts +13 -0
- package/src/custom-image/actions/CustomResizeAction.ts +207 -0
- package/src/custom-image/actions/DeleteAction.ts +29 -0
- package/src/custom-image/image.ts +118 -0
- package/src/custom-image/specs/BlotSpec.ts +30 -0
- package/src/custom-image/specs/CustomImageSpec.ts +139 -0
- package/src/custom-image/specs/ImageSpec.ts +33 -0
- package/src/custom-uploader.ts +199 -0
- package/src/emoji/emoji-list/index.ts +1 -0
- package/src/emoji/emoji-list/people.ts +111 -0
- package/src/emoji/emoji-list.ts +9 -0
- package/src/emoji/emoji-map.ts +9 -0
- package/src/emoji/formats/emoji-blot.ts +54 -0
- package/src/emoji/index.ts +5 -0
- package/src/emoji/modules/emoji.ts +318 -0
- package/src/emoji/modules/toolbar-emoji.ts +182 -0
- package/src/emoji/utils.ts +15 -0
- package/src/file/formats/file.ts +67 -0
- package/src/file/index.ts +38 -0
- package/src/file/modules/file-bar.ts +146 -0
- package/src/fluent-editor.ts +164 -0
- package/src/format-painter/index.ts +79 -0
- package/src/global-link/constants.ts +3 -0
- package/src/global-link/formats/customer-widget-link.ts +36 -0
- package/src/global-link/formats/doc-link.ts +55 -0
- package/src/global-link/formats/wiki-link.ts +45 -0
- package/src/global-link/formats/work-item-link.ts +47 -0
- package/src/global-link/global-link-panel.ts +20 -0
- package/src/global-link/index.ts +165 -0
- package/src/global-link/utils/createTable.ts +54 -0
- package/src/index.ts +5 -0
- package/src/link/formats/link.ts +44 -0
- package/src/link/index.ts +35 -0
- package/src/link/modules/tooltip.ts +318 -0
- package/src/mention/Mention.ts +406 -0
- package/src/mention/MentionLink.ts +51 -0
- package/src/mention/constants.ts +3 -0
- package/src/quick-menu/index.ts +100 -0
- package/src/screenshot/index.ts +231 -0
- package/src/soft-break/index.ts +34 -0
- package/src/strike/index.ts +16 -0
- package/src/syntax/index.ts +35 -0
- package/src/table/better-table.ts +553 -0
- package/src/table/formats/header.ts +129 -0
- package/src/table/formats/list.ts +229 -0
- package/src/table/formats/table.ts +1272 -0
- package/src/table/modules/table-column-tool.ts +492 -0
- package/src/table/modules/table-operation-menu.ts +584 -0
- package/src/table/modules/table-scroll-bar.ts +248 -0
- package/src/table/modules/table-selection.ts +387 -0
- package/src/table/table-config.ts +42 -0
- package/src/table/utils/index.ts +62 -0
- package/src/table/utils/node-matchers.ts +359 -0
- package/src/toolbar/better-picker.ts +370 -0
- package/src/toolbar/index.ts +180 -0
- package/src/utils/debounce.ts +149 -0
- package/src/utils/image.ts +22 -0
- package/src/utils/method.ts +82 -0
- package/src/utils/scroll-lock.ts +52 -0
- package/src/video/index.ts +62 -0
- package/tsconfig.json +26 -0
- package/vite.config.theme.ts +20 -0
- package/vite.config.ts +56 -0
- package/es/attributors/line-height.es.js.map +0 -1
- package/es/config/base64-image.es.js.map +0 -1
- package/es/config/editor.config.es.js.map +0 -1
- package/es/config/editor.utils.es.js.map +0 -1
- package/es/config/i18n/en-us.es.js.map +0 -1
- package/es/config/i18n/zh-cn.es.js.map +0 -1
- package/es/config/icons.config.es.js.map +0 -1
- package/es/config.es.js.map +0 -1
- package/es/counter/index.es.js.map +0 -1
- package/es/custom-clipboard.es.js.map +0 -1
- package/es/custom-image/BlotFormatter.es.js.map +0 -1
- package/es/custom-image/Options.es.js.map +0 -1
- package/es/custom-image/actions/Action.es.js.map +0 -1
- package/es/custom-image/actions/CustomResizeAction.es.js.map +0 -1
- package/es/custom-image/actions/DeleteAction.es.js.map +0 -1
- package/es/custom-image/image.es.js.map +0 -1
- package/es/custom-image/specs/BlotSpec.es.js.map +0 -1
- package/es/custom-image/specs/CustomImageSpec.es.js.map +0 -1
- package/es/custom-image/specs/ImageSpec.es.js.map +0 -1
- package/es/custom-uploader.es.js.map +0 -1
- package/es/emoji/emoji-list/people.es.js.map +0 -1
- package/es/emoji/emoji-list.es.js.map +0 -1
- package/es/emoji/emoji-map.es.js.map +0 -1
- package/es/emoji/formats/emoji-blot.es.js.map +0 -1
- package/es/emoji/index.es.js.map +0 -1
- package/es/emoji/modules/emoji.es.js.map +0 -1
- package/es/emoji/modules/toolbar-emoji.es.js.map +0 -1
- package/es/emoji/utils.es.js.map +0 -1
- package/es/file/formats/file.es.js.map +0 -1
- package/es/file/index.es.js.map +0 -1
- package/es/file/modules/file-bar.es.js.map +0 -1
- package/es/fluent-editor.es.js.map +0 -1
- package/es/global-link/constants.es.js.map +0 -1
- package/es/global-link/formats/customer-widget-link.es.js.map +0 -1
- package/es/global-link/formats/doc-link.es.js.map +0 -1
- package/es/global-link/formats/wiki-link.es.js.map +0 -1
- package/es/global-link/formats/work-item-link.es.js.map +0 -1
- package/es/global-link/index.es.js.map +0 -1
- package/es/global-link/utils/createTable.es.js.map +0 -1
- package/es/index.es.js +0 -5
- package/es/link/formats/link.es.js.map +0 -1
- package/es/link/index.es.js.map +0 -1
- package/es/link/modules/tooltip.es.js.map +0 -1
- package/es/mention/Mention.es.js.map +0 -1
- package/es/mention/MentionLink.es.js.map +0 -1
- package/es/mention/constants.es.js.map +0 -1
- package/es/quick-menu/index.es.js.map +0 -1
- package/es/screenshot/index.es.js.map +0 -1
- package/es/soft-break/index.es.js.map +0 -1
- package/es/strike/index.es.js.map +0 -1
- package/es/syntax/index.es.js.map +0 -1
- package/es/table/better-table.es.js.map +0 -1
- package/es/table/formats/header.es.js.map +0 -1
- package/es/table/formats/list.es.js.map +0 -1
- package/es/table/formats/table.es.js.map +0 -1
- package/es/table/modules/table-column-tool.es.js.map +0 -1
- package/es/table/modules/table-operation-menu.es.js.map +0 -1
- package/es/table/modules/table-scroll-bar.es.js.map +0 -1
- package/es/table/modules/table-selection.es.js.map +0 -1
- package/es/table/table-config.es.js.map +0 -1
- package/es/table/utils/index.es.js.map +0 -1
- package/es/table/utils/node-matchers.es.js.map +0 -1
- package/es/toolbar/better-picker.es.js.map +0 -1
- package/es/toolbar/index.es.js.map +0 -1
- package/es/utils/debounce.es.js.map +0 -1
- package/es/utils/method.es.js.map +0 -1
- package/es/video/index.es.js.map +0 -1
- package/lib/attributors/line-height.cjs.js.map +0 -1
- package/lib/config/base64-image.cjs.js.map +0 -1
- package/lib/config/editor.config.cjs.js.map +0 -1
- package/lib/config/editor.utils.cjs.js.map +0 -1
- package/lib/config/i18n/en-us.cjs.js.map +0 -1
- package/lib/config/i18n/zh-cn.cjs.js.map +0 -1
- package/lib/config/icons.config.cjs.js.map +0 -1
- package/lib/config.cjs.js.map +0 -1
- package/lib/counter/index.cjs.js.map +0 -1
- package/lib/custom-clipboard.cjs.js.map +0 -1
- package/lib/custom-image/BlotFormatter.cjs.js.map +0 -1
- package/lib/custom-image/Options.cjs.js.map +0 -1
- package/lib/custom-image/actions/Action.cjs.js.map +0 -1
- package/lib/custom-image/actions/CustomResizeAction.cjs.js.map +0 -1
- package/lib/custom-image/actions/DeleteAction.cjs.js.map +0 -1
- package/lib/custom-image/image.cjs.js.map +0 -1
- package/lib/custom-image/specs/BlotSpec.cjs.js.map +0 -1
- package/lib/custom-image/specs/CustomImageSpec.cjs.js.map +0 -1
- package/lib/custom-image/specs/ImageSpec.cjs.js.map +0 -1
- package/lib/custom-uploader.cjs.js.map +0 -1
- package/lib/emoji/emoji-list/people.cjs.js.map +0 -1
- package/lib/emoji/emoji-list.cjs.js.map +0 -1
- package/lib/emoji/emoji-map.cjs.js.map +0 -1
- package/lib/emoji/formats/emoji-blot.cjs.js.map +0 -1
- package/lib/emoji/index.cjs.js.map +0 -1
- package/lib/emoji/modules/emoji.cjs.js.map +0 -1
- package/lib/emoji/modules/toolbar-emoji.cjs.js.map +0 -1
- package/lib/emoji/utils.cjs.js.map +0 -1
- package/lib/file/formats/file.cjs.js.map +0 -1
- package/lib/file/index.cjs.js.map +0 -1
- package/lib/file/modules/file-bar.cjs.js.map +0 -1
- package/lib/fluent-editor.cjs.js.map +0 -1
- package/lib/global-link/constants.cjs.js.map +0 -1
- package/lib/global-link/formats/customer-widget-link.cjs.js.map +0 -1
- package/lib/global-link/formats/doc-link.cjs.js.map +0 -1
- package/lib/global-link/formats/wiki-link.cjs.js.map +0 -1
- package/lib/global-link/formats/work-item-link.cjs.js.map +0 -1
- package/lib/global-link/index.cjs.js.map +0 -1
- package/lib/global-link/utils/createTable.cjs.js.map +0 -1
- package/lib/index.cjs.js +0 -5
- package/lib/link/formats/link.cjs.js.map +0 -1
- package/lib/link/index.cjs.js.map +0 -1
- package/lib/link/modules/tooltip.cjs.js.map +0 -1
- package/lib/mention/Mention.cjs.js.map +0 -1
- package/lib/mention/MentionLink.cjs.js.map +0 -1
- package/lib/mention/constants.cjs.js.map +0 -1
- package/lib/quick-menu/index.cjs.js.map +0 -1
- package/lib/screenshot/index.cjs.js.map +0 -1
- package/lib/soft-break/index.cjs.js.map +0 -1
- package/lib/strike/index.cjs.js.map +0 -1
- package/lib/syntax/index.cjs.js.map +0 -1
- package/lib/table/better-table.cjs.js.map +0 -1
- package/lib/table/formats/header.cjs.js.map +0 -1
- package/lib/table/formats/list.cjs.js.map +0 -1
- package/lib/table/formats/table.cjs.js.map +0 -1
- package/lib/table/modules/table-column-tool.cjs.js.map +0 -1
- package/lib/table/modules/table-operation-menu.cjs.js.map +0 -1
- package/lib/table/modules/table-scroll-bar.cjs.js.map +0 -1
- package/lib/table/modules/table-selection.cjs.js.map +0 -1
- package/lib/table/table-config.cjs.js.map +0 -1
- package/lib/table/utils/index.cjs.js.map +0 -1
- package/lib/table/utils/node-matchers.cjs.js.map +0 -1
- package/lib/toolbar/better-picker.cjs.js.map +0 -1
- package/lib/toolbar/index.cjs.js.map +0 -1
- package/lib/utils/debounce.cjs.js.map +0 -1
- package/lib/utils/method.cjs.js.map +0 -1
- package/lib/video/index.cjs.js.map +0 -1
- /package/{es → dist/es}/attributors/font-size.es.js +0 -0
- /package/{es → dist/es}/attributors/font-size.es.js.map +0 -0
- /package/{es → dist/es}/attributors/font-style.es.js +0 -0
- /package/{es → dist/es}/attributors/font-style.es.js.map +0 -0
- /package/{es → dist/es}/attributors/index.es.js +0 -0
- /package/{es → dist/es}/attributors/index.es.js.map +0 -0
- /package/{es → dist/es}/attributors/line-height.es.js +0 -0
- /package/{es → dist/es}/attributors/text-indent.es.js +0 -0
- /package/{es → dist/es}/attributors/text-indent.es.js.map +0 -0
- /package/{es → dist/es}/config/base64-image.es.js +0 -0
- /package/{es → dist/es}/config/editor.config.es.js +0 -0
- /package/{es → dist/es}/config/editor.utils.es.js +0 -0
- /package/{es → dist/es}/config/i18n/en-us.es.js +0 -0
- /package/{es → dist/es}/config/i18n/zh-cn.es.js +0 -0
- /package/{es → dist/es}/config/icons.config.es.js +0 -0
- /package/{es → dist/es}/config/types/additional-toolbar-item.interface.es.js +0 -0
- /package/{es → dist/es}/config/types/additional-toolbar-item.interface.es.js.map +0 -0
- /package/{es → dist/es}/config/types/content-change.interface.es.js +0 -0
- /package/{es → dist/es}/config/types/content-change.interface.es.js.map +0 -0
- /package/{es → dist/es}/config/types/content-save.interface.es.js +0 -0
- /package/{es → dist/es}/config/types/content-save.interface.es.js.map +0 -0
- /package/{es → dist/es}/config/types/counter-option.interface.es.js +0 -0
- /package/{es → dist/es}/config/types/counter-option.interface.es.js.map +0 -0
- /package/{es → dist/es}/config/types/editor-config.interface.es.js +0 -0
- /package/{es → dist/es}/config/types/editor-config.interface.es.js.map +0 -0
- /package/{es → dist/es}/config/types/editor-modules.interface.es.js +0 -0
- /package/{es → dist/es}/config/types/editor-modules.interface.es.js.map +0 -0
- /package/{es → dist/es}/config/types/file-operation.interface.es.js +0 -0
- /package/{es → dist/es}/config/types/file-operation.interface.es.js.map +0 -0
- /package/{es → dist/es}/config/types/focus-change.interface.es.js +0 -0
- /package/{es → dist/es}/config/types/focus-change.interface.es.js.map +0 -0
- /package/{es → dist/es}/config/types/fullscreen-module.interface.es.js +0 -0
- /package/{es → dist/es}/config/types/fullscreen-module.interface.es.js.map +0 -0
- /package/{es → dist/es}/config/types/help-panel-item.interface.es.js +0 -0
- /package/{es → dist/es}/config/types/help-panel-item.interface.es.js.map +0 -0
- /package/{es → dist/es}/config/types/help-panel-option.interface.es.js +0 -0
- /package/{es → dist/es}/config/types/help-panel-option.interface.es.js.map +0 -0
- /package/{es → dist/es}/config/types/image-module.interface.es.js +0 -0
- /package/{es → dist/es}/config/types/image-module.interface.es.js.map +0 -0
- /package/{es → dist/es}/config/types/image-upload.interface.es.js +0 -0
- /package/{es → dist/es}/config/types/image-upload.interface.es.js.map +0 -0
- /package/{es → dist/es}/config/types/index.es.js +0 -0
- /package/{es → dist/es}/config/types/index.es.js.map +0 -0
- /package/{es → dist/es}/config/types/load-on-demand-module.interface.es.js +0 -0
- /package/{es → dist/es}/config/types/load-on-demand-module.interface.es.js.map +0 -0
- /package/{es → dist/es}/config/types/mention-module.interface.es.js +0 -0
- /package/{es → dist/es}/config/types/mention-module.interface.es.js.map +0 -0
- /package/{es → dist/es}/config/types/paste-change.interface.es.js +0 -0
- /package/{es → dist/es}/config/types/paste-change.interface.es.js.map +0 -0
- /package/{es → dist/es}/config/types/quick-menu-module.interface.es.js +0 -0
- /package/{es → dist/es}/config/types/quick-menu-module.interface.es.js.map +0 -0
- /package/{es → dist/es}/config/types/range.interface.es.js +0 -0
- /package/{es → dist/es}/config/types/range.interface.es.js.map +0 -0
- /package/{es → dist/es}/config/types/registry-options.interface.es.js +0 -0
- /package/{es → dist/es}/config/types/registry-options.interface.es.js.map +0 -0
- /package/{es → dist/es}/config/types/selection-change.interface.es.js +0 -0
- /package/{es → dist/es}/config/types/selection-change.interface.es.js.map +0 -0
- /package/{es → dist/es}/config/types/toolbar-item.interface.es.js +0 -0
- /package/{es → dist/es}/config/types/toolbar-item.interface.es.js.map +0 -0
- /package/{es → dist/es}/config/types/type.es.js +0 -0
- /package/{es → dist/es}/config/types/type.es.js.map +0 -0
- /package/{es → dist/es}/config/types/validate-error.interface.es.js +0 -0
- /package/{es → dist/es}/config/types/validate-error.interface.es.js.map +0 -0
- /package/{es → dist/es}/custom-clipboard.es.js +0 -0
- /package/{es → dist/es}/custom-image/BlotFormatter.es.js +0 -0
- /package/{es → dist/es}/custom-image/Options.es.js +0 -0
- /package/{es → dist/es}/custom-image/actions/Action.es.js +0 -0
- /package/{es → dist/es}/custom-image/actions/CustomResizeAction.es.js +0 -0
- /package/{es → dist/es}/custom-image/actions/DeleteAction.es.js +0 -0
- /package/{es → dist/es}/custom-image/image.es.js +0 -0
- /package/{es → dist/es}/custom-image/specs/BlotSpec.es.js +0 -0
- /package/{es → dist/es}/custom-image/specs/CustomImageSpec.es.js +0 -0
- /package/{es → dist/es}/custom-image/specs/ImageSpec.es.js +0 -0
- /package/{es → dist/es}/custom-uploader.es.js +0 -0
- /package/{es → dist/es}/emoji/emoji-list/index.es.js +0 -0
- /package/{es → dist/es}/emoji/emoji-list/index.es.js.map +0 -0
- /package/{es → dist/es}/emoji/emoji-list/people.es.js +0 -0
- /package/{es → dist/es}/emoji/emoji-list.es.js +0 -0
- /package/{es → dist/es}/emoji/emoji-map.es.js +0 -0
- /package/{es → dist/es}/emoji/formats/emoji-blot.es.js +0 -0
- /package/{es → dist/es}/emoji/index.es.js +0 -0
- /package/{es → dist/es}/emoji/modules/emoji.es.js +0 -0
- /package/{es → dist/es}/emoji/modules/toolbar-emoji.es.js +0 -0
- /package/{es → dist/es}/emoji/utils.es.js +0 -0
- /package/{es → dist/es}/file/formats/file.es.js +0 -0
- /package/{es → dist/es}/file/index.es.js +0 -0
- /package/{es → dist/es}/file/modules/file-bar.es.js +0 -0
- /package/{es → dist/es}/format-painter/index.es.js +0 -0
- /package/{es → dist/es}/format-painter/index.es.js.map +0 -0
- /package/{es → dist/es}/global-link/constants.es.js +0 -0
- /package/{es → dist/es}/global-link/formats/customer-widget-link.es.js +0 -0
- /package/{es → dist/es}/global-link/formats/doc-link.es.js +0 -0
- /package/{es → dist/es}/global-link/formats/wiki-link.es.js +0 -0
- /package/{es → dist/es}/global-link/formats/work-item-link.es.js +0 -0
- /package/{es → dist/es}/global-link/global-link-panel.es.js +0 -0
- /package/{es → dist/es}/global-link/global-link-panel.es.js.map +0 -0
- /package/{es → dist/es}/global-link/index.es.js +0 -0
- /package/{es → dist/es}/global-link/utils/createTable.es.js +0 -0
- /package/{es → dist/es}/link/formats/link.es.js +0 -0
- /package/{es → dist/es}/link/index.es.js +0 -0
- /package/{es → dist/es}/link/modules/tooltip.es.js +0 -0
- /package/{es → dist/es}/mention/Mention.es.js +0 -0
- /package/{es → dist/es}/mention/MentionLink.es.js +0 -0
- /package/{es → dist/es}/mention/constants.es.js +0 -0
- /package/{es → dist/es}/quick-menu/index.es.js +0 -0
- /package/{es → dist/es}/screenshot/index.es.js +0 -0
- /package/{es → dist/es}/soft-break/index.es.js +0 -0
- /package/{es → dist/es}/strike/index.es.js +0 -0
- /package/{es → dist/es}/syntax/index.es.js +0 -0
- /package/{es → dist/es}/table/better-table.es.js +0 -0
- /package/{es → dist/es}/table/formats/header.es.js +0 -0
- /package/{es → dist/es}/table/formats/list.es.js +0 -0
- /package/{es → dist/es}/table/formats/table.es.js +0 -0
- /package/{es → dist/es}/table/modules/table-column-tool.es.js +0 -0
- /package/{es → dist/es}/table/modules/table-operation-menu.es.js +0 -0
- /package/{es → dist/es}/table/modules/table-scroll-bar.es.js +0 -0
- /package/{es → dist/es}/table/modules/table-selection.es.js +0 -0
- /package/{es → dist/es}/table/table-config.es.js +0 -0
- /package/{es → dist/es}/table/utils/index.es.js +0 -0
- /package/{es → dist/es}/table/utils/node-matchers.es.js +0 -0
- /package/{es → dist/es}/toolbar/better-picker.es.js +0 -0
- /package/{es → dist/es}/toolbar/index.es.js +0 -0
- /package/{es → dist/es}/utils/debounce.es.js +0 -0
- /package/{es → dist/es}/utils/image.es.js +0 -0
- /package/{es → dist/es}/utils/image.es.js.map +0 -0
- /package/{es → dist/es}/utils/method.es.js +0 -0
- /package/{es → dist/es}/utils/scroll-lock.es.js +0 -0
- /package/{es → dist/es}/utils/scroll-lock.es.js.map +0 -0
- /package/{es → dist/es}/video/index.es.js +0 -0
- /package/{lib → dist/lib}/attributors/font-size.cjs.js +0 -0
- /package/{lib → dist/lib}/attributors/font-size.cjs.js.map +0 -0
- /package/{lib → dist/lib}/attributors/font-style.cjs.js +0 -0
- /package/{lib → dist/lib}/attributors/font-style.cjs.js.map +0 -0
- /package/{lib → dist/lib}/attributors/index.cjs.js +0 -0
- /package/{lib → dist/lib}/attributors/index.cjs.js.map +0 -0
- /package/{lib → dist/lib}/attributors/line-height.cjs.js +0 -0
- /package/{lib → dist/lib}/attributors/text-indent.cjs.js +0 -0
- /package/{lib → dist/lib}/attributors/text-indent.cjs.js.map +0 -0
- /package/{lib → dist/lib}/config/base64-image.cjs.js +0 -0
- /package/{lib → dist/lib}/config/editor.config.cjs.js +0 -0
- /package/{lib → dist/lib}/config/editor.utils.cjs.js +0 -0
- /package/{lib → dist/lib}/config/i18n/en-us.cjs.js +0 -0
- /package/{lib → dist/lib}/config/i18n/zh-cn.cjs.js +0 -0
- /package/{lib → dist/lib}/config/icons.config.cjs.js +0 -0
- /package/{lib → dist/lib}/config/types/additional-toolbar-item.interface.cjs.js +0 -0
- /package/{lib → dist/lib}/config/types/additional-toolbar-item.interface.cjs.js.map +0 -0
- /package/{lib → dist/lib}/config/types/content-change.interface.cjs.js +0 -0
- /package/{lib → dist/lib}/config/types/content-change.interface.cjs.js.map +0 -0
- /package/{lib → dist/lib}/config/types/content-save.interface.cjs.js +0 -0
- /package/{lib → dist/lib}/config/types/content-save.interface.cjs.js.map +0 -0
- /package/{lib → dist/lib}/config/types/counter-option.interface.cjs.js +0 -0
- /package/{lib → dist/lib}/config/types/counter-option.interface.cjs.js.map +0 -0
- /package/{lib → dist/lib}/config/types/editor-config.interface.cjs.js +0 -0
- /package/{lib → dist/lib}/config/types/editor-config.interface.cjs.js.map +0 -0
- /package/{lib → dist/lib}/config/types/editor-modules.interface.cjs.js +0 -0
- /package/{lib → dist/lib}/config/types/editor-modules.interface.cjs.js.map +0 -0
- /package/{lib → dist/lib}/config/types/file-operation.interface.cjs.js +0 -0
- /package/{lib → dist/lib}/config/types/file-operation.interface.cjs.js.map +0 -0
- /package/{lib → dist/lib}/config/types/focus-change.interface.cjs.js +0 -0
- /package/{lib → dist/lib}/config/types/focus-change.interface.cjs.js.map +0 -0
- /package/{lib → dist/lib}/config/types/fullscreen-module.interface.cjs.js +0 -0
- /package/{lib → dist/lib}/config/types/fullscreen-module.interface.cjs.js.map +0 -0
- /package/{lib → dist/lib}/config/types/help-panel-item.interface.cjs.js +0 -0
- /package/{lib → dist/lib}/config/types/help-panel-item.interface.cjs.js.map +0 -0
- /package/{lib → dist/lib}/config/types/help-panel-option.interface.cjs.js +0 -0
- /package/{lib → dist/lib}/config/types/help-panel-option.interface.cjs.js.map +0 -0
- /package/{lib → dist/lib}/config/types/image-module.interface.cjs.js +0 -0
- /package/{lib → dist/lib}/config/types/image-module.interface.cjs.js.map +0 -0
- /package/{lib → dist/lib}/config/types/image-upload.interface.cjs.js +0 -0
- /package/{lib → dist/lib}/config/types/image-upload.interface.cjs.js.map +0 -0
- /package/{lib → dist/lib}/config/types/index.cjs.js +0 -0
- /package/{lib → dist/lib}/config/types/index.cjs.js.map +0 -0
- /package/{lib → dist/lib}/config/types/load-on-demand-module.interface.cjs.js +0 -0
- /package/{lib → dist/lib}/config/types/load-on-demand-module.interface.cjs.js.map +0 -0
- /package/{lib → dist/lib}/config/types/mention-module.interface.cjs.js +0 -0
- /package/{lib → dist/lib}/config/types/mention-module.interface.cjs.js.map +0 -0
- /package/{lib → dist/lib}/config/types/paste-change.interface.cjs.js +0 -0
- /package/{lib → dist/lib}/config/types/paste-change.interface.cjs.js.map +0 -0
- /package/{lib → dist/lib}/config/types/quick-menu-module.interface.cjs.js +0 -0
- /package/{lib → dist/lib}/config/types/quick-menu-module.interface.cjs.js.map +0 -0
- /package/{lib → dist/lib}/config/types/range.interface.cjs.js +0 -0
- /package/{lib → dist/lib}/config/types/range.interface.cjs.js.map +0 -0
- /package/{lib → dist/lib}/config/types/registry-options.interface.cjs.js +0 -0
- /package/{lib → dist/lib}/config/types/registry-options.interface.cjs.js.map +0 -0
- /package/{lib → dist/lib}/config/types/selection-change.interface.cjs.js +0 -0
- /package/{lib → dist/lib}/config/types/selection-change.interface.cjs.js.map +0 -0
- /package/{lib → dist/lib}/config/types/toolbar-item.interface.cjs.js +0 -0
- /package/{lib → dist/lib}/config/types/toolbar-item.interface.cjs.js.map +0 -0
- /package/{lib → dist/lib}/config/types/type.cjs.js +0 -0
- /package/{lib → dist/lib}/config/types/type.cjs.js.map +0 -0
- /package/{lib → dist/lib}/config/types/validate-error.interface.cjs.js +0 -0
- /package/{lib → dist/lib}/config/types/validate-error.interface.cjs.js.map +0 -0
- /package/{lib → dist/lib}/custom-clipboard.cjs.js +0 -0
- /package/{lib → dist/lib}/custom-image/BlotFormatter.cjs.js +0 -0
- /package/{lib → dist/lib}/custom-image/Options.cjs.js +0 -0
- /package/{lib → dist/lib}/custom-image/actions/Action.cjs.js +0 -0
- /package/{lib → dist/lib}/custom-image/actions/CustomResizeAction.cjs.js +0 -0
- /package/{lib → dist/lib}/custom-image/actions/DeleteAction.cjs.js +0 -0
- /package/{lib → dist/lib}/custom-image/image.cjs.js +0 -0
- /package/{lib → dist/lib}/custom-image/specs/BlotSpec.cjs.js +0 -0
- /package/{lib → dist/lib}/custom-image/specs/CustomImageSpec.cjs.js +0 -0
- /package/{lib → dist/lib}/custom-image/specs/ImageSpec.cjs.js +0 -0
- /package/{lib → dist/lib}/custom-uploader.cjs.js +0 -0
- /package/{lib → dist/lib}/emoji/emoji-list/index.cjs.js +0 -0
- /package/{lib → dist/lib}/emoji/emoji-list/index.cjs.js.map +0 -0
- /package/{lib → dist/lib}/emoji/emoji-list/people.cjs.js +0 -0
- /package/{lib → dist/lib}/emoji/emoji-list.cjs.js +0 -0
- /package/{lib → dist/lib}/emoji/emoji-map.cjs.js +0 -0
- /package/{lib → dist/lib}/emoji/formats/emoji-blot.cjs.js +0 -0
- /package/{lib → dist/lib}/emoji/index.cjs.js +0 -0
- /package/{lib → dist/lib}/emoji/modules/emoji.cjs.js +0 -0
- /package/{lib → dist/lib}/emoji/modules/toolbar-emoji.cjs.js +0 -0
- /package/{lib → dist/lib}/emoji/utils.cjs.js +0 -0
- /package/{lib → dist/lib}/file/formats/file.cjs.js +0 -0
- /package/{lib → dist/lib}/file/index.cjs.js +0 -0
- /package/{lib → dist/lib}/file/modules/file-bar.cjs.js +0 -0
- /package/{lib → dist/lib}/format-painter/index.cjs.js +0 -0
- /package/{lib → dist/lib}/format-painter/index.cjs.js.map +0 -0
- /package/{lib → dist/lib}/global-link/constants.cjs.js +0 -0
- /package/{lib → dist/lib}/global-link/formats/customer-widget-link.cjs.js +0 -0
- /package/{lib → dist/lib}/global-link/formats/doc-link.cjs.js +0 -0
- /package/{lib → dist/lib}/global-link/formats/wiki-link.cjs.js +0 -0
- /package/{lib → dist/lib}/global-link/formats/work-item-link.cjs.js +0 -0
- /package/{lib → dist/lib}/global-link/global-link-panel.cjs.js +0 -0
- /package/{lib → dist/lib}/global-link/global-link-panel.cjs.js.map +0 -0
- /package/{lib → dist/lib}/global-link/index.cjs.js +0 -0
- /package/{lib → dist/lib}/global-link/utils/createTable.cjs.js +0 -0
- /package/{lib → dist/lib}/link/formats/link.cjs.js +0 -0
- /package/{lib → dist/lib}/link/index.cjs.js +0 -0
- /package/{lib → dist/lib}/link/modules/tooltip.cjs.js +0 -0
- /package/{lib → dist/lib}/mention/Mention.cjs.js +0 -0
- /package/{lib → dist/lib}/mention/MentionLink.cjs.js +0 -0
- /package/{lib → dist/lib}/mention/constants.cjs.js +0 -0
- /package/{lib → dist/lib}/quick-menu/index.cjs.js +0 -0
- /package/{lib → dist/lib}/screenshot/index.cjs.js +0 -0
- /package/{lib → dist/lib}/soft-break/index.cjs.js +0 -0
- /package/{lib → dist/lib}/strike/index.cjs.js +0 -0
- /package/{lib → dist/lib}/syntax/index.cjs.js +0 -0
- /package/{lib → dist/lib}/table/better-table.cjs.js +0 -0
- /package/{lib → dist/lib}/table/formats/header.cjs.js +0 -0
- /package/{lib → dist/lib}/table/formats/list.cjs.js +0 -0
- /package/{lib → dist/lib}/table/formats/table.cjs.js +0 -0
- /package/{lib → dist/lib}/table/modules/table-column-tool.cjs.js +0 -0
- /package/{lib → dist/lib}/table/modules/table-operation-menu.cjs.js +0 -0
- /package/{lib → dist/lib}/table/modules/table-scroll-bar.cjs.js +0 -0
- /package/{lib → dist/lib}/table/modules/table-selection.cjs.js +0 -0
- /package/{lib → dist/lib}/table/table-config.cjs.js +0 -0
- /package/{lib → dist/lib}/table/utils/index.cjs.js +0 -0
- /package/{lib → dist/lib}/table/utils/node-matchers.cjs.js +0 -0
- /package/{lib → dist/lib}/toolbar/better-picker.cjs.js +0 -0
- /package/{lib → dist/lib}/toolbar/index.cjs.js +0 -0
- /package/{lib → dist/lib}/utils/debounce.cjs.js +0 -0
- /package/{lib → dist/lib}/utils/image.cjs.js +0 -0
- /package/{lib → dist/lib}/utils/image.cjs.js.map +0 -0
- /package/{lib → dist/lib}/utils/method.cjs.js +0 -0
- /package/{lib → dist/lib}/utils/scroll-lock.cjs.js +0 -0
- /package/{lib → dist/lib}/utils/scroll-lock.cjs.js.map +0 -0
- /package/{lib → dist/lib}/video/index.cjs.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-operation-menu.es.js","sources":["../../../../src/table/modules/table-operation-menu.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { LANG_CONF } from '../../config/editor.config'\r\nimport {\r\n ERROR_LIMIT,\r\n MENU_ITEM_HEIGHT,\r\n MENU_MIN_HEIGHT,\r\n MENU_WIDTH,\r\n OPERATE_MENU_COLORPICKER_CLASS,\r\n\r\n OPERATE_MENU_COLORPICKER_ITEM_CLASS,\r\n OPERATE_MENU_DIVIDING_CLASS,\r\n OPERATE_MENU_ITEM_CLASS,\r\n OPERATE_MENU_SUBTITLE_CLASS,\r\n} from '../table-config'\r\n\r\nimport { arrayFrom, css, elementRemove, getRelativeRect } from '../utils'\r\n\r\nconst MENU_ITEMS_DEFAULT = {\r\n copyCells: {\r\n text: 'Copy Cells',\r\n handler() {\r\n this.onCopy('copy')\r\n },\r\n },\r\n copyTable: {\r\n text: 'Copy Table',\r\n handler() {\r\n this.tableColumnTool.destroy()\r\n this.tableScrollBar.destroy()\r\n this.tableSelection.clearSelection()\r\n const dom = this.table.cloneNode(true)\r\n const trArr = dom.querySelectorAll('tr[data-row]')\r\n trArr.forEach(tr => tr.removeAttribute('data-row'))\r\n dom.style.position = 'fixed'\r\n dom.style.top = 0\r\n dom.style.left = 0\r\n dom.style.clip = 'rect(0,0,0,0)'\r\n document.body.appendChild(dom)\r\n this.setCopyRange(dom)\r\n document.execCommand('copy')\r\n dom.remove()\r\n },\r\n },\r\n cutCells: {\r\n text: 'Cut Cells',\r\n handler() {\r\n this.onCopy('cut')\r\n },\r\n },\r\n emptyCells: {\r\n text: 'Empty Cells',\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n const { selectedTds } = this.tableSelection\r\n tableContainer.emptyCells(selectedTds)\r\n },\r\n },\r\n insertColumnRight: {\r\n text: 'Insert Column After',\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n const colIndex = getColToolCellIndexByBoundary(\r\n this.columnToolCells,\r\n this.boundary,\r\n (cellRect, boundary) => {\r\n return Math.abs(cellRect.x + cellRect.width - boundary.x1) <= ERROR_LIMIT\r\n },\r\n this.quill.root.parentNode,\r\n )\r\n\r\n const newColumn = tableContainer.insertColumn(this.boundary, colIndex, true, this.quill.root.parentNode)\r\n\r\n this.tableColumnTool.updateColToolCells()\r\n this.quill.update(Quill.sources.USER)\r\n // fix: the scroll bar will go to the top when insert row/column to the table\r\n // this.quill.setSelection(\r\n // this.quill.getIndex(newColumn[0]),\r\n // 0,\r\n // Quill.sources.SILENT\r\n // )\r\n this.tableSelection.setSelection(\r\n newColumn[0].domNode.getBoundingClientRect(),\r\n newColumn[0].domNode.getBoundingClientRect(),\r\n )\r\n\r\n setTimeout(() => this.tableScrollBar.updateScrollBar())\r\n },\r\n },\r\n\r\n insertColumnLeft: {\r\n text: 'Insert Column Before',\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n const colIndex = getColToolCellIndexByBoundary(\r\n this.columnToolCells,\r\n this.boundary,\r\n (cellRect, boundary) => {\r\n return Math.abs(cellRect.x - boundary.x) <= ERROR_LIMIT\r\n },\r\n this.quill.root.parentNode,\r\n )\r\n\r\n const newColumn = tableContainer.insertColumn(this.boundary, colIndex, false, this.quill.root.parentNode)\r\n\r\n this.tableColumnTool.updateColToolCells()\r\n this.quill.update(Quill.sources.USER)\r\n // this.quill.setSelection(\r\n // this.quill.getIndex(newColumn[0]),\r\n // 0,\r\n // Quill.sources.SILENT\r\n // )\r\n this.tableSelection.setSelection(\r\n newColumn[0].domNode.getBoundingClientRect(),\r\n newColumn[0].domNode.getBoundingClientRect(),\r\n )\r\n\r\n setTimeout(() => this.tableScrollBar.updateScrollBar())\r\n },\r\n },\r\n\r\n insertRowUp: {\r\n text: 'Insert Row Above',\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n const affectedCells = tableContainer.insertRow(this.boundary, false, this.quill.root.parentNode)\r\n\r\n this.tableColumnTool.updateRowToolCells()\r\n this.quill.update(Quill.sources.USER)\r\n // this.quill.setSelection(\r\n // this.quill.getIndex(affectedCells[0]),\r\n // 0,\r\n // Quill.sources.SILENT\r\n // )\r\n this.tableSelection.setSelection(\r\n affectedCells[0].domNode.getBoundingClientRect(),\r\n affectedCells[0].domNode.getBoundingClientRect(),\r\n )\r\n\r\n setTimeout(() => this.tableScrollBar.resetTableHeight(this.table))\r\n },\r\n },\r\n\r\n insertRowDown: {\r\n text: 'Insert Row Below',\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n const affectedCells = tableContainer.insertRow(this.boundary, true, this.quill.root.parentNode)\r\n\r\n this.tableColumnTool.updateRowToolCells()\r\n this.quill.update(Quill.sources.USER)\r\n // this.quill.setSelection(\r\n // this.quill.getIndex(affectedCells[0]),\r\n // 0,\r\n // Quill.sources.SILENT\r\n // )\r\n this.tableSelection.setSelection(\r\n affectedCells[0].domNode.getBoundingClientRect(),\r\n affectedCells[0].domNode.getBoundingClientRect(),\r\n )\r\n\r\n setTimeout(() => this.tableScrollBar.resetTableHeight(this.table))\r\n },\r\n },\r\n\r\n mergeCells: {\r\n text: 'Merge Cells',\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n // compute merged Cell rowspan, equal to length of selected rows\r\n const rowspan = tableContainer.rows().reduce((sum, row) => {\r\n const rowRect = getRelativeRect(row.domNode.getBoundingClientRect(), this.quill.root.parentNode)\r\n if (\r\n rowRect.y > this.boundary.y - ERROR_LIMIT\r\n && rowRect.y + rowRect.height < this.boundary.y + this.boundary.height + ERROR_LIMIT\r\n ) {\r\n sum += 1\r\n }\r\n return sum\r\n }, 0)\r\n\r\n // compute merged cell colspan, equal to length of selected cols\r\n const colspan = this.columnToolCells.reduce((sum, cell) => {\r\n const cellRect = getRelativeRect(cell.getBoundingClientRect(), this.quill.root.parentNode)\r\n if (\r\n cellRect.x > this.boundary.x - ERROR_LIMIT\r\n && cellRect.x + cellRect.width < this.boundary.x + this.boundary.width + ERROR_LIMIT\r\n ) {\r\n sum += 1\r\n }\r\n return sum\r\n }, 0)\r\n\r\n const mergedCell = tableContainer.mergeCells(\r\n this.boundary,\r\n this.selectedTds,\r\n rowspan,\r\n colspan,\r\n this.quill.root.parentNode,\r\n )\r\n this.quill.update(Quill.sources.USER)\r\n this.tableSelection.setSelection(\r\n mergedCell.domNode.getBoundingClientRect(),\r\n mergedCell.domNode.getBoundingClientRect(),\r\n )\r\n },\r\n },\r\n\r\n unmergeCells: {\r\n text: 'Split Cells',\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n tableContainer.unmergeCells(this.selectedTds, this.quill.root.parentNode)\r\n this.quill.update(Quill.sources.USER)\r\n this.tableSelection.clearSelection()\r\n },\r\n },\r\n\r\n deleteColumn: {\r\n text: 'Delete Columns',\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n const colIndexes = getColToolCellIndexesByBoundary(\r\n this.columnToolCells,\r\n this.boundary,\r\n (cellRect, boundary) => {\r\n return cellRect.x + ERROR_LIMIT > boundary.x && cellRect.x + cellRect.width - ERROR_LIMIT < boundary.x1\r\n },\r\n this.quill.root.parentNode,\r\n )\r\n\r\n const isDeleteTable = tableContainer.deleteColumns(this.boundary, colIndexes, this.quill.root.parentNode)\r\n if (!isDeleteTable) {\r\n this.tableColumnTool.updateColToolCells()\r\n this.quill.update(Quill.sources.USER)\r\n this.tableSelection.clearSelection()\r\n }\r\n\r\n setTimeout(() => this.tableScrollBar.updateScrollBar())\r\n },\r\n },\r\n\r\n deleteRow: {\r\n text: 'Delete Rows',\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n const isDeleteTable = tableContainer.deleteRow(this.boundary, this.quill.root.parentNode)\r\n if (!isDeleteTable) {\r\n this.tableColumnTool.updateRowToolCells()\r\n this.quill.update(Quill.sources.USER)\r\n this.tableSelection.clearSelection()\r\n }\r\n },\r\n },\r\n\r\n deleteTable: {\r\n text: 'Remove Table',\r\n handler() {\r\n const betterTableModule = this.quill.getModule('better-table')\r\n const tableContainer = Quill.find(this.table)\r\n betterTableModule.hideTableTools()\r\n tableContainer.remove()\r\n this.quill.update(Quill.sources.USER)\r\n // fix: 右键菜单删除表格后编辑器失焦\r\n this.quill.focus()\r\n },\r\n },\r\n}\r\nconst DEFAULT_CELL_COLORS = ['white', 'red', 'yellow', 'blue']\r\nconst NODE_EVENT_MAP = new WeakMap()\r\nconst DEFAULT_COLOR_SUBTITLE = LANG_CONF.subTitleBgColor\r\nexport default class TableOperationMenu {\r\n tableSelection: any\r\n table: any\r\n quill: any\r\n options: any\r\n menuItems: any\r\n tableColumnTool: any\r\n tableScrollBar: any\r\n boundary: any\r\n selectedTds: any\r\n destroyHandler: any\r\n columnToolCells: any\r\n colorSubTitle: any\r\n cellColors: any\r\n domNode: any\r\n\r\n constructor(params, quill, options) {\r\n const betterTableModule = quill.getModule('better-table')\r\n this.tableSelection = betterTableModule.tableSelection\r\n this.table = params.table\r\n this.quill = quill\r\n this.options = options\r\n this.menuItems = { ...MENU_ITEMS_DEFAULT, ...options.items }\r\n this.tableColumnTool = betterTableModule.columnTool\r\n // this.tableRowTool = betterTableModule.rowTool\r\n this.tableScrollBar = betterTableModule.tableScrollBar\r\n this.boundary = this.tableSelection.boundary\r\n this.selectedTds = this.tableSelection.selectedTds\r\n this.destroyHandler = this.destroy.bind(this)\r\n this.columnToolCells = this.tableColumnTool.colToolCells()\r\n this.colorSubTitle\r\n = options.color && options.color.text\r\n ? options.color.text\r\n : DEFAULT_COLOR_SUBTITLE\r\n this.cellColors\r\n = options.color && options.color.colors\r\n ? options.color.colors\r\n : DEFAULT_CELL_COLORS\r\n\r\n this.menuInitial(params)\r\n this.mount()\r\n document.addEventListener('click', this.destroyHandler, false)\r\n }\r\n\r\n mount() {\r\n this.quill.root.parentNode.appendChild(this.domNode)\r\n }\r\n\r\n destroy() {\r\n const menuItems = arrayFrom(\r\n this.domNode.querySelectorAll(`.${OPERATE_MENU_ITEM_CLASS}`),\r\n )\r\n const colorPickerItems = arrayFrom(\r\n this.domNode.querySelectorAll(`.${OPERATE_MENU_COLORPICKER_ITEM_CLASS}`),\r\n )\r\n const nodes = menuItems.concat(colorPickerItems)\r\n\r\n nodes.forEach((node) => {\r\n if (NODE_EVENT_MAP.has(node)) {\r\n const unregister = NODE_EVENT_MAP.get(node)\r\n\r\n if (unregister && typeof unregister === 'function') {\r\n unregister()\r\n }\r\n }\r\n })\r\n\r\n elementRemove(this.domNode)\r\n document.removeEventListener('mousedown', this.destroyHandler, false)\r\n\r\n return null\r\n }\r\n\r\n menuInitial({ cell, left, top }) {\r\n const rowspan = cell.getAttribute('rowspan')\r\n const colspan = cell.getAttribute('colspan')\r\n const winHeight = window.innerHeight || Math.max(document.documentElement.clientHeight, document.body.clientHeight)\r\n const num = Object.keys(this.menuItems) || []\r\n const menuHeight = MENU_ITEM_HEIGHT * num.length || MENU_MIN_HEIGHT\r\n const transformOffset = checkAndGetViewPointChange(this.quill.root.parentNode, left, top)\r\n const leftPos = left - transformOffset.offsetX\r\n const topPos = top - transformOffset.offsetY\r\n const cssContent = {\r\n 'left': `${leftPos}px`,\r\n 'top': `${topPos}px`,\r\n 'min-height': `${MENU_MIN_HEIGHT}px`,\r\n 'width': `${MENU_WIDTH}px`,\r\n }\r\n\r\n if (menuHeight + top > winHeight && menuHeight < winHeight) {\r\n delete cssContent.top\r\n cssContent.bottom = '10px'\r\n }\r\n\r\n this.domNode = document.createElement('div')\r\n this.domNode.classList.add('qlbt-operation-menu')\r\n css(this.domNode, cssContent)\r\n\r\n for (const name in this.menuItems) {\r\n if (this.menuItems[name]) {\r\n const item = { ...MENU_ITEMS_DEFAULT[name], ...this.menuItems[name] }\r\n const dom = this.menuItemCreator(item)\r\n if (\r\n (name === 'mergeCells' && this.tableSelection.selectedTds.length === 1)\r\n || (name === 'unmergeCells' && rowspan === 1 && colspan === 1)\r\n ) {\r\n dom.classList.add('qlbt-operation-menu-disabled')\r\n }\r\n else {\r\n dom.addEventListener('mouseup', item.handler.bind(this), false)\r\n }\r\n this.domNode.appendChild(dom)\r\n }\r\n }\r\n\r\n // if colors option is false, disabled bg color\r\n if (this.options.color && this.options.color !== false) {\r\n this.domNode.appendChild(dividingCreator())\r\n this.domNode.appendChild(subTitleCreator(this.colorSubTitle))\r\n this.domNode.appendChild(this.colorsItemCreator(this.cellColors))\r\n }\r\n\r\n // create dividing line\r\n function dividingCreator() {\r\n const dividing = document.createElement('div')\r\n dividing.classList.add(OPERATE_MENU_DIVIDING_CLASS)\r\n return dividing\r\n }\r\n\r\n // create subtitle for menu\r\n function subTitleCreator(title) {\r\n const subTitle = document.createElement('div')\r\n subTitle.classList.add(OPERATE_MENU_SUBTITLE_CLASS)\r\n subTitle.textContent = title\r\n return subTitle\r\n }\r\n }\r\n\r\n colorsItemCreator(colors) {\r\n const self = this\r\n const node = document.createElement('div')\r\n node.classList.add(OPERATE_MENU_COLORPICKER_CLASS)\r\n\r\n colors.forEach((color) => {\r\n const colorBox = colorBoxCreator(color)\r\n node.appendChild(colorBox)\r\n })\r\n\r\n function colorBoxCreator(color) {\r\n const box = document.createElement('div')\r\n box.classList.add(OPERATE_MENU_COLORPICKER_ITEM_CLASS)\r\n box.setAttribute('data-color', color)\r\n box.style.backgroundColor = color\r\n\r\n const clickHandler = function () {\r\n const selectedTds = self.tableSelection.selectedTds\r\n if (selectedTds && selectedTds.length > 0) {\r\n selectedTds.forEach((tableCell) => {\r\n tableCell.domNode.children[0].setAttribute('data-parent-bg', color)\r\n tableCell.format('cell-bg', color)\r\n })\r\n }\r\n }\r\n\r\n box.addEventListener('click', clickHandler, false)\r\n\r\n NODE_EVENT_MAP.set(box, () => {\r\n box.removeEventListener('click', clickHandler, false)\r\n })\r\n\r\n return box\r\n }\r\n\r\n return node\r\n }\r\n\r\n menuItemCreator({ text }) {\r\n const node = document.createElement('div')\r\n node.classList.add('qlbt-operation-menu-item')\r\n node.textContent = text\r\n // node.addEventListener('click', handler.bind(this), false)\r\n return node\r\n }\r\n\r\n onCopy(operation) {\r\n const { selectedTds } = this.tableSelection\r\n const virtualTable = this.createVirtualTable(selectedTds, operation)\r\n document.body.appendChild(virtualTable)\r\n this.setCopyRange(virtualTable)\r\n this.tableSelection.preSelectedTable = virtualTable\r\n this.tableSelection.preSelectedTds = selectedTds\r\n document.execCommand('copy')\r\n virtualTable.remove()\r\n if (operation === 'cut') {\r\n const tableContainer = Quill.find(this.table)\r\n tableContainer.emptyCells(selectedTds)\r\n }\r\n }\r\n\r\n createVirtualTable(selectedTds, _operation) {\r\n const virtualTable: any = document.createElement('table')\r\n virtualTable.style.position = 'fixed'\r\n virtualTable.style.top = 0\r\n virtualTable.style.left = 0\r\n virtualTable.style.clip = 'rect(0,0,0,0)'\r\n let preParentSign = ''\r\n let virtualTr = null\r\n selectedTds.forEach((selectedCell) => {\r\n const { domNode, parent } = selectedCell\r\n const currentParentSign = parent.domNode.getAttribute('data-row')\r\n const rowspan = domNode.firstChild.dataset.rowspan\r\n const colspan = domNode.firstChild.dataset.colspan\r\n const row = domNode.firstChild.dataset.row\r\n const cell = domNode.firstChild.dataset.cell\r\n\r\n selectedCell.dataCell = cell\r\n selectedCell.dataRow = row\r\n selectedCell.dataColSpan = colspan\r\n selectedCell.dataRowSpan = rowspan\r\n\r\n if (currentParentSign !== preParentSign) {\r\n if (preParentSign !== '') {\r\n virtualTable.appendChild(virtualTr)\r\n }\r\n virtualTr = document.createElement('tr')\r\n preParentSign = currentParentSign\r\n }\r\n\r\n const domNodeWidth = domNode.offsetWidth\r\n const cloneNode = domNode.cloneNode(true)\r\n cloneNode.setAttribute('width', domNodeWidth)\r\n\r\n virtualTr.appendChild(cloneNode)\r\n })\r\n virtualTable.appendChild(virtualTr)\r\n return virtualTable\r\n }\r\n\r\n setCopyRange(selectedNodes) {\r\n const range = document.createRange()\r\n const windowSelectionRange = window.getSelection()\r\n range.selectNodeContents(selectedNodes)\r\n windowSelectionRange.removeAllRanges()\r\n windowSelectionRange.addRange(range)\r\n }\r\n\r\n groupTableCell(selectedTds) {\r\n const rowGroup = []\r\n let dataRow = ''\r\n let preDataRow = ''\r\n let index = 0\r\n selectedTds.forEach((tableCell) => {\r\n dataRow = tableCell.parent.domNode.getAttribute('data-row')\r\n\r\n if (dataRow !== preDataRow) {\r\n if (preDataRow !== '') {\r\n index++\r\n }\r\n rowGroup[index] = []\r\n preDataRow = dataRow\r\n }\r\n\r\n rowGroup[index].push(tableCell)\r\n })\r\n return rowGroup\r\n }\r\n}\r\n\r\nfunction getColToolCellIndexByBoundary(cells, boundary, conditionFn, container) {\r\n return cells.reduce((findIndex, cell) => {\r\n const cellRect = getRelativeRect(cell.getBoundingClientRect(), container)\r\n if (conditionFn(cellRect, boundary)) {\r\n findIndex = cells.indexOf(cell)\r\n }\r\n return findIndex\r\n }, false)\r\n}\r\n\r\nfunction getColToolCellIndexesByBoundary(cells, boundary, conditionFn, container) {\r\n return cells.reduce((findIndexes, cell) => {\r\n const cellRect = getRelativeRect(cell.getBoundingClientRect(), container)\r\n if (conditionFn(cellRect, boundary)) {\r\n findIndexes.push(cells.indexOf(cell))\r\n }\r\n return findIndexes\r\n }, [])\r\n}\r\n\r\nfunction checkAndGetViewPointChange(parentContainer: HTMLElement, left: number, top: number) {\r\n if (!parentContainer) {\r\n return {\r\n offsetX: 0,\r\n offsetY: 0,\r\n }\r\n }\r\n // 模拟一个元素测预测位置和最终位置是否符合,如果不符合则是有transform等造成的偏移\r\n const testEl = document.createElement('div')\r\n css(testEl, {\r\n opacity: '0',\r\n position: 'fixed',\r\n left: `${left}px`,\r\n top: `${top}px`,\r\n width: '1px',\r\n height: '1px',\r\n zIndex: '-999999',\r\n })\r\n parentContainer.appendChild(testEl)\r\n const testElPosition = testEl.getBoundingClientRect()\r\n parentContainer.removeChild(testEl)\r\n return {\r\n offsetX: testElPosition.left - left,\r\n offsetY: testElPosition.top - top,\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-scroll-bar.es.js","sources":["../../../../src/table/modules/table-scroll-bar.ts"],"sourcesContent":["import { SCROLL_BAR_PANEL_HEIGHT } from '../table-config'\r\nimport { css } from '../utils'\r\n\r\nexport default class TableScrollBar {\r\n table: any\r\n quill: any\r\n modulesContainer: any\r\n domNode: any\r\n oldRootScrollTop: any\r\n // @ts-ignore\r\n prev: number\r\n columnToolDomNode: any\r\n columnCtrlPanel: any\r\n leftMask: any\r\n tableViewRect: any\r\n tableRect: any\r\n containerRect: any\r\n subscriber: any\r\n // @ts-ignore\r\n tableMoveDistance: number\r\n // @ts-ignore\r\n maxBarLeft: number\r\n // @ts-ignore\r\n scrollBar: Element\r\n // @ts-ignore\r\n isTableOverflow: boolean // 表格是否溢出开关,判断开关值后只改变样式一次,不重复修改\r\n\r\n constructor(table, quill, dom) {\r\n if (!table) {\r\n return\r\n }\r\n this.table = table\r\n this.quill = quill\r\n this.modulesContainer = dom\r\n this.domNode = null\r\n this.oldRootScrollTop = this.quill.root.scrollTop\r\n this.prev = 0\r\n\r\n const betterTableModule = this.quill.getModule('better-table')\r\n const tableColumnTool = betterTableModule.columnTool\r\n this.columnToolDomNode = tableColumnTool.domNode\r\n this.columnCtrlPanel = tableColumnTool.columnCtrlPanel\r\n this.leftMask = tableColumnTool.leftMask\r\n\r\n this.updateScrollBar()\r\n\r\n if (this.quill.root === this.quill.scrollingContainer) {\r\n this.quill.root.addEventListener('scroll', this.handleQuillRootScroll.bind(this))\r\n }\r\n }\r\n\r\n handleQuillRootScroll() {\r\n if (!this.domNode) {\r\n return\r\n }\r\n const curTableRect = this.table.getBoundingClientRect()\r\n const curContainerRect = this.quill.root.parentNode.getBoundingClientRect()\r\n const tableTop = curTableRect.top + SCROLL_BAR_PANEL_HEIGHT\r\n const tableBottom = curTableRect.top + curTableRect.height - 1\r\n const containerBottom = curContainerRect.top + curContainerRect.height\r\n if (containerBottom < tableBottom && containerBottom > tableTop) { // 表格下端溢出容器下端\r\n if (!this.isTableOverflow) {\r\n this.isTableOverflow = true\r\n css(this.domNode, {\r\n display: 'block',\r\n top: `${this.containerRect.height - SCROLL_BAR_PANEL_HEIGHT}px`,\r\n marginTop: '0px',\r\n })\r\n }\r\n }\r\n else if (containerBottom <= tableTop) { // 表格上端溢出容器下端\r\n this.isTableOverflow = false\r\n this.domNode.style.display = 'none'\r\n }\r\n else { // 表格下端在容器内\r\n this.setScrollBarToBottom()\r\n css(this.domNode, { marginTop: `${this.oldRootScrollTop - this.quill.root.scrollTop}px` })\r\n }\r\n }\r\n\r\n setScrollBarToBottom() {\r\n if (this.isTableOverflow) {\r\n this.isTableOverflow = false\r\n const barPos = this.tableRect.top + this.tableRect.height - this.containerRect.top - 1\r\n css(this.domNode, { display: 'block', top: `${barPos}px` })\r\n }\r\n }\r\n\r\n resetTableHeight(table) {\r\n if (this.domNode) {\r\n // 表格的高度改变,重置初始化tableRect的高度,但不重置其他坐标值\r\n this.tableRect.height = table.getBoundingClientRect().height\r\n this.isTableOverflow = !this.isTableOverflow\r\n this.handleQuillRootScroll()\r\n }\r\n }\r\n\r\n setScrollBarMove(pos, isMouse) {\r\n // 获取当前滑块左边距和鼠标两次事件节点之间的位移差,计算当前滑块位置及是否显示左右遮罩层,通过比例计算表格位移并赋值\r\n const currentBarLeft = Number.parseInt(getComputedStyle(this.scrollBar).left, 10)\r\n let left = isMouse ? pos - this.prev + currentBarLeft : currentBarLeft + pos\r\n this.showMask(left)\r\n left = this.getLimitedDistance(left)\r\n const scale = this.tableViewRect.width / this.tableRect.width\r\n const move = left / scale\r\n const columnCtrlPanelLeft = this.tableViewRect.left - this.containerRect.left - move\r\n css(this.scrollBar, { left: `${left}px` }) // 移动表格滚动条\r\n css(this.columnCtrlPanel, { left: `${columnCtrlPanelLeft}px` }) // 移动顶部列宽控制条\r\n this.table.parentNode.scrollLeft = move // 移动表格\r\n if (isMouse) {\r\n this.prev = pos\r\n }\r\n\r\n // fix: 拖动滚动条时修正选区位置\r\n const tableSelection = this.quill.getModule('better-table').tableSelection\r\n if (tableSelection && tableSelection.selectedTds.length) {\r\n tableSelection.refreshHelpLinesPosition()\r\n }\r\n }\r\n\r\n handleScrollBarMouseDown(mouseDownEvent) {\r\n mouseDownEvent.preventDefault()\r\n\r\n this.prev = mouseDownEvent.clientX\r\n this.subscriber = (mouseMoveEvent: any) => {\r\n mouseMoveEvent.preventDefault()\r\n mouseMoveEvent.stopPropagation()\r\n this.setScrollBarMove(mouseMoveEvent.clientX, true)\r\n }\r\n this.quill.root.parentNode.addEventListener('mousemove', this.subscriber, false)\r\n document.addEventListener('mouseup', this.handleScrollBarMouseup.bind(this), false)\r\n }\r\n\r\n handleScrollBarMouseup(event) {\r\n event.preventDefault()\r\n this.quill.root.parentNode.removeEventListener('mousemove', this.subscriber)\r\n document.removeEventListener('mouseup', this.handleScrollBarMouseup.bind(this), false)\r\n }\r\n\r\n handleWheel(event) {\r\n // 按住 Shift 滚动鼠标滚轮,可以对表格进行横向滚动\r\n if (event.shiftKey) {\r\n const { deltaY } = event // 每次滚动鼠标滚轮移动的距离\r\n this.setScrollBarMove(deltaY, false)\r\n }\r\n }\r\n\r\n showMask(distance) {\r\n // 根据当前滑块左边距判断是否显示左右遮罩层\r\n if (distance >= Math.floor(this.maxBarLeft)) {\r\n css(this.leftMask, { display: 'block' })\r\n }\r\n else if (distance <= 0) {\r\n css(this.leftMask, { display: 'none' })\r\n }\r\n else {\r\n css(this.leftMask, { display: 'block' })\r\n }\r\n }\r\n\r\n getLimitedDistance(distance) {\r\n if (distance >= Math.floor(this.maxBarLeft)) {\r\n distance = this.maxBarLeft\r\n }\r\n else if (distance <= 0) {\r\n distance = 0\r\n }\r\n return distance\r\n }\r\n\r\n updateScrollBar() {\r\n if (!this.table?.parentNode) {\r\n return\r\n }\r\n // 获取表格尺寸和表格容器尺寸\r\n const tableRect = this.table.getBoundingClientRect()\r\n const tableViewRect = this.table.parentNode.getBoundingClientRect()\r\n const tableMoveDistance = tableRect.width - tableViewRect.width // 表格最大移动距离\r\n this.tableRect = tableRect\r\n this.tableViewRect = tableViewRect\r\n this.tableMoveDistance = tableMoveDistance\r\n this.oldRootScrollTop = this.quill.root.scrollTop\r\n\r\n if (tableMoveDistance > 0) {\r\n this.createScrollBar()\r\n }\r\n else {\r\n this.destroyScrollBar()\r\n }\r\n }\r\n\r\n createScrollBar() {\r\n // 列控制条增加表格相应位移\r\n const parent = this.quill.root.parentNode\r\n const containerRect = parent.getBoundingClientRect() // 编辑器容器宽度\r\n this.containerRect = containerRect\r\n css(this.columnCtrlPanel, {\r\n left: `${this.tableViewRect.left - containerRect.left - this.table.parentNode.scrollLeft}px`,\r\n })\r\n\r\n // 创建滚动条\r\n if (this.domNode) {\r\n this.domNode.remove()\r\n }\r\n this.domNode = document.createElement('div')\r\n this.domNode.classList.add('qlbt-table-scroll-bar-panel')\r\n this.scrollBar = document.createElement('div')\r\n this.scrollBar.classList.add('qlbt-table-scroll-bar')\r\n this.scrollBar.addEventListener('mousedown', this.handleScrollBarMouseDown.bind(this), false)\r\n const scale = this.tableViewRect.width / this.tableRect.width\r\n const barWidth = this.tableViewRect.width - this.tableMoveDistance * scale // 滑块宽度\r\n css(this.scrollBar, { width: `${barWidth}px` })\r\n this.domNode.appendChild(this.scrollBar)\r\n\r\n // 判断当前表格是否存在位移,如存在通过比例计算滑块当前位移并赋值\r\n const tableScrollLeft = this.table.parentNode.scrollLeft\r\n this.maxBarLeft = this.tableMoveDistance * scale // 滑块最大移动距离\r\n if (tableScrollLeft) {\r\n const barLeft = tableScrollLeft * scale\r\n this.showMask(barLeft)\r\n css(this.scrollBar, { left: `${this.getLimitedDistance(barLeft)}px` })\r\n }\r\n\r\n // 将滚动条插入到 table control panel 中\r\n const barPos = this.tableRect.top + this.tableRect.height - containerRect.top - 1\r\n this.isTableOverflow = containerRect.top + containerRect.height < this.tableRect.top + this.tableRect.height\r\n this.modulesContainer.appendChild(this.domNode)\r\n css(this.domNode, { top: `${Math.min(containerRect.height - SCROLL_BAR_PANEL_HEIGHT, barPos)}px` })\r\n\r\n // 绑定鼠标滚轮事件:Shift+鼠标滚轮,滚动表格横向滚动条\r\n document.addEventListener('wheel', this.handleWheel.bind(this))\r\n }\r\n\r\n destroyScrollBar() {\r\n css(this.leftMask, { display: 'none' })\r\n this.columnCtrlPanel.removeAttribute('style')\r\n this.maxBarLeft = null\r\n this.destroy()\r\n }\r\n\r\n destroy() {\r\n if (this.domNode) {\r\n this.domNode.remove()\r\n }\r\n this.quill.root.removeEventListener('scroll', this.handleQuillRootScroll.bind(this))\r\n document.removeEventListener('wheel', this.handleWheel.bind(this))\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-selection.es.js","sources":["../../../../src/table/modules/table-selection.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { TableCell } from '../formats/table'\r\nimport { ERROR_LIMIT, LINE_POSITIONS, PRIMARY_COLOR } from '../table-config'\r\nimport { css, getRelativeRect } from '../utils'\r\n\r\nexport default class TableSelection {\r\n table: any\r\n quill: any\r\n modulesContainer: any\r\n parent: any\r\n boundary: any\r\n // @ts-ignore\r\n selectedTds: any[]\r\n // @ts-ignore\r\n dragging: boolean\r\n preSelectedTable: any\r\n oldRootScrollTop: any\r\n selectingHandler: any\r\n tdEditHandler: any\r\n tdResizeHandler: any\r\n endTd: any\r\n startTd: any\r\n editTd: any\r\n left: any\r\n bottom: any\r\n top: any\r\n right: any\r\n\r\n constructor(table, quill, dom) {\r\n if (!table) {\r\n return null\r\n }\r\n this.table = table\r\n this.quill = quill\r\n this.modulesContainer = dom\r\n this.parent = this.quill.root.parentNode\r\n this.boundary = {} // params for selected square\r\n this.selectedTds = [] // array for selected table-cells\r\n this.dragging = false\r\n this.preSelectedTable = null\r\n this.oldRootScrollTop = this.quill.root.scrollTop\r\n\r\n this.selectingHandler = this.mouseDownHandler.bind(this)\r\n\r\n this.tdEditHandler = this.setTdEditable.bind(this)\r\n this.tdResizeHandler = this.resizeTd.bind(this)\r\n\r\n this.helpLinesInitial()\r\n this.isEditorHasScrollBar()\r\n\r\n this.quill.root.parentNode.addEventListener('mousedown', this.selectingHandler, false)\r\n this.quill.on('text-change', this.tdResizeHandler)\r\n if (this.quill.root === this.quill.scrollingContainer) {\r\n this.quill.root.addEventListener('scroll', this.handleQuillRootScroll.bind(this))\r\n }\r\n }\r\n\r\n handleQuillRootScroll() {\r\n LINE_POSITIONS.forEach((direction) => {\r\n const selectionLine = this[direction]\r\n if (selectionLine) {\r\n selectionLine.style.marginTop = `${this.oldRootScrollTop - this.quill.root.scrollTop}px`\r\n }\r\n })\r\n }\r\n\r\n isEditorHasScrollBar() {\r\n if (this.quill.root.scrollHeight > this.quill.root.clientHeight) {\r\n css(this.modulesContainer, { width: 'calc(100% - 23px)' })\r\n }\r\n else {\r\n this.modulesContainer.removeAttribute('style')\r\n }\r\n }\r\n\r\n helpLinesInitial() {\r\n LINE_POSITIONS.forEach((direction) => {\r\n this[direction] = document.createElement('div')\r\n this[direction].classList.add('qlbt-selection-line')\r\n if (direction === 'left') {\r\n this[direction].classList.add('qlbt-selection-line-first')\r\n const ctrlPointLeft = document.createElement('div')\r\n this[direction].appendChild(ctrlPointLeft)\r\n }\r\n if (direction === 'bottom') {\r\n this[direction].classList.add('qlbt-selection-line-last')\r\n const ctrlPointRight = document.createElement('div')\r\n this[direction].appendChild(ctrlPointRight)\r\n }\r\n css(this[direction], {\r\n 'position': 'absolute',\r\n 'display': 'none',\r\n 'background-color': PRIMARY_COLOR,\r\n })\r\n this.modulesContainer.appendChild(this[direction])\r\n })\r\n }\r\n\r\n mouseDownHandler(e) {\r\n if (e.button !== 0) {\r\n return\r\n }\r\n const self: any = this\r\n const betterTableModule = this.quill.getModule('better-table')\r\n const tableColumnTool = betterTableModule.columnTool\r\n if (tableColumnTool.activeToolCell) {\r\n tableColumnTool.activeToolCell.classList.remove('qlbt-tool-cell-on')\r\n tableColumnTool.activeToolCell = null\r\n }\r\n if (e.target.closest('.quill-better-table')) {\r\n if (e.shiftKey) {\r\n this.endTd = e.target.closest('td[data-row]')\r\n this.drawSelection(this, true)\r\n // avoid select text in multiple table-cell\r\n if (this.startTd !== this.endTd) {\r\n this.quill.blur()\r\n }\r\n }\r\n else {\r\n this.startTd = e.target.closest('td[data-row]')\r\n this.drawSelection(this, false)\r\n this.dragging = true\r\n\r\n this.parent.addEventListener('mousemove', mouseMoveHandler, false)\r\n document.addEventListener('mouseup', mouseUpHandler, false)\r\n }\r\n }\r\n else if (e.target.closest('.qlbt-selection-line')) {\r\n this.parent.addEventListener('mousemove', mouseMoveHandler, false)\r\n document.addEventListener('mouseup', mouseUpHandler, false)\r\n }\r\n\r\n function mouseMoveHandler(event) {\r\n event.stopPropagation()\r\n\r\n if (event.button !== 0 || !event.target.closest('.quill-better-table')) {\r\n return\r\n }\r\n self.endTd = event.target.closest('td[data-row]')\r\n if (!self.endTd) {\r\n return\r\n }\r\n self.drawSelection(self, true)\r\n // avoid select text in multiple table-cell\r\n if (self.startTd !== self.endTd) {\r\n self.quill.blur()\r\n }\r\n }\r\n\r\n function mouseUpHandler() {\r\n self.parent.removeEventListener('mousemove', mouseMoveHandler, false)\r\n document.removeEventListener('mouseup', mouseUpHandler, false)\r\n self.dragging = false\r\n }\r\n }\r\n\r\n drawSelection(self, end) {\r\n // fix: 如果滚动条拖动,startTd的位置已经改变了,需要重置startTdRect\r\n self.startTdRect = getRelativeRect(self.startTd.getBoundingClientRect(), self.quill.root.parentNode)\r\n let endTdRect = self.startTdRect\r\n if (end) {\r\n self.endTdRect = getRelativeRect(self.endTd.getBoundingClientRect(), self.quill.root.parentNode)\r\n endTdRect = self.endTdRect\r\n }\r\n self.boundary = computeBoundaryFromRects(self.startTdRect, endTdRect)\r\n self.selectedTds = self.computeSelectedTds()\r\n self.repositionHelpLines()\r\n }\r\n\r\n setTdEditable(e) {\r\n if (!this.editTd) {\r\n return\r\n }\r\n this.parent.removeEventListener('keypress', this.tdEditHandler, false)\r\n const dom = this.editTd.domNode\r\n dom.removeEventListener('click', this.tdEditHandler, false)\r\n dom.classList.add('editing-select-able')\r\n dom.setAttribute('contenteditable', true)\r\n if (e.type === 'keypress') {\r\n if (dom.childNodes.length > 1 || dom.firstChild.innerHTML !== '<br>') {\r\n const blank = dom.firstChild.cloneNode()\r\n blank.innerHTML = '<br>'\r\n dom.innerHTML = ''\r\n dom.appendChild(blank)\r\n }\r\n dom.focus()\r\n }\r\n }\r\n\r\n resizeTd() {\r\n if (!this.editTd || (this.left && !this.left.offsetParent)) {\r\n return\r\n }\r\n if (this.selectedTds.length > 1) {\r\n this.refreshHelpLinesPosition()\r\n }\r\n else {\r\n const dom = this.editTd.domNode\r\n const domRect = getRelativeRect(dom.getBoundingClientRect(), this.quill.root.parentNode)\r\n this.boundary = computeBoundaryFromRects(domRect, domRect)\r\n this.repositionHelpLines()\r\n }\r\n\r\n // 判断编辑器是否有滚动条,调整遮罩宽度\r\n this.isEditorHasScrollBar()\r\n\r\n // 更新行高 更新滑块位置\r\n const betterTableModule = this.quill.getModule('better-table')\r\n const tableColumnTool = betterTableModule.columnTool\r\n if (tableColumnTool) {\r\n tableColumnTool.updateRowToolCells()\r\n const tableViewRect = this.table.parentNode.getBoundingClientRect()\r\n if (tableColumnTool.leftMask) {\r\n css(tableColumnTool.leftMask, { height: `${tableViewRect.height + 50}px` })\r\n }\r\n }\r\n\r\n const tableScrollBar = betterTableModule.tableScrollBar\r\n tableScrollBar.resetTableHeight(this.table)\r\n }\r\n\r\n resetTd(e) {\r\n const dom = e.target\r\n dom.classList.remove('editing-select-able')\r\n dom.setAttribute('contenteditable', false)\r\n dom.removeAttribute('contenteditable')\r\n }\r\n\r\n correctBoundary() {\r\n const tableContainer = Quill.find(this.table)\r\n const tableCells = tableContainer.descendants(TableCell)\r\n\r\n tableCells.forEach((tableCell) => {\r\n const { x, y, width, height } = getRelativeRect(tableCell.domNode.getBoundingClientRect(), this.quill.root.parentNode)\r\n const isCellIntersected\r\n = ((x + ERROR_LIMIT >= this.boundary.x && x + ERROR_LIMIT <= this.boundary.x1)\r\n || (x - ERROR_LIMIT + width >= this.boundary.x && x - ERROR_LIMIT + width <= this.boundary.x1))\r\n && ((y + ERROR_LIMIT >= this.boundary.y && y + ERROR_LIMIT <= this.boundary.y1)\r\n || (y - ERROR_LIMIT + height >= this.boundary.y && y - ERROR_LIMIT + height <= this.boundary.y1))\r\n if (isCellIntersected) {\r\n this.boundary = computeBoundaryFromRects(this.boundary, { x, y, width, height })\r\n }\r\n })\r\n }\r\n\r\n computeSelectedTds() {\r\n const tableContainer = Quill.find(this.table)\r\n const tableCells = tableContainer.descendants(TableCell)\r\n\r\n const result = tableCells.reduce((selectedCells, tableCell) => {\r\n const { x, y, width, height } = getRelativeRect(tableCell.domNode.getBoundingClientRect(), this.quill.root.parentNode)\r\n const isCellIncluded\r\n = x + ERROR_LIMIT >= this.boundary.x\r\n && x - ERROR_LIMIT + width <= this.boundary.x1\r\n && y + ERROR_LIMIT >= this.boundary.y\r\n && y - ERROR_LIMIT + height <= this.boundary.y1\r\n\r\n if (isCellIncluded) {\r\n selectedCells.push(tableCell)\r\n }\r\n\r\n return selectedCells\r\n }, [])\r\n\r\n if (result.length === 1 && this.editTd !== result[0]) {\r\n const resetTds = this.table.querySelectorAll('td[contenteditable=true]')\r\n resetTds.forEach(td => this.resetTd({ target: td }))\r\n this.editTd = result[0]\r\n this.editTd.domNode.addEventListener('mousedown', this.tdEditHandler, false)\r\n this.parent.addEventListener('keypress', this.tdEditHandler, false)\r\n }\r\n\r\n return result\r\n }\r\n\r\n repositionHelpLines() {\r\n this.oldRootScrollTop = this.quill.root.scrollTop\r\n if (!this.left) {\r\n return\r\n }\r\n\r\n css(this.left, {\r\n 'display': 'block',\r\n 'left': `${this.boundary.x - 1}px`,\r\n 'top': `${this.boundary.y}px`,\r\n 'height': `${this.boundary.height + 1}px`,\r\n 'width': '1px',\r\n 'margin-top': '0px',\r\n })\r\n\r\n css(this.right, {\r\n 'display': 'block',\r\n 'left': `${this.boundary.x1}px`,\r\n 'top': `${this.boundary.y - 1}px`,\r\n 'height': `${this.boundary.height + 1}px`,\r\n 'width': '1px',\r\n 'margin-top': '0px',\r\n })\r\n\r\n css(this.top, {\r\n 'display': 'block',\r\n 'left': `${this.boundary.x - 1}px`,\r\n 'top': `${this.boundary.y - 1}px`,\r\n 'width': `${this.boundary.width + 1}px`,\r\n 'height': '1px',\r\n 'margin-top': '0px',\r\n })\r\n\r\n css(this.bottom, {\r\n 'display': 'block',\r\n 'left': `${this.boundary.x - 1}px`,\r\n 'top': `${this.boundary.y1}px`,\r\n 'width': `${this.boundary.width + 1}px`,\r\n 'height': '1px',\r\n 'margin-top': '0px',\r\n })\r\n }\r\n\r\n // based on selectedTds compute positions of help lines\r\n // It is useful when selectedTds are not changed\r\n refreshHelpLinesPosition() {\r\n const startRect = getRelativeRect(this.selectedTds[0].domNode.getBoundingClientRect(), this.quill.root.parentNode)\r\n const endRect = getRelativeRect(\r\n this.selectedTds[this.selectedTds.length - 1].domNode.getBoundingClientRect(),\r\n this.quill.root.parentNode,\r\n )\r\n this.boundary = computeBoundaryFromRects(startRect, endRect)\r\n this.repositionHelpLines()\r\n }\r\n\r\n destroy() {\r\n const resetTds = this.table.querySelectorAll('td[contenteditable=true]')\r\n resetTds.forEach(td => this.resetTd({ target: td }))\r\n\r\n LINE_POSITIONS.forEach((direction) => {\r\n if (this[direction]) {\r\n this[direction].remove()\r\n this[direction] = null\r\n }\r\n })\r\n\r\n this.quill.root.parentNode.removeEventListener('mousedown', this.selectingHandler, false)\r\n\r\n delete this.editTd\r\n\r\n return null\r\n }\r\n\r\n setSelection(startRect, endRect) {\r\n this.boundary = computeBoundaryFromRects(\r\n getRelativeRect(startRect, this.quill.root.parentNode),\r\n getRelativeRect(endRect, this.quill.root.parentNode),\r\n )\r\n this.correctBoundary()\r\n this.selectedTds = this.computeSelectedTds()\r\n this.repositionHelpLines()\r\n }\r\n\r\n clearSelection() {\r\n const resetTds = this.table.querySelectorAll('td[contenteditable=true]')\r\n resetTds.forEach(td => this.resetTd({ target: td }))\r\n this.boundary = {}\r\n this.selectedTds = []\r\n LINE_POSITIONS.forEach((direction) => {\r\n if (this[direction]) {\r\n css(this[direction], {\r\n display: 'none',\r\n })\r\n }\r\n })\r\n }\r\n}\r\n\r\nfunction computeBoundaryFromRects(startRect, endRect) {\r\n const x = Math.min(startRect.x, endRect.x, startRect.x + startRect.width - 1, endRect.x + endRect.width - 1)\r\n\r\n const x1 = Math.max(startRect.x, endRect.x, startRect.x + startRect.width - 1, endRect.x + endRect.width - 1)\r\n\r\n const y = Math.min(startRect.y, endRect.y, startRect.y + startRect.height - 1, endRect.y + endRect.height - 1)\r\n\r\n const y1 = Math.max(startRect.y, endRect.y, startRect.y + startRect.height - 1, endRect.y + endRect.height - 1)\r\n\r\n const width = x1 - x\r\n const height = y1 - y\r\n\r\n return { x, x1, y, y1, width, height }\r\n}\r\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-config.es.js","sources":["../../../src/table/table-config.ts"],"sourcesContent":["export const TABLE_CELL_LINE_CLASS = 'qlrte__better-table-cell-line'\r\nexport const ROW_TOOL_CLASS = 'qlrte__row-tool'\r\nexport const ROW_TOOL_CELL_CLASS = 'qlrte__row-tool-cell'\r\nexport const ROW_TOOL_CELL_HOLDER_CLASS = 'qlrte__row-tool-cell-holder'\r\nexport const COL_TOOL_CLASS = 'qlrte__col-tool'\r\nexport const COL_TOOL_CELL_CLASS = 'qlrte__col-tool-cell'\r\nexport const COL_TOOL_CELL_HOLDER_CLASS = 'qlrte__col-tool-cell-holder'\r\nexport const SELECT_LINE_CLASS = 'qlrte__selection-line'\r\nexport const OPERATE_MENU_CLASS = 'qlrte__op-menu'\r\nexport const OPERATE_MENU_ITEM_CLASS = 'qlrte__op-menu-item'\r\nexport const OPERATE_MENU_ICON_CLASS = 'qlrte__op-menu-icon'\r\nexport const OPERATE_MENU_ICON_PREFIX_CLASS = 'qlrte__op-menu-icon-prefix'\r\nexport const OPERATE_MENU_TEXT_CLASS = 'qlrte__op-menu-text'\r\nexport const OPERATE_MENU_DIVIDING_CLASS = 'qlrte__op-menu-dividing'\r\nexport const OPERATE_MENU_SUBTITLE_CLASS = 'qlrte__op-menu-subtitle'\r\nexport const OPERATE_MENU_COLORPICKER_CLASS = 'qlrte__op-menu-color-picker'\r\nexport const OPERATE_MENU_COLORPICKER_ITEM_CLASS\r\n = 'qlrte__op-menu-color-picker-item'\r\nexport const COL_ATTRIBUTES = ['width']\r\nexport const COL_DEFAULT = {\r\n width: 100,\r\n}\r\nexport const CELL_IDENTITY_KEYS = ['row', 'cell']\r\nexport const CELL_ATTRIBUTES = ['rowspan', 'colspan', 'cell-bg', 'list']\r\nexport const CELL_DEFAULT = {\r\n rowspan: 1,\r\n colspan: 1,\r\n}\r\nexport const ERROR_LIMIT = 5\r\n\r\nexport const SCROLL_BAR_PANEL_HEIGHT = 32\r\nexport const ROW_TOOL_WIDTH = 16\r\nexport const COL_TOOL_HEIGHT = 16\r\nexport const CELL_MIN_WIDTH = 50\r\nexport const CELL_MIN_HEIGHT = 29\r\nexport const PRIMARY_COLOR = ['#5170ff', 'var(--brand-1, #5170ff)']\r\n\r\nexport const MENU_ITEM_HEIGHT = 40\r\nexport const MENU_MIN_HEIGHT = 150\r\nexport const MENU_WIDTH = 205\r\n\r\nexport const LINE_POSITIONS = ['left', 'right', 'top', 'bottom']\r\n"],"names":[],"mappings":"AAAO,MAAM,wBAAwB;AAC9B,MAAM,iBAAiB;AACvB,MAAM,sBAAsB;AAC5B,MAAM,6BAA6B;AACnC,MAAM,iBAAiB;AACvB,MAAM,sBAAsB;AAC5B,MAAM,6BAA6B;AACnC,MAAM,oBAAoB;AAC1B,MAAM,qBAAqB;AAC3B,MAAM,0BAA0B;AAChC,MAAM,0BAA0B;AAChC,MAAM,iCAAiC;AACvC,MAAM,0BAA0B;AAChC,MAAM,8BAA8B;AACpC,MAAM,8BAA8B;AACpC,MAAM,iCAAiC;AACvC,MAAM,sCACT;AACS,MAAA,iBAAiB,CAAC,OAAO;AAC/B,MAAM,cAAc;AAAA,EACzB,OAAO;AACT;AACa,MAAA,qBAAqB,CAAC,OAAO,MAAM;AACzC,MAAM,kBAAkB,CAAC,WAAW,WAAW,WAAW,MAAM;AAChE,MAAM,eAAe;AAAA,EAC1B,SAAS;AAAA,EACT,SAAS;AACX;AACO,MAAM,cAAc;AAEpB,MAAM,0BAA0B;AAChC,MAAM,iBAAiB;AACvB,MAAM,kBAAkB;AACxB,MAAM,iBAAiB;AACvB,MAAM,kBAAkB;AAClB,MAAA,gBAAgB,CAAC,WAAW,yBAAyB;AAE3D,MAAM,mBAAmB;AACzB,MAAM,kBAAkB;AACxB,MAAM,aAAa;AAEnB,MAAM,iBAAiB,CAAC,QAAQ,SAAS,OAAO,QAAQ;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../../../../src/table/utils/index.ts"],"sourcesContent":["export function 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/**\r\n * getRelativeRect\r\n * @param targetRect rect data for target element {Object}\r\n * @param container container element {Element}\r\n * @return an object with rect data {Object}\r\n */\r\nexport function getRelativeRect(targetRect, container) {\r\n const containerRect = container.getBoundingClientRect()\r\n\r\n return { // ie浏览器中getBoundingClientRect输出为left、right、top、bottom,与chrome的x、y不同\r\n x: (targetRect.x || targetRect.left) - (containerRect.x || containerRect.left) - container.scrollLeft,\r\n y: (targetRect.y || targetRect.top) - (containerRect.y || containerRect.top) - container.scrollTop,\r\n x1: (targetRect.x || targetRect.left) - (containerRect.x || containerRect.left) - container.scrollLeft + targetRect.width,\r\n y1: (targetRect.y || targetRect.top) - (containerRect.y || containerRect.top) - container.scrollTop + targetRect.height,\r\n width: targetRect.width,\r\n height: targetRect.height,\r\n }\r\n}\r\n\r\nexport const elementRemove = function (node) {\r\n node && node.parentNode && node.parentNode.removeChild(node)\r\n}\r\n\r\nexport const arrayFrom = function (arrayLike, mapFn?, thisArg?) {\r\n if (!arrayLike) {\r\n throw new TypeError(\r\n 'Array.from requires an array-like object - not null or undefined',\r\n )\r\n }\r\n\r\n const length = arrayLike.length\r\n const resArray = []\r\n\r\n for (let i = 0; i < length; i++) {\r\n if (typeof mapFn === 'function') {\r\n resArray.push(mapFn.call(thisArg, arrayLike[i]))\r\n }\r\n else {\r\n resArray.push(arrayLike[i])\r\n }\r\n }\r\n\r\n return resArray\r\n}\r\n"],"names":[],"mappings":"AAAgB,SAAA,IAAI,SAAS,OAAO;AAC9B,MAAA,OAAO,UAAU,UAAU;AAC7B,eAAW,QAAQ,OAAO;AACxB,UAAI,MAAM;AACR,YAAI,MAAM,QAAQ,MAAM,IAAI,CAAC,GAAG;AAE9B,gBAAM,IAAI,EAAE,QAAQ,CAAC,QAAQ;AACnB,oBAAA,MAAM,IAAI,IAAI;AAAA,UAAA,CACvB;AAAA,QAAA,OAEE;AACH,kBAAQ,MAAM,IAAI,IAAI,MAAM,IAAI;AAAA,QAClC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAQgB,SAAA,gBAAgB,YAAY,WAAW;AAC/C,QAAA,gBAAgB,UAAU;AAEzB,SAAA;AAAA;AAAA,IACL,IAAI,WAAW,KAAK,WAAW,SAAS,cAAc,KAAK,cAAc,QAAQ,UAAU;AAAA,IAC3F,IAAI,WAAW,KAAK,WAAW,QAAQ,cAAc,KAAK,cAAc,OAAO,UAAU;AAAA,IACzF,KAAK,WAAW,KAAK,WAAW,SAAS,cAAc,KAAK,cAAc,QAAQ,UAAU,aAAa,WAAW;AAAA,IACpH,KAAK,WAAW,KAAK,WAAW,QAAQ,cAAc,KAAK,cAAc,OAAO,UAAU,YAAY,WAAW;AAAA,IACjH,OAAO,WAAW;AAAA,IAClB,QAAQ,WAAW;AAAA,EAAA;AAEvB;AAEa,MAAA,gBAAgB,SAAU,MAAM;AAC3C,UAAQ,KAAK,cAAc,KAAK,WAAW,YAAY,IAAI;AAC7D;AAEO,MAAM,YAAY,SAAU,WAAW,OAAQ,SAAU;AAC9D,MAAI,CAAC,WAAW;AACd,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAAA,EAEJ;AAEA,QAAM,SAAS,UAAU;AACzB,QAAM,WAAW,CAAA;AAEjB,WAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC3B,QAAA,OAAO,UAAU,YAAY;AAC/B,eAAS,KAAK,MAAM,KAAK,SAAS,UAAU,CAAC,CAAC,CAAC;AAAA,IAAA,OAE5C;AACM,eAAA,KAAK,UAAU,CAAC,CAAC;AAAA,IAC5B;AAAA,EACF;AAEO,SAAA;AACT;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-matchers.es.js","sources":["../../../../src/table/utils/node-matchers.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { omit, splitWithBreak } from '../../config/editor.utils'\r\nimport { cellId as tableCellId, rowId as tableRowId, TableViewWrapper } from '../formats/table'\r\nimport { CELL_MIN_WIDTH } from '../table-config'\r\n\r\nconst Delta = Quill.imports.delta\r\nconst InlineBlot = Quill.imports.parchment.InlineBlot\r\n\r\n// rebuild delta\r\nexport function matchTableCell(node, delta) {\r\n // fix: 移除旧数据中的pt高度,避免由于高度平均分导致无法插入行\r\n if (node.style.height.indexOf('pt')) {\r\n node.removeAttribute('style')\r\n }\r\n\r\n const row = node.parentNode\r\n let rowId = row.dataset.row\r\n if (!rowId) {\r\n rowId = row.dataset.row = tableRowId()\r\n }\r\n let cellId = node.dataset.cell\r\n // fix: dataset.cell in td will be 'undefined' when insert row/column\r\n if (!cellId || cellId === 'undefined') {\r\n cellId = tableCellId()\r\n }\r\n const colspan = node.getAttribute('colspan') || 1\r\n const rowspan = node.getAttribute('rowspan') || 1\r\n\r\n // fix: empty table cells copied from other place will be removed unexpectedly\r\n if (delta.length() === 0) {\r\n delta = new Delta().insert('\\n', {\r\n 'table-cell-line': { row: rowId, cell: cellId, rowspan, colspan },\r\n })\r\n return delta\r\n }\r\n\r\n delta = delta.reduce((newDelta, op) => {\r\n if (op.insert && typeof op.insert === 'string') {\r\n const lines = splitWithBreak(op.insert)\r\n\r\n lines.forEach((text) => {\r\n if (text === '\\n') {\r\n let attributes = {}\r\n const cellAttributes = {\r\n row: rowId,\r\n cell: cellId,\r\n rowspan,\r\n colspan,\r\n }\r\n if (op.attributes.table) {\r\n delete op.attributes.table\r\n }\r\n switch (true) {\r\n case !!op.attributes.header:\r\n attributes = Object.assign(op.attributes.header, cellAttributes)\r\n break\r\n case !!op.attributes.list:\r\n attributes = { list: Object.assign(op.attributes.list, cellAttributes) }\r\n break\r\n default:\r\n attributes = { 'table-cell-line': cellAttributes }\r\n }\r\n // fix: when td has background-color, quill can't set it to table-cell bolt\r\n if (op.attributes.background && attributes['table-cell-line']) {\r\n attributes['table-cell-line'].tdBgColor = op.attributes.background\r\n }\r\n newDelta.insert('\\n', Object.assign(op.attributes, attributes))\r\n }\r\n else {\r\n newDelta.insert(text, omit(op.attributes, ['table', 'table-cell-line', 'header', 'list']))\r\n }\r\n })\r\n }\r\n else {\r\n newDelta.insert(op.insert, op.attributes)\r\n }\r\n\r\n return newDelta\r\n }, new Delta())\r\n\r\n // fix: table cell height becomes larger(because insert unnecessary <div> on both sides of cell) when init table ngModel\r\n const regexp = /^[\\n]+$/\r\n const firstDelta = delta.ops[0]\r\n if (delta.ops.length >= 3) {\r\n const lastDelta = delta.ops[delta.ops.length - 1]\r\n if (regexp.test(firstDelta.insert) && firstDelta.attributes['table-cell-line']) {\r\n delta.ops.splice(0, 1)\r\n }\r\n if (regexp.test(lastDelta.insert) && lastDelta.attributes['table-cell-line']) {\r\n delta.ops[delta.ops.length - 1].insert = '\\n'\r\n }\r\n }\r\n else if (delta.ops.length === 1 && regexp.test(firstDelta.insert) && firstDelta.attributes['table-cell-line']) {\r\n delta.ops[0].insert = '\\n'\r\n }\r\n\r\n return delta\r\n}\r\n\r\n// replace th tag with td tag\r\nexport function matchTableHeader(node, delta, _scroll) {\r\n const row = node.parentNode\r\n const cells = Array.from(row.querySelectorAll('th'))\r\n let rowId = row.dataset.row\r\n if (!rowId) {\r\n rowId = row.dataset.row = tableRowId()\r\n }\r\n const cellId = cells.indexOf(node) + 1\r\n const colspan = node.getAttribute('colspan') || false\r\n const rowspan = node.getAttribute('rowspan') || false\r\n\r\n // fix: empty table cells copied from other place will be removed unexpectedly\r\n if (delta.length() === 0) {\r\n delta = new Delta().insert('\\n', {\r\n 'table-cell-line': { row: rowId, cell: cellId, rowspan, colspan },\r\n })\r\n return delta\r\n }\r\n\r\n delta = delta.reduce((newDelta, op) => {\r\n if (op.insert && typeof op.insert === 'string') {\r\n const lines = splitWithBreak(op.insert)\r\n\r\n // fix: no '\\n' in the end of op.insert, push a '\\n' to lines\r\n if (lines[lines.length - 1] !== '\\n') {\r\n lines.push('\\n')\r\n }\r\n\r\n lines.forEach((text) => {\r\n text === '\\n'\r\n ? newDelta.insert('\\n', { 'table-cell-line': { row: rowId, cell: cellId, rowspan, colspan } })\r\n : newDelta.insert(text, op.attributes)\r\n })\r\n }\r\n else {\r\n newDelta.insert(op.insert, op.attributes)\r\n }\r\n\r\n return newDelta\r\n }, new Delta())\r\n\r\n delta = delta.reduce((newDelta, op) => {\r\n if (op.insert && typeof op.insert === 'string' && op.insert.startsWith('\\n')) {\r\n newDelta.insert(op.insert, { 'table-cell-line': { row: rowId, cell: cellId, rowspan, colspan } })\r\n }\r\n else {\r\n newDelta.insert(op.insert, { ...omit(op.attributes, ['table', 'table-cell-line']) })\r\n }\r\n\r\n return newDelta\r\n }, new Delta())\r\n\r\n return delta\r\n}\r\n\r\n// supplement colgroup and col\r\nexport function matchTable(node, delta, scroll) {\r\n const isWordTable = node.children.length === 1\r\n if (!(node instanceof Element)) {\r\n return\r\n }\r\n const getMaxColNumber = (tds) => {\r\n if (isWordTable) {\r\n return tds.length\r\n }\r\n let colsNumber = 0\r\n tds.forEach((td) => {\r\n colsNumber += td.colSpan\r\n })\r\n return Math.max(tds.length, colsNumber)\r\n }\r\n\r\n const checkMinWidth = (width) => {\r\n if (Number.isNaN(width)) {\r\n // 无指定值时默认为auto,待渲染后修正\r\n return { 'table-col': { width: 'auto' } }\r\n }\r\n else if (width < CELL_MIN_WIDTH) {\r\n // 当列宽度小于默认宽度时取默认宽度\r\n return { 'table-col': true }\r\n }\r\n else {\r\n // 大于默认值取实际指定值\r\n return { 'table-col': { width } }\r\n }\r\n }\r\n\r\n // fix: a table with an empty tr is invalid, should not be displayed\r\n const rows = node.querySelectorAll('tr')\r\n const topRow = rows[0]\r\n const onlyEmptyTr = rows.length === 1 && !topRow.querySelector('td')\r\n\r\n // fix: empty table will return empty delta\r\n if (!topRow || onlyEmptyTr) {\r\n return new Delta().insert('\\n')\r\n }\r\n\r\n const colsNumber = node.querySelectorAll('col').length\r\n let maxCellsNumber = 0\r\n let maxCells\r\n // 遍历行获取最大列数和该行的所有单元格\r\n Array.prototype.slice.call(rows).forEach((row) => {\r\n const tds = row.querySelectorAll('td')\r\n maxCellsNumber = Math.max(getMaxColNumber(tds), maxCellsNumber)\r\n maxCells = tds\r\n })\r\n\r\n // 列的累计器\r\n let colCount = 0\r\n delta = delta.reduce((newDelta, op) => {\r\n // 当colCount与colsNumber相等时,则补充相差列\r\n if (colCount === colsNumber) {\r\n const fillNumber = maxCellsNumber - colCount\r\n const outset = colCount\r\n // index为差值列索引,通过遍历差值得到mexCells行中对应索引的单元格宽度\r\n for (let i = 0; i < fillNumber; i++) {\r\n const index = outset + i\r\n const colWidth = Number.parseInt(\r\n index < maxCells.length\r\n ? maxCells[index].width\r\n // maxCells[index].style && maxCells[index].style.width ? maxCells[index].style.width :\r\n : maxCells[maxCells.length - 1].width,\r\n 10,\r\n )\r\n newDelta.insert('\\n', checkMinWidth(colWidth))\r\n colCount++\r\n }\r\n }\r\n const attr = op.attributes || {}\r\n switch (true) {\r\n case !!attr['table-col']:\r\n // 只有当前列数小于实际总列数才操作,所以不存在大于的情况\r\n if (colCount < maxCellsNumber) {\r\n // 当table-col宽度一致时会合并为单一insert,insert长度大于1,截取符合实际总列数的长度来插入\r\n const insert = op.insert.slice(0, maxCellsNumber)\r\n const colWidth = Number.parseInt(attr['table-col'].width, 10)\r\n newDelta.insert(insert, checkMinWidth(colWidth))\r\n colCount += insert.length\r\n }\r\n break\r\n case !!attr.notFilled:\r\n { // 将标记的空tr填充对应列数的单元格\r\n const rowId = tableRowId()\r\n for (let x = 0; x < maxCellsNumber; x++) {\r\n newDelta.insert('\\n', { 'table-cell-line': { row: rowId, cell: tableCellId(), rowspan: 1, colspan: 1 } })\r\n }\r\n break }\r\n default:\r\n newDelta.insert(op.insert, op.attributes)\r\n }\r\n return newDelta\r\n }, new Delta())\r\n\r\n const tableItem = node.closest('.quill-better-table-wrapper') || node\r\n const prevBlot = tableItem.previousElementSibling && scroll.query(tableItem.previousElementSibling)\r\n const nextBlot = tableItem.nextElementSibling && scroll.query(tableItem.nextElementSibling)\r\n // fix: prevent two adjacent tables from sticking together\r\n if (!nextBlot || nextBlot.prototype instanceof InlineBlot) {\r\n delta = delta.insert('\\n')\r\n }\r\n // fix: When there is no line break in front of the table, pressing the Enter key will cause a problem with the table.\r\n if (!prevBlot || prevBlot.prototype instanceof InlineBlot) {\r\n const newLine = new Delta().insert('\\n')\r\n delta = newLine.concat(delta)\r\n }\r\n if (nextBlot === TableViewWrapper) {\r\n delta = delta.insert('\\n')\r\n }\r\n\r\n return delta\r\n}\r\n\r\nexport function matchTableRow(_node, delta) {\r\n // fix: 处理空<tr>标签被忽略的情况\r\n if (delta.ops.length === 1 && !delta.ops[0].attributes) {\r\n delta = new Delta().insert('\\n', { notFilled: true })\r\n }\r\n return delta\r\n}\r\n\r\n// match h tags, distinguish between headers in the table and headers outside the table\r\nexport function matchHeader(node, delta) {\r\n const newDelta = new Delta()\r\n const fontSize = node.style.fontSize\r\n delta.forEach((op) => {\r\n newDelta.insert(\r\n op.insert,\r\n Object.assign(op.attributes, {\r\n size: fontSize,\r\n }),\r\n )\r\n })\r\n return newDelta\r\n}\r\n\r\nexport function matchList(node, delta) {\r\n const value = node.tagName === 'UL' ? 'bullet' : 'ordered'\r\n delta.forEach((op) => {\r\n if (typeof op.attributes.list === 'string') {\r\n delete op.attributes.list\r\n }\r\n else if (typeof op.attributes.list === 'object' && !op.attributes.list.value) {\r\n op.attributes.list.value = value\r\n }\r\n })\r\n return delta\r\n}\r\n\r\nexport function matchInline(node, delta, scroll) {\r\n const quill = Quill.find(scroll.domNode.parentNode)\r\n const currentRange = quill.getSelection()\r\n const formats = currentRange && quill.getFormat(currentRange)\r\n if (\r\n formats\r\n && formats['table-cell-line'] // 当前光标节点在表格内,否则不操作delta\r\n && node.nextElementSibling\r\n ) {\r\n // 插入节点是否存在下一个兄弟元素\r\n const match = scroll.query(node)\r\n const nodeHtml = node.nextElementSibling.innerHTML\r\n const nodeText = node.nextElementSibling.textContent\r\n if (\r\n (match && match.prototype instanceof InlineBlot) // 判断当前节点是否为内联\r\n || (node.tagName === 'P' && nodeHtml !== nodeText)\r\n ) {\r\n // 非内联时如果为P且下一个不为text节点\r\n delta.forEach((op) => {\r\n op.insert += '\\n'\r\n })\r\n }\r\n }\r\n return delta\r\n}\r\n\r\n// 匹配 word 自带的 v:shape 标签中的图片 v:imageData\r\nexport function matchWordShapeImage(node, delta) {\r\n if (node) {\r\n const imageUrl = node.attributes.src?.nodeValue\r\n delta = new Delta().insert({ image: imageUrl })\r\n }\r\n return delta\r\n}\r\n\r\nexport function matchMentionLink(node, delta, scroll) {\r\n const name = node.dataset.mentionId\r\n if (name) {\r\n const quill = Quill.find(scroll.domNode.parentNode)\r\n const mention = quill.getModule('mention')\r\n if (mention) {\r\n mention.options.search(name).then((res) => {\r\n const [item] = res\r\n if (item) {\r\n mention.options.select(item)\r\n }\r\n })\r\n }\r\n }\r\n return delta\r\n}\r\n"],"names":["rowId","tableRowId","cellId","tableCellId","colsNumber"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"better-picker.es.js","sources":["../../../src/toolbar/better-picker.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { isNullOrUndefined } from '../config/editor.utils'\r\n\r\nconst SnowTheme = Quill.imports['themes/snow']\r\n\r\nlet optionsCounter = 0\r\n\r\nfunction toggleAriaAttribute(element, attribute) {\r\n element.setAttribute(\r\n attribute,\r\n element.getAttribute(attribute) !== 'true',\r\n )\r\n}\r\n\r\nclass Picker {\r\n container: any\r\n label: any\r\n options: any\r\n select: any\r\n constructor(select) {\r\n this.select = select\r\n this.container = document.createElement('span')\r\n this.buildPicker()\r\n this.select.style.display = 'none'\r\n this.select.parentNode.insertBefore(this.container, this.select)\r\n\r\n this.label.addEventListener('mousedown', (e) => {\r\n this.togglePicker()\r\n e.preventDefault()\r\n })\r\n this.label.addEventListener('keydown', (event) => {\r\n switch (event.key) {\r\n case 'Enter':\r\n this.togglePicker()\r\n break\r\n case 'Escape':\r\n this.escape()\r\n event.preventDefault()\r\n break\r\n default:\r\n }\r\n })\r\n this.select.addEventListener('change', this.update.bind(this))\r\n }\r\n\r\n togglePicker() {\r\n this.container.classList.toggle('ql-expanded')\r\n // Toggle aria-expanded and aria-hidden to make the picker accessible\r\n toggleAriaAttribute(this.label, 'aria-expanded')\r\n toggleAriaAttribute(this.options, 'aria-hidden')\r\n }\r\n\r\n buildItem(option) {\r\n const item = document.createElement('span')\r\n item.tabIndex = 0\r\n item.setAttribute('role', 'button')\r\n item.classList.add('ql-picker-item')\r\n if (option.hasAttribute('value')) {\r\n item.setAttribute('data-value', option.getAttribute('value'))\r\n }\r\n if (option.textContent) {\r\n item.setAttribute('data-label', option.textContent)\r\n }\r\n item.addEventListener('click', () => {\r\n this.selectItem(item, true)\r\n })\r\n item.addEventListener('keydown', (event) => {\r\n switch (event.key) {\r\n case 'Enter':\r\n this.selectItem(item, true)\r\n event.preventDefault()\r\n break\r\n case 'Escape':\r\n this.escape()\r\n event.preventDefault()\r\n break\r\n default:\r\n }\r\n })\r\n\r\n return item\r\n }\r\n\r\n buildLabel() {\r\n const label = document.createElement('span')\r\n label.classList.add('ql-picker-label')\r\n label.innerHTML = `\r\n <svg viewbox=\"0 0 18 18\">\r\n <polygon class=\"ql-stroke\" points=\"7 11 9 13 11 11 7 11\"></polygon>\r\n <polygon class=\"ql-stroke\" points=\"7 7 9 5 11 7 7 7\"></polygon>\r\n </svg>\r\n `\r\n label.tabIndex = 0\r\n label.setAttribute('role', 'button')\r\n label.setAttribute('aria-expanded', 'false')\r\n this.container.appendChild(label)\r\n return label\r\n }\r\n\r\n buildOptions() {\r\n const options = document.createElement('span')\r\n options.classList.add('ql-picker-options')\r\n\r\n // Don't want screen readers to read this until options are visible\r\n options.setAttribute('aria-hidden', 'true')\r\n options.tabIndex = -1\r\n\r\n // Need a unique id for aria-controls\r\n options.id = `ql-picker-options-${optionsCounter}`\r\n optionsCounter += 1\r\n this.label.setAttribute('aria-controls', options.id)\r\n\r\n this.options = options\r\n\r\n Array.from(this.select.options).forEach((option: any) => {\r\n const item = this.buildItem(option)\r\n options.appendChild(item)\r\n if (option.selected === true) {\r\n this.selectItem(item)\r\n }\r\n })\r\n this.container.appendChild(options)\r\n }\r\n\r\n buildPicker() {\r\n Array.from(this.select.attributes).forEach((item: any) => {\r\n this.container.setAttribute(item.name, item.value)\r\n })\r\n this.container.classList.add('ql-picker')\r\n this.label = this.buildLabel()\r\n this.buildOptions()\r\n }\r\n\r\n escape() {\r\n // Close menu and return focus to trigger label\r\n this.close()\r\n // Need setTimeout for accessibility to ensure that the browser executes\r\n // focus on the next process thread and after any DOM content changes\r\n setTimeout(() => this.label.focus(), 1)\r\n }\r\n\r\n close() {\r\n this.container.classList.remove('ql-expanded')\r\n this.label.setAttribute('aria-expanded', 'false')\r\n this.options.setAttribute('aria-hidden', 'true')\r\n }\r\n\r\n selectItem(item, trigger = false) {\r\n const selected = this.container.querySelector('.ql-selected')\r\n if (item === selected) return\r\n if (!isNullOrUndefined(selected)) {\r\n selected.classList.remove('ql-selected')\r\n }\r\n if (isNullOrUndefined(item)) return\r\n item.classList.add('ql-selected')\r\n this.select.selectedIndex = Array.from(item.parentNode.children).indexOf(\r\n item,\r\n )\r\n if (item.hasAttribute('data-value')) {\r\n this.label.setAttribute('data-value', item.getAttribute('data-value'))\r\n }\r\n else {\r\n this.label.removeAttribute('data-value')\r\n }\r\n if (item.hasAttribute('data-label')) {\r\n this.label.setAttribute('data-label', item.getAttribute('data-label'))\r\n }\r\n else {\r\n this.label.removeAttribute('data-label')\r\n }\r\n if (trigger) {\r\n let ev\r\n if (typeof Event === 'function') {\r\n ev = new Event('change')\r\n }\r\n else {\r\n ev = document.createEvent('Event')\r\n ev.initEvent('change', true, true)\r\n }\r\n this.select.dispatchEvent(ev)\r\n this.close()\r\n }\r\n }\r\n\r\n update() {\r\n let option\r\n if (this.select.selectedIndex > -1) {\r\n const item = this.container.querySelector('.ql-picker-options').children[\r\n this.select.selectedIndex\r\n ]\r\n option = this.select.options[this.select.selectedIndex]\r\n this.selectItem(item)\r\n }\r\n else {\r\n this.selectItem(null)\r\n }\r\n const isActive\r\n = !isNullOrUndefined(option)\r\n && option !== this.select.querySelector('option[selected]')\r\n\r\n if (isActive) {\r\n this.label.classList.add('ql-active')\r\n }\r\n else {\r\n this.label.classList.remove('ql-active')\r\n }\r\n }\r\n}\r\n\r\nclass IconPicker extends Picker {\r\n defaultItem: any\r\n constructor(select, icons) {\r\n super(select)\r\n this.container.classList.add('ql-icon-picker')\r\n Array.from(this.container.querySelectorAll('.ql-picker-item')).forEach(\r\n (item: any) => {\r\n item.innerHTML = icons[item.getAttribute('data-value') || '']\r\n },\r\n )\r\n this.defaultItem = this.container.querySelector('.ql-selected')\r\n this.selectItem(this.defaultItem, null)\r\n }\r\n\r\n selectItem(target, trigger) {\r\n super.selectItem(target, trigger)\r\n const item = target || this.defaultItem\r\n if (this.label.innerHTML === item.innerHTML) return\r\n this.label.innerHTML = item.innerHTML\r\n }\r\n}\r\n\r\nclass ColorPicker extends Picker {\r\n constructor(select, label) {\r\n super(select)\r\n this.label.innerHTML = label\r\n this.container.classList.add('ql-color-picker')\r\n Array.from(this.container.querySelectorAll('.ql-picker-item'))\r\n .slice(0, 7)\r\n .forEach((item: any) => {\r\n item.classList.add('ql-primary')\r\n })\r\n }\r\n\r\n buildItem(option) {\r\n const item = super.buildItem(option)\r\n item.style.backgroundColor = option.getAttribute('value') || ''\r\n return item\r\n }\r\n\r\n selectItem(item, trigger) {\r\n super.selectItem(item, trigger)\r\n const colorLabel = this.label.querySelector('.ql-color-label')\r\n const value = item ? item.getAttribute('data-value') || '' : ''\r\n if (colorLabel) {\r\n if (colorLabel.tagName === 'line') {\r\n colorLabel.style.stroke = value\r\n }\r\n else {\r\n colorLabel.style.fill = value\r\n }\r\n }\r\n }\r\n}\r\n\r\nQuill.register('ui/picker', Picker, true)\r\nQuill.register('ui/icon-picker', IconPicker, true)\r\nQuill.register('ui/color-picker', ColorPicker, true)\r\n\r\nconst ALIGNS = [false, 'center', 'right']\r\n\r\nconst COLORS = [\r\n '#000000',\r\n '#e60000',\r\n '#ff9900',\r\n '#ffff00',\r\n '#008a00',\r\n '#0066cc',\r\n '#9933ff',\r\n '#ffffff',\r\n '#facccc',\r\n '#ffebcc',\r\n '#ffffcc',\r\n '#cce8cc',\r\n '#cce0f5',\r\n '#ebd6ff',\r\n '#bbbbbb',\r\n '#f06666',\r\n '#ffc266',\r\n '#ffff66',\r\n '#66b966',\r\n '#66a3e0',\r\n '#c285ff',\r\n '#888888',\r\n '#a10000',\r\n '#b26b00',\r\n '#b2b200',\r\n '#006100',\r\n '#0047b2',\r\n '#6b24b2',\r\n '#444444',\r\n '#5c0000',\r\n '#663d00',\r\n '#666600',\r\n '#003700',\r\n '#002966',\r\n '#3d1466',\r\n]\r\n\r\nconst FONTS = [false, 'serif', 'monospace']\r\n\r\nconst HEADERS = ['1', '2', '3', false]\r\n\r\nconst SIZES = ['small', false, 'large', 'huge']\r\n\r\nSnowTheme.prototype.buildPickers = function (selects, icons) {\r\n this.pickers = Array.from(selects).map((select: any) => {\r\n if (select.classList.contains('ql-align')) {\r\n if (isNullOrUndefined(select.querySelector('option'))) {\r\n fillSelect(select, ALIGNS)\r\n }\r\n return new IconPicker(select, icons.align)\r\n }\r\n if (\r\n select.classList.contains('ql-background')\r\n || select.classList.contains('ql-color')\r\n ) {\r\n const format = select.classList.contains('ql-background')\r\n ? 'background'\r\n : 'color'\r\n if (isNullOrUndefined(select.querySelector('option'))) {\r\n fillSelect(\r\n select,\r\n COLORS,\r\n )\r\n }\r\n return new ColorPicker(select, icons[format])\r\n }\r\n if (isNullOrUndefined(select.querySelector('option'))) {\r\n if (select.classList.contains('ql-font')) {\r\n fillSelect(select, FONTS)\r\n }\r\n else if (select.classList.contains('ql-header')) {\r\n fillSelect(select, HEADERS)\r\n }\r\n else if (select.classList.contains('ql-size')) {\r\n fillSelect(select, SIZES)\r\n }\r\n }\r\n return new Picker(select)\r\n })\r\n const update = () => {\r\n this.pickers.forEach((picker) => {\r\n picker.update()\r\n })\r\n }\r\n this.quill.on(Quill.events.EDITOR_CHANGE, update)\r\n}\r\n\r\nfunction fillSelect(select, values, defaultValue = false) {\r\n values.forEach((value) => {\r\n const option = document.createElement('option')\r\n if (value === defaultValue) {\r\n option.setAttribute('selected', 'selected')\r\n }\r\n else {\r\n option.setAttribute('value', value)\r\n }\r\n select.appendChild(option)\r\n })\r\n}\r\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../../../src/toolbar/index.ts"],"sourcesContent":["import type TypeToolbar from 'quill/modules/toolbar'\r\nimport Quill from 'quill'\r\nimport { isNullOrUndefined } from '../config/editor.utils'\r\nimport './better-picker'\r\n\r\nconst Delta = Quill.import('delta')\r\nconst Parchment = Quill.import('parchment')\r\nconst levels = ['error', 'warn', 'log', 'info'] as const\r\nlet level = 'warn' as const\r\n\r\nfunction debuglogger(method: typeof levels[number], ...args) {\r\n if (levels.indexOf(method) <= levels.indexOf(level)) {\r\n console[method](...args) // eslint-disable-line no-console\r\n }\r\n}\r\n\r\nfunction namespace(ns) {\r\n return levels.reduce((logger, method) => {\r\n logger[method] = debuglogger.bind(console, method, ns)\r\n return logger\r\n }, {} as Record<typeof levels[number], (...args: any) => void>)\r\n}\r\n\r\nnamespace.level = (newLevel) => {\r\n level = newLevel\r\n}\r\ndebuglogger.level = namespace.level\r\nconst debug = namespace('quill:toolbar')\r\n\r\nconst Toolbar = Quill.import('modules/toolbar') as typeof TypeToolbar\r\n// let oldClean = Toolbar.DEFAULTS.handlers.clean\r\n\r\nclass BetterToolbar extends Toolbar {\r\n update(range) {\r\n const formats = isNullOrUndefined(range) ? {} : this.quill.getFormat(range) as Record<string, any>\r\n this.controls.forEach((pair) => {\r\n const [format, input] = pair\r\n if (input.tagName === 'SELECT') {\r\n const select = input as HTMLSelectElement\r\n let option\r\n if (isNullOrUndefined(range)) {\r\n option = null\r\n }\r\n else if (isNullOrUndefined(formats[format])) {\r\n option = select.querySelector('option[selected]')\r\n }\r\n else if (!Array.isArray(formats[format])) {\r\n let value = format === 'header' ? formats[format].value : formats[format]\r\n if (typeof value === 'string') {\r\n value = value.replace(/\"/g, '\\\\\"')\r\n }\r\n option = select.querySelector(`option[value=\"${value}\"]`)\r\n }\r\n if (isNullOrUndefined(option)) {\r\n select.value = '' // TODO make configurable?\r\n select.selectedIndex = -1\r\n }\r\n else {\r\n option.selected = true\r\n }\r\n }\r\n else if (isNullOrUndefined(range)) {\r\n input.classList.remove('ql-active')\r\n }\r\n else if (input.hasAttribute('value')) {\r\n // both being null should match (default values)\r\n // '1' should match with 1 (headers)\r\n let isActive\r\n = formats[format] === input.getAttribute('value')\r\n || (!isNullOrUndefined(formats[format])\r\n && (formats[format].value === input.getAttribute('value')\r\n || formats[format].toString() === input.getAttribute('value')))\r\n || (isNullOrUndefined(formats[format]) && !input.getAttribute('value'))\r\n\r\n if (!isActive) {\r\n const checkFormat = formats[format]\r\n if (checkFormat === 'checked' || checkFormat === 'unchecked') {\r\n isActive = input.getAttribute('value') === 'check'\r\n }\r\n }\r\n\r\n if (isActive) {\r\n input.classList.add('ql-active')\r\n }\r\n else {\r\n input.classList.remove('ql-active')\r\n }\r\n }\r\n else {\r\n if (!isNullOrUndefined(formats[format])) {\r\n input.classList.add('ql-active')\r\n }\r\n else {\r\n input.classList.remove('ql-active')\r\n }\r\n }\r\n })\r\n }\r\n\r\n attach(input: HTMLElement) {\r\n let format = Array.from(input.classList).find((className) => {\r\n return className.indexOf('ql-') === 0\r\n })\r\n if (!format) return\r\n format = format.slice('ql-'.length)\r\n\r\n if (input.tagName === 'BUTTON') {\r\n input.setAttribute('type', 'button')\r\n }\r\n\r\n if (this.handlers[format] == null && this.quill.scroll.query(format) == null) {\r\n debug.warn('ignoring attaching to nonexistent format', format, input)\r\n return\r\n }\r\n\r\n const eventName = input.tagName === 'SELECT' ? 'change' : 'click'\r\n input.addEventListener(eventName, (e) => {\r\n let value: boolean | string\r\n\r\n if (input.tagName === 'SELECT') {\r\n const select = input as HTMLSelectElement\r\n if (select.selectedIndex < 0) return\r\n const selected = select.options[select.selectedIndex]\r\n\r\n if (selected.hasAttribute('selected')) {\r\n value = false\r\n }\r\n else {\r\n value = selected.value || false\r\n }\r\n }\r\n else {\r\n const button = input as HTMLButtonElement\r\n if (button.classList.contains('ql-active')) {\r\n value = false\r\n }\r\n else {\r\n value = button.value || !button.hasAttribute('value')\r\n }\r\n e.preventDefault()\r\n }\r\n\r\n this.quill.focus({ preventScroll: format === 'screenshot' })\r\n const [range] = this.quill.selection.getRange()\r\n if (this.handlers[format] != null) {\r\n // @ts-ignore\r\n if (!isNullOrUndefined(window.quillIsIntable) && window.quillIsIntable === true && (format === 'blockquote' || format === 'code-block' || format === 'list' || format === 'indent' || format === 'clean')) {\r\n return\r\n }\r\n this.handlers[format].call(this, value)\r\n }\r\n else if (\r\n // @ts-ignore\r\n this.quill.scroll.query(format).prototype instanceof Parchment.EmbedBlot\r\n ) {\r\n value = prompt(`Enter ${format}`)\r\n if (!value) return\r\n this.quill.updateContents(\r\n new Delta()\r\n .retain(range.index)\r\n .delete(range.length)\r\n .insert({ [format]: value }),\r\n Quill.sources.USER,\r\n )\r\n }\r\n else {\r\n // @ts-ignore\r\n if (!isNullOrUndefined(window.quillIsIntable) && window.quillIsIntable === true && (format === 'blockquote' || format === 'code-block' || format === 'list' || format === 'indent' || format === 'clean')) {\r\n return\r\n }\r\n this.quill.format(format, value, Quill.sources.USER)\r\n }\r\n\r\n this.update(range)\r\n })\r\n this.controls.push([format, input])\r\n }\r\n}\r\n\r\nexport default BetterToolbar\r\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debounce.es.js","sources":["../../../src/utils/debounce.ts"],"sourcesContent":["import { isObject, root } from './method'\r\n\r\nexport function debounce(func, wait, options = undefined) {\r\n let lastArgs,\r\n lastThis,\r\n maxWait,\r\n result,\r\n timerId,\r\n lastCallTime\r\n\r\n let lastInvokeTime = 0\r\n let leading = false\r\n let maxing = false\r\n let trailing = true\r\n\r\n // Bypass `requestAnimationFrame` by explicitly setting `wait=0`.\r\n const useRAF = (!wait && wait !== 0 && typeof root.requestAnimationFrame === 'function')\r\n\r\n if (typeof func !== 'function') {\r\n throw new TypeError('Expected a function')\r\n }\r\n wait = +wait || 0\r\n if (isObject(options)) {\r\n leading = !!options.leading\r\n maxing = 'maxWait' in options\r\n maxWait = maxing ? Math.max(+options.maxWait || 0, wait) : maxWait\r\n trailing = 'trailing' in options ? !!options.trailing : trailing\r\n }\r\n\r\n function invokeFunc(time) {\r\n const args = lastArgs\r\n const thisArg = lastThis\r\n\r\n lastArgs = lastThis = undefined\r\n lastInvokeTime = time\r\n result = func.apply(thisArg, args)\r\n return result\r\n }\r\n\r\n function startTimer(pendingFunc, wait) {\r\n if (useRAF) {\r\n root.cancelAnimationFrame(timerId)\r\n return root.requestAnimationFrame(pendingFunc)\r\n }\r\n return setTimeout(pendingFunc, wait)\r\n }\r\n\r\n function cancelTimer(id) {\r\n if (useRAF) {\r\n return root.cancelAnimationFrame(id)\r\n }\r\n clearTimeout(id)\r\n }\r\n\r\n function leadingEdge(time) {\r\n // Reset any `maxWait` timer.\r\n lastInvokeTime = time\r\n // Start the timer for the trailing edge.\r\n timerId = startTimer(timerExpired, wait)\r\n // Invoke the leading edge.\r\n return leading ? invokeFunc(time) : result\r\n }\r\n\r\n function remainingWait(time) {\r\n const timeSinceLastCall = time - lastCallTime\r\n const timeSinceLastInvoke = time - lastInvokeTime\r\n const timeWaiting = wait - timeSinceLastCall\r\n\r\n return maxing\r\n ? Math.min(timeWaiting, maxWait - timeSinceLastInvoke)\r\n : timeWaiting\r\n }\r\n\r\n function shouldInvoke(time) {\r\n const timeSinceLastCall = time - lastCallTime\r\n const timeSinceLastInvoke = time - lastInvokeTime\r\n\r\n // Either this is the first call, activity has stopped and we're at the\r\n // trailing edge, the system time has gone backwards and we're treating\r\n // it as the trailing edge, or we've hit the `maxWait` limit.\r\n return (lastCallTime === undefined || (timeSinceLastCall >= wait)\r\n || (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait))\r\n }\r\n\r\n function timerExpired() {\r\n const time = Date.now()\r\n if (shouldInvoke(time)) {\r\n return trailingEdge(time)\r\n }\r\n // Restart the timer.\r\n timerId = startTimer(timerExpired, remainingWait(time))\r\n }\r\n\r\n function trailingEdge(time) {\r\n timerId = undefined\r\n\r\n // Only invoke if we have `lastArgs` which means `func` has been\r\n // debounced at least once.\r\n if (trailing && lastArgs) {\r\n return invokeFunc(time)\r\n }\r\n lastArgs = lastThis = undefined\r\n return result\r\n }\r\n\r\n function cancel() {\r\n if (timerId !== undefined) {\r\n cancelTimer(timerId)\r\n }\r\n lastInvokeTime = 0\r\n lastArgs = lastCallTime = lastThis = timerId = undefined\r\n }\r\n\r\n function flush() {\r\n return timerId === undefined ? result : trailingEdge(Date.now())\r\n }\r\n\r\n function pending() {\r\n return timerId !== undefined\r\n }\r\n\r\n function debounced(...args) {\r\n const time = Date.now()\r\n const isInvoking = shouldInvoke(time)\r\n\r\n lastArgs = args\r\n lastThis = this\r\n lastCallTime = time\r\n\r\n if (isInvoking) {\r\n if (timerId === undefined) {\r\n return leadingEdge(lastCallTime)\r\n }\r\n if (maxing) {\r\n // Handle invocations in a tight loop.\r\n timerId = startTimer(timerExpired, wait)\r\n return invokeFunc(lastCallTime)\r\n }\r\n }\r\n if (timerId === undefined) {\r\n timerId = startTimer(timerExpired, wait)\r\n }\r\n return result\r\n }\r\n debounced.cancel = cancel\r\n debounced.flush = flush\r\n debounced.pending = pending\r\n return debounced\r\n}\r\n"],"names":["wait"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"method.es.js","sources":["../../../src/utils/method.ts"],"sourcesContent":["/** Detect free variable `global` from Node.js. */\r\nconst freeGlobal\r\n = typeof global === 'object'\r\n && global !== null\r\n && global.Object === Object\r\n && global\r\n\r\n/** Detect free variable `globalThis` */\r\nconst freeGlobalThis\r\n = typeof globalThis === 'object'\r\n && globalThis !== null\r\n && globalThis.Object == Object\r\n && globalThis\r\n\r\n/** Detect free variable `self`. */\r\nconst freeSelf\r\n = typeof self === 'object' && self !== null && self.Object === Object && self\r\n\r\n/** Used as a reference to the global object. */\r\nexport const root\r\n = freeGlobalThis || freeGlobal || freeSelf || new Function('return this')()\r\n\r\nexport function isObject(value) {\r\n const type = typeof value\r\n return value != null && (type === 'object' || type === 'function')\r\n}\r\n\r\nexport function compareArray(arr1, arr2) {\r\n if (arr1.length !== arr2.length) {\r\n return false\r\n }\r\n for (let i = 0; i < arr1.length; i++) {\r\n if (arr1[i] !== arr2[i]) {\r\n return false\r\n }\r\n }\r\n return true\r\n}\r\n\r\nexport function compareObject(object1, object2) {\r\n const o1keys = Object.keys(object1)\r\n const o2keys = Object.keys(object2)\r\n if (o2keys.length !== o1keys.length) return false\r\n for (let i = 0; i <= o1keys.length - 1; i++) {\r\n const key = o1keys[i]\r\n if (!o2keys.includes(key)) return false\r\n if (!compare(object2[key], object1[key])) return false\r\n }\r\n return true\r\n}\r\n\r\nexport function compare(value, other) {\r\n if (value === other) {\r\n return true\r\n }\r\n if (Array.isArray(value) && Array.isArray(other)) {\r\n return compareArray(value, other)\r\n }\r\n if (value instanceof Function || other instanceof Function) {\r\n return false\r\n }\r\n if (value instanceof Object && other instanceof Object) {\r\n return compareObject(value, other)\r\n }\r\n return false\r\n}\r\n\r\nexport function unshiftString(str: string, targetLength: number, addString: string): string {\r\n targetLength = targetLength > 0 ? targetLength : 0\r\n addString = String((typeof addString !== 'undefined' && typeof addString !== 'object') ? addString : ' ')\r\n str = (str === undefined || str === null) ? '' : String(str)\r\n if (str.length >= targetLength) {\r\n return String(str)\r\n }\r\n else {\r\n targetLength = targetLength - str.length\r\n if (targetLength > addString.length) {\r\n addString += addString.repeat(targetLength / addString.length)\r\n }\r\n return addString.slice(0, targetLength) + String(str)\r\n }\r\n}\r\n"],"names":[],"mappings":"AACA,MAAM,aACF,OAAO,WAAW,YACjB,WAAW,QACX,OAAO,WAAW,UAClB;AAGL,MAAM,iBACF,OAAO,eAAe,YACrB,eAAe,QACf,WAAW,UAAU,UACrB;AAGL,MAAM,WACF,OAAO,SAAS,YAAY,SAAS,QAAQ,KAAK,WAAW,UAAU;AAGpE,MAAM,OACT,kBAAkB,cAAc,YAAY,IAAI,SAAS,aAAa,EAAE;AAErE,SAAS,SAAS,OAAO;AAC9B,QAAM,OAAO,OAAO;AACpB,SAAO,SAAS,SAAS,SAAS,YAAY,SAAS;AACzD;AAEgB,SAAA,aAAa,MAAM,MAAM;AACnC,MAAA,KAAK,WAAW,KAAK,QAAQ;AACxB,WAAA;AAAA,EACT;AACA,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,QAAI,KAAK,CAAC,MAAM,KAAK,CAAC,GAAG;AAChB,aAAA;AAAA,IACT;AAAA,EACF;AACO,SAAA;AACT;AAEgB,SAAA,cAAc,SAAS,SAAS;AACxC,QAAA,SAAS,OAAO,KAAK,OAAO;AAC5B,QAAA,SAAS,OAAO,KAAK,OAAO;AAClC,MAAI,OAAO,WAAW,OAAO,OAAe,QAAA;AAC5C,WAAS,IAAI,GAAG,KAAK,OAAO,SAAS,GAAG,KAAK;AACrC,UAAA,MAAM,OAAO,CAAC;AACpB,QAAI,CAAC,OAAO,SAAS,GAAG,EAAU,QAAA;AAC9B,QAAA,CAAC,QAAQ,QAAQ,GAAG,GAAG,QAAQ,GAAG,CAAC,EAAU,QAAA;AAAA,EACnD;AACO,SAAA;AACT;AAEgB,SAAA,QAAQ,OAAO,OAAO;AACpC,MAAI,UAAU,OAAO;AACZ,WAAA;AAAA,EACT;AACA,MAAI,MAAM,QAAQ,KAAK,KAAK,MAAM,QAAQ,KAAK,GAAG;AACzC,WAAA,aAAa,OAAO,KAAK;AAAA,EAClC;AACI,MAAA,iBAAiB,YAAY,iBAAiB,UAAU;AACnD,WAAA;AAAA,EACT;AACI,MAAA,iBAAiB,UAAU,iBAAiB,QAAQ;AAC/C,WAAA,cAAc,OAAO,KAAK;AAAA,EACnC;AACO,SAAA;AACT;AAEgB,SAAA,cAAc,KAAa,cAAsB,WAA2B;AAC3E,iBAAA,eAAe,IAAI,eAAe;AACrC,cAAA,OAAQ,OAAO,cAAc,eAAe,OAAO,cAAc,WAAY,YAAY,GAAG;AACxG,QAAO,QAAQ,UAAa,QAAQ,OAAQ,KAAK,OAAO,GAAG;AACvD,MAAA,IAAI,UAAU,cAAc;AAC9B,WAAO,OAAO,GAAG;AAAA,EAAA,OAEd;AACH,mBAAe,eAAe,IAAI;AAC9B,QAAA,eAAe,UAAU,QAAQ;AACnC,mBAAa,UAAU,OAAO,eAAe,UAAU,MAAM;AAAA,IAC/D;AACA,WAAO,UAAU,MAAM,GAAG,YAAY,IAAI,OAAO,GAAG;AAAA,EACtD;AACF;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../../../src/video/index.ts"],"sourcesContent":["import type { Parchment as TypeParchment } from 'quill'\r\nimport Quill from 'quill'\r\nimport { sanitize } from '../config/editor.utils'\r\n\r\nconst BlockEmbed = Quill.imports['blots/block/embed'] as TypeParchment.BlotConstructor\r\nconst VIDEO_ATTRIBUTES = ['id', 'title', 'src']\r\n\r\nclass Video extends BlockEmbed {\r\n static blotName: string\r\n static tagName: string\r\n static SANITIZED_URL: string\r\n static PROTOCOL_WHITELIST: string[]\r\n static className: string\r\n statics: any\r\n domNode: any\r\n\r\n static sanitize(url) {\r\n return sanitize(url, this.PROTOCOL_WHITELIST) ? url : this.SANITIZED_URL\r\n }\r\n\r\n static create(value) {\r\n const node = super.create(value) as HTMLElement\r\n node.setAttribute('contenteditable', 'false')\r\n node.setAttribute('controls', 'controls')\r\n VIDEO_ATTRIBUTES.forEach((key) => {\r\n if (value[key]) {\r\n switch (key) {\r\n case 'src':{ const src = Video.sanitize(value[key])\r\n node.setAttribute(key, src)\r\n break\r\n }\r\n case 'title': {\r\n node.setAttribute(key, value[key])\r\n break\r\n }\r\n default: {\r\n node.dataset[key] = value[key]\r\n }\r\n }\r\n }\r\n })\r\n return node\r\n }\r\n\r\n static value(domNode) {\r\n const formats: any = {}\r\n VIDEO_ATTRIBUTES.forEach((key) => {\r\n const value = domNode.getAttribute(key) || domNode.dataset[key]\r\n if (value) {\r\n formats[key] = value\r\n }\r\n })\r\n return formats\r\n }\r\n}\r\nVideo.blotName = 'video'\r\nVideo.tagName = 'VIDEO'\r\nVideo.SANITIZED_URL = 'about:blank'\r\nVideo.PROTOCOL_WHITELIST = ['http', 'https']\r\nVideo.className = 'ql-video-item'\r\n\r\nexport default Video\r\n"],"names":[],"mappings":";;AAIA,MAAM,aAAa,MAAM,QAAQ,mBAAmB;AACpD,MAAM,mBAAmB,CAAC,MAAM,SAAS,KAAK;AAE9C,MAAM,cAAc,WAAW;AAAA,EAS7B,OAAO,SAAS,KAAK;AACnB,WAAO,SAAS,KAAK,KAAK,kBAAkB,IAAI,MAAM,KAAK;AAAA,EAC7D;AAAA,EAEA,OAAO,OAAO,OAAO;AACb,UAAA,OAAO,MAAM,OAAO,KAAK;AAC1B,SAAA,aAAa,mBAAmB,OAAO;AACvC,SAAA,aAAa,YAAY,UAAU;AACvB,qBAAA,QAAQ,CAAC,QAAQ;AAC5B,UAAA,MAAM,GAAG,GAAG;AACd,gBAAQ,KAAK;AAAA,UACX,KAAK,OAAM;AAAE,kBAAM,MAAM,MAAM,SAAS,MAAM,GAAG,CAAC;AAC3C,iBAAA,aAAa,KAAK,GAAG;AAC1B;AAAA,UACF;AAAA,UACA,KAAK,SAAS;AACZ,iBAAK,aAAa,KAAK,MAAM,GAAG,CAAC;AACjC;AAAA,UACF;AAAA,UACA,SAAS;AACP,iBAAK,QAAQ,GAAG,IAAI,MAAM,GAAG;AAAA,UAC/B;AAAA,QACF;AAAA,MACF;AAAA,IAAA,CACD;AACM,WAAA;AAAA,EACT;AAAA,EAEA,OAAO,MAAM,SAAS;AACpB,UAAM,UAAe,CAAA;AACJ,qBAAA,QAAQ,CAAC,QAAQ;AAChC,YAAM,QAAQ,QAAQ,aAAa,GAAG,KAAK,QAAQ,QAAQ,GAAG;AAC9D,UAAI,OAAO;AACT,gBAAQ,GAAG,IAAI;AAAA,MACjB;AAAA,IAAA,CACD;AACM,WAAA;AAAA,EACT;AACF;AACA,MAAM,WAAW;AACjB,MAAM,UAAU;AAChB,MAAM,gBAAgB;AACtB,MAAM,qBAAqB,CAAC,QAAQ,OAAO;AAC3C,MAAM,YAAY;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"line-height.cjs.js","sources":["../../../src/attributors/line-height.ts"],"sourcesContent":["import Quill from 'quill'\r\n\r\nconst Parchment = Quill.import('parchment')\r\nexport const LineHeightStyle = new Parchment.StyleAttributor('line-height', 'line-height', {\r\n scope: Parchment.Scope.INLINE,\r\n})\r\n"],"names":[],"mappings":";;;AAEA,MAAM,YAAY,MAAM,OAAO,WAAW;AACnC,MAAM,kBAAkB,IAAI,UAAU,gBAAgB,eAAe,eAAe;AAAA,EACzF,OAAO,UAAU,MAAM;AACzB,CAAC;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base64-image.cjs.js","sources":["../../../src/config/base64-image.ts"],"sourcesContent":["export const ERROR_IMAGE_PLACEHOLDER_CN\r\n = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAHCCAMAAAAgvV36AAAAwFBMVEX///8zMzP7+/v+/v7o6OhUgvLY2Nj4+Pj8TCNXV1d1dXXn5+fz8/Oenp7Hx8e1tbVRUVGlpaXPz8+tra1+fn66urpsbGw3Nzfu7u47OzvBwcHr6+vc3NxERETi4uJcXFxhYWFMTEyDg4OUlJTf399qampxcXFAQEBISEiYmJhmZmZ7e3uGhoaQkJCMjIzU1NTr6v69vb1ch/ODo/VskvT8eFr9Yj+ft/fE0/mzxvr+moTT3fj+rJn/xrr/1cyuv/FbirVfAAAAAHRSTlM2uXDMAABAFklEQVR42u2dh2LiyNatJTaDBhDZWIiMbYIxhvb0nJnpE/77/m91K0pVUolkd2R9HQwYhKSqVTtU8jwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPiJoeQnEcmnhLsCblwUZEvDkgoAwBPWIvjy+c8//vjz85dAmA/IBICU4O8/flP88XcAOwKA6WX9k8hDSOQ/8nUIBAAukC+/2UiFEGwIAIx/fvstpxCCjwWA0MCnP37LK+QTwhAAhAT+/s3B35Y2dDLYHZYE4SA0BJdTFVQGfmJcBoSbkLRm0xFrQuGgzBhkf5t2NMJZAz81SYT+5z9B8M+f+tkXo1abHSNGVacgHJXLdS6QkW0uSHyGeI8KpAF+bj5rfQS8SgdaIZ/Typ7UczIcLiGOlMDQTTJUhby0cx6AnzMG0Yr4R7b7OqX1p6rbpE2BQUn6VZJ6nduQ0NAHecE/slv+H/Q5gp8dHYLwISa8busgxLOqfKIQ4VfVDX3IHwMzZPlidMuXTB8NgJ9WIJ/kU1MgJP/Qf/7+/Lf8ZeJXaYmMwjAcT9kDoQHhWX36bEb7nz/hFoOf2MPyUhdLYLhYQh6jL5//EE8D06+S4hiEAZVKNB6bQcinP+182J9QCPiZBZIG6SL2ToN08j59+ZzU9v/kxVFi6uDUK/U0CKHP2YzxZ4xZAT8xVpr3P2ma95+/LVPw/wzHivlVpQQqDSrTNNH7Jd+n8gU3Gfy0FoQ+/eYk2334OQk6giAQygi0RIKKCEJklOIatxLgPoOfVyJ//3YOf0jLEUhlUEn+kyIZj+s6CPnH9dl/4GGBn1cg2ai6gH9CZTiIlD5Im5ByRfWEpBHNH18+fUqyvZ9xl8FPzH/+OEcgf5OOOZTlIP2MQhGECDOhxfaF9518MTJiAPykQUiBX5RLRqVRuRmhCyo80Su6BNNeFT6QPulTgY8FflqF/Ofvz+eYkD90UB5kRMJemY71aBOr2/FTvlcegB9WCY6no/PEIYOQkhsmlhHvCRlYLhZ/UuhiwaCAH59PX84XhxmEOCQSJj0hCNLBLxB0sLDj7z9/u5A/i+RBxmiTgjQvGbYD5gP8+Fwuj78LXKygFATB9MB7Sfj6cyc7CrGiKfgJYpC/LxHHH5+/jIrcq9JvF4OiAD+4UILwn/PF8fd/Agr0+BIIBPzi6igFfNj6f86qylwcvO/cSPB+iEDgYoEfUhyUznj6fEbQ8cmKNegDLQgUAn606IPsZRaOBiF/fv4yoKAwrQsXC/waskgaajEdsG5Olf2nOOj4f6PSBUAg4OfOWpVCbTq0OsRU2T+KIvJMQC4/VS+gXL5cIPVyvV4upg4HDHwzE5Ks7cbqJP9TllNlmQQ+O4IOHpHz4ew85NAqKZ/gcoEcP169jJID34TcMgsjsciCGm34JR+Rq2GIdrKKq6pyhMsFUjlKGQIB34KwbC5fJabKGmPUg+CT0Q34ifeHlwIKkumChkDKEAj4NQWifRa1Pk8mU/unCjp0Gjcdzk7mgHYpkGI/7mODdAgEfKMAJEgj8vwMJ87fshvQ/cs0UD8hEA8CAT+nQqQ4zuzNKAYCAb8mo3I9LAVFI0S+o0AIAgE/RhAyKr3XfpwWyKeLgQUBP4CH5bEgpM4FQhAIAHmFsCBkGqiuDfp6AvnYLXIgEPCtLIg3KJfD0ld3sSAQ8DMHIV9fIB4EAn5KRBDytWOQq8RBEAj4AWACCb6FBflAIBDw7cKQ8COCEAgE/MI+VjkgCiAQABwW5EOCEAgE/MpBSAgXC4ACPiLRC4GAX9TDShK9EAgATo3w0SYQCAAFiCHv9K45IRAI+LWDELVMCQQCQBYZhARfdTQvBAJ+8iAEFgQAN4NyeYAgHYDiIKQMgQBwNAiBQABw8+7RJhAI+MWDkBEEAkBxEFJ/18pYEAj4lWEVfAoLAkARfLQJhpoA4IZ4EAIXC4ACgnK9/p5ZtxAI+LVNyDuHvEMg4JcPQgYQCAAFiETv9QMWIRDwqwchMtFLEAgAziCkjiAdgCL0aJMAAgHAEYTU3zOiFwIBNxCEUOnambcQCPjlg5A6H/KOIB2AnDhkEFIfwcUCoCgIkdMKEaQD4KKkRptcFYRAIOBXd7G8EQtCArhYABT6WOVrR/RCIOCXhyd6A7oujwWBgF/f0eICCa6L0iEQ8OsHIqPr1zaBQMCvH6irRC+yWAAUBSGwIAAUmBC6foFFCAT88h7WexZYhEDADYiEByEEgQCQFwepIARjsQAo4uogBAIBt8Dg2p10IBBwC8hEbwCBAOCidG0QAoGAm2BUv26BRQgE3AThlbsVQiDghoIQCAQAJ3zIewiBAOCUB1/l/apELwQCbkMgYbleh0AAOBKEoB8EgOIg5JrRJhAIuBGuG20CgYAbIeSJXoJAADgWhFDpoiWyIBBwK5TVdp4BLAgAziCkjhgEgCNBCF065h0CAbdC6ZrRJhAIuBlGfCcdgkAAKPKx6rAgAOSQ+4RcM9oEAgG3I5MrghAIBNxUEFKGQAAoDkIuHW0CgYDbIZA76UAgADiCdDHkfXCZCYFAwA1x+WgTCATcVBBSn1IJo3kBKAxCQlgQAApgLtYIMQgAxUHIFPNBACgKQuoXLrAIgYBb4uIh7xAIuCkuXWARAgHwsSAQACSXDnmHQMBNQXptEwgEAGcQUq8HEAgABUGIXNsEAgHA5WJdONoEAgG3JRAehIwgEAAKGFy0WyEEAm4wCJFR+jmrWEMg4Ma4LAiBQMAtRSD8v7Ja24QgEADeGYRAIOB2gxAIBICcl8WHvA8gEAAKGF2wZToEAm7Sx4JAAChAJ3oJAgHAEYZcMNoEAgE3GIScP60QAgG3ZT14ZyFfYPHM3TwhEHCzQUgAgQCQtSAiCKmfu5MOBAJukIHwsSAQAJyE5fJTAIEAUByEDCAQAAoonzvaBAIBtxmElKfIYgFQGITUpwGGmgDgpnTuaBMIBNwkozNH9EIg4EZ9rPITBAJAAeeubQKBgJskHfIeQCAAXBuEQCDgZoOQ8RmJXggE3KaLFZTr0zA4OfEWAgE3qhC+tglxfQQQCAD5ICSdd0sQCAC5IKQuhrwjiwWAg0AlehGDAOCiLBK9RUYkgEDAbTOQo00KXCwIBNx6EMKi9LAoApFdJFQq1yEQcJvwIe9lKgpBAvaHAlgQcNtBSJEFYcLhWxgSBAJu18cq18eBeydP0rt8QiDgZile20SpJhxNIRBws9CxtU2CwXRc4RUWAgG3ihzyTrm+wiCsc3FUIBBw40FIssCijkSCICw/VVIgEIAgRKd1edBhiKMyfkIMAm41AJE+Vn0qAnL2nwo6tG81Hk/rZQkEAm43CHnifebBIAk6pDqmU96LWK5DIODGg5BpGGbFoS0HYwCBgBt2s3gQYonDVMcoDERvex0CAbeKsA9ucZB+AywIuFmYCzV2iYMMBZUr3xAIBPxoQQiLyJU62I9BWPJUigsCATdPSemC/1cXQQfZb6inyaxvAP8uFAr4gcL0kar+SdCR/Ca1IN8WFAr4sXws6VfpsCNnQb4lwoIQSgX8MAQDh19lUK5/awsCfYAf09vCLQAAygAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgG8N0bsWfqMPeD+ddxwqehddfBp07emDX10Nuj5yPPn33Qqw3/JQeyl4z+tm2T3naDTY73v5X4TqVcp+bf/+vl90uqNGc2C8Np7N5JFfZ7OAIBBQUJtJWg6ukAKN0NmKae73Xf06+2/hx+6PBWs/qhe2//KwvX6FPXry/fv899T5q/nzIK/h+428bOSzju/vjecV338UD2q+H6AygHzrrMwGqVrp1MdwMllPEoyH+vnQfPej75vtfaFAer6/9NQXF+gtjPwqb+eZFMg4ZfmzbAsk/a0QSO7Akrnvd71UvlIg7JKVQAg2BDg0ov+QdrsyAvFPcIVAvKDt++17Jw9aKm++zx7TNLUg6f9kWZBGrVZ2WZByrdYwPSzfX5eOWhAIBFgxSNJmklfYgrJ6Wr27u3u5y8Ffqvr+m0MgdEIgz8V6a+v37OShngwpkNeM42d+dFMgdO/7T/oytAXx1EeNS2Ie1vLpacz/Ur3b7TIrdtflbH2/yX5MUSdA3oTQ//37X3/9/vtf//r3/zkb0KGocertvWGmFjUsC0JKIInsCgQyjZnqZm5q+k3MyKx2ux1r3hc7wQMLWpqq1bcsiBYIpRaEvIy2GNtUhYNHhzT3qA8gK4/Sf5k4NH/9t0S5kMAUSMt2oAyBUM7FomILEsxY233Koxnna3DlhEDUCSWnawtkFEEg4FzfStXN/xnyEBL53xELQsHC3wTHLIgUCOVjEFt33CiEp1Ji848WCPOw5sIQsX9BpdVqsbeuWhymV/6jgqoBtEKk/fj37zn+7WW6RAwL8uL7UZzQLRKI8UVMIJSVAO1ZXa91nKTHYgHCehoOwkGXRQ7hYMD/0nsEEk6yiWWkeUGhQkSHg0MfUiEuCyLce5Oueq1IIKQtiJ0BIBZ8R6uCCP1e94KM1jLYJpKRNqnPnxIIcYGQSyDPvv9iGzIhELIFgjwWSHDqgyvESvcmFoRVvWhYOVQYh+bEbwdFFiRIYQJJHquGnNXmeMiCmUk7h1GfhxH7Akek7RAIHbcg6lJGsXDRYEHAuVbkf4Yo/vtf48n/yGFBgh1v4asqnbr1o25RDFJALM0I+wBzzlpGNU4YiEqvvnw8G8uOdW1BZFLaZUFEmpdUL3yS5iX9UU/7dUuzv5HyAoH1AEYUUjLi83953r+MSL2UF0il6vubRuzHLS4WVqOevSsEwupgab4+eGcIJPF3Mv0gBS7W2GVBxumb6pEfVQYaaj4yHljUzn8+MtP1yn924WSBBNNm/ItMgfz+X9PJEgIJWUiwHXmVje/vgjETy44KBVJ195DXVBUv87rMBPLQzTIUw08Ud9v5fMuZsWh9q2gWxyBq6KWKQeSoAENbLALZNdPwae/UcAPiALppJjPBa1uQ3/8yR5xIC9L3H0XszKprNU4Tv+4g/dSoYOICcQfpyXvarl+3CgUy0xpa+P5CP54Zb+q1w9MCQc0AWiD/97tlQcgUyO//l7UgzF1RbpCouK+e4dEcG4tVBBNIPMmyNiv9fJ2+Gul3vBUKxD+pOPKmj48L6UzVB0+SsfUjhAUBKgKxU1gZF0t2hmSzWOxz3Ye1rHfVXiC99axAXnkzf5ZAimKQbBxwMot1hkCS421VvooQbYDjWIL4V/55rqMwbPJg1o/uuj3+c70bBg6B3Pl+P1f58tWxUCD5SmsJhJwCMfLKAQs2ns3n9sG2VkIXCgGF/HVMIH9lsljUf5AxweZ5xKtVf8afRPed0BII+83K95tqVHpK3sFjAnmt18viT0LFDNKTA6g0r/qgM81rHryRkR555ojleSqQTmaA8rOHSYUgrSq/HxPI70a1ExZEdKJvHt7CpvLQuvsNe2UWGAIRH9Bzkk67WCdChvNdLLLG6VsCyQzoJ9OC1DJfPUO9AMUCoeMCCdrLzpi99OAvGnpA0+G1+pRzsZihWdayvObcmRMC4W8OFpIJi+fVww65XKzpoRIUWZCgcpiqCH3PYaoWP9+EQIzpkRAIsPRhZXmZS5V9brtY+nPhXHhWXa8wizVxVftc3aOQD1hhVbQmh64I+KNpOiU9yB/n0WlBapbRsgXSZV+RPDLYiY+FyURKdt4zRCXA8IVsi/Fve1zWv8glEM54zyWwTPqcMwIJorMEIuj5fvtIYpUJJOYTqKqspec/2ycEQlmB0EmBDExhw4KANPotHKmYjld0C8TzSr2Nn+ZyMwJh9Xdet6kUCKQX+VFzkCG0BLI1Y5Du+ywIieMzC1jmPwMxKWWQthgQCLBC10xH4WCQ7SjMCUQno4iCzroduAXyrMf/pQxSgRiDBWnnn7A1HywQiR2kw4KAQoFYQcf/7LG9f1GmH0ROxVh1unrM+tQZg4gskTlFnWyBpFRm/nsEQu8UiJoEUkuTvDEEAuwg5L/26MTM05wFIa/Kh+TOH4ehIR+yLUgptprlrAXR3z3Y8VAlem1adJjPNTwhEPpQC4I0LzgSiPxVFKRbBiSxIOHzMhY1Kdp2RsnvbYGw6luljAUJs3WvvufHYQeLdmY/d5+98EZugdCHWhA5ozhJ866R5gUu/lcUov/PWiArCdJZbH/orORgrHmn7spi3ft+xztqQcibcusx63pjvnZcV/fg0atv66PAxTpst73rLAghBgGXOVlHptx6VJjFGjeq0iUJcxZkzCr5yDvlYj34G5EDC2t8cnpXfFWfqWU9tPoh3AJJzND7XKyB6gdJvhACATmFkHvRBrIyTjmBcCE8t2XtzcwHufP9lXdCIOyFhm7EWwsmtG3Te+OSe8kEL1kXq5fMYny3QMLXOIAFAaf59/EukCKBCI00zRhEyIk7T92cDPNZrHR8VNDg4Qjvelw0019QIhDSFqTVe96IqVhugXTSUJ+J9M4I/B0CqT+u+XlCIOC0GckvHJdbxooJZFcpZKctCHkBswMv+cEaQiAFHeaj4Z3u2n4rZyajM4HM+YMnPsZXpJyiqWUa7gvSURlMgRAzWUseA62m/GOPjQSkeYGTzNKjlNPH+au7sxoXl71jLhalPYXBtNuobeQB1PitTa0x7E6TZdatGKTHZ6DwyIXCAV8NaMS+7I4uFshSpuHuxnJ5R6R5wQkLwhOedXPx6vx08nMFwkfEO2bbUtbFaj3U5u1Yf3hz1xp5094qTlc/WbyKEys9PvaUBbmnsNt9Kokz7vO3rLkV6KTCfGgU8GALpMOF0BjpjkIIBJzWh15EyjW1if+KCaTWKqSWCKQXGVPVDRuU7QfppVK47ySr9ZSa+6oe6NixPm/sMMXPb6Q/XQ2cQbpNJkgPlp1k9VH2sYqYrVVm/5fXEAgo0EhS98hygwyBHFntw8hiDe9ccwdzQXqw2cxrr53hYZA7mXK339mvqmPr7Mb2ygveTgwN2adLZDfu78ceqdVUk73k5Cvj+/uik+dpXkKQDk4pJN3N8/gWZHTiBSr6GB+jS9Z76PSHDIXoieXGGWpbd+1+tsJmWfPVw0GIygBy9cWyIGcKo7hm0iV1li6R2Zm/vlovmCgFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPi5Oblxkt6who58mL7qiR3/vbVPOX3ATaCvdhnn79VDH3C36MojYl+ea24KFdRBygqJvtE9J1Od9M3uw9WHoq9XcPRBXwBlfOAdyzSMxtN6rzc61ZjlD0wa/usxO4Te3ZLMjcpzlWE0HIaO7+jtesHJq0s+S+mJTYfDs5t4yl4TO9FWr0t6F17j963eUL8/aI2JzqrxTgN05M6SeRuTe2fcWPMTjcfkjHY7/rBkFYZ9XbesgUOrpR49R1HdWVKnrUul10t3k2z6fvOShsnx6172EMkbe+v1SJ8ayQ3IK7IeWD7Xxm8f+8p6s8z+7zt2Yn72/eCCBuTlOXMFG3/nuDJ2Pkt9RxvJjtGFnit9dGvm+P3a3+uHkf/ojV6WFwnhdjSz9311yaxu1DO/qx5h76UCYoX+lNy1nECmr0d5ylgQ9o8JpOts/byO71vmqcUFkrNLb3ITaHKWKnvfI99MmRKBkCWQCzaOvfP9WsA/HYRhOOD/Nv6DeMAIDNsnBcK/aLD212H2xGrrI7yeWRbe83EalgFnAtFnEfuvvEnapbI/xv7GLMirFoiXFQh5K/8I5lb3SiCpBbFqwNA/yvBcC6IFYtr/lrYg1pnPfL+63S63WbSWZsLAWBaEVegLLQjfDb3NvogbowfHdT16pmFZqg8tfX8iT4af3kCq8/7Y/ZEVt3ayLErHb7MfSWU0pFwify4fBbRmAvF2iWHz6Ohh2jcoEFm9bIGQKJRJo4CJXzN2RM4JxLtAIHl/TFiQ1M+njEDEC929gFWtF/nozXqTG6WHge/fZQXSlrXsEheLnUbI6nu77hbIs2irQ/G+RCB7+z3yhtO9Hz8o7ti/tT95SJ+3lEBOlcVpgSh7YTNgJ7cXyo0O6rraCw37/cKmvb2xoMS2IPaV1/yqrgudh5b1q+oFFsT0lYhKxGrTMOs+NVcmVd+fWy80cy5WL1v+qemvx/7k0YlqAJgyJu12e8NKv82pXicQcWms5V3UhYsl4C6WosTqUXe5HpguFnv35E6z9mPlzt37E+OYpdgMZJQUWVnom9pwlgV5oQlrlXqhjTxQW1f9tXww8Bbi65h32A7y9np/wyE6pQIhWTfKXoFAppHfu0QgR9MCzLq7nKpj9HICeZsLuI8jH2kHwQuYg/VWHFGyJ1tH23qlQIRNWKXxzcau29NYClcKJGRfvJgal/zspQJJT/LAzz8XprjLgnJlkZZC69hpyyCdpPG8k5+YZ8q/G/lVfTeofGuZ4MNbk1+vMwZplexC4fa30RE0OpUTAhkmAsmnM/kLc0tA6i19K+hkbXvbeqEvxME8ZubSvD4/d1RKUwXpZhTv0Yo7UHQke8o+M1fuWU26Z+8QCHn7NjMSg9dHkXGI/arKPdTVnYmm7D1cINRbs8sql9R5sNqXtNjSglAgYXezrB4GpZxAjLLouMoiIxA6KhCrscvYfW5TooqOtuaT6Y3ZjxfZaqUCedQCCWv+q10oj7nW/HoLwqrn9kjJCQe3l0QH5rsW+UCRZ6IOVjK69MK8GKcV0iaG55EGnhWD0DssCLtf7N8493UHodpSVQQIXCA8TqkNupuGuMTxxrhNUiADx0nHpkDonLKwBZJL5OmERiyyWCJrOOMm0NGYbdN75r1F/mJ0W/7Vi/R7X3Np3gNzW9ahIRCeFV2qgHDFi5WcAtH96EMVg7hjOealH7f9lMliUfKvHTGYQxRFbVeaVx6eleq8eVQgj7xeqT6UbtL9f02QTmkWYaDsRtaCeF2RseYCGW0WQ1HrXgIW08UyE20KZHRcIG1xokZZ1NRdKhZIPs9dmykif6Ifxv6a/6iyPy/Gm/k3pUXAfNtZeHMWJI1BSLtYQYPVwWXZsCCDJc9lyHZ6OlE+dk4gbe4TiX+soV+Ix+1qPoPLHSC/7xyuYvTzpVmsbA9HEoOoLpOWaKrTaJ8d/j5glbKVCVDrWiC8F2SZxOrvymKZRo9UZyWPQShtp0U7POPGj33nlGe0SixOn1eYdxf3PS9nQe76FivbgqRl4RWXRSqQXSkfg7WPx3qz9BOsTOehYZtZRVkGt2ZBKJfF6rEGPu6ZhXJgFX659SNev+pt7TfnBOKklXOeRJrz7dT4CdlRmH8PJWleR8/Bmr+jEr+UeJTbzxouw11I4p60o/AaC1LpSax2dZNNQMmmPO0oZBcX8bOdiCEpVpA+EOdIhv73GReLl8X9ibJIv9ZftHI3t+PI7VX9WPx8fXzsJPlrZp62gXnvw7lMjt+gBRFhcIfXjV6V3db51CqUth89e6UH3mf8tvbbU1fmhAlk5ep1zY7kIJms4rW3MXRn1RKBeM6xwtqCFAnEO5Bwa16HCW/sz7CVCiSYz2c6A9aWGbD5NQLRrcLU3Q2SpN5mTBxJP4gX9FfcTXwom9eVWJBONkMWF5RFqMriqEBY0Q7d575rHNKvf02/RcN7QJW9oHK39fgyW8tLolsUiOCV1w0uj2YmtXhYiFc6EY995+GJNO/xG9iM/OhOCGTPm0G7F7BTS5ix5ks/vstm5oVAhp0cae6zezQGCR2/K31FgXSbIkjnFzru1Xg/XfQwte9TIpCHoUXWxZJlQUfLIhXIHfentl3H+Ouub2aKO/Kah2lz1mJnue4872rb9tpMh/tx5RYFIrriWkIg82Y+914SrkBlzu9Qr3SqH+TI0Gvqrv3orS8E0mLN6M4eYFowmGLtFMhRWPlv72xeDAuiX2Px8r16eI0FCQaMnhDI6Gn6xBiLvwmh6XkxCxLIAGD9wFv+5m4XehdmsVhZiJulykK18MVBeqnDq/fLKFcau6SLUrmaU5F+T9qieeYkqqt9Z1gJeWY6vEGBpDHIm7tzigYd7nvNWLsyeZWNn1EoZGSIvSN+ExdF1PekQLxmzMNp8z3P223srzOjp3x/kxdIYKfBSsv7XlYgfS8disz/mjEIeR8UpJOqXM5pY2TGXtLFYgdvv6rgqpPeMkoFEk9M1rGdxRKMzLLwTqR5Bw+sIYo7xqigpUwF8lwgJ46aItHGDGuU9FsK4xgvqsva7rHTPwySgz77rq/69QVCOs1bdgw1mbZ2VX6X7ype+Mx7GKqP3WyrtROjY7XLVDBWpyGjdiUQ0RFQHdnVaqfyy0nNeU4D/aReTTuTRTp8hb0eiAERxmEO+USZIRDSEyf6csywnDhx3VgsIRBxwOe9TS+9MpJZLHainWniVnbMNmUpmoGByD8rRYsfmRhElIXvKItVcT+IsDbVtCHY5ofC1aVN9/1xcrcq5eQuUBAkBUrzSfMcV/qXtSD1vAWRnna1IXJHFPRmIlDJCKTmrlbWtBvmp0ctLxUI1ZnHsbAGN9BBDVNXtZ2YTb+33TZWr1jbubB9HT0QS7+PNYkz4TfeJ4O5lrkAOLEg9J40r3JPyOjFlNxb/mMapGuFmgKhuczhsnO0jVBGIGlZiIrbcZaFLRBPdrn4d9oMdN/eWISxfUsY8F71Z14f2s7i4+WVKL08IO9Wxpu4BOKwIOF6XWuNvPpmN5X3qN6ZR4dMobDq18swNBtQz6tvddTaT3KwPHHYtiOKub8xTEi48Ndl0x6NhXvhr7rN2IRJj/2/JsOCOIP0REA7ATvrlXw0vkYgwvhIgQgbUTXmuGy4sNPzHqyZQKbyZNfiT8yNcrxed5STNNcWxGpaMgIJJ7wsSJcFa2McZWEJRN57nvKz+vyiJz6+v6T7O+f+ixes1fAJz3BMrfKiU8n5W7AgDhdLekE82XXfVPcmzLpYs3x1vDddDOpxl3moWyQd6gRMNdXQrHGViB+XVHm8qBoju90Gexnkvox1EtM5nJvXtFar1Zv4ca9lMjYDmdyI+/dZEC6QB6PazMX1Jz0mvCvJm7pUK+d1tcXbmUDmesS7pGoJhLyR7rJjZaG+Kzw9WJG8/iQeJ2cX8rlSNODfrRqfB39mjO4xxi6Q1aDd2KT1M10sfa+eXpnPW01metuF4hj8tDRikSk3H/eqB1zecPmbsJodwPAo3AzSvSFLO4wQ/hU/Tt3M7zLPY8t/Wuf+cGRES0f2/SzkkMj2lQKhvEA8p0CGsbgfodU7x27Jjv3oqvtXOyuLpe7nWJeFGoJzJAZR9TxspjWfFXwoviwZ6tLyo6DqbyirA9uC3BpOF8udxZK3qtRiNarqEsiT7z+MFGXx/0JXEFJOcNwx2tz0hrM3+nOzRgZpsMDHr1gnVF28HlxpXh6DZJcQ2THRjG0GpkAGaQxy+CALMlGdjrwXMjYE0uDOlCX1TBbLK0UiiArvNSzKUo9quYyiuFJdFnQii+WABeMP3W53yATa5bCXykwsVpav2U7Z+P7GeFr/9ZVB7iyWYUFG+64a2FS1WpSgo5MYdqH0co3MwqggA56uGntOgfABRfYIn+BeVnce1FdtLYysfpDmA2WD9PQrt0enwEqBkEsgj9cLJO9iilNZMefyoIea9LaBQyBTM8XGiSxzZAtEvaeoLE4KpOPoZmozyzwxrvvIHNBbGPQuXfwCF4v/sqImiutCWbUfWjJET26iVSh3OefMFIjXjV4Dr0Ag3qEW2Gnh0oqPagnvja5iV0dhy0+CypxAWmsRtotgOJb/sZi4QUcsCF1qQYiyAll1U6rq+mnInKH2VGWx6BD5K8oLJJ0g0K+bAumm2VnS/SBJWXjusjgpkIO8ISqzEW9Umt4YW8wqgNHFurV7XQc3sxLQEQvS5JMsUoFURNMxqXUMFViF0s705mUE4k0zbW6/WLjsX1Bj2qjqsXKeY066eHGbpB8zAmmKfuB1z/xsj9XM0hGB0LssyOBRxCBGNlrHIHzs2TZUaV5Sc1jTfhDVldlTKmMCEuMQlUD2/mbkZWIQoyySsfZXzSgMjYVf6E1McGChSpJXSRFpXsf6Mr+4DSHW7JvD3btDQyAtFY1oCzLqi/4pnoJXuV6rULo5FycjEKuKuwVCRsvMjBvP5QYFDsIo8dziaV4gTZ5R2zaZyO6TAIYP71uVvMtiEPLGo9N5Gy6QQXvNr7g2TZmpNO/Yjx7JU8PdlbFt5SzIzo9kh2WVzz9MBMKOPS9lEya8LCKjLK4ViAzS1WSYhrqDm+fAdYW3G6STyN+GrZeJ/2IIpOFHQRqDqITT8FVkWavPI6NfTZTQShkct0CyXevZG56fydYSamy3yO5KyQiEz1mdU14g7JPcP2S+zboTiO/uMs2syD5ITiDTschxpxZk0PYz8/ALBNJtcwNQEIM8SN8p6SgMqn78pAVCiTme63D+0XSx9sZiVemiDURJWcguw2qywsx5AiFlQV4P/c6+FpIIOVRHTNPLrCQjs45EN9UFYrhY4QsfpMl7FwyBaH/XWElDuqaPrFyiUcbFGqe5LYdA6GiLlL/ZQY+X/Zy7SYtekDUvpkD45LqG8MksC7brlISyQtZYTxqhd1gm/pZbIM20WpgWhHdbb07GcnyBFD/q8SuOjcVxVBYrqWppT/o4lmowLEgYSV2wX6kZHkogpXlay2uZm6zLgi6MQabDVudxV9tW02V/xmIloINwBUJYkFQg686dmmC2fmmNeN1o6p6kGrkKhbXCh9e9nVrkvlq+pc24WKYS0hvuaIqCDm+JZ+w8hrwEJ53Q1ochEGKtsUyOZYN03dI2+do2PJ9VG3lFApk2h3NjEJIhEDF1ZXzqLvJ3xc1sPwjNjaEmtkC8jjxpLRA5R5lnDcsLP1KxOhcI//yImcG6JRAy5vhVXveXB+nWlPZosb0Leaq9s+ULBXRkw0g3LhB+/W+vKz3QP5o3DqQij213NKrzILenLcm4gNTFYjdwRicF4rzhmY+F/Tt+UlXV0d7n6o2WHStB9mz2g9QD7U7vHWosHRqRXOKh9VQoEJHQ3KSe90MiEL4m3MmqwVMFm4rnHe0o9MylRz2SWbtGakFe/DiQnaY6kyQtCIk1VJd0flmcIRBWyuv2fPXA3Tfh4zU3fPmhAy/zlfTohtYABPbGvfXC8BZEslSWY7t/C7UjMI3S5LhsuI8vd6masTi/BDSdKRCTcm8ZJaGHFYywsEdO06nXQz7TLTCENa0PwsFjusCUskPTbms/F45DrOZgLJ9bzcqolBMIc2/8Nj//0nhaDoPuxJhdN9r6p+YHBWu/WvdyAuE2OCcQMqfKcDmonssw5m8uLbmbK2bf8FSVnitT043V2cvAnhBIWA6MIF34qaJ5YTp4iWRJnpi3fhNrj+78yfK1n+n06ehVKdvdpHSKkcMbwgXvj8hNhFjosVj5ENwpkEBO0ZnsuvYHpg2pEbHkzGtSPnretlfNru8b1ObtOLGNz90SjVq1dFacdBmfWq1AxyAjZYYoTsfIqDMN1nFwyhg/blVqNBEIzdvV2L5GStK8wslZb9o8ETVJ23R+v3uxGFLQ8uMNvyD15tF63f9QgegSUgLZsdsk7BYXqLo9Ny8Qbi3KriBg1OQm9G1cSgLDdj1HuVxm/yuzzjOErik02oLQGRZEZDif+Uy7Jjk2Ehk/t0Uyh7i/wRc7sIVuVBBSeVSujfZ295Zm9bvPq6oYL3aXzUClH1RGtf2UrLC1859PZmzEAqNKIMoSi/m3s8C6enO4+5uSb1+HUqu2XDFGWBQ5pHGRKLM5IrVOMi+Lct1B+0KBiPMcyJ7Tadw+qN6ku2giDebUnhhpM366pQXkTmyC1Ns9F33w+aGnQ2FXK7urNYq+s1urHfJfW9oPA+dqiGK6r0zPh81m82D3u0/54jhvY+OV8b7zdhgZ5otSx6vZOpgfPtzdpcEJPTU56aGeZuZI4yO3Tj56fNDLUDH71Kpn7ubzPs1jDBrPjUajlYZWVDEzXnzFq27+i3oPzwUJVnreOdLR41qte+zMg2f5Ld3AEDthj6mjgtB5dvou3+v4FV1/WMpv0kZF+5U5Jzrc+8vw5Pel+/Yc2eoxO0r2zE3qHBN56UNu/uldE09ugXWz4jj/RiUhJ118ZOe+NlRUQ4widL6Hii0huSuo80woW887zYtq2tU3mU60CXRtWRJd9Am6uvx+WXnQR1w/XfEJuqq8z7U+ZF0hFTbPVHjwawzXBRX7TNnQV/r6458DFwvmW5kyKhDQ93CM6fz30PdvcelDP4dABAAAAAAAAAAAAAAAAAAAAPwI0E91AnTR588beUY/eecd/fqVkX6g+5Dt9M8NAqCvd2J0ZGgN/cwlnhsYSR8lAPoJ7lJx83OkLtFXqwL0tWsYpROqrEG9Z4/PvGZI1odsC0Af9J5zjuCsFXTsm+ijBEk/XQNyqozda+l9q4aUHM0QnZLb16ilyR5B9C0u+1tVALKWc3faEDpWDU5eO32banI1o+HQva1fUK/bk52o16sU1Qqz1aHkVmWvc9jvnjyf0Nq976vQbPUdZXE4WiqHuWYVqA+NW63SWdaBuh+2Gqc6Sr3XG5mvBavk9A4fY8JzS10FA+sSDrvtwV7TjAr9jl7v2NyA8SgxHNNW88fba/0tt/egusxxdr2ewF6hNWOS9dN6s7e/X0xCV4i5OGMPuyvWkSE76KAMuSK7T1a0etuG+lP1aNI5Jqpk0nVydh2xTlSuXpSbPfsCyjX/pURHg+zTr1JFbrlO+mysOsen8qebmXyUEEthvdLs9xr7l207NvY/EMUcucry8Nhu5ByP4NgO6uQto52exP3oWnnre1NYIc8ViLgfwWBa6bYea9U4t1i6QTJV/WMFYjJzLSQws9+z1AJpGisCPTt2YXMJ5MWzBeJND4dutzls9fjGyPMFvwGxuRYRjcyVhLPsq0cwlyvqqK2ChdKaOSHUPkogwX73UrvfztqbOL+PkNEU7P3I2sx9MB7u+XoScc4fKR0TiFhYUNvgbX6NwR9WIOdZkMND7X5eXawje1uX2cvzm8sZ5xaErhRs766QxrUC8VZiuzFxvQs/GhxpUbVAjD3glEDu8tvaVO0FEfhmci8F1107dzkSYy9tl0DCSVKN3+nMra1TmFS3fDPbVnM8SNa4ENPz+UYi4kGz7vW2yVox7dfcqg1HLQhfxEI3TKXY3/0w4QeZuzA6g6NUILvlY4FA+pltztqrfa87KnKAWCWM2yavDve9SCAvxfVoawlk08mwsQRCpkCmsd5+qem7NmLKW5CelxWIsd/benv32BtOc05TsCw0TzV/0ihg4hKI4WLZ39H5KBer89jotPrN7mE6auUXNXO0QR21egwr/U7d4R8ctSBhrDZlJ7EMcsvtt39nC/LmjDQTgdBMrtITqMVu7aWm5y+710av1eyOR4E7WCPDgthod4UGKaxQWsbT5BCvhrAW9rZGd1bp5ax0tdiCcK+3qVvy/hkCWQc5gdB4XB/xPS/nRj3IrgrJ7FOlQCBV3Yo0HlrWZ6snLYj5LeH6I2OQZGnhbv6CXAKJW91yUY0+IhCxcvyL9zabzaozuendTBN+V+uR/pfsu5yNC1MLYgokt1nBIXcHC9fZYBZksXvY8b/ix0NPr39WaBziTDJZ5seGTEQiGDf7JRKB2Cl8vmtAoQXh1Yp7wBRG5gqjxQJ5pJxAkgNzgRRktKhr27msQPiFTKOMS1u9xMXSC+e9UyDT7Lqir9YLYsvegdhGbzAaqG31Ar6BvSoLV2XLCMR6V2nDVzjuuYp+8P3yVnODWZvJdma+MlTJ27GohYlASAmEV6fuwBIIWd7UEevoyGKJjxwTiOtAw+Jlz2b+oplhYQik32fFXPXXvLQHMjafj+Sy8J2jKxpJgUR6aWx+o1iDx25cahiKLQiJtTvfjlgQYdf8Z73vaCUrECIuEFINBI+I9DJ6ZOSV3i+Q3vFlE5WChzWVPihPHqbsDHZ8q7bCTr68BUm7A/oi0GqKDRfZDWjfp3w/C3LiJrQcFmSVWpBgeDdJzAYXSGF/e3LHSKdeF3oX58xnAmMHdebP7tJnLc9a/kAaDBIWRKkxU6tPBOlmNoFfBKkNXqtyweFTFmSblrmmO003Vku3Wcumciho+4sSOQVC2tkzKiK/W5dZEPLmHyCQvnRhle/KAv+JFTQqX+PBj2XI3vAjvsT1Tu5lWGBCSmbqL9PFWOWy1xmfxJf5zvFHc5Uy8fk2pf7EeKmrrEDGgsh9BHorvVtE1sXKBR3ksiCrD+kHyVmQ9KtnfjzPEBvry5sC6Y4qgkPlwL70hT8KTwhELyVJ/Eaxwr1frcYvR5pa4/TmbqunYxCmj6UKzmuqlhcJhNVDl4vFE9UfEINQ2rTxvde6rpJMthVt86pPWiAFFMUgJK56ZWxkFYX0g+1wOIhjZk966yR5rW5Nt11tt3mOr823WlYCGduNr6rNrW6XdwQw5P/sx0E+DuycGWVdLHL2iZ0WiKgfLXKb9BNBOl+sdhz5E/4z2OfqdfOEQKzqomKQIoGQlcTjXuSMigQy4Ev/LuRdnU54spMcAkkach7O6lY+3W6g+3FBurq3OkjPbgPGznrGX+iqmqAtiHeOBTHosvbqIfngvCBM+y4hehLYPfAK+ar6yyjXLSZ2AmMCoa7c1suf3L2x9rviTvPa1NUxX5OOr8hfG91g04+zIBdlsVp8bygSfV0XCiQKMolVLpCB3nmwmu5DWM+Zoo7WV6YwhEAOrMIvt77YorPe1htJ5QRy1CNmFj76EIG00hLiOkyf6Y2NWFzON/UZlUd3/ow9CU9bkK0VFCabPPCORSYQGeuzdutxZPIDdKqPYn/K07yjKK5bTcS4VquxRm3Gfgx4Sa1VN9SyK7txLxBIcV/Y2BnQFgx9+UCBbFlN74o9NN+yDI4LZOY5BOIM0nNs/drENTiD72dHbT96Jr6XaC18W/N9od0CWb046KY3cPYx/SAnIvSxn0vW76zn2S1bKfsBj4yK8WD7vUeO8x3YMw/wjbfYd/mt6UUMwmXeqomwI1p2VEdhM63bTCCdYZP9cZCMO6v58UMOc2cz+lALEi0yRHbFrov+jMSfT7YvptNB+n2xQKaGQBxHGkX+8FVs55yJZJUFEa1qh/l+xv7vOYGMj+fsvfsPEIhI6DVVqoEPv1EP+9cLpJQTSJIs2hwXyPcNRsh7itntFBXyKcrcWEqyWGITmvilH5LuBxmqfbult3Jynz5WB9bOVJr+5Ks1boQZrqX1wv5CgZwaaiJj2cWFafZmbv8QQyD15wWzSVwgwWAQJt2bhlh6/rpUj+RGJpQTCMnRehWeh4p6ur+1nQ/SM4PMye4GuvsoCxKoTiYepMveJholAgmUZCb+XD6Y8o5CkV5oi2EB2TMIuOdhIk9+GvvxQWy3KLpYOn70YPW5tA7fVx7kBTx9q7Z0evY3AyuHkViQqt9ep2lekk5QPb2Zo8IpV3SmQBbH086TCwXS7mZo2wJZxHN/spV72HhHR/2a19K02kZKBDJ8Clpic52q6CjcF3Rybf0Hohc/HhRlsWjQ4U3RjFnryevUy29P+2zsnJ7tSCLtEHyUQFJrrg83MjNzopZsVEqS0izWUvd6ZoP0O8fpPnBfWmy3KA7Xy4yF+wFSWa/+uqxdmlKV+Q/2dXELwl5pjUUWi12WHovVSitAum/4EYWcEAjNNyZr5v9YL1Tp0hiE7K5LOwYZ+rulvymv+d7ol1qQhtm+EKtJ3aXc6DOqvQVekUBIdKQ3xeaCz9miFwKZtnZcHfHdwQsbPNyrPnZLGYHs7KO6NoVofJRAjLKYqIeT3GbFmzRnr3rSuUAczUzgzmL1+e2MEt9+rvvIfhR98ELrpUNNmLHr5GKQnjxTe6gJr9ul5M7E5OwhMrp56ZhA8s6/cw+2iwSSnVFoCSRY+GM+1ORNbdxmVPijhZIRiHLWmfd8YEfqhbKj7s6rdw/dRt6CzPyJHM69DjLFzwUiE1TVhsy1Bx3hJs4zAqkdbYs+ViBHg3SdlucCoUQglgWxhcwtiGWpJeGDZwhkbOwkWVTs35b6hpWBzHX3pX2O+i6BeDmBNOQIKbk13oLX11qesRWD0DEX64PTvMdH8+79rRyL9XKq79whkL3hhQYtXo/nXR6Slaws1lumrSduc1/VQToOCxJO1rXWiJXITsV29c48OmQEwvy4XoZsjXr9KIFM1faGrJD6at/DQyqQzlIQ+xP5oKQEQgXzOVz9ILovORHIqz8JLYLvvFrLqO3HT2aFDOZ+NDTmHxdbEJ6ZVM2IvCOuFH3zrBjE0dn3boEcDdK7EXN8l3x2XDhpqYEVKfUzg3QqDV9i3Qnx5hCILT1mtSahSkytR44YZESyjvj+fVPdjTAbg1Tzl5XdS/vuK8Qg3XwMssucRsCCq4Uox6VLIEc6Cj0SQTp/MMle3Ov3TWAN2lwOVoXkLzVPWpC33oOxF/KE74fOx9G1rZlwC6ucasxFX9XY35VhYVh5G5trNuOokhfIUxQPLxfIOjufap0KhIVaVVKjecf5UWnTEwJZaTWL0ZUTKYREIDMuEOm0DrK+WC858RdnkC6v95UdstoLnGne9UmB0OrbCKQlb2vsb8TPlxK7oTPDxXJYkMIOIm1Bhv4ZAvl29oQG1eR60wr5tPbjZlYg5NmjeXfmtOyRtClMIOVsBbYEUtBRSGb1O+QFkvNL39VRSDIV1DWn3Gb8wtEJgcyTM15M9k8qzctOJmCQEEjAnINWJgYZrP0k0bDK1mBTIOSVWgs/ecESyJPvP1j9zKNFzoLMjwrk3DGA7LJiBQuxIv3YymLpGEQdrqri9esFcrAzvOZtIu/bLgfEfaNxWynUmA/Ch9ZEcrRDmsXidsNTWSwpEFYd5n1Ka80wLxDKCKSxtLlnfzh178MFQkmQbqx+xQSiQkN6EA24FIg9EPiUuysEEieFVSmpNC/pxq8hXKyXfBaL+a7p9L96bGxyzo+lBaK/P+istZdlCYSHA3YVaWcEQkF80oLQqWWQiE4E6eLT4XAgBTKWe5lulAKuF4gt3mHkP2YSKN/QfrCYMeaW/iDnFrNG9VmNkaE+/0VgWpBu7c5ysag0MiqVVIb+UWRBzguBP9KC2MtTGVmsQzwSE6YmF9+1dLBitqPQFAhlBcLO4kX7QkIDHdk0UdaCrNoPLenhJVu9GwIhHl9kIqScBTk+WJHONSGhitDLMkivJ4TJLW1xb5QLpCbGF4Z6mPP1ArEy893YX1LxMkJfmxLP1e94yiFLwGIBFtGO5Gmx6skjhbtckM7qRKgdBpGf4gKxNo+1BEKNul7EkCjdXbZX8T7YxYojBnMKBHGUIl8Tqbeh5xkultlJSMeNSNPXeV7KC+RQqVRGwoKMnsbc9RpYjcikbhR/NZlFYAqkIvtEa5266Roaa8C001mQiQVZ2gponBzNq5PZJ9YDJi/XUWh/YsXTNFwgctxqU5fTeyzIIMkfd9f+IrTcwuCbrpbF0/cdkZTPC8Q7rP1IVtUnOSSDz5HJCSSORHQSqrWRTBeLchakz4cGesHwWZR9bz5X97IdfKwFoeh4j3yUtFTLXGU714Iszey8EYMUpnn5aI34YJb2IbZyIdqCjPq7quoOmeYtCLcOu0w9zlmQ5QmB8HMfj040yObcNT557dV8rhbmCoUHJPpBmHMl5pWPirNY5wkkXLR7gTi3XuS362Zj1a9GUfXtW5kSVq03Mjc0PgjY1TXkIzE38GnBXc3hy0bUqVXTS4N0bzqVdyhQ/mhf+cWpBVHFYAiEqO23Scyx6fH39tS8n45vep/NdOpuOkf+UguSdHw02snDbbWRPE5aR6dATjStUiBqqAhlBOLsBxFvYt5CNLT7h5l/sh47g/RwKOcUVBuDrEBW6QhqfaBsDDI4OeWWeKKyd7x+lI+1MdPEwxqrIP3VjwOZNn+nBeE57vVr3QsejOGagkc+EaZgobWvQ7NyrN8hTPpkq89lKWQ+H8Qs4qmquDV+d5IYpCCL1VKVeSETnGGs/NWtOaxdCCSzDBFdFYPwCrrxl2ESE/O7nuH+aguSTCk8QyDi4mPHej/sdm3qWkFJkK5+WXls66nvhos19jNVz2FBnk8v2sDj7xOXPjDmlq5mrLKaz0c6W9bWWawnVlqjSAvgHQKh/kwM2Zkzx95yqA4RT6024+h7jV10dsx1o21nagS+91YbOJS94KNYNXFaIEkcYggkXAgDwucxi6KhO3F3Wd1dG51meReLUhdLdFtnV9vY2a+k97TOewNqqoZWxAjwVTfri1wtkEmQZhyPCETqk0S0lz8WayQnXYcF0VXidZ91se4ck3gzAgkmpwXSU9Nw6FSeUzc1fDRvLkH8JkUvx2LN/V1HJy/oPQJhlW4lV8ujjO7FWlPPVtv03QVSMl0JdhPM5aB4HY94ldjrT/K1jazJHkux6IZ6L2vsSWc+TC20VKcZyTm0j/lFG54TCxL6J9BNdn3Ph8Omdoeedjz5uXrKCYTCtoPhCYHoeqpyE0ogS74mx/3a34jlOKrqdAbbzDpByd1d+kk+vea3xwWkw937anlOq2ZnBNI7Y+G4cOlftLCr7CjMjK1iPvMkSATS7Zba/oKyFsRqvZgdarXcDRoTiJGtmvLCil5D80rvZB0YCpHRjyIQ+0ReWPm8PjeeJdwH4PmTcsxtA3lFQ010RKEmGk9V5QpiPb93maZNm0UV/zKBHGrcD7+zB3qEjTW76ztjcfKlP2G+o/OY/aJC0Ge4COVa5yGFWz8uyQbVcTrkVRbMq3YLjnh3ay081otqLD1KlTidG+4UCAlLfVog5I22IpYprGivSSO3kw3dymr5XmXDxsO5QC9K2Usdz1QgJxImyVicKDNTb8pN/qZlXGxDVpe9e13o7yGQfK9l11lveZKctAWZbDaTBD5Muqn9qFi527QWBoNYvKkcnHHkt0vnCcSrG/Dhc+Uy+8vQr4nF37bCi+3mawUfpDQJMy5W4JrAejhlQVSBNn2ePa4ph3O32+80+91S6rUS+Y5p93o5BNa6nCsQXvcdAy9sC/Jwclq9SFEE6zg41gxPTs/Naa2ZAXl8nKcrmyS3dpkEVNcKhLU3XOnGWt9Psd8Iw4YfT38kC5KtHdvJmg83EP/Fm61cS+qumkad5SSDTmYMEuz0gEfuqMkgpKMXB2Eu+ipMVis/UA4Rg1xwT/Z+9DB2DpTuzsy5HPeioC+72U17YYeQ14C28D/EWCxKZ/jJIJ0n92pH0vfjWUV3KdRzSN239YSLhnPXiIXZDzK0Tq/w0kq7E678gzX05iU7RlvU5lFTLuWiVtHrxj0vZ0Gexk8M8R9j+pSFHALRYwleI2vAWk+ILWp9JwPiVXa7yjHzkeRA0z4+/eJYvdbc7cLsMXUis5tktFsd2TyXO91AjVhILnpcq03z31qu1Q75vi4yHmQWMOyMPOfWYOzk+8a73zq984JUU2JJmLIU1b45HKrbNupn/LLD3V1QfCszPcS9XWGNfd7p09TT+62j7Wqp5oNlcnrdI5f1NPOr54/xL+h7l67z9l5mcXhwnbzhcbX3XHN8irtga7Ve/s6Ma9ZJjl+q1Zex97ND5J216JddP8yPvGuPUOuYrg/TBUc4/YbcN9GRnXAu+cIzd73zzqyA2fz29rK1dE7vSfrRG6gVjRb7gXZFOPPMztqflM6qHx+z1iRlKus595beeYPo2sN+4Oi7C/YY7jTPPhwVtmkfdk4nqlD+RH6hDaMBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCvyv8HPl+MvjJrLlwAAAAASUVORK5CYII='\r\n\r\nexport const ERROR_IMAGE_PLACEHOLDER_EN\r\n = 'data:image/png;base64,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'\r\n\r\nexport const EMOJI_SPRITE\r\n = 'data:image/png;base64,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'\r\n"],"names":[],"mappings":";;AAAO,MAAM,6BACT;AAEG,MAAM,6BACT;AAEG,MAAM,eACT;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor.config.cjs.js","sources":["../../../src/config/editor.config.ts"],"sourcesContent":["import { EN_US } from './i18n/en-us'\r\nimport { ZH_CN } from './i18n/zh-cn'\r\n\r\n// Delta数据行太多超出该限制时,加载会比较慢,需要提示用户\r\nexport const BIG_DELTA_LIMIT = 2000\r\nconst localLang = localStorage.getItem('lang') || 'zh-cn'\r\nexport const LANG_CONF = localLang === 'en-us' ? EN_US : ZH_CN\r\n\r\n// Image\r\nexport const IMAGE_UPLOADER_MIME_TYPES = [\r\n 'image/png',\r\n 'image/jpeg',\r\n 'image/gif',\r\n 'image/svg+xml',\r\n]\r\n\r\n// 常用文件格式\r\nexport const OTHER_FILE_UPLOADER_MIME_TYPES = [\r\n 'text/plain',\r\n 'application/json',\r\n 'application/pdf',\r\n]\r\n\r\nexport const AUDIO_VIDEO_UPLOADER_MIME_TYPES = [\r\n 'audio/wave',\r\n 'audio/wav',\r\n 'audio/x-wav',\r\n 'audio/x-pn-wav',\r\n 'audio/mpeg',\r\n 'video/mpeg',\r\n 'video/x-msvideo',\r\n]\r\n\r\n// MS office\r\nexport const DOC_UPLOADER_MIME_TYPES = [\r\n 'application/msword',\r\n 'application/msword',\r\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\r\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',\r\n 'application/vnd.ms-word.document.macroEnabled.12',\r\n 'application/vnd.ms-word.template.macroEnabled.12',\r\n]\r\n\r\nexport const XSL_UPLOADER_MIME_TYPES = [\r\n 'application/vnd.ms-excel',\r\n 'application/vnd.ms-excel',\r\n 'application/vnd.ms-excel',\r\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\r\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',\r\n 'application/vnd.ms-excel.sheet.macroEnabled.12',\r\n 'application/vnd.ms-excel.template.macroEnabled.12',\r\n 'application/vnd.ms-excel.addin.macroEnabled.12',\r\n 'application/vnd.ms-excel.sheet.binary.macroEnabled.12',\r\n]\r\n\r\nexport const PPT_UPLOADER_MIME_TYPES = [\r\n 'application/vnd.ms-powerpoint',\r\n 'application/vnd.ms-powerpoint',\r\n 'application/vnd.ms-powerpoint',\r\n 'application/vnd.ms-powerpoint',\r\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\r\n 'application/vnd.openxmlformats-officedocument.presentationml.template',\r\n 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',\r\n 'application/vnd.ms-powerpoint.addin.macroEnabled.12',\r\n 'application/vnd.ms-powerpoint.presentation.macroEnabled.12',\r\n 'application/vnd.ms-powerpoint.presentation.macroEnabled.12',\r\n 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12',\r\n]\r\n\r\n// Compressed files\r\nexport const COMPRESSED_UPLOADER_MIME_TYPES = [\r\n 'application/x-tar',\r\n 'application/x-zip-compressed',\r\n 'application/zip-compressed',\r\n 'application/gzip',\r\n '.rar',\r\n '.7z',\r\n]\r\n\r\n// default\r\nexport const FILE_UPLOADER_MIME_TYPES = [\r\n ...OTHER_FILE_UPLOADER_MIME_TYPES,\r\n ...AUDIO_VIDEO_UPLOADER_MIME_TYPES,\r\n ...DOC_UPLOADER_MIME_TYPES,\r\n ...XSL_UPLOADER_MIME_TYPES,\r\n ...PPT_UPLOADER_MIME_TYPES,\r\n ...COMPRESSED_UPLOADER_MIME_TYPES,\r\n]\r\n"],"names":["EN_US","ZH_CN"],"mappings":";;;;AAIO,MAAM,kBAAkB;AAC/B,MAAM,YAAY,aAAa,QAAQ,MAAM,KAAK;AACrC,MAAA,YAAY,cAAc,UAAUA,KAAAA,QAAQC,KAAA;AAGlD,MAAM,4BAA4B;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,MAAM,iCAAiC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AACF;AAEO,MAAM,kCAAkC;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,MAAM,0BAA0B;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,MAAM,0BAA0B;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,MAAM,0BAA0B;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,MAAM,iCAAiC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,MAAM,2BAA2B;AAAA,EACtC,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACL;;;;;;;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor.utils.cjs.js","sources":["../../../src/config/editor.utils.ts"],"sourcesContent":["import Quill from 'quill'\r\n\r\nconst Delta = Quill.import('delta')\r\n\r\n// color hex to rgba\r\nexport function hexToRgbA(hex: string) {\r\n let color\r\n if (/^#([A-Fa-f0-9]{3}){1,2}$/.test(hex)) {\r\n color = hex.substring(1).split('')\r\n if (color.length === 3) {\r\n color = [color[0], color[0], color[1], color[1], color[2], color[2]]\r\n }\r\n color = `0x${color.join('')}`\r\n return (\r\n `rgba(${\r\n [(color >> 16) & 255, (color >> 8) & 255, color & 255].join(',')\r\n },1)`\r\n )\r\n }\r\n}\r\n\r\n/**\r\n * 将File格式的图片转换成Url格式\r\n * @param imageFile File格式的图片\r\n */\r\nexport function imageFileToUrl(imageFile) {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader()\r\n reader.readAsDataURL(imageFile)\r\n reader.onload = function (e) {\r\n resolve(e.target.result)\r\n }\r\n reader.onerror = reject\r\n }).catch((error) => {\r\n console.error('Error reading file:', error)\r\n })\r\n}\r\n\r\n/**\r\n * 将Url格式的图片转换成File格式\r\n * @param imageUrl 图片的URL\r\n */\r\nexport function imageUrlToFile(imageUrl, isErrorImage?: boolean) {\r\n return new Promise((resolve, reject) => {\r\n fetch(imageUrl, {\r\n method: 'get',\r\n mode: 'no-cors',\r\n })\r\n .then(res => res.blob())\r\n .then((blob) => {\r\n if (!blob.type.includes('image') || !blob.type) {\r\n return reject()\r\n }\r\n const fileType = blob.type.replace(/^.*\\//, '')\r\n const fileName = isErrorImage\r\n ? 'editorx-error-image.png'\r\n : `image-${new Date().getTime()}.${fileType}`\r\n const file = new File([blob], fileName, blob)\r\n resolve(file)\r\n })\r\n .catch(reject)\r\n })\r\n}\r\n\r\nexport function insideTable(range = null, quill = this.quill) {\r\n let currentRange = range\r\n if (!currentRange) {\r\n currentRange = quill.getSelection()\r\n }\r\n // fix: 原有formats方法无法判断表格内的list和head附近粘贴\r\n const [line] = quill.getLine(currentRange.index)\r\n return line && !!line.domNode.closest('table.quill-better-table')\r\n}\r\n\r\nexport function isNullOrUndefined(param) {\r\n return param === null || param === undefined\r\n}\r\n\r\n/**\r\n * omit\r\n * @param obj target Object\r\n * @param uselessKeys keys of removed properties\r\n * @return new Object without useless properties\r\n */\r\nexport function omit(obj, uselessKeys) {\r\n return (\r\n obj\r\n && Object.keys(obj).reduce((acc, key) => {\r\n return uselessKeys.includes(key) ? acc : { ...acc, [key]: obj[key] }\r\n }, {})\r\n )\r\n}\r\n\r\n/**\r\n * 将delta中的图片替换成制定的图片数组,用于图片上传到服务器的场景\r\n * @param delta 原始delta\r\n * @param imageUrls 图片数组\r\n * @param imagePlaceholder 标识是否是占位图的数组,与图片数组一一对应\r\n * @return 替换之后的delta\r\n */\r\nexport function replaceDeltaImage(delta, imageUrls, imagePlaceholder) {\r\n let imageIndex = 0\r\n return delta.reduce((newDelta, op) => {\r\n if (op.insert.image && !op.insert.image.hasExisted) {\r\n const attributes = imagePlaceholder[imageIndex]\r\n ? { ...op.attributes, width: 'auto', height: 225 } // 占位图片应该固定大小\r\n : op.attributes\r\n newDelta.insert({ image: imageUrls[imageIndex] }, attributes)\r\n imageIndex++\r\n }\r\n else {\r\n newDelta.insert(op.insert, op.attributes)\r\n }\r\n return newDelta\r\n }, new Delta())\r\n}\r\n\r\nexport function splitWithBreak(insertContent: string) {\r\n const lines = []\r\n const insertStr = insertContent\r\n let start = 0\r\n for (let i = 0; i < insertContent.length; i++) {\r\n if (insertStr.charAt(i) === '\\n') {\r\n if (i === 0) {\r\n lines.push('\\n')\r\n }\r\n else {\r\n lines.push(insertStr.substring(start, i))\r\n lines.push('\\n')\r\n }\r\n start = i + 1\r\n }\r\n }\r\n\r\n const tailStr = insertStr.substring(start)\r\n if (tailStr) {\r\n lines.push(tailStr)\r\n }\r\n\r\n return lines\r\n}\r\n\r\n/**\r\n * getEventComposedPath\r\n * compatibility fixed for Event.path/Event.composedPath\r\n * Event.path is only for chrome/opera\r\n * Event.composedPath is for Safari, FF\r\n * Neither for Micro Edge\r\n * @return an array of event.path\r\n */\r\nexport function getEventComposedPath(evt) {\r\n let path\r\n // chrome, opera, safari, firefox\r\n path = evt.path || (evt.composedPath && evt.composedPath())\r\n\r\n // other: edge\r\n if (path === undefined && evt.target) {\r\n path = []\r\n let target = evt.target\r\n path.push(target)\r\n\r\n while (target && target.parentNode) {\r\n target = target.parentNode\r\n path.push(target)\r\n }\r\n }\r\n\r\n return path\r\n}\r\n\r\nexport function sanitize(url, protocols) {\r\n const anchor = document.createElement('a')\r\n anchor.href = url\r\n const protocol = anchor.href.slice(0, anchor.href.indexOf(':'))\r\n return protocols.includes(protocol)\r\n}\r\n\r\nexport function isInside(position, dom) {\r\n const areaPosition = dom.getBoundingClientRect()\r\n const { pageX, pageY } = position\r\n // getBoundingClientRect是不考虑窗口滚动的\r\n const left = pageX - window.scrollX\r\n const top = pageY - window.scrollY\r\n const {\r\n left: areaLeft,\r\n top: areaTop,\r\n width: areaWidth,\r\n height: areaHeight,\r\n } = areaPosition\r\n const inside\r\n = left > areaLeft\r\n && left < areaLeft + areaWidth\r\n && top > areaTop\r\n && top < areaTop + areaHeight\r\n return inside\r\n}\r\n\r\n// Internet Explorer 6-11\r\nexport const isPureIE = !!document.documentMode\r\n"],"names":[],"mappings":"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"}
|