@opentiny/fluent-editor 3.19.4 → 3.20.1
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 +99 -99
- package/es/attributors/index.es.js +1 -1
- 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 +12 -12
- 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 +4 -4
- package/es/config/icons.config.es.js.map +1 -1
- package/es/config/types/index.es.js +2 -2
- package/es/config.es.js +1 -1
- package/es/config.es.js.map +1 -1
- package/es/counter/index.es.js.map +1 -1
- package/es/custom-clipboard.es.js +14 -14
- package/es/custom-clipboard.es.js.map +1 -1
- package/es/custom-image/BlotFormatter.es.js +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 +6 -4
- 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 +3 -3
- 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 +4 -7
- 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 +2 -2
- 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 +7 -7
- package/es/emoji/modules/emoji.es.js.map +1 -1
- package/es/emoji/modules/toolbar-emoji.es.js +15 -15
- 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 +3 -3
- package/es/file/modules/file-bar.es.js.map +1 -1
- package/es/fluent-editor.es.js +6 -5
- package/es/fluent-editor.es.js.map +1 -1
- package/es/format-painter/index.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 +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/link/formats/link.es.js +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 +3 -3
- package/es/link/modules/tooltip.es.js.map +1 -1
- package/es/mention/Mention.es.js +7 -12
- 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 +1 -1
- package/es/quick-menu/index.es.js.map +1 -1
- package/es/screenshot/index.es.js +172 -135
- 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 +4 -5
- 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 +3 -3
- package/es/table/formats/list.es.js.map +1 -1
- package/es/table/formats/table.es.js +26 -27
- package/es/table/formats/table.es.js.map +1 -1
- package/es/table/modules/table-column-tool.es.js +8 -8
- package/es/table/modules/table-column-tool.es.js.map +1 -1
- package/es/table/modules/table-operation-menu.es.js +7 -8
- package/es/table/modules/table-operation-menu.es.js.map +1 -1
- package/es/table/modules/table-scroll-bar.es.js +1 -1
- package/es/table/modules/table-scroll-bar.es.js.map +1 -1
- package/es/table/modules/table-selection.es.js +0 -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 +14 -14
- 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 +1 -1
- package/es/toolbar/index.es.js.map +1 -1
- package/es/utils/debounce.es.js.map +1 -1
- package/es/utils/image.es.js +26 -0
- package/es/utils/image.es.js.map +1 -0
- package/es/utils/method.es.js +2 -2
- package/es/utils/method.es.js.map +1 -1
- package/es/utils/scroll-lock.es.js +47 -0
- package/es/utils/scroll-lock.es.js.map +1 -0
- package/es/video/index.es.js +6 -3
- package/es/video/index.es.js.map +1 -1
- package/lib/attributors/index.cjs.js +2 -2
- 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 +12 -12
- 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 +4 -4
- package/lib/config/icons.config.cjs.js.map +1 -1
- package/lib/config/types/index.cjs.js +2 -2
- package/lib/config.cjs.js +1 -1
- package/lib/config.cjs.js.map +1 -1
- package/lib/counter/index.cjs.js.map +1 -1
- package/lib/custom-clipboard.cjs.js +14 -14
- package/lib/custom-clipboard.cjs.js.map +1 -1
- package/lib/custom-image/BlotFormatter.cjs.js +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 +6 -4
- 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 +3 -3
- 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 +4 -7
- 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 +2 -2
- 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 +7 -7
- package/lib/emoji/modules/emoji.cjs.js.map +1 -1
- package/lib/emoji/modules/toolbar-emoji.cjs.js +15 -15
- 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 +3 -3
- package/lib/file/modules/file-bar.cjs.js.map +1 -1
- package/lib/fluent-editor.cjs.js +25 -24
- package/lib/fluent-editor.cjs.js.map +1 -1
- package/lib/format-painter/index.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 +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/link/formats/link.cjs.js +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 +3 -3
- package/lib/link/modules/tooltip.cjs.js.map +1 -1
- package/lib/mention/Mention.cjs.js +7 -12
- 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 +1 -1
- package/lib/quick-menu/index.cjs.js.map +1 -1
- package/lib/screenshot/index.cjs.js +173 -136
- 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 +4 -5
- 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 +3 -3
- package/lib/table/formats/list.cjs.js.map +1 -1
- package/lib/table/formats/table.cjs.js +26 -27
- package/lib/table/formats/table.cjs.js.map +1 -1
- package/lib/table/modules/table-column-tool.cjs.js +8 -8
- package/lib/table/modules/table-column-tool.cjs.js.map +1 -1
- package/lib/table/modules/table-operation-menu.cjs.js +7 -8
- package/lib/table/modules/table-operation-menu.cjs.js.map +1 -1
- package/lib/table/modules/table-scroll-bar.cjs.js +1 -1
- package/lib/table/modules/table-scroll-bar.cjs.js.map +1 -1
- package/lib/table/modules/table-selection.cjs.js +0 -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 +14 -14
- 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 +1 -1
- package/lib/toolbar/index.cjs.js.map +1 -1
- package/lib/utils/debounce.cjs.js.map +1 -1
- package/lib/utils/image.cjs.js +26 -0
- package/lib/utils/image.cjs.js.map +1 -0
- package/lib/utils/method.cjs.js +2 -2
- package/lib/utils/method.cjs.js.map +1 -1
- package/lib/utils/scroll-lock.cjs.js +47 -0
- package/lib/utils/scroll-lock.cjs.js.map +1 -0
- package/lib/video/index.cjs.js +6 -3
- package/lib/video/index.cjs.js.map +1 -1
- package/package.json +61 -55
- package/{style.css → theme/style.css} +100 -14
- package/es/types/vue.d.es.js +0 -2
- package/es/types/vue.d.es.js.map +0 -1
- package/lib/types/vue.d.cjs.js +0 -2
- package/lib/types/vue.d.cjs.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emoji.cjs.js","sources":["../../../../src/emoji/modules/emoji.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport emojiList from '../emoji-list'\r\n\r\nconst Module = Quill.imports['core/module']\r\n\r\n// @dynamic\r\nclass ShortNameEmoji extends Module {\r\n static DEFAULTS: {\r\n emojiList: any[]\r\n fuse: {\r\n shouldSort: boolean\r\n threshold: number\r\n location: number\r\n distance: number\r\n maxPatternLength: number\r\n minMatchCharLength: number\r\n keys: string[]\r\n }\r\n }\r\n\r\n emojiList: any\r\n quill: any\r\n fuse: any\r\n onOpen: any\r\n onClose: any\r\n container: HTMLUListElement\r\n onSelectionChange: any\r\n onTextChange: any\r\n open: boolean\r\n atIndex: any\r\n focusedButton: any\r\n isWhiteSpace: (ch: any) => boolean\r\n query: any\r\n buttons: any\r\n options: any\r\n constructor(quill, options) {\r\n super(quill, options)\r\n\r\n this.emojiList = options.emojiList\r\n\r\n this.quill = quill\r\n this.onClose = options.onClose\r\n this.onOpen = options.onOpen\r\n this.container = document.createElement('ul')\r\n this.container.classList.add('emoji_completions')\r\n this.quill.container.appendChild(this.container)\r\n this.container.style.position = 'absolute'\r\n this.container.style.display = 'none'\r\n\r\n this.onSelectionChange = this.maybeUnfocus.bind(this)\r\n this.onTextChange = this.update.bind(this)\r\n\r\n this.open = false\r\n this.atIndex = null\r\n this.focusedButton = null\r\n\r\n this.isWhiteSpace = function (ch) {\r\n let whiteSpace = false\r\n if (/\\s/.test(ch)) {\r\n whiteSpace = true\r\n }\r\n return whiteSpace\r\n }\r\n\r\n quill.keyboard.addBinding({\r\n // TODO: Once Quill supports using event.key change this to \":\"\r\n key: 186, // \":\" instead of 190 in Safari. Since it's the same key it doesn't matter if we register both.\r\n shiftKey: true,\r\n }, this.triggerPicker.bind(this))\r\n\r\n quill.keyboard.addBinding({\r\n // gecko based browsers (firefox) use 59 as the keycode for semicolon,\r\n // which makes a colon character when combined with shift\r\n key: 59,\r\n shiftKey: true,\r\n }, this.triggerPicker.bind(this))\r\n\r\n quill.keyboard.addBinding({\r\n key: 39, // ArrowRight\r\n collapsed: true,\r\n }, this.handleArrow.bind(this))\r\n\r\n quill.keyboard.addBinding({\r\n key: 40, // ArrowRight\r\n collapsed: true,\r\n }, this.handleArrow.bind(this))\r\n // TODO: Add keybindings for Enter (13) and Tab (9) directly on the quill editor\r\n }\r\n\r\n triggerPicker(range, _context) {\r\n if (this.open) return true\r\n if (range.length > 0) {\r\n this.quill.deleteText(range.index, range.length, Quill.sources.USER)\r\n }\r\n\r\n this.quill.insertText(range.index, ':', 'emoji-shortname', Quill.sources.USER)\r\n const atSignBounds = this.quill.getBounds(range.index)\r\n this.quill.setSelection(range.index + 1, Quill.sources.SILENT)\r\n\r\n this.atIndex = range.index\r\n\r\n const paletteMaxPos = atSignBounds.left + 250\r\n if (paletteMaxPos > this.quill.container.offsetWidth) {\r\n this.container.style.left = (atSignBounds.left - 250) + 'px'\r\n }\r\n else {\r\n this.container.style.left = atSignBounds.left + 'px'\r\n }\r\n\r\n this.container.style.top = atSignBounds.top + atSignBounds.height + 'px'\r\n this.open = true\r\n\r\n this.quill.on('text-change', this.onTextChange)\r\n this.quill.once('selection-change', this.onSelectionChange)\r\n if (this.onOpen) {\r\n this.onOpen()\r\n }\r\n }\r\n\r\n handleArrow() {\r\n if (!this.open) return true\r\n this.buttons[0].classList.remove('emoji-active')\r\n this.buttons[0].focus()\r\n if (this.buttons.length > 1) {\r\n this.buttons[1].focus()\r\n }\r\n }\r\n\r\n update(event) {\r\n const sel = this.quill.getSelection().index\r\n if (this.atIndex >= sel) { // Deleted the at character\r\n return this.close(null)\r\n }\r\n this.query = this.quill.getText(this.atIndex + 1, sel - this.atIndex - 1)\r\n\r\n try {\r\n if (this.isWhiteSpace(this.query)) {\r\n this.close(null)\r\n return\r\n }\r\n }\r\n catch (_e) {\r\n throw new Error('Close failed')\r\n }\r\n\r\n this.query = this.query.trim()\r\n\r\n let emojis: any = this.emojiList\r\n emojis.sort(function (a: any, b: any) {\r\n return a.emoji_order - b.emoji_order\r\n })\r\n\r\n if (this.query.length < this.options.fuse.minMatchCharLength || emojis.length === 0) {\r\n this.container.style.display = 'none'\r\n return\r\n }\r\n if (emojis.length > 15) { // return only 15\r\n emojis = emojis.slice(0, 15)\r\n }\r\n this.renderCompletions(emojis, event)\r\n }\r\n\r\n maybeUnfocus() {\r\n if (this.container.querySelector('*:focus')) return\r\n this.close(null)\r\n }\r\n\r\n renderCompletions(emojis, evt) {\r\n try {\r\n if (evt) {\r\n if (evt.key === 'Enter' || evt.keyCode === 13) {\r\n this.close(emojis[0], 1)\r\n this.container.style.display = 'none'\r\n return\r\n }\r\n else if (evt.key === 'Tab' || evt.keyCode === 9) {\r\n this.quill.disable()\r\n this.buttons[0].classList.remove('emoji-active')\r\n this.buttons[1].focus()\r\n return\r\n }\r\n }\r\n if (evt) return\r\n }\r\n catch (_e) {\r\n throw new Error('Render failed')\r\n }\r\n\r\n while (this.container.firstChild) {\r\n this.container.removeChild(this.container.firstChild)\r\n }\r\n const buttons = Array(emojis.length)\r\n this.buttons = buttons\r\n\r\n const handler = (i, emoji) => (event) => {\r\n const arrowLeftKey = event.key === 'ArrowLeft' || event.keyCode === 37\r\n const arrowUpKey = event.key === 'ArrowUp' || event.keyCode === 38\r\n const arrowRightKey = event.key === 'ArrowRight' || event.keyCode === 39\r\n const arrowDownKey = event.key === 'ArrowDown' || event.keyCode === 40\r\n if (arrowRightKey || arrowDownKey) {\r\n event.preventDefault()\r\n buttons[Math.min(buttons.length - 1, i + 1)].focus()\r\n }\r\n else if (event.key === 'Tab' || event.keyCode === 9) {\r\n event.preventDefault()\r\n if ((i + 1) === buttons.length) {\r\n buttons[0].focus()\r\n return\r\n }\r\n buttons[Math.min(buttons.length - 1, i + 1)].focus()\r\n }\r\n else if (arrowLeftKey || arrowUpKey) {\r\n event.preventDefault()\r\n buttons[Math.max(0, i - 1)].focus()\r\n }\r\n else if (event.key === 'Enter' || event.keyCode === 13\r\n || event.key === ' ' || event.keyCode === 32\r\n || event.key === 'Tab' || event.keyCode === 9) {\r\n event.preventDefault()\r\n this.quill.enable()\r\n this.close(emoji)\r\n }\r\n }\r\n\r\n emojis.forEach((emoji, i) => {\r\n const li = makeElement(\r\n 'li', {},\r\n makeElement(\r\n 'button', { type: 'button' },\r\n makeElement('span', { className: 'button-emoji ap ap-' + emoji.name, innerHTML: emoji.code_decimal }),\r\n makeElement('span', { className: 'unmatched' }, emoji.shortname),\r\n ),\r\n )\r\n this.container.appendChild(li)\r\n buttons[i] = li.firstChild\r\n // Events will be GC-ed with button on each re-render:\r\n buttons[i].addEventListener('keydown', handler(i, emoji))\r\n buttons[i].addEventListener('mousedown', () => this.close(emoji))\r\n buttons[i].addEventListener('focus', () => {\r\n this.focusedButton = i\r\n })\r\n buttons[i].addEventListener('unfocus', () => {\r\n this.focusedButton = null\r\n })\r\n })\r\n\r\n this.container.style.display = 'block'\r\n // emoji palette on top\r\n if (this.quill.container.classList.contains('top-emoji')) {\r\n const x = this.container.querySelectorAll('li')\r\n let i\r\n for (i = 0; i < x.length; i++) {\r\n x[i].style.display = 'block'\r\n }\r\n\r\n const windowHeight = window.innerHeight\r\n const editorPos = this.quill.container.getBoundingClientRect().top\r\n if (editorPos > windowHeight / 2 && this.container.offsetHeight > 0) {\r\n this.container.style.top = '-' + this.container.offsetHeight + 'px'\r\n }\r\n }\r\n\r\n buttons[0].classList.add('emoji-active')\r\n }\r\n\r\n close(value, trailingDelete = 0) {\r\n this.quill.enable()\r\n this.container.style.display = 'none'\r\n while (this.container.firstChild) {\r\n this.container.removeChild(this.container.firstChild)\r\n }\r\n this.quill.off('selection-change', this.onSelectionChange)\r\n this.quill.off('text-change', this.onTextChange)\r\n if (value) {\r\n this.quill.deleteText(this.atIndex, this.query.length + 1 + trailingDelete, Quill.sources.USER)\r\n this.quill.insertEmbed(this.atIndex, 'emoji', value, Quill.sources.USER)\r\n setTimeout(() => this.quill.setSelection(this.atIndex + 1), 0)\r\n }\r\n this.quill.focus()\r\n this.open = false\r\n if (this.onClose) {\r\n this.onClose(value)\r\n }\r\n }\r\n}\r\n\r\nShortNameEmoji.DEFAULTS = {\r\n emojiList: emojiList,\r\n fuse: {\r\n shouldSort: true,\r\n threshold: 0.1,\r\n location: 0,\r\n distance: 100,\r\n maxPatternLength: 32,\r\n minMatchCharLength: 1,\r\n keys: [\r\n 'shortname',\r\n ],\r\n },\r\n}\r\n\r\nfunction makeElement(tag, attrs, ...children) {\r\n const elem = document.createElement(tag)\r\n Object.keys(attrs).forEach((key) => {\r\n elem[key] = attrs[key]\r\n })\r\n children.forEach((child) => {\r\n if (typeof child === 'string') {\r\n child = document.createTextNode(child)\r\n }\r\n elem.appendChild(child)\r\n })\r\n return elem\r\n}\r\n\r\nexport default ShortNameEmoji\r\n"],"names":["emojiList"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"emoji.cjs.js","sources":["../../../../src/emoji/modules/emoji.ts"],"sourcesContent":["import Quill from 'quill'\nimport emojiList from '../emoji-list'\n\nconst Module = Quill.imports['core/module']\n\n// @dynamic\nclass ShortNameEmoji extends Module {\n static DEFAULTS: {\n emojiList: any[]\n fuse: {\n shouldSort: boolean\n threshold: number\n location: number\n distance: number\n maxPatternLength: number\n minMatchCharLength: number\n keys: string[]\n }\n }\n\n emojiList: any\n quill: any\n fuse: any\n onOpen: any\n onClose: any\n container: HTMLUListElement\n onSelectionChange: any\n onTextChange: any\n open: boolean\n atIndex: any\n focusedButton: any\n isWhiteSpace: (ch: any) => boolean\n query: any\n buttons: any\n options: any\n constructor(quill, options) {\n super(quill, options)\n\n this.emojiList = options.emojiList\n\n this.quill = quill\n this.onClose = options.onClose\n this.onOpen = options.onOpen\n this.container = document.createElement('ul')\n this.container.classList.add('emoji_completions')\n this.quill.container.appendChild(this.container)\n this.container.style.position = 'absolute'\n this.container.style.display = 'none'\n\n this.onSelectionChange = this.maybeUnfocus.bind(this)\n this.onTextChange = this.update.bind(this)\n\n this.open = false\n this.atIndex = null\n this.focusedButton = null\n\n this.isWhiteSpace = function (ch) {\n let whiteSpace = false\n if (/\\s/.test(ch)) {\n whiteSpace = true\n }\n return whiteSpace\n }\n\n quill.keyboard.addBinding({\n // TODO: Once Quill supports using event.key change this to \":\"\n key: 186, // \":\" instead of 190 in Safari. Since it's the same key it doesn't matter if we register both.\n shiftKey: true,\n }, this.triggerPicker.bind(this))\n\n quill.keyboard.addBinding({\n // gecko based browsers (firefox) use 59 as the keycode for semicolon,\n // which makes a colon character when combined with shift\n key: 59,\n shiftKey: true,\n }, this.triggerPicker.bind(this))\n\n quill.keyboard.addBinding({\n key: 39, // ArrowRight\n collapsed: true,\n }, this.handleArrow.bind(this))\n\n quill.keyboard.addBinding({\n key: 40, // ArrowRight\n collapsed: true,\n }, this.handleArrow.bind(this))\n // TODO: Add keybindings for Enter (13) and Tab (9) directly on the quill editor\n }\n\n triggerPicker(range, _context) {\n if (this.open) return true\n if (range.length > 0) {\n this.quill.deleteText(range.index, range.length, Quill.sources.USER)\n }\n\n this.quill.insertText(range.index, ':', 'emoji-shortname', Quill.sources.USER)\n const atSignBounds = this.quill.getBounds(range.index)\n this.quill.setSelection(range.index + 1, Quill.sources.SILENT)\n\n this.atIndex = range.index\n\n const paletteMaxPos = atSignBounds.left + 250\n if (paletteMaxPos > this.quill.container.offsetWidth) {\n this.container.style.left = `${atSignBounds.left - 250}px`\n }\n else {\n this.container.style.left = `${atSignBounds.left}px`\n }\n\n this.container.style.top = `${atSignBounds.top + atSignBounds.height}px`\n this.open = true\n\n this.quill.on('text-change', this.onTextChange)\n this.quill.once('selection-change', this.onSelectionChange)\n if (this.onOpen) {\n this.onOpen()\n }\n }\n\n handleArrow() {\n if (!this.open) return true\n this.buttons[0].classList.remove('emoji-active')\n this.buttons[0].focus()\n if (this.buttons.length > 1) {\n this.buttons[1].focus()\n }\n }\n\n update(event) {\n const sel = this.quill.getSelection().index\n if (this.atIndex >= sel) { // Deleted the at character\n return this.close(null)\n }\n this.query = this.quill.getText(this.atIndex + 1, sel - this.atIndex - 1)\n\n try {\n if (this.isWhiteSpace(this.query)) {\n this.close(null)\n return\n }\n }\n catch (_e) {\n throw new Error('Close failed')\n }\n\n this.query = this.query.trim()\n\n let emojis: any = this.emojiList\n emojis.sort((a: any, b: any) => {\n return a.emoji_order - b.emoji_order\n })\n\n if (this.query.length < this.options.fuse.minMatchCharLength || emojis.length === 0) {\n this.container.style.display = 'none'\n return\n }\n if (emojis.length > 15) { // return only 15\n emojis = emojis.slice(0, 15)\n }\n this.renderCompletions(emojis, event)\n }\n\n maybeUnfocus() {\n if (this.container.querySelector('*:focus')) return\n this.close(null)\n }\n\n renderCompletions(emojis, evt) {\n try {\n if (evt) {\n if (evt.key === 'Enter' || evt.keyCode === 13) {\n this.close(emojis[0], 1)\n this.container.style.display = 'none'\n return\n }\n else if (evt.key === 'Tab' || evt.keyCode === 9) {\n this.quill.disable()\n this.buttons[0].classList.remove('emoji-active')\n this.buttons[1].focus()\n return\n }\n }\n if (evt) return\n }\n catch (_e) {\n throw new Error('Render failed')\n }\n\n while (this.container.firstChild) {\n this.container.removeChild(this.container.firstChild)\n }\n const buttons = Array.from({ length: emojis.length })\n this.buttons = buttons\n\n const handler = (i, emoji) => (event) => {\n const arrowLeftKey = event.key === 'ArrowLeft' || event.keyCode === 37\n const arrowUpKey = event.key === 'ArrowUp' || event.keyCode === 38\n const arrowRightKey = event.key === 'ArrowRight' || event.keyCode === 39\n const arrowDownKey = event.key === 'ArrowDown' || event.keyCode === 40\n if (arrowRightKey || arrowDownKey) {\n event.preventDefault()\n buttons[Math.min(buttons.length - 1, i + 1)].focus()\n }\n else if (event.key === 'Tab' || event.keyCode === 9) {\n event.preventDefault()\n if ((i + 1) === buttons.length) {\n buttons[0].focus()\n return\n }\n buttons[Math.min(buttons.length - 1, i + 1)].focus()\n }\n else if (arrowLeftKey || arrowUpKey) {\n event.preventDefault()\n buttons[Math.max(0, i - 1)].focus()\n }\n else if (event.key === 'Enter' || event.keyCode === 13\n || event.key === ' ' || event.keyCode === 32\n || event.key === 'Tab' || event.keyCode === 9) {\n event.preventDefault()\n this.quill.enable()\n this.close(emoji)\n }\n }\n\n emojis.forEach((emoji, i) => {\n const li = makeElement(\n 'li',\n {},\n makeElement(\n 'button',\n { type: 'button' },\n makeElement('span', { className: `button-emoji ap ap-${emoji.name}`, innerHTML: emoji.code_decimal }),\n makeElement('span', { className: 'unmatched' }, emoji.shortname),\n ),\n )\n this.container.appendChild(li)\n buttons[i] = li.firstChild\n // Events will be GC-ed with button on each re-render:\n buttons[i].addEventListener('keydown', handler(i, emoji))\n buttons[i].addEventListener('mousedown', () => this.close(emoji))\n buttons[i].addEventListener('focus', () => {\n this.focusedButton = i\n })\n buttons[i].addEventListener('unfocus', () => {\n this.focusedButton = null\n })\n })\n\n this.container.style.display = 'block'\n // emoji palette on top\n if (this.quill.container.classList.contains('top-emoji')) {\n const x = this.container.querySelectorAll('li')\n let i\n for (i = 0; i < x.length; i++) {\n x[i].style.display = 'block'\n }\n\n const windowHeight = window.innerHeight\n const editorPos = this.quill.container.getBoundingClientRect().top\n if (editorPos > windowHeight / 2 && this.container.offsetHeight > 0) {\n this.container.style.top = `-${this.container.offsetHeight}px`\n }\n }\n\n buttons[0].classList.add('emoji-active')\n }\n\n close(value, trailingDelete = 0) {\n this.quill.enable()\n this.container.style.display = 'none'\n while (this.container.firstChild) {\n this.container.removeChild(this.container.firstChild)\n }\n this.quill.off('selection-change', this.onSelectionChange)\n this.quill.off('text-change', this.onTextChange)\n if (value) {\n this.quill.deleteText(this.atIndex, this.query.length + 1 + trailingDelete, Quill.sources.USER)\n this.quill.insertEmbed(this.atIndex, 'emoji', value, Quill.sources.USER)\n setTimeout(() => this.quill.setSelection(this.atIndex + 1), 0)\n }\n this.quill.focus()\n this.open = false\n if (this.onClose) {\n this.onClose(value)\n }\n }\n}\n\nShortNameEmoji.DEFAULTS = {\n emojiList,\n fuse: {\n shouldSort: true,\n threshold: 0.1,\n location: 0,\n distance: 100,\n maxPatternLength: 32,\n minMatchCharLength: 1,\n keys: [\n 'shortname',\n ],\n },\n}\n\nfunction makeElement(tag, attrs, ...children) {\n const elem = document.createElement(tag)\n Object.keys(attrs).forEach((key) => {\n elem[key] = attrs[key]\n })\n children.forEach((child) => {\n if (typeof child === 'string') {\n child = document.createTextNode(child)\n }\n elem.appendChild(child)\n })\n return elem\n}\n\nexport default ShortNameEmoji\n"],"names":["emojiList"],"mappings":"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"}
|
|
@@ -23,7 +23,7 @@ class ToolbarEmoji extends Module {
|
|
|
23
23
|
checkPalatteExist() {
|
|
24
24
|
const quill = this.quill;
|
|
25
25
|
fnCheckDialogOpen(quill);
|
|
26
|
-
this.quill.on("text-change",
|
|
26
|
+
this.quill.on("text-change", (_delta, _oldDelta, source) => {
|
|
27
27
|
if (source === "user") {
|
|
28
28
|
fnClose();
|
|
29
29
|
fnUpdateRange(quill);
|
|
@@ -58,11 +58,11 @@ function fnShowEmojiPalatte(quill) {
|
|
|
58
58
|
const containerRect = quill.container.getBoundingClientRect();
|
|
59
59
|
const paletteMaxPos = atSignBounds.left + 250;
|
|
60
60
|
eleEmojiArea.id = "emoji-palette";
|
|
61
|
-
eleEmojiArea.style.top = 10 + atSignBounds.top + atSignBounds.height + containerRect.top
|
|
61
|
+
eleEmojiArea.style.top = `${10 + atSignBounds.top + atSignBounds.height + containerRect.top}px`;
|
|
62
62
|
if (paletteMaxPos > quill.container.offsetWidth) {
|
|
63
|
-
eleEmojiArea.style.left = atSignBounds.left + containerRect.left - 250
|
|
63
|
+
eleEmojiArea.style.left = `${atSignBounds.left + containerRect.left - 250}px`;
|
|
64
64
|
} else {
|
|
65
|
-
eleEmojiArea.style.left = atSignBounds.left + containerRect.left
|
|
65
|
+
eleEmojiArea.style.left = `${atSignBounds.left + containerRect.left}px`;
|
|
66
66
|
}
|
|
67
67
|
const tabToolbar = document.createElement("div");
|
|
68
68
|
tabToolbar.id = "tab-toolbar";
|
|
@@ -90,16 +90,16 @@ function fnShowEmojiPalatte(quill) {
|
|
|
90
90
|
} else {
|
|
91
91
|
document.getElementById("emoji-close-div").style.display = "block";
|
|
92
92
|
}
|
|
93
|
-
emojiType.forEach(
|
|
93
|
+
emojiType.forEach((emojiTypeItem) => {
|
|
94
94
|
const tabElement = document.createElement("li");
|
|
95
95
|
tabElement.classList.add("emoji-tab");
|
|
96
|
-
tabElement.classList.add(
|
|
96
|
+
tabElement.classList.add(`filter-${emojiTypeItem.name}`);
|
|
97
97
|
const tabValue = emojiTypeItem.content;
|
|
98
98
|
tabElement.innerHTML = tabValue;
|
|
99
99
|
tabElement.dataset.filter = emojiTypeItem.type;
|
|
100
100
|
tabElementHolder.appendChild(tabElement);
|
|
101
|
-
const emojiFilter = document.querySelector(
|
|
102
|
-
emojiFilter.addEventListener("click",
|
|
101
|
+
const emojiFilter = document.querySelector(`.filter-${emojiTypeItem.name}`);
|
|
102
|
+
emojiFilter.addEventListener("click", () => {
|
|
103
103
|
const tab = document.querySelector(".emoji-tab.active");
|
|
104
104
|
if (tab) {
|
|
105
105
|
tab.classList.remove("active");
|
|
@@ -116,25 +116,25 @@ function fnEmojiPanelInit(panel, quill) {
|
|
|
116
116
|
}
|
|
117
117
|
function fnEmojiElementsToPanel(_type, panel, quill) {
|
|
118
118
|
const result = emojiList.default;
|
|
119
|
-
result.sort(
|
|
119
|
+
result.sort((a, b) => {
|
|
120
120
|
return a.emoji_order - b.emoji_order;
|
|
121
121
|
});
|
|
122
122
|
quill.focus();
|
|
123
123
|
const range = fnUpdateRange(quill);
|
|
124
|
-
result.forEach(
|
|
124
|
+
result.forEach((emoji) => {
|
|
125
125
|
const span = document.createElement("span");
|
|
126
126
|
const t = document.createTextNode(emoji.shortname);
|
|
127
127
|
span.appendChild(t);
|
|
128
128
|
span.classList.add("bem");
|
|
129
|
-
span.classList.add(
|
|
129
|
+
span.classList.add(`bem-${emoji.name}`);
|
|
130
130
|
span.classList.add("ap");
|
|
131
|
-
span.classList.add(
|
|
131
|
+
span.classList.add(`ap-${emoji.name}`);
|
|
132
132
|
const output = String(String(emoji.code_decimal));
|
|
133
|
-
span.innerHTML = output
|
|
133
|
+
span.innerHTML = `${output} `;
|
|
134
134
|
panel.appendChild(span);
|
|
135
|
-
const customButton = document.querySelector(
|
|
135
|
+
const customButton = document.querySelector(`.bem-${emoji.name}`);
|
|
136
136
|
if (customButton) {
|
|
137
|
-
customButton.addEventListener("click",
|
|
137
|
+
customButton.addEventListener("click", () => {
|
|
138
138
|
quill.insertEmbed(range.index, "emoji", emoji, Quill.sources.USER);
|
|
139
139
|
setTimeout(() => quill.setSelection(range.index + 1), 0);
|
|
140
140
|
fnClose();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolbar-emoji.cjs.js","sources":["../../../../src/emoji/modules/toolbar-emoji.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { EMOJI_SPRITE as emojiSprite } from '../../config/base64-image'\r\nimport emojiList from '../emoji-list'\r\n\r\nconst Module = Quill.imports['core/module']\r\n\r\nclass ToolbarEmoji extends Module {\r\n quill: any\r\n toolbar: any\r\n constructor(quill, options) {\r\n super(quill, options)\r\n\r\n this.quill = quill\r\n this.toolbar = quill.getModule('toolbar')\r\n if (typeof this.toolbar !== 'undefined') {\r\n this.toolbar.addHandler('emoji', this.checkPalatteExist)\r\n }\r\n\r\n // 在emoji模块加载时判断并插入emoji精灵图样式,防止重复插入\r\n let emojiStyle = document.querySelector('style#devui-emoji-sprite')\r\n if (!emojiStyle) {\r\n emojiStyle = document.createElement('style')\r\n emojiStyle.setAttribute('id', 'devui-emoji-sprite')\r\n emojiStyle.innerHTML = `.ap{background-image:url(${emojiSprite})}`\r\n document.head.appendChild(emojiStyle)\r\n }\r\n }\r\n\r\n checkPalatteExist() {\r\n const quill = this.quill\r\n fnCheckDialogOpen(quill)\r\n this.quill.on('text-change', function (_delta, _oldDelta, source) {\r\n if (source === 'user') {\r\n fnClose()\r\n fnUpdateRange(quill)\r\n }\r\n })\r\n }\r\n}\r\n\r\nfunction fnClose() {\r\n const eleEmojiPlate = document.getElementById('emoji-palette')\r\n document.getElementById('emoji-close-div').style.display = 'none'\r\n if (eleEmojiPlate) {\r\n eleEmojiPlate.remove()\r\n }\r\n}\r\n\r\nfunction fnCheckDialogOpen(quill) {\r\n const elementExists = document.getElementById('emoji-palette')\r\n if (elementExists) {\r\n elementExists.remove()\r\n }\r\n else {\r\n fnShowEmojiPalatte(quill)\r\n }\r\n}\r\n\r\nfunction fnUpdateRange(quill) {\r\n const range = quill.getSelection()\r\n return range\r\n}\r\n\r\nfunction fnShowEmojiPalatte(quill) {\r\n const eleEmojiArea = document.createElement('div')\r\n const range = quill.getSelection()\r\n const atSignBounds = quill.getBounds(range.index)\r\n\r\n quill.container.appendChild(eleEmojiArea)\r\n const containerRect = quill.container.getBoundingClientRect()\r\n const paletteMaxPos = atSignBounds.left + 250 // palette max width is 250\r\n eleEmojiArea.id = 'emoji-palette'\r\n eleEmojiArea.style.top = 10 + atSignBounds.top + atSignBounds.height + containerRect.top + 'px'\r\n if (paletteMaxPos > quill.container.offsetWidth) {\r\n eleEmojiArea.style.left = (atSignBounds.left + containerRect.left - 250) + 'px'\r\n }\r\n else {\r\n eleEmojiArea.style.left = atSignBounds.left + containerRect.left + 'px'\r\n }\r\n\r\n const tabToolbar = document.createElement('div')\r\n tabToolbar.id = 'tab-toolbar'\r\n eleEmojiArea.appendChild(tabToolbar)\r\n\r\n // panel\r\n const panel = document.createElement('div')\r\n panel.id = 'tab-panel'\r\n eleEmojiArea.appendChild(panel)\r\n\r\n const emojiType = [\r\n { type: 'p', name: 'people', content: '<div class=\"i-people\"></div>' },\r\n { type: 'n', name: 'nature', content: '<div class=\"i-nature\"></div>' },\r\n { type: 'd', name: 'food', content: '<div class=\"i-food\"></div>' },\r\n { type: 's', name: 'symbols', content: '<div class=\"i-symbols\"></div>' },\r\n { type: 'a', name: 'activity', content: '<div class=\"i-activity\"></div>' },\r\n { type: 't', name: 'travel', content: '<div class=\"i-travel\"></div>' },\r\n { type: 'o', name: 'objects', content: '<div class=\"i-objects\"></div>' },\r\n { type: 'f', name: 'flags', content: '<div class=\"i-flags\"></div>' },\r\n ]\r\n\r\n const tabElementHolder = document.createElement('ul')\r\n tabToolbar.appendChild(tabElementHolder)\r\n\r\n if (document.getElementById('emoji-close-div') === null) {\r\n const closeDiv = document.createElement('div')\r\n closeDiv.id = 'emoji-close-div'\r\n closeDiv.addEventListener('click', fnClose, false)\r\n document.getElementsByTagName('body')[0].appendChild(closeDiv)\r\n }\r\n else {\r\n document.getElementById('emoji-close-div').style.display = 'block'\r\n }\r\n\r\n emojiType.forEach(function (emojiTypeItem) {\r\n // add tab bar\r\n const tabElement = document.createElement('li')\r\n tabElement.classList.add('emoji-tab')\r\n tabElement.classList.add('filter-' + emojiTypeItem.name)\r\n const tabValue = emojiTypeItem.content\r\n tabElement.innerHTML = tabValue\r\n tabElement.dataset.filter = emojiTypeItem.type\r\n tabElementHolder.appendChild(tabElement)\r\n\r\n const emojiFilter = document.querySelector('.filter-' + emojiTypeItem.name)\r\n emojiFilter.addEventListener('click', function () {\r\n const tab = document.querySelector('.emoji-tab.active')\r\n if (tab) {\r\n tab.classList.remove('active')\r\n }\r\n emojiFilter.classList.toggle('active')\r\n fnUpdateEmojiContainer(emojiFilter, panel, quill)\r\n })\r\n })\r\n fnEmojiPanelInit(panel, quill)\r\n}\r\n\r\nfunction fnEmojiPanelInit(panel, quill) {\r\n fnEmojiElementsToPanel('p', panel, quill)\r\n document.querySelector('.filter-people').classList.add('active')\r\n}\r\n\r\nfunction fnEmojiElementsToPanel(_type, panel, quill) {\r\n const result = emojiList\r\n result.sort(function (a: any, b: any) {\r\n return a.emoji_order - b.emoji_order\r\n })\r\n\r\n quill.focus()\r\n const range = fnUpdateRange(quill)\r\n\r\n result.forEach(function (emoji: any) {\r\n const span = document.createElement('span')\r\n const t = document.createTextNode(emoji.shortname)\r\n span.appendChild(t)\r\n span.classList.add('bem')\r\n span.classList.add('bem-' + emoji.name)\r\n span.classList.add('ap')\r\n span.classList.add('ap-' + emoji.name)\r\n const output = String(String(emoji.code_decimal))\r\n span.innerHTML = output + ' '\r\n panel.appendChild(span)\r\n\r\n const customButton = document.querySelector('.bem-' + emoji.name)\r\n if (customButton) {\r\n customButton.addEventListener('click', function () {\r\n quill.insertEmbed(range.index, 'emoji', emoji, Quill.sources.USER)\r\n setTimeout(() => quill.setSelection(range.index + 1), 0)\r\n fnClose()\r\n })\r\n }\r\n })\r\n}\r\n\r\nfunction fnUpdateEmojiContainer(emojiFilter, panel, quill) {\r\n while (panel.firstChild) {\r\n panel.removeChild(panel.firstChild)\r\n }\r\n const type = emojiFilter.dataset.filter\r\n fnEmojiElementsToPanel(type, panel, quill)\r\n}\r\n\r\nexport default ToolbarEmoji\r\n"],"names":["emojiSprite","emojiList"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"toolbar-emoji.cjs.js","sources":["../../../../src/emoji/modules/toolbar-emoji.ts"],"sourcesContent":["import Quill from 'quill'\nimport { EMOJI_SPRITE as emojiSprite } from '../../config/base64-image'\nimport emojiList from '../emoji-list'\n\nconst Module = Quill.imports['core/module']\n\nclass ToolbarEmoji extends Module {\n quill: any\n toolbar: any\n constructor(quill, options) {\n super(quill, options)\n\n this.quill = quill\n this.toolbar = quill.getModule('toolbar')\n if (typeof this.toolbar !== 'undefined') {\n this.toolbar.addHandler('emoji', this.checkPalatteExist)\n }\n\n // 在emoji模块加载时判断并插入emoji精灵图样式,防止重复插入\n let emojiStyle = document.querySelector('style#devui-emoji-sprite')\n if (!emojiStyle) {\n emojiStyle = document.createElement('style')\n emojiStyle.setAttribute('id', 'devui-emoji-sprite')\n emojiStyle.innerHTML = `.ap{background-image:url(${emojiSprite})}`\n document.head.appendChild(emojiStyle)\n }\n }\n\n checkPalatteExist() {\n const quill = this.quill\n fnCheckDialogOpen(quill)\n this.quill.on('text-change', (_delta, _oldDelta, source) => {\n if (source === 'user') {\n fnClose()\n fnUpdateRange(quill)\n }\n })\n }\n}\n\nfunction fnClose() {\n const eleEmojiPlate = document.getElementById('emoji-palette')\n document.getElementById('emoji-close-div').style.display = 'none'\n if (eleEmojiPlate) {\n eleEmojiPlate.remove()\n }\n}\n\nfunction fnCheckDialogOpen(quill) {\n const elementExists = document.getElementById('emoji-palette')\n if (elementExists) {\n elementExists.remove()\n }\n else {\n fnShowEmojiPalatte(quill)\n }\n}\n\nfunction fnUpdateRange(quill) {\n const range = quill.getSelection()\n return range\n}\n\nfunction fnShowEmojiPalatte(quill) {\n const eleEmojiArea = document.createElement('div')\n const range = quill.getSelection()\n const atSignBounds = quill.getBounds(range.index)\n\n quill.container.appendChild(eleEmojiArea)\n const containerRect = quill.container.getBoundingClientRect()\n const paletteMaxPos = atSignBounds.left + 250 // palette max width is 250\n eleEmojiArea.id = 'emoji-palette'\n eleEmojiArea.style.top = `${10 + atSignBounds.top + atSignBounds.height + containerRect.top}px`\n if (paletteMaxPos > quill.container.offsetWidth) {\n eleEmojiArea.style.left = `${atSignBounds.left + containerRect.left - 250}px`\n }\n else {\n eleEmojiArea.style.left = `${atSignBounds.left + containerRect.left}px`\n }\n\n const tabToolbar = document.createElement('div')\n tabToolbar.id = 'tab-toolbar'\n eleEmojiArea.appendChild(tabToolbar)\n\n // panel\n const panel = document.createElement('div')\n panel.id = 'tab-panel'\n eleEmojiArea.appendChild(panel)\n\n const emojiType = [\n { type: 'p', name: 'people', content: '<div class=\"i-people\"></div>' },\n { type: 'n', name: 'nature', content: '<div class=\"i-nature\"></div>' },\n { type: 'd', name: 'food', content: '<div class=\"i-food\"></div>' },\n { type: 's', name: 'symbols', content: '<div class=\"i-symbols\"></div>' },\n { type: 'a', name: 'activity', content: '<div class=\"i-activity\"></div>' },\n { type: 't', name: 'travel', content: '<div class=\"i-travel\"></div>' },\n { type: 'o', name: 'objects', content: '<div class=\"i-objects\"></div>' },\n { type: 'f', name: 'flags', content: '<div class=\"i-flags\"></div>' },\n ]\n\n const tabElementHolder = document.createElement('ul')\n tabToolbar.appendChild(tabElementHolder)\n\n if (document.getElementById('emoji-close-div') === null) {\n const closeDiv = document.createElement('div')\n closeDiv.id = 'emoji-close-div'\n closeDiv.addEventListener('click', fnClose, false)\n document.getElementsByTagName('body')[0].appendChild(closeDiv)\n }\n else {\n document.getElementById('emoji-close-div').style.display = 'block'\n }\n\n emojiType.forEach((emojiTypeItem) => {\n // add tab bar\n const tabElement = document.createElement('li')\n tabElement.classList.add('emoji-tab')\n tabElement.classList.add(`filter-${emojiTypeItem.name}`)\n const tabValue = emojiTypeItem.content\n tabElement.innerHTML = tabValue\n tabElement.dataset.filter = emojiTypeItem.type\n tabElementHolder.appendChild(tabElement)\n\n const emojiFilter = document.querySelector(`.filter-${emojiTypeItem.name}`)\n emojiFilter.addEventListener('click', () => {\n const tab = document.querySelector('.emoji-tab.active')\n if (tab) {\n tab.classList.remove('active')\n }\n emojiFilter.classList.toggle('active')\n fnUpdateEmojiContainer(emojiFilter, panel, quill)\n })\n })\n fnEmojiPanelInit(panel, quill)\n}\n\nfunction fnEmojiPanelInit(panel, quill) {\n fnEmojiElementsToPanel('p', panel, quill)\n document.querySelector('.filter-people').classList.add('active')\n}\n\nfunction fnEmojiElementsToPanel(_type, panel, quill) {\n const result = emojiList\n result.sort((a: any, b: any) => {\n return a.emoji_order - b.emoji_order\n })\n\n quill.focus()\n const range = fnUpdateRange(quill)\n\n result.forEach((emoji: any) => {\n const span = document.createElement('span')\n const t = document.createTextNode(emoji.shortname)\n span.appendChild(t)\n span.classList.add('bem')\n span.classList.add(`bem-${emoji.name}`)\n span.classList.add('ap')\n span.classList.add(`ap-${emoji.name}`)\n const output = String(String(emoji.code_decimal))\n span.innerHTML = `${output} `\n panel.appendChild(span)\n\n const customButton = document.querySelector(`.bem-${emoji.name}`)\n if (customButton) {\n customButton.addEventListener('click', () => {\n quill.insertEmbed(range.index, 'emoji', emoji, Quill.sources.USER)\n setTimeout(() => quill.setSelection(range.index + 1), 0)\n fnClose()\n })\n }\n })\n}\n\nfunction fnUpdateEmojiContainer(emojiFilter, panel, quill) {\n while (panel.firstChild) {\n panel.removeChild(panel.firstChild)\n }\n const type = emojiFilter.dataset.filter\n fnEmojiElementsToPanel(type, panel, quill)\n}\n\nexport default ToolbarEmoji\n"],"names":["emojiSprite","emojiList"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.cjs.js","sources":["../../../src/emoji/utils.ts"],"sourcesContent":["export function createEmoji(emojiArr) {\
|
|
1
|
+
{"version":3,"file":"utils.cjs.js","sources":["../../../src/emoji/utils.ts"],"sourcesContent":["export function createEmoji(emojiArr) {\n const emojiList = []\n emojiArr.forEach((emojiItem) => {\n const [name, unicode, shortname, codeDecimal, category, emojiOrder] = emojiItem\n emojiList.push({\n name,\n unicode,\n shortname,\n codeDecimal,\n category,\n emojiOrder,\n })\n })\n return emojiList\n}\n"],"names":[],"mappings":";;AAAO,SAAS,YAAY,UAAU;AACpC,QAAM,YAAY,CAAA;AACT,WAAA,QAAQ,CAAC,cAAc;AAC9B,UAAM,CAAC,MAAM,SAAS,WAAW,aAAa,UAAU,UAAU,IAAI;AACtE,cAAU,KAAK;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AAAA,EAAA,CACF;AACM,SAAA;AACT;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file.cjs.js","sources":["../../../../src/file/formats/file.ts"],"sourcesContent":["import Quill from 'quill'\
|
|
1
|
+
{"version":3,"file":"file.cjs.js","sources":["../../../../src/file/formats/file.ts"],"sourcesContent":["import Quill from 'quill'\nimport { sanitize } from '../../config/editor.utils'\n\nconst Embed = Quill.imports['blots/embed']\nconst FILE_ATTRIBUTES = ['id', 'title', 'size', 'lastModified']\n\nclass File extends Embed {\n static blotName: string\n static tagName: string\n static className: string\n static PROTOCOL_WHITELIST: string[]\n statics: any\n domNode: any\n\n static create(value) {\n const node = super.create(value)\n const size = value.size / 1024\n const fixSize = !size ? 0 : size < 1 ? 1 : size.toFixed(0)\n node.classList.add('icon-file')\n node.setAttribute('contenteditable', false)\n const fileSvg = '<svg viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"><path d=\"M854.6 288.6L639.4 73.4c-6-6-14.1-9.4-22.6-9.4H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V311.3c0-8.5-3.4-16.7-9.4-22.7zM790.2 326H602V137.8L790.2 326z m1.8 562H232V136h302v216c0 23.2 18.8 42 42 42h216v494z\" p-id=\"2307\"></path></svg>'\n node.innerHTML = `${fileSvg} ${value.title} (${fixSize} KB)`\n const src = File.sanitize(value.src)\n if (src) {\n node.href = src\n node.target = '_blank'\n }\n FILE_ATTRIBUTES.forEach((key) => {\n if (value[key]) {\n node.dataset[key] = value[key]\n }\n })\n return node\n }\n\n static value(domNode) {\n return File.getFormats(domNode)\n }\n\n static formats(domNode) {\n return File.getFormats(domNode)\n }\n\n static getFormats(domNode) {\n const formats: any = {}\n const href = File.sanitize(domNode.href)\n if (href) {\n formats.src = href\n }\n FILE_ATTRIBUTES.forEach((key) => {\n if (domNode.dataset[key]) {\n formats[key] = domNode.dataset[key]\n }\n })\n return formats\n }\n\n static sanitize(url) {\n return (sanitize(url, this.PROTOCOL_WHITELIST) && url) || ''\n }\n}\nFile.blotName = 'file'\nFile.tagName = 'A'\nFile.className = 'ql-file-item'\nFile.PROTOCOL_WHITELIST = ['http', 'https']\n\nexport default File\n"],"names":["sanitize"],"mappings":";;;;AAGA,MAAM,QAAQ,MAAM,QAAQ,aAAa;AACzC,MAAM,kBAAkB,CAAC,MAAM,SAAS,QAAQ,cAAc;AAE9D,MAAM,aAAa,MAAM;AAAA,EAQvB,OAAO,OAAO,OAAO;AACb,UAAA,OAAO,MAAM,OAAO,KAAK;AACzB,UAAA,OAAO,MAAM,OAAO;AACpB,UAAA,UAAU,CAAC,OAAO,IAAI,OAAO,IAAI,IAAI,KAAK,QAAQ,CAAC;AACpD,SAAA,UAAU,IAAI,WAAW;AACzB,SAAA,aAAa,mBAAmB,KAAK;AAC1C,UAAM,UAAU;AAChB,SAAK,YAAY,GAAG,OAAO,IAAI,MAAM,KAAK,KAAK,OAAO;AACtD,UAAM,MAAM,KAAK,SAAS,MAAM,GAAG;AACnC,QAAI,KAAK;AACP,WAAK,OAAO;AACZ,WAAK,SAAS;AAAA,IAChB;AACgB,oBAAA,QAAQ,CAAC,QAAQ;AAC3B,UAAA,MAAM,GAAG,GAAG;AACd,aAAK,QAAQ,GAAG,IAAI,MAAM,GAAG;AAAA,MAC/B;AAAA,IAAA,CACD;AACM,WAAA;AAAA,EACT;AAAA,EAEA,OAAO,MAAM,SAAS;AACb,WAAA,KAAK,WAAW,OAAO;AAAA,EAChC;AAAA,EAEA,OAAO,QAAQ,SAAS;AACf,WAAA,KAAK,WAAW,OAAO;AAAA,EAChC;AAAA,EAEA,OAAO,WAAW,SAAS;AACzB,UAAM,UAAe,CAAA;AACrB,UAAM,OAAO,KAAK,SAAS,QAAQ,IAAI;AACvC,QAAI,MAAM;AACR,cAAQ,MAAM;AAAA,IAChB;AACgB,oBAAA,QAAQ,CAAC,QAAQ;AAC3B,UAAA,QAAQ,QAAQ,GAAG,GAAG;AACxB,gBAAQ,GAAG,IAAI,QAAQ,QAAQ,GAAG;AAAA,MACpC;AAAA,IAAA,CACD;AACM,WAAA;AAAA,EACT;AAAA,EAEA,OAAO,SAAS,KAAK;AACnB,WAAQA,aAAAA,SAAS,KAAK,KAAK,kBAAkB,KAAK,OAAQ;AAAA,EAC5D;AACF;AACA,KAAK,WAAW;AAChB,KAAK,UAAU;AACf,KAAK,YAAY;AACjB,KAAK,qBAAqB,CAAC,QAAQ,OAAO;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../../../src/file/index.ts"],"sourcesContent":["import Quill from 'quill'\
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../../src/file/index.ts"],"sourcesContent":["import Quill from 'quill'\nimport File from './formats/file'\nimport FileBar from './modules/file-bar'\n\nconst Module = Quill.imports['core/module']\n\nclass FileModule extends Module {\n quill: any\n fileBar: FileBar\n\n static register() {\n Quill.register('formats/file', File, true)\n }\n\n constructor(quill, options) {\n super(quill, options)\n this.quill = quill\n quill.root.addEventListener('click', event => this.clickEvent(event), false)\n }\n\n clickEvent(event) {\n event.preventDefault()\n const target = event.target\n const fileDom = target.closest('a.ql-file-item')\n if (fileDom) {\n if (this.fileBar) {\n this.fileBar.destroy()\n }\n this.fileBar = new FileBar(this.quill, fileDom)\n }\n else if (this.fileBar && !target.closest('.ql-file-bar')) {\n this.fileBar.destroy()\n this.fileBar = null\n }\n }\n}\n\nexport default FileModule\n"],"names":["File","FileBar"],"mappings":";;;;;AAIA,MAAM,SAAS,MAAM,QAAQ,aAAa;AAE1C,MAAM,mBAAmB,OAAO;AAAA,EAI9B,OAAO,WAAW;AACV,UAAA,SAAS,gBAAgBA,KAAA,SAAM,IAAI;AAAA,EAC3C;AAAA,EAEA,YAAY,OAAO,SAAS;AAC1B,UAAM,OAAO,OAAO;AACpB,SAAK,QAAQ;AACP,UAAA,KAAK,iBAAiB,SAAS,CAAA,UAAS,KAAK,WAAW,KAAK,GAAG,KAAK;AAAA,EAC7E;AAAA,EAEA,WAAW,OAAO;AAChB,UAAM,eAAe;AACrB,UAAM,SAAS,MAAM;AACf,UAAA,UAAU,OAAO,QAAQ,gBAAgB;AAC/C,QAAI,SAAS;AACX,UAAI,KAAK,SAAS;AAChB,aAAK,QAAQ;MACf;AACA,WAAK,UAAU,IAAIC,QAAAA,QAAQ,KAAK,OAAO,OAAO;AAAA,IAAA,WAEvC,KAAK,WAAW,CAAC,OAAO,QAAQ,cAAc,GAAG;AACxD,WAAK,QAAQ;AACb,WAAK,UAAU;AAAA,IACjB;AAAA,EACF;AACF;;"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
3
|
const Quill = require("quill");
|
|
4
|
+
const selection = require("quill/core/selection");
|
|
4
5
|
const method = require("../../utils/method.cjs.js");
|
|
5
6
|
const file = require("../formats/file.cjs.js");
|
|
6
|
-
const
|
|
7
|
-
const Delta = Quill.imports["delta"];
|
|
7
|
+
const Delta = Quill.imports.delta;
|
|
8
8
|
class FileBar {
|
|
9
9
|
constructor(quill, target) {
|
|
10
10
|
this.quill = quill;
|
|
@@ -116,7 +116,7 @@ class FileBar {
|
|
|
116
116
|
const day = method.unshiftString(`${date.getDate()}`, 2, "0");
|
|
117
117
|
const hour = method.unshiftString(`${date.getHours()}`, 2, "0");
|
|
118
118
|
const minute = method.unshiftString(`${date.getMinutes()}`, 2, "0");
|
|
119
|
-
return isNaN(year) ? "--" : `${year}/${month}/${day} ${hour}:${minute}`;
|
|
119
|
+
return Number.isNaN(year) ? "--" : `${year}/${month}/${day} ${hour}:${minute}`;
|
|
120
120
|
}
|
|
121
121
|
}
|
|
122
122
|
exports.default = FileBar;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-bar.cjs.js","sources":["../../../../src/file/modules/file-bar.ts"],"sourcesContent":["import Quill from 'quill'\
|
|
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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"}
|
package/lib/fluent-editor.cjs.js
CHANGED
|
@@ -1,24 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
3
|
const Quill = require("quill");
|
|
4
|
+
require("./attributors/index.cjs.js");
|
|
4
5
|
const config = require("./config.cjs.js");
|
|
5
|
-
const index$
|
|
6
|
+
const index$4 = require("./counter/index.cjs.js");
|
|
6
7
|
const customClipboard = require("./custom-clipboard.cjs.js");
|
|
7
8
|
const BlotFormatter = require("./custom-image/BlotFormatter.cjs.js");
|
|
8
9
|
const CustomImageSpec = require("./custom-image/specs/CustomImageSpec.cjs.js");
|
|
9
10
|
const customUploader = require("./custom-uploader.cjs.js");
|
|
10
|
-
const index$
|
|
11
|
-
const index$
|
|
12
|
-
const index
|
|
11
|
+
const index$5 = require("./emoji/index.cjs.js");
|
|
12
|
+
const index$3 = require("./file/index.cjs.js");
|
|
13
|
+
const index = require("./format-painter/index.cjs.js");
|
|
14
|
+
const index$6 = require("./link/index.cjs.js");
|
|
13
15
|
const Mention = require("./mention/Mention.cjs.js");
|
|
14
|
-
const index$
|
|
15
|
-
const index$
|
|
16
|
+
const index$1 = require("./screenshot/index.cjs.js");
|
|
17
|
+
const index$9 = require("./soft-break/index.cjs.js");
|
|
18
|
+
const index$8 = require("./strike/index.cjs.js");
|
|
19
|
+
const index$7 = require("./syntax/index.cjs.js");
|
|
16
20
|
const betterTable = require("./table/better-table.cjs.js");
|
|
17
|
-
const index$
|
|
18
|
-
const index$
|
|
19
|
-
const index$9 = require("./video/index.cjs.js");
|
|
20
|
-
const index = require("./format-painter/index.cjs.js");
|
|
21
|
-
require("./attributors/index.cjs.js");
|
|
21
|
+
const index$2 = require("./toolbar/index.cjs.js");
|
|
22
|
+
const index$a = require("./video/index.cjs.js");
|
|
22
23
|
const fontStyle = require("./attributors/font-style.cjs.js");
|
|
23
24
|
const fontSize = require("./attributors/font-size.cjs.js");
|
|
24
25
|
const lineHeight = require("./attributors/line-height.cjs.js");
|
|
@@ -98,7 +99,8 @@ const registerModules = function() {
|
|
|
98
99
|
this.quill.format("list", curListValue, Quill.sources.USER);
|
|
99
100
|
}
|
|
100
101
|
},
|
|
101
|
-
[index.FormatPainter.toolName]: index.FormatPainter
|
|
102
|
+
[index.FormatPainter.toolName]: index.FormatPainter,
|
|
103
|
+
[index$1.Screenshot.toolName]: index$1.Screenshot
|
|
102
104
|
}
|
|
103
105
|
},
|
|
104
106
|
"better-table": {
|
|
@@ -126,7 +128,7 @@ const registerModules = function() {
|
|
|
126
128
|
};
|
|
127
129
|
FluentEditor.register(
|
|
128
130
|
{
|
|
129
|
-
"modules/toolbar": index$
|
|
131
|
+
"modules/toolbar": index$2.default,
|
|
130
132
|
"modules/mention": Mention.default,
|
|
131
133
|
"modules/better-table": betterTable.default,
|
|
132
134
|
"modules/clipboard": customClipboard.default,
|
|
@@ -134,21 +136,20 @@ const registerModules = function() {
|
|
|
134
136
|
// 三者关联性最强
|
|
135
137
|
"modules/image": BlotFormatter.default,
|
|
136
138
|
// 三者关联性最强
|
|
137
|
-
"modules/file": index$
|
|
139
|
+
"modules/file": index$3.default,
|
|
138
140
|
// 三者关联性最强
|
|
139
|
-
"modules/counter": index$
|
|
140
|
-
"modules/emoji-toolbar": index$
|
|
141
|
-
"modules/emoji-shortname": index$
|
|
141
|
+
"modules/counter": index$4.default,
|
|
142
|
+
"modules/emoji-toolbar": index$5.default.ToolbarEmoji,
|
|
143
|
+
"modules/emoji-shortname": index$5.default.ShortNameEmoji,
|
|
142
144
|
// 'modules/global-link': GlobalLink,//暂未开发
|
|
143
|
-
"modules/link": index$
|
|
145
|
+
"modules/link": index$6.default,
|
|
144
146
|
// 报错
|
|
145
|
-
// 'modules/screenshot': Screenshot,//暂未开发
|
|
146
147
|
// 'modules/quickmenu': QuickMenu,//暂未开发
|
|
147
|
-
"modules/syntax": index$
|
|
148
|
-
"formats/strike": index$
|
|
149
|
-
"formats/softBreak": index$
|
|
150
|
-
"formats/video": index$
|
|
151
|
-
"formats/emoji": index$
|
|
148
|
+
"modules/syntax": index$7.default,
|
|
149
|
+
"formats/strike": index$8.default,
|
|
150
|
+
"formats/softBreak": index$9.default,
|
|
151
|
+
"formats/video": index$a.default,
|
|
152
|
+
"formats/emoji": index$5.default.EmojiBlot,
|
|
152
153
|
"formats/font": fontStyle.FontStyle,
|
|
153
154
|
"formats/size": fontSize.SizeStyle,
|
|
154
155
|
"formats/line-height": lineHeight.LineHeightStyle,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fluent-editor.cjs.js","sources":["../../src/fluent-editor.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport type { Module, Parchment as TypeParchment } from 'quill'\r\nimport { ICONS_CONFIG, TABLE_RIGHT_MENU_CONFIG, inputFile, getListValue } 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\n// import GlobalLink from './global-link' // 全局链接\r\nimport Link from './link' // 超链接0\r\nimport Mention from './mention/Mention' // @提醒\r\n// import QuickMenu from './quick-menu' // 快捷菜单\r\n// import Screenshot from './screenshot' // 截图\r\nimport SoftBreak from './soft-break' // 软回车\r\nimport Strike from './strike' // 删除线\r\nimport BetterTable from './table/better-table' // 表格\r\nimport CustomSyntax from './syntax' // 代码块高亮\r\nimport Toolbar from './toolbar' // 工具栏\r\nimport Video from './video' // 视频\r\nimport { FormatPainter } from './format-painter'\r\nimport { IEditorConfig } from './config/types'\r\nimport { LineHeightStyle, SizeStyle, FontStyle, TextIndentStyle } from './attributors'\r\n\r\nclass FluentEditor extends Quill {\r\n constructor(container: HTMLElement | string, options: IEditorConfig = {}) {\r\n super(container, options)\r\n }\r\n}\r\n\r\nconst registerModules = function () {\r\n const Icons = Quill.imports['ui/icons']\r\n const iconKeys = Object.keys(ICONS_CONFIG)\r\n iconKeys.forEach((iconKey) => {\r\n Icons[iconKey] = ICONS_CONFIG[iconKey]\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 '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': function () {},\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 },\r\n },\r\n 'better-table': {\r\n operationMenu: {\r\n items: TABLE_RIGHT_MENU_CONFIG,\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 },\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/screenshot': Screenshot,//暂未开发\r\n // 'modules/quickmenu': QuickMenu,//暂未开发\r\n 'modules/syntax': CustomSyntax,\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 },\r\n true, // 覆盖内部模块\r\n )\r\n\r\n return FluentEditor\r\n}\r\n\r\nexport default registerModules()\r\n"],"names":["ICONS_CONFIG","BetterTable","inputFile","getListValue","index","FormatPainter","TABLE_RIGHT_MENU_CONFIG","CustomImageSpec","Toolbar","Mention","CustomClipboard","CustomUploader","CustomImage","FileModule","Counter","Emoji","Link","CustomSyntax","Strike","SoftBreak","Video","FontStyle","SizeStyle","LineHeightStyle","TextIndentStyle"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fluent-editor.cjs.js","sources":["../../src/fluent-editor.ts"],"sourcesContent":["import type { Module, Parchment as TypeParchment } from 'quill'\nimport type { IEditorConfig } from './config/types'\nimport Quill from 'quill'\nimport { FontStyle, LineHeightStyle, SizeStyle, TextIndentStyle } from './attributors' // 字符统计\nimport { getListValue, ICONS_CONFIG, inputFile, TABLE_RIGHT_MENU_CONFIG } 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' // 超链接0\nimport FileModule from './file' // @提醒\nimport { FormatPainter } from './format-painter'// 截图\n// import GlobalLink from './global-link' // 全局链接\nimport Link from './link' // 软回车\nimport Mention from './mention/Mention' // 删除线\n// import QuickMenu from './quick-menu' // 快捷菜单\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 from './toolbar'\nimport Video from './video'\n\nclass FluentEditor extends Quill {\n constructor(container: HTMLElement | string, options: IEditorConfig = {}) {\n super(container, options)\n }\n}\n\nconst registerModules = function () {\n const Icons = Quill.imports['ui/icons']\n const iconKeys = Object.keys(ICONS_CONFIG)\n iconKeys.forEach((iconKey) => {\n Icons[iconKey] = ICONS_CONFIG[iconKey]\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 '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': function () {},\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 items: TABLE_RIGHT_MENU_CONFIG,\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 },\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\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 },\n true, // 覆盖内部模块\n )\n\n return FluentEditor\n}\n\nexport default registerModules()\n"],"names":["ICONS_CONFIG","BetterTable","inputFile","getListValue","index","FormatPainter","Screenshot","TABLE_RIGHT_MENU_CONFIG","CustomImageSpec","Toolbar","Mention","CustomClipboard","CustomUploader","CustomImage","FileModule","Counter","Emoji","Link","CustomSyntax","Strike","SoftBreak","Video","FontStyle","SizeStyle","LineHeightStyle","TextIndentStyle"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../../../src/format-painter/index.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../../src/format-painter/index.ts"],"sourcesContent":["import type { Range } from 'quill'\r\nimport type Toolbar from 'quill/modules/toolbar'\r\nimport Quill from 'quill'\r\n\r\ninterface FormatData {\r\n formatPainter: {\r\n rangeFormat: Record<string, any>\r\n isFormatterLock: boolean\r\n isFormating: boolean\r\n prepareLock: boolean\r\n }\r\n}\r\nexport function FormatPainter(this: Toolbar & FormatData) {\r\n if (!this.formatPainter) {\r\n this.formatPainter = {\r\n rangeFormat: {},\r\n isFormatterLock: false,\r\n isFormating: false,\r\n prepareLock: false,\r\n }\r\n }\r\n const [, formatterBtn] = this.controls.find(([name]) => name === FormatPainter.toolName)\r\n const formatRange = (range: Range | null) => {\r\n if (!range) return\r\n this.quill.removeFormat(range.index, range.length)\r\n for (const format in this.formatPainter.rangeFormat) {\r\n this.quill.format(format, this.formatPainter.rangeFormat[format], Quill.sources.USER)\r\n }\r\n if (!this.formatPainter.isFormatterLock) {\r\n unbindFormatSelect()\r\n }\r\n else {\r\n btnActive()\r\n }\r\n }\r\n // setTime for Toolbar.update\r\n const btnActive = () => {\r\n setTimeout(() => {\r\n formatterBtn.classList.add('ql-active')\r\n }, 0)\r\n }\r\n const btnRemoveActive = () => {\r\n setTimeout(() => {\r\n formatterBtn.classList.remove('ql-active')\r\n }, 0)\r\n }\r\n const bindFormatSelect = () => {\r\n const range = this.quill.getSelection()\r\n if (range.length === 0) return\r\n this.formatPainter.rangeFormat = this.quill.getFormat(range)\r\n this.formatPainter.isFormating = true\r\n this.quill.on(Quill.events.SELECTION_CHANGE, formatRange)\r\n btnActive()\r\n }\r\n const unbindFormatSelect = () => {\r\n this.quill.off(Quill.events.SELECTION_CHANGE, formatRange)\r\n this.formatPainter.rangeFormat = undefined\r\n btnRemoveActive()\r\n this.formatPainter.isFormating = false\r\n this.formatPainter.isFormatterLock = false\r\n }\r\n\r\n if (this.formatPainter.isFormatterLock || (this.formatPainter.isFormating && !this.formatPainter.prepareLock)) {\r\n unbindFormatSelect()\r\n }\r\n else if (this.formatPainter.isFormating && this.formatPainter.prepareLock) {\r\n this.formatPainter.isFormatterLock = true\r\n btnActive()\r\n }\r\n else {\r\n // imitate double click\r\n this.formatPainter.prepareLock = true\r\n setTimeout(() => {\r\n this.formatPainter.prepareLock = false\r\n }, 200)\r\n bindFormatSelect()\r\n }\r\n}\r\nFormatPainter.toolName = 'format-painter'\r\n"],"names":[],"mappings":";;;AAYO,SAAS,gBAA0C;AACpD,MAAA,CAAC,KAAK,eAAe;AACvB,SAAK,gBAAgB;AAAA,MACnB,aAAa,CAAC;AAAA,MACd,iBAAiB;AAAA,MACjB,aAAa;AAAA,MACb,aAAa;AAAA,IAAA;AAAA,EAEjB;AACA,QAAM,GAAG,YAAY,IAAI,KAAK,SAAS,KAAK,CAAC,CAAC,IAAI,MAAM,SAAS,cAAc,QAAQ;AACjF,QAAA,cAAc,CAAC,UAAwB;AAC3C,QAAI,CAAC,MAAO;AACZ,SAAK,MAAM,aAAa,MAAM,OAAO,MAAM,MAAM;AACtC,eAAA,UAAU,KAAK,cAAc,aAAa;AAC9C,WAAA,MAAM,OAAO,QAAQ,KAAK,cAAc,YAAY,MAAM,GAAG,MAAM,QAAQ,IAAI;AAAA,IACtF;AACI,QAAA,CAAC,KAAK,cAAc,iBAAiB;AACpB;IAAA,OAEhB;AACO;IACZ;AAAA,EAAA;AAGF,QAAM,YAAY,MAAM;AACtB,eAAW,MAAM;AACF,mBAAA,UAAU,IAAI,WAAW;AAAA,OACrC,CAAC;AAAA,EAAA;AAEN,QAAM,kBAAkB,MAAM;AAC5B,eAAW,MAAM;AACF,mBAAA,UAAU,OAAO,WAAW;AAAA,OACxC,CAAC;AAAA,EAAA;AAEN,QAAM,mBAAmB,MAAM;AACvB,UAAA,QAAQ,KAAK,MAAM,aAAa;AAClC,QAAA,MAAM,WAAW,EAAG;AACxB,SAAK,cAAc,cAAc,KAAK,MAAM,UAAU,KAAK;AAC3D,SAAK,cAAc,cAAc;AACjC,SAAK,MAAM,GAAG,MAAM,OAAO,kBAAkB,WAAW;AAC9C;EAAA;AAEZ,QAAM,qBAAqB,MAAM;AAC/B,SAAK,MAAM,IAAI,MAAM,OAAO,kBAAkB,WAAW;AACzD,SAAK,cAAc,cAAc;AACjB;AAChB,SAAK,cAAc,cAAc;AACjC,SAAK,cAAc,kBAAkB;AAAA,EAAA;AAGnC,MAAA,KAAK,cAAc,mBAAoB,KAAK,cAAc,eAAe,CAAC,KAAK,cAAc,aAAc;AAC1F;EAAA,WAEZ,KAAK,cAAc,eAAe,KAAK,cAAc,aAAa;AACzE,SAAK,cAAc,kBAAkB;AAC3B;EAAA,OAEP;AAEH,SAAK,cAAc,cAAc;AACjC,eAAW,MAAM;AACf,WAAK,cAAc,cAAc;AAAA,OAChC,GAAG;AACW;EACnB;AACF;AACA,cAAc,WAAW;;"}
|
|
@@ -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'\
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"customer-widget-link.cjs.js","sources":["../../../../src/global-link/formats/customer-widget-link.ts"],"sourcesContent":["import Quill from 'quill'\
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doc-link.cjs.js","sources":["../../../../src/global-link/formats/doc-link.ts"],"sourcesContent":["import Quill from 'quill'\
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wiki-link.cjs.js","sources":["../../../../src/global-link/formats/wiki-link.ts"],"sourcesContent":["import Quill from 'quill'\
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"work-item-link.cjs.js","sources":["../../../../src/global-link/formats/work-item-link.ts"],"sourcesContent":["import Quill from 'quill'\
|
|
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;;"}
|
|
@@ -7,7 +7,7 @@ const docLink = require("./formats/doc-link.cjs.js");
|
|
|
7
7
|
const wikiLink = require("./formats/wiki-link.cjs.js");
|
|
8
8
|
const workItemLink = require("./formats/work-item-link.cjs.js");
|
|
9
9
|
const Module = Quill.imports["core/module"];
|
|
10
|
-
const Delta = Quill.imports
|
|
10
|
+
const Delta = Quill.imports.delta;
|
|
11
11
|
class GlobalLink extends Module {
|
|
12
12
|
static register() {
|
|
13
13
|
Quill.register("formats/wiki-link", wikiLink.default);
|