@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
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"work-item-link.es.js","sources":["../../../../src/global-link/formats/work-item-link.ts"],"sourcesContent":["import Quill from 'quill'\nimport { ON_WORK_ITEM_LINK_REMOVE } from '../constants'\nimport { createTable } from '../utils/createTable'\n\nconst BlockEmbed = Quill.imports['blots/block/embed']\n\n// @dynamic\nclass WorkItemLink extends BlockEmbed {\n static blotName: string\n static tagName: string\n static className: string\n workItemData: any\n scroll: any\n\n static create(value) {\n const node = super.create(value)\n node.setAttribute('contenteditable', 'false')\n node.setAttribute('href', value.link)\n node.setAttribute('__work_item_data__', JSON.stringify(value.data))\n const table = createTable(value.data)\n node.appendChild(table)\n return node\n }\n\n static value(domNode) {\n return {\n link: domNode.getAttribute('href'),\n data: JSON.parse(domNode.getAttribute('__work_item_data__')),\n }\n }\n\n constructor(scroll, domNode, data) {\n super(scroll, domNode, data)\n this.workItemData = data\n }\n\n remove() {\n this.scroll.emitter.emit(ON_WORK_ITEM_LINK_REMOVE, this.workItemData)\n return super.remove()\n }\n}\n\nWorkItemLink.blotName = 'work-item-link'\nWorkItemLink.tagName = 'div'\nWorkItemLink.className = 'ql-work-item-link'\n\nexport default WorkItemLink\n"],"names":[],"mappings":";;;AAIA,MAAM,aAAa,MAAM,QAAQ,mBAAmB;AAGpD,MAAM,qBAAqB,WAAW;AAAA,EAOpC,OAAO,OAAO,OAAO;AACb,UAAA,OAAO,MAAM,OAAO,KAAK;AAC1B,SAAA,aAAa,mBAAmB,OAAO;AACvC,SAAA,aAAa,QAAQ,MAAM,IAAI;AACpC,SAAK,aAAa,sBAAsB,KAAK,UAAU,MAAM,IAAI,CAAC;AAC5D,UAAA,QAAQ,YAAY,MAAM,IAAI;AACpC,SAAK,YAAY,KAAK;AACf,WAAA;AAAA,EACT;AAAA,EAEA,OAAO,MAAM,SAAS;AACb,WAAA;AAAA,MACL,MAAM,QAAQ,aAAa,MAAM;AAAA,MACjC,MAAM,KAAK,MAAM,QAAQ,aAAa,oBAAoB,CAAC;AAAA,IAAA;AAAA,EAE/D;AAAA,EAEA,YAAY,QAAQ,SAAS,MAAM;AAC3B,UAAA,QAAQ,SAAS,IAAI;AAC3B,SAAK,eAAe;AAAA,EACtB;AAAA,EAEA,SAAS;AACP,SAAK,OAAO,QAAQ,KAAK,0BAA0B,KAAK,YAAY;AACpE,WAAO,MAAM;EACf;AACF;AAEA,aAAa,WAAW;AACxB,aAAa,UAAU;AACvB,aAAa,YAAY;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":["../../../src/global-link/index.ts"],"sourcesContent":["import Quill from 'quill'\nimport { getEventComposedPath } from '../config/editor.utils'\nimport CustomerWidgetLink from './formats/customer-widget-link'\nimport DocumentLink from './formats/doc-link'\nimport WikiLink from './formats/wiki-link'\nimport WorkItemLink from './formats/work-item-link'\n\nconst Module = Quill.imports['core/module']\nconst Delta = Quill.imports.delta\n\n// @dynamic\nclass GlobalLink extends Module {\n open: boolean\n wrap: any\n panel: any\n quill: any\n\n static register() {\n Quill.register('formats/wiki-link', WikiLink)\n Quill.register('formats/doc-link', DocumentLink)\n Quill.register('formats/work-item-link', WorkItemLink)\n Quill.register('formats/customer-widget-link', CustomerWidgetLink)\n }\n\n constructor(quill, options) {\n super(quill, options)\n const toolbar = quill.getModule('toolbar')\n this.open = false\n this.panel = options.component\n this.wrap = options.wrap\n const globalLinkBtn = toolbar.container && toolbar.container.querySelector('.ql-global-link')\n toolbar.addHandler('global-link', this.handleGlobalLinkButtonClick.bind(this))\n quill.root.addEventListener('click', this.onEditorClick.bind(this))\n document.body.addEventListener('click', (evt) => {\n if (!this.wrap.contains(evt.target) && !(globalLinkBtn && globalLinkBtn.contains(evt.target))) {\n this.open = false\n this.wrap.classList.add('global-link-hide')\n }\n })\n this.panel.wikiLink.subscribe(this.addWikiLink.bind(this))\n this.panel.docLink.subscribe(this.addDocLink.bind(this))\n this.panel.workItemLink.subscribe(this.addWorkItemLink.bind(this))\n if (this.panel.close) {\n this.panel.close.subscribe(this.closePanel.bind(this))\n }\n }\n\n onEditorClick(evt: any) {\n if (!evt.ctrlKey) return\n const path = getEventComposedPath(evt)\n if (!path || path.length <= 0) return\n const linkNode = path.filter((node) => {\n return node.classList && (node.classList.contains(WikiLink.className)\n || node.classList.contains(DocumentLink.className)\n || node.classList.contains(WorkItemLink.className))\n })[0]\n\n if (!linkNode) return\n\n if (linkNode.classList.contains(WikiLink.className)) {\n this.handleLinkClick(linkNode)\n }\n else if (linkNode.classList.contains(DocumentLink.className)) {\n this.handleLinkClick(linkNode)\n }\n else if (linkNode.classList.contains(WorkItemLink.className)) {\n const tableRow = path.filter((node) => {\n return node.tagName && node.tagName.toUpperCase() === 'TR'\n })[0]\n\n if (tableRow) {\n this.handleLinkClick(tableRow)\n }\n }\n }\n\n handleLinkClick(linkNode) {\n const href = linkNode.getAttribute('href')\n if (href) {\n window.open(href)\n }\n }\n\n handleGlobalLinkButtonClick(_value) {\n this.open = !this.open\n this.triggerPanel()\n }\n\n triggerPanel() {\n if (this.open) {\n this.wrap.classList.remove('global-link-hide')\n }\n else {\n this.wrap.classList.add('global-link-hide')\n }\n }\n\n addWikiLink(wikiData) {\n const index = this.quill.getSelection(true).index\n const arr: { link: any, text: any } [] = []\n const delta = arr.reduce.call(wikiData, (op: any, wiki) => {\n op.insert({\n [WikiLink.blotName]: {\n link: wiki.link,\n text: wiki.text,\n },\n })\n return op\n }, new Delta().retain(index))\n\n this.quill.updateContents(delta, Quill.sources.USER)\n this.quill.setSelection(index + 1, Quill.sources.USER)\n if (this.panel.autoClose) {\n this.closePanel()\n }\n }\n\n addDocLink(docData) {\n const index = this.quill.getSelection(true).index\n const arr: { link: any, text: any, icon: any } [] = []\n const delta = arr.reduce.call(docData, (op: any, doc) => {\n op.insert({\n [DocumentLink.blotName]: {\n link: doc.link,\n text: doc.text,\n icon: doc.icon,\n },\n })\n return op\n }, new Delta().retain(index))\n\n this.quill.updateContents(delta, Quill.sources.USER)\n this.quill.setSelection(index + 1, Quill.sources.USER)\n if (this.panel.autoClose) {\n this.closePanel()\n }\n }\n\n addWorkItemLink(workItemData) {\n const index = this.quill.getSelection(true).index\n const arr: { url: any, table: any } [] = []\n const delta = arr.reduce.call(workItemData, (op: any, workItem) => {\n op.insert({\n [WorkItemLink.blotName]: {\n link: workItem.url,\n data: workItem.table,\n },\n })\n return op\n }, new Delta().retain(index))\n\n this.quill.updateContents(delta, Quill.sources.USER)\n this.quill.setSelection(index + 1, Quill.sources.USER)\n if (this.panel.autoClose) {\n this.closePanel()\n }\n }\n\n closePanel() {\n this.open = false\n this.triggerPanel()\n }\n}\n\nexport default GlobalLink\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createTable.es.js","sources":["../../../../src/global-link/utils/createTable.ts"],"sourcesContent":["const tableConfig = [\n { title: 'Number', field: 'id', width: '100' },\n { title: 'Title', field: 'subject', width: '200' },\n { title: 'Priority', field: 'priority', width: '100' },\n { title: 'Iteration', field: 'iteration', width: '100' },\n { title: 'Status', field: 'status', width: '100' },\n { title: 'Conductor', field: 'assigned_to', width: '100' },\n]\n\nexport function createTable(data: any[]) {\n const table = document.createElement<'table'>('table')\n createColGroup(table)\n createTableHead(table)\n createTableBody(table, data)\n return table\n}\n\nfunction createColGroup(table: HTMLTableElement) {\n const colGroup = document.createElement<'colgroup'>('colgroup')\n tableConfig.forEach(({ width }) => {\n const col = document.createElement<'col'>('col')\n col.setAttribute('width', width)\n colGroup.appendChild(col)\n })\n table.insertAdjacentElement('afterbegin', colGroup)\n}\n\nfunction createTableHead(table: HTMLTableElement) {\n const tHead = table.createTHead()\n const tRow = tHead.insertRow()\n tableConfig.forEach(({ title }) => {\n const tCell = tRow.insertCell()\n tCell.textContent = title\n })\n return tHead\n}\n\nfunction createTableBody(table: HTMLTableElement, data: any[]) {\n const tBody = table.createTBody();\n\n [].forEach.call(data, (d) => {\n const tRow = tBody.insertRow()\n // @ts-ignore\n tRow.setAttribute('href', d.url)\n tableConfig.forEach(({ field }) => {\n const tCell = tRow.insertCell()\n tCell.classList.add(`work-item-${field}`)\n // @ts-ignore\n tCell.textContent = d[field]\n })\n })\n\n return tBody\n}\n"],"names":[],"mappings":"AAAA,MAAM,cAAc;AAAA,EAClB,EAAE,OAAO,UAAU,OAAO,MAAM,OAAO,MAAM;AAAA,EAC7C,EAAE,OAAO,SAAS,OAAO,WAAW,OAAO,MAAM;AAAA,EACjD,EAAE,OAAO,YAAY,OAAO,YAAY,OAAO,MAAM;AAAA,EACrD,EAAE,OAAO,aAAa,OAAO,aAAa,OAAO,MAAM;AAAA,EACvD,EAAE,OAAO,UAAU,OAAO,UAAU,OAAO,MAAM;AAAA,EACjD,EAAE,OAAO,aAAa,OAAO,eAAe,OAAO,MAAM;AAC3D;AAEO,SAAS,YAAY,MAAa;AACjC,QAAA,QAAQ,SAAS,cAAuB,OAAO;AACrD,iBAAe,KAAK;AACpB,kBAAgB,KAAK;AACrB,kBAAgB,OAAO,IAAI;AACpB,SAAA;AACT;AAEA,SAAS,eAAe,OAAyB;AACzC,QAAA,WAAW,SAAS,cAA0B,UAAU;AAC9D,cAAY,QAAQ,CAAC,EAAE,YAAY;AAC3B,UAAA,MAAM,SAAS,cAAqB,KAAK;AAC3C,QAAA,aAAa,SAAS,KAAK;AAC/B,aAAS,YAAY,GAAG;AAAA,EAAA,CACzB;AACK,QAAA,sBAAsB,cAAc,QAAQ;AACpD;AAEA,SAAS,gBAAgB,OAAyB;AAC1C,QAAA,QAAQ,MAAM;AACd,QAAA,OAAO,MAAM;AACnB,cAAY,QAAQ,CAAC,EAAE,YAAY;AAC3B,UAAA,QAAQ,KAAK;AACnB,UAAM,cAAc;AAAA,EAAA,CACrB;AACM,SAAA;AACT;AAEA,SAAS,gBAAgB,OAAyB,MAAa;AACvD,QAAA,QAAQ,MAAM;AAEpB,GAAA,EAAG,QAAQ,KAAK,MAAM,CAAC,MAAM;AACrB,UAAA,OAAO,MAAM;AAEd,SAAA,aAAa,QAAQ,EAAE,GAAG;AAC/B,gBAAY,QAAQ,CAAC,EAAE,YAAY;AAC3B,YAAA,QAAQ,KAAK;AACnB,YAAM,UAAU,IAAI,aAAa,KAAK,EAAE;AAElC,YAAA,cAAc,EAAE,KAAK;AAAA,IAAA,CAC5B;AAAA,EAAA,CACF;AAEM,SAAA;AACT;"}
|
package/es/index.es.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"link.es.js","sources":["../../../../src/link/formats/link.ts"],"sourcesContent":["import Quill from 'quill'\nimport { sanitize } from '../../config/editor.utils'\n\nconst Inline = Quill.imports['blots/inline']\n\n// @dynamic\nexport default class Link extends Inline {\n static blotName: string\n static tagName: string\n static SANITIZED_URL: string\n static PROTOCOL_WHITELIST: string[]\n static className: string\n statics: any\n domNode: any\n static create(value) {\n const node = super.create(value)\n const href = this.sanitize(value)\n node.setAttribute('href', href)\n node.setAttribute('target', '_blank')\n return node\n }\n\n static formats(domNode) {\n return domNode.getAttribute('href')\n }\n\n static sanitize(url) {\n return sanitize(url, this.PROTOCOL_WHITELIST) ? url : this.SANITIZED_URL\n }\n\n format(name, value) {\n if (name !== this.statics.blotName || [false, null].includes(value)) {\n super.format(name, value)\n }\n else {\n this.domNode.setAttribute('href', Link.sanitize(value))\n }\n }\n}\nLink.blotName = 'link'\nLink.tagName = 'A'\nLink.SANITIZED_URL = 'about:blank'\nLink.PROTOCOL_WHITELIST = ['http', 'https', 'mailto', 'tel']\nLink.className = 'ql-normal-link'\n"],"names":["Link"],"mappings":";;AAGA,MAAM,SAAS,MAAM,QAAQ,cAAc;aAG3C,MAAqB,aAAa,OAAO;AAAA,EAQvC,OAAO,OAAO,OAAO;AACb,UAAA,OAAO,MAAM,OAAO,KAAK;AACzB,UAAA,OAAO,KAAK,SAAS,KAAK;AAC3B,SAAA,aAAa,QAAQ,IAAI;AACzB,SAAA,aAAa,UAAU,QAAQ;AAC7B,WAAA;AAAA,EACT;AAAA,EAEA,OAAO,QAAQ,SAAS;AACf,WAAA,QAAQ,aAAa,MAAM;AAAA,EACpC;AAAA,EAEA,OAAO,SAAS,KAAK;AACnB,WAAO,SAAS,KAAK,KAAK,kBAAkB,IAAI,MAAM,KAAK;AAAA,EAC7D;AAAA,EAEA,OAAO,MAAM,OAAO;AACd,QAAA,SAAS,KAAK,QAAQ,YAAY,CAAC,OAAO,IAAI,EAAE,SAAS,KAAK,GAAG;AAC7D,YAAA,OAAO,MAAM,KAAK;AAAA,IAAA,OAErB;AACH,WAAK,QAAQ,aAAa,QAAQ,KAAK,SAAS,KAAK,CAAC;AAAA,IACxD;AAAA,EACF;AACF;AACAA,OAAK,WAAW;AAChBA,OAAK,UAAU;AACfA,OAAK,gBAAgB;AACrBA,OAAK,qBAAqB,CAAC,QAAQ,SAAS,UAAU,KAAK;AAC3DA,OAAK,YAAY;"}
|
package/es/link/index.es.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":["../../../src/link/index.ts"],"sourcesContent":["import Quill from 'quill'\nimport LinkBlot from './formats/link'\nimport Tooltip from './modules/tooltip'\n\nconst icons = Quill.imports['ui/icons']\nconst SnowTheme = Quill.imports['themes/snow']\nconst Module = Quill.imports['core/module']\n\n// @dynamic\nclass Link extends Module {\n static register() {\n Quill.register('blots/link', LinkBlot, true)\n }\n\n constructor(quill, options) {\n super(quill, options)\n }\n}\n\nSnowTheme.prototype.extendToolbar = function (toolbar) {\n toolbar.container.classList.add('ql-snow')\n this.buildButtons(toolbar.container.querySelectorAll('button'), icons)\n this.buildPickers(toolbar.container.querySelectorAll('select'), icons)\n this.tooltip = new Tooltip(this.quill, this.options.bounds)\n if (toolbar.container.querySelector('.ql-link')) {\n this.quill.keyboard.addBinding(\n { key: 'k', shortKey: true },\n (_range, context) => {\n toolbar.handlers.link.call(toolbar, !context.format.link)\n },\n )\n }\n}\n\nexport default Link\n"],"names":["LinkBlot"],"mappings":";;;AAIA,MAAM,QAAQ,MAAM,QAAQ,UAAU;AACtC,MAAM,YAAY,MAAM,QAAQ,aAAa;AAC7C,MAAM,SAAS,MAAM,QAAQ,aAAa;AAG1C,MAAM,aAAa,OAAO;AAAA,EACxB,OAAO,WAAW;AACV,UAAA,SAAS,cAAcA,QAAU,IAAI;AAAA,EAC7C;AAAA,EAEA,YAAY,OAAO,SAAS;AAC1B,UAAM,OAAO,OAAO;AAAA,EACtB;AACF;AAEA,UAAU,UAAU,gBAAgB,SAAU,SAAS;AAC7C,UAAA,UAAU,UAAU,IAAI,SAAS;AACzC,OAAK,aAAa,QAAQ,UAAU,iBAAiB,QAAQ,GAAG,KAAK;AACrE,OAAK,aAAa,QAAQ,UAAU,iBAAiB,QAAQ,GAAG,KAAK;AACrE,OAAK,UAAU,IAAI,QAAQ,KAAK,OAAO,KAAK,QAAQ,MAAM;AAC1D,MAAI,QAAQ,UAAU,cAAc,UAAU,GAAG;AAC/C,SAAK,MAAM,SAAS;AAAA,MAClB,EAAE,KAAK,KAAK,UAAU,KAAK;AAAA,MAC3B,CAAC,QAAQ,YAAY;AACnB,gBAAQ,SAAS,KAAK,KAAK,SAAS,CAAC,QAAQ,OAAO,IAAI;AAAA,MAC1D;AAAA,IAAA;AAAA,EAEJ;AACF;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tooltip.es.js","sources":["../../../../src/link/modules/tooltip.ts"],"sourcesContent":["import Quill from 'quill'\nimport Emitter from 'quill/core/emitter'\nimport { Range } from 'quill/core/selection'\nimport { BaseTooltip } from 'quill/themes/base'\nimport { debounce } from '../../../src/utils/debounce'\nimport { LANG_CONF } from '../../config/editor.config'\nimport { isNullOrUndefined } from '../../config/editor.utils'\nimport LinkBlot from '../formats/link'\n\n// const Emitter = Quill.imports['core/emitter'];\n// const BaseTooltip = Quill.imports['themes/BaseTooltip'];\n// const Range = Quill.imports['core/selection/range'];\n\n// @dynamic\nexport default class Tooltip extends BaseTooltip {\n static TEMPLATE: string\n isInputFocus: boolean\n isHover: boolean\n debouncedHideToolTip: any\n debouncedShowToolTip: any\n hide: any\n linkRange: any\n quill: any\n root: any\n restoreFocus: any\n textbox: any\n boundsContainer: any\n\n constructor(quill, bounds) {\n super(quill, bounds)\n this.isInputFocus = false\n this.isHover = false\n\n this.debouncedHideToolTip = debounce(this.hideToolTip, 300)\n this.debouncedShowToolTip = debounce(this.showToolTip, 300)\n }\n\n shouldHide() {\n return !this.isHover && !this.isInputFocus\n }\n\n hideToolTip() {\n if (this.shouldHide()) {\n this.hide()\n }\n }\n\n showToolTip(name, value, range) {\n if (!this.shouldHide()) {\n this.edit(name, value, range)\n }\n }\n\n handleMouseLeave() {\n this.isHover = false\n this.debouncedHideToolTip()\n }\n\n handleMouseEnter(event) {\n const isTooltipShow = !this.root.classList.contains('ql-hidden')\n if (isTooltipShow) {\n return\n }\n\n if (this.isInputFocus) {\n this.save()\n }\n this.isHover = true\n const linkNode = event.target\n const preview = LinkBlot.formats(linkNode)\n if (preview.startsWith('#')) {\n return\n }\n const linkBlot = Quill.find(linkNode)\n const index = this.quill.getIndex(linkBlot)\n const [link, offset] = this.quill.scroll.descendant(\n LinkBlot,\n index,\n )\n const length = link && link.length()\n this.linkRange = new Range(index - offset, length)\n this.debouncedShowToolTip('link', preview, this.linkRange)\n }\n\n listen() {\n super.listen()\n\n this.root.querySelector('a.ql-remove').addEventListener('click', (event) => {\n if (!isNullOrUndefined(this.linkRange)) {\n const range = this.linkRange\n this.restoreFocus()\n this.quill.formatText(range, 'link', false, Emitter.sources.API)\n delete this.linkRange\n }\n event.preventDefault()\n this.hide()\n })\n\n this.quill.root.addEventListener(\n 'mouseover',\n (event) => {\n if (\n (event.target.tagName.toUpperCase() !== 'A'\n || !event.target.classList.contains(LinkBlot.className))\n && !event.target.closest(`a.${LinkBlot.className}`)\n ) {\n return\n }\n this.handleMouseEnter(event)\n },\n false,\n )\n\n this.quill.root.addEventListener(\n 'mouseout',\n (event) => {\n if (event.target.tagName.toUpperCase() !== 'A' && !event.target.closest(`a.${LinkBlot.className}`)) {\n return\n }\n this.handleMouseLeave()\n },\n false,\n )\n\n this.root.addEventListener(\n 'mouseenter',\n () => {\n this.isHover = true\n },\n false,\n )\n\n this.root.addEventListener('mouseleave', this.handleMouseLeave.bind(this), false)\n\n this.root.querySelector('a.ql-preview').addEventListener('click', (event) => {\n const link = LinkBlot.sanitize(this.textbox.value)\n window.open(link, '_blank')\n event.preventDefault()\n })\n this.root.querySelector('input[type=\"text\"]').addEventListener('focus', () => {\n this.isInputFocus = true\n })\n this.root.querySelector('input[type=\"text\"]').addEventListener('blur', () => {\n this.isInputFocus = false\n this.save()\n })\n this.quill.on(\n Emitter.events.SELECTION_CHANGE,\n (range, _oldRange, source) => {\n if (isNullOrUndefined(range)) return\n if (source === Emitter.sources.USER) {\n const [link, offset] = this.quill.scroll.descendant(\n LinkBlot,\n range.index,\n )\n\n if (!isNullOrUndefined(link)) {\n this.linkRange = new Range(range.index - offset, link.length())\n const preview = LinkBlot.formats(link.domNode)\n if (!preview.startsWith('#')) {\n this.edit('link', preview, this.linkRange)\n }\n return\n }\n }\n if (this.shouldHide()) {\n this.hide()\n }\n },\n )\n this.quill.on(\n Emitter.events.TEXT_CHANGE,\n () => {\n const selection = this.quill.getSelection()\n const index = selection && selection.index\n setTimeout(() => {\n const link = this.quill.scroll.descendant(\n LinkBlot,\n index,\n )[0]\n if (!link) {\n this.handleMouseLeave()\n }\n })\n },\n )\n }\n\n save() {\n let value = this.textbox.value\n if (!value) return\n this.textbox.value = ''\n switch (this.root.getAttribute('data-mode')) {\n case 'link': {\n const { scrollTop } = this.quill.root\n const { autoProtocol } = this.quill.options\n if (autoProtocol) {\n value = this.addHttpProtocol(value)\n }\n\n if (this.linkRange) {\n this.quill.formatText(\n this.linkRange,\n 'link',\n value,\n Emitter.sources.USER,\n )\n this.restoreFocus()\n }\n else {\n this.restoreFocus()\n this.quill.format('link', value, Emitter.sources.USER)\n }\n this.quill.root.scrollTop = scrollTop\n break\n }\n case 'formula': {\n const range = this.quill.getSelection(true)\n if (!isNullOrUndefined(range)) {\n const index = range.index + range.length\n this.quill.insertEmbed(\n index,\n this.root.getAttribute('data-mode'),\n value,\n Emitter.sources.USER,\n )\n if (this.root.getAttribute('data-mode') === 'formula') {\n this.quill.insertText(index + 1, ' ', Emitter.sources.USER)\n }\n this.quill.setSelection(index + 2, Emitter.sources.USER)\n }\n break\n }\n case 'video': {\n const range = this.quill.getSelection(true)\n this.quill.insertText(range.index, '\\n', Emitter.sources.USER)\n this.quill.insertEmbed(range.index + 1, 'video', { src: value }, Emitter.sources.USER)\n this.quill.insertText(range.index + 2, '\\n', Emitter.sources.USER)\n this.quill.setSelection(range.index + 3, Emitter.sources.SILENT)\n this.textbox.value = ''\n this.hide()\n break\n }\n default:\n }\n }\n\n position(reference) {\n const left = reference.left\n const top = reference.bottom + this.quill.root.scrollTop\n this.root.style.left = `${left}px`\n this.root.style.top = `${top}px`\n this.root.classList.remove('ql-flip')\n const containerBounds = this.boundsContainer.getBoundingClientRect()\n const rootBounds = this.root.getBoundingClientRect()\n let shift = 0\n if (rootBounds.right > containerBounds.right) {\n shift = containerBounds.right - rootBounds.right\n this.root.style.left = `${left + shift}px`\n }\n if (rootBounds.left < containerBounds.left) {\n shift = containerBounds.left - rootBounds.left\n this.root.style.left = `${left + shift}px`\n }\n if (rootBounds.bottom > containerBounds.bottom) {\n const height = rootBounds.bottom - rootBounds.top\n const verticalShift = reference.bottom - reference.top + height\n const fixedTop = top - verticalShift\n this.root.style.top = `${fixedTop < 0 ? this.quill.root.scrollTop + reference.top : fixedTop}px`\n this.root.classList.add('ql-flip')\n }\n return shift\n }\n\n edit(mode = 'link', preview = null, range) {\n this.linkRange = range || this.quill.selection.savedRange\n this.root.classList.remove('ql-hidden')\n this.root.classList.add('ql-editing')\n if (!isNullOrUndefined(preview)) {\n this.textbox.value = preview\n }\n else if (mode !== this.root.getAttribute('data-mode')) {\n this.textbox.value = ''\n }\n this.position(this.quill.getBounds(range || this.quill.selection.savedRange))\n if (this.textbox.value === '') {\n this.textbox.focus()\n }\n this.textbox.setAttribute(\n 'placeholder',\n this.textbox.getAttribute(`data-${mode}`) || '',\n )\n this.root.setAttribute('data-mode', mode)\n }\n\n show() {\n super.show()\n this.root.removeAttribute('data-mode')\n }\n\n addHttpProtocol(url) {\n let result = url\n if (!url) {\n return ''\n }\n if (!/^(?:f|ht)tps?\\:\\/\\//.test(url)) {\n result = `http://${url}`\n }\n return result\n }\n}\n\nTooltip.TEMPLATE = [\n `<input type=\"text\" data-formula=\"e=mc^2\" data-link=\"${LANG_CONF.linkplaceholder}\" data-video=\"Embed URL\" style=\"width: 225px;\">`,\n '<span class=\"ql-split\"></span>',\n '<a class=\"ql-preview\"><i class=\"icon-share\"></i></a>',\n '<a class=\"ql-remove\"><i class=\"icon-delete\"></i></a>',\n].join('')\n"],"names":["LinkBlot"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Mention.es.js","sources":["../../../src/mention/Mention.ts"],"sourcesContent":["import Quill from 'quill'\nimport { isNullOrUndefined } from '../config/editor.utils'\nimport { DEFAULT_MENTION_CHAR, ON_MENTION_LINK_REMOVE } from './constants'\nimport MentionLink from './MentionLink'\n\nconst { Scope } = Quill.imports.parchment\nconst Delta = Quill.imports.delta\n\ninterface MentionOption {\n containerClass?: string\n dataAttributes?: string[]\n defaultLink?: string\n itemActiveClass?: string\n itemKey: string\n itemClass?: string\n listClass?: string\n listHideClass?: string\n maxHeight?: number\n mentionChar?: string\n remove?: (data: any) => void\n renderMentionItem?: (data: any) => string | HTMLElement\n renderMentionText?: (data: any) => string | HTMLElement\n search?: (term: string) => Promise<any[]>\n searchKey: string\n select?: (data: any) => void\n target?: string\n}\n\n// @dynamic\nclass Mention {\n private readonly options: MentionOption\n private readonly mentionListEL: HTMLUListElement\n private activeMentionIndex = 0\n private latestMentionList: any[]\n private latestMentionCharPos: number\n private latestCaretPos: number\n private searchTerm = ''\n private needInsertBr = true\n private readonly defaultOptions: MentionOption = {\n defaultLink: '#',\n target: '_blank',\n mentionChar: DEFAULT_MENTION_CHAR,\n maxHeight: 200,\n renderMentionItem(data: any) {\n let mentionItem = data.name || data.id\n if (this.itemKey) {\n mentionItem = data[this.itemKey]\n }\n const dom = document.createElement('SPAN')\n dom.textContent = mentionItem\n return dom\n },\n renderMentionText(data: any) {\n let mentionText = data.name || data.id\n if (this.itemKey) {\n mentionText = data[this.itemKey]\n }\n return `${mentionText}`\n },\n containerClass: 'ql-mention-list-container',\n listClass: 'ql-mention-list',\n listHideClass: 'ql-mention-list--hide',\n itemClass: 'ql-mention-item',\n itemActiveClass: 'ql-mention-item--active',\n itemKey: 'name',\n searchKey: 'name',\n dataAttributes: ['id'],\n select(_data: any) {},\n remove(_data: any) {},\n }\n\n static register() {\n Quill.register(MentionLink)\n }\n\n // @ts-ignore\n constructor(private quill: Quill, options: MentionOption) {\n if (!options.search) {\n console.warn('please provide a search function!')\n return\n }\n\n this.options = Object.assign(this.defaultOptions, options)\n const container = document.createElement('div')\n container.classList.add('ql-mention-list-container')\n if (this.options.containerClass !== 'ql-mention-list-container') {\n container.classList.add(this.options.containerClass)\n }\n this.mentionListEL = document.createElement('ul')\n this.mentionListEL.classList.add(this.options.listClass, this.options.listHideClass)\n this.mentionListEL.style.cssText += `\n max-height: ${this.options.maxHeight}px;\n `\n\n quill.on(Quill.events.TEXT_CHANGE, this.handleTextChange)\n quill.keyboard.addBinding({ key: 'ArrowUp' }, this.handleArrowUpKey)\n quill.keyboard.addBinding({ key: 'ArrowDown' }, this.handleArrowDownKey)\n quill.keyboard.addBinding({ key: 'Enter' }, this.handleEnterKey)\n quill.keyboard.addBinding({ key: 'Tab' }, this.handleEnterKey)\n quill.keyboard.addBinding({ key: 'Escape' }, this.handleEscapeKey)\n quill.keyboard.bindings.Enter.unshift(quill.keyboard.bindings.Enter.pop())\n quill.keyboard.bindings.Tab.unshift(quill.keyboard.bindings.Tab.pop())\n quill.keyboard.bindings.Escape.unshift(quill.keyboard.bindings.Escape.pop())\n\n const customKeyboardEnter = {\n key: 'Enter',\n shiftKey: null,\n handler: (range, context) => {\n const lineFormats = Object.keys(context.format).reduce(\n (formats, format) => {\n if (\n this.quill.scroll.query(format, Scope.BLOCK)\n && !Array.isArray(context.format[format])\n ) {\n formats[format] = context.format[format]\n }\n return formats\n },\n {},\n )\n\n // fix: 解决@提醒之后插入多余空行和光标位置不对的问题\n let selectionIndex = range.index - this.searchTerm.length\n let delta = new Delta()\n .retain(range.index)\n .delete(range.length)\n if (this.needInsertBr) {\n delta = delta.insert('\\n', lineFormats)\n selectionIndex = range.index + 1\n }\n\n this.quill.updateContents(delta, Quill.sources.USER)\n this.quill.setSelection(selectionIndex, Quill.sources.SILENT)\n this.quill.focus()\n\n Object.keys(context.format).forEach((name) => {\n if (!isNullOrUndefined(lineFormats[name])) return\n if (Array.isArray(context.format[name])) return\n if (name === 'code' || name === 'link') return\n this.quill.format(name, context.format[name], Quill.sources.USER)\n })\n\n this.needInsertBr = true // 标记是否是输入@提醒的Enter\n },\n }\n\n // 用自定义的Enter替换内置的Enter\n quill.keyboard.bindings.Enter = quill.keyboard.bindings.Enter.map((item) => {\n const buildinKeyboardEnter = item.format === undefined && item.shiftKey === null\n if (buildinKeyboardEnter) {\n return customKeyboardEnter\n }\n else {\n return item\n }\n })\n\n this.on('click', this.handleMouseClick)\n this.on('mouseover', this.handleMouseEnter)\n quill.emitter.on(ON_MENTION_LINK_REMOVE, async ({ mention, name }) => {\n const [result] = (mention && [mention]) || (await this.options.search(name))\n this.options.remove(result)\n })\n container.appendChild(this.mentionListEL)\n quill.container.parentElement.insertBefore(container, quill.container)\n }\n\n on(eventName, callback) {\n this.mentionListEL.addEventListener(eventName, (evt) => {\n let\n target = evt.target\n let targetItemEL\n\n while (this.mentionListEL.contains(target) && target !== this.mentionListEL) {\n if (target.classList.contains(this.options.itemClass)) {\n targetItemEL = target\n }\n target = target.parentElement\n }\n\n if (targetItemEL) {\n callback.call(this, targetItemEL, this.getMentionItemIndex(targetItemEL))\n }\n })\n }\n\n getMentionItemIndex(itemEl: Element) {\n return [].reduce.call(this.mentionListEL.children, (index, item, idx) => item === itemEl ? idx : index, -1)\n }\n\n handleTextChange = (_delta, _oldDelta, source) => {\n // defer handler to make sure that we can get correct quill selection range.\n setTimeout(() => {\n if (Quill.sources.USER === source) {\n const range = this.quill.getSelection()\n if (!range) {\n return\n }\n\n const caretPos = this.latestCaretPos = range.index\n // beforeCaretText的计算有问题,没有把图片内容和@提醒内容的非字符内容算进去\n const content = this.quill.getContents()\n const beforeCaretText = content.reduce((newText, op) => {\n if (typeof op.insert === 'string') {\n return (newText += op.insert)\n }\n else {\n return (newText += ' ') // 将图片内容和@提醒内容的非字符内容置为' ',算一个位置\n }\n }, '')\n const mentionCharPos = beforeCaretText.lastIndexOf(this.options.mentionChar)\n\n if (mentionCharPos > -1) {\n const searchTerm = beforeCaretText.substring(mentionCharPos + this.options.mentionChar.length, caretPos)\n this.searchTerm = searchTerm\n if (!''.startsWith.call(searchTerm, ' ')) {\n this.latestMentionCharPos = mentionCharPos\n this.searchMentionListByTerm(searchTerm)\n }\n else {\n this.hideMentionList()\n }\n }\n else {\n this.hideMentionList()\n }\n }\n })\n }\n\n handleMouseClick(_itemEl: HTMLLIElement, index: number) {\n this.selectMentionItem(index, true)\n this.quill.focus()\n }\n\n handleMouseEnter(_itemEl: HTMLLIElement, index: number) {\n this.activeMentionIndex = index\n this.highlightMentionItem(index)\n }\n\n handleArrowUpKey = () => {\n if (this.isOpen()) {\n this.activeMentionIndex\n = (this.activeMentionIndex + this.latestMentionList.length - 1) % this.latestMentionList.length\n this.highlightMentionItem(this.activeMentionIndex)\n return false\n }\n return true\n }\n\n handleArrowDownKey = () => {\n if (this.isOpen()) {\n this.activeMentionIndex = (this.activeMentionIndex + 1) % this.latestMentionList.length\n this.highlightMentionItem(this.activeMentionIndex)\n return false\n }\n return true\n }\n\n handleEnterKey = () => {\n if (this.isOpen()) {\n this.selectMentionItem()\n this.needInsertBr = false\n }\n return true\n }\n\n handleEscapeKey = () => {\n if (this.isOpen()) {\n this.hideMentionList()\n return false\n }\n return true\n }\n\n getActiveMentionItem() {\n return this.mentionListEL.querySelector(`.${this.options.itemActiveClass}`)\n }\n\n isOpen() {\n return !this.mentionListEL.classList.contains(this.options.listHideClass)\n }\n\n async searchMentionListByTerm(term: string) {\n const mentionList = await this.options.search(term)\n this.latestMentionList = mentionList\n if (!mentionList || mentionList.length === 0) {\n return this.hideMentionList()\n }\n\n this.showMentionList(mentionList)\n }\n\n showMentionList(mentionList: any[]) {\n if (!this.isOpen()) {\n this.mentionListEL.classList.remove(this.options.listHideClass)\n }\n this.activeMentionIndex = 0\n this.setMentionListPos()\n this.render(mentionList)\n }\n\n hideMentionList() {\n if (this.isOpen()) {\n this.activeMentionIndex = 0\n this.mentionListEL.classList.add(this.options.listHideClass)\n }\n }\n\n setMentionListPos() {\n const cursorIndex = this.quill.selection.savedRange.index\n const cursorBounds = this.quill.getBounds(cursorIndex)\n const { left, top } = cursorBounds\n const container = this.quill.container\n const hostElement = container.parentNode as HTMLDivElement\n const { left: editorLeft, top: editorTop } = container.getBoundingClientRect()\n const { left: hostElementLeft, top: hostElementTop } = hostElement.getBoundingClientRect()\n const relativeLeft = editorLeft - hostElementLeft\n const relativeTop = editorTop - hostElementTop\n const menuLeft = left + relativeLeft - 5\n const menuTop = top + relativeTop + 20\n this.mentionListEL.style.cssText += `\n left: ${menuLeft}px;\n top: ${menuTop}px;\n `\n }\n\n render(mentionList: any[]) {\n const wrapEl = document.createElement('div');\n\n [].forEach.call(mentionList, (mentionItem, index) => {\n const mentionItemEl = document.createElement('li')\n mentionItemEl.classList.add(this.options.itemClass)\n if (index === this.activeMentionIndex) {\n mentionItemEl.classList.add(this.options.itemActiveClass)\n }\n const renderResult = this.options.renderMentionItem(mentionItem)\n if (typeof renderResult === 'string') {\n mentionItemEl.insertAdjacentHTML('afterbegin', renderResult)\n }\n else {\n mentionItemEl.insertAdjacentElement('afterbegin', renderResult)\n }\n wrapEl.appendChild(mentionItemEl)\n })\n\n this.mentionListEL.innerHTML = wrapEl.innerHTML\n }\n\n highlightMentionItem(index: number) {\n const oldActiveItem = this.getActiveMentionItem()\n if (oldActiveItem) {\n oldActiveItem.classList.remove(this.options.itemActiveClass)\n }\n\n const newActiveItem = this.mentionListEL.querySelector(`.${this.options.itemClass}:nth-of-type(${index + 1})`)\n if (newActiveItem) {\n newActiveItem.classList.add(this.options.itemActiveClass)\n this.scrollIntoView(newActiveItem)\n }\n }\n\n scrollIntoView(node: Element): void {\n const nodeAsAny: any = node\n if (nodeAsAny.scrollIntoViewIfNeeded) {\n nodeAsAny.scrollIntoViewIfNeeded(false)\n return\n }\n if (node.scrollIntoView) {\n node.scrollIntoView(false)\n }\n }\n\n selectMentionItem(index = this.activeMentionIndex, isClick?: boolean) {\n const activeMentionItem = this.latestMentionList[index]\n this.insertMentionBlot(activeMentionItem, isClick)\n this.options.select(activeMentionItem)\n this.hideMentionList()\n }\n\n insertMentionBlot(activeMentionItem: any, isClick?: boolean) {\n const mention = this.options.renderMentionText(activeMentionItem)\n const delta = new Delta()\n .retain(this.latestMentionCharPos)\n .delete(this.latestCaretPos - this.latestMentionCharPos)\n .insert({\n [MentionLink.blotName]: {\n char: this.options.mentionChar,\n text: mention,\n mention: activeMentionItem,\n link: this.options.defaultLink,\n target: this.options.target,\n searchKey: this.options.searchKey,\n },\n })\n if (isClick) {\n this.quill.updateContents(delta, Quill.sources.USER)\n }\n else {\n this.quill.updateContents(delta, Quill.sources.API)\n }\n this.quill.setSelection(this.latestMentionCharPos + 1, Quill.sources.API)\n }\n}\n\nexport { Mention as default }\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MentionLink.es.js","sources":["../../../src/mention/MentionLink.ts"],"sourcesContent":["import Quill from 'quill'\nimport { DEFAULT_MENTION_CHAR, MENTION_CHAR, ON_MENTION_LINK_REMOVE } from './constants'\n\nconst Embed = Quill.imports['blots/embed']\n\n// @dynamic\nclass MentionLink extends Embed {\n static blotName: string\n static tagName: string\n static className: string\n scroll: any\n mentionData: any\n\n static create(data) {\n const node = super.create(data)\n node.dataset.mentionId = data.name || (data.mention && data.mention[data.searchKey || 'name']) || ''\n node.setAttribute('title', data.text)\n node.setAttribute(MENTION_CHAR, data.char)\n node.textContent = data.char + data.text\n return node\n }\n\n static value(domNode) {\n const\n char = domNode.getAttribute(MENTION_CHAR) || DEFAULT_MENTION_CHAR\n const text = domNode.getAttribute('title')\n const name = domNode.dataset.mentionId\n return { char, text, name }\n }\n\n constructor(scroll, domNode, data) {\n super(scroll, domNode, data)\n this.mentionData = data\n }\n\n value() {\n // fix: 将@提醒内容加入到 Delta 里,以解决输入空格,@提醒内容被删除的问题\n // return ' ';\n return super.value()\n }\n\n remove() {\n this.scroll.emitter.emit(ON_MENTION_LINK_REMOVE, this.mentionData)\n return super.remove()\n }\n}\n\nMentionLink.blotName = 'mention'\nMentionLink.tagName = 'span'\nMentionLink.className = 'ql-mention-link'\nexport { MentionLink as default }\n"],"names":[],"mappings":";;AAGA,MAAM,QAAQ,MAAM,QAAQ,aAAa;AAGzC,MAAM,oBAAoB,MAAM;AAAA,EAO9B,OAAO,OAAO,MAAM;AACZ,UAAA,OAAO,MAAM,OAAO,IAAI;AACzB,SAAA,QAAQ,YAAY,KAAK,QAAS,KAAK,WAAW,KAAK,QAAQ,KAAK,aAAa,MAAM,KAAM;AAC7F,SAAA,aAAa,SAAS,KAAK,IAAI;AAC/B,SAAA,aAAa,cAAc,KAAK,IAAI;AACpC,SAAA,cAAc,KAAK,OAAO,KAAK;AAC7B,WAAA;AAAA,EACT;AAAA,EAEA,OAAO,MAAM,SAAS;AACpB,UACE,OAAO,QAAQ,aAAa,YAAY,KAAK;AACzC,UAAA,OAAO,QAAQ,aAAa,OAAO;AACnC,UAAA,OAAO,QAAQ,QAAQ;AACtB,WAAA,EAAE,MAAM,MAAM;EACvB;AAAA,EAEA,YAAY,QAAQ,SAAS,MAAM;AAC3B,UAAA,QAAQ,SAAS,IAAI;AAC3B,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,QAAQ;AAGN,WAAO,MAAM;EACf;AAAA,EAEA,SAAS;AACP,SAAK,OAAO,QAAQ,KAAK,wBAAwB,KAAK,WAAW;AACjE,WAAO,MAAM;EACf;AACF;AAEA,YAAY,WAAW;AACvB,YAAY,UAAU;AACtB,YAAY,YAAY;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants.es.js","sources":["../../../src/mention/constants.ts"],"sourcesContent":["export const ON_MENTION_LINK_REMOVE = 'mention-link/remove'\nexport const MENTION_CHAR = 'mentionChar'\nexport const DEFAULT_MENTION_CHAR = '@'\n"],"names":[],"mappings":"AAAO,MAAM,yBAAyB;AAC/B,MAAM,eAAe;AACrB,MAAM,uBAAuB;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":["../../../src/quick-menu/index.ts"],"sourcesContent":["import type Quill from 'quill'\n\ninterface QuickMenuOptions {\n container: string\n component: any\n}\n\nclass QuickMenu {\n private container: HTMLDivElement\n private hostElement: HTMLDivElement\n private quickMenu: HTMLDivElement\n private quickMenuContainer: HTMLDivElement\n\n // @ts-ignore\n constructor(private quill: Quill, private options: QuickMenuOptions) {\n this.quill = quill\n this.options = options\n this.container = this.quill.container\n this.hostElement = this.container.parentNode as HTMLDivElement\n this.quickMenu = this.hostElement.querySelector('.quick-menu')\n this.quickMenuContainer = this.quickMenu.querySelector('.quick-menu-container')\n quill.keyboard.addBinding({ key: '/' }, this.handleSlashKeyDown)\n quill.keyboard.addBinding({ key: 'ArrowUp' }, this.handleArrowUpKey)\n quill.keyboard.addBinding({ key: 'ArrowDown' }, this.handleArrowDownKey)\n quill.keyboard.addBinding({ key: 'Enter' }, this.handleEnterKey)\n quill.keyboard.bindings.Enter.unshift(quill.keyboard.bindings.Enter.pop())\n document.body.addEventListener('click', this.hideQuickMenu.bind(this))\n }\n\n handleSlashKeyDown = (_range, context) => {\n const index = this.quill.selection.savedRange.index\n this.quill.insertText(index, '/')\n\n // 一行的第一个字符为 '/',且没有格式化,则触发快捷菜单\n const shouldTriggerQuickMenu = context.prefix === '' && Object.keys(context.format).length === 0\n if (shouldTriggerQuickMenu) {\n const cursorIndex = this.quill.selection.savedRange.index\n const cursorBounds = this.quill.getBounds(cursorIndex)\n const { left, top } = cursorBounds\n const { left: editorLeft, top: editorTop } = this.container.getBoundingClientRect()\n const { left: hostElementLeft, top: hostElementTop } = this.hostElement.getBoundingClientRect()\n const relativeLeft = editorLeft - hostElementLeft\n const relativeTop = editorTop - hostElementTop\n const menuLeft = left + relativeLeft - 5\n const menuTop = top + relativeTop + 20\n\n this.quickMenu.style.display = 'block'\n const zIndex = this.quill.options.modules.quickmenu.zIndex\n let style = `left:${menuLeft}px;top:${menuTop}px;`\n if (zIndex || zIndex === 0) {\n style += `z-index:${zIndex}`\n }\n this.quickMenuContainer.setAttribute('style', style)\n this.options.component.activeIndex = 0\n }\n else {\n this.quickMenu.style.display = 'none'\n }\n }\n\n private isOpen() {\n return this.quickMenuContainer.style.display !== 'none' && this.quickMenu.style.display === 'block'\n }\n\n hideQuickMenu = (event) => {\n if (this.quickMenuContainer && !this.quickMenuContainer.contains(event.target)) {\n this.quickMenuContainer.style.display = 'none'\n }\n }\n\n handleArrowUpKey = (_range, _context) => {\n if (this.isOpen()) {\n const index = this.options.component.activeIndex\n const total = this.options.component.quickMenus.length\n this.options.component.activeIndex = (index + total - 1) % total\n return false\n }\n return true\n }\n\n handleArrowDownKey = (_range, _context) => {\n if (this.isOpen()) {\n const index = this.options.component.activeIndex\n const total = this.options.component.quickMenus.length\n this.options.component.activeIndex = (index + 1) % total\n return false\n }\n return true\n }\n\n handleEnterKey = (_range, _context) => {\n if (this.isOpen()) {\n this.options.component.onEnter()\n return false\n }\n return true\n }\n}\n\nexport default QuickMenu\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":["../../../src/screenshot/index.ts"],"sourcesContent":["import type html2canvas from 'html2canvas'\nimport type { Options as Html2CanvasOptions } from 'html2canvas'\nimport type Toolbar from 'quill/modules/toolbar'\nimport Quill from 'quill'\nimport { imgToBase64 } from '../utils/image'\nimport { lockScroll } from '../utils/scroll-lock'\n\nconst Delta = Quill.import('delta')\n\nexport type ScreenShotOptions = Partial<Html2CanvasOptions> & {\n Html2Canvas: typeof html2canvas\n beforeCreateCanvas: () => void | Promise<void>\n beforeCreateImage: (canvas: HTMLCanvasElement) => HTMLCanvasElement | string | Promise<HTMLCanvasElement | string>\n}\ninterface ScreenShotOptionsInQuill {\n quill: {\n options: {\n screenshot: Partial<ScreenShotOptions>\n }\n }\n}\n\nfunction resolveOptions(options: Partial<ScreenShotOptions>) {\n return Object.assign({\n // @ts-ignore\n Html2Canvas: window.Html2Canvas,\n useCORS: true,\n scale: 1,\n foreignObjectRendering: true,\n beforeCreateImage: undefined,\n beforeCreateCanvas: undefined,\n }, options)\n}\n\nfunction init() {\n const maskExits = document.querySelectorAll('.ql-screenshot-mask')\n if (maskExits) {\n maskExits.forEach(item => item && item.remove())\n }\n // 创建截图图层\n const wrapper = document.createElement('div')\n wrapper.classList.add('ql-screenshot-wrapper')\n const mask = document.createElement('div')\n mask.className = 'ql-screenshot-mask'\n const cutter = document.createElement('div')\n cutter.className = 'ql-screenshot-cutter'\n const coordinate = document.createElement('p')\n coordinate.className = 'ql-screenshot-coordinate'\n cutter.appendChild(coordinate)\n wrapper.appendChild(mask)\n wrapper.appendChild(cutter)\n document.body.appendChild(wrapper)\n return { wrapper, mask, cutter, coordinate }\n}\n\nfunction findParentFixed(dom: HTMLElement) {\n if (dom.tagName === 'BODY') return false\n if (['fixed', 'sticky'].includes(dom.parentElement.style.position)) return true\n return findParentFixed(dom.parentElement)\n}\nasync function renderImage(\n Html2Canvas: typeof html2canvas,\n html2canvasOptions: Partial<Html2CanvasOptions>,\n rect: DOMRect,\n options?: Omit<ScreenShotOptions, 'Html2Canvas' | keyof Html2CanvasOptions>,\n) {\n if (options && options.beforeCreateCanvas) {\n await options.beforeCreateCanvas()\n }\n const canvas: CanvasImageSource = await Html2Canvas(document.body, {\n ...html2canvasOptions,\n onclone: async (doc: Document, el: HTMLElement) => {\n // find all fixed or sticky dom\n const fixedDom = Array.from(doc.querySelectorAll('*[style*=\"position: fixed\"]')) as HTMLElement[]\n const stickyDom = Array.from(doc.querySelectorAll('*[style*=\"position: sticky\"]')) as HTMLElement[]\n const fixedDomList = new Set([...fixedDom, ...stickyDom])\n for (const dom of fixedDomList) {\n // if parent dom already has fixed or sticky style\n // means that transform will be settle. skip\n if (findParentFixed(dom)) continue\n // use transform move to correct position\n let x = 0\n let y = 0\n if (dom.style.top !== 'auto') {\n y = window.scrollY\n }\n if (dom.style.left !== 'auto') {\n x = window.scrollX\n }\n if (x !== 0 || y !== 0) {\n dom.style.transform = `translate(${x}px, ${y}px)`\n }\n }\n\n const imgs = doc.querySelectorAll('img')\n const promises = Array.from(imgs).map(async (img) => {\n img.src = await imgToBase64(img.src)\n })\n await Promise.all(promises)\n html2canvasOptions.onclone && await html2canvasOptions.onclone(doc, el)\n },\n })\n // 当前canvas为body全局截图,从当前截图中截取想要的部分重新绘制转成base64插入富文本\n let cropCanvas: HTMLCanvasElement | string = document.createElement('canvas')\n cropCanvas.width = rect.width\n cropCanvas.height = rect.height\n const cropCanvasCtx = cropCanvas.getContext('2d')\n cropCanvasCtx.drawImage(\n canvas,\n rect.x + window.scrollX,\n rect.y + window.scrollY,\n rect.width,\n rect.height,\n 0,\n 0,\n rect.width,\n rect.height,\n )\n if (options && options.beforeCreateImage) {\n cropCanvas = await options.beforeCreateImage(cropCanvas)\n }\n return typeof cropCanvas === 'string' ? cropCanvas : cropCanvas.toDataURL()\n}\n\nexport function Screenshot(this: Toolbar & ScreenShotOptionsInQuill) {\n this.quill.options.screenshot = resolveOptions(this.quill.options.screenshot)\n const options = this.quill.options.screenshot\n // @ts-ignore\n const { Html2Canvas, beforeCreateImage, beforeCreateCanvas, ...html2CanvasOptions } = options\n if (!Html2Canvas) {\n throw new Error('ScreenShot module requires html2canvas. Please include the library on the page before FluentEditor.')\n }\n const range = this.quill.getSelection()\n const { wrapper, mask, cutter, coordinate } = init()\n const status: {\n leftClickLockFlag: boolean\n start?: {\n x: number\n y: number\n }\n } = {\n leftClickLockFlag: false,\n start: undefined,\n }\n const cleanLock = lockScroll()\n\n const removeContextmenu = (event: Event) => {\n event.preventDefault()\n wrapper.remove()\n cleanLock()\n document.removeEventListener('contextmenu', removeContextmenu)\n }\n const afterShotCtrl = async (event: MouseEvent) => {\n document.removeEventListener('mousedown', toggleRect)\n const cutterRect = cutter.getBoundingClientRect()\n const target = event.target as HTMLElement\n wrapper.remove()\n cleanLock()\n if (target && target.className === 'ql-screenshot-confirm') {\n const image = await renderImage(Html2Canvas, html2CanvasOptions, cutterRect, { beforeCreateCanvas, beforeCreateImage })\n\n const delta = new Delta()\n .retain(range.index)\n .delete(range.length)\n .insert({ image })\n this.quill.updateContents(delta, Quill.sources.USER)\n this.quill.setSelection(range.index + 1, Quill.sources.SILENT)\n }\n status.start = undefined\n }\n const drawRect = (event: MouseEvent) => {\n // 通过鼠标移动描绘截图图层\n const startX = status.start.x\n const startY = status.start.y\n const endX = event.clientX\n const endY = event.clientY\n const width = Math.abs(endX - startX)\n const height = Math.abs(endY - startY)\n const top = startY < endY ? startY : endY\n const left = startX < endX ? startX : endX\n const bottom = window.innerHeight - height - top\n const right = window.innerWidth - width - left\n\n const maskPath = `\n linear-gradient(to top, #fff, #fff) top / 100% ${top}px,\n linear-gradient(to bottom, #fff, #fff) bottom /100% ${bottom}px,\n linear-gradient(to left, #fff, #fff) left / ${left}px 100%,\n linear-gradient(to right, #fff, #fff) right / ${right}px 100%\n `\n Object.assign(cutter.style, {\n width: `${width}px`,\n height: `${height}px`,\n left: `${left}px`,\n top: `${top}px`,\n })\n Object.assign(mask.style, {\n 'mask': maskPath,\n '-webkit-mask-repeat': 'no-repeat',\n })\n coordinate.textContent = `${width}, ${height}`\n }\n const toggleRect = (event: MouseEvent) => {\n // 右键取消截图操作\n if (event.button === 2) {\n document.removeEventListener('mousemove', drawRect)\n document.removeEventListener('mousedown', toggleRect)\n document.addEventListener('contextmenu', removeContextmenu)\n return\n }\n if (!status.leftClickLockFlag) {\n if (status.start) {\n // 如果有起点,则当前触发坐标为终点,移除监听事件并添加确认和取消按钮\n document.removeEventListener('mousemove', drawRect)\n const doneBtn = document.createElement('div')\n doneBtn.innerHTML = `<div class=\"ql-screenshot-confirm\"></div><div class=\"ql-screenshot-cancel\"></div>`\n doneBtn.className = 'ql-screenshot-done'\n doneBtn.addEventListener('click', afterShotCtrl)\n coordinate.remove()\n cutter.appendChild(doneBtn)\n status.leftClickLockFlag = true\n }\n else {\n // 无起点则设置起点坐标,监听鼠标移动\n status.start = { x: event.clientX, y: event.clientY }\n document.addEventListener('mousemove', drawRect)\n }\n }\n }\n document.addEventListener('mousedown', toggleRect)\n}\nScreenshot.toolName = 'screenshot'\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":["../../../src/soft-break/index.ts"],"sourcesContent":["import Quill from 'quill'\n\nconst Embed = Quill.imports['blots/embed']\n\nclass SoftBreak extends Embed {\n static blotName: string\n static tagName: string\n static className: string\n domNode: any\n prev: any\n next: any\n remove: () => void\n\n static create() {\n const node = super.create()\n return node\n }\n\n optimize() {\n // li的开头结尾,移除软回车\n if (this.prev === null) {\n this.remove()\n }\n }\n\n length() {\n return 1\n }\n}\nSoftBreak.blotName = 'soft-break'\nSoftBreak.tagName = 'BR'\nSoftBreak.className = 'ql-soft-break'\n\nexport default SoftBreak\n"],"names":[],"mappings":";AAEA,MAAM,QAAQ,MAAM,QAAQ,aAAa;AAEzC,MAAM,kBAAkB,MAAM;AAAA,EAS5B,OAAO,SAAS;AACR,UAAA,OAAO,MAAM;AACZ,WAAA;AAAA,EACT;AAAA,EAEA,WAAW;AAEL,QAAA,KAAK,SAAS,MAAM;AACtB,WAAK,OAAO;AAAA,IACd;AAAA,EACF;AAAA,EAEA,SAAS;AACA,WAAA;AAAA,EACT;AACF;AACA,UAAU,WAAW;AACrB,UAAU,UAAU;AACpB,UAAU,YAAY;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":["../../../src/strike/index.ts"],"sourcesContent":["import Quill from 'quill'\n\nconst Inline = Quill.imports['blots/inline']\n\n// @dynamic\nclass StrikeBlot extends Inline {\n static blotName: string\n static className: string\n static tagName: string\n // 此处删除了formats方法,当前tag非span,则并不需要进行特殊处理去重写formats方法\n}\nStrikeBlot.blotName = 'strike'\nStrikeBlot.tagName = 'u'\nStrikeBlot.className = 'ql-custom-strike'\n\nexport default StrikeBlot\n"],"names":[],"mappings":";AAEA,MAAM,SAAS,MAAM,QAAQ,cAAc;AAG3C,MAAM,mBAAmB,OAAO;AAAA;AAKhC;AACA,WAAW,WAAW;AACtB,WAAW,UAAU;AACrB,WAAW,YAAY;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":["../../../src/syntax/index.ts"],"sourcesContent":["import type TypeSyntax from 'quill/modules/syntax'\nimport Quill from 'quill'\n\nconst Syntax = Quill.import('modules/syntax') as typeof TypeSyntax\n\n// @dynamic\nclass CustomSyntax extends Syntax {\n static DEFAULTS: { hljs: any, interval: number, languages: { key: string, label: string }[] }\n}\n\nCustomSyntax.DEFAULTS = {\n hljs: (() => {\n // @ts-ignore\n return window.hljs\n })(),\n interval: 1000,\n languages: [\n { key: 'plain', label: 'Plain' },\n { key: 'bash', label: 'Bash' },\n { key: 'cpp', label: 'C++' },\n { key: 'cs', label: 'C#' },\n { key: 'css', label: 'CSS' },\n { key: 'diff', label: 'Diff' },\n { key: 'xml', label: 'HTML/XML' },\n { key: 'java', label: 'Java' },\n { key: 'javascript', label: 'Javascript' },\n { key: 'markdown', label: 'Markdown' },\n { key: 'php', label: 'PHP' },\n { key: 'python', label: 'Python' },\n { key: 'ruby', label: 'Ruby' },\n { key: 'sql', label: 'SQL' },\n ],\n}\n\nexport default CustomSyntax\n"],"names":[],"mappings":";AAGA,MAAM,SAAS,MAAM,OAAO,gBAAgB;AAG5C,MAAM,qBAAqB,OAAO;AAElC;AAEA,aAAa,WAAW;AAAA,EACtB,OAAO,MAAM;AAEX,WAAO,OAAO;AAAA,EAAA,GACb;AAAA,EACH,UAAU;AAAA,EACV,WAAW;AAAA,IACT,EAAE,KAAK,SAAS,OAAO,QAAQ;AAAA,IAC/B,EAAE,KAAK,QAAQ,OAAO,OAAO;AAAA,IAC7B,EAAE,KAAK,OAAO,OAAO,MAAM;AAAA,IAC3B,EAAE,KAAK,MAAM,OAAO,KAAK;AAAA,IACzB,EAAE,KAAK,OAAO,OAAO,MAAM;AAAA,IAC3B,EAAE,KAAK,QAAQ,OAAO,OAAO;AAAA,IAC7B,EAAE,KAAK,OAAO,OAAO,WAAW;AAAA,IAChC,EAAE,KAAK,QAAQ,OAAO,OAAO;AAAA,IAC7B,EAAE,KAAK,cAAc,OAAO,aAAa;AAAA,IACzC,EAAE,KAAK,YAAY,OAAO,WAAW;AAAA,IACrC,EAAE,KAAK,OAAO,OAAO,MAAM;AAAA,IAC3B,EAAE,KAAK,UAAU,OAAO,SAAS;AAAA,IACjC,EAAE,KAAK,QAAQ,OAAO,OAAO;AAAA,IAC7B,EAAE,KAAK,OAAO,OAAO,MAAM;AAAA,EAC7B;AACF;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"better-table.es.js","sources":["../../../src/table/better-table.ts"],"sourcesContent":["import Quill from 'quill'\nimport {\n getEventComposedPath,\n insideTable,\n isNullOrUndefined,\n isPureIE,\n} from '../config/editor.utils'\nimport Header from './formats/header'\nimport List from './formats/list'\nimport {\n cellId,\n rowId,\n TableBody,\n TableCell,\n TableCellLine,\n TableCol,\n TableColGroup,\n TableContainer,\n TableRow,\n TableViewWrapper,\n} from './formats/table'\nimport TableColumnTool from './modules/table-column-tool'\nimport TableOperationMenu from './modules/table-operation-menu'\nimport TableScrollBar from './modules/table-scroll-bar'\nimport TableSelection from './modules/table-selection'\n// import table node matchers\nimport {\n matchHeader,\n matchInline,\n matchList,\n matchMentionLink,\n matchTable,\n matchTableCell,\n matchTableHeader,\n matchTableRow,\n matchWordShapeImage,\n} from './utils/node-matchers'\n\nconst Block = Quill.imports['blots/block']\nconst Delta = Quill.imports.delta\nconst Module = Quill.imports['core/module']\n\n// @dynamic\nclass BetterTable extends Module {\n static keyboardBindings: any\n isComposition: boolean\n quill: any\n table: any\n modulesContainer: any\n tableSelection: any\n subscriber: any\n tableOperationMenu: any\n columnTool: TableColumnTool\n tableScrollBar: TableScrollBar\n\n static register() {\n Quill.register(TableCol, true)\n Quill.register(TableColGroup, true)\n Quill.register(TableCellLine, true)\n Quill.register(TableCell, true)\n Quill.register(TableRow, true)\n Quill.register(TableBody, true)\n Quill.register(TableContainer, true)\n Quill.register(TableViewWrapper, true)\n // register customized Header, overwriting quill built-in Header\n Quill.register('formats/header', Header, true)\n // register customized List, overwriting quill built-in Header\n Quill.register('formats/list', List, true)\n }\n\n constructor(quill, options) {\n super(quill, options)\n\n // handle click on quill-better-table\n this.isComposition = false\n this.quill.root.addEventListener('mousedown', event => this.handleMouseDown(event, quill), false)\n this.quill.root.addEventListener('compositionend', () => this.handleCompositionend(quill), false)\n this.quill.root.addEventListener('compositionstart', () => this.handleCompositionstart(quill), false)\n this.quill.root.addEventListener('keypress', event => this.handleKeyDown(event, quill), false)\n\n // handle right click on quill-better-table\n this.quill.root.addEventListener(\n 'contextmenu',\n (evt) => {\n if (!this.table) return true\n evt.preventDefault()\n\n // bugfix: evt.path is undefined in Safari, FF, Micro Edge\n const path = getEventComposedPath(evt)\n if (!path || path.length <= 0) return\n\n const tableNode = path.filter((node) => {\n return (\n node.tagName && node.tagName.toUpperCase() === 'TABLE' && node.classList.contains('quill-better-table')\n )\n })[0]\n\n const rowNode = path.filter((node) => {\n return node.tagName && node.tagName.toUpperCase() === 'TR' && node.getAttribute('data-row')\n })[0]\n\n const cellNode = path.filter((node) => {\n return node.tagName && node.tagName.toUpperCase() === 'TD' && node.getAttribute('data-row')\n })[0]\n\n const isTargetCellSelected = this.tableSelection.selectedTds\n .map(tableCell => tableCell.domNode)\n .includes(cellNode)\n\n if (this.tableSelection.selectedTds.length <= 0 || !isTargetCellSelected) {\n this.tableSelection.setSelection(cellNode.getBoundingClientRect(), cellNode.getBoundingClientRect())\n }\n\n if (this.tableOperationMenu) {\n this.tableOperationMenu = this.tableOperationMenu.destroy()\n }\n\n if (tableNode) {\n this.tableOperationMenu = new TableOperationMenu(\n {\n table: tableNode,\n row: rowNode,\n cell: cellNode,\n left: evt.x + 15,\n top: evt.y,\n },\n quill,\n options.operationMenu,\n )\n }\n },\n false,\n )\n\n // add keyboard binding:Backspace\n // prevent user hits backspace to delete table cell\n quill.keyboard.addBinding({ key: 'Backspace' }, {}, (range, context) => {\n if (range.index === 0 || this.quill.getLength() <= 1) return true\n if (context.offset === 0 && range.length === 0) {\n const [prev] = this.quill.getLine(range.index - 1)\n const [line] = this.quill.getLine(range.index)\n if (!isNullOrUndefined(prev)) {\n if (prev.statics.blotName === 'table-cell-line' && line.statics.blotName !== 'table-cell-line') {\n const betterTableModule = this.quill.getModule('better-table')\n let tableBlot\n try {\n tableBlot = prev.parent.parent.parent.parent\n }\n catch (_e) { }\n if (tableBlot && tableBlot.domNode !== betterTableModule.table) {\n betterTableModule.hideTableTools()\n tableBlot.remove()\n this.quill.update(Quill.sources.USER)\n }\n return false\n }\n }\n }\n return true\n })\n // since only one matched bindings callback will execute.\n // expected my binding callback execute first\n // I changed the order of binding callbacks\n const thisBinding = quill.keyboard.bindings.Backspace.pop()\n quill.keyboard.bindings.Backspace.splice(1, 0, thisBinding)\n\n // add Matchers to match and render quill-better-table for initialization\n // or pasting\n quill.clipboard.addMatcher('td', matchTableCell)\n quill.clipboard.addMatcher('th', matchTableHeader)\n quill.clipboard.addMatcher('table', matchTable)\n quill.clipboard.addMatcher('h1, h2, h3, h4, h5, h6', matchHeader)\n quill.clipboard.addMatcher('ol, ul', matchList)\n quill.clipboard.addMatcher('span', matchMentionLink)\n quill.clipboard.addMatcher('v:imageData', matchWordShapeImage)\n quill.clipboard.addMatcher(Node.ELEMENT_NODE, matchInline)\n\n // remove matcher for tr tag\n quill.clipboard.matchers = quill.clipboard.matchers.filter((matcher) => {\n return matcher[0] !== 'tr'\n })\n\n // fix: 处理空<tr>标签被忽略的情况\n quill.clipboard.addMatcher('tr', matchTableRow)\n\n this.quill.on('editor-change', () => {\n const tableContainer = Quill.find(this.table)\n if (!tableContainer) {\n this.hideTableTools()\n }\n })\n\n this.quill.on(Quill.events.SELECTION_CHANGE, (range, _oldRange, source) => {\n if (!range) return\n const selectionStart = range.index\n const selectionEnd = range.index + range.length\n if (source === Quill.sources.USER) {\n const tables = this.quill.root.getElementsByTagName('table')\n if (tables && tables.length) {\n [].forEach.call(tables, (table) => {\n const tableContainer = Quill.find(table)\n if (tableContainer) {\n const tableStart = tableContainer.offset(this.quill.scroll)\n const tableEnd = tableStart + tableContainer.length()\n // @ts-ignore\n const classes = Array.from(table.parentNode.classList)\n\n if (selectionStart <= tableStart && tableEnd <= selectionEnd) {\n // @ts-ignore\n table.parentNode.classList.add('quill-better-table-selected')\n }\n else if (classes.includes('quill-better-table-selected')) {\n // @ts-ignore\n table.parentNode.classList.remove('quill-better-table-selected')\n }\n }\n })\n }\n }\n })\n }\n\n handleMouseDown(evt, quill) {\n // bugfix: evt.path is undefined in Safari, FF, Micro Edge\n const path = getEventComposedPath(evt)\n if (!path || path.length <= 0) return\n const tableNode = path.filter((node) => {\n return node.tagName && node.tagName.toUpperCase() === 'TABLE' && node.classList.contains('quill-better-table')\n })[0]\n if (tableNode) {\n tableNode.parentNode.classList.remove('quill-better-table-selected')\n // current table clicked\n if (this.table === tableNode) return\n // other table clicked\n if (this.table) {\n this.hideTableTools()\n }\n if (!quill.options.readOnly) { // not show table tool in readonly mode\n this.showTableTools(tableNode, quill)\n }\n }\n else if (this.table) {\n // other clicked\n this.hideTableTools()\n }\n }\n\n handleKeyDown(evt, quill) {\n const key = evt.key\n const range = quill.getSelection()\n if (this.isComposition || !range) return\n const [col] = quill.getLine(range.index)\n const [td] = quill.getLine(range.index - 1)\n if (key && key !== 'Delete' && col && range) {\n if (col.statics.blotName === 'table-col') {\n const betterTableModule = this.quill.getModule('better-table')\n betterTableModule.hideTableTools()\n quill.insertText(range.index - 1, '\\n', Quill.sources.USER)\n quill.setSelection(range.index, 0, Quill.sources.USER)\n }\n else if (td && td.statics.blotName === 'table-cell-line' && col.statics.blotName === 'block') {\n quill.insertText(range.index, '\\n', Quill.sources.USER)\n quill.setSelection(range.index, 0, Quill.sources.USER)\n }\n }\n }\n\n handleCompositionstart(quill) {\n this.isComposition = true\n const range = quill.getSelection()\n const [col] = quill.getLine(range.index)\n const [td] = quill.getLine(range.index - 1)\n if (col && range) {\n if (col.statics.blotName === 'table-col') {\n const betterTableModule = this.quill.getModule('better-table')\n betterTableModule.hideTableTools()\n quill.insertText(range.index - 1, '\\n\\t', Quill.sources.USER)\n quill.setSelection(range.index, 0, Quill.sources.USER)\n }\n else if (td && td.statics.blotName === 'table-cell-line' && col.statics.blotName === 'block') {\n quill.setSelection(range.index, 0, Quill.sources.USER)\n }\n }\n }\n\n handleCompositionend(quill) {\n // fix: 解决在空行行首用中文输入法输入字符,然后按退格导致插入多余空行的问题\n const range = quill.getSelection()\n const [line] = quill.getLine(range.index)\n const domNode = line.domNode\n const isInParagraph = domNode.nodeName === 'P'\n const isInTableCell = line.statics.blotName === 'table-cell-line'\n if ((isInParagraph || isInTableCell)\n && domNode.childNodes.length > 1\n && domNode.childNodes[0].nodeName === 'BR') {\n domNode.childNodes[0].remove()\n }\n\n if (isPureIE && line instanceof Block) {\n // 设置光标位置防止跳入下一行\n quill.setSelection(range.index, 0, Quill.sources.SILENT)\n }\n\n this.isComposition = false\n }\n\n getTable(range = this.quill.getSelection()) {\n if (isNullOrUndefined(range)) return [null, null, null, -1]\n const [cellLine, offset] = this.quill.getLine(range.index)\n if (isNullOrUndefined(cellLine) || cellLine.statics.blotName !== TableCellLine.blotName) {\n return [null, null, null, -1]\n }\n const cell = cellLine.tableCell()\n const row = cell.row()\n const table = row.table()\n return [table, row, cell, offset]\n }\n\n insertTable(rows, columns) {\n const range = this.quill.getSelection(true)\n const isInsideTable = insideTable(range, this.quill)\n if (isNullOrUndefined(range) || isInsideTable) return\n // let currentBlot = this.quill.getLeaf(range.index)[0]\n // let nextBlot = this.quill.getLeaf(range.index + 1)[0]\n let delta = new Delta().retain(range.index)\n\n delta.insert('\\n')\n // insert table column\n delta = new Array(columns).fill('\\n').reduce((memo, text) => {\n memo.insert(text, { 'table-col': true })\n return memo\n }, delta)\n // insert table cell line with empty line\n delta = new Array(rows).fill(0).reduce((memo) => {\n const tableRowId = rowId()\n return new Array(columns).fill('\\n').reduce((op, text) => {\n op.insert(text, { 'table-cell-line': { row: tableRowId, cell: cellId() } })\n return op\n }, memo)\n }, delta)\n\n const [col] = this.quill.getLine(range.index)\n if (col && col.statics.blotName === 'table-col') {\n delta.insert('\\n')\n }\n\n this.quill.updateContents(delta, Quill.sources.USER)\n\n // feature: 新增表格后首格自动激活编辑状态,initEvent兼容IE\n const [cellLine] = this.quill.getLine(range.index + columns + 1)\n if (cellLine) {\n const cell = cellLine.tableCell()\n const td = cell.domNode\n const mousedownEvent = document.createEvent('MouseEvent')\n const mouseupEvent = document.createEvent('MouseEvent')\n const keyEvent = document.createEvent('Event')\n mousedownEvent.initEvent('mousedown', true, false)\n mouseupEvent.initEvent('mouseup', true, false)\n keyEvent.initEvent('keypress', true, false)\n td.dispatchEvent(mousedownEvent)\n td.dispatchEvent(mouseupEvent)\n td.dispatchEvent(keyEvent)\n this.tableSelection.endTd = td\n }\n }\n\n showTableTools(table, quill) {\n this.table = table\n this.modulesContainer = document.createElement('div')\n this.modulesContainer.classList.add('qlbt-modules-container')\n // fix:表格容器插入时获取ql-tooltip容器,用insertBefore插入到它前面,避免遮挡链接浮窗\n const linkContainer = this.quill.root.parentNode.querySelector('.ql-tooltip ')\n this.quill.root.parentNode.insertBefore(this.modulesContainer, linkContainer)\n this.tableSelection = new TableSelection(table, quill, this.modulesContainer)\n this.columnTool = new TableColumnTool(table, quill, this.modulesContainer)\n this.tableScrollBar = new TableScrollBar(table, quill, this.modulesContainer)\n let timeoutID\n this.subscriber = () => {\n clearTimeout(timeoutID)\n timeoutID = setTimeout(this.hideTableTools, 300)\n }\n window.addEventListener('resize', this.subscriber, false)\n }\n\n hideTableTools() {\n if (this.columnTool) {\n this.columnTool.destroy()\n }\n if (this.tableSelection) {\n this.tableSelection.destroy()\n }\n if (this.tableOperationMenu) {\n this.tableOperationMenu.destroy()\n }\n if (this.tableScrollBar) {\n this.tableScrollBar.destroy()\n }\n if (this.modulesContainer) {\n this.modulesContainer.remove()\n }\n this.columnTool = null\n this.tableSelection = null\n this.tableOperationMenu = null\n this.tableScrollBar = null\n this.modulesContainer = null\n this.table = null\n if (this.subscriber) {\n window.removeEventListener('resize', this.subscriber)\n }\n }\n}\n\nBetterTable.keyboardBindings = {\n 'line delete': {\n key: 'Delete',\n shiftKey: null,\n format: { 'table-col': false, 'table-cell-line': false },\n collapsed: true,\n offset: 0,\n handler(range, context) {\n // fix: 当光标在编辑器最前且之后为表格时按delete不执行操作\n if (range.index === 0 && context.line.next && context.line.next.statics.blotName === 'table-view') {\n const [p] = this.quill.getLine(range.index - 1)\n const [col] = this.quill.getLine(range.index + 1)\n if (p && p.statics.blotName === 'block' && col && col.statics.blotName === 'table-col') {\n return false\n }\n }\n return true\n },\n },\n 'table-col enter': {\n key: 'Enter',\n shiftKey: null,\n format: ['table-col'],\n collapsed: true,\n offset: 0,\n handler(range, context) {\n if (context.offset === 0 && range.length === 0) {\n const [col] = this.quill.getLine(range.index)\n if (col && col.statics.blotName === 'table-col') {\n const betterTableModule = this.quill.getModule('better-table')\n betterTableModule.hideTableTools()\n this.quill.insertText(range.index - 1, '\\n', Quill.sources.USER)\n this.quill.setSelection(range.index, 0, Quill.sources.USER)\n }\n }\n },\n },\n 'table-col delete': {\n key: 'Delete',\n shiftKey: null,\n format: ['table-col'],\n collapsed: true,\n offset: 0,\n handler(range, context) {\n if (context.offset === 0 && range.length === 0) {\n const [col] = this.quill.getLine(range.index)\n if (col && col.statics.blotName === 'table-col') {\n const betterTableModule = this.quill.getModule('better-table')\n let tableBlot\n try {\n tableBlot = col.parent.parent.parent\n }\n catch (_e) { }\n if (tableBlot && tableBlot.domNode !== betterTableModule.table) {\n betterTableModule.hideTableTools()\n tableBlot.remove()\n this.quill.update(Quill.sources.USER)\n }\n }\n }\n },\n },\n 'table-col backspace': {\n key: 'Backspace',\n shiftKey: null,\n format: ['table-col'],\n collapsed: true,\n offset: 0,\n handler() { },\n },\n 'table-cell-line backspace': {\n key: 'Backspace',\n format: ['table-cell-line'],\n collapsed: true,\n offset: 0,\n handler(range) {\n const [line] = this.quill.getLine(range.index)\n // 移除原有对非table-cell-line的阻止条件,使table-cell-line前的list等内容可以被删除\n if (!line.prev) {\n return false\n }\n return true\n },\n },\n 'table-cell-line delete': {\n key: 'Delete',\n format: ['table-cell-line'],\n handler(range, _context) {\n // 获取table-cell-line的索引和长度\n const [line] = this.quill.getLine(range.index)\n const index = this.quill.getIndex(line)\n const length = line.length()\n if (!line.next // 当无下一个元素且满足以下情况阻止删除操作\n && ((!line.prev && length === 1) // 单元格内只有一个table-cell-line且无内容\n || (range.index !== index && range.index + 1 >= index + length))) { // 光标在有内容的table-cell-line最后\n return false\n }\n return true\n },\n },\n 'table-cell-line enter': {\n key: 'Enter',\n shiftKey: null,\n format: ['table-cell-line'],\n handler(range, context) {\n // fix:通过window的光标选区当前指向判断,如果为HTMLElement且为表格容器则定位至下一行\n const node = window.getSelection().anchorNode\n if (node instanceof HTMLDivElement && node.classList.contains('quill-better-table-wrapper')) {\n this.quill.setSelection(range.index + 1, 0, Quill.sources.USER)\n this.quill.focus()\n return\n }\n // bugfix: a unexpected new line inserted when user compositionend with hitting Enter\n if (this.quill.selection && this.quill.selection.composing) return\n const Scope = Quill.imports.parchment.Scope\n if (range.length > 0) {\n this.quill.scroll.deleteAt(range.index, range.length) // So we do not trigger text-change\n }\n const lineFormats = Object.keys(context.format).reduce((formats, format) => {\n if (this.quill.scroll.query(format, Scope.BLOCK) && !Array.isArray(context.format[format])) {\n formats[format] = context.format[format]\n }\n return formats\n }, {})\n // insert new cellLine with lineFormats\n this.quill.insertText(range.index, '\\n', lineFormats['table-cell-line'], Quill.sources.USER)\n // Earlier scroll.deleteAt might have messed up our selection,\n // so insertText's built in selection preservation is not reliable\n this.quill.setSelection(range.index + 1, Quill.sources.SILENT)\n this.quill.focus()\n Object.keys(context.format).forEach((name) => {\n if (!isNullOrUndefined(lineFormats[name])) return\n if (Array.isArray(context.format[name])) return\n if (name === 'link') return\n this.quill.format(name, context.format[name], Quill.sources.USER)\n })\n },\n },\n}\n\nexport default BetterTable\n"],"names":["List"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"header.es.js","sources":["../../../../src/table/formats/header.ts"],"sourcesContent":["import Quill from 'quill'\nimport { isNullOrUndefined } from '../../config/editor.utils'\nimport { CELL_ATTRIBUTES, CELL_IDENTITY_KEYS } from '../table-config'\n\nconst Block = Quill.imports['blots/block']\n\n// @dynamic\nclass Header extends Block {\n static tagName: any\n static blotName: string\n domNode: any\n replaceWith: any\n parent: any\n wrap: any\n enforceAllowedChildren: any\n uiNode: any\n children: any\n statics: any\n appendChild: any\n remove: any\n cache: Record<string, any>\n scroll: any\n static create(value) {\n if (typeof value === 'string') {\n value = { value }\n }\n\n const node = super.create(value.value)\n\n CELL_IDENTITY_KEYS.forEach((key) => {\n if (value[key]) {\n node.setAttribute(`data-${key}`, value[key])\n }\n })\n\n CELL_ATTRIBUTES.forEach((key) => {\n if (value[key]) {\n node.setAttribute(`data-${key}`, value[key])\n }\n })\n\n return node\n }\n\n static formats(domNode) {\n const formats: any = {}\n formats.value = this.tagName.indexOf(domNode.tagName) + 1\n\n return CELL_ATTRIBUTES.concat(CELL_IDENTITY_KEYS).reduce((tableFormats, attribute) => {\n if (domNode.hasAttribute(`data-${attribute}`)) {\n tableFormats[attribute] = domNode.getAttribute(`data-${attribute}`) || undefined\n }\n return tableFormats\n }, formats)\n }\n\n format(name, value) {\n // fix: 在标题处粘贴内容,会导致该粘贴内容的格式错误\n if (Object.prototype.toString.call(value) === '[object Object]') {\n value = value.value\n }\n const headerDom: any = Header.formats(this.domNode)\n const { row, cell, rowspan, colspan } = headerDom\n if (name === Header.blotName) {\n if (value) {\n super.format(name, {\n value,\n row,\n cell,\n rowspan,\n colspan,\n })\n }\n else {\n if (row) {\n this.replaceWith('table-cell-line', {\n row,\n cell,\n rowspan,\n colspan,\n })\n }\n else {\n super.format(name, value)\n }\n }\n }\n else {\n super.format(name, value)\n }\n }\n\n optimize(_context) {\n const { row, cell, rowspan, colspan } = Header.formats(this.domNode)\n\n if (row && this.parent.statics.blotName !== 'table') {\n this.wrap('table', {\n row,\n cell,\n colspan,\n rowspan,\n })\n }\n\n // ShadowBlot optimize\n this.enforceAllowedChildren()\n if (!isNullOrUndefined(this.uiNode) && this.uiNode !== this.domNode.firstChild) {\n this.domNode.insertBefore(this.uiNode, this.domNode.firstChild)\n }\n if (this.children.length === 0) {\n if (!isNullOrUndefined(this.statics.defaultChild)) {\n const child = this.scroll.create(this.statics.defaultChild.blotName)\n this.appendChild(child)\n // TODO double check if necessary\n // child.optimize(context);\n }\n else {\n this.remove()\n }\n }\n // Block optimize\n this.cache = {}\n }\n}\n\nHeader.blotName = 'header'\nHeader.tagName = ['H1', 'H2', 'H3', 'H4', 'H5', 'H6']\n\nexport default Header\n"],"names":[],"mappings":";;;AAIA,MAAM,QAAQ,MAAM,QAAQ,aAAa;AAGzC,MAAM,eAAe,MAAM;AAAA,EAezB,OAAO,OAAO,OAAO;AACf,QAAA,OAAO,UAAU,UAAU;AAC7B,cAAQ,EAAE;IACZ;AAEA,UAAM,OAAO,MAAM,OAAO,MAAM,KAAK;AAElB,uBAAA,QAAQ,CAAC,QAAQ;AAC9B,UAAA,MAAM,GAAG,GAAG;AACd,aAAK,aAAa,QAAQ,GAAG,IAAI,MAAM,GAAG,CAAC;AAAA,MAC7C;AAAA,IAAA,CACD;AAEe,oBAAA,QAAQ,CAAC,QAAQ;AAC3B,UAAA,MAAM,GAAG,GAAG;AACd,aAAK,aAAa,QAAQ,GAAG,IAAI,MAAM,GAAG,CAAC;AAAA,MAC7C;AAAA,IAAA,CACD;AAEM,WAAA;AAAA,EACT;AAAA,EAEA,OAAO,QAAQ,SAAS;AACtB,UAAM,UAAe,CAAA;AACrB,YAAQ,QAAQ,KAAK,QAAQ,QAAQ,QAAQ,OAAO,IAAI;AAExD,WAAO,gBAAgB,OAAO,kBAAkB,EAAE,OAAO,CAAC,cAAc,cAAc;AACpF,UAAI,QAAQ,aAAa,QAAQ,SAAS,EAAE,GAAG;AAC7C,qBAAa,SAAS,IAAI,QAAQ,aAAa,QAAQ,SAAS,EAAE,KAAK;AAAA,MACzE;AACO,aAAA;AAAA,OACN,OAAO;AAAA,EACZ;AAAA,EAEA,OAAO,MAAM,OAAO;AAElB,QAAI,OAAO,UAAU,SAAS,KAAK,KAAK,MAAM,mBAAmB;AAC/D,cAAQ,MAAM;AAAA,IAChB;AACA,UAAM,YAAiB,OAAO,QAAQ,KAAK,OAAO;AAClD,UAAM,EAAE,KAAK,MAAM,SAAS,YAAY;AACpC,QAAA,SAAS,OAAO,UAAU;AAC5B,UAAI,OAAO;AACT,cAAM,OAAO,MAAM;AAAA,UACjB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA,CACD;AAAA,MAAA,OAEE;AACH,YAAI,KAAK;AACP,eAAK,YAAY,mBAAmB;AAAA,YAClC;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UAAA,CACD;AAAA,QAAA,OAEE;AACG,gBAAA,OAAO,MAAM,KAAK;AAAA,QAC1B;AAAA,MACF;AAAA,IAAA,OAEG;AACG,YAAA,OAAO,MAAM,KAAK;AAAA,IAC1B;AAAA,EACF;AAAA,EAEA,SAAS,UAAU;AACX,UAAA,EAAE,KAAK,MAAM,SAAS,YAAY,OAAO,QAAQ,KAAK,OAAO;AAEnE,QAAI,OAAO,KAAK,OAAO,QAAQ,aAAa,SAAS;AACnD,WAAK,KAAK,SAAS;AAAA,QACjB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA,CACD;AAAA,IACH;AAGA,SAAK,uBAAuB;AACxB,QAAA,CAAC,kBAAkB,KAAK,MAAM,KAAK,KAAK,WAAW,KAAK,QAAQ,YAAY;AAC9E,WAAK,QAAQ,aAAa,KAAK,QAAQ,KAAK,QAAQ,UAAU;AAAA,IAChE;AACI,QAAA,KAAK,SAAS,WAAW,GAAG;AAC9B,UAAI,CAAC,kBAAkB,KAAK,QAAQ,YAAY,GAAG;AACjD,cAAM,QAAQ,KAAK,OAAO,OAAO,KAAK,QAAQ,aAAa,QAAQ;AACnE,aAAK,YAAY,KAAK;AAAA,MAAA,OAInB;AACH,aAAK,OAAO;AAAA,MACd;AAAA,IACF;AAEA,SAAK,QAAQ;EACf;AACF;AAEA,OAAO,WAAW;AAClB,OAAO,UAAU,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"list.es.js","sources":["../../../../src/table/formats/list.ts"],"sourcesContent":["import Quill from 'quill'\nimport { CELL_ATTRIBUTES, CELL_IDENTITY_KEYS } from '../table-config'\n\nconst Block = Quill.imports['blots/block']\nconst Container = Quill.imports['blots/container']\n\n// @dynamic\nclass ListContainer extends Container {\n static allowedChildren: any\n static blotName: string\n static tagName: string\n replaceWith: any\n domNode: any\n parent: any\n statics: any\n wrap: any\n\n format(name, value) {\n const { row, cell, rowspan, colspan } = this.domNode.dataset\n if (name === ListContainer.blotName) {\n if (value) {\n super.format(name, { row, cell, rowspan, colspan })\n }\n else if (row) {\n this.replaceWith('table-cell-line', { row, cell, rowspan, colspan })\n }\n }\n }\n}\n/**\n * bugfix: quill源码中(quill/core/editor.js 272行)在处理拷贝时\n * hard code了这个blotName用于处理ol中的li。所以在quill\n * 源码内写法不变的情况下这个名字不能改,否则拷贝有bug\n */\nListContainer.blotName = 'list-container'\nListContainer.tagName = 'OL'\n\n// @dynamic\nclass ListItem extends Block {\n static blotName: string\n static tagName: string\n static requiredContainer: typeof ListContainer\n statics: any\n attachUI: any\n domNode: any\n replaceWith: any\n parent: any\n wrap: any\n children: any\n prev: any\n remove: () => void\n\n static create(value) {\n const node = super.create()\n if (typeof value === 'string') {\n value = { value }\n }\n else {\n [...CELL_IDENTITY_KEYS, ...CELL_ATTRIBUTES].forEach((key) => {\n if (value[key]) {\n node.dataset[key] = value[key]\n }\n })\n }\n node.classList.add(value.value)\n return node\n }\n\n static formats(domNode) {\n const formats: any = {}\n formats.value = domNode.classList.item(0) || undefined\n\n return [...CELL_ATTRIBUTES, ...CELL_IDENTITY_KEYS].reduce((tableFormats, key) => {\n if (domNode.dataset[key]) {\n tableFormats[key] = domNode.dataset[key]\n }\n return tableFormats\n }, formats)\n }\n\n static register() {\n Quill.register({ 'formats/list-container': ListContainer }, true)\n }\n\n constructor(scroll, domNode) {\n super(scroll, domNode)\n const quill = Quill.find(scroll.domNode.parentNode)\n const range = quill.getSelection()\n if (range) {\n const [line] = quill.getLine(range.index)\n const td = line.domNode.closest('td')\n if (td) {\n [...CELL_IDENTITY_KEYS, ...CELL_ATTRIBUTES].forEach(key =>\n td.dataset[key] && domNode.setAttribute(`data-${key}`, td.dataset[key]))\n }\n }\n\n const ui = domNode.ownerDocument.createElement('span')\n const listEventHandler = (e) => {\n if (!scroll.isEnabled()) return\n const { value } = this.statics.formats(domNode, scroll)\n if (value === 'checked') {\n this.format('list', 'unchecked')\n e.preventDefault()\n }\n else if (value === 'unchecked') {\n this.format('list', 'checked')\n e.preventDefault()\n }\n }\n ui.addEventListener('mousedown', listEventHandler)\n ui.addEventListener('touchstart', listEventHandler)\n this.attachUI(ui)\n }\n\n format(name, value) {\n if (name !== ListItem.blotName) {\n super.format(name, value)\n return\n }\n const type = (value && typeof value === 'object') ? value.value : value\n const oldClass = this.domNode.classList[0]\n const tdDom = this.domNode.closest('.editing-select-able')\n const tableCellBlot = tdDom && Quill.find(tdDom)\n const images = this.domNode.querySelectorAll('img[data-image-id]')\n if (!type || type === oldClass) {\n // 消除格式或相同list抵消格式时恢复图片对齐,li转化为table-cell-line\n if (images && images.length) {\n images.forEach((img) => {\n img.style.verticalAlign = 'baseLine'\n })\n }\n if (tableCellBlot && tableCellBlot.statics.blotName === 'table') {\n const tableCellFormats = tableCellBlot.formats()\n this.replaceWith('table-cell-line', tableCellFormats)\n // fix: 移除list格式时移除父级的ol或ul,避免table-cell-line判断无td自动生成td容器\n if (this.parent.statics.blotName === ListContainer.blotName) {\n this.parent.unwrap()\n }\n }\n else {\n super.format(name, value)\n }\n }\n else if (oldClass) {\n this.domNode.className = this.domNode.className.replace(oldClass, type)\n }\n else {\n this.domNode.classList.add(type)\n }\n }\n\n optimize(context) {\n // 判断前一个li是否包含软回车,如果包含则将当前li与之合并后移除\n const tail = this.prev && this.prev.domNode.lastChild\n if (tail && tail.className && tail.className.includes('ql-soft-break')) {\n // 合并dom\n this.domNode.childNodes.forEach((v, i) => {\n if (i > 0) {\n this.prev.domNode.appendChild(v)\n }\n })\n this.remove()\n return\n }\n\n super.optimize(context)\n\n // list类型\n const parentFormats = getFormats(this.parent.domNode)\n const formats = ListItem.formats(this.domNode)\n // 单元格属性\n const data = this.domNode.dataset || []\n const images = this.domNode.querySelectorAll('img[data-image-id]')\n\n // li更新后判断父容器的对应属性是否与自身一致,如果不一致则向上覆盖\n if (parentFormats.list !== formats.value) {\n const oldClass = this.parent.domNode.classList[0]\n if (oldClass) {\n this.parent.domNode.className = this.parent.domNode.className.replace(oldClass, formats.value)\n }\n else {\n this.parent.domNode.classList.add(formats.value)\n }\n }\n\n if (data.cell && !parentFormats.cell) {\n [...CELL_IDENTITY_KEYS, ...CELL_ATTRIBUTES].forEach(key =>\n (formats[key] || data[key]) && this.parent.domNode.setAttribute(`data-${key}`, formats[key] || data[key]))\n // 如果父容器不在表格内则用单元格包裹\n if (this.parent.parent.statics.blotName !== 'table') {\n delete formats.list\n this.wrap('table', formats)\n }\n }\n\n // 当list中包含图片时,设置图片顶对齐\n if (images) {\n images.forEach((img) => {\n img.style.verticalAlign = 'top'\n })\n }\n }\n}\n\nListItem.blotName = 'list'\nListItem.tagName = 'LI'\n\nListContainer.allowedChildren = [ListItem]\nListItem.requiredContainer = ListContainer\n\n// 属性读取方法:兼容table-cell-line、ol、li\n// 因为构造时当前range对应的元素最开始是table-cell-line,然后是li,且ol的formats方法不允许覆写,会导致报错,所以整合一个兼容方法来读取需要的属性。\nfunction getFormats(dom): any {\n const formats = {}\n\n if (dom.tagName === 'OL') {\n formats.list = dom.classList.item(0)\n }\n\n return [...CELL_ATTRIBUTES, ...CELL_IDENTITY_KEYS].reduce((tableFormats, attribute) => {\n if (dom.hasAttribute(`data-${attribute}`)) {\n tableFormats[attribute] = dom.getAttribute(`data-${attribute}`) || undefined\n }\n return tableFormats\n }, formats)\n}\n\nexport { ListContainer, ListItem as default }\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"table.es.js","sources":["../../../../src/table/formats/table.ts"],"sourcesContent":["import Quill from 'quill'\nimport { isNullOrUndefined } from '../../config/editor.utils'\nimport { compare } from '../../utils/method'\nimport {\n CELL_ATTRIBUTES,\n CELL_DEFAULT,\n CELL_IDENTITY_KEYS,\n CELL_MIN_HEIGHT,\n COL_ATTRIBUTES,\n COL_DEFAULT,\n ERROR_LIMIT,\n} from '../table-config'\nimport { getRelativeRect } from '../utils'\nimport Header from './header'\nimport ListItem, { ListContainer } from './list'\n\nconst Break = Quill.imports['blots/break']\nconst Block = Quill.imports['blots/block']\nconst Container = Quill.imports['blots/container']\n\n// @dynamic\nclass TableCellLine extends Block {\n static requiredContainer: any\n static tagName: string\n static className: string\n static blotName: any\n domNode: any\n statics: any\n wrap: any\n parent: any\n\n static create(value) {\n const node = super.create(value)\n\n // fix: when td has background-color, quill can't set it to table-cell blot\n if (value.tdBgColor) {\n node.setAttribute(`data-parent-bg`, value.tdBgColor)\n delete value.tdBgColor\n }\n\n CELL_IDENTITY_KEYS.forEach((key) => {\n const identityMaker = key === 'row' ? rowId : cellId\n node.setAttribute(`data-${key}`, value[key] || identityMaker())\n })\n\n CELL_ATTRIBUTES.forEach((attrName) => {\n const keyValue = value[attrName] || CELL_DEFAULT[attrName]\n keyValue && node.setAttribute(`data-${attrName}`, keyValue)\n })\n\n if (value.height) {\n node.setAttribute('height', value.height)\n }\n\n return node\n }\n\n static formats(domNode) {\n const formats = {}\n if (formats.list) {\n formats.list = domNode.classList.item(0)\n }\n return reduceFormats(domNode, formats)\n }\n\n toggleAttribute(name, value) {\n if (value) {\n this.domNode.setAttribute(name, value)\n }\n else {\n this.domNode.removeAttribute(name)\n }\n }\n\n formatChildren(name, value) {\n this.children.forEach((child) => {\n child.format && child.format(name, value)\n if (!child.domNode.style) {\n return\n }\n if (child.domNode.tagName === 'SPAN' && value) {\n child.domNode.style.backgroundColor = value\n }\n else {\n child.domNode.style.backgroundColor = 'initial'\n }\n })\n }\n\n format(name, value) {\n if ([...CELL_ATTRIBUTES, ...CELL_IDENTITY_KEYS, 'parent-bg'].includes(name)) {\n if (value) {\n this.domNode.setAttribute(`data-${name}`, value)\n }\n else {\n this.domNode.removeAttribute(`data-${name}`)\n }\n }\n else if (name === 'header') {\n if (!value) {\n return\n }\n const { row, cell, rowspan, colspan }: any = TableCellLine.formats(this.domNode)\n super.format(name, {\n value,\n row,\n cell,\n rowspan,\n colspan,\n })\n }\n else {\n super.format(name, value)\n }\n switch (true) {\n case name === 'cell-bg': {\n this.toggleAttribute('data-cell-bg', value)\n }\n }\n }\n\n optimize(context) {\n super.optimize(context)\n\n // cover shadowBlot's wrap call, pass params parentBlot initialize\n // needed\n const { row, cell, rowspan, colspan, cellBg } = this.domNode.dataset\n const formats: Record<string, any> = TableCellLine.formats(this.domNode)\n const parentFormats = this.parent.formats()\n if (this.statics.requiredContainer && !(this.parent instanceof this.statics.requiredContainer)) {\n this.wrap(this.statics.requiredContainer.blotName, { row, cell, rowspan, colspan, cellBg })\n }\n else if (!compare(formats, parentFormats)) {\n this.parent.format('row', formats.row)\n this.parent.format('cell', formats.cell)\n this.parent.format('rowspan', formats.rowspan)\n this.parent.format('colspan', formats.colspan)\n formats['cell-bg'] && this.parent.setCellBg(formats['cell-bg'])\n }\n\n const parentHeight = this.domNode.getAttribute('height')\n if (parentHeight) {\n this.parent.domNode.style.height = parentHeight\n }\n }\n\n tableCell() {\n return this.parent\n }\n}\nTableCellLine.blotName = 'table-cell-line'\nTableCellLine.className = 'qlbt-cell-line'\nTableCellLine.tagName = 'DIV'\n\n// @dynamic\nclass TableCell extends Container {\n static allowedChildren: any\n static blotName: any\n static requiredContainer: any\n static tagName: string\n next: any\n children: any\n parent: any\n domNode: any\n statics: any\n wrap: any\n splitAfter: any\n prev: any\n scroll: any\n\n static create(value = { row: rowId() }) {\n const node = super.create(value)\n\n CELL_IDENTITY_KEYS.forEach((key) => {\n node.setAttribute(`data-${key}`, value[key])\n })\n\n CELL_ATTRIBUTES.forEach((attrName) => {\n if (value[attrName]) {\n node.setAttribute(attrName, value[attrName])\n }\n })\n\n return node\n }\n\n static formats(domNode) {\n const formats = {\n height: undefined,\n row: undefined,\n }\n\n formats.height = domNode.getAttribute('height') || undefined\n\n if (domNode.hasAttribute('data-row')) {\n formats.row = domNode.getAttribute('data-row')\n }\n\n if (domNode.hasAttribute('data-cell-bg')) {\n formats['cell-bg'] = domNode.getAttribute('data-cell-bg') || undefined\n }\n return CELL_ATTRIBUTES.reduce((formats, attribute) => {\n if (domNode.hasAttribute(attribute)) {\n formats[attribute] = domNode.getAttribute(attribute)\n }\n\n return formats\n }, formats)\n }\n\n checkMerge() {\n if (super.checkMerge() && !isNullOrUndefined(this.next.children.head)) {\n const getCellId = (node) => {\n return (\n (node.formats && node.formats()[node.statics.blotName]) || {\n cell: node.domNode.getAttribute('data-cell'),\n }\n )\n }\n const thisHead = getCellId(this.children.head)\n const thisTail = getCellId(this.children.tail)\n const nextHead = getCellId(this.next.children.head)\n const nextTail = getCellId(this.next.children.tail)\n return thisHead.cell === thisTail.cell && thisHead.cell === nextHead.cell && thisHead.cell === nextTail.cell\n }\n return false\n }\n\n cellOffset() {\n if (this.parent) {\n return this.parent.children.indexOf(this)\n }\n return -1\n }\n\n formats() {\n const formats = {}\n\n if (this.domNode.hasAttribute('data-row')) {\n formats.row = this.domNode.getAttribute('data-row')\n }\n if (this.domNode.hasAttribute('data-cell')) {\n formats.cell = this.domNode.getAttribute('data-cell')\n }\n\n return CELL_ATTRIBUTES.reduce((tableFormats, attribute) => {\n if (this.domNode.hasAttribute(attribute)) {\n tableFormats[attribute] = this.domNode.getAttribute(attribute)\n }\n\n return tableFormats\n }, formats)\n }\n\n toggleAttribute(name, value) {\n if (value) {\n this.domNode.setAttribute(name, value)\n }\n else {\n this.domNode.removeAttribute(name)\n }\n }\n\n formatChildren(name, value) {\n this.children.forEach((child) => {\n child.format(name, value)\n })\n }\n\n /**\n * this method is for TableCellLine to change cell background color\n * if use `format('cell-bg', value)` will loop trigger\n * TableCellLine.optimize -> TableCell.format -> TableCellLine.optimize ...\n */\n setCellBg(value?: string) {\n if (value) {\n this.domNode.style.backgroundColor = value\n }\n else {\n this.domNode.style.backgroundColor = 'initial'\n }\n }\n\n format(name, value) {\n const quill = Quill.find(this.scroll.domNode.parentNode)\n switch (true) {\n case CELL_ATTRIBUTES.includes(name):\n this.toggleAttribute(name, value)\n break\n case ['row', 'cell'].includes(name):\n this.toggleAttribute(`data-${name}`, value)\n break\n case name === 'background': {\n const hasBgColor = this.domNode.querySelectorAll('div.qlbt-cell-line[data-parent-bg]')\n hasBgColor.forEach(child => child.removeAttribute('data-parent-bg'))\n this.domNode.style.background = ''\n this.domNode.style.backgroundColor = value\n this.children.head.format('parent-bg', value)\n break\n }\n // TODO: 其他格式可同理实现,但已有格式清除时会清除所有格式,待解决\n case name === 'size': {\n const start = quill.getIndex(this.children.head)\n const total = quill.getIndex(this.children.tail) + this.children.tail.length()\n const length = total - start > 0 ? total - start : 0\n quill.setSelection(start, length, Quill.sources.USER)\n quill.format(name, value, Quill.sources.USER)\n // 设置选区后需清除选区,否则会固定处理选区内容\n quill.setSelection(start)\n break\n }\n case name === 'cell-bg': {\n this.toggleAttribute('data-cell-bg', value)\n this.toggleAttribute('data-parent-bg', value)\n this.formatChildren(name, value)\n this.setCellBg(value)\n break\n }\n }\n }\n\n optimize(context) {\n // fix: when td has background-color, quill can't set it to table-cell bolt\n const hasBg: any = Array.from(this.domNode.childNodes).find((item: any) => item.getAttribute('data-parent-bg'))\n const bgColor = hasBg && hasBg.getAttribute('data-parent-bg')\n if (bgColor && bgColor !== this.domNode.style.backgroundColor) {\n this.domNode.style.backgroundColor = bgColor\n }\n\n const rId = this.domNode.getAttribute('data-row')\n if (this.statics.requiredContainer && !(this.parent instanceof this.statics.requiredContainer)) {\n this.wrap(this.statics.requiredContainer.blotName, {\n row: rId,\n })\n }\n else if (rId !== this.parent.formats().row) {\n this.parent.format('row', rId)\n }\n\n this.children.forEach((child) => {\n if (isNullOrUndefined(child.next)) {\n return\n }\n const childFormats: any = this.getFormat(child.domNode)\n const nextFormats: any = this.getFormat(child.next.domNode)\n if (childFormats.cell !== nextFormats.cell) {\n const next = this.splitAfter(child)\n if (next) {\n next.optimize()\n }\n // We might be able to merge with prev now\n if (this.prev) {\n this.prev.optimize()\n }\n }\n })\n\n super.optimize(context)\n }\n\n // 兼容读取TableCell中的子blot,包括table-cell-line、line、head\n getFormat(domNode) {\n const formats = {}\n const firstChild = domNode.childNodes[0]\n if (firstChild && domNode.tagName === 'OL') {\n formats.list = firstChild.classList.item(0)\n }\n\n return reduceFormats(domNode, formats)\n }\n\n row() {\n return this.parent\n }\n\n rowOffset() {\n if (this.row()) {\n return -1\n }\n return this.row().rowOffset()\n }\n\n table() {\n return this.row() && this.row().table()\n }\n}\nTableCell.blotName = 'table'\nTableCell.tagName = 'TD'\n\n// @dynamic\nclass TableRow extends Container {\n static requiredContainer: any\n static allowedChildren: any\n static blotName: string\n static tagName: string\n next: any\n children: any\n domNode: any\n statics: any\n wrap: any\n splitAfter: any\n enforceAllowedChildren: any\n uiNode: any\n parent: any\n prev: any\n\n static create(value) {\n const node = super.create(value)\n if (value.row) {\n node.setAttribute('data-row', value.row)\n }\n return node\n }\n\n checkMerge() {\n if (super.checkMerge() && !isNullOrUndefined(this.next.children.head)) {\n const thisHead = this.children.head.formats()\n const thisTail = this.children.tail.formats()\n const nextHead = this.next.children.head.formats()\n const nextTail = this.next.children.tail.formats()\n\n return thisHead.row === thisTail.row && thisHead.row === nextHead.row && thisHead.row === nextTail.row\n }\n return false\n }\n\n formats() {\n return ['row'].reduce((formats, attrName) => {\n if (this.domNode.hasAttribute(`data-${attrName}`)) {\n formats[attrName] = this.domNode.getAttribute(`data-${attrName}`)\n }\n return formats\n }, {})\n }\n\n format(key, value) {\n this.domNode.setAttribute(`data-${key}`, value)\n }\n\n optimize(context) {\n // optimize function of ShadowBlot\n if (this.statics.requiredContainer && !(this.parent instanceof this.statics.requiredContainer)) {\n this.wrap(this.statics.requiredContainer.blotName)\n }\n\n this.children.forEach((child) => {\n if (isNullOrUndefined(child.next)) {\n return\n }\n const childFormats = child.formats()\n const nextFormats = child.next.formats()\n if (childFormats.row !== nextFormats.row) {\n const next = this.splitAfter(child)\n if (next) {\n next.optimize()\n }\n if (this.prev) {\n this.prev.optimize()\n }\n }\n })\n\n super.optimize(context)\n }\n\n rowOffset() {\n if (!this.parent) {\n return -1\n }\n return this.parent.children.indexOf(this)\n }\n\n table() {\n return this.parent && this.parent.parent\n }\n}\nTableRow.blotName = 'table-row'\nTableRow.tagName = 'TR'\n\n// @dynamic\nclass TableBody extends Container {\n static requiredContainer: any\n static allowedChildren: any\n static blotName: string\n static tagName: string\n}\nTableBody.blotName = 'table-body'\nTableBody.tagName = 'TBODY'\n\n// @dynamic\nclass TableCol extends Block {\n static requiredContainer: any\n static blotName: string\n static tagName: string\n domNode: any\n\n static create(value) {\n const node = super.create(value)\n COL_ATTRIBUTES.forEach((attrName) => {\n node.setAttribute(`${attrName}`, value[attrName] || COL_DEFAULT[attrName])\n })\n return node\n }\n\n static formats(domNode) {\n return COL_ATTRIBUTES.reduce((formats, attribute) => {\n if (domNode.hasAttribute(`${attribute}`)) {\n formats[attribute] = domNode.getAttribute(`${attribute}`) || undefined\n }\n return formats\n }, {})\n }\n\n format(name, value) {\n if (COL_ATTRIBUTES.includes(name)) {\n this.domNode.setAttribute(`${name}`, value || COL_DEFAULT[name])\n }\n else {\n super.format(name, value)\n }\n }\n\n html() {\n return this.domNode.outerHTML\n }\n}\nTableCol.blotName = 'table-col'\nTableCol.tagName = 'col'\n\n// @dynamic\nclass TableColGroup extends Container {\n static requiredContainer: any\n static allowedChildren: any\n static blotName: string\n static tagName: string\n parent: any\n statics: any\n\n optimize(context) {\n super.optimize(context)\n // optimize 是当前slot更新后调用的callback方法,当TableBody更新后判断父容器的存在和类型相符则调用更新表格宽度方法更新宽度\n // 切记不要在当前slot内调用能改变当前slot的方法,会造成无限循环,一般通过子更新改变父较好\n if (this.parent && this.statics.requiredContainer && this.parent instanceof this.statics.requiredContainer) {\n this.parent.updateTableWidth()\n }\n // 此时colgroup创建完毕,检查colgroup的col数量是否正确\n // fix:colgroup的col数量不正确导致最后一列宽度为空\n if (this.parent.parent.domNode.className === 'quill-better-table-wrapper'\n && this.parent.parent.domNode.tagName === 'DIV'\n && this.parent.domNode.children.length >= 2\n && this.parent.domNode.children[0].tagName === 'COLGROUP'\n && this.parent.domNode.children[1].tagName === 'TBODY'\n ) {\n let trId = ''\n let colSpan = 0\n let colgroupNumber = 0\n for (let i = 0; i < this.parent.domNode.children.length; i++) {\n if (this.parent.domNode.children[i].tagName === 'TBODY') {\n if (trId === '') {\n trId = this.parent.domNode.children[i].children[0].getAttribute('data-row')\n }\n colSpan = this.findTdColspanInTbody(this.parent.domNode.children[i], trId)\n }\n else if (this.parent.domNode.children[i].tagName === 'COLGROUP') {\n colgroupNumber = this.parent.domNode.children[i].children.length\n }\n }\n let elementSibling = this.parent.domNode.nextElementSibling\n\n while (elementSibling && elementSibling.tagName === 'TABLE') {\n for (let i = 0; i < elementSibling.children.length; i++) {\n if (elementSibling.children[i].tagName === 'TBODY') {\n colSpan += this.findTdColspanInTbody(elementSibling.children[i], trId)\n }\n }\n elementSibling = elementSibling.nextElementSibling\n }\n\n if (colgroupNumber < colSpan) {\n const length = colSpan - colgroupNumber\n\n for (let i = 0; i < length; i++) {\n const newCol = document.createElement('col')\n newCol.width = this.parent.domNode.children[0].children[this.parent.domNode.children[0].children.length - 1].width\n const newBr = document.createElement('br')\n newCol.appendChild(newBr)\n this.parent.domNode.children[0].appendChild(newCol)\n this.parent.domNode.style.width += newCol.width\n }\n }\n }\n }\n\n // this.parent.domNode.children[1].children[0].children[0].colSpan\n findTdColspanInTbody(tbody, trId) {\n let colSpan = 0\n // let tbodyChildrenLength\n for (let i = 0; i < tbody.children.length; i++) {\n if (tbody.children[i].getAttribute('data-row') !== trId) {\n return colSpan\n }\n for (let j = 0; j < tbody.children[i].children.length; j++) {\n if (tbody.children[i].children[j].colSpan) {\n colSpan += tbody.children[i].children[j].colSpan\n }\n }\n }\n return colSpan\n }\n}\nTableColGroup.blotName = 'table-col-group'\nTableColGroup.tagName = 'colgroup'\n\n// @dynamic\nclass TableContainer extends Container {\n static blotName: string\n static className: string\n static tagName: string\n static requiredContainer: any\n static allowedChildren: any\n domNode: any\n parent: any\n children: any\n descendants: any\n scroll: any\n remove: any\n static create() {\n const node = super.create()\n return node\n }\n\n constructor(scroll, domNode) {\n super(scroll, domNode)\n domNode.setAttribute('contenteditable', false)\n this.updateTableWidth()\n }\n\n updateTableWidth() {\n let colGroup = this.colGroup()\n if (!colGroup) {\n // undo时原表格dom被移除,因此colGroup和domNode都不对应当前新表格,需从父容器dom树重新获取\n // 如果表格有style属性则不为新添加表格,避免错误赋值\n if (this.parent && this.parent.children.head && this.domNode.hasAttribute('style')) {\n colGroup = this.parent.children.head.children.head\n this.domNode = this.parent.children.head.domNode\n }\n else if (this.domNode.tagName === 'TABLE') {\n // this.domNode.forEach\n return\n }\n else {\n return\n }\n }\n const tableWidth = colGroup.children.reduce((sumWidth, col) => {\n // 兼容 table-col 不存在的情况\n const tableCol = col.formats()[TableCol.blotName]\n let tableColWidth = COL_DEFAULT.width\n if (tableCol && tableCol.width) {\n tableColWidth = Number.parseInt(tableCol.width, 10)\n }\n sumWidth = sumWidth + tableColWidth\n return sumWidth\n }, 0)\n this.domNode.removeAttribute('style')\n this.domNode.style.width = `${tableWidth}px`\n // 当表格加载结束后修正width设定为auto的列宽度\n if (colGroup.next) {\n setTimeout(() => {\n let tdIndex = 0\n let maxTds\n const colNum = colGroup.children.length\n const tableRows = this.descendants(TableRow)\n // 查询单元格数等于列数的行作为宽度赋值依据\n for (let i = 0; i < tableRows.length; i++) {\n const tds = tableRows[i].domNode.querySelectorAll('td')\n if (tds.length === colNum) {\n maxTds = tds\n break\n }\n }\n colGroup.children.forEach((col) => {\n if (maxTds && col.domNode.width === 'auto') {\n const width = getComputedStyle(maxTds[tdIndex]).width\n const num = Number.parseInt(width, 10)\n col.domNode.width = (num < COL_DEFAULT.width && COL_DEFAULT.width) || num\n }\n tdIndex++\n })\n })\n }\n }\n\n cells(column) {\n return this.rows().map(row => row.children.at(column))\n }\n\n colGroup() {\n return this.children.head\n }\n\n deleteColumns(compareRect, delIndexes = [], editorWrapper) {\n const [body] = this.descendants(TableBody)\n if (isNullOrUndefined(body) || isNullOrUndefined(body.children.head)) {\n return\n }\n\n const tableCells = this.descendants(TableCell)\n const removedCells = []\n const modifiedCells = []\n\n tableCells.forEach((cell) => {\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\n\n if (cellRect.x + ERROR_LIMIT > compareRect.x && cellRect.x1 - ERROR_LIMIT < compareRect.x1) {\n removedCells.push(cell)\n }\n else if (cellRect.x < compareRect.x + ERROR_LIMIT && cellRect.x1 > compareRect.x1 - ERROR_LIMIT) {\n modifiedCells.push(cell)\n }\n })\n\n if (removedCells.length === tableCells.length) {\n this.tableDestroy()\n return true\n }\n\n // remove the matches column tool cell\n delIndexes.forEach(() => {\n const col = this.colGroup().children.at(delIndexes[0])\n if (!col || this.colGroup().children.at(delIndexes[0]).domNode !== this.colGroup().domNode.children[delIndexes[0]]) {\n this.colGroup().domNode.removeChild(this.colGroup().domNode.children[delIndexes[0]])\n }\n else {\n col.remove()\n }\n })\n\n removedCells.forEach((cell) => {\n cell.remove()\n })\n\n modifiedCells.forEach((cell) => {\n const cellColspan = Number.parseInt(cell.formats().colspan, 10)\n // const cellWidth = parseInt(cell.formats().width, 10);\n cell.format('colspan', cellColspan - delIndexes.length)\n })\n\n this.updateTableWidth()\n }\n\n deleteRow(compareRect, editorWrapper) {\n const [body] = this.descendants(TableBody)\n if (isNullOrUndefined(body) || isNullOrUndefined(body.children.head)) {\n return\n }\n\n const tableCells = this.descendants(TableCell)\n const tableRows = this.descendants(TableRow)\n const removedCells = [] // cells to be removed\n const modifiedCells = [] // cells to be modified\n const fallCells = [] // cells to fall into next row\n\n tableCells.forEach((cell) => {\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\n\n if (cellRect.y > compareRect.y - ERROR_LIMIT && cellRect.y1 < compareRect.y1 + ERROR_LIMIT) {\n removedCells.push(cell)\n }\n else if (cellRect.y < compareRect.y + ERROR_LIMIT && cellRect.y1 > compareRect.y1 - ERROR_LIMIT) {\n modifiedCells.push(cell)\n\n if (Math.abs(cellRect.y - compareRect.y) < ERROR_LIMIT) {\n fallCells.push(cell)\n }\n }\n })\n\n if (removedCells.length === tableCells.length) {\n this.tableDestroy()\n return\n }\n\n // compute length of removed rows\n const removedRowsLength = this.rows().reduce((sum, row) => {\n const rowRect = getRelativeRect(row.domNode.getBoundingClientRect(), editorWrapper)\n\n if (rowRect.y > compareRect.y - ERROR_LIMIT && rowRect.y1 < compareRect.y1 + ERROR_LIMIT) {\n sum += 1\n }\n return sum\n }, 0)\n\n // it must execute before the table layout changed with other operation\n fallCells.forEach((cell) => {\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\n const nextRow = cell.parent.next\n const cellsInNextRow = nextRow.children\n\n const refCell = cellsInNextRow.reduce((ref, compareCell) => {\n const compareCellRect = getRelativeRect(compareCell.domNode.getBoundingClientRect(), editorWrapper)\n if (cellRect.x1 - compareCellRect.x < ERROR_LIMIT) {\n ref = compareCell\n }\n return ref\n }, null)\n\n nextRow.insertBefore(cell, refCell)\n const curRowId = nextRow.formats().row\n cell.format('row', curRowId)\n cell.children.forEach((cellLine) => {\n cellLine.format('row', curRowId)\n })\n })\n\n modifiedCells.forEach((cell) => {\n const cellRowspan = Number.parseInt(cell.formats().rowspan, 10)\n const curRowspan = cellRowspan - removedRowsLength\n cell.domNode.removeAttribute('style')\n cell.format('rowspan', curRowspan)\n cell.children.forEach((cellLine) => {\n cellLine.format('rowspan', curRowspan)\n })\n })\n\n removedCells.forEach((cell) => {\n cell.remove()\n })\n\n // fix: There will be a empty tr left if i delete the last row of a table,\n // this will cause the bottom border of the table to disappear,\n // and the empty tr will execute the matchTableRow method.\n tableRows.forEach((row) => {\n if (row.children.length === 0) {\n row.remove()\n }\n })\n }\n\n tableDestroy() {\n const quill = Quill.find(this.scroll.domNode.parentNode)\n const tableModule = quill.getModule('better-table')\n this.remove()\n tableModule.hideTableTools()\n quill.update(Quill.sources.USER)\n }\n\n insertCell(tableRow, ref, bg = '') {\n const id = cellId()\n const rId = tableRow.formats().row\n const tableCell = this.scroll.create(\n TableCell.blotName,\n { ...CELL_DEFAULT, row: rId },\n )\n tableCell.domNode.style.backgroundColor = bg\n const cellLine = this.scroll.create(TableCellLine.blotName, {\n row: rId,\n cell: id,\n })\n tableCell.appendChild(cellLine)\n\n if (ref) {\n tableRow.insertBefore(tableCell, ref)\n }\n else {\n tableRow.appendChild(tableCell)\n }\n }\n\n insertColumn(compareRect, colIndex, isRight = true, editorWrapper) {\n const [body] = this.descendants(TableBody)\n const [tableColGroup] = this.descendants(TableColGroup)\n const tableCols = this.descendants(TableCol)\n const addAsideCells = []\n const modifiedCells = []\n const affectedCells = []\n\n if (isNullOrUndefined(body) || isNullOrUndefined(body.children.head)) {\n return\n }\n const tableCells = this.descendants(TableCell)\n tableCells.forEach((cell) => {\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\n\n if (isRight) {\n if (Math.abs(cellRect.x1 - compareRect.x1) < ERROR_LIMIT) {\n // the right of selected boundary equal to the right of table cell,\n // add a new table cell right aside this table cell\n addAsideCells.push(cell)\n }\n else if (compareRect.x1 - cellRect.x > ERROR_LIMIT && compareRect.x1 - cellRect.x1 < -ERROR_LIMIT) {\n // the right of selected boundary is inside this table cell\n // colspan of this table cell will increase 1\n modifiedCells.push(cell)\n }\n }\n else {\n if (Math.abs(cellRect.x - compareRect.x) < ERROR_LIMIT) {\n // left of selected boundary equal to left of table cell,\n // add a new table cell left aside this table cell\n addAsideCells.push(cell)\n }\n else if (compareRect.x - cellRect.x > ERROR_LIMIT && compareRect.x - cellRect.x1 < -ERROR_LIMIT) {\n // the left of selected boundary is inside this table cell\n // colspan of this table cell will increase 1\n modifiedCells.push(cell)\n }\n }\n })\n\n addAsideCells.forEach((cell) => {\n const ref = isRight ? cell.next : cell\n const id = cellId()\n const tableRow = cell.parent\n const rId = tableRow.formats().row\n const cellFormats = cell.formats()\n const tableCell = this.scroll.create(\n TableCell.blotName,\n { ...CELL_DEFAULT, row: rId, rowspan: cellFormats.rowspan },\n )\n const cellLine = this.scroll.create(TableCellLine.blotName, {\n row: rId,\n cell: id,\n rowspan: cellFormats.rowspan,\n })\n tableCell.appendChild(cellLine)\n\n if (ref) {\n tableRow.insertBefore(tableCell, ref)\n }\n else {\n tableRow.appendChild(tableCell)\n }\n affectedCells.push(tableCell)\n })\n\n // insert new tableCol\n const tableCol = this.scroll.create(TableCol.blotName, true)\n let colRef\n if (isRight) {\n colRef = tableCols[colIndex] && tableCols[colIndex].next\n }\n else {\n colRef = tableCols[colIndex]\n }\n\n if (colRef) {\n tableColGroup.insertBefore(tableCol, colRef)\n }\n else {\n tableColGroup.appendChild(tableCol)\n }\n\n modifiedCells.forEach((cell) => {\n const cellColspan = cell.formats().colspan\n cell.format('colspan', Number.parseInt(cellColspan, 10) + 1)\n affectedCells.push(cell)\n })\n\n affectedCells.sort((cellA, cellB) => {\n const y1 = cellA.domNode.getBoundingClientRect().y\n const y2 = cellB.domNode.getBoundingClientRect().y\n return y1 - y2\n })\n\n this.updateTableWidth()\n return affectedCells\n }\n\n insertRow(compareRect, isDown, editorWrapper) {\n const [body] = this.descendants(TableBody)\n if (isNullOrUndefined(body) || isNullOrUndefined(body.children.head)) {\n return\n }\n\n const tableCells = this.descendants(TableCell)\n const rId = rowId()\n const newRow = this.scroll.create(TableRow.blotName, {\n row: rId,\n })\n const addBelowCells = []\n const modifiedCells = []\n const affectedCells = []\n\n tableCells.forEach((cell) => {\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\n\n if (isDown) {\n if (Math.abs(cellRect.y1 - compareRect.y1) < ERROR_LIMIT) {\n addBelowCells.push(cell)\n }\n else if (compareRect.y1 - cellRect.y > ERROR_LIMIT && compareRect.y1 - cellRect.y1 < -ERROR_LIMIT) {\n modifiedCells.push(cell)\n }\n }\n else {\n if (Math.abs(cellRect.y - compareRect.y) < ERROR_LIMIT) {\n addBelowCells.push(cell)\n }\n else if (compareRect.y - cellRect.y > ERROR_LIMIT && compareRect.y - cellRect.y1 < -ERROR_LIMIT) {\n modifiedCells.push(cell)\n }\n }\n })\n\n // ordered table cells with rect.x, fix error for inserting\n // new table cell in complicated table with wrong order.\n const sortFunc = (cellA, cellB) => {\n const x1 = cellA.domNode.getBoundingClientRect().x\n const x2 = cellB.domNode.getBoundingClientRect().x\n return x1 - x2\n }\n addBelowCells.sort(sortFunc)\n\n addBelowCells.forEach((cell) => {\n const cId = cellId()\n const cellFormats = cell.formats()\n\n const tableCell = this.scroll.create(\n TableCell.blotName,\n { ...CELL_DEFAULT, row: rId, cell: cId, colspan: cellFormats.colspan },\n )\n const cellLine = this.scroll.create(TableCellLine.blotName, {\n row: rId,\n cell: cId,\n colspan: cellFormats.colspan,\n })\n const empty = this.scroll.create(Break.blotName)\n cellLine.appendChild(empty)\n tableCell.appendChild(cellLine)\n newRow.appendChild(tableCell)\n affectedCells.push(tableCell)\n })\n\n modifiedCells.forEach((cell) => {\n const cellRowspan = Number.parseInt(cell.formats().rowspan, 10)\n cell.format('rowspan', cellRowspan + 1)\n affectedCells.push(cell)\n })\n\n const refRow = this.rows().find((row) => {\n const rowRect = getRelativeRect(row.domNode.getBoundingClientRect(), editorWrapper)\n if (isDown) {\n return Math.abs(rowRect.y - compareRect.y - compareRect.height) < ERROR_LIMIT\n }\n else {\n return Math.abs(rowRect.y - compareRect.y) < ERROR_LIMIT\n }\n })\n body.insertBefore(newRow, refRow)\n\n // reordering affectedCells\n affectedCells.sort(sortFunc)\n return affectedCells\n }\n\n mergeCells(_compareRect, mergingCells, rowspan, colspan, _editorWrapper) {\n const mergedCell = mergingCells.reduce((result, tableCell, index) => {\n if (index !== 0) {\n if (result) {\n tableCell.moveChildren(result)\n }\n tableCell.remove()\n }\n else {\n tableCell.format('colspan', colspan)\n tableCell.format('rowspan', rowspan)\n result = tableCell\n if (rowspan > 1) {\n // fix: 比较当前单元格高度样式与rowspan最小高度,小于则设置高度,不判断实际高度,因为合并时这一刻实际高度可能高于最小高度\n const minHeight = CELL_MIN_HEIGHT * rowspan + rowspan - 1\n const cellHeight = Number.parseInt(tableCell.domNode.style.height, 10) || 0\n if (cellHeight < minHeight) {\n tableCell.domNode.style.height = `${minHeight}px`\n }\n }\n }\n\n return result\n }, null)\n\n const rId = mergedCell.domNode.getAttribute('data-row')\n const cId = mergedCell.children.head.domNode.getAttribute('data-cell')\n mergedCell.children.forEach((cellLine) => {\n cellLine.domNode.setAttribute('data-parent-bg', mergedCell.domNode.style.backgroundColor)\n if (cellLine.children.head.domNode.style) {\n cellLine.children.head.domNode.style.backgroundColor = mergedCell.domNode.style.backgroundColor\n }\n\n if (!cellLine.prev || cellLine.domNode.textContent.trim()) {\n cellLine.format('cell', cId)\n cellLine.format('row', rId)\n cellLine.format('colspan', colspan)\n cellLine.format('rowspan', rowspan)\n }\n else {\n cellLine.remove()\n }\n })\n\n return mergedCell\n }\n\n unmergeCells(unmergingCells, editorWrapper) {\n let cellFormats: any = {}\n let cellRowspan = 1\n let cellColspan = 1\n\n unmergingCells.forEach((tableCell) => {\n const tableCellBgColor = tableCell.domNode.style.backgroundColor\n cellFormats = tableCell.formats()\n cellRowspan = cellFormats.rowspan\n cellColspan = cellFormats.colspan\n\n if (cellColspan > 1) {\n const ref = tableCell.next\n const row = tableCell.row()\n tableCell.format('colspan', 1)\n if (tableCell.domNode.children && tableCell.domNode.children[0].tagName === 'DIV' && tableCell.domNode.children[0].getAttribute('data-colspan')) {\n tableCell.domNode.children[0].setAttribute('data-colspan', 1)\n }\n for (let colspanIndex = cellColspan; colspanIndex > 1; colspanIndex--) {\n this.insertCell(row, ref, tableCellBgColor)\n }\n }\n\n if (cellRowspan > 1) {\n let rowspanIndex = cellRowspan\n let nextRow = tableCell.row().next\n while (rowspanIndex > 1) {\n const refInNextRow = nextRow.children.reduce((result, cell) => {\n const compareRect = getRelativeRect(tableCell.domNode.getBoundingClientRect(), editorWrapper)\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\n if (Math.abs(compareRect.x1 - cellRect.x) < ERROR_LIMIT) {\n result = cell\n }\n return result\n }, null)\n\n for (let colspanIndex = cellColspan; colspanIndex > 0; colspanIndex--) {\n this.insertCell(nextRow, refInNextRow, tableCellBgColor)\n }\n\n rowspanIndex -= 1\n nextRow = nextRow.next\n }\n\n tableCell.domNode.removeAttribute('style')\n if (tableCell.domNode.children && tableCell.domNode.children[0].tagName === 'DIV' && tableCell.domNode.children[0].getAttribute('data-rowspan')) {\n tableCell.domNode.children[0].setAttribute('data-rowspan', 1)\n }\n tableCell.format('rowspan', 1)\n }\n })\n }\n\n emptyCells(selectedTds) {\n selectedTds.forEach((selectedTd) => {\n // 构造空的table cell line, 优先使用单元格已有rowId和cellId,避免从table-cell-line向上层td提交id时不一致导致错位\n const cellFormats = selectedTd.formats()\n const cellLine = this.scroll.create(TableCellLine.blotName, {\n row: cellFormats.row || rowId(),\n cell: cellFormats.cell || cellId(),\n rowspan: cellFormats.rowspan,\n colspan: cellFormats.colspan,\n })\n const empty = this.scroll.create(Break.blotName)\n cellLine.appendChild(empty)\n\n selectedTd.domNode.innerHTML = ''\n selectedTd.appendChild(cellLine)\n })\n }\n\n rows() {\n const body = this.children.tail\n if (isNullOrUndefined(body)) {\n return []\n }\n return body.children.map(row => row)\n }\n}\nTableContainer.blotName = 'ql-table-container'\nTableContainer.className = 'quill-better-table'\nTableContainer.tagName = 'TABLE'\n\n// @dynamic\nclass TableViewWrapper extends Container {\n static blotName: string\n static tagName: string\n static className: string\n static allowedChildren: any\n constructor(scroll, domNode) {\n super(scroll, domNode)\n const quill = Quill.find(scroll.domNode.parentNode)\n // fix: 只读模式时超长表格默认包含滚动条\n if (quill.options.readOnly) {\n domNode.style.overflow = 'auto'\n }\n domNode.addEventListener(\n 'scroll',\n (e) => {\n const tableModule = quill.getModule('better-table')\n if (tableModule.columnTool) {\n tableModule.columnTool.domNode.scrollLeft = e.target.scrollLeft\n }\n\n if (tableModule.tableSelection && tableModule.tableSelection.selectedTds.length > 0) {\n tableModule.tableSelection.repositionHelpLines()\n }\n },\n false,\n )\n }\n}\nTableViewWrapper.blotName = 'table-view'\nTableViewWrapper.className = 'quill-better-table-wrapper'\nTableViewWrapper.tagName = 'DIV'\n\nTableViewWrapper.allowedChildren = [TableContainer]\nTableContainer.requiredContainer = TableViewWrapper\n\nTableContainer.allowedChildren = [TableBody, TableColGroup]\nTableBody.requiredContainer = TableContainer\n\nTableBody.allowedChildren = [TableRow]\nTableRow.requiredContainer = TableBody\n\nTableRow.allowedChildren = [TableCell]\nTableCell.requiredContainer = TableRow\n\nTableCell.allowedChildren = [TableCellLine, Header, ListItem, ListContainer]\nTableCellLine.requiredContainer = TableCell\n\nTableColGroup.allowedChildren = [TableCol]\nTableColGroup.requiredContainer = TableContainer\n\nTableCol.requiredContainer = TableColGroup\n\nfunction rowId() {\n const id = Math.random().toString(36).slice(2, 6)\n return `row-${id}`\n}\n\nfunction cellId() {\n const id = Math.random().toString(36).slice(2, 6)\n return `cell-${id}`\n}\n\nfunction reduceFormats(domNode: HTMLElement, formats: Record<string, any>) {\n return [...CELL_ATTRIBUTES, ...CELL_IDENTITY_KEYS].reduce((tableFormats, attribute) => {\n if (domNode.hasAttribute(`data-${attribute}`)) {\n tableFormats[attribute] = domNode.getAttribute(`data-${attribute}`) || undefined\n }\n return tableFormats\n }, formats)\n}\n\nexport {\n CELL_ATTRIBUTES,\n CELL_IDENTITY_KEYS,\n cellId,\n rowId,\n TableBody,\n TableCell,\n TableCellLine,\n TableCol,\n TableColGroup,\n TableContainer,\n TableRow,\n TableViewWrapper,\n}\n"],"names":["formats"],"mappings":"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"}
|