@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":"better-picker.cjs.js","sources":["../../../src/toolbar/better-picker.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { isNullOrUndefined } from '../config/editor.utils'\r\nconst SnowTheme = Quill.imports['themes/snow']\r\n\r\nlet optionsCounter = 0\r\n\r\nfunction toggleAriaAttribute(element, attribute) {\r\n element.setAttribute(\r\n attribute,\r\n element.getAttribute(attribute) !== 'true',\r\n )\r\n}\r\n\r\nclass Picker {\r\n container: any\r\n label: any\r\n options: any\r\n select: any\r\n constructor(select) {\r\n this.select = select\r\n this.container = document.createElement('span')\r\n this.buildPicker()\r\n this.select.style.display = 'none'\r\n this.select.parentNode.insertBefore(this.container, this.select)\r\n\r\n this.label.addEventListener('mousedown', (e) => {\r\n this.togglePicker()\r\n e.preventDefault()\r\n })\r\n this.label.addEventListener('keydown', (event) => {\r\n switch (event.key) {\r\n case 'Enter':\r\n this.togglePicker()\r\n break\r\n case 'Escape':\r\n this.escape()\r\n event.preventDefault()\r\n break\r\n default:\r\n }\r\n })\r\n this.select.addEventListener('change', this.update.bind(this))\r\n }\r\n\r\n togglePicker() {\r\n this.container.classList.toggle('ql-expanded')\r\n // Toggle aria-expanded and aria-hidden to make the picker accessible\r\n toggleAriaAttribute(this.label, 'aria-expanded')\r\n toggleAriaAttribute(this.options, 'aria-hidden')\r\n }\r\n\r\n buildItem(option) {\r\n const item = document.createElement('span')\r\n item.tabIndex = 0\r\n item.setAttribute('role', 'button')\r\n item.classList.add('ql-picker-item')\r\n if (option.hasAttribute('value')) {\r\n item.setAttribute('data-value', option.getAttribute('value'))\r\n }\r\n if (option.textContent) {\r\n item.setAttribute('data-label', option.textContent)\r\n }\r\n item.addEventListener('click', () => {\r\n this.selectItem(item, true)\r\n })\r\n item.addEventListener('keydown', (event) => {\r\n switch (event.key) {\r\n case 'Enter':\r\n this.selectItem(item, true)\r\n event.preventDefault()\r\n break\r\n case 'Escape':\r\n this.escape()\r\n event.preventDefault()\r\n break\r\n default:\r\n }\r\n })\r\n\r\n return item\r\n }\r\n\r\n buildLabel() {\r\n const label = document.createElement('span')\r\n label.classList.add('ql-picker-label')\r\n label.innerHTML = `\r\n <svg viewbox=\"0 0 18 18\">\r\n <polygon class=\"ql-stroke\" points=\"7 11 9 13 11 11 7 11\"></polygon>\r\n <polygon class=\"ql-stroke\" points=\"7 7 9 5 11 7 7 7\"></polygon>\r\n </svg>\r\n `\r\n label.tabIndex = 0\r\n label.setAttribute('role', 'button')\r\n label.setAttribute('aria-expanded', 'false')\r\n this.container.appendChild(label)\r\n return label\r\n }\r\n\r\n buildOptions() {\r\n const options = document.createElement('span')\r\n options.classList.add('ql-picker-options')\r\n\r\n // Don't want screen readers to read this until options are visible\r\n options.setAttribute('aria-hidden', 'true')\r\n options.tabIndex = -1\r\n\r\n // Need a unique id for aria-controls\r\n options.id = `ql-picker-options-${optionsCounter}`\r\n optionsCounter += 1\r\n this.label.setAttribute('aria-controls', options.id)\r\n\r\n this.options = options\r\n\r\n Array.from(this.select.options).forEach((option: any) => {\r\n const item = this.buildItem(option)\r\n options.appendChild(item)\r\n if (option.selected === true) {\r\n this.selectItem(item)\r\n }\r\n })\r\n this.container.appendChild(options)\r\n }\r\n\r\n buildPicker() {\r\n Array.from(this.select.attributes).forEach((item: any) => {\r\n this.container.setAttribute(item.name, item.value)\r\n })\r\n this.container.classList.add('ql-picker')\r\n this.label = this.buildLabel()\r\n this.buildOptions()\r\n }\r\n\r\n escape() {\r\n // Close menu and return focus to trigger label\r\n this.close()\r\n // Need setTimeout for accessibility to ensure that the browser executes\r\n // focus on the next process thread and after any DOM content changes\r\n setTimeout(() => this.label.focus(), 1)\r\n }\r\n\r\n close() {\r\n this.container.classList.remove('ql-expanded')\r\n this.label.setAttribute('aria-expanded', 'false')\r\n this.options.setAttribute('aria-hidden', 'true')\r\n }\r\n\r\n selectItem(item, trigger = false) {\r\n const selected = this.container.querySelector('.ql-selected')\r\n if (item === selected) return\r\n if (!isNullOrUndefined(selected)) {\r\n selected.classList.remove('ql-selected')\r\n }\r\n if (isNullOrUndefined(item)) return\r\n item.classList.add('ql-selected')\r\n this.select.selectedIndex = Array.from(item.parentNode.children).indexOf(\r\n item,\r\n )\r\n if (item.hasAttribute('data-value')) {\r\n this.label.setAttribute('data-value', item.getAttribute('data-value'))\r\n }\r\n else {\r\n this.label.removeAttribute('data-value')\r\n }\r\n if (item.hasAttribute('data-label')) {\r\n this.label.setAttribute('data-label', item.getAttribute('data-label'))\r\n }\r\n else {\r\n this.label.removeAttribute('data-label')\r\n }\r\n if (trigger) {\r\n let ev\r\n if (typeof Event === 'function') {\r\n ev = new Event('change')\r\n }\r\n else {\r\n ev = document.createEvent('Event')\r\n ev.initEvent('change', true, true)\r\n }\r\n this.select.dispatchEvent(ev)\r\n this.close()\r\n }\r\n }\r\n\r\n update() {\r\n let option\r\n if (this.select.selectedIndex > -1) {\r\n const item = this.container.querySelector('.ql-picker-options').children[\r\n this.select.selectedIndex\r\n ]\r\n option = this.select.options[this.select.selectedIndex]\r\n this.selectItem(item)\r\n }\r\n else {\r\n this.selectItem(null)\r\n }\r\n const isActive\r\n = !isNullOrUndefined(option)\r\n && option !== this.select.querySelector('option[selected]')\r\n\r\n if (isActive) {\r\n this.label.classList.add('ql-active')\r\n }\r\n else {\r\n this.label.classList.remove('ql-active')\r\n }\r\n }\r\n}\r\n\r\nclass IconPicker extends Picker {\r\n defaultItem: any\r\n constructor(select, icons) {\r\n super(select)\r\n this.container.classList.add('ql-icon-picker')\r\n Array.from(this.container.querySelectorAll('.ql-picker-item')).forEach(\r\n (item: any) => {\r\n item.innerHTML = icons[item.getAttribute('data-value') || '']\r\n },\r\n )\r\n this.defaultItem = this.container.querySelector('.ql-selected')\r\n this.selectItem(this.defaultItem, null)\r\n }\r\n\r\n selectItem(target, trigger) {\r\n super.selectItem(target, trigger)\r\n const item = target || this.defaultItem\r\n if (this.label.innerHTML === item.innerHTML) return\r\n this.label.innerHTML = item.innerHTML\r\n }\r\n}\r\n\r\nclass ColorPicker extends Picker {\r\n constructor(select, label) {\r\n super(select)\r\n this.label.innerHTML = label\r\n this.container.classList.add('ql-color-picker')\r\n Array.from(this.container.querySelectorAll('.ql-picker-item'))\r\n .slice(0, 7)\r\n .forEach((item: any) => {\r\n item.classList.add('ql-primary')\r\n })\r\n }\r\n\r\n buildItem(option) {\r\n const item = super.buildItem(option)\r\n item.style.backgroundColor = option.getAttribute('value') || ''\r\n return item\r\n }\r\n\r\n selectItem(item, trigger) {\r\n super.selectItem(item, trigger)\r\n const colorLabel = this.label.querySelector('.ql-color-label')\r\n const value = item ? item.getAttribute('data-value') || '' : ''\r\n if (colorLabel) {\r\n if (colorLabel.tagName === 'line') {\r\n colorLabel.style.stroke = value\r\n }\r\n else {\r\n colorLabel.style.fill = value\r\n }\r\n }\r\n }\r\n}\r\n\r\nQuill.register('ui/picker', Picker, true)\r\nQuill.register('ui/icon-picker', IconPicker, true)\r\nQuill.register('ui/color-picker', ColorPicker, true)\r\n\r\nconst ALIGNS = [false, 'center', 'right']\r\n\r\nconst COLORS = [\r\n '#000000',\r\n '#e60000',\r\n '#ff9900',\r\n '#ffff00',\r\n '#008a00',\r\n '#0066cc',\r\n '#9933ff',\r\n '#ffffff',\r\n '#facccc',\r\n '#ffebcc',\r\n '#ffffcc',\r\n '#cce8cc',\r\n '#cce0f5',\r\n '#ebd6ff',\r\n '#bbbbbb',\r\n '#f06666',\r\n '#ffc266',\r\n '#ffff66',\r\n '#66b966',\r\n '#66a3e0',\r\n '#c285ff',\r\n '#888888',\r\n '#a10000',\r\n '#b26b00',\r\n '#b2b200',\r\n '#006100',\r\n '#0047b2',\r\n '#6b24b2',\r\n '#444444',\r\n '#5c0000',\r\n '#663d00',\r\n '#666600',\r\n '#003700',\r\n '#002966',\r\n '#3d1466',\r\n]\r\n\r\nconst FONTS = [false, 'serif', 'monospace']\r\n\r\nconst HEADERS = ['1', '2', '3', false]\r\n\r\nconst SIZES = ['small', false, 'large', 'huge']\r\n\r\nSnowTheme.prototype.buildPickers = function (selects, icons) {\r\n this.pickers = Array.from(selects).map((select: any) => {\r\n if (select.classList.contains('ql-align')) {\r\n if (isNullOrUndefined(select.querySelector('option'))) {\r\n fillSelect(select, ALIGNS)\r\n }\r\n return new IconPicker(select, icons.align)\r\n }\r\n if (\r\n select.classList.contains('ql-background')\r\n || select.classList.contains('ql-color')\r\n ) {\r\n const format = select.classList.contains('ql-background')\r\n ? 'background'\r\n : 'color'\r\n if (isNullOrUndefined(select.querySelector('option'))) {\r\n fillSelect(\r\n select,\r\n COLORS,\r\n )\r\n }\r\n return new ColorPicker(select, icons[format])\r\n }\r\n if (isNullOrUndefined(select.querySelector('option'))) {\r\n if (select.classList.contains('ql-font')) {\r\n fillSelect(select, FONTS)\r\n }\r\n else if (select.classList.contains('ql-header')) {\r\n fillSelect(select, HEADERS)\r\n }\r\n else if (select.classList.contains('ql-size')) {\r\n fillSelect(select, SIZES)\r\n }\r\n }\r\n return new Picker(select)\r\n })\r\n const update = () => {\r\n this.pickers.forEach((picker) => {\r\n picker.update()\r\n })\r\n }\r\n this.quill.on(Quill.events.EDITOR_CHANGE, update)\r\n}\r\n\r\nfunction fillSelect(select, values, defaultValue = false) {\r\n values.forEach((value) => {\r\n const option = document.createElement('option')\r\n if (value === defaultValue) {\r\n option.setAttribute('selected', 'selected')\r\n }\r\n else {\r\n option.setAttribute('value', value)\r\n }\r\n select.appendChild(option)\r\n })\r\n}\r\n"],"names":["isNullOrUndefined"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"better-picker.cjs.js","sources":["../../../src/toolbar/better-picker.ts"],"sourcesContent":["import Quill from 'quill'\nimport { isNullOrUndefined } from '../config/editor.utils'\n\nconst SnowTheme = Quill.imports['themes/snow']\n\nlet optionsCounter = 0\n\nfunction toggleAriaAttribute(element, attribute) {\n element.setAttribute(\n attribute,\n element.getAttribute(attribute) !== 'true',\n )\n}\n\nclass Picker {\n container: any\n label: any\n options: any\n select: any\n constructor(select) {\n this.select = select\n this.container = document.createElement('span')\n this.buildPicker()\n this.select.style.display = 'none'\n this.select.parentNode.insertBefore(this.container, this.select)\n\n this.label.addEventListener('mousedown', (e) => {\n this.togglePicker()\n e.preventDefault()\n })\n this.label.addEventListener('keydown', (event) => {\n switch (event.key) {\n case 'Enter':\n this.togglePicker()\n break\n case 'Escape':\n this.escape()\n event.preventDefault()\n break\n default:\n }\n })\n this.select.addEventListener('change', this.update.bind(this))\n }\n\n togglePicker() {\n this.container.classList.toggle('ql-expanded')\n // Toggle aria-expanded and aria-hidden to make the picker accessible\n toggleAriaAttribute(this.label, 'aria-expanded')\n toggleAriaAttribute(this.options, 'aria-hidden')\n }\n\n buildItem(option) {\n const item = document.createElement('span')\n item.tabIndex = 0\n item.setAttribute('role', 'button')\n item.classList.add('ql-picker-item')\n if (option.hasAttribute('value')) {\n item.setAttribute('data-value', option.getAttribute('value'))\n }\n if (option.textContent) {\n item.setAttribute('data-label', option.textContent)\n }\n item.addEventListener('click', () => {\n this.selectItem(item, true)\n })\n item.addEventListener('keydown', (event) => {\n switch (event.key) {\n case 'Enter':\n this.selectItem(item, true)\n event.preventDefault()\n break\n case 'Escape':\n this.escape()\n event.preventDefault()\n break\n default:\n }\n })\n\n return item\n }\n\n buildLabel() {\n const label = document.createElement('span')\n label.classList.add('ql-picker-label')\n label.innerHTML = `\n <svg viewbox=\"0 0 18 18\">\n <polygon class=\"ql-stroke\" points=\"7 11 9 13 11 11 7 11\"></polygon>\n <polygon class=\"ql-stroke\" points=\"7 7 9 5 11 7 7 7\"></polygon>\n </svg>\n `\n label.tabIndex = 0\n label.setAttribute('role', 'button')\n label.setAttribute('aria-expanded', 'false')\n this.container.appendChild(label)\n return label\n }\n\n buildOptions() {\n const options = document.createElement('span')\n options.classList.add('ql-picker-options')\n\n // Don't want screen readers to read this until options are visible\n options.setAttribute('aria-hidden', 'true')\n options.tabIndex = -1\n\n // Need a unique id for aria-controls\n options.id = `ql-picker-options-${optionsCounter}`\n optionsCounter += 1\n this.label.setAttribute('aria-controls', options.id)\n\n this.options = options\n\n Array.from(this.select.options).forEach((option: any) => {\n const item = this.buildItem(option)\n options.appendChild(item)\n if (option.selected === true) {\n this.selectItem(item)\n }\n })\n this.container.appendChild(options)\n }\n\n buildPicker() {\n Array.from(this.select.attributes).forEach((item: any) => {\n this.container.setAttribute(item.name, item.value)\n })\n this.container.classList.add('ql-picker')\n this.label = this.buildLabel()\n this.buildOptions()\n }\n\n escape() {\n // Close menu and return focus to trigger label\n this.close()\n // Need setTimeout for accessibility to ensure that the browser executes\n // focus on the next process thread and after any DOM content changes\n setTimeout(() => this.label.focus(), 1)\n }\n\n close() {\n this.container.classList.remove('ql-expanded')\n this.label.setAttribute('aria-expanded', 'false')\n this.options.setAttribute('aria-hidden', 'true')\n }\n\n selectItem(item, trigger = false) {\n const selected = this.container.querySelector('.ql-selected')\n if (item === selected) return\n if (!isNullOrUndefined(selected)) {\n selected.classList.remove('ql-selected')\n }\n if (isNullOrUndefined(item)) return\n item.classList.add('ql-selected')\n this.select.selectedIndex = Array.from(item.parentNode.children).indexOf(\n item,\n )\n if (item.hasAttribute('data-value')) {\n this.label.setAttribute('data-value', item.getAttribute('data-value'))\n }\n else {\n this.label.removeAttribute('data-value')\n }\n if (item.hasAttribute('data-label')) {\n this.label.setAttribute('data-label', item.getAttribute('data-label'))\n }\n else {\n this.label.removeAttribute('data-label')\n }\n if (trigger) {\n let ev\n if (typeof Event === 'function') {\n ev = new Event('change')\n }\n else {\n ev = document.createEvent('Event')\n ev.initEvent('change', true, true)\n }\n this.select.dispatchEvent(ev)\n this.close()\n }\n }\n\n update() {\n let option\n if (this.select.selectedIndex > -1) {\n const item = this.container.querySelector('.ql-picker-options').children[\n this.select.selectedIndex\n ]\n option = this.select.options[this.select.selectedIndex]\n this.selectItem(item)\n }\n else {\n this.selectItem(null)\n }\n const isActive\n = !isNullOrUndefined(option)\n && option !== this.select.querySelector('option[selected]')\n\n if (isActive) {\n this.label.classList.add('ql-active')\n }\n else {\n this.label.classList.remove('ql-active')\n }\n }\n}\n\nclass IconPicker extends Picker {\n defaultItem: any\n constructor(select, icons) {\n super(select)\n this.container.classList.add('ql-icon-picker')\n Array.from(this.container.querySelectorAll('.ql-picker-item')).forEach(\n (item: any) => {\n item.innerHTML = icons[item.getAttribute('data-value') || '']\n },\n )\n this.defaultItem = this.container.querySelector('.ql-selected')\n this.selectItem(this.defaultItem, null)\n }\n\n selectItem(target, trigger) {\n super.selectItem(target, trigger)\n const item = target || this.defaultItem\n if (this.label.innerHTML === item.innerHTML) return\n this.label.innerHTML = item.innerHTML\n }\n}\n\nclass ColorPicker extends Picker {\n constructor(select, label) {\n super(select)\n this.label.innerHTML = label\n this.container.classList.add('ql-color-picker')\n Array.from(this.container.querySelectorAll('.ql-picker-item'))\n .slice(0, 7)\n .forEach((item: any) => {\n item.classList.add('ql-primary')\n })\n }\n\n buildItem(option) {\n const item = super.buildItem(option)\n item.style.backgroundColor = option.getAttribute('value') || ''\n return item\n }\n\n selectItem(item, trigger) {\n super.selectItem(item, trigger)\n const colorLabel = this.label.querySelector('.ql-color-label')\n const value = item ? item.getAttribute('data-value') || '' : ''\n if (colorLabel) {\n if (colorLabel.tagName === 'line') {\n colorLabel.style.stroke = value\n }\n else {\n colorLabel.style.fill = value\n }\n }\n }\n}\n\nQuill.register('ui/picker', Picker, true)\nQuill.register('ui/icon-picker', IconPicker, true)\nQuill.register('ui/color-picker', ColorPicker, true)\n\nconst ALIGNS = [false, 'center', 'right']\n\nconst COLORS = [\n '#000000',\n '#e60000',\n '#ff9900',\n '#ffff00',\n '#008a00',\n '#0066cc',\n '#9933ff',\n '#ffffff',\n '#facccc',\n '#ffebcc',\n '#ffffcc',\n '#cce8cc',\n '#cce0f5',\n '#ebd6ff',\n '#bbbbbb',\n '#f06666',\n '#ffc266',\n '#ffff66',\n '#66b966',\n '#66a3e0',\n '#c285ff',\n '#888888',\n '#a10000',\n '#b26b00',\n '#b2b200',\n '#006100',\n '#0047b2',\n '#6b24b2',\n '#444444',\n '#5c0000',\n '#663d00',\n '#666600',\n '#003700',\n '#002966',\n '#3d1466',\n]\n\nconst FONTS = [false, 'serif', 'monospace']\n\nconst HEADERS = ['1', '2', '3', false]\n\nconst SIZES = ['small', false, 'large', 'huge']\n\nSnowTheme.prototype.buildPickers = function (selects, icons) {\n this.pickers = Array.from(selects).map((select: any) => {\n if (select.classList.contains('ql-align')) {\n if (isNullOrUndefined(select.querySelector('option'))) {\n fillSelect(select, ALIGNS)\n }\n return new IconPicker(select, icons.align)\n }\n if (\n select.classList.contains('ql-background')\n || select.classList.contains('ql-color')\n ) {\n const format = select.classList.contains('ql-background')\n ? 'background'\n : 'color'\n if (isNullOrUndefined(select.querySelector('option'))) {\n fillSelect(\n select,\n COLORS,\n )\n }\n return new ColorPicker(select, icons[format])\n }\n if (isNullOrUndefined(select.querySelector('option'))) {\n if (select.classList.contains('ql-font')) {\n fillSelect(select, FONTS)\n }\n else if (select.classList.contains('ql-header')) {\n fillSelect(select, HEADERS)\n }\n else if (select.classList.contains('ql-size')) {\n fillSelect(select, SIZES)\n }\n }\n return new Picker(select)\n })\n const update = () => {\n this.pickers.forEach((picker) => {\n picker.update()\n })\n }\n this.quill.on(Quill.events.EDITOR_CHANGE, update)\n}\n\nfunction fillSelect(select, values, defaultValue = false) {\n values.forEach((value) => {\n const option = document.createElement('option')\n if (value === defaultValue) {\n option.setAttribute('selected', 'selected')\n }\n else {\n option.setAttribute('value', value)\n }\n select.appendChild(option)\n })\n}\n"],"names":["isNullOrUndefined"],"mappings":"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"}
|
package/lib/toolbar/index.cjs.js
CHANGED
|
@@ -107,7 +107,7 @@ class BetterToolbar extends Toolbar {
|
|
|
107
107
|
}
|
|
108
108
|
e.preventDefault();
|
|
109
109
|
}
|
|
110
|
-
this.quill.focus();
|
|
110
|
+
this.quill.focus({ preventScroll: format === "screenshot" });
|
|
111
111
|
const [range] = this.quill.selection.getRange();
|
|
112
112
|
if (this.handlers[format] != null) {
|
|
113
113
|
if (!editor_utils.isNullOrUndefined(window.quillIsIntable) && window.quillIsIntable === true && (format === "blockquote" || format === "code-block" || format === "list" || format === "indent" || format === "clean")) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../../../src/toolbar/index.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { isNullOrUndefined } from '../config/editor.utils'\r\nimport './better-picker'\r\nimport type TypeToolbar from 'quill/modules/toolbar'\r\n\r\nconst Delta = Quill.import('delta')\r\nconst Parchment = Quill.import('parchment')\r\nconst levels = ['error', 'warn', 'log', 'info'] as const\r\nlet level = 'warn' as const\r\n\r\nfunction debuglogger(method: typeof levels[number], ...args) {\r\n if (levels.indexOf(method) <= levels.indexOf(level)) {\r\n console[method](...args) // eslint-disable-line no-console\r\n }\r\n}\r\n\r\nfunction namespace(ns) {\r\n return levels.reduce((logger, method) => {\r\n logger[method] = debuglogger.bind(console, method, ns)\r\n return logger\r\n }, {} as Record<typeof levels[number], (...args: any) => void>)\r\n}\r\n\r\nnamespace.level = (newLevel) => {\r\n level = newLevel\r\n}\r\ndebuglogger.level = namespace.level\r\nconst debug = namespace('quill:toolbar')\r\n\r\nconst Toolbar = Quill.import('modules/toolbar') as typeof TypeToolbar\r\n// let oldClean = Toolbar.DEFAULTS.handlers.clean\r\n\r\nclass BetterToolbar extends Toolbar {\r\n update(range) {\r\n const formats = isNullOrUndefined(range) ? {} : this.quill.getFormat(range) as Record<string, any>\r\n this.controls.forEach((pair) => {\r\n const [format, input] = pair\r\n if (input.tagName === 'SELECT') {\r\n const select = input as HTMLSelectElement\r\n let option\r\n if (isNullOrUndefined(range)) {\r\n option = null\r\n }\r\n else if (isNullOrUndefined(formats[format])) {\r\n option = select.querySelector('option[selected]')\r\n }\r\n else if (!Array.isArray(formats[format])) {\r\n let value = format === 'header' ? formats[format].value : formats[format]\r\n if (typeof value === 'string') {\r\n value = value.replace(/\"/g, '\\\\\"')\r\n }\r\n option = select.querySelector(`option[value=\"${value}\"]`)\r\n }\r\n if (isNullOrUndefined(option)) {\r\n select.value = '' // TODO make configurable?\r\n select.selectedIndex = -1\r\n }\r\n else {\r\n option.selected = true\r\n }\r\n }\r\n else if (isNullOrUndefined(range)) {\r\n input.classList.remove('ql-active')\r\n }\r\n else if (input.hasAttribute('value')) {\r\n // both being null should match (default values)\r\n // '1' should match with 1 (headers)\r\n let isActive\r\n = formats[format] === input.getAttribute('value')\r\n || (!isNullOrUndefined(formats[format])\r\n && (formats[format].value === input.getAttribute('value')\r\n || formats[format].toString() === input.getAttribute('value')))\r\n || (isNullOrUndefined(formats[format]) && !input.getAttribute('value'))\r\n\r\n if (!isActive) {\r\n const checkFormat = formats[format]\r\n if (checkFormat === 'checked' || checkFormat === 'unchecked') {\r\n isActive = input.getAttribute('value') === 'check'\r\n }\r\n }\r\n\r\n if (isActive) {\r\n input.classList.add('ql-active')\r\n }\r\n else {\r\n input.classList.remove('ql-active')\r\n }\r\n }\r\n else {\r\n if (!isNullOrUndefined(formats[format])) {\r\n input.classList.add('ql-active')\r\n }\r\n else {\r\n input.classList.remove('ql-active')\r\n }\r\n }\r\n })\r\n }\r\n\r\n attach(input: HTMLElement) {\r\n let format = Array.from(input.classList).find((className) => {\r\n return className.indexOf('ql-') === 0\r\n })\r\n if (!format) return\r\n format = format.slice('ql-'.length)\r\n\r\n if (input.tagName === 'BUTTON') {\r\n input.setAttribute('type', 'button')\r\n }\r\n\r\n if (this.handlers[format] == null && this.quill.scroll.query(format) == null) {\r\n debug.warn('ignoring attaching to nonexistent format', format, input)\r\n return\r\n }\r\n\r\n const eventName = input.tagName === 'SELECT' ? 'change' : 'click'\r\n input.addEventListener(eventName, (e) => {\r\n let value: boolean | string\r\n\r\n if (input.tagName === 'SELECT') {\r\n const select = input as HTMLSelectElement\r\n if (select.selectedIndex < 0) return\r\n const selected = select.options[select.selectedIndex]\r\n\r\n if (selected.hasAttribute('selected')) {\r\n value = false\r\n }\r\n else {\r\n value = selected.value || false\r\n }\r\n }\r\n else {\r\n const button = input as HTMLButtonElement\r\n if (button.classList.contains('ql-active')) {\r\n value = false\r\n }\r\n else {\r\n value = button.value || !button.hasAttribute('value')\r\n }\r\n e.preventDefault()\r\n }\r\n\r\n this.quill.focus()\r\n const [range] = this.quill.selection.getRange()\r\n if (this.handlers[format] != null) {\r\n // @ts-ignore\r\n if (!isNullOrUndefined(window.quillIsIntable) && window.quillIsIntable === true && (format === 'blockquote' || format === 'code-block' || format === 'list' || format === 'indent' || format === 'clean')) {\r\n return\r\n }\r\n this.handlers[format].call(this, value)\r\n }\r\n else if (\r\n // @ts-ignore\r\n this.quill.scroll.query(format).prototype instanceof Parchment.EmbedBlot\r\n ) {\r\n value = prompt(`Enter ${format}`)\r\n if (!value) return\r\n this.quill.updateContents(\r\n new Delta()\r\n .retain(range.index)\r\n .delete(range.length)\r\n .insert({ [format]: value }),\r\n Quill.sources.USER,\r\n )\r\n }\r\n else {\r\n // @ts-ignore\r\n if (!isNullOrUndefined(window.quillIsIntable) && window.quillIsIntable === true && (format === 'blockquote' || format === 'code-block' || format === 'list' || format === 'indent' || format === 'clean')) {\r\n return\r\n }\r\n this.quill.format(format, value, Quill.sources.USER)\r\n }\r\n\r\n this.update(range)\r\n })\r\n this.controls.push([format, input])\r\n }\r\n}\r\n\r\nexport default BetterToolbar\r\n"],"names":["isNullOrUndefined"],"mappings":";;;;;AAKA,MAAM,QAAQ,MAAM,OAAO,OAAO;AAClC,MAAM,YAAY,MAAM,OAAO,WAAW;AAC1C,MAAM,SAAS,CAAC,SAAS,QAAQ,OAAO,MAAM;AAC9C,IAAI,QAAQ;AAEZ,SAAS,YAAY,WAAkC,MAAM;AAC3D,MAAI,OAAO,QAAQ,MAAM,KAAK,OAAO,QAAQ,KAAK,GAAG;AAC3C,YAAA,MAAM,EAAE,GAAG,IAAI;AAAA,EACzB;AACF;AAEA,SAAS,UAAU,IAAI;AACrB,SAAO,OAAO,OAAO,CAAC,QAAQ,WAAW;AACvC,WAAO,MAAM,IAAI,YAAY,KAAK,SAAS,QAAQ,EAAE;AAC9C,WAAA;AAAA,EACT,GAAG,CAA2D,CAAA;AAChE;AAEA,UAAU,QAAQ,CAAC,aAAa;AACtB,UAAA;AACV;AACA,YAAY,QAAQ,UAAU;AAC9B,MAAM,QAAQ,UAAU,eAAe;AAEvC,MAAM,UAAU,MAAM,OAAO,iBAAiB;AAG9C,MAAM,sBAAsB,QAAQ;AAAA,EAClC,OAAO,OAAO;AACN,UAAA,UAAUA,+BAAkB,KAAK,IAAI,CAAA,IAAK,KAAK,MAAM,UAAU,KAAK;AACrE,SAAA,SAAS,QAAQ,CAAC,SAAS;AACxB,YAAA,CAAC,QAAQ,KAAK,IAAI;AACpB,UAAA,MAAM,YAAY,UAAU;AAC9B,cAAM,SAAS;AACX,YAAA;AACA,YAAAA,aAAAA,kBAAkB,KAAK,GAAG;AACnB,mBAAA;AAAA,QAEF,WAAAA,aAAA,kBAAkB,QAAQ,MAAM,CAAC,GAAG;AAClC,mBAAA,OAAO,cAAc,kBAAkB;AAAA,QAAA,WAEzC,CAAC,MAAM,QAAQ,QAAQ,MAAM,CAAC,GAAG;AACpC,cAAA,QAAQ,WAAW,WAAW,QAAQ,MAAM,EAAE,QAAQ,QAAQ,MAAM;AACpE,cAAA,OAAO,UAAU,UAAU;AACrB,oBAAA,MAAM,QAAQ,MAAM,KAAK;AAAA,UACnC;AACA,mBAAS,OAAO,cAAc,iBAAiB,KAAK,IAAI;AAAA,QAC1D;AACI,YAAAA,aAAAA,kBAAkB,MAAM,GAAG;AAC7B,iBAAO,QAAQ;AACf,iBAAO,gBAAgB;AAAA,QAAA,OAEpB;AACH,iBAAO,WAAW;AAAA,QACpB;AAAA,MAAA,WAEOA,aAAAA,kBAAkB,KAAK,GAAG;AAC3B,cAAA,UAAU,OAAO,WAAW;AAAA,MAE3B,WAAA,MAAM,aAAa,OAAO,GAAG;AAGpC,YAAI,WACA,QAAQ,MAAM,MAAM,MAAM,aAAa,OAAO,KAC5C,CAACA,aAAA,kBAAkB,QAAQ,MAAM,CAAC,MAClC,QAAQ,MAAM,EAAE,UAAU,MAAM,aAAa,OAAO,KACrD,QAAQ,MAAM,EAAE,SAAS,MAAM,MAAM,aAAa,OAAO,MACxDA,aAAA,kBAAkB,QAAQ,MAAM,CAAC,KAAK,CAAC,MAAM,aAAa,OAAO;AAEvE,YAAI,CAAC,UAAU;AACP,gBAAA,cAAc,QAAQ,MAAM;AAC9B,cAAA,gBAAgB,aAAa,gBAAgB,aAAa;AACjD,uBAAA,MAAM,aAAa,OAAO,MAAM;AAAA,UAC7C;AAAA,QACF;AAEA,YAAI,UAAU;AACN,gBAAA,UAAU,IAAI,WAAW;AAAA,QAAA,OAE5B;AACG,gBAAA,UAAU,OAAO,WAAW;AAAA,QACpC;AAAA,MAAA,OAEG;AACH,YAAI,CAACA,aAAA,kBAAkB,QAAQ,MAAM,CAAC,GAAG;AACjC,gBAAA,UAAU,IAAI,WAAW;AAAA,QAAA,OAE5B;AACG,gBAAA,UAAU,OAAO,WAAW;AAAA,QACpC;AAAA,MACF;AAAA,IAAA,CACD;AAAA,EACH;AAAA,EAEA,OAAO,OAAoB;AACrB,QAAA,SAAS,MAAM,KAAK,MAAM,SAAS,EAAE,KAAK,CAAC,cAAc;AACpD,aAAA,UAAU,QAAQ,KAAK,MAAM;AAAA,IAAA,CACrC;AACD,QAAI,CAAC,OAAQ;AACJ,aAAA,OAAO,MAAM,MAAM,MAAM;AAE9B,QAAA,MAAM,YAAY,UAAU;AACxB,YAAA,aAAa,QAAQ,QAAQ;AAAA,IACrC;AAEI,QAAA,KAAK,SAAS,MAAM,KAAK,QAAQ,KAAK,MAAM,OAAO,MAAM,MAAM,KAAK,MAAM;AACtE,YAAA,KAAK,4CAA4C,QAAQ,KAAK;AACpE;AAAA,IACF;AAEA,UAAM,YAAY,MAAM,YAAY,WAAW,WAAW;AACpD,UAAA,iBAAiB,WAAW,CAAC,MAAM;AACnC,UAAA;AAEA,UAAA,MAAM,YAAY,UAAU;AAC9B,cAAM,SAAS;AACX,YAAA,OAAO,gBAAgB,EAAG;AAC9B,cAAM,WAAW,OAAO,QAAQ,OAAO,aAAa;AAEhD,YAAA,SAAS,aAAa,UAAU,GAAG;AAC7B,kBAAA;AAAA,QAAA,OAEL;AACH,kBAAQ,SAAS,SAAS;AAAA,QAC5B;AAAA,MAAA,OAEG;AACH,cAAM,SAAS;AACf,YAAI,OAAO,UAAU,SAAS,WAAW,GAAG;AAClC,kBAAA;AAAA,QAAA,OAEL;AACH,kBAAQ,OAAO,SAAS,CAAC,OAAO,aAAa,OAAO;AAAA,QACtD;AACA,UAAE,eAAe;AAAA,MACnB;AAEA,WAAK,MAAM;AACX,YAAM,CAAC,KAAK,IAAI,KAAK,MAAM,UAAU;AACrC,UAAI,KAAK,SAAS,MAAM,KAAK,MAAM;AAEjC,YAAI,CAACA,aAAkB,kBAAA,OAAO,cAAc,KAAK,OAAO,mBAAmB,SAAS,WAAW,gBAAgB,WAAW,gBAAgB,WAAW,UAAU,WAAW,YAAY,WAAW,UAAU;AACzM;AAAA,QACF;AACA,aAAK,SAAS,MAAM,EAAE,KAAK,MAAM,KAAK;AAAA,MAAA;AAAA;AAAA,QAItC,KAAK,MAAM,OAAO,MAAM,MAAM,EAAE,qBAAqB,UAAU;AAAA,QAC/D;AACQ,gBAAA,OAAO,SAAS,MAAM,EAAE;AAChC,YAAI,CAAC,MAAO;AACZ,aAAK,MAAM;AAAA,UACT,IAAI,MAAM,EACP,OAAO,MAAM,KAAK,EAClB,OAAO,MAAM,MAAM,EACnB,OAAO,EAAE,CAAC,MAAM,GAAG,OAAO;AAAA,UAC7B,MAAM,QAAQ;AAAA,QAAA;AAAA,MAChB,OAEG;AAEH,YAAI,CAACA,aAAkB,kBAAA,OAAO,cAAc,KAAK,OAAO,mBAAmB,SAAS,WAAW,gBAAgB,WAAW,gBAAgB,WAAW,UAAU,WAAW,YAAY,WAAW,UAAU;AACzM;AAAA,QACF;AACA,aAAK,MAAM,OAAO,QAAQ,OAAO,MAAM,QAAQ,IAAI;AAAA,MACrD;AAEA,WAAK,OAAO,KAAK;AAAA,IAAA,CAClB;AACD,SAAK,SAAS,KAAK,CAAC,QAAQ,KAAK,CAAC;AAAA,EACpC;AACF;;"}
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../../src/toolbar/index.ts"],"sourcesContent":["import type TypeToolbar from 'quill/modules/toolbar'\nimport Quill from 'quill'\nimport { isNullOrUndefined } from '../config/editor.utils'\nimport './better-picker'\n\nconst Delta = Quill.import('delta')\nconst Parchment = Quill.import('parchment')\nconst levels = ['error', 'warn', 'log', 'info'] as const\nlet level = 'warn' as const\n\nfunction debuglogger(method: typeof levels[number], ...args) {\n if (levels.indexOf(method) <= levels.indexOf(level)) {\n console[method](...args) // eslint-disable-line no-console\n }\n}\n\nfunction namespace(ns) {\n return levels.reduce((logger, method) => {\n logger[method] = debuglogger.bind(console, method, ns)\n return logger\n }, {} as Record<typeof levels[number], (...args: any) => void>)\n}\n\nnamespace.level = (newLevel) => {\n level = newLevel\n}\ndebuglogger.level = namespace.level\nconst debug = namespace('quill:toolbar')\n\nconst Toolbar = Quill.import('modules/toolbar') as typeof TypeToolbar\n// let oldClean = Toolbar.DEFAULTS.handlers.clean\n\nclass BetterToolbar extends Toolbar {\n update(range) {\n const formats = isNullOrUndefined(range) ? {} : this.quill.getFormat(range) as Record<string, any>\n this.controls.forEach((pair) => {\n const [format, input] = pair\n if (input.tagName === 'SELECT') {\n const select = input as HTMLSelectElement\n let option\n if (isNullOrUndefined(range)) {\n option = null\n }\n else if (isNullOrUndefined(formats[format])) {\n option = select.querySelector('option[selected]')\n }\n else if (!Array.isArray(formats[format])) {\n let value = format === 'header' ? formats[format].value : formats[format]\n if (typeof value === 'string') {\n value = value.replace(/\"/g, '\\\\\"')\n }\n option = select.querySelector(`option[value=\"${value}\"]`)\n }\n if (isNullOrUndefined(option)) {\n select.value = '' // TODO make configurable?\n select.selectedIndex = -1\n }\n else {\n option.selected = true\n }\n }\n else if (isNullOrUndefined(range)) {\n input.classList.remove('ql-active')\n }\n else if (input.hasAttribute('value')) {\n // both being null should match (default values)\n // '1' should match with 1 (headers)\n let isActive\n = formats[format] === input.getAttribute('value')\n || (!isNullOrUndefined(formats[format])\n && (formats[format].value === input.getAttribute('value')\n || formats[format].toString() === input.getAttribute('value')))\n || (isNullOrUndefined(formats[format]) && !input.getAttribute('value'))\n\n if (!isActive) {\n const checkFormat = formats[format]\n if (checkFormat === 'checked' || checkFormat === 'unchecked') {\n isActive = input.getAttribute('value') === 'check'\n }\n }\n\n if (isActive) {\n input.classList.add('ql-active')\n }\n else {\n input.classList.remove('ql-active')\n }\n }\n else {\n if (!isNullOrUndefined(formats[format])) {\n input.classList.add('ql-active')\n }\n else {\n input.classList.remove('ql-active')\n }\n }\n })\n }\n\n attach(input: HTMLElement) {\n let format = Array.from(input.classList).find((className) => {\n return className.indexOf('ql-') === 0\n })\n if (!format) return\n format = format.slice('ql-'.length)\n\n if (input.tagName === 'BUTTON') {\n input.setAttribute('type', 'button')\n }\n\n if (this.handlers[format] == null && this.quill.scroll.query(format) == null) {\n debug.warn('ignoring attaching to nonexistent format', format, input)\n return\n }\n\n const eventName = input.tagName === 'SELECT' ? 'change' : 'click'\n input.addEventListener(eventName, (e) => {\n let value: boolean | string\n\n if (input.tagName === 'SELECT') {\n const select = input as HTMLSelectElement\n if (select.selectedIndex < 0) return\n const selected = select.options[select.selectedIndex]\n\n if (selected.hasAttribute('selected')) {\n value = false\n }\n else {\n value = selected.value || false\n }\n }\n else {\n const button = input as HTMLButtonElement\n if (button.classList.contains('ql-active')) {\n value = false\n }\n else {\n value = button.value || !button.hasAttribute('value')\n }\n e.preventDefault()\n }\n\n this.quill.focus({ preventScroll: format === 'screenshot' })\n const [range] = this.quill.selection.getRange()\n if (this.handlers[format] != null) {\n // @ts-ignore\n if (!isNullOrUndefined(window.quillIsIntable) && window.quillIsIntable === true && (format === 'blockquote' || format === 'code-block' || format === 'list' || format === 'indent' || format === 'clean')) {\n return\n }\n this.handlers[format].call(this, value)\n }\n else if (\n // @ts-ignore\n this.quill.scroll.query(format).prototype instanceof Parchment.EmbedBlot\n ) {\n value = prompt(`Enter ${format}`)\n if (!value) return\n this.quill.updateContents(\n new Delta()\n .retain(range.index)\n .delete(range.length)\n .insert({ [format]: value }),\n Quill.sources.USER,\n )\n }\n else {\n // @ts-ignore\n if (!isNullOrUndefined(window.quillIsIntable) && window.quillIsIntable === true && (format === 'blockquote' || format === 'code-block' || format === 'list' || format === 'indent' || format === 'clean')) {\n return\n }\n this.quill.format(format, value, Quill.sources.USER)\n }\n\n this.update(range)\n })\n this.controls.push([format, input])\n }\n}\n\nexport default BetterToolbar\n"],"names":["isNullOrUndefined"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debounce.cjs.js","sources":["../../../src/utils/debounce.ts"],"sourcesContent":["import { isObject, root } from './method'\
|
|
1
|
+
{"version":3,"file":"debounce.cjs.js","sources":["../../../src/utils/debounce.ts"],"sourcesContent":["import { isObject, root } from './method'\n\nexport function debounce(func, wait, options = undefined) {\n let lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime\n\n let lastInvokeTime = 0\n let leading = false\n let maxing = false\n let trailing = true\n\n // Bypass `requestAnimationFrame` by explicitly setting `wait=0`.\n const useRAF = (!wait && wait !== 0 && typeof root.requestAnimationFrame === 'function')\n\n if (typeof func !== 'function') {\n throw new TypeError('Expected a function')\n }\n wait = +wait || 0\n if (isObject(options)) {\n leading = !!options.leading\n maxing = 'maxWait' in options\n maxWait = maxing ? Math.max(+options.maxWait || 0, wait) : maxWait\n trailing = 'trailing' in options ? !!options.trailing : trailing\n }\n\n function invokeFunc(time) {\n const args = lastArgs\n const thisArg = lastThis\n\n lastArgs = lastThis = undefined\n lastInvokeTime = time\n result = func.apply(thisArg, args)\n return result\n }\n\n function startTimer(pendingFunc, wait) {\n if (useRAF) {\n root.cancelAnimationFrame(timerId)\n return root.requestAnimationFrame(pendingFunc)\n }\n return setTimeout(pendingFunc, wait)\n }\n\n function cancelTimer(id) {\n if (useRAF) {\n return root.cancelAnimationFrame(id)\n }\n clearTimeout(id)\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time\n // Start the timer for the trailing edge.\n timerId = startTimer(timerExpired, wait)\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result\n }\n\n function remainingWait(time) {\n const timeSinceLastCall = time - lastCallTime\n const timeSinceLastInvoke = time - lastInvokeTime\n const timeWaiting = wait - timeSinceLastCall\n\n return maxing\n ? Math.min(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting\n }\n\n function shouldInvoke(time) {\n const timeSinceLastCall = time - lastCallTime\n const timeSinceLastInvoke = time - lastInvokeTime\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait)\n || (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait))\n }\n\n function timerExpired() {\n const time = Date.now()\n if (shouldInvoke(time)) {\n return trailingEdge(time)\n }\n // Restart the timer.\n timerId = startTimer(timerExpired, remainingWait(time))\n }\n\n function trailingEdge(time) {\n timerId = undefined\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time)\n }\n lastArgs = lastThis = undefined\n return result\n }\n\n function cancel() {\n if (timerId !== undefined) {\n cancelTimer(timerId)\n }\n lastInvokeTime = 0\n lastArgs = lastCallTime = lastThis = timerId = undefined\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(Date.now())\n }\n\n function pending() {\n return timerId !== undefined\n }\n\n function debounced(...args) {\n const time = Date.now()\n const isInvoking = shouldInvoke(time)\n\n lastArgs = args\n lastThis = this\n lastCallTime = time\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime)\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = startTimer(timerExpired, wait)\n return invokeFunc(lastCallTime)\n }\n }\n if (timerId === undefined) {\n timerId = startTimer(timerExpired, wait)\n }\n return result\n }\n debounced.cancel = cancel\n debounced.flush = flush\n debounced.pending = pending\n return debounced\n}\n"],"names":["root","isObject","wait"],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
function imgToBase64(imageUrl) {
|
|
4
|
+
return new Promise((resolve, reject) => {
|
|
5
|
+
const canvas = document.createElement("canvas");
|
|
6
|
+
const img = new Image();
|
|
7
|
+
img.crossOrigin = "Anonymous";
|
|
8
|
+
img.src = imageUrl;
|
|
9
|
+
img.onload = function() {
|
|
10
|
+
const ctx = canvas.getContext("2d");
|
|
11
|
+
if (ctx) {
|
|
12
|
+
canvas.height = img.height;
|
|
13
|
+
canvas.width = img.width;
|
|
14
|
+
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
|
15
|
+
ctx.drawImage(img, 0, 0);
|
|
16
|
+
const dataURL = canvas.toDataURL("image/png", 1);
|
|
17
|
+
resolve(dataURL);
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
img.onerror = function() {
|
|
21
|
+
reject(new Error(`Could not load image at ${imageUrl}`));
|
|
22
|
+
};
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
exports.imgToBase64 = imgToBase64;
|
|
26
|
+
//# sourceMappingURL=image.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image.cjs.js","sources":["../../../src/utils/image.ts"],"sourcesContent":["export function imgToBase64(imageUrl: string) {\r\n return new Promise<string>((resolve, reject) => {\r\n const canvas = document.createElement('canvas')\r\n const img = new Image()\r\n img.crossOrigin = 'Anonymous'\r\n img.src = imageUrl\r\n img.onload = function () {\r\n const ctx = canvas.getContext('2d')\r\n if (ctx) {\r\n canvas.height = img.height\r\n canvas.width = img.width\r\n ctx.clearRect(0, 0, canvas.width, canvas.height)\r\n ctx.drawImage(img, 0, 0)\r\n const dataURL = canvas.toDataURL('image/png', 1)\r\n resolve(dataURL)\r\n }\r\n }\r\n img.onerror = function () {\r\n reject(new Error(`Could not load image at ${imageUrl}`))\r\n }\r\n })\r\n}\r\n"],"names":[],"mappings":";;AAAO,SAAS,YAAY,UAAkB;AAC5C,SAAO,IAAI,QAAgB,CAAC,SAAS,WAAW;AACxC,UAAA,SAAS,SAAS,cAAc,QAAQ;AACxC,UAAA,MAAM,IAAI;AAChB,QAAI,cAAc;AAClB,QAAI,MAAM;AACV,QAAI,SAAS,WAAY;AACjB,YAAA,MAAM,OAAO,WAAW,IAAI;AAClC,UAAI,KAAK;AACP,eAAO,SAAS,IAAI;AACpB,eAAO,QAAQ,IAAI;AACnB,YAAI,UAAU,GAAG,GAAG,OAAO,OAAO,OAAO,MAAM;AAC3C,YAAA,UAAU,KAAK,GAAG,CAAC;AACvB,cAAM,UAAU,OAAO,UAAU,aAAa,CAAC;AAC/C,gBAAQ,OAAO;AAAA,MACjB;AAAA,IAAA;AAEF,QAAI,UAAU,WAAY;AACxB,aAAO,IAAI,MAAM,2BAA2B,QAAQ,EAAE,CAAC;AAAA,IAAA;AAAA,EACzD,CACD;AACH;;"}
|
package/lib/utils/method.cjs.js
CHANGED
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
3
3
|
const freeGlobal = typeof global === "object" && global !== null && global.Object === Object && global;
|
|
4
4
|
const freeGlobalThis = typeof globalThis === "object" && globalThis !== null && globalThis.Object == Object && globalThis;
|
|
5
5
|
const freeSelf = typeof self === "object" && self !== null && self.Object === Object && self;
|
|
6
|
-
const root = freeGlobalThis || freeGlobal || freeSelf || Function("return this")();
|
|
6
|
+
const root = freeGlobalThis || freeGlobal || freeSelf || new Function("return this")();
|
|
7
7
|
function isObject(value) {
|
|
8
8
|
const type = typeof value;
|
|
9
9
|
return value != null && (type === "object" || type === "function");
|
|
@@ -34,7 +34,7 @@ function compare(value, other) {
|
|
|
34
34
|
if (value === other) {
|
|
35
35
|
return true;
|
|
36
36
|
}
|
|
37
|
-
if (value
|
|
37
|
+
if (Array.isArray(value) && Array.isArray(other)) {
|
|
38
38
|
return compareArray(value, other);
|
|
39
39
|
}
|
|
40
40
|
if (value instanceof Function || other instanceof Function) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"method.cjs.js","sources":["../../../src/utils/method.ts"],"sourcesContent":["/** Detect free variable `global` from Node.js. */\
|
|
1
|
+
{"version":3,"file":"method.cjs.js","sources":["../../../src/utils/method.ts"],"sourcesContent":["/** Detect free variable `global` from Node.js. */\nconst freeGlobal\n = typeof global === 'object'\n && global !== null\n && global.Object === Object\n && global\n\n/** Detect free variable `globalThis` */\nconst freeGlobalThis\n = typeof globalThis === 'object'\n && globalThis !== null\n && globalThis.Object == Object\n && globalThis\n\n/** Detect free variable `self`. */\nconst freeSelf\n = typeof self === 'object' && self !== null && self.Object === Object && self\n\n/** Used as a reference to the global object. */\nexport const root\n = freeGlobalThis || freeGlobal || freeSelf || new Function('return this')()\n\nexport function isObject(value) {\n const type = typeof value\n return value != null && (type === 'object' || type === 'function')\n}\n\nexport function compareArray(arr1, arr2) {\n if (arr1.length !== arr2.length) {\n return false\n }\n for (let i = 0; i < arr1.length; i++) {\n if (arr1[i] !== arr2[i]) {\n return false\n }\n }\n return true\n}\n\nexport function compareObject(object1, object2) {\n const o1keys = Object.keys(object1)\n const o2keys = Object.keys(object2)\n if (o2keys.length !== o1keys.length) return false\n for (let i = 0; i <= o1keys.length - 1; i++) {\n const key = o1keys[i]\n if (!o2keys.includes(key)) return false\n if (!compare(object2[key], object1[key])) return false\n }\n return true\n}\n\nexport function compare(value, other) {\n if (value === other) {\n return true\n }\n if (Array.isArray(value) && Array.isArray(other)) {\n return compareArray(value, other)\n }\n if (value instanceof Function || other instanceof Function) {\n return false\n }\n if (value instanceof Object && other instanceof Object) {\n return compareObject(value, other)\n }\n return false\n}\n\nexport function unshiftString(str: string, targetLength: number, addString: string): string {\n targetLength = targetLength > 0 ? targetLength : 0\n addString = String((typeof addString !== 'undefined' && typeof addString !== 'object') ? addString : ' ')\n str = (str === undefined || str === null) ? '' : String(str)\n if (str.length >= targetLength) {\n return String(str)\n }\n else {\n targetLength = targetLength - str.length\n if (targetLength > addString.length) {\n addString += addString.repeat(targetLength / addString.length)\n }\n return addString.slice(0, targetLength) + String(str)\n }\n}\n"],"names":[],"mappings":";;AACA,MAAM,aACF,OAAO,WAAW,YACjB,WAAW,QACX,OAAO,WAAW,UAClB;AAGL,MAAM,iBACF,OAAO,eAAe,YACrB,eAAe,QACf,WAAW,UAAU,UACrB;AAGL,MAAM,WACF,OAAO,SAAS,YAAY,SAAS,QAAQ,KAAK,WAAW,UAAU;AAGpE,MAAM,OACT,kBAAkB,cAAc,YAAY,IAAI,SAAS,aAAa,EAAE;AAErE,SAAS,SAAS,OAAO;AAC9B,QAAM,OAAO,OAAO;AACpB,SAAO,SAAS,SAAS,SAAS,YAAY,SAAS;AACzD;AAEgB,SAAA,aAAa,MAAM,MAAM;AACnC,MAAA,KAAK,WAAW,KAAK,QAAQ;AACxB,WAAA;AAAA,EACT;AACA,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,QAAI,KAAK,CAAC,MAAM,KAAK,CAAC,GAAG;AAChB,aAAA;AAAA,IACT;AAAA,EACF;AACO,SAAA;AACT;AAEgB,SAAA,cAAc,SAAS,SAAS;AACxC,QAAA,SAAS,OAAO,KAAK,OAAO;AAC5B,QAAA,SAAS,OAAO,KAAK,OAAO;AAClC,MAAI,OAAO,WAAW,OAAO,OAAe,QAAA;AAC5C,WAAS,IAAI,GAAG,KAAK,OAAO,SAAS,GAAG,KAAK;AACrC,UAAA,MAAM,OAAO,CAAC;AACpB,QAAI,CAAC,OAAO,SAAS,GAAG,EAAU,QAAA;AAC9B,QAAA,CAAC,QAAQ,QAAQ,GAAG,GAAG,QAAQ,GAAG,CAAC,EAAU,QAAA;AAAA,EACnD;AACO,SAAA;AACT;AAEgB,SAAA,QAAQ,OAAO,OAAO;AACpC,MAAI,UAAU,OAAO;AACZ,WAAA;AAAA,EACT;AACA,MAAI,MAAM,QAAQ,KAAK,KAAK,MAAM,QAAQ,KAAK,GAAG;AACzC,WAAA,aAAa,OAAO,KAAK;AAAA,EAClC;AACI,MAAA,iBAAiB,YAAY,iBAAiB,UAAU;AACnD,WAAA;AAAA,EACT;AACI,MAAA,iBAAiB,UAAU,iBAAiB,QAAQ;AAC/C,WAAA,cAAc,OAAO,KAAK;AAAA,EACnC;AACO,SAAA;AACT;AAEgB,SAAA,cAAc,KAAa,cAAsB,WAA2B;AAC3E,iBAAA,eAAe,IAAI,eAAe;AACrC,cAAA,OAAQ,OAAO,cAAc,eAAe,OAAO,cAAc,WAAY,YAAY,GAAG;AACxG,QAAO,QAAQ,UAAa,QAAQ,OAAQ,KAAK,OAAO,GAAG;AACvD,MAAA,IAAI,UAAU,cAAc;AAC9B,WAAO,OAAO,GAAG;AAAA,EAAA,OAEd;AACH,mBAAe,eAAe,IAAI;AAC9B,QAAA,eAAe,UAAU,QAAQ;AACnC,mBAAa,UAAU,OAAO,eAAe,UAAU,MAAM;AAAA,IAC/D;AACA,WAAO,UAAU,MAAM,GAAG,YAAY,IAAI,OAAO,GAAG;AAAA,EACtD;AACF;;;;;;;"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
let scrollBarWidth;
|
|
4
|
+
function getScrollBarWidth({ target = document.body } = {}) {
|
|
5
|
+
var _a;
|
|
6
|
+
if (scrollBarWidth !== void 0) return scrollBarWidth;
|
|
7
|
+
const outer = document.createElement("div");
|
|
8
|
+
outer.className = "scroll__wrap";
|
|
9
|
+
outer.style.visibility = "hidden";
|
|
10
|
+
outer.style.width = "100px";
|
|
11
|
+
outer.style.position = "absolute";
|
|
12
|
+
outer.style.top = "-9999px";
|
|
13
|
+
target.appendChild(outer);
|
|
14
|
+
const widthNoScroll = outer.offsetWidth;
|
|
15
|
+
outer.style.overflow = "scroll";
|
|
16
|
+
const inner = document.createElement("div");
|
|
17
|
+
inner.style.width = "100%";
|
|
18
|
+
outer.appendChild(inner);
|
|
19
|
+
const widthWithScroll = inner.offsetWidth;
|
|
20
|
+
(_a = outer.parentNode) == null ? void 0 : _a.removeChild(outer);
|
|
21
|
+
scrollBarWidth = widthNoScroll - widthWithScroll;
|
|
22
|
+
return scrollBarWidth;
|
|
23
|
+
}
|
|
24
|
+
function lockScroll({ target = document.body } = {}) {
|
|
25
|
+
let scrollBarWidth2 = 0;
|
|
26
|
+
let originWidth = "0";
|
|
27
|
+
const clockClass = "scroll--lock";
|
|
28
|
+
const cleanLock = () => {
|
|
29
|
+
target && (target.style.width = originWidth);
|
|
30
|
+
target.classList.remove(clockClass);
|
|
31
|
+
};
|
|
32
|
+
const hasHiddenClass = target.classList.contains(clockClass);
|
|
33
|
+
if (!hasHiddenClass) {
|
|
34
|
+
originWidth = target.style.width;
|
|
35
|
+
}
|
|
36
|
+
scrollBarWidth2 = getScrollBarWidth({ target });
|
|
37
|
+
const hasOverflow = (target === document.body ? document.documentElement : target).clientHeight < target.scrollHeight;
|
|
38
|
+
const overflowY = window.getComputedStyle(target).overflowY;
|
|
39
|
+
if (scrollBarWidth2 > 0 && (hasOverflow || overflowY === "scroll") && !hasHiddenClass) {
|
|
40
|
+
target.style.width = `calc(100% - ${scrollBarWidth2}px)`;
|
|
41
|
+
}
|
|
42
|
+
target.classList.add(clockClass);
|
|
43
|
+
return cleanLock;
|
|
44
|
+
}
|
|
45
|
+
exports.getScrollBarWidth = getScrollBarWidth;
|
|
46
|
+
exports.lockScroll = lockScroll;
|
|
47
|
+
//# sourceMappingURL=scroll-lock.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scroll-lock.cjs.js","sources":["../../../src/utils/scroll-lock.ts"],"sourcesContent":["let scrollBarWidth: number\r\nexport function getScrollBarWidth({ target = document.body } = {}): number {\r\n if (scrollBarWidth !== undefined) return scrollBarWidth\r\n\r\n const outer = document.createElement('div')\r\n outer.className = 'scroll__wrap'\r\n outer.style.visibility = 'hidden'\r\n outer.style.width = '100px'\r\n outer.style.position = 'absolute'\r\n outer.style.top = '-9999px'\r\n target.appendChild(outer)\r\n\r\n const widthNoScroll = outer.offsetWidth\r\n outer.style.overflow = 'scroll'\r\n\r\n const inner = document.createElement('div')\r\n inner.style.width = '100%'\r\n outer.appendChild(inner)\r\n\r\n const widthWithScroll = inner.offsetWidth\r\n outer.parentNode?.removeChild(outer)\r\n scrollBarWidth = widthNoScroll - widthWithScroll\r\n\r\n return scrollBarWidth\r\n}\r\n\r\nexport function lockScroll({ target = document.body } = {}) {\r\n let scrollBarWidth = 0\r\n let originWidth = '0'\r\n\r\n const clockClass = 'scroll--lock'\r\n\r\n const cleanLock = () => {\r\n target && (target.style.width = originWidth)\r\n target.classList.remove(clockClass)\r\n }\r\n\r\n const hasHiddenClass = target.classList.contains(clockClass)\r\n if (!hasHiddenClass) {\r\n originWidth = target.style.width\r\n }\r\n scrollBarWidth = getScrollBarWidth({ target })\r\n const hasOverflow = (target === document.body ? document.documentElement : target).clientHeight < target.scrollHeight\r\n const overflowY = window.getComputedStyle(target).overflowY\r\n // only when the scrollbar exists needs to reduce width\r\n if (scrollBarWidth > 0 && (hasOverflow || overflowY === 'scroll') && !hasHiddenClass) {\r\n target.style.width = `calc(100% - ${scrollBarWidth}px)`\r\n }\r\n target.classList.add(clockClass)\r\n\r\n return cleanLock\r\n}\r\n"],"names":["scrollBarWidth"],"mappings":";;AAAA,IAAI;AACG,SAAS,kBAAkB,EAAE,SAAS,SAAS,KAAK,IAAI,CAAA,GAAY;;AACrE,MAAA,mBAAmB,OAAkB,QAAA;AAEnC,QAAA,QAAQ,SAAS,cAAc,KAAK;AAC1C,QAAM,YAAY;AAClB,QAAM,MAAM,aAAa;AACzB,QAAM,MAAM,QAAQ;AACpB,QAAM,MAAM,WAAW;AACvB,QAAM,MAAM,MAAM;AAClB,SAAO,YAAY,KAAK;AAExB,QAAM,gBAAgB,MAAM;AAC5B,QAAM,MAAM,WAAW;AAEjB,QAAA,QAAQ,SAAS,cAAc,KAAK;AAC1C,QAAM,MAAM,QAAQ;AACpB,QAAM,YAAY,KAAK;AAEvB,QAAM,kBAAkB,MAAM;AACxB,cAAA,eAAA,mBAAY,YAAY;AAC9B,mBAAiB,gBAAgB;AAE1B,SAAA;AACT;AAEO,SAAS,WAAW,EAAE,SAAS,SAAS,KAAK,IAAI,CAAA,GAAI;AAC1D,MAAIA,kBAAiB;AACrB,MAAI,cAAc;AAElB,QAAM,aAAa;AAEnB,QAAM,YAAY,MAAM;AACX,eAAA,OAAO,MAAM,QAAQ;AACzB,WAAA,UAAU,OAAO,UAAU;AAAA,EAAA;AAGpC,QAAM,iBAAiB,OAAO,UAAU,SAAS,UAAU;AAC3D,MAAI,CAAC,gBAAgB;AACnB,kBAAc,OAAO,MAAM;AAAA,EAC7B;AACAA,oBAAiB,kBAAkB,EAAE,OAAA,CAAQ;AACvC,QAAA,eAAe,WAAW,SAAS,OAAO,SAAS,kBAAkB,QAAQ,eAAe,OAAO;AACzG,QAAM,YAAY,OAAO,iBAAiB,MAAM,EAAE;AAElD,MAAIA,kBAAiB,MAAM,eAAe,cAAc,aAAa,CAAC,gBAAgB;AAC7E,WAAA,MAAM,QAAQ,eAAeA,eAAc;AAAA,EACpD;AACO,SAAA,UAAU,IAAI,UAAU;AAExB,SAAA;AACT;;;"}
|
package/lib/video/index.cjs.js
CHANGED
|
@@ -15,15 +15,18 @@ class Video extends BlockEmbed {
|
|
|
15
15
|
VIDEO_ATTRIBUTES.forEach((key) => {
|
|
16
16
|
if (value[key]) {
|
|
17
17
|
switch (key) {
|
|
18
|
-
case "src":
|
|
18
|
+
case "src": {
|
|
19
19
|
const src = Video.sanitize(value[key]);
|
|
20
20
|
node.setAttribute(key, src);
|
|
21
21
|
break;
|
|
22
|
-
|
|
22
|
+
}
|
|
23
|
+
case "title": {
|
|
23
24
|
node.setAttribute(key, value[key]);
|
|
24
25
|
break;
|
|
25
|
-
|
|
26
|
+
}
|
|
27
|
+
default: {
|
|
26
28
|
node.dataset[key] = value[key];
|
|
29
|
+
}
|
|
27
30
|
}
|
|
28
31
|
}
|
|
29
32
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../../../src/video/index.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../../src/video/index.ts"],"sourcesContent":["import type { Parchment as TypeParchment } from 'quill'\nimport Quill from 'quill'\nimport { sanitize } from '../config/editor.utils'\n\nconst BlockEmbed = Quill.imports['blots/block/embed'] as TypeParchment.BlotConstructor\nconst VIDEO_ATTRIBUTES = ['id', 'title', 'src']\n\nclass Video extends BlockEmbed {\n static blotName: string\n static tagName: string\n static SANITIZED_URL: string\n static PROTOCOL_WHITELIST: string[]\n static className: string\n statics: any\n domNode: any\n\n static sanitize(url) {\n return sanitize(url, this.PROTOCOL_WHITELIST) ? url : this.SANITIZED_URL\n }\n\n static create(value) {\n const node = super.create(value) as HTMLElement\n node.setAttribute('contenteditable', 'false')\n node.setAttribute('controls', 'controls')\n VIDEO_ATTRIBUTES.forEach((key) => {\n if (value[key]) {\n switch (key) {\n case 'src':{ const src = Video.sanitize(value[key])\n node.setAttribute(key, src)\n break\n }\n case 'title': {\n node.setAttribute(key, value[key])\n break\n }\n default: {\n node.dataset[key] = value[key]\n }\n }\n }\n })\n return node\n }\n\n static value(domNode) {\n const formats: any = {}\n VIDEO_ATTRIBUTES.forEach((key) => {\n const value = domNode.getAttribute(key) || domNode.dataset[key]\n if (value) {\n formats[key] = value\n }\n })\n return formats\n }\n}\nVideo.blotName = 'video'\nVideo.tagName = 'VIDEO'\nVideo.SANITIZED_URL = 'about:blank'\nVideo.PROTOCOL_WHITELIST = ['http', 'https']\nVideo.className = 'ql-video-item'\n\nexport default Video\n"],"names":["sanitize"],"mappings":";;;;AAIA,MAAM,aAAa,MAAM,QAAQ,mBAAmB;AACpD,MAAM,mBAAmB,CAAC,MAAM,SAAS,KAAK;AAE9C,MAAM,cAAc,WAAW;AAAA,EAS7B,OAAO,SAAS,KAAK;AACnB,WAAOA,aAAAA,SAAS,KAAK,KAAK,kBAAkB,IAAI,MAAM,KAAK;AAAA,EAC7D;AAAA,EAEA,OAAO,OAAO,OAAO;AACb,UAAA,OAAO,MAAM,OAAO,KAAK;AAC1B,SAAA,aAAa,mBAAmB,OAAO;AACvC,SAAA,aAAa,YAAY,UAAU;AACvB,qBAAA,QAAQ,CAAC,QAAQ;AAC5B,UAAA,MAAM,GAAG,GAAG;AACd,gBAAQ,KAAK;AAAA,UACX,KAAK,OAAM;AAAE,kBAAM,MAAM,MAAM,SAAS,MAAM,GAAG,CAAC;AAC3C,iBAAA,aAAa,KAAK,GAAG;AAC1B;AAAA,UACF;AAAA,UACA,KAAK,SAAS;AACZ,iBAAK,aAAa,KAAK,MAAM,GAAG,CAAC;AACjC;AAAA,UACF;AAAA,UACA,SAAS;AACP,iBAAK,QAAQ,GAAG,IAAI,MAAM,GAAG;AAAA,UAC/B;AAAA,QACF;AAAA,MACF;AAAA,IAAA,CACD;AACM,WAAA;AAAA,EACT;AAAA,EAEA,OAAO,MAAM,SAAS;AACpB,UAAM,UAAe,CAAA;AACJ,qBAAA,QAAQ,CAAC,QAAQ;AAChC,YAAM,QAAQ,QAAQ,aAAa,GAAG,KAAK,QAAQ,QAAQ,GAAG;AAC9D,UAAI,OAAO;AACT,gBAAQ,GAAG,IAAI;AAAA,MACjB;AAAA,IAAA,CACD;AACM,WAAA;AAAA,EACT;AACF;AACA,MAAM,WAAW;AACjB,MAAM,UAAU;AAChB,MAAM,gBAAgB;AACtB,MAAM,qBAAqB,CAAC,QAAQ,OAAO;AAC3C,MAAM,YAAY;;"}
|
package/package.json
CHANGED
|
@@ -1,55 +1,61 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@opentiny/fluent-editor",
|
|
3
|
-
"version": "3.
|
|
4
|
-
"description": "A rich text editor based on Quill 2.0, which extends rich modules and formats on the basis of Quill. It's powerful and out-of-the-box.",
|
|
5
|
-
"
|
|
6
|
-
"
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
"opentiny"
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
"
|
|
24
|
-
|
|
25
|
-
"
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
"
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
"
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
"
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
|
|
55
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "@opentiny/fluent-editor",
|
|
3
|
+
"version": "3.20.1",
|
|
4
|
+
"description": "A rich text editor based on Quill 2.0, which extends rich modules and formats on the basis of Quill. It's powerful and out-of-the-box.",
|
|
5
|
+
"author": "OpenTiny Team",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"homepage": "https://opentiny.github.io/fluent-editor/",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git@github.com:opentiny/fluent-editor.git"
|
|
11
|
+
},
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/opentiny/fluent-editor/issues"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"editor",
|
|
17
|
+
"rich-text-editor",
|
|
18
|
+
"rich-text",
|
|
19
|
+
"wysiwyg",
|
|
20
|
+
"wysiwyg-editor",
|
|
21
|
+
"quill",
|
|
22
|
+
"opentiny",
|
|
23
|
+
"fluent-editor"
|
|
24
|
+
],
|
|
25
|
+
"exports": {
|
|
26
|
+
".": {
|
|
27
|
+
"import": "./es/index.es.js",
|
|
28
|
+
"require": "./lib/index.cjs.js"
|
|
29
|
+
},
|
|
30
|
+
"./style.css": "./theme/style.css"
|
|
31
|
+
},
|
|
32
|
+
"main": "lib/index.cjs.js",
|
|
33
|
+
"module": "es/index.es.js",
|
|
34
|
+
"scripts": {
|
|
35
|
+
"start": "vite build && vite",
|
|
36
|
+
"dev": "vite",
|
|
37
|
+
"build": "vite build && pnpm build:theme && node scripts/pre-release.js",
|
|
38
|
+
"build:theme": "vite build --config vite.config.theme.ts",
|
|
39
|
+
"test": "jest"
|
|
40
|
+
},
|
|
41
|
+
"peerDependencies": {
|
|
42
|
+
"quill": "^2.0.0"
|
|
43
|
+
},
|
|
44
|
+
"dependencies": {
|
|
45
|
+
"lodash-es": "^4.17.15"
|
|
46
|
+
},
|
|
47
|
+
"devDependencies": {
|
|
48
|
+
"@types/jest": "^26.0.23",
|
|
49
|
+
"commander": "^6.2.0",
|
|
50
|
+
"glob": "^11.0.0",
|
|
51
|
+
"highlight.js": "^10.2.0",
|
|
52
|
+
"html2canvas": "^1.4.1",
|
|
53
|
+
"jest": "^26.6.3",
|
|
54
|
+
"sass": "^1.47.0",
|
|
55
|
+
"shelljs": "^0.8.4",
|
|
56
|
+
"ts-jest": "^26.5.6",
|
|
57
|
+
"ts-node": "^9.1.1",
|
|
58
|
+
"typescript": "^4.9.5",
|
|
59
|
+
"vite": "^5.0.0"
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -3440,6 +3440,87 @@ li.unchecked > .ql-ui {
|
|
|
3440
3440
|
:fullscreen {
|
|
3441
3441
|
background-color: white !important;
|
|
3442
3442
|
}
|
|
3443
|
+
.scroll--lock {
|
|
3444
|
+
overflow: hidden !important;
|
|
3445
|
+
}
|
|
3446
|
+
.scroll__wrap {
|
|
3447
|
+
overflow: auto;
|
|
3448
|
+
height: 100%;
|
|
3449
|
+
}
|
|
3450
|
+
.ql-screenshot-wrapper {
|
|
3451
|
+
--ql-screenshot-color-bg: rgba(0, 0, 0, 0.5);
|
|
3452
|
+
--ql-screenshot-color-confirm: #2196F3;
|
|
3453
|
+
--ql-screenshot-color-cancel: #ef1749;
|
|
3454
|
+
}
|
|
3455
|
+
.ql-screenshot-wrapper .ql-screenshot-cancel,
|
|
3456
|
+
.ql-screenshot-wrapper .ql-screenshot-confirm {
|
|
3457
|
+
position: relative;
|
|
3458
|
+
height: 16px;
|
|
3459
|
+
width: 16px;
|
|
3460
|
+
cursor: pointer;
|
|
3461
|
+
}
|
|
3462
|
+
.ql-screenshot-wrapper .ql-screenshot-confirm {
|
|
3463
|
+
background-color: var(--ql-screenshot-color-confirm);
|
|
3464
|
+
}
|
|
3465
|
+
.ql-screenshot-wrapper .ql-screenshot-confirm::after {
|
|
3466
|
+
content: "";
|
|
3467
|
+
position: absolute;
|
|
3468
|
+
left: 6px;
|
|
3469
|
+
top: 3px;
|
|
3470
|
+
width: 5px;
|
|
3471
|
+
height: 10px;
|
|
3472
|
+
border: solid #fff;
|
|
3473
|
+
border-width: 0 3px 3px 0;
|
|
3474
|
+
transform: rotate(45deg);
|
|
3475
|
+
}
|
|
3476
|
+
.ql-screenshot-wrapper .ql-screenshot-cancel {
|
|
3477
|
+
background-color: var(--ql-screenshot-color-cancel);
|
|
3478
|
+
}
|
|
3479
|
+
.ql-screenshot-wrapper .ql-screenshot-cancel::after {
|
|
3480
|
+
content: "";
|
|
3481
|
+
position: absolute;
|
|
3482
|
+
left: 7px;
|
|
3483
|
+
top: 2px;
|
|
3484
|
+
width: 2px;
|
|
3485
|
+
height: 12px;
|
|
3486
|
+
border: solid #fff;
|
|
3487
|
+
border-width: 0 3px 3px 0;
|
|
3488
|
+
transform: rotate(45deg);
|
|
3489
|
+
}
|
|
3490
|
+
.ql-screenshot-wrapper .ql-screenshot-cancel::before {
|
|
3491
|
+
content: "";
|
|
3492
|
+
position: absolute;
|
|
3493
|
+
left: 7px;
|
|
3494
|
+
top: 2px;
|
|
3495
|
+
width: 2px;
|
|
3496
|
+
height: 12px;
|
|
3497
|
+
border: solid #fff;
|
|
3498
|
+
border-width: 0 3px 3px 0;
|
|
3499
|
+
transform: rotate(-45deg);
|
|
3500
|
+
}
|
|
3501
|
+
.ql-screenshot-mask {
|
|
3502
|
+
position: fixed;
|
|
3503
|
+
inset: 0;
|
|
3504
|
+
background-color: var(--ql-screenshot-color-bg);
|
|
3505
|
+
z-index: 50;
|
|
3506
|
+
}
|
|
3507
|
+
.ql-screenshot-cutter {
|
|
3508
|
+
position: fixed;
|
|
3509
|
+
border: 1px solid #fff;
|
|
3510
|
+
z-index: 50;
|
|
3511
|
+
}
|
|
3512
|
+
.ql-screenshot-coordinate, .ql-screenshot-done {
|
|
3513
|
+
position: absolute;
|
|
3514
|
+
bottom: 0;
|
|
3515
|
+
right: 0;
|
|
3516
|
+
font-size: 14px;
|
|
3517
|
+
white-space: nowrap;
|
|
3518
|
+
}
|
|
3519
|
+
.ql-screenshot-done {
|
|
3520
|
+
display: flex;
|
|
3521
|
+
border-top: 1px solid #333;
|
|
3522
|
+
border-left: 1px solid #333;
|
|
3523
|
+
}
|
|
3443
3524
|
.ql-counter {
|
|
3444
3525
|
width: 100%;
|
|
3445
3526
|
bottom: 0;
|
|
@@ -3666,22 +3747,27 @@ li.unchecked > .ql-ui {
|
|
|
3666
3747
|
.ql-toolbar.toolbar-bottom {
|
|
3667
3748
|
border-top: 0;
|
|
3668
3749
|
}
|
|
3669
|
-
.ql-toolbar
|
|
3670
|
-
|
|
3671
|
-
|
|
3672
|
-
|
|
3673
|
-
|
|
3674
|
-
.ql-toolbar
|
|
3675
|
-
.ql-toolbar
|
|
3750
|
+
.ql-toolbar.ql-snow button {
|
|
3751
|
+
display: inline-flex;
|
|
3752
|
+
align-items: center;
|
|
3753
|
+
justify-content: center;
|
|
3754
|
+
}
|
|
3755
|
+
.ql-toolbar.ql-snow .ql-active,
|
|
3756
|
+
.ql-toolbar.ql-snow .ql-picker-label.ql-active,
|
|
3757
|
+
.ql-toolbar.ql-snow .ql-picker-label:hover,
|
|
3758
|
+
.ql-toolbar.ql-snow .ql-picker-item.ql-selected,
|
|
3759
|
+
.ql-toolbar.ql-snow .ql-picker-item:hover,
|
|
3760
|
+
.ql-toolbar.ql-snow button.ql-active,
|
|
3761
|
+
.ql-toolbar.ql-snow button:hover {
|
|
3676
3762
|
color: #5e7ce0;
|
|
3677
3763
|
}
|
|
3678
|
-
.ql-toolbar .ql-active .icon-triangle-down,
|
|
3679
|
-
.ql-toolbar .ql-picker-label.ql-active .icon-triangle-down,
|
|
3680
|
-
.ql-toolbar .ql-picker-label:hover .icon-triangle-down,
|
|
3681
|
-
.ql-toolbar .ql-picker-item.ql-selected .icon-triangle-down,
|
|
3682
|
-
.ql-toolbar .ql-picker-item:hover .icon-triangle-down,
|
|
3683
|
-
.ql-toolbar button.ql-active .icon-triangle-down,
|
|
3684
|
-
.ql-toolbar button:hover .icon-triangle-down {
|
|
3764
|
+
.ql-toolbar.ql-snow .ql-active .icon-triangle-down,
|
|
3765
|
+
.ql-toolbar.ql-snow .ql-picker-label.ql-active .icon-triangle-down,
|
|
3766
|
+
.ql-toolbar.ql-snow .ql-picker-label:hover .icon-triangle-down,
|
|
3767
|
+
.ql-toolbar.ql-snow .ql-picker-item.ql-selected .icon-triangle-down,
|
|
3768
|
+
.ql-toolbar.ql-snow .ql-picker-item:hover .icon-triangle-down,
|
|
3769
|
+
.ql-toolbar.ql-snow button.ql-active .icon-triangle-down,
|
|
3770
|
+
.ql-toolbar.ql-snow button:hover .icon-triangle-down {
|
|
3685
3771
|
border-top-color: #5e7ce0;
|
|
3686
3772
|
}
|
|
3687
3773
|
.ql-toolbar .ql-picker-item:focus,
|
package/es/types/vue.d.es.js
DELETED
package/es/types/vue.d.es.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"vue.d.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
package/lib/types/vue.d.cjs.js
DELETED