@opentiny/fluent-editor 3.23.2 → 3.23.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +103 -102
- package/es/attributors/line-height.es.js.map +1 -1
- package/es/config/base64-image.es.js.map +1 -1
- package/es/config/editor.config.es.js.map +1 -1
- package/es/config/editor.utils.es.js.map +1 -1
- package/es/config/i18n/en-us.es.js.map +1 -1
- package/es/config/i18n/zh-cn.es.js.map +1 -1
- package/es/config/icons.config.es.js.map +1 -1
- package/es/config/index.es.js +15 -1
- package/es/config/index.es.js.map +1 -1
- package/es/counter/index.es.js.map +1 -1
- package/es/custom-clipboard.es.js.map +1 -1
- package/es/custom-image/BlotFormatter.es.js.map +1 -1
- package/es/custom-image/Options.es.js.map +1 -1
- package/es/custom-image/actions/Action.es.js.map +1 -1
- package/es/custom-image/actions/CustomResizeAction.es.js.map +1 -1
- package/es/custom-image/actions/DeleteAction.es.js.map +1 -1
- package/es/custom-image/image.es.js.map +1 -1
- package/es/custom-image/specs/BlotSpec.es.js.map +1 -1
- package/es/custom-image/specs/CustomImageSpec.es.js.map +1 -1
- package/es/custom-image/specs/ImageSpec.es.js.map +1 -1
- package/es/custom-uploader.es.js +13 -2
- package/es/custom-uploader.es.js.map +1 -1
- package/es/emoji/emoji-list/people.es.js.map +1 -1
- package/es/emoji/emoji-list.es.js.map +1 -1
- package/es/emoji/emoji-map.es.js.map +1 -1
- package/es/emoji/formats/emoji-blot.es.js.map +1 -1
- package/es/emoji/index.es.js.map +1 -1
- package/es/emoji/modules/emoji.es.js.map +1 -1
- package/es/emoji/modules/toolbar-emoji.es.js.map +1 -1
- package/es/emoji/utils.es.js.map +1 -1
- package/es/file/formats/file.es.js.map +1 -1
- package/es/file/index.es.js.map +1 -1
- package/es/file/modules/file-bar.es.js.map +1 -1
- package/es/fluent-editor.es.js.map +1 -1
- package/es/global-link/constants.es.js.map +1 -1
- package/es/global-link/formats/customer-widget-link.es.js.map +1 -1
- package/es/global-link/formats/doc-link.es.js.map +1 -1
- package/es/global-link/formats/wiki-link.es.js.map +1 -1
- package/es/global-link/formats/work-item-link.es.js.map +1 -1
- package/es/global-link/index.es.js.map +1 -1
- package/es/global-link/utils/createTable.es.js.map +1 -1
- package/es/index.es.js +15 -1
- package/es/index.es.js.map +1 -1
- package/es/link/formats/link.es.js.map +1 -1
- package/es/link/index.es.js.map +1 -1
- package/es/link/modules/tooltip.es.js.map +1 -1
- package/es/mathlive/formats.es.js.map +1 -1
- package/es/mathlive/index.es.js.map +1 -1
- package/es/mathlive/tooltip.es.js.map +1 -1
- package/es/mention/Mention.es.js.map +1 -1
- package/es/mention/MentionLink.es.js.map +1 -1
- package/es/mention/constants.es.js.map +1 -1
- package/es/quick-menu/index.es.js.map +1 -1
- package/es/screenshot/index.es.js.map +1 -1
- package/es/soft-break/index.es.js.map +1 -1
- package/es/strike/index.es.js.map +1 -1
- package/es/syntax/index.es.js.map +1 -1
- package/es/table/better-table.es.js.map +1 -1
- package/es/table/formats/header.es.js.map +1 -1
- package/es/table/formats/list.es.js.map +1 -1
- package/es/table/formats/table.es.js.map +1 -1
- package/es/table/modules/table-column-tool.es.js.map +1 -1
- package/es/table/modules/table-operation-menu.es.js +9 -3
- package/es/table/modules/table-operation-menu.es.js.map +1 -1
- package/es/table/modules/table-scroll-bar.es.js.map +1 -1
- package/es/table/modules/table-selection.es.js.map +1 -1
- package/es/table/table-config.es.js.map +1 -1
- package/es/table/utils/index.es.js.map +1 -1
- package/es/table/utils/node-matchers.es.js.map +1 -1
- package/es/toolbar/better-picker.es.js.map +1 -1
- package/es/toolbar/index.es.js.map +1 -1
- package/es/utils/debounce.es.js.map +1 -1
- package/es/utils/method.es.js.map +1 -1
- package/es/video/index.es.js.map +1 -1
- package/lib/attributors/line-height.cjs.js.map +1 -1
- package/lib/config/base64-image.cjs.js.map +1 -1
- package/lib/config/editor.config.cjs.js.map +1 -1
- package/lib/config/editor.utils.cjs.js.map +1 -1
- package/lib/config/i18n/en-us.cjs.js.map +1 -1
- package/lib/config/i18n/zh-cn.cjs.js.map +1 -1
- package/lib/config/icons.config.cjs.js.map +1 -1
- package/lib/config/index.cjs.js +13 -0
- package/lib/config/index.cjs.js.map +1 -1
- package/lib/counter/index.cjs.js.map +1 -1
- package/lib/custom-clipboard.cjs.js.map +1 -1
- package/lib/custom-image/BlotFormatter.cjs.js.map +1 -1
- package/lib/custom-image/Options.cjs.js.map +1 -1
- package/lib/custom-image/actions/Action.cjs.js.map +1 -1
- package/lib/custom-image/actions/CustomResizeAction.cjs.js.map +1 -1
- package/lib/custom-image/actions/DeleteAction.cjs.js.map +1 -1
- package/lib/custom-image/image.cjs.js.map +1 -1
- package/lib/custom-image/specs/BlotSpec.cjs.js.map +1 -1
- package/lib/custom-image/specs/CustomImageSpec.cjs.js.map +1 -1
- package/lib/custom-image/specs/ImageSpec.cjs.js.map +1 -1
- package/lib/custom-uploader.cjs.js +13 -2
- package/lib/custom-uploader.cjs.js.map +1 -1
- package/lib/emoji/emoji-list/people.cjs.js.map +1 -1
- package/lib/emoji/emoji-list.cjs.js.map +1 -1
- package/lib/emoji/emoji-map.cjs.js.map +1 -1
- package/lib/emoji/formats/emoji-blot.cjs.js.map +1 -1
- package/lib/emoji/index.cjs.js.map +1 -1
- package/lib/emoji/modules/emoji.cjs.js.map +1 -1
- package/lib/emoji/modules/toolbar-emoji.cjs.js.map +1 -1
- package/lib/emoji/utils.cjs.js.map +1 -1
- package/lib/file/formats/file.cjs.js.map +1 -1
- package/lib/file/index.cjs.js.map +1 -1
- package/lib/file/modules/file-bar.cjs.js.map +1 -1
- package/lib/fluent-editor.cjs.js.map +1 -1
- package/lib/global-link/constants.cjs.js.map +1 -1
- package/lib/global-link/formats/customer-widget-link.cjs.js.map +1 -1
- package/lib/global-link/formats/doc-link.cjs.js.map +1 -1
- package/lib/global-link/formats/wiki-link.cjs.js.map +1 -1
- package/lib/global-link/formats/work-item-link.cjs.js.map +1 -1
- package/lib/global-link/index.cjs.js.map +1 -1
- package/lib/global-link/utils/createTable.cjs.js.map +1 -1
- package/lib/index.cjs.js +14 -0
- package/lib/index.cjs.js.map +1 -1
- package/lib/link/formats/link.cjs.js.map +1 -1
- package/lib/link/index.cjs.js.map +1 -1
- package/lib/link/modules/tooltip.cjs.js.map +1 -1
- package/lib/mathlive/formats.cjs.js.map +1 -1
- package/lib/mathlive/index.cjs.js.map +1 -1
- package/lib/mathlive/tooltip.cjs.js.map +1 -1
- package/lib/mention/Mention.cjs.js.map +1 -1
- package/lib/mention/MentionLink.cjs.js.map +1 -1
- package/lib/mention/constants.cjs.js.map +1 -1
- package/lib/quick-menu/index.cjs.js.map +1 -1
- package/lib/screenshot/index.cjs.js.map +1 -1
- package/lib/soft-break/index.cjs.js.map +1 -1
- package/lib/strike/index.cjs.js.map +1 -1
- package/lib/syntax/index.cjs.js.map +1 -1
- package/lib/table/better-table.cjs.js.map +1 -1
- package/lib/table/formats/header.cjs.js.map +1 -1
- package/lib/table/formats/list.cjs.js.map +1 -1
- package/lib/table/formats/table.cjs.js.map +1 -1
- package/lib/table/modules/table-column-tool.cjs.js.map +1 -1
- package/lib/table/modules/table-operation-menu.cjs.js +9 -3
- package/lib/table/modules/table-operation-menu.cjs.js.map +1 -1
- package/lib/table/modules/table-scroll-bar.cjs.js.map +1 -1
- package/lib/table/modules/table-selection.cjs.js.map +1 -1
- package/lib/table/table-config.cjs.js.map +1 -1
- package/lib/table/utils/index.cjs.js.map +1 -1
- package/lib/table/utils/node-matchers.cjs.js.map +1 -1
- package/lib/toolbar/better-picker.cjs.js.map +1 -1
- package/lib/toolbar/index.cjs.js.map +1 -1
- package/lib/utils/debounce.cjs.js.map +1 -1
- package/lib/utils/method.cjs.js.map +1 -1
- package/lib/video/index.cjs.js.map +1 -1
- package/package.json +57 -57
- package/types/attributors/font-size.d.ts +1 -1
- package/types/attributors/font-style.d.ts +1 -1
- package/types/attributors/index.d.ts +4 -4
- package/types/attributors/line-height.d.ts +1 -1
- package/types/attributors/text-indent.d.ts +1 -1
- package/types/config/base64-image.d.ts +3 -3
- package/types/config/editor.config.d.ts +225 -225
- package/types/config/editor.utils.d.ts +42 -42
- package/types/config/i18n/en-us.d.ts +106 -106
- package/types/config/i18n/zh-cn.d.ts +106 -106
- package/types/config/icons.config.d.ts +34 -34
- package/types/config/index.d.ts +9 -8
- package/types/config/types/additional-toolbar-item.interface.d.ts +7 -6
- package/types/config/types/content-change.interface.d.ts +13 -13
- package/types/config/types/content-save.interface.d.ts +6 -6
- package/types/config/types/counter-option.interface.d.ts +8 -7
- package/types/config/types/editor-config.interface.d.ts +26 -18
- package/types/config/types/editor-modules.interface.d.ts +30 -29
- package/types/config/types/editor-toolbar.interface.d.ts +4 -3
- package/types/config/types/file-operation.interface.d.ts +11 -10
- package/types/config/types/focus-change.interface.d.ts +4 -4
- package/types/config/types/fullscreen-module.interface.d.ts +4 -4
- package/types/config/types/help-panel-item.interface.d.ts +5 -5
- package/types/config/types/help-panel-option.interface.d.ts +6 -5
- package/types/config/types/image-module.interface.d.ts +3 -3
- package/types/config/types/image-upload.interface.d.ts +6 -5
- package/types/config/types/index.d.ts +23 -23
- package/types/config/types/load-on-demand-module.interface.d.ts +5 -5
- package/types/config/types/mention-module.interface.d.ts +8 -8
- package/types/config/types/paste-change.interface.d.ts +5 -4
- package/types/config/types/quick-menu-module.interface.d.ts +3 -3
- package/types/config/types/range.interface.d.ts +4 -4
- package/types/config/types/registry-options.interface.d.ts +5 -5
- package/types/config/types/selection-change.interface.d.ts +7 -6
- package/types/config/types/toolbar-item.interface.d.ts +13 -13
- package/types/config/types/type.d.ts +4 -3
- package/types/config/types/validate-error.interface.d.ts +13 -13
- package/types/counter/index.d.ts +15 -14
- package/types/custom-clipboard.d.ts +27 -26
- package/types/custom-image/BlotFormatter.d.ts +21 -20
- package/types/custom-image/Options.d.ts +36 -36
- package/types/custom-image/actions/Action.d.ts +7 -7
- package/types/custom-image/actions/CustomResizeAction.d.ts +23 -22
- package/types/custom-image/actions/DeleteAction.d.ts +6 -5
- package/types/custom-image/image.d.ts +28 -28
- package/types/custom-image/specs/BlotSpec.d.ts +11 -10
- package/types/custom-image/specs/CustomImageSpec.d.ts +18 -17
- package/types/custom-image/specs/ImageSpec.d.ts +9 -8
- package/types/custom-uploader.d.ts +30 -28
- package/types/emoji/emoji-list/index.d.ts +1 -1
- package/types/emoji/emoji-list/people.d.ts +1 -1
- package/types/emoji/emoji-list.d.ts +2 -2
- package/types/emoji/emoji-map.d.ts +2 -2
- package/types/emoji/formats/emoji-blot.d.ts +13 -13
- package/types/emoji/index.d.ts +7 -6
- package/types/emoji/modules/emoji.d.ts +38 -38
- package/types/emoji/modules/toolbar-emoji.d.ts +8 -8
- package/types/emoji/utils.d.ts +1 -1
- package/types/file/formats/file.d.ts +15 -15
- package/types/file/index.d.ts +10 -9
- package/types/file/modules/file-bar.d.ts +14 -14
- package/types/fluent-editor.d.ts +13 -12
- package/types/format-painter/index.d.ts +14 -13
- package/types/fullscreen/handler.d.ts +2 -1
- package/types/global-link/constants.d.ts +3 -3
- package/types/global-link/formats/customer-widget-link.d.ts +14 -14
- package/types/global-link/formats/doc-link.d.ts +17 -17
- package/types/global-link/formats/wiki-link.d.ts +16 -16
- package/types/global-link/formats/work-item-link.d.ts +16 -16
- package/types/global-link/global-link-panel.d.ts +18 -17
- package/types/global-link/index.d.ts +18 -18
- package/types/global-link/utils/createTable.d.ts +1 -1
- package/types/index.d.ts +3 -2
- package/types/link/formats/link.d.ts +15 -14
- package/types/link/index.d.ts +6 -6
- package/types/link/modules/tooltip.d.ts +32 -31
- package/types/mathlive/formats.d.ts +21 -20
- package/types/mathlive/index.d.ts +7 -6
- package/types/mathlive/tooltip.d.ts +15 -14
- package/types/mention/Mention.d.ts +54 -53
- package/types/mention/MentionLink.d.ts +15 -14
- package/types/mention/constants.d.ts +3 -3
- package/types/quick-menu/index.d.ts +21 -20
- package/types/screenshot/index.d.ts +18 -17
- package/types/soft-break/index.d.ts +14 -14
- package/types/strike/index.d.ts +7 -7
- package/types/syntax/index.d.ts +13 -12
- package/types/table/better-table.d.ts +25 -24
- package/types/table/formats/header.d.ts +22 -22
- package/types/table/formats/list.d.ts +34 -34
- package/types/table/formats/table.d.ts +146 -145
- package/types/table/modules/table-column-tool.d.ts +23 -23
- package/types/table/modules/table-operation-menu.d.ts +38 -38
- package/types/table/modules/table-scroll-bar.d.ts +33 -33
- package/types/table/modules/table-selection.d.ts +37 -37
- package/types/table/table-config.d.ts +38 -38
- package/types/table/utils/index.d.ts +17 -17
- package/types/table/utils/node-matchers.d.ts +9 -9
- package/types/toolbar/better-picker.d.ts +1 -1
- package/types/toolbar/index.d.ts +8 -7
- package/types/toolbar/toolbar-tip.d.ts +7 -6
- package/types/utils/debounce.d.ts +6 -6
- package/types/utils/image.d.ts +1 -1
- package/types/utils/is.d.ts +2 -2
- package/types/utils/method.d.ts +6 -6
- package/types/utils/scroll-lock.d.ts +6 -6
- package/types/video/index.d.ts +15 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-bar.cjs.js","sources":["../../../../src/file/modules/file-bar.ts"],"sourcesContent":["import Quill from 'quill'\n// devui-internal api: utils\\public-api.ts\n\nimport { Range } from 'quill/core/selection'\nimport { unshiftString } from '../../utils/method'\nimport File from '../formats/file'\n\nconst Delta = Quill.imports.delta\n\nexport default class FileBar {\n quill: any\n file: any\n domNode: HTMLElement\n fileRange: any\n template: string\n\n constructor(quill, target) {\n this.quill = quill\n this.file = target\n const fileBlot = Quill.find(target)\n const index = this.quill.getIndex(fileBlot)\n const [fileItem, offset] = this.quill.scroll.descendant(File, index)\n const length = fileItem && fileItem.length()\n this.fileRange = new Range(index - offset, length)\n\n const timestamp = Number(this.file.dataset.lastModified)\n const _lastModifiedDate = this.formatDate(timestamp)\n this.template = [\n // `<a class=\"ql-last-modified-date\" href=\"${this.file.href}\" target=\"_blank\">${this.file.href}</a>`,\n // '<span class=\"ql-split\"></span>',\n // `<a class=\"ql-file-preview\"><i class=\"icon-preview\"></i></a>`,\n `<a class=\"ql-file-download\"><i class=\"icon-download\"></i></a>`,\n '<a class=\"ql-file-delete\"><i class=\"icon-delete\"></i></a>',\n ].join('')\n\n this.createFileBar()\n }\n\n createFileBar() {\n this.domNode = document.createElement('div')\n this.domNode.className = 'ql-file-bar'\n this.domNode.innerHTML = this.template\n // 查看文件\n const filePreview = this.domNode.querySelector('a.ql-file-preview')\n if (filePreview) {\n filePreview.addEventListener('click', (event) => {\n this.operateFile(event, 'view')\n })\n }\n // 下载文件\n const fileDownload = this.domNode.querySelector('a.ql-file-download')\n if (fileDownload) {\n fileDownload.addEventListener('click', (event) => {\n this.operateFile(event, 'download')\n })\n }\n // 删除文件\n const fileDelete = this.domNode.querySelector('a.ql-file-delete')\n if (fileDelete) {\n fileDelete.addEventListener('click', (event) => {\n this.operateFile(event, 'delete')\n const delta = new Delta()\n .retain(this.fileRange.index)\n .delete(this.fileRange.length)\n this.quill.updateContents(delta, Quill.sources.USER)\n this.quill.setSelection(this.fileRange.index)\n })\n }\n\n this.setPosition()\n this.quill.root.parentNode.appendChild(this.domNode)\n }\n\n destroy() {\n if (this.domNode) {\n this.domNode.remove()\n this.domNode = null\n this.file = null\n }\n }\n\n operateFile(event, operate) {\n event.preventDefault()\n const fileId = this.file.dataset.id || ''\n const fileDownloadUrl = this.file.href\n if (fileId) {\n this.quill.emitter.emit('file-change', {\n operation: operate,\n data: { fileId, fileDownloadUrl },\n })\n }\n if (operate === 'download') {\n const a = document.createElement('a')\n a.href = fileDownloadUrl\n a.target = '_blank'\n a.id = 'exppub'\n document.body.appendChild(a)\n const alink = document.getElementById('exppub')\n alink.click()\n alink.parentNode.removeChild(a)\n }\n this.destroy()\n }\n\n setPosition() {\n if (this.domNode && this.file) {\n const parent = this.quill.root.parentNode\n const child = this.file.querySelector('span')\n const containerRect = parent.getBoundingClientRect()\n const fileRect = child.getBoundingClientRect()\n this.css(this.domNode, {\n left: `${fileRect.left - containerRect.left}px`,\n top: `${fileRect.top - containerRect.top + 10}px`,\n })\n }\n }\n\n css(domNode, rules) {\n if (typeof rules === 'object') {\n for (const prop in rules) {\n if (prop) {\n if (Array.isArray(rules[prop])) {\n // 兼容IE11浏览器\n rules[prop].forEach((val) => {\n domNode.style[prop] = val\n })\n }\n else {\n domNode.style[prop] = rules[prop]\n }\n }\n }\n }\n }\n\n formatDate(timestamp) {\n const date = new Date(timestamp)\n const year = date.getFullYear()\n // TODO\n const month = unshiftString(`${date.getMonth() + 1}`, 2, '0')\n const day = unshiftString(`${date.getDate()}`, 2, '0')\n const hour = unshiftString(`${date.getHours()}`, 2, '0')\n const minute = unshiftString(`${date.getMinutes()}`, 2, '0')\n return Number.isNaN(year) ? '--' : `${year}/${month}/${day} ${hour}:${minute}`\n }\n}\n"],"names":["File","Range","unshiftString"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"file-bar.cjs.js","sources":["../../../../src/file/modules/file-bar.ts"],"sourcesContent":["import Quill from 'quill'\r\n// devui-internal api: utils\\public-api.ts\r\n\r\nimport { Range } from 'quill/core/selection'\r\nimport { unshiftString } from '../../utils/method'\r\nimport File from '../formats/file'\r\n\r\nconst Delta = Quill.imports.delta\r\n\r\nexport default class FileBar {\r\n quill: any\r\n file: any\r\n domNode: HTMLElement\r\n fileRange: any\r\n template: string\r\n\r\n constructor(quill, target) {\r\n this.quill = quill\r\n this.file = target\r\n const fileBlot = Quill.find(target)\r\n const index = this.quill.getIndex(fileBlot)\r\n const [fileItem, offset] = this.quill.scroll.descendant(File, index)\r\n const length = fileItem && fileItem.length()\r\n this.fileRange = new Range(index - offset, length)\r\n\r\n const timestamp = Number(this.file.dataset.lastModified)\r\n const _lastModifiedDate = this.formatDate(timestamp)\r\n this.template = [\r\n // `<a class=\"ql-last-modified-date\" href=\"${this.file.href}\" target=\"_blank\">${this.file.href}</a>`,\r\n // '<span class=\"ql-split\"></span>',\r\n // `<a class=\"ql-file-preview\"><i class=\"icon-preview\"></i></a>`,\r\n `<a class=\"ql-file-download\"><i class=\"icon-download\"></i></a>`,\r\n '<a class=\"ql-file-delete\"><i class=\"icon-delete\"></i></a>',\r\n ].join('')\r\n\r\n this.createFileBar()\r\n }\r\n\r\n createFileBar() {\r\n this.domNode = document.createElement('div')\r\n this.domNode.className = 'ql-file-bar'\r\n this.domNode.innerHTML = this.template\r\n // 查看文件\r\n const filePreview = this.domNode.querySelector('a.ql-file-preview')\r\n if (filePreview) {\r\n filePreview.addEventListener('click', (event) => {\r\n this.operateFile(event, 'view')\r\n })\r\n }\r\n // 下载文件\r\n const fileDownload = this.domNode.querySelector('a.ql-file-download')\r\n if (fileDownload) {\r\n fileDownload.addEventListener('click', (event) => {\r\n this.operateFile(event, 'download')\r\n })\r\n }\r\n // 删除文件\r\n const fileDelete = this.domNode.querySelector('a.ql-file-delete')\r\n if (fileDelete) {\r\n fileDelete.addEventListener('click', (event) => {\r\n this.operateFile(event, 'delete')\r\n const delta = new Delta()\r\n .retain(this.fileRange.index)\r\n .delete(this.fileRange.length)\r\n this.quill.updateContents(delta, Quill.sources.USER)\r\n this.quill.setSelection(this.fileRange.index)\r\n })\r\n }\r\n\r\n this.setPosition()\r\n this.quill.root.parentNode.appendChild(this.domNode)\r\n }\r\n\r\n destroy() {\r\n if (this.domNode) {\r\n this.domNode.remove()\r\n this.domNode = null\r\n this.file = null\r\n }\r\n }\r\n\r\n operateFile(event, operate) {\r\n event.preventDefault()\r\n const fileId = this.file.dataset.id || ''\r\n const fileDownloadUrl = this.file.href\r\n if (fileId) {\r\n this.quill.emitter.emit('file-change', {\r\n operation: operate,\r\n data: { fileId, fileDownloadUrl },\r\n })\r\n }\r\n if (operate === 'download') {\r\n const a = document.createElement('a')\r\n a.href = fileDownloadUrl\r\n a.target = '_blank'\r\n a.id = 'exppub'\r\n document.body.appendChild(a)\r\n const alink = document.getElementById('exppub')\r\n alink.click()\r\n alink.parentNode.removeChild(a)\r\n }\r\n this.destroy()\r\n }\r\n\r\n setPosition() {\r\n if (this.domNode && this.file) {\r\n const parent = this.quill.root.parentNode\r\n const child = this.file.querySelector('span')\r\n const containerRect = parent.getBoundingClientRect()\r\n const fileRect = child.getBoundingClientRect()\r\n this.css(this.domNode, {\r\n left: `${fileRect.left - containerRect.left}px`,\r\n top: `${fileRect.top - containerRect.top + 10}px`,\r\n })\r\n }\r\n }\r\n\r\n css(domNode, rules) {\r\n if (typeof rules === 'object') {\r\n for (const prop in rules) {\r\n if (prop) {\r\n if (Array.isArray(rules[prop])) {\r\n // 兼容IE11浏览器\r\n rules[prop].forEach((val) => {\r\n domNode.style[prop] = val\r\n })\r\n }\r\n else {\r\n domNode.style[prop] = rules[prop]\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n formatDate(timestamp) {\r\n const date = new Date(timestamp)\r\n const year = date.getFullYear()\r\n // TODO\r\n const month = unshiftString(`${date.getMonth() + 1}`, 2, '0')\r\n const day = unshiftString(`${date.getDate()}`, 2, '0')\r\n const hour = unshiftString(`${date.getHours()}`, 2, '0')\r\n const minute = unshiftString(`${date.getMinutes()}`, 2, '0')\r\n return Number.isNaN(year) ? '--' : `${year}/${month}/${day} ${hour}:${minute}`\r\n }\r\n}\r\n"],"names":["File","Range","unshiftString"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fluent-editor.cjs.js","sources":["../../src/fluent-editor.ts"],"sourcesContent":["import type { ExpandedQuillOptions, Module, Parchment as TypeParchment } from 'quill'\nimport type { IEditorConfig } from './config/types'\nimport Quill from 'quill'\nimport { FontStyle, LineHeightStyle, SizeStyle, TextIndentStyle } from './attributors'\nimport { CHANGE_LANGUAGE_EVENT, defaultLanguage, getListValue, ICONS_CONFIG, inputFile, LANG_CONF } from './config'\nimport Counter from './counter' // 字符统计\nimport CustomClipboard from './custom-clipboard' // 粘贴板\nimport CustomImage from './custom-image/BlotFormatter' // 图片\nimport { CustomImageSpec } from './custom-image/specs/CustomImageSpec' // 图片拉伸模块\nimport CustomUploader from './custom-uploader' // 上传\nimport Emoji from './emoji' // 表情\nimport FileModule from './file' // 文件\nimport { FormatPainter } from './format-painter'\nimport { fullscreenHandler } from './fullscreen/handler'\nimport Link from './link' // 超链接\nimport MathliveModule from './mathlive' // latex公式\nimport MathliveBlot from './mathlive/formats'\nimport Mention from './mention/Mention' // @提醒\nimport { Screenshot } from './screenshot'// 截图\nimport SoftBreak from './soft-break' // 软回车\nimport Strike from './strike' // 删除线\nimport CustomSyntax from './syntax' // 代码块高亮\nimport BetterTable from './table/better-table' // 表格\nimport Toolbar, { ToolbarTip } from './toolbar' // 工具栏\nimport { isUndefined } from './utils/is'\nimport Video from './video' // 视频\n// import GlobalLink from './global-link' // 全局链接\n// import QuickMenu from './quick-menu' // 快捷菜单\nexport interface I18NOptions {\n lang: string\n langText: Record<string, string>\n}\nfunction resolveLanguageOption(options: Partial<I18NOptions>): I18NOptions {\n if (isUndefined(options.lang)) {\n options.lang = defaultLanguage\n }\n if (!(options.lang in LANG_CONF)) {\n console.warn(`The language ${options.lang} is not supported. Use the default language: ${defaultLanguage}`)\n options.lang = defaultLanguage\n }\n return {\n lang: options.lang,\n langText: Object.assign({}, LANG_CONF[options.lang], options.langText || {}),\n }\n}\nexport class FluentEditor extends Quill {\n isFullscreen: boolean = false\n options: IEditorConfig & ExpandedQuillOptions\n constructor(container: HTMLElement | string, options: IEditorConfig = {}) {\n options = Object.assign(options, resolveLanguageOption(options || {}))\n super(container, options)\n }\n\n changeLanguage(options: Partial<I18NOptions>) {\n const langOps = resolveLanguageOption(options)\n if (langOps.lang === this.options.lang) return\n this.options.lang = langOps.lang\n this.options.langText = langOps.langText\n this.emitter.emit(CHANGE_LANGUAGE_EVENT, this.options.lang, this.options.langText)\n }\n}\n\nconst registerModules = function () {\n const Icons = Quill.import('ui/icons')\n Object.entries(ICONS_CONFIG).forEach(([key, icon]) => {\n Icons[key] = icon\n })\n\n const SnowTheme = Quill.imports['themes/snow'] as typeof Module\n SnowTheme.DEFAULTS = {\n modules: {\n 'keyboard': {\n bindings: {\n ...BetterTable.keyboardBindings,\n },\n },\n 'toolbar': {\n handlers: {\n ...(SnowTheme.DEFAULTS as Record<string, any>).modules.toolbar.handlers,\n 'formula': function () {\n if (!this.quill.isEnabled()) return\n const mathlive = this.quill.getModule('mathlive')\n if (!mathlive) {\n this.quill.theme.tooltip.edit('formula')\n }\n else {\n mathlive.createDialog()\n }\n },\n 'undo': function () {\n this.quill.history.undo()\n },\n 'redo': function () {\n this.quill.history.redo()\n },\n 'better-table': function () {\n this.quill.getModule('better-table').insertTable(3, 3)\n },\n 'file': function () {\n const accept = this.quill.options?.uploadOption?.fileAccept\n inputFile.call(this, 'file', accept)\n },\n 'image': function () {\n const accept = this.quill.options?.uploadOption?.imageAccept\n inputFile.call(this, 'image', accept)\n },\n 'emoji': function () {},\n 'fullscreen': fullscreenHandler,\n 'list': function (value) {\n const range = this.quill.getSelection()\n const formats = this.quill.getFormat(range)\n const preListValue = Array.isArray(formats.list) ? formats.list[0]?.value : formats.list?.value\n const curListValue = getListValue(value, preListValue)\n // 如果设置list的选区中有表格,判断第一个table-col位置,将表格前的内容设置为list格式\n const lines = this.quill.getLines(range.index, range.length)\n const tableCols = lines.filter(line => line.statics.blotName === 'table-col' && !line.prev)\n if (tableCols.length) {\n let start = range.index\n // 遍历table-col群组,以之获取表格,将表格前选区设置为对应list格式\n tableCols.forEach((item, index) => {\n const table = item.domNode.closest('table.quill-better-table')\n const tableBlot = Quill.find(table) as TypeParchment.Blot\n const tableLength = tableBlot.length()\n const tableStart = this.quill.getIndex(item)\n const tableEnd = tableStart + tableLength\n const beforeTableRangeLength = tableStart - start\n // 在表格前设置列表\n this.quill.setSelection(start, beforeTableRangeLength, Quill.sources.SILENT)\n this.quill.format('list', curListValue, Quill.sources.USER)\n table.parentNode.classList.remove('quill-better-table-selected')\n // 当前表格末尾为下一个选取的开始\n start = tableEnd\n if (index === tableCols.length - 1) {\n // 将最后一个表格之后所有选区内容设置list格式\n this.quill.setSelection(tableEnd, range.index + range.length - tableEnd)\n this.quill.format('list', curListValue, Quill.sources.USER)\n }\n })\n }\n else {\n this.quill.format('list', curListValue, Quill.sources.USER)\n }\n },\n [FormatPainter.toolName]: FormatPainter,\n [Screenshot.toolName]: Screenshot,\n },\n },\n 'better-table': {\n operationMenu: {\n color: true,\n },\n },\n 'image': {\n specs: [CustomImageSpec],\n overlay: {\n style: {\n border: '1px dashed rgb(68, 68, 68)',\n },\n },\n align: {\n icons: {\n left: '<i class=\"icon-text-align-left\"></i>',\n center: '<i class=\"icon-text-align-center\"></i>',\n right: '<i class=\"icon-text-align-right\"></i>',\n },\n },\n },\n [ToolbarTip.moduleName]: true,\n },\n }\n\n FluentEditor.register(\n {\n 'modules/toolbar': Toolbar,\n 'modules/mention': Mention,\n 'modules/better-table': BetterTable,\n 'modules/clipboard': CustomClipboard,\n 'modules/uploader': CustomUploader, // 三者关联性最强\n 'modules/image': CustomImage, // 三者关联性最强\n 'modules/file': FileModule, // 三者关联性最强\n 'modules/counter': Counter,\n 'modules/emoji-toolbar': Emoji.ToolbarEmoji,\n 'modules/emoji-shortname': Emoji.ShortNameEmoji,\n // 'modules/global-link': GlobalLink,//暂未开发\n 'modules/link': Link, // 报错\n // 'modules/quickmenu': QuickMenu,//暂未开发\n 'modules/syntax': CustomSyntax,\n 'modules/mathlive': MathliveModule,\n [`modules/${ToolbarTip.moduleName}`]: ToolbarTip,\n\n 'formats/strike': Strike,\n 'formats/softBreak': SoftBreak,\n 'formats/video': Video,\n 'formats/emoji': Emoji.EmojiBlot,\n 'formats/font': FontStyle,\n 'formats/size': SizeStyle,\n 'formats/line-height': LineHeightStyle,\n 'formats/text-indent': TextIndentStyle,\n [`formats/${MathliveBlot.blotName}`]: MathliveBlot,\n },\n true, // 覆盖内部模块\n )\n\n return FluentEditor\n}\n\nexport default registerModules()\n"],"names":["isUndefined","defaultLanguage","LANG_CONF","CHANGE_LANGUAGE_EVENT","ICONS_CONFIG","BetterTable","inputFile","fullscreenHandler","formats","getListValue","index","FormatPainter","Screenshot","CustomImageSpec","ToolbarTip","Toolbar","Mention","CustomClipboard","CustomUploader","CustomImage","FileModule","Counter","Emoji","Link","CustomSyntax","MathliveModule","Strike","SoftBreak","Video","FontStyle","SizeStyle","LineHeightStyle","TextIndentStyle","MathliveBlot"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fluent-editor.cjs.js","sources":["../../src/fluent-editor.ts"],"sourcesContent":["import type { ExpandedQuillOptions, Module, Parchment as TypeParchment } from 'quill'\r\nimport type { IEditorConfig } from './config/types'\r\nimport Quill from 'quill'\r\nimport { FontStyle, LineHeightStyle, SizeStyle, TextIndentStyle } from './attributors'\r\nimport { CHANGE_LANGUAGE_EVENT, defaultLanguage, getListValue, ICONS_CONFIG, inputFile, LANG_CONF } from './config'\r\nimport Counter from './counter' // 字符统计\r\nimport CustomClipboard from './custom-clipboard' // 粘贴板\r\nimport CustomImage from './custom-image/BlotFormatter' // 图片\r\nimport { CustomImageSpec } from './custom-image/specs/CustomImageSpec' // 图片拉伸模块\r\nimport CustomUploader from './custom-uploader' // 上传\r\nimport Emoji from './emoji' // 表情\r\nimport FileModule from './file' // 文件\r\nimport { FormatPainter } from './format-painter'\r\nimport { fullscreenHandler } from './fullscreen/handler'\r\nimport Link from './link' // 超链接\r\nimport MathliveModule from './mathlive' // latex公式\r\nimport MathliveBlot from './mathlive/formats'\r\nimport Mention from './mention/Mention' // @提醒\r\nimport { Screenshot } from './screenshot'// 截图\r\nimport SoftBreak from './soft-break' // 软回车\r\nimport Strike from './strike' // 删除线\r\nimport CustomSyntax from './syntax' // 代码块高亮\r\nimport BetterTable from './table/better-table' // 表格\r\nimport Toolbar, { ToolbarTip } from './toolbar' // 工具栏\r\nimport { isUndefined } from './utils/is'\r\nimport Video from './video' // 视频\r\n// import GlobalLink from './global-link' // 全局链接\r\n// import QuickMenu from './quick-menu' // 快捷菜单\r\nexport interface I18NOptions {\r\n lang: string\r\n langText: Record<string, string>\r\n}\r\nfunction resolveLanguageOption(options: Partial<I18NOptions>): I18NOptions {\r\n if (isUndefined(options.lang)) {\r\n options.lang = defaultLanguage\r\n }\r\n if (!(options.lang in LANG_CONF)) {\r\n console.warn(`The language ${options.lang} is not supported. Use the default language: ${defaultLanguage}`)\r\n options.lang = defaultLanguage\r\n }\r\n return {\r\n lang: options.lang,\r\n langText: Object.assign({}, LANG_CONF[options.lang], options.langText || {}),\r\n }\r\n}\r\nexport class FluentEditor extends Quill {\r\n isFullscreen: boolean = false\r\n options: IEditorConfig & ExpandedQuillOptions\r\n constructor(container: HTMLElement | string, options: IEditorConfig = {}) {\r\n options = Object.assign(options, resolveLanguageOption(options || {}))\r\n super(container, options)\r\n }\r\n\r\n changeLanguage(options: Partial<I18NOptions>) {\r\n const langOps = resolveLanguageOption(options)\r\n if (langOps.lang === this.options.lang) return\r\n this.options.lang = langOps.lang\r\n this.options.langText = langOps.langText\r\n this.emitter.emit(CHANGE_LANGUAGE_EVENT, this.options.lang, this.options.langText)\r\n }\r\n}\r\n\r\nconst registerModules = function () {\r\n const Icons = Quill.import('ui/icons')\r\n Object.entries(ICONS_CONFIG).forEach(([key, icon]) => {\r\n Icons[key] = icon\r\n })\r\n\r\n const SnowTheme = Quill.imports['themes/snow'] as typeof Module\r\n SnowTheme.DEFAULTS = {\r\n modules: {\r\n 'keyboard': {\r\n bindings: {\r\n ...BetterTable.keyboardBindings,\r\n },\r\n },\r\n 'toolbar': {\r\n handlers: {\r\n ...(SnowTheme.DEFAULTS as Record<string, any>).modules.toolbar.handlers,\r\n 'formula': function () {\r\n if (!this.quill.isEnabled()) return\r\n const mathlive = this.quill.getModule('mathlive')\r\n if (!mathlive) {\r\n this.quill.theme.tooltip.edit('formula')\r\n }\r\n else {\r\n mathlive.createDialog()\r\n }\r\n },\r\n 'undo': function () {\r\n this.quill.history.undo()\r\n },\r\n 'redo': function () {\r\n this.quill.history.redo()\r\n },\r\n 'better-table': function () {\r\n this.quill.getModule('better-table').insertTable(3, 3)\r\n },\r\n 'file': function () {\r\n const accept = this.quill.options?.uploadOption?.fileAccept\r\n inputFile.call(this, 'file', accept)\r\n },\r\n 'image': function () {\r\n const accept = this.quill.options?.uploadOption?.imageAccept\r\n inputFile.call(this, 'image', accept)\r\n },\r\n 'emoji': function () {},\r\n 'fullscreen': fullscreenHandler,\r\n 'list': function (value) {\r\n const range = this.quill.getSelection()\r\n const formats = this.quill.getFormat(range)\r\n const preListValue = Array.isArray(formats.list) ? formats.list[0]?.value : formats.list?.value\r\n const curListValue = getListValue(value, preListValue)\r\n // 如果设置list的选区中有表格,判断第一个table-col位置,将表格前的内容设置为list格式\r\n const lines = this.quill.getLines(range.index, range.length)\r\n const tableCols = lines.filter(line => line.statics.blotName === 'table-col' && !line.prev)\r\n if (tableCols.length) {\r\n let start = range.index\r\n // 遍历table-col群组,以之获取表格,将表格前选区设置为对应list格式\r\n tableCols.forEach((item, index) => {\r\n const table = item.domNode.closest('table.quill-better-table')\r\n const tableBlot = Quill.find(table) as TypeParchment.Blot\r\n const tableLength = tableBlot.length()\r\n const tableStart = this.quill.getIndex(item)\r\n const tableEnd = tableStart + tableLength\r\n const beforeTableRangeLength = tableStart - start\r\n // 在表格前设置列表\r\n this.quill.setSelection(start, beforeTableRangeLength, Quill.sources.SILENT)\r\n this.quill.format('list', curListValue, Quill.sources.USER)\r\n table.parentNode.classList.remove('quill-better-table-selected')\r\n // 当前表格末尾为下一个选取的开始\r\n start = tableEnd\r\n if (index === tableCols.length - 1) {\r\n // 将最后一个表格之后所有选区内容设置list格式\r\n this.quill.setSelection(tableEnd, range.index + range.length - tableEnd)\r\n this.quill.format('list', curListValue, Quill.sources.USER)\r\n }\r\n })\r\n }\r\n else {\r\n this.quill.format('list', curListValue, Quill.sources.USER)\r\n }\r\n },\r\n [FormatPainter.toolName]: FormatPainter,\r\n [Screenshot.toolName]: Screenshot,\r\n },\r\n },\r\n 'better-table': {\r\n operationMenu: {\r\n color: true,\r\n },\r\n },\r\n 'image': {\r\n specs: [CustomImageSpec],\r\n overlay: {\r\n style: {\r\n border: '1px dashed rgb(68, 68, 68)',\r\n },\r\n },\r\n align: {\r\n icons: {\r\n left: '<i class=\"icon-text-align-left\"></i>',\r\n center: '<i class=\"icon-text-align-center\"></i>',\r\n right: '<i class=\"icon-text-align-right\"></i>',\r\n },\r\n },\r\n },\r\n [ToolbarTip.moduleName]: true,\r\n },\r\n }\r\n\r\n FluentEditor.register(\r\n {\r\n 'modules/toolbar': Toolbar,\r\n 'modules/mention': Mention,\r\n 'modules/better-table': BetterTable,\r\n 'modules/clipboard': CustomClipboard,\r\n 'modules/uploader': CustomUploader, // 三者关联性最强\r\n 'modules/image': CustomImage, // 三者关联性最强\r\n 'modules/file': FileModule, // 三者关联性最强\r\n 'modules/counter': Counter,\r\n 'modules/emoji-toolbar': Emoji.ToolbarEmoji,\r\n 'modules/emoji-shortname': Emoji.ShortNameEmoji,\r\n // 'modules/global-link': GlobalLink,//暂未开发\r\n 'modules/link': Link, // 报错\r\n // 'modules/quickmenu': QuickMenu,//暂未开发\r\n 'modules/syntax': CustomSyntax,\r\n 'modules/mathlive': MathliveModule,\r\n [`modules/${ToolbarTip.moduleName}`]: ToolbarTip,\r\n\r\n 'formats/strike': Strike,\r\n 'formats/softBreak': SoftBreak,\r\n 'formats/video': Video,\r\n 'formats/emoji': Emoji.EmojiBlot,\r\n 'formats/font': FontStyle,\r\n 'formats/size': SizeStyle,\r\n 'formats/line-height': LineHeightStyle,\r\n 'formats/text-indent': TextIndentStyle,\r\n [`formats/${MathliveBlot.blotName}`]: MathliveBlot,\r\n },\r\n true, // 覆盖内部模块\r\n )\r\n\r\n return FluentEditor\r\n}\r\n\r\nexport default registerModules()\r\n"],"names":["isUndefined","defaultLanguage","LANG_CONF","CHANGE_LANGUAGE_EVENT","ICONS_CONFIG","BetterTable","inputFile","fullscreenHandler","formats","getListValue","index","FormatPainter","Screenshot","CustomImageSpec","ToolbarTip","Toolbar","Mention","CustomClipboard","CustomUploader","CustomImage","FileModule","Counter","Emoji","Link","CustomSyntax","MathliveModule","Strike","SoftBreak","Video","FontStyle","SizeStyle","LineHeightStyle","TextIndentStyle","MathliveBlot"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.cjs.js","sources":["../../../src/global-link/constants.ts"],"sourcesContent":["export const ON_WIKI_LINK_REMOVE = 'wiki-link/remove'\nexport const ON_DOC_LINK_REMOVE = 'doc-link/remove'\nexport const ON_WORK_ITEM_LINK_REMOVE = 'work-item-link/remove'\n"],"names":[],"mappings":";;AAAO,MAAM,sBAAsB;AAC5B,MAAM,qBAAqB;AAC3B,MAAM,2BAA2B;;;;"}
|
|
1
|
+
{"version":3,"file":"constants.cjs.js","sources":["../../../src/global-link/constants.ts"],"sourcesContent":["export const ON_WIKI_LINK_REMOVE = 'wiki-link/remove'\r\nexport const ON_DOC_LINK_REMOVE = 'doc-link/remove'\r\nexport const ON_WORK_ITEM_LINK_REMOVE = 'work-item-link/remove'\r\n"],"names":[],"mappings":";;AAAO,MAAM,sBAAsB;AAC5B,MAAM,qBAAqB;AAC3B,MAAM,2BAA2B;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"customer-widget-link.cjs.js","sources":["../../../../src/global-link/formats/customer-widget-link.ts"],"sourcesContent":["import Quill from 'quill'\n\nconst BlockEmbed = Quill.imports['blots/block/embed']\n\n// @dynamic\nclass CustomerWidgetLink extends BlockEmbed {\n static blotName: string\n static tagName: string\n static className: string\n\n static create(value) {\n const node = super.create(value)\n node.setAttribute('data-widget-type', value.type)\n node.setAttribute('data-widget-id', value.id)\n node.setAttribute('src', value.value)\n return node\n }\n\n static value(domNode) {\n return {\n type: domNode.getAttribute('data-widget-type'),\n id: domNode.getAttribute('data-widget-id'),\n value: domNode.getAttribute('src'),\n }\n }\n\n constructor(scroll, domNode, data) {\n super(scroll, domNode, data)\n }\n}\n\nCustomerWidgetLink.blotName = 'customer-widget-link'\nCustomerWidgetLink.tagName = 'img'\nCustomerWidgetLink.className = 'ql-customer-widget-link'\n\nexport default CustomerWidgetLink\n"],"names":[],"mappings":";;;AAEA,MAAM,aAAa,MAAM,QAAQ,mBAAmB;AAGpD,MAAM,2BAA2B,WAAW;AAAA,EAK1C,OAAO,OAAO,OAAO;AACb,UAAA,OAAO,MAAM,OAAO,KAAK;AAC1B,SAAA,aAAa,oBAAoB,MAAM,IAAI;AAC3C,SAAA,aAAa,kBAAkB,MAAM,EAAE;AACvC,SAAA,aAAa,OAAO,MAAM,KAAK;AAC7B,WAAA;AAAA,EACT;AAAA,EAEA,OAAO,MAAM,SAAS;AACb,WAAA;AAAA,MACL,MAAM,QAAQ,aAAa,kBAAkB;AAAA,MAC7C,IAAI,QAAQ,aAAa,gBAAgB;AAAA,MACzC,OAAO,QAAQ,aAAa,KAAK;AAAA,IAAA;AAAA,EAErC;AAAA,EAEA,YAAY,QAAQ,SAAS,MAAM;AAC3B,UAAA,QAAQ,SAAS,IAAI;AAAA,EAC7B;AACF;AAEA,mBAAmB,WAAW;AAC9B,mBAAmB,UAAU;AAC7B,mBAAmB,YAAY;;"}
|
|
1
|
+
{"version":3,"file":"customer-widget-link.cjs.js","sources":["../../../../src/global-link/formats/customer-widget-link.ts"],"sourcesContent":["import Quill from 'quill'\r\n\r\nconst BlockEmbed = Quill.imports['blots/block/embed']\r\n\r\n// @dynamic\r\nclass CustomerWidgetLink extends BlockEmbed {\r\n static blotName: string\r\n static tagName: string\r\n static className: string\r\n\r\n static create(value) {\r\n const node = super.create(value)\r\n node.setAttribute('data-widget-type', value.type)\r\n node.setAttribute('data-widget-id', value.id)\r\n node.setAttribute('src', value.value)\r\n return node\r\n }\r\n\r\n static value(domNode) {\r\n return {\r\n type: domNode.getAttribute('data-widget-type'),\r\n id: domNode.getAttribute('data-widget-id'),\r\n value: domNode.getAttribute('src'),\r\n }\r\n }\r\n\r\n constructor(scroll, domNode, data) {\r\n super(scroll, domNode, data)\r\n }\r\n}\r\n\r\nCustomerWidgetLink.blotName = 'customer-widget-link'\r\nCustomerWidgetLink.tagName = 'img'\r\nCustomerWidgetLink.className = 'ql-customer-widget-link'\r\n\r\nexport default CustomerWidgetLink\r\n"],"names":[],"mappings":";;;AAEA,MAAM,aAAa,MAAM,QAAQ,mBAAmB;AAGpD,MAAM,2BAA2B,WAAW;AAAA,EAK1C,OAAO,OAAO,OAAO;AACb,UAAA,OAAO,MAAM,OAAO,KAAK;AAC1B,SAAA,aAAa,oBAAoB,MAAM,IAAI;AAC3C,SAAA,aAAa,kBAAkB,MAAM,EAAE;AACvC,SAAA,aAAa,OAAO,MAAM,KAAK;AAC7B,WAAA;AAAA,EACT;AAAA,EAEA,OAAO,MAAM,SAAS;AACb,WAAA;AAAA,MACL,MAAM,QAAQ,aAAa,kBAAkB;AAAA,MAC7C,IAAI,QAAQ,aAAa,gBAAgB;AAAA,MACzC,OAAO,QAAQ,aAAa,KAAK;AAAA,IAAA;AAAA,EAErC;AAAA,EAEA,YAAY,QAAQ,SAAS,MAAM;AAC3B,UAAA,QAAQ,SAAS,IAAI;AAAA,EAC7B;AACF;AAEA,mBAAmB,WAAW;AAC9B,mBAAmB,UAAU;AAC7B,mBAAmB,YAAY;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doc-link.cjs.js","sources":["../../../../src/global-link/formats/doc-link.ts"],"sourcesContent":["import Quill from 'quill'\nimport { ON_DOC_LINK_REMOVE } from '../constants'\n\nconst Embed = Quill.imports['blots/embed']\n\n// @dynamic\nclass DocumentLink extends Embed {\n static blotName: string\n static tagName: string\n static className: string\n docData: any\n scroll: any\n\n static create(value) {\n const node = super.create(value)\n node.setAttribute('href', value.link)\n node.setAttribute('title', value.text)\n node.setAttribute('target', '_blank')\n node.setAttribute('icon-link', value.icon)\n\n const icon = document.createElement('span')\n icon.classList.add('ql-doc-link-icon')\n icon.style.background = `url(${value.icon}) no-repeat center`\n icon.style.backgroundSize = 'contain'\n\n node.insertAdjacentElement('afterbegin', icon)\n const text = document.createTextNode(value.text)\n node.appendChild(text)\n return node\n }\n\n static value(domNode) {\n return {\n link: domNode.getAttribute('href'),\n icon: domNode.getAttribute('icon-link'),\n text: domNode.textContent,\n }\n }\n\n constructor(scroll, domNode, data) {\n super(scroll, domNode, data)\n this.docData = data\n }\n\n remove() {\n this.scroll.emitter.emit(ON_DOC_LINK_REMOVE, this.docData)\n return super.remove()\n }\n}\n\nDocumentLink.blotName = 'doc-link'\nDocumentLink.tagName = 'A'\nDocumentLink.className = 'ql-doc-link'\n\nexport default DocumentLink\n"],"names":["ON_DOC_LINK_REMOVE"],"mappings":";;;;AAGA,MAAM,QAAQ,MAAM,QAAQ,aAAa;AAGzC,MAAM,qBAAqB,MAAM;AAAA,EAO/B,OAAO,OAAO,OAAO;AACb,UAAA,OAAO,MAAM,OAAO,KAAK;AAC1B,SAAA,aAAa,QAAQ,MAAM,IAAI;AAC/B,SAAA,aAAa,SAAS,MAAM,IAAI;AAChC,SAAA,aAAa,UAAU,QAAQ;AAC/B,SAAA,aAAa,aAAa,MAAM,IAAI;AAEnC,UAAA,OAAO,SAAS,cAAc,MAAM;AACrC,SAAA,UAAU,IAAI,kBAAkB;AACrC,SAAK,MAAM,aAAa,OAAO,MAAM,IAAI;AACzC,SAAK,MAAM,iBAAiB;AAEvB,SAAA,sBAAsB,cAAc,IAAI;AAC7C,UAAM,OAAO,SAAS,eAAe,MAAM,IAAI;AAC/C,SAAK,YAAY,IAAI;AACd,WAAA;AAAA,EACT;AAAA,EAEA,OAAO,MAAM,SAAS;AACb,WAAA;AAAA,MACL,MAAM,QAAQ,aAAa,MAAM;AAAA,MACjC,MAAM,QAAQ,aAAa,WAAW;AAAA,MACtC,MAAM,QAAQ;AAAA,IAAA;AAAA,EAElB;AAAA,EAEA,YAAY,QAAQ,SAAS,MAAM;AAC3B,UAAA,QAAQ,SAAS,IAAI;AAC3B,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,SAAS;AACP,SAAK,OAAO,QAAQ,KAAKA,UAAAA,oBAAoB,KAAK,OAAO;AACzD,WAAO,MAAM;EACf;AACF;AAEA,aAAa,WAAW;AACxB,aAAa,UAAU;AACvB,aAAa,YAAY;;"}
|
|
1
|
+
{"version":3,"file":"doc-link.cjs.js","sources":["../../../../src/global-link/formats/doc-link.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { ON_DOC_LINK_REMOVE } from '../constants'\r\n\r\nconst Embed = Quill.imports['blots/embed']\r\n\r\n// @dynamic\r\nclass DocumentLink extends Embed {\r\n static blotName: string\r\n static tagName: string\r\n static className: string\r\n docData: any\r\n scroll: any\r\n\r\n static create(value) {\r\n const node = super.create(value)\r\n node.setAttribute('href', value.link)\r\n node.setAttribute('title', value.text)\r\n node.setAttribute('target', '_blank')\r\n node.setAttribute('icon-link', value.icon)\r\n\r\n const icon = document.createElement('span')\r\n icon.classList.add('ql-doc-link-icon')\r\n icon.style.background = `url(${value.icon}) no-repeat center`\r\n icon.style.backgroundSize = 'contain'\r\n\r\n node.insertAdjacentElement('afterbegin', icon)\r\n const text = document.createTextNode(value.text)\r\n node.appendChild(text)\r\n return node\r\n }\r\n\r\n static value(domNode) {\r\n return {\r\n link: domNode.getAttribute('href'),\r\n icon: domNode.getAttribute('icon-link'),\r\n text: domNode.textContent,\r\n }\r\n }\r\n\r\n constructor(scroll, domNode, data) {\r\n super(scroll, domNode, data)\r\n this.docData = data\r\n }\r\n\r\n remove() {\r\n this.scroll.emitter.emit(ON_DOC_LINK_REMOVE, this.docData)\r\n return super.remove()\r\n }\r\n}\r\n\r\nDocumentLink.blotName = 'doc-link'\r\nDocumentLink.tagName = 'A'\r\nDocumentLink.className = 'ql-doc-link'\r\n\r\nexport default DocumentLink\r\n"],"names":["ON_DOC_LINK_REMOVE"],"mappings":";;;;AAGA,MAAM,QAAQ,MAAM,QAAQ,aAAa;AAGzC,MAAM,qBAAqB,MAAM;AAAA,EAO/B,OAAO,OAAO,OAAO;AACb,UAAA,OAAO,MAAM,OAAO,KAAK;AAC1B,SAAA,aAAa,QAAQ,MAAM,IAAI;AAC/B,SAAA,aAAa,SAAS,MAAM,IAAI;AAChC,SAAA,aAAa,UAAU,QAAQ;AAC/B,SAAA,aAAa,aAAa,MAAM,IAAI;AAEnC,UAAA,OAAO,SAAS,cAAc,MAAM;AACrC,SAAA,UAAU,IAAI,kBAAkB;AACrC,SAAK,MAAM,aAAa,OAAO,MAAM,IAAI;AACzC,SAAK,MAAM,iBAAiB;AAEvB,SAAA,sBAAsB,cAAc,IAAI;AAC7C,UAAM,OAAO,SAAS,eAAe,MAAM,IAAI;AAC/C,SAAK,YAAY,IAAI;AACd,WAAA;AAAA,EACT;AAAA,EAEA,OAAO,MAAM,SAAS;AACb,WAAA;AAAA,MACL,MAAM,QAAQ,aAAa,MAAM;AAAA,MACjC,MAAM,QAAQ,aAAa,WAAW;AAAA,MACtC,MAAM,QAAQ;AAAA,IAAA;AAAA,EAElB;AAAA,EAEA,YAAY,QAAQ,SAAS,MAAM;AAC3B,UAAA,QAAQ,SAAS,IAAI;AAC3B,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,SAAS;AACP,SAAK,OAAO,QAAQ,KAAKA,UAAAA,oBAAoB,KAAK,OAAO;AACzD,WAAO,MAAM;EACf;AACF;AAEA,aAAa,WAAW;AACxB,aAAa,UAAU;AACvB,aAAa,YAAY;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wiki-link.cjs.js","sources":["../../../../src/global-link/formats/wiki-link.ts"],"sourcesContent":["import Quill from 'quill'\nimport { ON_WIKI_LINK_REMOVE } from '../constants'\n\nconst Embed = Quill.imports['blots/embed']\n\n// @dynamic\nclass WikiLink extends Embed {\n static blotName: string\n static tagName: string\n static className: string\n wikiData: any\n scroll: any\n\n static create(value) {\n const node = super.create(value)\n node.setAttribute('href', value.link)\n node.setAttribute('target', '_blank')\n node.setAttribute('title', value.text)\n node.textContent = value.text\n return node\n }\n\n static value(domNode) {\n return {\n link: domNode.getAttribute('href'),\n text: domNode.textContent,\n }\n }\n\n constructor(scroll, domNode, data) {\n super(scroll, domNode, data)\n this.wikiData = data\n }\n\n remove() {\n this.scroll.emitter.emit(ON_WIKI_LINK_REMOVE, this.wikiData)\n return super.remove()\n }\n}\n\nWikiLink.blotName = 'wiki-link'\nWikiLink.tagName = 'A'\nWikiLink.className = 'ql-wiki-link'\n\nexport default WikiLink\n"],"names":["ON_WIKI_LINK_REMOVE"],"mappings":";;;;AAGA,MAAM,QAAQ,MAAM,QAAQ,aAAa;AAGzC,MAAM,iBAAiB,MAAM;AAAA,EAO3B,OAAO,OAAO,OAAO;AACb,UAAA,OAAO,MAAM,OAAO,KAAK;AAC1B,SAAA,aAAa,QAAQ,MAAM,IAAI;AAC/B,SAAA,aAAa,UAAU,QAAQ;AAC/B,SAAA,aAAa,SAAS,MAAM,IAAI;AACrC,SAAK,cAAc,MAAM;AAClB,WAAA;AAAA,EACT;AAAA,EAEA,OAAO,MAAM,SAAS;AACb,WAAA;AAAA,MACL,MAAM,QAAQ,aAAa,MAAM;AAAA,MACjC,MAAM,QAAQ;AAAA,IAAA;AAAA,EAElB;AAAA,EAEA,YAAY,QAAQ,SAAS,MAAM;AAC3B,UAAA,QAAQ,SAAS,IAAI;AAC3B,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,SAAS;AACP,SAAK,OAAO,QAAQ,KAAKA,UAAAA,qBAAqB,KAAK,QAAQ;AAC3D,WAAO,MAAM;EACf;AACF;AAEA,SAAS,WAAW;AACpB,SAAS,UAAU;AACnB,SAAS,YAAY;;"}
|
|
1
|
+
{"version":3,"file":"wiki-link.cjs.js","sources":["../../../../src/global-link/formats/wiki-link.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { ON_WIKI_LINK_REMOVE } from '../constants'\r\n\r\nconst Embed = Quill.imports['blots/embed']\r\n\r\n// @dynamic\r\nclass WikiLink extends Embed {\r\n static blotName: string\r\n static tagName: string\r\n static className: string\r\n wikiData: any\r\n scroll: any\r\n\r\n static create(value) {\r\n const node = super.create(value)\r\n node.setAttribute('href', value.link)\r\n node.setAttribute('target', '_blank')\r\n node.setAttribute('title', value.text)\r\n node.textContent = value.text\r\n return node\r\n }\r\n\r\n static value(domNode) {\r\n return {\r\n link: domNode.getAttribute('href'),\r\n text: domNode.textContent,\r\n }\r\n }\r\n\r\n constructor(scroll, domNode, data) {\r\n super(scroll, domNode, data)\r\n this.wikiData = data\r\n }\r\n\r\n remove() {\r\n this.scroll.emitter.emit(ON_WIKI_LINK_REMOVE, this.wikiData)\r\n return super.remove()\r\n }\r\n}\r\n\r\nWikiLink.blotName = 'wiki-link'\r\nWikiLink.tagName = 'A'\r\nWikiLink.className = 'ql-wiki-link'\r\n\r\nexport default WikiLink\r\n"],"names":["ON_WIKI_LINK_REMOVE"],"mappings":";;;;AAGA,MAAM,QAAQ,MAAM,QAAQ,aAAa;AAGzC,MAAM,iBAAiB,MAAM;AAAA,EAO3B,OAAO,OAAO,OAAO;AACb,UAAA,OAAO,MAAM,OAAO,KAAK;AAC1B,SAAA,aAAa,QAAQ,MAAM,IAAI;AAC/B,SAAA,aAAa,UAAU,QAAQ;AAC/B,SAAA,aAAa,SAAS,MAAM,IAAI;AACrC,SAAK,cAAc,MAAM;AAClB,WAAA;AAAA,EACT;AAAA,EAEA,OAAO,MAAM,SAAS;AACb,WAAA;AAAA,MACL,MAAM,QAAQ,aAAa,MAAM;AAAA,MACjC,MAAM,QAAQ;AAAA,IAAA;AAAA,EAElB;AAAA,EAEA,YAAY,QAAQ,SAAS,MAAM;AAC3B,UAAA,QAAQ,SAAS,IAAI;AAC3B,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,SAAS;AACP,SAAK,OAAO,QAAQ,KAAKA,UAAAA,qBAAqB,KAAK,QAAQ;AAC3D,WAAO,MAAM;EACf;AACF;AAEA,SAAS,WAAW;AACpB,SAAS,UAAU;AACnB,SAAS,YAAY;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"work-item-link.cjs.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":["createTable","ON_WORK_ITEM_LINK_REMOVE"],"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,QAAQA,YAAAA,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,KAAKC,UAAAA,0BAA0B,KAAK,YAAY;AACpE,WAAO,MAAM;EACf;AACF;AAEA,aAAa,WAAW;AACxB,aAAa,UAAU;AACvB,aAAa,YAAY;;"}
|
|
1
|
+
{"version":3,"file":"work-item-link.cjs.js","sources":["../../../../src/global-link/formats/work-item-link.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { ON_WORK_ITEM_LINK_REMOVE } from '../constants'\r\nimport { createTable } from '../utils/createTable'\r\n\r\nconst BlockEmbed = Quill.imports['blots/block/embed']\r\n\r\n// @dynamic\r\nclass WorkItemLink extends BlockEmbed {\r\n static blotName: string\r\n static tagName: string\r\n static className: string\r\n workItemData: any\r\n scroll: any\r\n\r\n static create(value) {\r\n const node = super.create(value)\r\n node.setAttribute('contenteditable', 'false')\r\n node.setAttribute('href', value.link)\r\n node.setAttribute('__work_item_data__', JSON.stringify(value.data))\r\n const table = createTable(value.data)\r\n node.appendChild(table)\r\n return node\r\n }\r\n\r\n static value(domNode) {\r\n return {\r\n link: domNode.getAttribute('href'),\r\n data: JSON.parse(domNode.getAttribute('__work_item_data__')),\r\n }\r\n }\r\n\r\n constructor(scroll, domNode, data) {\r\n super(scroll, domNode, data)\r\n this.workItemData = data\r\n }\r\n\r\n remove() {\r\n this.scroll.emitter.emit(ON_WORK_ITEM_LINK_REMOVE, this.workItemData)\r\n return super.remove()\r\n }\r\n}\r\n\r\nWorkItemLink.blotName = 'work-item-link'\r\nWorkItemLink.tagName = 'div'\r\nWorkItemLink.className = 'ql-work-item-link'\r\n\r\nexport default WorkItemLink\r\n"],"names":["createTable","ON_WORK_ITEM_LINK_REMOVE"],"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,QAAQA,YAAAA,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,KAAKC,UAAAA,0BAA0B,KAAK,YAAY;AACpE,WAAO,MAAM;EACf;AACF;AAEA,aAAa,WAAW;AACxB,aAAa,UAAU;AACvB,aAAa,YAAY;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.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":["WikiLink","DocumentLink","WorkItemLink","CustomerWidgetLink","getEventComposedPath"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../../src/global-link/index.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { getEventComposedPath } from '../config/editor.utils'\r\nimport CustomerWidgetLink from './formats/customer-widget-link'\r\nimport DocumentLink from './formats/doc-link'\r\nimport WikiLink from './formats/wiki-link'\r\nimport WorkItemLink from './formats/work-item-link'\r\n\r\nconst Module = Quill.imports['core/module']\r\nconst Delta = Quill.imports.delta\r\n\r\n// @dynamic\r\nclass GlobalLink extends Module {\r\n open: boolean\r\n wrap: any\r\n panel: any\r\n quill: any\r\n\r\n static register() {\r\n Quill.register('formats/wiki-link', WikiLink)\r\n Quill.register('formats/doc-link', DocumentLink)\r\n Quill.register('formats/work-item-link', WorkItemLink)\r\n Quill.register('formats/customer-widget-link', CustomerWidgetLink)\r\n }\r\n\r\n constructor(quill, options) {\r\n super(quill, options)\r\n const toolbar = quill.getModule('toolbar')\r\n this.open = false\r\n this.panel = options.component\r\n this.wrap = options.wrap\r\n const globalLinkBtn = toolbar.container && toolbar.container.querySelector('.ql-global-link')\r\n toolbar.addHandler('global-link', this.handleGlobalLinkButtonClick.bind(this))\r\n quill.root.addEventListener('click', this.onEditorClick.bind(this))\r\n document.body.addEventListener('click', (evt) => {\r\n if (!this.wrap.contains(evt.target) && !(globalLinkBtn && globalLinkBtn.contains(evt.target))) {\r\n this.open = false\r\n this.wrap.classList.add('global-link-hide')\r\n }\r\n })\r\n this.panel.wikiLink.subscribe(this.addWikiLink.bind(this))\r\n this.panel.docLink.subscribe(this.addDocLink.bind(this))\r\n this.panel.workItemLink.subscribe(this.addWorkItemLink.bind(this))\r\n if (this.panel.close) {\r\n this.panel.close.subscribe(this.closePanel.bind(this))\r\n }\r\n }\r\n\r\n onEditorClick(evt: any) {\r\n if (!evt.ctrlKey) return\r\n const path = getEventComposedPath(evt)\r\n if (!path || path.length <= 0) return\r\n const linkNode = path.filter((node) => {\r\n return node.classList && (node.classList.contains(WikiLink.className)\r\n || node.classList.contains(DocumentLink.className)\r\n || node.classList.contains(WorkItemLink.className))\r\n })[0]\r\n\r\n if (!linkNode) return\r\n\r\n if (linkNode.classList.contains(WikiLink.className)) {\r\n this.handleLinkClick(linkNode)\r\n }\r\n else if (linkNode.classList.contains(DocumentLink.className)) {\r\n this.handleLinkClick(linkNode)\r\n }\r\n else if (linkNode.classList.contains(WorkItemLink.className)) {\r\n const tableRow = path.filter((node) => {\r\n return node.tagName && node.tagName.toUpperCase() === 'TR'\r\n })[0]\r\n\r\n if (tableRow) {\r\n this.handleLinkClick(tableRow)\r\n }\r\n }\r\n }\r\n\r\n handleLinkClick(linkNode) {\r\n const href = linkNode.getAttribute('href')\r\n if (href) {\r\n window.open(href)\r\n }\r\n }\r\n\r\n handleGlobalLinkButtonClick(_value) {\r\n this.open = !this.open\r\n this.triggerPanel()\r\n }\r\n\r\n triggerPanel() {\r\n if (this.open) {\r\n this.wrap.classList.remove('global-link-hide')\r\n }\r\n else {\r\n this.wrap.classList.add('global-link-hide')\r\n }\r\n }\r\n\r\n addWikiLink(wikiData) {\r\n const index = this.quill.getSelection(true).index\r\n const arr: { link: any, text: any } [] = []\r\n const delta = arr.reduce.call(wikiData, (op: any, wiki) => {\r\n op.insert({\r\n [WikiLink.blotName]: {\r\n link: wiki.link,\r\n text: wiki.text,\r\n },\r\n })\r\n return op\r\n }, new Delta().retain(index))\r\n\r\n this.quill.updateContents(delta, Quill.sources.USER)\r\n this.quill.setSelection(index + 1, Quill.sources.USER)\r\n if (this.panel.autoClose) {\r\n this.closePanel()\r\n }\r\n }\r\n\r\n addDocLink(docData) {\r\n const index = this.quill.getSelection(true).index\r\n const arr: { link: any, text: any, icon: any } [] = []\r\n const delta = arr.reduce.call(docData, (op: any, doc) => {\r\n op.insert({\r\n [DocumentLink.blotName]: {\r\n link: doc.link,\r\n text: doc.text,\r\n icon: doc.icon,\r\n },\r\n })\r\n return op\r\n }, new Delta().retain(index))\r\n\r\n this.quill.updateContents(delta, Quill.sources.USER)\r\n this.quill.setSelection(index + 1, Quill.sources.USER)\r\n if (this.panel.autoClose) {\r\n this.closePanel()\r\n }\r\n }\r\n\r\n addWorkItemLink(workItemData) {\r\n const index = this.quill.getSelection(true).index\r\n const arr: { url: any, table: any } [] = []\r\n const delta = arr.reduce.call(workItemData, (op: any, workItem) => {\r\n op.insert({\r\n [WorkItemLink.blotName]: {\r\n link: workItem.url,\r\n data: workItem.table,\r\n },\r\n })\r\n return op\r\n }, new Delta().retain(index))\r\n\r\n this.quill.updateContents(delta, Quill.sources.USER)\r\n this.quill.setSelection(index + 1, Quill.sources.USER)\r\n if (this.panel.autoClose) {\r\n this.closePanel()\r\n }\r\n }\r\n\r\n closePanel() {\r\n this.open = false\r\n this.triggerPanel()\r\n }\r\n}\r\n\r\nexport default GlobalLink\r\n"],"names":["WikiLink","DocumentLink","WorkItemLink","CustomerWidgetLink","getEventComposedPath"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createTable.cjs.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;;"}
|
|
1
|
+
{"version":3,"file":"createTable.cjs.js","sources":["../../../../src/global-link/utils/createTable.ts"],"sourcesContent":["const tableConfig = [\r\n { title: 'Number', field: 'id', width: '100' },\r\n { title: 'Title', field: 'subject', width: '200' },\r\n { title: 'Priority', field: 'priority', width: '100' },\r\n { title: 'Iteration', field: 'iteration', width: '100' },\r\n { title: 'Status', field: 'status', width: '100' },\r\n { title: 'Conductor', field: 'assigned_to', width: '100' },\r\n]\r\n\r\nexport function createTable(data: any[]) {\r\n const table = document.createElement<'table'>('table')\r\n createColGroup(table)\r\n createTableHead(table)\r\n createTableBody(table, data)\r\n return table\r\n}\r\n\r\nfunction createColGroup(table: HTMLTableElement) {\r\n const colGroup = document.createElement<'colgroup'>('colgroup')\r\n tableConfig.forEach(({ width }) => {\r\n const col = document.createElement<'col'>('col')\r\n col.setAttribute('width', width)\r\n colGroup.appendChild(col)\r\n })\r\n table.insertAdjacentElement('afterbegin', colGroup)\r\n}\r\n\r\nfunction createTableHead(table: HTMLTableElement) {\r\n const tHead = table.createTHead()\r\n const tRow = tHead.insertRow()\r\n tableConfig.forEach(({ title }) => {\r\n const tCell = tRow.insertCell()\r\n tCell.textContent = title\r\n })\r\n return tHead\r\n}\r\n\r\nfunction createTableBody(table: HTMLTableElement, data: any[]) {\r\n const tBody = table.createTBody();\r\n\r\n [].forEach.call(data, (d) => {\r\n const tRow = tBody.insertRow()\r\n // @ts-ignore\r\n tRow.setAttribute('href', d.url)\r\n tableConfig.forEach(({ field }) => {\r\n const tCell = tRow.insertCell()\r\n tCell.classList.add(`work-item-${field}`)\r\n // @ts-ignore\r\n tCell.textContent = d[field]\r\n })\r\n })\r\n\r\n return tBody\r\n}\r\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/lib/index.cjs.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
3
3
|
const fluentEditor = require("./fluent-editor.cjs.js");
|
|
4
4
|
const index = require("./config/index.cjs.js");
|
|
5
5
|
const editor_config = require("./config/editor.config.cjs.js");
|
|
6
|
+
const editor_utils = require("./config/editor.utils.cjs.js");
|
|
6
7
|
exports.default = fluentEditor.default;
|
|
7
8
|
exports.ICONS_CONFIG = index.ICONS_CONFIG;
|
|
8
9
|
exports.getListValue = index.getListValue;
|
|
@@ -20,4 +21,17 @@ exports.OTHER_FILE_UPLOADER_MIME_TYPES = editor_config.OTHER_FILE_UPLOADER_MIME_
|
|
|
20
21
|
exports.PPT_UPLOADER_MIME_TYPES = editor_config.PPT_UPLOADER_MIME_TYPES;
|
|
21
22
|
exports.XSL_UPLOADER_MIME_TYPES = editor_config.XSL_UPLOADER_MIME_TYPES;
|
|
22
23
|
exports.defaultLanguage = editor_config.defaultLanguage;
|
|
24
|
+
exports.getEventComposedPath = editor_utils.getEventComposedPath;
|
|
25
|
+
exports.hadProtocol = editor_utils.hadProtocol;
|
|
26
|
+
exports.hexToRgbA = editor_utils.hexToRgbA;
|
|
27
|
+
exports.imageFileToUrl = editor_utils.imageFileToUrl;
|
|
28
|
+
exports.imageUrlToFile = editor_utils.imageUrlToFile;
|
|
29
|
+
exports.insideTable = editor_utils.insideTable;
|
|
30
|
+
exports.isInside = editor_utils.isInside;
|
|
31
|
+
exports.isNullOrUndefined = editor_utils.isNullOrUndefined;
|
|
32
|
+
exports.isPureIE = editor_utils.isPureIE;
|
|
33
|
+
exports.omit = editor_utils.omit;
|
|
34
|
+
exports.replaceDeltaImage = editor_utils.replaceDeltaImage;
|
|
35
|
+
exports.sanitize = editor_utils.sanitize;
|
|
36
|
+
exports.splitWithBreak = editor_utils.splitWithBreak;
|
|
23
37
|
//# sourceMappingURL=index.cjs.js.map
|
package/lib/index.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link.cjs.js","sources":["../../../../src/link/formats/link.ts"],"sourcesContent":["import type TypeInline from 'quill/blots/inline'\nimport Quill from 'quill'\nimport { hadProtocol, sanitize } from '../../config/editor.utils'\n\nconst Inline = Quill.import('blots/inline') as typeof TypeInline\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 static autoProtocol: string = ''\n static create(value) {\n const node = super.create(value)\n let href = value\n if (!hadProtocol(href) && this.autoProtocol) {\n href = `${this.autoProtocol}://${value}`\n }\n href = this.sanitize(href)\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":["hadProtocol","sanitize","Link"],"mappings":";;;;;AAIA,MAAM,SAAS,MAAM,OAAO,cAAc;cAG1C,mBAAkC,OAAO;AAAA,EAOvC,OAAO,OAAO,OAAO;AACb,UAAA,OAAO,MAAM,OAAO,KAAK;AAC/B,QAAI,OAAO;AACX,QAAI,CAACA,aAAAA,YAAY,IAAI,KAAK,KAAK,cAAc;AAC3C,aAAO,GAAG,KAAK,YAAY,MAAM,KAAK;AAAA,IACxC;AACO,WAAA,KAAK,SAAS,IAAI;AACpB,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,WAAOC,aAAAA,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,GAAK,SAAS,KAAK,CAAC;AAAA,IACxD;AAAA,EACF;AACF,GA7BE,GAAO,eAAuB,IANhC;AAoCAC,OAAK,WAAW;AAChBA,OAAK,UAAU;AACfA,OAAK,gBAAgB;AACrBA,OAAK,qBAAqB,CAAC,QAAQ,SAAS,UAAU,KAAK;AAC3DA,OAAK,YAAY;;"}
|
|
1
|
+
{"version":3,"file":"link.cjs.js","sources":["../../../../src/link/formats/link.ts"],"sourcesContent":["import type TypeInline from 'quill/blots/inline'\r\nimport Quill from 'quill'\r\nimport { hadProtocol, sanitize } from '../../config/editor.utils'\r\n\r\nconst Inline = Quill.import('blots/inline') as typeof TypeInline\r\n\r\n// @dynamic\r\nexport default class Link extends Inline {\r\n static blotName: string\r\n static tagName: string\r\n static SANITIZED_URL: string\r\n static PROTOCOL_WHITELIST: string[]\r\n static className: string\r\n static autoProtocol: string = ''\r\n static create(value) {\r\n const node = super.create(value)\r\n let href = value\r\n if (!hadProtocol(href) && this.autoProtocol) {\r\n href = `${this.autoProtocol}://${value}`\r\n }\r\n href = this.sanitize(href)\r\n node.setAttribute('href', href)\r\n node.setAttribute('target', '_blank')\r\n return node\r\n }\r\n\r\n static formats(domNode) {\r\n return domNode.getAttribute('href')\r\n }\r\n\r\n static sanitize(url) {\r\n return sanitize(url, this.PROTOCOL_WHITELIST) ? url : this.SANITIZED_URL\r\n }\r\n\r\n format(name, value) {\r\n if (name !== this.statics.blotName || [false, null].includes(value)) {\r\n super.format(name, value)\r\n }\r\n else {\r\n this.domNode.setAttribute('href', Link.sanitize(value))\r\n }\r\n }\r\n}\r\nLink.blotName = 'link'\r\nLink.tagName = 'A'\r\nLink.SANITIZED_URL = 'about:blank'\r\nLink.PROTOCOL_WHITELIST = ['http', 'https', 'mailto', 'tel']\r\nLink.className = 'ql-normal-link'\r\n"],"names":["hadProtocol","sanitize","Link"],"mappings":";;;;;AAIA,MAAM,SAAS,MAAM,OAAO,cAAc;cAG1C,mBAAkC,OAAO;AAAA,EAOvC,OAAO,OAAO,OAAO;AACb,UAAA,OAAO,MAAM,OAAO,KAAK;AAC/B,QAAI,OAAO;AACX,QAAI,CAACA,aAAAA,YAAY,IAAI,KAAK,KAAK,cAAc;AAC3C,aAAO,GAAG,KAAK,YAAY,MAAM,KAAK;AAAA,IACxC;AACO,WAAA,KAAK,SAAS,IAAI;AACpB,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,WAAOC,aAAAA,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,GAAK,SAAS,KAAK,CAAC;AAAA,IACxD;AAAA,EACF;AACF,GA7BE,GAAO,eAAuB,IANhC;AAoCAC,OAAK,WAAW;AAChBA,OAAK,UAAU;AACfA,OAAK,gBAAgB;AACrBA,OAAK,qBAAqB,CAAC,QAAQ,SAAS,UAAU,KAAK;AAC3DA,OAAK,YAAY;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.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.import('ui/icons')\nconst SnowTheme = Quill.import('themes/snow')\nconst Module = Quill.import('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\n// @ts-expect-error\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","Tooltip"],"mappings":";;;;;AAIA,MAAM,QAAQ,MAAM,OAAO,UAAU;AACrC,MAAM,YAAY,MAAM,OAAO,aAAa;AAC5C,MAAM,SAAS,MAAM,OAAO,aAAa;AAGzC,MAAM,aAAa,OAAO;AAAA,EACxB,OAAO,WAAW;AACV,UAAA,SAAS,cAAcA,KAAA,SAAU,IAAI;AAAA,EAC7C;AAAA,EAEA,YAAY,OAAO,SAAS;AAC1B,UAAM,OAAO,OAAO;AAAA,EACtB;AACF;AAGA,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,IAAIC,gBAAQ,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
|
+
{"version":3,"file":"index.cjs.js","sources":["../../../src/link/index.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport LinkBlot from './formats/link'\r\nimport Tooltip from './modules/tooltip'\r\n\r\nconst icons = Quill.import('ui/icons')\r\nconst SnowTheme = Quill.import('themes/snow')\r\nconst Module = Quill.import('core/module')\r\n\r\n// @dynamic\r\nclass Link extends Module {\r\n static register() {\r\n Quill.register('blots/link', LinkBlot, true)\r\n }\r\n\r\n constructor(quill, options) {\r\n super(quill, options)\r\n }\r\n}\r\n\r\n// @ts-expect-error\r\nSnowTheme.prototype.extendToolbar = function (toolbar) {\r\n toolbar.container.classList.add('ql-snow')\r\n this.buildButtons(toolbar.container.querySelectorAll('button'), icons)\r\n this.buildPickers(toolbar.container.querySelectorAll('select'), icons)\r\n this.tooltip = new Tooltip(this.quill, this.options.bounds)\r\n if (toolbar.container.querySelector('.ql-link')) {\r\n this.quill.keyboard.addBinding(\r\n { key: 'k', shortKey: true },\r\n (_range, context) => {\r\n toolbar.handlers.link.call(toolbar, !context.format.link)\r\n },\r\n )\r\n }\r\n}\r\n\r\nexport default Link\r\n"],"names":["LinkBlot","Tooltip"],"mappings":";;;;;AAIA,MAAM,QAAQ,MAAM,OAAO,UAAU;AACrC,MAAM,YAAY,MAAM,OAAO,aAAa;AAC5C,MAAM,SAAS,MAAM,OAAO,aAAa;AAGzC,MAAM,aAAa,OAAO;AAAA,EACxB,OAAO,WAAW;AACV,UAAA,SAAS,cAAcA,KAAA,SAAU,IAAI;AAAA,EAC7C;AAAA,EAEA,YAAY,OAAO,SAAS;AAC1B,UAAM,OAAO,OAAO;AAAA,EACtB;AACF;AAGA,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,IAAIC,gBAAQ,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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tooltip.cjs.js","sources":["../../../../src/link/modules/tooltip.ts"],"sourcesContent":["import Quill, { Range } from 'quill'\nimport Emitter from 'quill/core/emitter'\nimport { BaseTooltip } from 'quill/themes/base'\nimport { debounce } from '../../../src/utils/debounce'\nimport { CHANGE_LANGUAGE_EVENT, LANG_CONF } from '../../config'\nimport { hadProtocol, isNullOrUndefined } from '../../config/editor.utils'\nimport LinkBlot from '../formats/link'\n\n// @dynamic\nexport default class Tooltip extends BaseTooltip {\n static TEMPLATE: string = [\n `<input type=\"text\" data-formula=\"e=mc^2\" data-link=\"${LANG_CONF['en-US'].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\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 options: { autoProtocol: string } = {\n autoProtocol: 'https',\n }\n\n constructor(quill, bounds) {\n super(quill, bounds)\n this.setTemplate()\n this.isInputFocus = false\n this.isHover = false\n\n this.resolveOptions()\n LinkBlot.autoProtocol = this.options.autoProtocol\n this.debouncedHideToolTip = debounce(this.hideToolTip, 300)\n this.debouncedShowToolTip = debounce(this.showToolTip, 300)\n this.quill.on(CHANGE_LANGUAGE_EVENT, () => {\n this.setTemplate()\n })\n }\n\n setTemplate() {\n this.root.innerHTML = [\n `<input type=\"text\" data-formula=\"e=mc^2\" data-link=\"${this.quill.options.langText?.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 this.textbox = this.root.querySelector('input[type=\"text\"]')\n this.listen()\n }\n\n resolveOptions() {\n this.options = {\n autoProtocol: 'https',\n }\n const value = this.quill.options.autoProtocol\n if (value && typeof value === 'string') {\n this.options.autoProtocol = value\n }\n else if (typeof value === 'boolean' && !value) {\n this.options.autoProtocol = ''\n }\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 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 if (this.options.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 // @ts-expect-error\n edit(mode: string = '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: string) {\n let result = url\n if (!url) {\n return ''\n }\n if (!hadProtocol(url)) {\n result = `${this.options.autoProtocol}://${url}`\n }\n return result\n }\n}\n"],"names":["BaseTooltip","LinkBlot","debounce","CHANGE_LANGUAGE_EVENT","link","Range","isNullOrUndefined","hadProtocol","LANG_CONF"],"mappings":";;;;;;;;;;AASA,MAAqB,WAArB,MAAqB,iBAAgBA,KAAAA,YAAY;AAAA,EAuB/C,YAAY,OAAO,QAAQ;AACzB,UAAM,OAAO,MAAM;AALe,SAAA,UAAA;AAAA,MAClC,cAAc;AAAA,IAAA;AAKd,SAAK,YAAY;AACjB,SAAK,eAAe;AACpB,SAAK,UAAU;AAEf,SAAK,eAAe;AACXC,SAAAA,QAAA,eAAe,KAAK,QAAQ;AACrC,SAAK,uBAAuBC,SAAA,SAAS,KAAK,aAAa,GAAG;AAC1D,SAAK,uBAAuBA,SAAA,SAAS,KAAK,aAAa,GAAG;AACrD,SAAA,MAAM,GAAGC,cAAAA,uBAAuB,MAAM;AACzC,WAAK,YAAY;AAAA,IAAA,CAClB;AAAA,EACH;AAAA,EAEA,cAAc;;AACZ,SAAK,KAAK,YAAY;AAAA,MACpB,wDAAuD,UAAK,MAAM,QAAQ,aAAnB,mBAA6B,eAAe;AAAA,MACnG;AAAA,MACA;AAAA,MACA;AAAA,IAAA,EACA,KAAK,EAAE;AACT,SAAK,UAAU,KAAK,KAAK,cAAc,oBAAoB;AAC3D,SAAK,OAAO;AAAA,EACd;AAAA,EAEA,iBAAiB;AACf,SAAK,UAAU;AAAA,MACb,cAAc;AAAA,IAAA;AAEV,UAAA,QAAQ,KAAK,MAAM,QAAQ;AAC7B,QAAA,SAAS,OAAO,UAAU,UAAU;AACtC,WAAK,QAAQ,eAAe;AAAA,IAErB,WAAA,OAAO,UAAU,aAAa,CAAC,OAAO;AAC7C,WAAK,QAAQ,eAAe;AAAA,IAC9B;AAAA,EACF;AAAA,EAEA,aAAa;AACX,WAAO,CAAC,KAAK,WAAW,CAAC,KAAK;AAAA,EAChC;AAAA,EAEA,cAAc;AACR,QAAA,KAAK,cAAc;AACrB,WAAK,KAAK;AAAA,IACZ;AAAA,EACF;AAAA,EAEA,YAAY,MAAM,OAAO,OAAO;AAC1B,QAAA,CAAC,KAAK,cAAc;AACjB,WAAA,KAAK,MAAM,OAAO,KAAK;AAAA,IAC9B;AAAA,EACF;AAAA,EAEA,mBAAmB;AACjB,SAAK,UAAU;AACf,SAAK,qBAAqB;AAAA,EAC5B;AAAA,EAEA,iBAAiB,OAAO;AACtB,UAAM,gBAAgB,CAAC,KAAK,KAAK,UAAU,SAAS,WAAW;AAC/D,QAAI,eAAe;AACjB;AAAA,IACF;AAEA,QAAI,KAAK,cAAc;AACrB,WAAK,KAAK;AAAA,IACZ;AACA,SAAK,UAAU;AACf,UAAM,WAAW,MAAM;AACjB,UAAA,UAAUF,KAAAA,QAAS,QAAQ,QAAQ;AACrC,QAAA,QAAQ,WAAW,GAAG,GAAG;AAC3B;AAAA,IACF;AACM,UAAA,WAAW,MAAM,KAAK,QAAQ;AACpC,UAAM,QAAQ,KAAK,MAAM,SAAS,QAAQ;AAC1C,UAAM,CAACG,QAAM,MAAM,IAAI,KAAK,MAAM,OAAO;AAAA,MACvCH,KAAA;AAAA,MACA;AAAA,IAAA;AAEI,UAAA,SAASG,UAAQA,OAAK,OAAO;AACnC,SAAK,YAAY,IAAIC,MAAAA,MAAM,QAAQ,QAAQ,MAAM;AACjD,SAAK,qBAAqB,QAAQ,SAAS,KAAK,SAAS;AAAA,EAC3D;AAAA,EAEA,SAAS;AACP,UAAM,OAAO;AACb,SAAK,KAAK,cAAc,aAAa,EAAE,iBAAiB,SAAS,CAAC,UAAU;AAC1E,UAAI,CAACC,aAAA,kBAAkB,KAAK,SAAS,GAAG;AACtC,cAAM,QAAQ,KAAK;AACnB,aAAK,aAAa;AAClB,aAAK,MAAM,WAAW,OAAO,QAAQ,OAAO,QAAQ,QAAQ,GAAG;AAC/D,eAAO,KAAK;AAAA,MACd;AACA,YAAM,eAAe;AACrB,WAAK,KAAK;AAAA,IAAA,CACX;AAED,SAAK,MAAM,KAAK;AAAA,MACd;AAAA,MACA,CAAC,UAAU;AAEN,aAAA,MAAM,OAAO,QAAQ,kBAAkB,OACnC,CAAC,MAAM,OAAO,UAAU,SAASL,aAAS,SAAS,MACrD,CAAC,MAAM,OAAO,QAAQ,KAAKA,KAAA,QAAS,SAAS,EAAE,GAClD;AACA;AAAA,QACF;AACA,aAAK,iBAAiB,KAAK;AAAA,MAC7B;AAAA,MACA;AAAA,IAAA;AAGF,SAAK,MAAM,KAAK;AAAA,MACd;AAAA,MACA,CAAC,UAAU;AACT,YAAI,MAAM,OAAO,QAAQ,kBAAkB,OAAO,CAAC,MAAM,OAAO,QAAQ,KAAKA,KAAS,QAAA,SAAS,EAAE,GAAG;AAClG;AAAA,QACF;AACA,aAAK,iBAAiB;AAAA,MACxB;AAAA,MACA;AAAA,IAAA;AAGF,SAAK,KAAK;AAAA,MACR;AAAA,MACA,MAAM;AACJ,aAAK,UAAU;AAAA,MACjB;AAAA,MACA;AAAA,IAAA;AAGG,SAAA,KAAK,iBAAiB,cAAc,KAAK,iBAAiB,KAAK,IAAI,GAAG,KAAK;AAEhF,SAAK,KAAK,cAAc,cAAc,EAAE,iBAAiB,SAAS,CAAC,UAAU;AAC3E,YAAMG,SAAOH,KAAAA,QAAS,SAAS,KAAK,QAAQ,KAAK;AAC1C,aAAA,KAAKG,QAAM,QAAQ;AAC1B,YAAM,eAAe;AAAA,IAAA,CACtB;AACD,SAAK,KAAK,cAAc,oBAAoB,EAAE,iBAAiB,SAAS,MAAM;AAC5E,WAAK,eAAe;AAAA,IAAA,CACrB;AACD,SAAK,KAAK,cAAc,oBAAoB,EAAE,iBAAiB,QAAQ,MAAM;AAC3E,WAAK,eAAe;AACpB,WAAK,KAAK;AAAA,IAAA,CACX;AACD,SAAK,MAAM;AAAA,MACT,QAAQ,OAAO;AAAA,MACf,CAAC,OAAO,WAAW,WAAW;AACxB,YAAAE,aAAA,kBAAkB,KAAK,EAAG;AAC1B,YAAA,WAAW,QAAQ,QAAQ,MAAM;AACnC,gBAAM,CAACF,QAAM,MAAM,IAAI,KAAK,MAAM,OAAO;AAAA,YACvCH,KAAA;AAAA,YACA,MAAM;AAAA,UAAA;AAGJ,cAAA,CAACK,aAAAA,kBAAkBF,MAAI,GAAG;AACvB,iBAAA,YAAY,IAAIC,MAAAA,MAAM,MAAM,QAAQ,QAAQD,OAAK,QAAQ;AAC9D,kBAAM,UAAUH,KAAA,QAAS,QAAQG,OAAK,OAAO;AAC7C,gBAAI,CAAC,QAAQ,WAAW,GAAG,GAAG;AAC5B,mBAAK,KAAK,QAAQ,SAAS,KAAK,SAAS;AAAA,YAC3C;AACA;AAAA,UACF;AAAA,QACF;AACI,YAAA,KAAK,cAAc;AACrB,eAAK,KAAK;AAAA,QACZ;AAAA,MACF;AAAA,IAAA;AAEF,SAAK,MAAM;AAAA,MACT,QAAQ,OAAO;AAAA,MACf,MAAM;AACE,cAAA,YAAY,KAAK,MAAM,aAAa;AACpC,cAAA,QAAQ,aAAa,UAAU;AACrC,mBAAW,MAAM;AACT,gBAAAA,SAAO,KAAK,MAAM,OAAO;AAAA,YAC7BH,KAAA;AAAA,YACA;AAAA,YACA,CAAC;AACH,cAAI,CAACG,QAAM;AACT,iBAAK,iBAAiB;AAAA,UACxB;AAAA,QAAA,CACD;AAAA,MACH;AAAA,IAAA;AAAA,EAEJ;AAAA,EAEA,OAAO;AACD,QAAA,QAAQ,KAAK,QAAQ;AACzB,QAAI,CAAC,MAAO;AACZ,SAAK,QAAQ,QAAQ;AACrB,YAAQ,KAAK,KAAK,aAAa,WAAW,GAAG;AAAA,MAC3C,KAAK,QAAQ;AACX,cAAM,EAAE,UAAc,IAAA,KAAK,MAAM;AAC7B,YAAA,KAAK,QAAQ,cAAc;AACrB,kBAAA,KAAK,gBAAgB,KAAK;AAAA,QACpC;AAEA,YAAI,KAAK,WAAW;AAClB,eAAK,MAAM;AAAA,YACT,KAAK;AAAA,YACL;AAAA,YACA;AAAA,YACA,QAAQ,QAAQ;AAAA,UAAA;AAElB,eAAK,aAAa;AAAA,QAAA,OAEf;AACH,eAAK,aAAa;AAClB,eAAK,MAAM,OAAO,QAAQ,OAAO,QAAQ,QAAQ,IAAI;AAAA,QACvD;AACK,aAAA,MAAM,KAAK,YAAY;AAC5B;AAAA,MACF;AAAA,MACA,KAAK,WAAW;AACd,cAAM,QAAQ,KAAK,MAAM,aAAa,IAAI;AACtC,YAAA,CAACE,aAAAA,kBAAkB,KAAK,GAAG;AACvB,gBAAA,QAAQ,MAAM,QAAQ,MAAM;AAClC,eAAK,MAAM;AAAA,YACT;AAAA,YACA,KAAK,KAAK,aAAa,WAAW;AAAA,YAClC;AAAA,YACA,QAAQ,QAAQ;AAAA,UAAA;AAElB,cAAI,KAAK,KAAK,aAAa,WAAW,MAAM,WAAW;AACrD,iBAAK,MAAM,WAAW,QAAQ,GAAG,KAAK,QAAQ,QAAQ,IAAI;AAAA,UAC5D;AACA,eAAK,MAAM,aAAa,QAAQ,GAAG,QAAQ,QAAQ,IAAI;AAAA,QACzD;AACA;AAAA,MACF;AAAA,MACA,KAAK,SAAS;AACZ,cAAM,QAAQ,KAAK,MAAM,aAAa,IAAI;AAC1C,aAAK,MAAM,WAAW,MAAM,OAAO,MAAM,QAAQ,QAAQ,IAAI;AAC7D,aAAK,MAAM,YAAY,MAAM,QAAQ,GAAG,SAAS,EAAE,KAAK,MAAM,GAAG,QAAQ,QAAQ,IAAI;AAChF,aAAA,MAAM,WAAW,MAAM,QAAQ,GAAG,MAAM,QAAQ,QAAQ,IAAI;AACjE,aAAK,MAAM,aAAa,MAAM,QAAQ,GAAG,QAAQ,QAAQ,MAAM;AAC/D,aAAK,QAAQ,QAAQ;AACrB,aAAK,KAAK;AACV;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,SAAS,WAAW;AAClB,UAAM,OAAO,UAAU;AACvB,UAAM,MAAM,UAAU,SAAS,KAAK,MAAM,KAAK;AAC/C,SAAK,KAAK,MAAM,OAAO,GAAG,IAAI;AAC9B,SAAK,KAAK,MAAM,MAAM,GAAG,GAAG;AACvB,SAAA,KAAK,UAAU,OAAO,SAAS;AAC9B,UAAA,kBAAkB,KAAK,gBAAgB,sBAAsB;AAC7D,UAAA,aAAa,KAAK,KAAK,sBAAsB;AACnD,QAAI,QAAQ;AACR,QAAA,WAAW,QAAQ,gBAAgB,OAAO;AACpC,cAAA,gBAAgB,QAAQ,WAAW;AAC3C,WAAK,KAAK,MAAM,OAAO,GAAG,OAAO,KAAK;AAAA,IACxC;AACI,QAAA,WAAW,OAAO,gBAAgB,MAAM;AAClC,cAAA,gBAAgB,OAAO,WAAW;AAC1C,WAAK,KAAK,MAAM,OAAO,GAAG,OAAO,KAAK;AAAA,IACxC;AACI,QAAA,WAAW,SAAS,gBAAgB,QAAQ;AACxC,YAAA,SAAS,WAAW,SAAS,WAAW;AAC9C,YAAM,gBAAgB,UAAU,SAAS,UAAU,MAAM;AACzD,YAAM,WAAW,MAAM;AACvB,WAAK,KAAK,MAAM,MAAM,GAAG,WAAW,IAAI,KAAK,MAAM,KAAK,YAAY,UAAU,MAAM,QAAQ;AACvF,WAAA,KAAK,UAAU,IAAI,SAAS;AAAA,IACnC;AACO,WAAA;AAAA,EACT;AAAA;AAAA,EAGA,KAAK,OAAe,QAAQ,UAAU,MAAM,OAAO;AACjD,SAAK,YAAY,SAAS,KAAK,MAAM,UAAU;AAC1C,SAAA,KAAK,UAAU,OAAO,WAAW;AACjC,SAAA,KAAK,UAAU,IAAI,YAAY;AAChC,QAAA,CAACA,aAAAA,kBAAkB,OAAO,GAAG;AAC/B,WAAK,QAAQ,QAAQ;AAAA,IAAA,WAEd,SAAS,KAAK,KAAK,aAAa,WAAW,GAAG;AACrD,WAAK,QAAQ,QAAQ;AAAA,IACvB;AACK,SAAA,SAAS,KAAK,MAAM,UAAU,SAAS,KAAK,MAAM,UAAU,UAAU,CAAC;AACxE,QAAA,KAAK,QAAQ,UAAU,IAAI;AAC7B,WAAK,QAAQ;IACf;AACA,SAAK,QAAQ;AAAA,MACX;AAAA,MACA,KAAK,QAAQ,aAAa,QAAQ,IAAI,EAAE,KAAK;AAAA,IAAA;AAE1C,SAAA,KAAK,aAAa,aAAa,IAAI;AAAA,EAC1C;AAAA,EAEA,OAAO;AACL,UAAM,KAAK;AACN,SAAA,KAAK,gBAAgB,WAAW;AAAA,EACvC;AAAA,EAEA,gBAAgB,KAAa;AAC3B,QAAI,SAAS;AACb,QAAI,CAAC,KAAK;AACD,aAAA;AAAA,IACT;AACI,QAAA,CAACC,aAAAA,YAAY,GAAG,GAAG;AACrB,eAAS,GAAG,KAAK,QAAQ,YAAY,MAAM,GAAG;AAAA,IAChD;AACO,WAAA;AAAA,EACT;AACF;AA7UE,SAAO,WAAmB;AAAA,EACxB,uDAAuDC,cAAA,UAAU,OAAO,EAAE,eAAe;AAAA,EACzF;AAAA,EACA;AAAA,EACA;AAAA,EACA,KAAK,EAAE;AANX,IAAqB,UAArB;;"}
|
|
1
|
+
{"version":3,"file":"tooltip.cjs.js","sources":["../../../../src/link/modules/tooltip.ts"],"sourcesContent":["import Quill, { Range } from 'quill'\r\nimport Emitter from 'quill/core/emitter'\r\nimport { BaseTooltip } from 'quill/themes/base'\r\nimport { debounce } from '../../../src/utils/debounce'\r\nimport { CHANGE_LANGUAGE_EVENT, LANG_CONF } from '../../config'\r\nimport { hadProtocol, isNullOrUndefined } from '../../config/editor.utils'\r\nimport LinkBlot from '../formats/link'\r\n\r\n// @dynamic\r\nexport default class Tooltip extends BaseTooltip {\r\n static TEMPLATE: string = [\r\n `<input type=\"text\" data-formula=\"e=mc^2\" data-link=\"${LANG_CONF['en-US'].linkplaceholder}\" data-video=\"Embed URL\" style=\"width: 225px;\">`,\r\n '<span class=\"ql-split\"></span>',\r\n '<a class=\"ql-preview\"><i class=\"icon-share\"></i></a>',\r\n '<a class=\"ql-remove\"><i class=\"icon-delete\"></i></a>',\r\n ].join('')\r\n\r\n isInputFocus: boolean\r\n isHover: boolean\r\n debouncedHideToolTip: any\r\n debouncedShowToolTip: any\r\n hide: any\r\n linkRange: any\r\n quill: any\r\n root: any\r\n restoreFocus: any\r\n textbox: any\r\n boundsContainer: any\r\n options: { autoProtocol: string } = {\r\n autoProtocol: 'https',\r\n }\r\n\r\n constructor(quill, bounds) {\r\n super(quill, bounds)\r\n this.setTemplate()\r\n this.isInputFocus = false\r\n this.isHover = false\r\n\r\n this.resolveOptions()\r\n LinkBlot.autoProtocol = this.options.autoProtocol\r\n this.debouncedHideToolTip = debounce(this.hideToolTip, 300)\r\n this.debouncedShowToolTip = debounce(this.showToolTip, 300)\r\n this.quill.on(CHANGE_LANGUAGE_EVENT, () => {\r\n this.setTemplate()\r\n })\r\n }\r\n\r\n setTemplate() {\r\n this.root.innerHTML = [\r\n `<input type=\"text\" data-formula=\"e=mc^2\" data-link=\"${this.quill.options.langText?.linkplaceholder}\" data-video=\"Embed URL\" style=\"width: 225px;\">`,\r\n '<span class=\"ql-split\"></span>',\r\n '<a class=\"ql-preview\"><i class=\"icon-share\"></i></a>',\r\n '<a class=\"ql-remove\"><i class=\"icon-delete\"></i></a>',\r\n ].join('')\r\n this.textbox = this.root.querySelector('input[type=\"text\"]')\r\n this.listen()\r\n }\r\n\r\n resolveOptions() {\r\n this.options = {\r\n autoProtocol: 'https',\r\n }\r\n const value = this.quill.options.autoProtocol\r\n if (value && typeof value === 'string') {\r\n this.options.autoProtocol = value\r\n }\r\n else if (typeof value === 'boolean' && !value) {\r\n this.options.autoProtocol = ''\r\n }\r\n }\r\n\r\n shouldHide() {\r\n return !this.isHover && !this.isInputFocus\r\n }\r\n\r\n hideToolTip() {\r\n if (this.shouldHide()) {\r\n this.hide()\r\n }\r\n }\r\n\r\n showToolTip(name, value, range) {\r\n if (!this.shouldHide()) {\r\n this.edit(name, value, range)\r\n }\r\n }\r\n\r\n handleMouseLeave() {\r\n this.isHover = false\r\n this.debouncedHideToolTip()\r\n }\r\n\r\n handleMouseEnter(event) {\r\n const isTooltipShow = !this.root.classList.contains('ql-hidden')\r\n if (isTooltipShow) {\r\n return\r\n }\r\n\r\n if (this.isInputFocus) {\r\n this.save()\r\n }\r\n this.isHover = true\r\n const linkNode = event.target\r\n const preview = LinkBlot.formats(linkNode)\r\n if (preview.startsWith('#')) {\r\n return\r\n }\r\n const linkBlot = Quill.find(linkNode)\r\n const index = this.quill.getIndex(linkBlot)\r\n const [link, offset] = this.quill.scroll.descendant(\r\n LinkBlot,\r\n index,\r\n )\r\n const length = link && link.length()\r\n this.linkRange = new Range(index - offset, length)\r\n this.debouncedShowToolTip('link', preview, this.linkRange)\r\n }\r\n\r\n listen() {\r\n super.listen()\r\n this.root.querySelector('a.ql-remove').addEventListener('click', (event) => {\r\n if (!isNullOrUndefined(this.linkRange)) {\r\n const range = this.linkRange\r\n this.restoreFocus()\r\n this.quill.formatText(range, 'link', false, Emitter.sources.API)\r\n delete this.linkRange\r\n }\r\n event.preventDefault()\r\n this.hide()\r\n })\r\n\r\n this.quill.root.addEventListener(\r\n 'mouseover',\r\n (event) => {\r\n if (\r\n (event.target.tagName.toUpperCase() !== 'A'\r\n || !event.target.classList.contains(LinkBlot.className))\r\n && !event.target.closest(`a.${LinkBlot.className}`)\r\n ) {\r\n return\r\n }\r\n this.handleMouseEnter(event)\r\n },\r\n false,\r\n )\r\n\r\n this.quill.root.addEventListener(\r\n 'mouseout',\r\n (event) => {\r\n if (event.target.tagName.toUpperCase() !== 'A' && !event.target.closest(`a.${LinkBlot.className}`)) {\r\n return\r\n }\r\n this.handleMouseLeave()\r\n },\r\n false,\r\n )\r\n\r\n this.root.addEventListener(\r\n 'mouseenter',\r\n () => {\r\n this.isHover = true\r\n },\r\n false,\r\n )\r\n\r\n this.root.addEventListener('mouseleave', this.handleMouseLeave.bind(this), false)\r\n\r\n this.root.querySelector('a.ql-preview').addEventListener('click', (event) => {\r\n const link = LinkBlot.sanitize(this.textbox.value)\r\n window.open(link, '_blank')\r\n event.preventDefault()\r\n })\r\n this.root.querySelector('input[type=\"text\"]').addEventListener('focus', () => {\r\n this.isInputFocus = true\r\n })\r\n this.root.querySelector('input[type=\"text\"]').addEventListener('blur', () => {\r\n this.isInputFocus = false\r\n this.save()\r\n })\r\n this.quill.on(\r\n Emitter.events.SELECTION_CHANGE,\r\n (range, _oldRange, source) => {\r\n if (isNullOrUndefined(range)) return\r\n if (source === Emitter.sources.USER) {\r\n const [link, offset] = this.quill.scroll.descendant(\r\n LinkBlot,\r\n range.index,\r\n )\r\n\r\n if (!isNullOrUndefined(link)) {\r\n this.linkRange = new Range(range.index - offset, link.length())\r\n const preview = LinkBlot.formats(link.domNode)\r\n if (!preview.startsWith('#')) {\r\n this.edit('link', preview, this.linkRange)\r\n }\r\n return\r\n }\r\n }\r\n if (this.shouldHide()) {\r\n this.hide()\r\n }\r\n },\r\n )\r\n this.quill.on(\r\n Emitter.events.TEXT_CHANGE,\r\n () => {\r\n const selection = this.quill.getSelection()\r\n const index = selection && selection.index\r\n setTimeout(() => {\r\n const link = this.quill.scroll.descendant(\r\n LinkBlot,\r\n index,\r\n )[0]\r\n if (!link) {\r\n this.handleMouseLeave()\r\n }\r\n })\r\n },\r\n )\r\n }\r\n\r\n save() {\r\n let value = this.textbox.value\r\n if (!value) return\r\n this.textbox.value = ''\r\n switch (this.root.getAttribute('data-mode')) {\r\n case 'link': {\r\n const { scrollTop } = this.quill.root\r\n if (this.options.autoProtocol) {\r\n value = this.addHttpProtocol(value)\r\n }\r\n\r\n if (this.linkRange) {\r\n this.quill.formatText(\r\n this.linkRange,\r\n 'link',\r\n value,\r\n Emitter.sources.USER,\r\n )\r\n this.restoreFocus()\r\n }\r\n else {\r\n this.restoreFocus()\r\n this.quill.format('link', value, Emitter.sources.USER)\r\n }\r\n this.quill.root.scrollTop = scrollTop\r\n break\r\n }\r\n case 'formula': {\r\n const range = this.quill.getSelection(true)\r\n if (!isNullOrUndefined(range)) {\r\n const index = range.index + range.length\r\n this.quill.insertEmbed(\r\n index,\r\n this.root.getAttribute('data-mode'),\r\n value,\r\n Emitter.sources.USER,\r\n )\r\n if (this.root.getAttribute('data-mode') === 'formula') {\r\n this.quill.insertText(index + 1, ' ', Emitter.sources.USER)\r\n }\r\n this.quill.setSelection(index + 2, Emitter.sources.USER)\r\n }\r\n break\r\n }\r\n case 'video': {\r\n const range = this.quill.getSelection(true)\r\n this.quill.insertText(range.index, '\\n', Emitter.sources.USER)\r\n this.quill.insertEmbed(range.index + 1, 'video', { src: value }, Emitter.sources.USER)\r\n this.quill.insertText(range.index + 2, '\\n', Emitter.sources.USER)\r\n this.quill.setSelection(range.index + 3, Emitter.sources.SILENT)\r\n this.textbox.value = ''\r\n this.hide()\r\n break\r\n }\r\n default:\r\n }\r\n }\r\n\r\n position(reference) {\r\n const left = reference.left\r\n const top = reference.bottom + this.quill.root.scrollTop\r\n this.root.style.left = `${left}px`\r\n this.root.style.top = `${top}px`\r\n this.root.classList.remove('ql-flip')\r\n const containerBounds = this.boundsContainer.getBoundingClientRect()\r\n const rootBounds = this.root.getBoundingClientRect()\r\n let shift = 0\r\n if (rootBounds.right > containerBounds.right) {\r\n shift = containerBounds.right - rootBounds.right\r\n this.root.style.left = `${left + shift}px`\r\n }\r\n if (rootBounds.left < containerBounds.left) {\r\n shift = containerBounds.left - rootBounds.left\r\n this.root.style.left = `${left + shift}px`\r\n }\r\n if (rootBounds.bottom > containerBounds.bottom) {\r\n const height = rootBounds.bottom - rootBounds.top\r\n const verticalShift = reference.bottom - reference.top + height\r\n const fixedTop = top - verticalShift\r\n this.root.style.top = `${fixedTop < 0 ? this.quill.root.scrollTop + reference.top : fixedTop}px`\r\n this.root.classList.add('ql-flip')\r\n }\r\n return shift\r\n }\r\n\r\n // @ts-expect-error\r\n edit(mode: string = 'link', preview = null, range) {\r\n this.linkRange = range || this.quill.selection.savedRange\r\n this.root.classList.remove('ql-hidden')\r\n this.root.classList.add('ql-editing')\r\n if (!isNullOrUndefined(preview)) {\r\n this.textbox.value = preview\r\n }\r\n else if (mode !== this.root.getAttribute('data-mode')) {\r\n this.textbox.value = ''\r\n }\r\n this.position(this.quill.getBounds(range || this.quill.selection.savedRange))\r\n if (this.textbox.value === '') {\r\n this.textbox.focus()\r\n }\r\n this.textbox.setAttribute(\r\n 'placeholder',\r\n this.textbox.getAttribute(`data-${mode}`) || '',\r\n )\r\n this.root.setAttribute('data-mode', mode)\r\n }\r\n\r\n show() {\r\n super.show()\r\n this.root.removeAttribute('data-mode')\r\n }\r\n\r\n addHttpProtocol(url: string) {\r\n let result = url\r\n if (!url) {\r\n return ''\r\n }\r\n if (!hadProtocol(url)) {\r\n result = `${this.options.autoProtocol}://${url}`\r\n }\r\n return result\r\n }\r\n}\r\n"],"names":["BaseTooltip","LinkBlot","debounce","CHANGE_LANGUAGE_EVENT","link","Range","isNullOrUndefined","hadProtocol","LANG_CONF"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formats.cjs.js","sources":["../../../src/mathlive/formats.ts"],"sourcesContent":["import type { MathfieldElement } from 'mathlive'\nimport type { Root } from 'parchment'\nimport Quill from 'quill'\n\nconst Parchment = Quill.import('parchment')\ntype MathliveBlotMode = 'dialog' | 'only-read'\nexport default class MathliveBlot extends Parchment.EmbedBlot {\n static blotName = 'mathlive'\n static tagName = 'math-field'\n static className = 'ql-math-field'\n mode: MathliveBlotMode\n\n static create(obj: { value: string, mode: MathliveBlotMode }) {\n const el = super.create() as MathfieldElement\n el.setAttribute('mode', obj.mode)\n el.classList.add('view')\n el.innerHTML = obj.value\n el.setValue(obj.value)\n return el\n }\n\n static value(domNode: MathfieldElement) {\n return {\n value: domNode.value,\n mode: domNode.getAttribute('mode'),\n }\n }\n\n constructor(scroll: Root, public domNode: MathfieldElement) {\n super(scroll, domNode)\n domNode.setAttribute('contenteditable', 'false')\n this.mode = (domNode.getAttribute('mode') || 'only-read') as MathliveBlotMode\n }\n\n html() {\n const formula = this.domNode.value\n return `<math-field class=\"ql-math-field view\" contenteditable=\"false\" mode=\"${this.mode}\">${formula}</math-field>`\n }\n}\n"],"names":[],"mappings":";;;AAIA,MAAM,YAAY,MAAM,OAAO,WAAW;AAErB,MAAA,gBAAA,MAAA,sBAAqB,UAAU,UAAU;AAAA,EAsB5D,YAAY,QAAqB,SAA2B;AAC1D,UAAM,QAAQ,OAAO;AADU,SAAA,UAAA;AAEvB,YAAA,aAAa,mBAAmB,OAAO;AAC/C,SAAK,OAAQ,QAAQ,aAAa,MAAM,KAAK;AAAA,EAC/C;AAAA,EApBA,OAAO,OAAO,KAAgD;AACtD,UAAA,KAAK,MAAM;AACd,OAAA,aAAa,QAAQ,IAAI,IAAI;AAC7B,OAAA,UAAU,IAAI,MAAM;AACvB,OAAG,YAAY,IAAI;AAChB,OAAA,SAAS,IAAI,KAAK;AACd,WAAA;AAAA,EACT;AAAA,EAEA,OAAO,MAAM,SAA2B;AAC/B,WAAA;AAAA,MACL,OAAO,QAAQ;AAAA,MACf,MAAM,QAAQ,aAAa,MAAM;AAAA,IAAA;AAAA,EAErC;AAAA,EAQA,OAAO;AACC,UAAA,UAAU,KAAK,QAAQ;AAC7B,WAAO,wEAAwE,KAAK,IAAI,KAAK,OAAO;AAAA,EACtG;AACF;AA/BE,cAAO,WAAW;AAClB,cAAO,UAAU;AACjB,cAAO,YAAY;AAHA,IAAA,eAAA;;"}
|
|
1
|
+
{"version":3,"file":"formats.cjs.js","sources":["../../../src/mathlive/formats.ts"],"sourcesContent":["import type { MathfieldElement } from 'mathlive'\r\nimport type { Root } from 'parchment'\r\nimport Quill from 'quill'\r\n\r\nconst Parchment = Quill.import('parchment')\r\ntype MathliveBlotMode = 'dialog' | 'only-read'\r\nexport default class MathliveBlot extends Parchment.EmbedBlot {\r\n static blotName = 'mathlive'\r\n static tagName = 'math-field'\r\n static className = 'ql-math-field'\r\n mode: MathliveBlotMode\r\n\r\n static create(obj: { value: string, mode: MathliveBlotMode }) {\r\n const el = super.create() as MathfieldElement\r\n el.setAttribute('mode', obj.mode)\r\n el.classList.add('view')\r\n el.innerHTML = obj.value\r\n el.setValue(obj.value)\r\n return el\r\n }\r\n\r\n static value(domNode: MathfieldElement) {\r\n return {\r\n value: domNode.value,\r\n mode: domNode.getAttribute('mode'),\r\n }\r\n }\r\n\r\n constructor(scroll: Root, public domNode: MathfieldElement) {\r\n super(scroll, domNode)\r\n domNode.setAttribute('contenteditable', 'false')\r\n this.mode = (domNode.getAttribute('mode') || 'only-read') as MathliveBlotMode\r\n }\r\n\r\n html() {\r\n const formula = this.domNode.value\r\n return `<math-field class=\"ql-math-field view\" contenteditable=\"false\" mode=\"${this.mode}\">${formula}</math-field>`\r\n }\r\n}\r\n"],"names":[],"mappings":";;;AAIA,MAAM,YAAY,MAAM,OAAO,WAAW;AAErB,MAAA,gBAAA,MAAA,sBAAqB,UAAU,UAAU;AAAA,EAsB5D,YAAY,QAAqB,SAA2B;AAC1D,UAAM,QAAQ,OAAO;AADU,SAAA,UAAA;AAEvB,YAAA,aAAa,mBAAmB,OAAO;AAC/C,SAAK,OAAQ,QAAQ,aAAa,MAAM,KAAK;AAAA,EAC/C;AAAA,EApBA,OAAO,OAAO,KAAgD;AACtD,UAAA,KAAK,MAAM;AACd,OAAA,aAAa,QAAQ,IAAI,IAAI;AAC7B,OAAA,UAAU,IAAI,MAAM;AACvB,OAAG,YAAY,IAAI;AAChB,OAAA,SAAS,IAAI,KAAK;AACd,WAAA;AAAA,EACT;AAAA,EAEA,OAAO,MAAM,SAA2B;AAC/B,WAAA;AAAA,MACL,OAAO,QAAQ;AAAA,MACf,MAAM,QAAQ,aAAa,MAAM;AAAA,IAAA;AAAA,EAErC;AAAA,EAQA,OAAO;AACC,UAAA,UAAU,KAAK,QAAQ;AAC7B,WAAO,wEAAwE,KAAK,IAAI,KAAK,OAAO;AAAA,EACtG;AACF;AA/BE,cAAO,WAAW;AAClB,cAAO,UAAU;AACjB,cAAO,YAAY;AAHA,IAAA,eAAA;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../../../src/mathlive/index.ts"],"sourcesContent":["import Quill from 'quill'\nimport MathliveBlot from './formats'\nimport MathliveTooltip from './tooltip'\n\nexport default class MathliveModule {\n tooltip: MathliveTooltip\n constructor(public quill: Quill) {\n this.tooltip = new MathliveTooltip(quill)\n\n this.quill.root.addEventListener(\n 'click',\n (e: MouseEvent) => {\n if (!this.quill.isEnabled()) return\n const path = e.composedPath() as HTMLElement[]\n if (!path || path.length <= 0) return\n\n const mathliveNode = path.find(node => node.tagName && node.tagName.toUpperCase() === MathliveBlot.tagName.toUpperCase() && node.classList.contains(MathliveBlot.className))\n const mathliveBlot = Quill.find(mathliveNode) as MathliveBlot | null\n if (mathliveBlot) {\n const { value, mode } = MathliveBlot.value(mathliveBlot.domNode)\n if (mode === 'dialog') {\n this.createDialog(value)\n }\n }\n },\n true,\n )\n }\n\n createDialog(value?: string) {\n this.tooltip.edit(value)\n }\n}\n"],"names":["MathliveTooltip","MathliveBlot"],"mappings":";;;;;AAIA,MAAqB,eAAe;AAAA,EAElC,YAAmB,OAAc;AAAd,SAAA,QAAA;AACZ,SAAA,UAAU,IAAIA,QAAA,QAAgB,KAAK;AAExC,SAAK,MAAM,KAAK;AAAA,MACd;AAAA,MACA,CAAC,MAAkB;AACjB,YAAI,CAAC,KAAK,MAAM,UAAa,EAAA;AACvB,cAAA,OAAO,EAAE;AACf,YAAI,CAAC,QAAQ,KAAK,UAAU,EAAG;AAE/B,cAAM,eAAe,KAAK,KAAK,UAAQ,KAAK,WAAW,KAAK,QAAQ,kBAAkBC,gBAAa,QAAQ,iBAAiB,KAAK,UAAU,SAASA,QAAAA,QAAa,SAAS,CAAC;AACrK,cAAA,eAAe,MAAM,KAAK,YAAY;AAC5C,YAAI,cAAc;AAChB,gBAAM,EAAE,OAAO,SAASA,QAAa,QAAA,MAAM,aAAa,OAAO;AAC/D,cAAI,SAAS,UAAU;AACrB,iBAAK,aAAa,KAAK;AAAA,UACzB;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AAAA,EAEA,aAAa,OAAgB;AACtB,SAAA,QAAQ,KAAK,KAAK;AAAA,EACzB;AACF;;"}
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../../src/mathlive/index.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport MathliveBlot from './formats'\r\nimport MathliveTooltip from './tooltip'\r\n\r\nexport default class MathliveModule {\r\n tooltip: MathliveTooltip\r\n constructor(public quill: Quill) {\r\n this.tooltip = new MathliveTooltip(quill)\r\n\r\n this.quill.root.addEventListener(\r\n 'click',\r\n (e: MouseEvent) => {\r\n if (!this.quill.isEnabled()) return\r\n const path = e.composedPath() as HTMLElement[]\r\n if (!path || path.length <= 0) return\r\n\r\n const mathliveNode = path.find(node => node.tagName && node.tagName.toUpperCase() === MathliveBlot.tagName.toUpperCase() && node.classList.contains(MathliveBlot.className))\r\n const mathliveBlot = Quill.find(mathliveNode) as MathliveBlot | null\r\n if (mathliveBlot) {\r\n const { value, mode } = MathliveBlot.value(mathliveBlot.domNode)\r\n if (mode === 'dialog') {\r\n this.createDialog(value)\r\n }\r\n }\r\n },\r\n true,\r\n )\r\n }\r\n\r\n createDialog(value?: string) {\r\n this.tooltip.edit(value)\r\n }\r\n}\r\n"],"names":["MathliveTooltip","MathliveBlot"],"mappings":";;;;;AAIA,MAAqB,eAAe;AAAA,EAElC,YAAmB,OAAc;AAAd,SAAA,QAAA;AACZ,SAAA,UAAU,IAAIA,QAAA,QAAgB,KAAK;AAExC,SAAK,MAAM,KAAK;AAAA,MACd;AAAA,MACA,CAAC,MAAkB;AACjB,YAAI,CAAC,KAAK,MAAM,UAAa,EAAA;AACvB,cAAA,OAAO,EAAE;AACf,YAAI,CAAC,QAAQ,KAAK,UAAU,EAAG;AAE/B,cAAM,eAAe,KAAK,KAAK,UAAQ,KAAK,WAAW,KAAK,QAAQ,kBAAkBC,gBAAa,QAAQ,iBAAiB,KAAK,UAAU,SAASA,QAAAA,QAAa,SAAS,CAAC;AACrK,cAAA,eAAe,MAAM,KAAK,YAAY;AAC5C,YAAI,cAAc;AAChB,gBAAM,EAAE,OAAO,SAASA,QAAa,QAAA,MAAM,aAAa,OAAO;AAC/D,cAAI,SAAS,UAAU;AACrB,iBAAK,aAAa,KAAK;AAAA,UACzB;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AAAA,EAEA,aAAa,OAAgB;AACtB,SAAA,QAAQ,KAAK,KAAK;AAAA,EACzB;AACF;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tooltip.cjs.js","sources":["../../../src/mathlive/tooltip.ts"],"sourcesContent":["import type { MathfieldElement } from 'mathlive'\nimport type { Bounds } from 'quill/core/selection'\nimport type TypeTooltip from 'quill/ui/tooltip'\nimport Quill from 'quill'\n\nconst Delta = Quill.import('delta')\nconst Tooltip = Quill.import('ui/tooltip') as typeof TypeTooltip\nexport default class MathliveTooltip extends Tooltip {\n static TEMPLATE = ``\n\n mathliveDom: MathfieldElement\n editValue?: string\n\n constructor(quill: Quill, boundsContainer?: HTMLElement) {\n super(quill, boundsContainer)\n this.mathliveDom = document.createElement('math-field') as MathfieldElement\n this.mathliveDom.classList.add('ql-math-field')\n this.root.appendChild(this.mathliveDom)\n this.root.classList.add('math-field-tooltip')\n this.listen()\n }\n\n listen() {\n this.mathliveDom.addEventListener('blur', (event) => {\n this.hide()\n })\n this.root.addEventListener('keydown', (event) => {\n if (event.key === 'Enter') {\n event.preventDefault()\n this.save()\n }\n else if (event.key === 'Escape') {\n event.preventDefault()\n this.cancel()\n }\n })\n }\n\n cancel() {\n this.hide()\n this.restoreFocus()\n }\n\n edit(value?: string) {\n this.editValue = value\n this.root.classList.remove('ql-hidden')\n this.root.classList.add('ql-editing')\n this.mathliveDom.setValue(value || '')\n const range = this.quill.getSelection()\n const bounds = range ? this.quill.getBounds(range) : null\n if (bounds != null) {\n this.position(bounds)\n }\n this.show()\n this.mathliveDom.focus()\n }\n\n restoreFocus() {\n this.mathliveDom.blur()\n this.quill.focus({ preventScroll: true })\n }\n\n save() {\n const range = this.quill.getSelection(true)\n const inputValue = this.mathliveDom.value\n if (!inputValue) return\n const index = range ? range.index : this.quill.getLength() - 1\n const delta = new Delta()\n .retain(index)\n .delete(this.editValue ? 1 : range?.length || 0)\n .insert({ mathlive: { value: inputValue, mode: 'dialog' } })\n this.quill.updateContents(delta, Quill.sources.USER)\n this.quill.setSelection(index + 1, Quill.sources.SILENT)\n this.hide()\n }\n\n position(reference: Bounds) {\n const adjustedReference = { ...reference }\n adjustedReference.left = reference.left + this.root.offsetWidth / 2 - reference.width / 2\n return super.position(adjustedReference)\n }\n}\n"],"names":[],"mappings":";;;AAKA,MAAM,QAAQ,MAAM,OAAO,OAAO;AAClC,MAAM,UAAU,MAAM,OAAO,YAAY;AACzC,MAAqB,mBAArB,MAAqB,yBAAwB,QAAQ;AAAA,EAMnD,YAAY,OAAc,iBAA+B;AACvD,UAAM,OAAO,eAAe;AACvB,SAAA,cAAc,SAAS,cAAc,YAAY;AACjD,SAAA,YAAY,UAAU,IAAI,eAAe;AACzC,SAAA,KAAK,YAAY,KAAK,WAAW;AACjC,SAAA,KAAK,UAAU,IAAI,oBAAoB;AAC5C,SAAK,OAAO;AAAA,EACd;AAAA,EAEA,SAAS;AACP,SAAK,YAAY,iBAAiB,QAAQ,CAAC,UAAU;AACnD,WAAK,KAAK;AAAA,IAAA,CACX;AACD,SAAK,KAAK,iBAAiB,WAAW,CAAC,UAAU;AAC3C,UAAA,MAAM,QAAQ,SAAS;AACzB,cAAM,eAAe;AACrB,aAAK,KAAK;AAAA,MAAA,WAEH,MAAM,QAAQ,UAAU;AAC/B,cAAM,eAAe;AACrB,aAAK,OAAO;AAAA,MACd;AAAA,IAAA,CACD;AAAA,EACH;AAAA,EAEA,SAAS;AACP,SAAK,KAAK;AACV,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,KAAK,OAAgB;AACnB,SAAK,YAAY;AACZ,SAAA,KAAK,UAAU,OAAO,WAAW;AACjC,SAAA,KAAK,UAAU,IAAI,YAAY;AAC/B,SAAA,YAAY,SAAS,SAAS,EAAE;AAC/B,UAAA,QAAQ,KAAK,MAAM,aAAa;AACtC,UAAM,SAAS,QAAQ,KAAK,MAAM,UAAU,KAAK,IAAI;AACrD,QAAI,UAAU,MAAM;AAClB,WAAK,SAAS,MAAM;AAAA,IACtB;AACA,SAAK,KAAK;AACV,SAAK,YAAY;EACnB;AAAA,EAEA,eAAe;AACb,SAAK,YAAY;AACjB,SAAK,MAAM,MAAM,EAAE,eAAe,KAAM,CAAA;AAAA,EAC1C;AAAA,EAEA,OAAO;AACL,UAAM,QAAQ,KAAK,MAAM,aAAa,IAAI;AACpC,UAAA,aAAa,KAAK,YAAY;AACpC,QAAI,CAAC,WAAY;AACjB,UAAM,QAAQ,QAAQ,MAAM,QAAQ,KAAK,MAAM,UAAc,IAAA;AACvD,UAAA,QAAQ,IAAI,MAAA,EACf,OAAO,KAAK,EACZ,OAAO,KAAK,YAAY,KAAI,+BAAO,WAAU,CAAC,EAC9C,OAAO,EAAE,UAAU,EAAE,OAAO,YAAY,MAAM,SAAS,EAAA,CAAG;AAC7D,SAAK,MAAM,eAAe,OAAO,MAAM,QAAQ,IAAI;AACnD,SAAK,MAAM,aAAa,QAAQ,GAAG,MAAM,QAAQ,MAAM;AACvD,SAAK,KAAK;AAAA,EACZ;AAAA,EAEA,SAAS,WAAmB;AACpB,UAAA,oBAAoB,EAAE,GAAG;AACb,sBAAA,OAAO,UAAU,OAAO,KAAK,KAAK,cAAc,IAAI,UAAU,QAAQ;AACjF,WAAA,MAAM,SAAS,iBAAiB;AAAA,EACzC;AACF;AAzEE,iBAAO,WAAW;AADpB,IAAqB,kBAArB;;"}
|
|
1
|
+
{"version":3,"file":"tooltip.cjs.js","sources":["../../../src/mathlive/tooltip.ts"],"sourcesContent":["import type { MathfieldElement } from 'mathlive'\r\nimport type { Bounds } from 'quill/core/selection'\r\nimport type TypeTooltip from 'quill/ui/tooltip'\r\nimport Quill from 'quill'\r\n\r\nconst Delta = Quill.import('delta')\r\nconst Tooltip = Quill.import('ui/tooltip') as typeof TypeTooltip\r\nexport default class MathliveTooltip extends Tooltip {\r\n static TEMPLATE = ``\r\n\r\n mathliveDom: MathfieldElement\r\n editValue?: string\r\n\r\n constructor(quill: Quill, boundsContainer?: HTMLElement) {\r\n super(quill, boundsContainer)\r\n this.mathliveDom = document.createElement('math-field') as MathfieldElement\r\n this.mathliveDom.classList.add('ql-math-field')\r\n this.root.appendChild(this.mathliveDom)\r\n this.root.classList.add('math-field-tooltip')\r\n this.listen()\r\n }\r\n\r\n listen() {\r\n this.mathliveDom.addEventListener('blur', (event) => {\r\n this.hide()\r\n })\r\n this.root.addEventListener('keydown', (event) => {\r\n if (event.key === 'Enter') {\r\n event.preventDefault()\r\n this.save()\r\n }\r\n else if (event.key === 'Escape') {\r\n event.preventDefault()\r\n this.cancel()\r\n }\r\n })\r\n }\r\n\r\n cancel() {\r\n this.hide()\r\n this.restoreFocus()\r\n }\r\n\r\n edit(value?: string) {\r\n this.editValue = value\r\n this.root.classList.remove('ql-hidden')\r\n this.root.classList.add('ql-editing')\r\n this.mathliveDom.setValue(value || '')\r\n const range = this.quill.getSelection()\r\n const bounds = range ? this.quill.getBounds(range) : null\r\n if (bounds != null) {\r\n this.position(bounds)\r\n }\r\n this.show()\r\n this.mathliveDom.focus()\r\n }\r\n\r\n restoreFocus() {\r\n this.mathliveDom.blur()\r\n this.quill.focus({ preventScroll: true })\r\n }\r\n\r\n save() {\r\n const range = this.quill.getSelection(true)\r\n const inputValue = this.mathliveDom.value\r\n if (!inputValue) return\r\n const index = range ? range.index : this.quill.getLength() - 1\r\n const delta = new Delta()\r\n .retain(index)\r\n .delete(this.editValue ? 1 : range?.length || 0)\r\n .insert({ mathlive: { value: inputValue, mode: 'dialog' } })\r\n this.quill.updateContents(delta, Quill.sources.USER)\r\n this.quill.setSelection(index + 1, Quill.sources.SILENT)\r\n this.hide()\r\n }\r\n\r\n position(reference: Bounds) {\r\n const adjustedReference = { ...reference }\r\n adjustedReference.left = reference.left + this.root.offsetWidth / 2 - reference.width / 2\r\n return super.position(adjustedReference)\r\n }\r\n}\r\n"],"names":[],"mappings":";;;AAKA,MAAM,QAAQ,MAAM,OAAO,OAAO;AAClC,MAAM,UAAU,MAAM,OAAO,YAAY;AACzC,MAAqB,mBAArB,MAAqB,yBAAwB,QAAQ;AAAA,EAMnD,YAAY,OAAc,iBAA+B;AACvD,UAAM,OAAO,eAAe;AACvB,SAAA,cAAc,SAAS,cAAc,YAAY;AACjD,SAAA,YAAY,UAAU,IAAI,eAAe;AACzC,SAAA,KAAK,YAAY,KAAK,WAAW;AACjC,SAAA,KAAK,UAAU,IAAI,oBAAoB;AAC5C,SAAK,OAAO;AAAA,EACd;AAAA,EAEA,SAAS;AACP,SAAK,YAAY,iBAAiB,QAAQ,CAAC,UAAU;AACnD,WAAK,KAAK;AAAA,IAAA,CACX;AACD,SAAK,KAAK,iBAAiB,WAAW,CAAC,UAAU;AAC3C,UAAA,MAAM,QAAQ,SAAS;AACzB,cAAM,eAAe;AACrB,aAAK,KAAK;AAAA,MAAA,WAEH,MAAM,QAAQ,UAAU;AAC/B,cAAM,eAAe;AACrB,aAAK,OAAO;AAAA,MACd;AAAA,IAAA,CACD;AAAA,EACH;AAAA,EAEA,SAAS;AACP,SAAK,KAAK;AACV,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,KAAK,OAAgB;AACnB,SAAK,YAAY;AACZ,SAAA,KAAK,UAAU,OAAO,WAAW;AACjC,SAAA,KAAK,UAAU,IAAI,YAAY;AAC/B,SAAA,YAAY,SAAS,SAAS,EAAE;AAC/B,UAAA,QAAQ,KAAK,MAAM,aAAa;AACtC,UAAM,SAAS,QAAQ,KAAK,MAAM,UAAU,KAAK,IAAI;AACrD,QAAI,UAAU,MAAM;AAClB,WAAK,SAAS,MAAM;AAAA,IACtB;AACA,SAAK,KAAK;AACV,SAAK,YAAY;EACnB;AAAA,EAEA,eAAe;AACb,SAAK,YAAY;AACjB,SAAK,MAAM,MAAM,EAAE,eAAe,KAAM,CAAA;AAAA,EAC1C;AAAA,EAEA,OAAO;AACL,UAAM,QAAQ,KAAK,MAAM,aAAa,IAAI;AACpC,UAAA,aAAa,KAAK,YAAY;AACpC,QAAI,CAAC,WAAY;AACjB,UAAM,QAAQ,QAAQ,MAAM,QAAQ,KAAK,MAAM,UAAc,IAAA;AACvD,UAAA,QAAQ,IAAI,MAAA,EACf,OAAO,KAAK,EACZ,OAAO,KAAK,YAAY,KAAI,+BAAO,WAAU,CAAC,EAC9C,OAAO,EAAE,UAAU,EAAE,OAAO,YAAY,MAAM,SAAS,EAAA,CAAG;AAC7D,SAAK,MAAM,eAAe,OAAO,MAAM,QAAQ,IAAI;AACnD,SAAK,MAAM,aAAa,QAAQ,GAAG,MAAM,QAAQ,MAAM;AACvD,SAAK,KAAK;AAAA,EACZ;AAAA,EAEA,SAAS,WAAmB;AACpB,UAAA,oBAAoB,EAAE,GAAG;AACb,sBAAA,OAAO,UAAU,OAAO,KAAK,KAAK,cAAc,IAAI,UAAU,QAAQ;AACjF,WAAA,MAAM,SAAS,iBAAiB;AAAA,EACzC;AACF;AAzEE,iBAAO,WAAW;AADpB,IAAqB,kBAArB;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Mention.cjs.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 Delta = Quill.import('delta')\nconst Parchment = Quill.import('parchment')\nconst { Scope } = Parchment\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: activeMentionItem.link || this.options.defaultLink,\n target: activeMentionItem.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":["DEFAULT_MENTION_CHAR","isNullOrUndefined","ON_MENTION_LINK_REMOVE","MentionLink"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Mention.cjs.js","sources":["../../../src/mention/Mention.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { isNullOrUndefined } from '../config/editor.utils'\r\nimport { DEFAULT_MENTION_CHAR, ON_MENTION_LINK_REMOVE } from './constants'\r\nimport MentionLink from './MentionLink'\r\n\r\nconst Delta = Quill.import('delta')\r\nconst Parchment = Quill.import('parchment')\r\nconst { Scope } = Parchment\r\n\r\ninterface MentionOption {\r\n containerClass?: string\r\n // dataAttributes?: string[]\r\n defaultLink?: string\r\n itemActiveClass?: string\r\n itemKey: string\r\n itemClass?: string\r\n listClass?: string\r\n listHideClass?: string\r\n maxHeight?: number\r\n mentionChar?: string\r\n remove?: (data: any) => void\r\n renderMentionItem?: (data: any) => string | HTMLElement\r\n renderMentionText?: (data: any) => string | HTMLElement\r\n search?: (term: string) => Promise<any[]>\r\n searchKey: string\r\n select?: (data: any) => void\r\n target?: string\r\n}\r\n\r\n// @dynamic\r\nclass Mention {\r\n private readonly options: MentionOption\r\n private readonly mentionListEL: HTMLUListElement\r\n private activeMentionIndex = 0\r\n private latestMentionList: any[]\r\n private latestMentionCharPos: number\r\n private latestCaretPos: number\r\n private searchTerm = ''\r\n private needInsertBr = true\r\n private readonly defaultOptions: MentionOption = {\r\n defaultLink: '#',\r\n target: '_blank',\r\n mentionChar: DEFAULT_MENTION_CHAR,\r\n maxHeight: 200,\r\n renderMentionItem(data: any) {\r\n let mentionItem = data.name || data.id\r\n if (this.itemKey) {\r\n mentionItem = data[this.itemKey]\r\n }\r\n const dom = document.createElement('SPAN')\r\n dom.textContent = mentionItem\r\n return dom\r\n },\r\n renderMentionText(data: any) {\r\n let mentionText = data.name || data.id\r\n if (this.itemKey) {\r\n mentionText = data[this.itemKey]\r\n }\r\n return `${mentionText}`\r\n },\r\n containerClass: 'ql-mention-list-container',\r\n listClass: 'ql-mention-list',\r\n listHideClass: 'ql-mention-list--hide',\r\n itemClass: 'ql-mention-item',\r\n itemActiveClass: 'ql-mention-item--active',\r\n itemKey: 'name',\r\n searchKey: 'name',\r\n // dataAttributes: ['id'],\r\n select(_data: any) {},\r\n remove(_data: any) {},\r\n }\r\n\r\n static register() {\r\n Quill.register(MentionLink)\r\n }\r\n\r\n // @ts-ignore\r\n constructor(private quill: Quill, options: MentionOption) {\r\n if (!options.search) {\r\n console.warn('please provide a search function!')\r\n return\r\n }\r\n\r\n this.options = Object.assign(this.defaultOptions, options)\r\n const container = document.createElement('div')\r\n container.classList.add('ql-mention-list-container')\r\n if (this.options.containerClass !== 'ql-mention-list-container') {\r\n container.classList.add(this.options.containerClass)\r\n }\r\n this.mentionListEL = document.createElement('ul')\r\n this.mentionListEL.classList.add(this.options.listClass, this.options.listHideClass)\r\n this.mentionListEL.style.cssText += `\r\n max-height: ${this.options.maxHeight}px;\r\n `\r\n\r\n quill.on(Quill.events.TEXT_CHANGE, this.handleTextChange)\r\n quill.keyboard.addBinding({ key: 'ArrowUp' }, this.handleArrowUpKey)\r\n quill.keyboard.addBinding({ key: 'ArrowDown' }, this.handleArrowDownKey)\r\n quill.keyboard.addBinding({ key: 'Enter' }, this.handleEnterKey)\r\n quill.keyboard.addBinding({ key: 'Tab' }, this.handleEnterKey)\r\n quill.keyboard.addBinding({ key: 'Escape' }, this.handleEscapeKey)\r\n quill.keyboard.bindings.Enter.unshift(quill.keyboard.bindings.Enter.pop())\r\n quill.keyboard.bindings.Tab.unshift(quill.keyboard.bindings.Tab.pop())\r\n quill.keyboard.bindings.Escape.unshift(quill.keyboard.bindings.Escape.pop())\r\n\r\n const customKeyboardEnter = {\r\n key: 'Enter',\r\n shiftKey: null,\r\n handler: (range, context) => {\r\n const lineFormats = Object.keys(context.format).reduce(\r\n (formats, format) => {\r\n if (\r\n this.quill.scroll.query(format, Scope.BLOCK)\r\n && !Array.isArray(context.format[format])\r\n ) {\r\n formats[format] = context.format[format]\r\n }\r\n return formats\r\n },\r\n {},\r\n )\r\n\r\n // fix: 解决@提醒之后插入多余空行和光标位置不对的问题\r\n let selectionIndex = range.index - this.searchTerm.length\r\n let delta = new Delta()\r\n .retain(range.index)\r\n .delete(range.length)\r\n if (this.needInsertBr) {\r\n delta = delta.insert('\\n', lineFormats)\r\n selectionIndex = range.index + 1\r\n }\r\n\r\n this.quill.updateContents(delta, Quill.sources.USER)\r\n this.quill.setSelection(selectionIndex, Quill.sources.SILENT)\r\n this.quill.focus()\r\n\r\n Object.keys(context.format).forEach((name) => {\r\n if (!isNullOrUndefined(lineFormats[name])) return\r\n if (Array.isArray(context.format[name])) return\r\n if (name === 'code' || name === 'link') return\r\n this.quill.format(name, context.format[name], Quill.sources.USER)\r\n })\r\n\r\n this.needInsertBr = true // 标记是否是输入@提醒的Enter\r\n },\r\n }\r\n\r\n // 用自定义的Enter替换内置的Enter\r\n quill.keyboard.bindings.Enter = quill.keyboard.bindings.Enter.map((item) => {\r\n const buildinKeyboardEnter = item.format === undefined && item.shiftKey === null\r\n if (buildinKeyboardEnter) {\r\n return customKeyboardEnter\r\n }\r\n else {\r\n return item\r\n }\r\n })\r\n\r\n this.on('click', this.handleMouseClick)\r\n this.on('mouseover', this.handleMouseEnter)\r\n quill.emitter.on(ON_MENTION_LINK_REMOVE, async ({ mention, name }) => {\r\n const [result] = (mention && [mention]) || (await this.options.search(name))\r\n this.options.remove(result)\r\n })\r\n container.appendChild(this.mentionListEL)\r\n quill.container.parentElement.insertBefore(container, quill.container)\r\n }\r\n\r\n on(eventName, callback) {\r\n this.mentionListEL.addEventListener(eventName, (evt) => {\r\n let\r\n target = evt.target\r\n let targetItemEL\r\n\r\n while (this.mentionListEL.contains(target) && target !== this.mentionListEL) {\r\n if (target.classList.contains(this.options.itemClass)) {\r\n targetItemEL = target\r\n }\r\n target = target.parentElement\r\n }\r\n\r\n if (targetItemEL) {\r\n callback.call(this, targetItemEL, this.getMentionItemIndex(targetItemEL))\r\n }\r\n })\r\n }\r\n\r\n getMentionItemIndex(itemEl: Element) {\r\n return [].reduce.call(this.mentionListEL.children, (index, item, idx) => item === itemEl ? idx : index, -1)\r\n }\r\n\r\n handleTextChange = (_delta, _oldDelta, source) => {\r\n // defer handler to make sure that we can get correct quill selection range.\r\n setTimeout(() => {\r\n if (Quill.sources.USER === source) {\r\n const range = this.quill.getSelection()\r\n if (!range) {\r\n return\r\n }\r\n\r\n const caretPos = this.latestCaretPos = range.index\r\n // beforeCaretText的计算有问题,没有把图片内容和@提醒内容的非字符内容算进去\r\n const content = this.quill.getContents()\r\n const beforeCaretText = content.reduce((newText, op) => {\r\n if (typeof op.insert === 'string') {\r\n return (newText += op.insert)\r\n }\r\n else {\r\n return (newText += ' ') // 将图片内容和@提醒内容的非字符内容置为' ',算一个位置\r\n }\r\n }, '')\r\n const mentionCharPos = beforeCaretText.lastIndexOf(this.options.mentionChar)\r\n\r\n if (mentionCharPos > -1) {\r\n const searchTerm = beforeCaretText.substring(mentionCharPos + this.options.mentionChar.length, caretPos)\r\n this.searchTerm = searchTerm\r\n if (!''.startsWith.call(searchTerm, ' ')) {\r\n this.latestMentionCharPos = mentionCharPos\r\n this.searchMentionListByTerm(searchTerm)\r\n }\r\n else {\r\n this.hideMentionList()\r\n }\r\n }\r\n else {\r\n this.hideMentionList()\r\n }\r\n }\r\n })\r\n }\r\n\r\n handleMouseClick(_itemEl: HTMLLIElement, index: number) {\r\n this.selectMentionItem(index, true)\r\n this.quill.focus()\r\n }\r\n\r\n handleMouseEnter(_itemEl: HTMLLIElement, index: number) {\r\n this.activeMentionIndex = index\r\n this.highlightMentionItem(index)\r\n }\r\n\r\n handleArrowUpKey = () => {\r\n if (this.isOpen()) {\r\n this.activeMentionIndex\r\n = (this.activeMentionIndex + this.latestMentionList.length - 1) % this.latestMentionList.length\r\n this.highlightMentionItem(this.activeMentionIndex)\r\n return false\r\n }\r\n return true\r\n }\r\n\r\n handleArrowDownKey = () => {\r\n if (this.isOpen()) {\r\n this.activeMentionIndex = (this.activeMentionIndex + 1) % this.latestMentionList.length\r\n this.highlightMentionItem(this.activeMentionIndex)\r\n return false\r\n }\r\n return true\r\n }\r\n\r\n handleEnterKey = () => {\r\n if (this.isOpen()) {\r\n this.selectMentionItem()\r\n this.needInsertBr = false\r\n }\r\n return true\r\n }\r\n\r\n handleEscapeKey = () => {\r\n if (this.isOpen()) {\r\n this.hideMentionList()\r\n return false\r\n }\r\n return true\r\n }\r\n\r\n getActiveMentionItem() {\r\n return this.mentionListEL.querySelector(`.${this.options.itemActiveClass}`)\r\n }\r\n\r\n isOpen() {\r\n return !this.mentionListEL.classList.contains(this.options.listHideClass)\r\n }\r\n\r\n async searchMentionListByTerm(term: string) {\r\n const mentionList = await this.options.search(term)\r\n this.latestMentionList = mentionList\r\n if (!mentionList || mentionList.length === 0) {\r\n return this.hideMentionList()\r\n }\r\n\r\n this.showMentionList(mentionList)\r\n }\r\n\r\n showMentionList(mentionList: any[]) {\r\n if (!this.isOpen()) {\r\n this.mentionListEL.classList.remove(this.options.listHideClass)\r\n }\r\n this.activeMentionIndex = 0\r\n this.setMentionListPos()\r\n this.render(mentionList)\r\n }\r\n\r\n hideMentionList() {\r\n if (this.isOpen()) {\r\n this.activeMentionIndex = 0\r\n this.mentionListEL.classList.add(this.options.listHideClass)\r\n }\r\n }\r\n\r\n setMentionListPos() {\r\n const cursorIndex = this.quill.selection.savedRange.index\r\n const cursorBounds = this.quill.getBounds(cursorIndex)\r\n const { left, top } = cursorBounds\r\n const container = this.quill.container\r\n const hostElement = container.parentNode as HTMLDivElement\r\n const { left: editorLeft, top: editorTop } = container.getBoundingClientRect()\r\n const { left: hostElementLeft, top: hostElementTop } = hostElement.getBoundingClientRect()\r\n const relativeLeft = editorLeft - hostElementLeft\r\n const relativeTop = editorTop - hostElementTop\r\n const menuLeft = left + relativeLeft - 5\r\n const menuTop = top + relativeTop + 20\r\n this.mentionListEL.style.cssText += `\r\n left: ${menuLeft}px;\r\n top: ${menuTop}px;\r\n `\r\n }\r\n\r\n render(mentionList: any[]) {\r\n const wrapEl = document.createElement('div');\r\n\r\n [].forEach.call(mentionList, (mentionItem, index) => {\r\n const mentionItemEl = document.createElement('li')\r\n mentionItemEl.classList.add(this.options.itemClass)\r\n if (index === this.activeMentionIndex) {\r\n mentionItemEl.classList.add(this.options.itemActiveClass)\r\n }\r\n const renderResult = this.options.renderMentionItem(mentionItem)\r\n if (typeof renderResult === 'string') {\r\n mentionItemEl.insertAdjacentHTML('afterbegin', renderResult)\r\n }\r\n else {\r\n mentionItemEl.insertAdjacentElement('afterbegin', renderResult)\r\n }\r\n wrapEl.appendChild(mentionItemEl)\r\n })\r\n\r\n this.mentionListEL.innerHTML = wrapEl.innerHTML\r\n }\r\n\r\n highlightMentionItem(index: number) {\r\n const oldActiveItem = this.getActiveMentionItem()\r\n if (oldActiveItem) {\r\n oldActiveItem.classList.remove(this.options.itemActiveClass)\r\n }\r\n\r\n const newActiveItem = this.mentionListEL.querySelector(`.${this.options.itemClass}:nth-of-type(${index + 1})`)\r\n if (newActiveItem) {\r\n newActiveItem.classList.add(this.options.itemActiveClass)\r\n this.scrollIntoView(newActiveItem)\r\n }\r\n }\r\n\r\n scrollIntoView(node: Element): void {\r\n const nodeAsAny: any = node\r\n if (nodeAsAny.scrollIntoViewIfNeeded) {\r\n nodeAsAny.scrollIntoViewIfNeeded(false)\r\n return\r\n }\r\n if (node.scrollIntoView) {\r\n node.scrollIntoView(false)\r\n }\r\n }\r\n\r\n selectMentionItem(index = this.activeMentionIndex, isClick?: boolean) {\r\n const activeMentionItem = this.latestMentionList[index]\r\n this.insertMentionBlot(activeMentionItem, isClick)\r\n this.options.select(activeMentionItem)\r\n this.hideMentionList()\r\n }\r\n\r\n insertMentionBlot(activeMentionItem: any, isClick?: boolean) {\r\n const mention = this.options.renderMentionText(activeMentionItem)\r\n const delta = new Delta()\r\n .retain(this.latestMentionCharPos)\r\n .delete(this.latestCaretPos - this.latestMentionCharPos)\r\n .insert({\r\n [MentionLink.blotName]: {\r\n char: this.options.mentionChar,\r\n text: mention,\r\n mention: activeMentionItem,\r\n link: activeMentionItem.link || this.options.defaultLink,\r\n target: activeMentionItem.target || this.options.target,\r\n searchKey: this.options.searchKey,\r\n },\r\n })\r\n if (isClick) {\r\n this.quill.updateContents(delta, Quill.sources.USER)\r\n }\r\n else {\r\n this.quill.updateContents(delta, Quill.sources.API)\r\n }\r\n this.quill.setSelection(this.latestMentionCharPos + 1, Quill.sources.API)\r\n }\r\n}\r\n\r\nexport { Mention as default }\r\n"],"names":["DEFAULT_MENTION_CHAR","isNullOrUndefined","ON_MENTION_LINK_REMOVE","MentionLink"],"mappings":";;;;;;AAKA,MAAM,QAAQ,MAAM,OAAO,OAAO;AAClC,MAAM,YAAY,MAAM,OAAO,WAAW;AAC1C,MAAM,EAAE,MAAU,IAAA;AAuBlB,MAAM,QAAQ;AAAA;AAAA,EA+CZ,YAAoB,OAAc,SAAwB;AAAtC,SAAA,QAAA;AA5CpB,SAAQ,qBAAqB;AAI7B,SAAQ,aAAa;AACrB,SAAQ,eAAe;AACvB,SAAiB,iBAAgC;AAAA,MAC/C,aAAa;AAAA,MACb,QAAQ;AAAA,MACR,aAAaA,UAAA;AAAA,MACb,WAAW;AAAA,MACX,kBAAkB,MAAW;AACvB,YAAA,cAAc,KAAK,QAAQ,KAAK;AACpC,YAAI,KAAK,SAAS;AACF,wBAAA,KAAK,KAAK,OAAO;AAAA,QACjC;AACM,cAAA,MAAM,SAAS,cAAc,MAAM;AACzC,YAAI,cAAc;AACX,eAAA;AAAA,MACT;AAAA,MACA,kBAAkB,MAAW;AACvB,YAAA,cAAc,KAAK,QAAQ,KAAK;AACpC,YAAI,KAAK,SAAS;AACF,wBAAA,KAAK,KAAK,OAAO;AAAA,QACjC;AACA,eAAO,GAAG,WAAW;AAAA,MACvB;AAAA,MACA,gBAAgB;AAAA,MAChB,WAAW;AAAA,MACX,eAAe;AAAA,MACf,WAAW;AAAA,MACX,iBAAiB;AAAA,MACjB,SAAS;AAAA,MACT,WAAW;AAAA;AAAA,MAEX,OAAO,OAAY;AAAA,MAAC;AAAA,MACpB,OAAO,OAAY;AAAA,MAAC;AAAA,IAAA;AA0HH,SAAA,mBAAA,CAAC,QAAQ,WAAW,WAAW;AAEhD,iBAAW,MAAM;AACX,YAAA,MAAM,QAAQ,SAAS,QAAQ;AAC3B,gBAAA,QAAQ,KAAK,MAAM,aAAa;AACtC,cAAI,CAAC,OAAO;AACV;AAAA,UACF;AAEM,gBAAA,WAAW,KAAK,iBAAiB,MAAM;AAEvC,gBAAA,UAAU,KAAK,MAAM,YAAY;AACvC,gBAAM,kBAAkB,QAAQ,OAAO,CAAC,SAAS,OAAO;AAClD,gBAAA,OAAO,GAAG,WAAW,UAAU;AACjC,qBAAQ,WAAW,GAAG;AAAA,YAAA,OAEnB;AACH,qBAAQ,WAAW;AAAA,YACrB;AAAA,aACC,EAAE;AACL,gBAAM,iBAAiB,gBAAgB,YAAY,KAAK,QAAQ,WAAW;AAE3E,cAAI,iBAAiB,IAAI;AACjB,kBAAA,aAAa,gBAAgB,UAAU,iBAAiB,KAAK,QAAQ,YAAY,QAAQ,QAAQ;AACvG,iBAAK,aAAa;AAClB,gBAAI,CAAC,GAAG,WAAW,KAAK,YAAY,GAAG,GAAG;AACxC,mBAAK,uBAAuB;AAC5B,mBAAK,wBAAwB,UAAU;AAAA,YAAA,OAEpC;AACH,mBAAK,gBAAgB;AAAA,YACvB;AAAA,UAAA,OAEG;AACH,iBAAK,gBAAgB;AAAA,UACvB;AAAA,QACF;AAAA,MAAA,CACD;AAAA,IAAA;AAaH,SAAA,mBAAmB,MAAM;AACnB,UAAA,KAAK,UAAU;AACZ,aAAA,sBACA,KAAK,qBAAqB,KAAK,kBAAkB,SAAS,KAAK,KAAK,kBAAkB;AACtF,aAAA,qBAAqB,KAAK,kBAAkB;AAC1C,eAAA;AAAA,MACT;AACO,aAAA;AAAA,IAAA;AAGT,SAAA,qBAAqB,MAAM;AACrB,UAAA,KAAK,UAAU;AACjB,aAAK,sBAAsB,KAAK,qBAAqB,KAAK,KAAK,kBAAkB;AAC5E,aAAA,qBAAqB,KAAK,kBAAkB;AAC1C,eAAA;AAAA,MACT;AACO,aAAA;AAAA,IAAA;AAGT,SAAA,iBAAiB,MAAM;AACjB,UAAA,KAAK,UAAU;AACjB,aAAK,kBAAkB;AACvB,aAAK,eAAe;AAAA,MACtB;AACO,aAAA;AAAA,IAAA;AAGT,SAAA,kBAAkB,MAAM;AAClB,UAAA,KAAK,UAAU;AACjB,aAAK,gBAAgB;AACd,eAAA;AAAA,MACT;AACO,aAAA;AAAA,IAAA;AAnMH,QAAA,CAAC,QAAQ,QAAQ;AACnB,cAAQ,KAAK,mCAAmC;AAChD;AAAA,IACF;AAEA,SAAK,UAAU,OAAO,OAAO,KAAK,gBAAgB,OAAO;AACnD,UAAA,YAAY,SAAS,cAAc,KAAK;AACpC,cAAA,UAAU,IAAI,2BAA2B;AAC/C,QAAA,KAAK,QAAQ,mBAAmB,6BAA6B;AAC/D,gBAAU,UAAU,IAAI,KAAK,QAAQ,cAAc;AAAA,IACrD;AACK,SAAA,gBAAgB,SAAS,cAAc,IAAI;AAC3C,SAAA,cAAc,UAAU,IAAI,KAAK,QAAQ,WAAW,KAAK,QAAQ,aAAa;AAC9E,SAAA,cAAc,MAAM,WAAW;AAAA,oBACpB,KAAK,QAAQ,SAAS;AAAA;AAGtC,UAAM,GAAG,MAAM,OAAO,aAAa,KAAK,gBAAgB;AACxD,UAAM,SAAS,WAAW,EAAE,KAAK,aAAa,KAAK,gBAAgB;AACnE,UAAM,SAAS,WAAW,EAAE,KAAK,eAAe,KAAK,kBAAkB;AACvE,UAAM,SAAS,WAAW,EAAE,KAAK,WAAW,KAAK,cAAc;AAC/D,UAAM,SAAS,WAAW,EAAE,KAAK,SAAS,KAAK,cAAc;AAC7D,UAAM,SAAS,WAAW,EAAE,KAAK,YAAY,KAAK,eAAe;AAC3D,UAAA,SAAS,SAAS,MAAM,QAAQ,MAAM,SAAS,SAAS,MAAM,IAAK,CAAA;AACnE,UAAA,SAAS,SAAS,IAAI,QAAQ,MAAM,SAAS,SAAS,IAAI,IAAK,CAAA;AAC/D,UAAA,SAAS,SAAS,OAAO,QAAQ,MAAM,SAAS,SAAS,OAAO,IAAK,CAAA;AAE3E,UAAM,sBAAsB;AAAA,MAC1B,KAAK;AAAA,MACL,UAAU;AAAA,MACV,SAAS,CAAC,OAAO,YAAY;AAC3B,cAAM,cAAc,OAAO,KAAK,QAAQ,MAAM,EAAE;AAAA,UAC9C,CAAC,SAAS,WAAW;AACnB,gBACE,KAAK,MAAM,OAAO,MAAM,QAAQ,MAAM,KAAK,KACxC,CAAC,MAAM,QAAQ,QAAQ,OAAO,MAAM,CAAC,GACxC;AACA,sBAAQ,MAAM,IAAI,QAAQ,OAAO,MAAM;AAAA,YACzC;AACO,mBAAA;AAAA,UACT;AAAA,UACA,CAAC;AAAA,QAAA;AAIH,YAAI,iBAAiB,MAAM,QAAQ,KAAK,WAAW;AAC/C,YAAA,QAAQ,IAAI,MACb,EAAA,OAAO,MAAM,KAAK,EAClB,OAAO,MAAM,MAAM;AACtB,YAAI,KAAK,cAAc;AACb,kBAAA,MAAM,OAAO,MAAM,WAAW;AACtC,2BAAiB,MAAM,QAAQ;AAAA,QACjC;AAEA,aAAK,MAAM,eAAe,OAAO,MAAM,QAAQ,IAAI;AACnD,aAAK,MAAM,aAAa,gBAAgB,MAAM,QAAQ,MAAM;AAC5D,aAAK,MAAM;AAEX,eAAO,KAAK,QAAQ,MAAM,EAAE,QAAQ,CAAC,SAAS;AAC5C,cAAI,CAACC,aAAAA,kBAAkB,YAAY,IAAI,CAAC,EAAG;AAC3C,cAAI,MAAM,QAAQ,QAAQ,OAAO,IAAI,CAAC,EAAG;AACrC,cAAA,SAAS,UAAU,SAAS,OAAQ;AACnC,eAAA,MAAM,OAAO,MAAM,QAAQ,OAAO,IAAI,GAAG,MAAM,QAAQ,IAAI;AAAA,QAAA,CACjE;AAED,aAAK,eAAe;AAAA,MACtB;AAAA,IAAA;AAII,UAAA,SAAS,SAAS,QAAQ,MAAM,SAAS,SAAS,MAAM,IAAI,CAAC,SAAS;AAC1E,YAAM,uBAAuB,KAAK,WAAW,UAAa,KAAK,aAAa;AAC5E,UAAI,sBAAsB;AACjB,eAAA;AAAA,MAAA,OAEJ;AACI,eAAA;AAAA,MACT;AAAA,IAAA,CACD;AAEI,SAAA,GAAG,SAAS,KAAK,gBAAgB;AACjC,SAAA,GAAG,aAAa,KAAK,gBAAgB;AAC1C,UAAM,QAAQ,GAAGC,UAAAA,wBAAwB,OAAO,EAAE,SAAS,WAAW;AAC9D,YAAA,CAAC,MAAM,IAAK,WAAW,CAAC,OAAO,KAAO,MAAM,KAAK,QAAQ,OAAO,IAAI;AACrE,WAAA,QAAQ,OAAO,MAAM;AAAA,IAAA,CAC3B;AACS,cAAA,YAAY,KAAK,aAAa;AACxC,UAAM,UAAU,cAAc,aAAa,WAAW,MAAM,SAAS;AAAA,EACvE;AAAA,EA9FA,OAAO,WAAW;AAChB,UAAM,SAASC,YAAAA,OAAW;AAAA,EAC5B;AAAA,EA8FA,GAAG,WAAW,UAAU;AACtB,SAAK,cAAc,iBAAiB,WAAW,CAAC,QAAQ;AACtD,UACE,SAAS,IAAI;AACX,UAAA;AAEJ,aAAO,KAAK,cAAc,SAAS,MAAM,KAAK,WAAW,KAAK,eAAe;AAC3E,YAAI,OAAO,UAAU,SAAS,KAAK,QAAQ,SAAS,GAAG;AACtC,yBAAA;AAAA,QACjB;AACA,iBAAS,OAAO;AAAA,MAClB;AAEA,UAAI,cAAc;AAChB,iBAAS,KAAK,MAAM,cAAc,KAAK,oBAAoB,YAAY,CAAC;AAAA,MAC1E;AAAA,IAAA,CACD;AAAA,EACH;AAAA,EAEA,oBAAoB,QAAiB;AACnC,WAAO,CAAA,EAAG,OAAO,KAAK,KAAK,cAAc,UAAU,CAAC,OAAO,MAAM,QAAQ,SAAS,SAAS,MAAM,OAAO,EAAE;AAAA,EAC5G;AAAA,EA0CA,iBAAiB,SAAwB,OAAe;AACjD,SAAA,kBAAkB,OAAO,IAAI;AAClC,SAAK,MAAM;EACb;AAAA,EAEA,iBAAiB,SAAwB,OAAe;AACtD,SAAK,qBAAqB;AAC1B,SAAK,qBAAqB,KAAK;AAAA,EACjC;AAAA,EAqCA,uBAAuB;AACrB,WAAO,KAAK,cAAc,cAAc,IAAI,KAAK,QAAQ,eAAe,EAAE;AAAA,EAC5E;AAAA,EAEA,SAAS;AACP,WAAO,CAAC,KAAK,cAAc,UAAU,SAAS,KAAK,QAAQ,aAAa;AAAA,EAC1E;AAAA,EAEA,MAAM,wBAAwB,MAAc;AAC1C,UAAM,cAAc,MAAM,KAAK,QAAQ,OAAO,IAAI;AAClD,SAAK,oBAAoB;AACzB,QAAI,CAAC,eAAe,YAAY,WAAW,GAAG;AAC5C,aAAO,KAAK;IACd;AAEA,SAAK,gBAAgB,WAAW;AAAA,EAClC;AAAA,EAEA,gBAAgB,aAAoB;AAC9B,QAAA,CAAC,KAAK,UAAU;AAClB,WAAK,cAAc,UAAU,OAAO,KAAK,QAAQ,aAAa;AAAA,IAChE;AACA,SAAK,qBAAqB;AAC1B,SAAK,kBAAkB;AACvB,SAAK,OAAO,WAAW;AAAA,EACzB;AAAA,EAEA,kBAAkB;AACZ,QAAA,KAAK,UAAU;AACjB,WAAK,qBAAqB;AAC1B,WAAK,cAAc,UAAU,IAAI,KAAK,QAAQ,aAAa;AAAA,IAC7D;AAAA,EACF;AAAA,EAEA,oBAAoB;AAClB,UAAM,cAAc,KAAK,MAAM,UAAU,WAAW;AACpD,UAAM,eAAe,KAAK,MAAM,UAAU,WAAW;AAC/C,UAAA,EAAE,MAAM,IAAQ,IAAA;AAChB,UAAA,YAAY,KAAK,MAAM;AAC7B,UAAM,cAAc,UAAU;AAC9B,UAAM,EAAE,MAAM,YAAY,KAAK,cAAc,UAAU;AACvD,UAAM,EAAE,MAAM,iBAAiB,KAAK,mBAAmB,YAAY;AACnE,UAAM,eAAe,aAAa;AAClC,UAAM,cAAc,YAAY;AAC1B,UAAA,WAAW,OAAO,eAAe;AACjC,UAAA,UAAU,MAAM,cAAc;AAC/B,SAAA,cAAc,MAAM,WAAW;AAAA,cAC1B,QAAQ;AAAA,aACT,OAAO;AAAA;AAAA,EAElB;AAAA,EAEA,OAAO,aAAoB;AACnB,UAAA,SAAS,SAAS,cAAc,KAAK;AAE3C,OAAG,QAAQ,KAAK,aAAa,CAAC,aAAa,UAAU;AAC7C,YAAA,gBAAgB,SAAS,cAAc,IAAI;AACjD,oBAAc,UAAU,IAAI,KAAK,QAAQ,SAAS;AAC9C,UAAA,UAAU,KAAK,oBAAoB;AACrC,sBAAc,UAAU,IAAI,KAAK,QAAQ,eAAe;AAAA,MAC1D;AACA,YAAM,eAAe,KAAK,QAAQ,kBAAkB,WAAW;AAC3D,UAAA,OAAO,iBAAiB,UAAU;AACtB,sBAAA,mBAAmB,cAAc,YAAY;AAAA,MAAA,OAExD;AACW,sBAAA,sBAAsB,cAAc,YAAY;AAAA,MAChE;AACA,aAAO,YAAY,aAAa;AAAA,IAAA,CACjC;AAEI,SAAA,cAAc,YAAY,OAAO;AAAA,EACxC;AAAA,EAEA,qBAAqB,OAAe;AAC5B,UAAA,gBAAgB,KAAK;AAC3B,QAAI,eAAe;AACjB,oBAAc,UAAU,OAAO,KAAK,QAAQ,eAAe;AAAA,IAC7D;AAEM,UAAA,gBAAgB,KAAK,cAAc,cAAc,IAAI,KAAK,QAAQ,SAAS,gBAAgB,QAAQ,CAAC,GAAG;AAC7G,QAAI,eAAe;AACjB,oBAAc,UAAU,IAAI,KAAK,QAAQ,eAAe;AACxD,WAAK,eAAe,aAAa;AAAA,IACnC;AAAA,EACF;AAAA,EAEA,eAAe,MAAqB;AAClC,UAAM,YAAiB;AACvB,QAAI,UAAU,wBAAwB;AACpC,gBAAU,uBAAuB,KAAK;AACtC;AAAA,IACF;AACA,QAAI,KAAK,gBAAgB;AACvB,WAAK,eAAe,KAAK;AAAA,IAC3B;AAAA,EACF;AAAA,EAEA,kBAAkB,QAAQ,KAAK,oBAAoB,SAAmB;AAC9D,UAAA,oBAAoB,KAAK,kBAAkB,KAAK;AACjD,SAAA,kBAAkB,mBAAmB,OAAO;AAC5C,SAAA,QAAQ,OAAO,iBAAiB;AACrC,SAAK,gBAAgB;AAAA,EACvB;AAAA,EAEA,kBAAkB,mBAAwB,SAAmB;AAC3D,UAAM,UAAU,KAAK,QAAQ,kBAAkB,iBAAiB;AAChE,UAAM,QAAQ,IAAI,MAAM,EACrB,OAAO,KAAK,oBAAoB,EAChC,OAAO,KAAK,iBAAiB,KAAK,oBAAoB,EACtD,OAAO;AAAA,MACN,CAACA,YAAAA,QAAY,QAAQ,GAAG;AAAA,QACtB,MAAM,KAAK,QAAQ;AAAA,QACnB,MAAM;AAAA,QACN,SAAS;AAAA,QACT,MAAM,kBAAkB,QAAQ,KAAK,QAAQ;AAAA,QAC7C,QAAQ,kBAAkB,UAAU,KAAK,QAAQ;AAAA,QACjD,WAAW,KAAK,QAAQ;AAAA,MAC1B;AAAA,IAAA,CACD;AACH,QAAI,SAAS;AACX,WAAK,MAAM,eAAe,OAAO,MAAM,QAAQ,IAAI;AAAA,IAAA,OAEhD;AACH,WAAK,MAAM,eAAe,OAAO,MAAM,QAAQ,GAAG;AAAA,IACpD;AACA,SAAK,MAAM,aAAa,KAAK,uBAAuB,GAAG,MAAM,QAAQ,GAAG;AAAA,EAC1E;AACF;;"}
|