@opentiny/fluent-editor 3.25.3 → 4.0.0-alpha.0
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/es/attributors/font-style.es.js +1 -1
- package/es/attributors/font-style.es.js.map +1 -1
- package/es/attributors/line-height.es.js +1 -1
- package/es/attributors/line-height.es.js.map +1 -1
- package/es/config/editor.utils.es.js +0 -9
- package/es/config/editor.utils.es.js.map +1 -1
- package/es/config/i18n/en-us.es.js +33 -4
- package/es/config/i18n/en-us.es.js.map +1 -1
- package/es/config/i18n/zh-cn.es.js +33 -4
- package/es/config/i18n/zh-cn.es.js.map +1 -1
- package/es/config/index.es.js +1 -2
- package/es/core/fluent-editor.es.js +3 -0
- package/es/core/fluent-editor.es.js.map +1 -1
- package/es/fluent-editor.es.js +12 -9
- package/es/fluent-editor.es.js.map +1 -1
- package/es/index.es.js +5 -2
- package/es/index.es.js.map +1 -1
- package/es/modules/custom-clipboard.es.js +1 -57
- package/es/modules/custom-clipboard.es.js.map +1 -1
- package/es/modules/custom-image/image-bar.es.js +2 -1
- package/es/modules/custom-image/image-bar.es.js.map +1 -1
- package/es/modules/i18n.es.js +4 -3
- package/es/modules/i18n.es.js.map +1 -1
- package/es/modules/link/index.es.js +0 -17
- package/es/modules/link/index.es.js.map +1 -1
- package/es/modules/mathlive/tooltip.es.js +8 -3
- package/es/modules/mathlive/tooltip.es.js.map +1 -1
- package/es/modules/shortcut-key/index.es.js +213 -0
- package/es/modules/shortcut-key/index.es.js.map +1 -0
- package/es/modules/table-up/index.es.js +61 -0
- package/es/modules/table-up/index.es.js.map +1 -0
- package/es/modules/toolbar/better-picker.es.js +21 -269
- package/es/modules/toolbar/better-picker.es.js.map +1 -1
- package/es/modules/toolbar/index.es.js +0 -1
- package/es/modules/toolbar/index.es.js.map +1 -1
- package/es/modules/toolbar/toolbar-tip.es.js +38 -8
- package/es/modules/toolbar/toolbar-tip.es.js.map +1 -1
- package/es/themes/snow.es.js +185 -46
- package/es/themes/snow.es.js.map +1 -1
- package/es/ui/icons.config.es.js +6 -5
- package/es/ui/icons.config.es.js.map +1 -1
- package/es/ui/icons.es.js +3 -12
- package/es/ui/icons.es.js.map +1 -1
- package/lib/attributors/font-style.cjs.js +1 -1
- package/lib/attributors/font-style.cjs.js.map +1 -1
- package/lib/attributors/line-height.cjs.js +1 -1
- package/lib/attributors/line-height.cjs.js.map +1 -1
- package/lib/config/editor.utils.cjs.js +0 -9
- package/lib/config/editor.utils.cjs.js.map +1 -1
- package/lib/config/i18n/en-us.cjs.js +33 -4
- package/lib/config/i18n/en-us.cjs.js.map +1 -1
- package/lib/config/i18n/zh-cn.cjs.js +33 -4
- package/lib/config/i18n/zh-cn.cjs.js.map +1 -1
- package/lib/config/index.cjs.js +0 -1
- package/lib/config/index.cjs.js.map +1 -1
- package/lib/core/fluent-editor.cjs.js +3 -0
- package/lib/core/fluent-editor.cjs.js.map +1 -1
- package/lib/fluent-editor.cjs.js +12 -9
- package/lib/fluent-editor.cjs.js.map +1 -1
- package/lib/index.cjs.js +7 -1
- package/lib/index.cjs.js.map +1 -1
- package/lib/modules/custom-clipboard.cjs.js +0 -56
- package/lib/modules/custom-clipboard.cjs.js.map +1 -1
- package/lib/modules/custom-image/image-bar.cjs.js +2 -1
- package/lib/modules/custom-image/image-bar.cjs.js.map +1 -1
- package/lib/modules/i18n.cjs.js +4 -3
- package/lib/modules/i18n.cjs.js.map +1 -1
- package/lib/modules/link/index.cjs.js +0 -17
- package/lib/modules/link/index.cjs.js.map +1 -1
- package/lib/modules/mathlive/tooltip.cjs.js +8 -3
- package/lib/modules/mathlive/tooltip.cjs.js.map +1 -1
- package/lib/modules/shortcut-key/index.cjs.js +213 -0
- package/lib/modules/shortcut-key/index.cjs.js.map +1 -0
- package/lib/modules/table-up/index.cjs.js +61 -0
- package/lib/modules/table-up/index.cjs.js.map +1 -0
- package/lib/modules/toolbar/better-picker.cjs.js +21 -270
- package/lib/modules/toolbar/better-picker.cjs.js.map +1 -1
- package/lib/modules/toolbar/index.cjs.js +0 -1
- package/lib/modules/toolbar/index.cjs.js.map +1 -1
- package/lib/modules/toolbar/toolbar-tip.cjs.js +38 -8
- package/lib/modules/toolbar/toolbar-tip.cjs.js.map +1 -1
- package/lib/themes/snow.cjs.js +187 -48
- package/lib/themes/snow.cjs.js.map +1 -1
- package/lib/ui/icons.cjs.js +2 -11
- package/lib/ui/icons.cjs.js.map +1 -1
- package/lib/ui/icons.config.cjs.js +6 -5
- package/lib/ui/icons.config.cjs.js.map +1 -1
- package/package.json +5 -3
- package/style.css +315 -2135
- package/types/attributors/font-style.d.ts +1 -1
- package/types/config/editor.config.d.ts +62 -6
- package/types/config/editor.utils.d.ts +0 -1
- package/types/config/i18n/en-us.d.ts +31 -3
- package/types/config/i18n/zh-cn.d.ts +31 -3
- package/types/config/types/toolbar-item.interface.d.ts +11 -11
- package/types/core/fluent-editor.d.ts +1 -0
- package/types/index.d.ts +2 -0
- package/types/modules/i18n.d.ts +1 -1
- package/types/modules/shortcut-key/index.d.ts +97 -0
- package/types/modules/table-up/index.d.ts +66 -0
- package/types/modules/toolbar/better-picker.d.ts +15 -0
- package/types/themes/snow.d.ts +10 -2
- package/types/ui/icons.config.d.ts +2 -2
- package/es/modules/global-link/constants.es.js +0 -9
- package/es/modules/global-link/constants.es.js.map +0 -1
- package/es/modules/global-link/formats/customer-widget-link.es.js +0 -28
- package/es/modules/global-link/formats/customer-widget-link.es.js.map +0 -1
- package/es/modules/global-link/formats/doc-link.es.js +0 -42
- package/es/modules/global-link/formats/doc-link.es.js.map +0 -1
- package/es/modules/global-link/formats/wiki-link.es.js +0 -34
- package/es/modules/global-link/formats/wiki-link.es.js.map +0 -1
- package/es/modules/global-link/formats/work-item-link.es.js +0 -36
- package/es/modules/global-link/formats/work-item-link.es.js.map +0 -1
- package/es/modules/global-link/global-link-panel.es.js +0 -2
- package/es/modules/global-link/global-link-panel.es.js.map +0 -1
- package/es/modules/global-link/index.es.js +0 -139
- package/es/modules/global-link/index.es.js.map +0 -1
- package/es/modules/global-link/utils/createTable.es.js +0 -50
- package/es/modules/global-link/utils/createTable.es.js.map +0 -1
- package/es/modules/quick-menu.es.js +0 -82
- package/es/modules/quick-menu.es.js.map +0 -1
- package/es/modules/table/better-table.es.js +0 -485
- package/es/modules/table/better-table.es.js.map +0 -1
- package/es/modules/table/formats/header.es.js +0 -94
- package/es/modules/table/formats/header.es.js.map +0 -1
- package/es/modules/table/formats/list.es.js +0 -163
- package/es/modules/table/formats/list.es.js.map +0 -1
- package/es/modules/table/formats/table.es.js +0 -969
- package/es/modules/table/formats/table.es.js.map +0 -1
- package/es/modules/table/modules/table-column-tool.es.js +0 -400
- package/es/modules/table/modules/table-column-tool.es.js.map +0 -1
- package/es/modules/table/modules/table-operation-menu.es.js +0 -475
- package/es/modules/table/modules/table-operation-menu.es.js.map +0 -1
- package/es/modules/table/modules/table-scroll-bar.es.js +0 -190
- package/es/modules/table/modules/table-scroll-bar.es.js.map +0 -1
- package/es/modules/table/modules/table-selection.es.js +0 -305
- package/es/modules/table/modules/table-selection.es.js.map +0 -1
- package/es/modules/table/modules/table-selector.es.js +0 -158
- package/es/modules/table/modules/table-selector.es.js.map +0 -1
- package/es/modules/table/table-config.es.js +0 -74
- package/es/modules/table/table-config.es.js.map +0 -1
- package/es/modules/table/utils/index.es.js +0 -54
- package/es/modules/table/utils/index.es.js.map +0 -1
- package/es/modules/table/utils/node-matchers.es.js +0 -292
- package/es/modules/table/utils/node-matchers.es.js.map +0 -1
- package/lib/modules/global-link/constants.cjs.js +0 -9
- package/lib/modules/global-link/constants.cjs.js.map +0 -1
- package/lib/modules/global-link/formats/customer-widget-link.cjs.js +0 -28
- package/lib/modules/global-link/formats/customer-widget-link.cjs.js.map +0 -1
- package/lib/modules/global-link/formats/doc-link.cjs.js +0 -42
- package/lib/modules/global-link/formats/doc-link.cjs.js.map +0 -1
- package/lib/modules/global-link/formats/wiki-link.cjs.js +0 -34
- package/lib/modules/global-link/formats/wiki-link.cjs.js.map +0 -1
- package/lib/modules/global-link/formats/work-item-link.cjs.js +0 -36
- package/lib/modules/global-link/formats/work-item-link.cjs.js.map +0 -1
- package/lib/modules/global-link/global-link-panel.cjs.js +0 -2
- package/lib/modules/global-link/global-link-panel.cjs.js.map +0 -1
- package/lib/modules/global-link/index.cjs.js +0 -139
- package/lib/modules/global-link/index.cjs.js.map +0 -1
- package/lib/modules/global-link/utils/createTable.cjs.js +0 -50
- package/lib/modules/global-link/utils/createTable.cjs.js.map +0 -1
- package/lib/modules/quick-menu.cjs.js +0 -82
- package/lib/modules/quick-menu.cjs.js.map +0 -1
- package/lib/modules/table/better-table.cjs.js +0 -485
- package/lib/modules/table/better-table.cjs.js.map +0 -1
- package/lib/modules/table/formats/header.cjs.js +0 -94
- package/lib/modules/table/formats/header.cjs.js.map +0 -1
- package/lib/modules/table/formats/list.cjs.js +0 -163
- package/lib/modules/table/formats/list.cjs.js.map +0 -1
- package/lib/modules/table/formats/table.cjs.js +0 -969
- package/lib/modules/table/formats/table.cjs.js.map +0 -1
- package/lib/modules/table/modules/table-column-tool.cjs.js +0 -400
- package/lib/modules/table/modules/table-column-tool.cjs.js.map +0 -1
- package/lib/modules/table/modules/table-operation-menu.cjs.js +0 -475
- package/lib/modules/table/modules/table-operation-menu.cjs.js.map +0 -1
- package/lib/modules/table/modules/table-scroll-bar.cjs.js +0 -190
- package/lib/modules/table/modules/table-scroll-bar.cjs.js.map +0 -1
- package/lib/modules/table/modules/table-selection.cjs.js +0 -305
- package/lib/modules/table/modules/table-selection.cjs.js.map +0 -1
- package/lib/modules/table/modules/table-selector.cjs.js +0 -158
- package/lib/modules/table/modules/table-selector.cjs.js.map +0 -1
- package/lib/modules/table/table-config.cjs.js +0 -74
- package/lib/modules/table/table-config.cjs.js.map +0 -1
- package/lib/modules/table/utils/index.cjs.js +0 -54
- package/lib/modules/table/utils/index.cjs.js.map +0 -1
- package/lib/modules/table/utils/node-matchers.cjs.js +0 -292
- package/lib/modules/table/utils/node-matchers.cjs.js.map +0 -1
- package/types/modules/global-link/constants.d.ts +0 -3
- package/types/modules/global-link/formats/customer-widget-link.d.ts +0 -14
- package/types/modules/global-link/formats/doc-link.d.ts +0 -17
- package/types/modules/global-link/formats/wiki-link.d.ts +0 -16
- package/types/modules/global-link/formats/work-item-link.d.ts +0 -16
- package/types/modules/global-link/global-link-panel.d.ts +0 -19
- package/types/modules/global-link/index.d.ts +0 -18
- package/types/modules/global-link/utils/createTable.d.ts +0 -1
- package/types/modules/quick-menu.d.ts +0 -22
- package/types/modules/table/better-table.d.ts +0 -35
- package/types/modules/table/formats/header.d.ts +0 -23
- package/types/modules/table/formats/list.d.ts +0 -34
- package/types/modules/table/formats/table.d.ts +0 -147
- package/types/modules/table/modules/table-column-tool.d.ts +0 -23
- package/types/modules/table/modules/table-operation-menu.d.ts +0 -38
- package/types/modules/table/modules/table-scroll-bar.d.ts +0 -33
- package/types/modules/table/modules/table-selection.d.ts +0 -37
- package/types/modules/table/modules/table-selector.d.ts +0 -22
- package/types/modules/table/table-config.d.ts +0 -38
- package/types/modules/table/utils/index.d.ts +0 -17
- package/types/modules/table/utils/node-matchers.d.ts +0 -9
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"table.cjs.js","sources":["../../../../../src/modules/table/formats/table.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { isNullOrUndefined } from '../../../config/editor.utils'\r\nimport { compare } from '../../../utils/method'\r\nimport {\r\n CELL_ATTRIBUTES,\r\n CELL_DEFAULT,\r\n CELL_IDENTITY_KEYS,\r\n CELL_MIN_HEIGHT,\r\n COL_ATTRIBUTES,\r\n COL_DEFAULT,\r\n ERROR_LIMIT,\r\n} from '../table-config'\r\nimport { getRelativeRect } from '../utils'\r\nimport Header from './header'\r\nimport ListItem, { ListContainer } from './list'\r\n\r\nconst Break = Quill.imports['blots/break']\r\nconst Block = Quill.imports['blots/block']\r\nconst Container = Quill.imports['blots/container']\r\n\r\n// @dynamic\r\nclass TableCellLine extends Block {\r\n static requiredContainer: any\r\n static tagName: string\r\n static className: string\r\n static blotName: any\r\n domNode: any\r\n statics: any\r\n wrap: any\r\n parent: any\r\n\r\n static create(value) {\r\n const node = super.create(value)\r\n\r\n // fix: when td has background-color, quill can't set it to table-cell blot\r\n if (value.tdBgColor) {\r\n node.setAttribute(`data-parent-bg`, value.tdBgColor)\r\n delete value.tdBgColor\r\n }\r\n\r\n CELL_IDENTITY_KEYS.forEach((key) => {\r\n const identityMaker = key === 'row' ? rowId : cellId\r\n node.setAttribute(`data-${key}`, value[key] || identityMaker())\r\n })\r\n\r\n CELL_ATTRIBUTES.forEach((attrName) => {\r\n const keyValue = value[attrName] || CELL_DEFAULT[attrName]\r\n keyValue && node.setAttribute(`data-${attrName}`, keyValue)\r\n })\r\n\r\n if (value.height) {\r\n node.setAttribute('height', value.height)\r\n }\r\n\r\n return node\r\n }\r\n\r\n static formats(domNode) {\r\n const formats = {}\r\n if (formats.list) {\r\n formats.list = domNode.classList.item(0)\r\n }\r\n return reduceFormats(domNode, formats)\r\n }\r\n\r\n toggleAttribute(name, value) {\r\n if (value) {\r\n this.domNode.setAttribute(name, value)\r\n }\r\n else {\r\n this.domNode.removeAttribute(name)\r\n }\r\n }\r\n\r\n formatChildren(name, value) {\r\n this.children.forEach((child) => {\r\n child.format && child.format(name, value)\r\n if (!child.domNode.style) {\r\n return\r\n }\r\n if (child.domNode.tagName === 'SPAN' && value) {\r\n child.domNode.style.backgroundColor = value\r\n }\r\n else {\r\n child.domNode.style.backgroundColor = 'initial'\r\n }\r\n })\r\n }\r\n\r\n format(name, value) {\r\n if ([...CELL_ATTRIBUTES, ...CELL_IDENTITY_KEYS, 'parent-bg'].includes(name)) {\r\n if (value) {\r\n this.domNode.setAttribute(`data-${name}`, value)\r\n }\r\n else {\r\n this.domNode.removeAttribute(`data-${name}`)\r\n }\r\n }\r\n else if (name === 'header') {\r\n if (!value) {\r\n return\r\n }\r\n const { row, cell, rowspan, colspan }: any = TableCellLine.formats(this.domNode)\r\n super.format(name, {\r\n value,\r\n row,\r\n cell,\r\n rowspan,\r\n colspan,\r\n })\r\n }\r\n else {\r\n super.format(name, value)\r\n }\r\n switch (true) {\r\n case name === 'cell-bg': {\r\n this.toggleAttribute('data-cell-bg', value)\r\n }\r\n }\r\n }\r\n\r\n optimize(context) {\r\n super.optimize(context)\r\n\r\n // cover shadowBlot's wrap call, pass params parentBlot initialize\r\n // needed\r\n const { row, cell, rowspan, colspan, cellBg } = this.domNode.dataset\r\n const formats: Record<string, any> = TableCellLine.formats(this.domNode)\r\n const parentFormats = this.parent.formats()\r\n if (this.statics.requiredContainer && !(this.parent instanceof this.statics.requiredContainer)) {\r\n this.wrap(this.statics.requiredContainer.blotName, { row, cell, rowspan, colspan, cellBg })\r\n }\r\n else if (!compare(formats, parentFormats)) {\r\n this.parent.format('row', formats.row)\r\n this.parent.format('cell', formats.cell)\r\n this.parent.format('rowspan', formats.rowspan)\r\n this.parent.format('colspan', formats.colspan)\r\n formats['cell-bg'] && this.parent.setCellBg(formats['cell-bg'])\r\n }\r\n\r\n const parentHeight = this.domNode.getAttribute('height')\r\n if (parentHeight) {\r\n this.parent.domNode.style.height = parentHeight\r\n }\r\n }\r\n\r\n tableCell() {\r\n return this.parent\r\n }\r\n}\r\nTableCellLine.blotName = 'table-cell-line'\r\nTableCellLine.className = 'qlbt-cell-line'\r\nTableCellLine.tagName = 'DIV'\r\n\r\n// @dynamic\r\nclass TableCell extends Container {\r\n static allowedChildren: any\r\n static blotName: any\r\n static requiredContainer: any\r\n static tagName: string\r\n next: any\r\n children: any\r\n parent: any\r\n domNode: any\r\n statics: any\r\n wrap: any\r\n splitAfter: any\r\n prev: any\r\n scroll: any\r\n\r\n static create(value = { row: rowId() }) {\r\n const node = super.create(value)\r\n\r\n CELL_IDENTITY_KEYS.forEach((key) => {\r\n node.setAttribute(`data-${key}`, value[key])\r\n })\r\n\r\n CELL_ATTRIBUTES.forEach((attrName) => {\r\n if (value[attrName]) {\r\n node.setAttribute(attrName, value[attrName])\r\n }\r\n })\r\n\r\n return node\r\n }\r\n\r\n static formats(domNode) {\r\n const formats = {\r\n height: undefined,\r\n row: undefined,\r\n }\r\n\r\n formats.height = domNode.getAttribute('height') || undefined\r\n\r\n if (domNode.hasAttribute('data-row')) {\r\n formats.row = domNode.getAttribute('data-row')\r\n }\r\n\r\n if (domNode.hasAttribute('data-cell-bg')) {\r\n formats['cell-bg'] = domNode.getAttribute('data-cell-bg') || undefined\r\n }\r\n return CELL_ATTRIBUTES.reduce((formats, attribute) => {\r\n if (domNode.hasAttribute(attribute)) {\r\n formats[attribute] = domNode.getAttribute(attribute)\r\n }\r\n\r\n return formats\r\n }, formats)\r\n }\r\n\r\n checkMerge() {\r\n if (super.checkMerge() && !isNullOrUndefined(this.next.children.head)) {\r\n const getCellId = (node) => {\r\n return (\r\n (node.formats && node.formats()[node.statics.blotName]) || {\r\n cell: node.domNode.getAttribute('data-cell'),\r\n }\r\n )\r\n }\r\n const thisHead = getCellId(this.children.head)\r\n const thisTail = getCellId(this.children.tail)\r\n const nextHead = getCellId(this.next.children.head)\r\n const nextTail = getCellId(this.next.children.tail)\r\n return thisHead.cell === thisTail.cell && thisHead.cell === nextHead.cell && thisHead.cell === nextTail.cell\r\n }\r\n return false\r\n }\r\n\r\n cellOffset() {\r\n if (this.parent) {\r\n return this.parent.children.indexOf(this)\r\n }\r\n return -1\r\n }\r\n\r\n formats() {\r\n const formats = {}\r\n\r\n if (this.domNode.hasAttribute('data-row')) {\r\n formats.row = this.domNode.getAttribute('data-row')\r\n }\r\n if (this.domNode.hasAttribute('data-cell')) {\r\n formats.cell = this.domNode.getAttribute('data-cell')\r\n }\r\n\r\n return CELL_ATTRIBUTES.reduce((tableFormats, attribute) => {\r\n if (this.domNode.hasAttribute(attribute)) {\r\n tableFormats[attribute] = this.domNode.getAttribute(attribute)\r\n }\r\n\r\n return tableFormats\r\n }, formats)\r\n }\r\n\r\n toggleAttribute(name, value) {\r\n if (value) {\r\n this.domNode.setAttribute(name, value)\r\n }\r\n else {\r\n this.domNode.removeAttribute(name)\r\n }\r\n }\r\n\r\n formatChildren(name, value) {\r\n this.children.forEach((child) => {\r\n child.format(name, value)\r\n })\r\n }\r\n\r\n /**\r\n * this method is for TableCellLine to change cell background color\r\n * if use `format('cell-bg', value)` will loop trigger\r\n * TableCellLine.optimize -> TableCell.format -> TableCellLine.optimize ...\r\n */\r\n setCellBg(value?: string) {\r\n if (value) {\r\n this.domNode.style.backgroundColor = value\r\n }\r\n else {\r\n this.domNode.style.backgroundColor = 'initial'\r\n }\r\n }\r\n\r\n format(name, value) {\r\n const quill = Quill.find(this.scroll.domNode.parentNode)\r\n switch (true) {\r\n case CELL_ATTRIBUTES.includes(name):\r\n this.toggleAttribute(name, value)\r\n break\r\n case ['row', 'cell'].includes(name):\r\n this.toggleAttribute(`data-${name}`, value)\r\n break\r\n case name === 'background': {\r\n const hasBgColor = this.domNode.querySelectorAll('div.qlbt-cell-line[data-parent-bg]')\r\n hasBgColor.forEach(child => child.removeAttribute('data-parent-bg'))\r\n this.domNode.style.background = ''\r\n this.domNode.style.backgroundColor = value\r\n this.children.head.format('parent-bg', value)\r\n break\r\n }\r\n // TODO: 其他格式可同理实现,但已有格式清除时会清除所有格式,待解决\r\n case name === 'size': {\r\n const start = quill.getIndex(this.children.head)\r\n const total = quill.getIndex(this.children.tail) + this.children.tail.length()\r\n const length = total - start > 0 ? total - start : 0\r\n quill.setSelection(start, length, Quill.sources.USER)\r\n quill.format(name, value, Quill.sources.USER)\r\n // 设置选区后需清除选区,否则会固定处理选区内容\r\n quill.setSelection(start)\r\n break\r\n }\r\n case name === 'cell-bg': {\r\n this.toggleAttribute('data-cell-bg', value)\r\n this.toggleAttribute('data-parent-bg', value)\r\n this.formatChildren(name, value)\r\n this.setCellBg(value)\r\n break\r\n }\r\n }\r\n }\r\n\r\n optimize(context) {\r\n // fix: when td has background-color, quill can't set it to table-cell bolt\r\n const hasBg: any = Array.from(this.domNode.childNodes).find((item: any) => item.getAttribute('data-parent-bg'))\r\n const bgColor = hasBg && hasBg.getAttribute('data-parent-bg')\r\n if (bgColor && bgColor !== this.domNode.style.backgroundColor) {\r\n this.domNode.style.backgroundColor = bgColor\r\n }\r\n\r\n const rId = this.domNode.getAttribute('data-row')\r\n if (this.statics.requiredContainer && !(this.parent instanceof this.statics.requiredContainer)) {\r\n this.wrap(this.statics.requiredContainer.blotName, {\r\n row: rId,\r\n })\r\n }\r\n else if (rId !== this.parent.formats().row) {\r\n this.parent.format('row', rId)\r\n }\r\n\r\n this.children.forEach((child) => {\r\n if (isNullOrUndefined(child.next)) {\r\n return\r\n }\r\n const childFormats: any = this.getFormat(child.domNode)\r\n const nextFormats: any = this.getFormat(child.next.domNode)\r\n if (childFormats.cell !== nextFormats.cell) {\r\n const next = this.splitAfter(child)\r\n if (next) {\r\n next.optimize()\r\n }\r\n // We might be able to merge with prev now\r\n if (this.prev) {\r\n this.prev.optimize()\r\n }\r\n }\r\n })\r\n\r\n super.optimize(context)\r\n }\r\n\r\n // 兼容读取TableCell中的子blot,包括table-cell-line、line、head\r\n getFormat(domNode) {\r\n const formats = {}\r\n const firstChild = domNode.childNodes[0]\r\n if (firstChild && domNode.tagName === 'OL') {\r\n formats.list = firstChild.classList.item(0)\r\n }\r\n\r\n return reduceFormats(domNode, formats)\r\n }\r\n\r\n row() {\r\n return this.parent\r\n }\r\n\r\n rowOffset() {\r\n if (this.row()) {\r\n return -1\r\n }\r\n return this.row().rowOffset()\r\n }\r\n\r\n table() {\r\n return this.row() && this.row().table()\r\n }\r\n}\r\nTableCell.blotName = 'table'\r\nTableCell.tagName = 'TD'\r\n\r\n// @dynamic\r\nclass TableRow extends Container {\r\n static requiredContainer: any\r\n static allowedChildren: any\r\n static blotName: string\r\n static tagName: string\r\n next: any\r\n children: any\r\n domNode: any\r\n statics: any\r\n wrap: any\r\n splitAfter: any\r\n enforceAllowedChildren: any\r\n uiNode: any\r\n parent: any\r\n prev: any\r\n\r\n static create(value) {\r\n const node = super.create(value)\r\n if (value.row) {\r\n node.setAttribute('data-row', value.row)\r\n }\r\n return node\r\n }\r\n\r\n checkMerge() {\r\n if (super.checkMerge() && !isNullOrUndefined(this.next.children.head)) {\r\n const thisHead = this.children.head.formats()\r\n const thisTail = this.children.tail.formats()\r\n const nextHead = this.next.children.head.formats()\r\n const nextTail = this.next.children.tail.formats()\r\n\r\n return thisHead.row === thisTail.row && thisHead.row === nextHead.row && thisHead.row === nextTail.row\r\n }\r\n return false\r\n }\r\n\r\n formats() {\r\n return ['row'].reduce((formats, attrName) => {\r\n if (this.domNode.hasAttribute(`data-${attrName}`)) {\r\n formats[attrName] = this.domNode.getAttribute(`data-${attrName}`)\r\n }\r\n return formats\r\n }, {})\r\n }\r\n\r\n format(key, value) {\r\n this.domNode.setAttribute(`data-${key}`, value)\r\n }\r\n\r\n optimize(context) {\r\n // optimize function of ShadowBlot\r\n if (this.statics.requiredContainer && !(this.parent instanceof this.statics.requiredContainer)) {\r\n this.wrap(this.statics.requiredContainer.blotName)\r\n }\r\n\r\n this.children.forEach((child) => {\r\n if (isNullOrUndefined(child.next)) {\r\n return\r\n }\r\n const childFormats = child.formats()\r\n const nextFormats = child.next.formats()\r\n if (childFormats.row !== nextFormats.row) {\r\n const next = this.splitAfter(child)\r\n if (next) {\r\n next.optimize()\r\n }\r\n if (this.prev) {\r\n this.prev.optimize()\r\n }\r\n }\r\n })\r\n\r\n super.optimize(context)\r\n }\r\n\r\n rowOffset() {\r\n if (!this.parent) {\r\n return -1\r\n }\r\n return this.parent.children.indexOf(this)\r\n }\r\n\r\n table() {\r\n return this.parent && this.parent.parent\r\n }\r\n}\r\nTableRow.blotName = 'table-row'\r\nTableRow.tagName = 'TR'\r\n\r\n// @dynamic\r\nclass TableBody extends Container {\r\n static requiredContainer: any\r\n static allowedChildren: any\r\n static blotName: string\r\n static tagName: string\r\n}\r\nTableBody.blotName = 'table-body'\r\nTableBody.tagName = 'TBODY'\r\n\r\n// @dynamic\r\nclass TableCol extends Block {\r\n static requiredContainer: any\r\n static blotName: string\r\n static tagName: string\r\n domNode: any\r\n\r\n static create(value) {\r\n const node = super.create(value)\r\n COL_ATTRIBUTES.forEach((attrName) => {\r\n node.setAttribute(`${attrName}`, value[attrName] || COL_DEFAULT[attrName])\r\n })\r\n return node\r\n }\r\n\r\n static formats(domNode) {\r\n return COL_ATTRIBUTES.reduce((formats, attribute) => {\r\n if (domNode.hasAttribute(`${attribute}`)) {\r\n formats[attribute] = domNode.getAttribute(`${attribute}`) || undefined\r\n }\r\n return formats\r\n }, {})\r\n }\r\n\r\n format(name, value) {\r\n if (COL_ATTRIBUTES.includes(name)) {\r\n this.domNode.setAttribute(`${name}`, value || COL_DEFAULT[name])\r\n }\r\n else {\r\n super.format(name, value)\r\n }\r\n }\r\n\r\n html() {\r\n return this.domNode.outerHTML\r\n }\r\n}\r\nTableCol.blotName = 'table-col'\r\nTableCol.tagName = 'col'\r\n\r\n// @dynamic\r\nclass TableColGroup extends Container {\r\n static requiredContainer: any\r\n static allowedChildren: any\r\n static blotName: string\r\n static tagName: string\r\n parent: any\r\n statics: any\r\n\r\n optimize(context) {\r\n super.optimize(context)\r\n // optimize 是当前slot更新后调用的callback方法,当TableBody更新后判断父容器的存在和类型相符则调用更新表格宽度方法更新宽度\r\n // 切记不要在当前slot内调用能改变当前slot的方法,会造成无限循环,一般通过子更新改变父较好\r\n if (this.parent && this.statics.requiredContainer && this.parent instanceof this.statics.requiredContainer) {\r\n this.parent.updateTableWidth()\r\n }\r\n // 此时colgroup创建完毕,检查colgroup的col数量是否正确\r\n // fix:colgroup的col数量不正确导致最后一列宽度为空\r\n if (this.parent.parent.domNode.className === 'quill-better-table-wrapper'\r\n && this.parent.parent.domNode.tagName === 'DIV'\r\n && this.parent.domNode.children.length >= 2\r\n && this.parent.domNode.children[0].tagName === 'COLGROUP'\r\n && this.parent.domNode.children[1].tagName === 'TBODY'\r\n ) {\r\n let trId = ''\r\n let colSpan = 0\r\n let colgroupNumber = 0\r\n for (let i = 0; i < this.parent.domNode.children.length; i++) {\r\n if (this.parent.domNode.children[i].tagName === 'TBODY') {\r\n if (trId === '') {\r\n trId = this.parent.domNode.children[i].children[0].getAttribute('data-row')\r\n }\r\n colSpan = this.findTdColspanInTbody(this.parent.domNode.children[i], trId)\r\n }\r\n else if (this.parent.domNode.children[i].tagName === 'COLGROUP') {\r\n colgroupNumber = this.parent.domNode.children[i].children.length\r\n }\r\n }\r\n let elementSibling = this.parent.domNode.nextElementSibling\r\n\r\n while (elementSibling && elementSibling.tagName === 'TABLE') {\r\n for (let i = 0; i < elementSibling.children.length; i++) {\r\n if (elementSibling.children[i].tagName === 'TBODY') {\r\n colSpan += this.findTdColspanInTbody(elementSibling.children[i], trId)\r\n }\r\n }\r\n elementSibling = elementSibling.nextElementSibling\r\n }\r\n\r\n if (colgroupNumber < colSpan) {\r\n const length = colSpan - colgroupNumber\r\n\r\n for (let i = 0; i < length; i++) {\r\n const newCol = document.createElement('col')\r\n newCol.width = this.parent.domNode.children[0].children[this.parent.domNode.children[0].children.length - 1].width\r\n const newBr = document.createElement('br')\r\n newCol.appendChild(newBr)\r\n this.parent.domNode.children[0].appendChild(newCol)\r\n this.parent.domNode.style.width += newCol.width\r\n }\r\n }\r\n }\r\n }\r\n\r\n // this.parent.domNode.children[1].children[0].children[0].colSpan\r\n findTdColspanInTbody(tbody, trId) {\r\n let colSpan = 0\r\n // let tbodyChildrenLength\r\n for (let i = 0; i < tbody.children.length; i++) {\r\n if (tbody.children[i].getAttribute('data-row') !== trId) {\r\n return colSpan\r\n }\r\n for (let j = 0; j < tbody.children[i].children.length; j++) {\r\n if (tbody.children[i].children[j].colSpan) {\r\n colSpan += tbody.children[i].children[j].colSpan\r\n }\r\n }\r\n }\r\n return colSpan\r\n }\r\n}\r\nTableColGroup.blotName = 'table-col-group'\r\nTableColGroup.tagName = 'colgroup'\r\n\r\n// @dynamic\r\nclass TableContainer extends Container {\r\n static blotName: string\r\n static className: string\r\n static tagName: string\r\n static requiredContainer: any\r\n static allowedChildren: any\r\n domNode: any\r\n parent: any\r\n children: any\r\n descendants: any\r\n scroll: any\r\n remove: any\r\n static create() {\r\n const node = super.create()\r\n return node\r\n }\r\n\r\n constructor(scroll, domNode) {\r\n super(scroll, domNode)\r\n domNode.setAttribute('contenteditable', false)\r\n this.updateTableWidth()\r\n }\r\n\r\n updateTableWidth() {\r\n let colGroup = this.colGroup()\r\n if (!colGroup) {\r\n // undo时原表格dom被移除,因此colGroup和domNode都不对应当前新表格,需从父容器dom树重新获取\r\n // 如果表格有style属性则不为新添加表格,避免错误赋值\r\n if (this.parent && this.parent.children.head && this.domNode.hasAttribute('style')) {\r\n colGroup = this.parent.children.head.children.head\r\n this.domNode = this.parent.children.head.domNode\r\n }\r\n else if (this.domNode.tagName === 'TABLE') {\r\n // this.domNode.forEach\r\n return\r\n }\r\n else {\r\n return\r\n }\r\n }\r\n const tableWidth = colGroup.children.reduce((sumWidth, col) => {\r\n // 兼容 table-col 不存在的情况\r\n const tableCol = col.formats()[TableCol.blotName]\r\n let tableColWidth = COL_DEFAULT.width\r\n if (tableCol && tableCol.width) {\r\n tableColWidth = Number.parseInt(tableCol.width, 10)\r\n }\r\n sumWidth = sumWidth + tableColWidth\r\n return sumWidth\r\n }, 0)\r\n this.domNode.removeAttribute('style')\r\n this.domNode.style.width = `${tableWidth}px`\r\n // 当表格加载结束后修正width设定为auto的列宽度\r\n if (colGroup.next) {\r\n setTimeout(() => {\r\n let tdIndex = 0\r\n let maxTds\r\n const colNum = colGroup.children.length\r\n const tableRows = this.descendants(TableRow)\r\n // 查询单元格数等于列数的行作为宽度赋值依据\r\n for (let i = 0; i < tableRows.length; i++) {\r\n const tds = tableRows[i].domNode.querySelectorAll('td')\r\n if (tds.length === colNum) {\r\n maxTds = tds\r\n break\r\n }\r\n }\r\n colGroup.children.forEach((col) => {\r\n if (maxTds && col.domNode.width === 'auto') {\r\n const width = getComputedStyle(maxTds[tdIndex]).width\r\n const num = Number.parseInt(width, 10)\r\n col.domNode.width = (num < COL_DEFAULT.width && COL_DEFAULT.width) || num\r\n }\r\n tdIndex++\r\n })\r\n })\r\n }\r\n }\r\n\r\n cells(column) {\r\n return this.rows().map(row => row.children.at(column))\r\n }\r\n\r\n colGroup() {\r\n return this.children.head\r\n }\r\n\r\n deleteColumns(compareRect, delIndexes = [], editorWrapper) {\r\n const [body] = this.descendants(TableBody)\r\n if (isNullOrUndefined(body) || isNullOrUndefined(body.children.head)) {\r\n return\r\n }\r\n\r\n const tableCells = this.descendants(TableCell)\r\n const removedCells = []\r\n const modifiedCells = []\r\n\r\n tableCells.forEach((cell) => {\r\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\r\n\r\n if (cellRect.x + ERROR_LIMIT > compareRect.x && cellRect.x1 - ERROR_LIMIT < compareRect.x1) {\r\n removedCells.push(cell)\r\n }\r\n else if (cellRect.x < compareRect.x + ERROR_LIMIT && cellRect.x1 > compareRect.x1 - ERROR_LIMIT) {\r\n modifiedCells.push(cell)\r\n }\r\n })\r\n\r\n if (removedCells.length === tableCells.length) {\r\n this.tableDestroy()\r\n return true\r\n }\r\n\r\n // remove the matches column tool cell\r\n delIndexes.forEach(() => {\r\n const col = this.colGroup().children.at(delIndexes[0])\r\n if (!col || this.colGroup().children.at(delIndexes[0]).domNode !== this.colGroup().domNode.children[delIndexes[0]]) {\r\n this.colGroup().domNode.removeChild(this.colGroup().domNode.children[delIndexes[0]])\r\n }\r\n else {\r\n col.remove()\r\n }\r\n })\r\n\r\n removedCells.forEach((cell) => {\r\n cell.remove()\r\n })\r\n\r\n modifiedCells.forEach((cell) => {\r\n const cellColspan = Number.parseInt(cell.formats().colspan, 10)\r\n // const cellWidth = parseInt(cell.formats().width, 10);\r\n cell.format('colspan', cellColspan - delIndexes.length)\r\n })\r\n\r\n this.updateTableWidth()\r\n }\r\n\r\n deleteRow(compareRect, editorWrapper) {\r\n const [body] = this.descendants(TableBody)\r\n if (isNullOrUndefined(body) || isNullOrUndefined(body.children.head)) {\r\n return\r\n }\r\n\r\n const tableCells = this.descendants(TableCell)\r\n const tableRows = this.descendants(TableRow)\r\n const removedCells = [] // cells to be removed\r\n const modifiedCells = [] // cells to be modified\r\n const fallCells = [] // cells to fall into next row\r\n\r\n tableCells.forEach((cell) => {\r\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\r\n\r\n if (cellRect.y > compareRect.y - ERROR_LIMIT && cellRect.y1 < compareRect.y1 + ERROR_LIMIT) {\r\n removedCells.push(cell)\r\n }\r\n else if (cellRect.y < compareRect.y + ERROR_LIMIT && cellRect.y1 > compareRect.y1 - ERROR_LIMIT) {\r\n modifiedCells.push(cell)\r\n\r\n if (Math.abs(cellRect.y - compareRect.y) < ERROR_LIMIT) {\r\n fallCells.push(cell)\r\n }\r\n }\r\n })\r\n\r\n if (removedCells.length === tableCells.length) {\r\n this.tableDestroy()\r\n return\r\n }\r\n\r\n // compute length of removed rows\r\n const removedRowsLength = this.rows().reduce((sum, row) => {\r\n const rowRect = getRelativeRect(row.domNode.getBoundingClientRect(), editorWrapper)\r\n\r\n if (rowRect.y > compareRect.y - ERROR_LIMIT && rowRect.y1 < compareRect.y1 + ERROR_LIMIT) {\r\n sum += 1\r\n }\r\n return sum\r\n }, 0)\r\n\r\n // it must execute before the table layout changed with other operation\r\n fallCells.forEach((cell) => {\r\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\r\n const nextRow = cell.parent.next\r\n const cellsInNextRow = nextRow.children\r\n\r\n const refCell = cellsInNextRow.reduce((ref, compareCell) => {\r\n const compareCellRect = getRelativeRect(compareCell.domNode.getBoundingClientRect(), editorWrapper)\r\n if (cellRect.x1 - compareCellRect.x < ERROR_LIMIT) {\r\n ref = compareCell\r\n }\r\n return ref\r\n }, null)\r\n\r\n nextRow.insertBefore(cell, refCell)\r\n const curRowId = nextRow.formats().row\r\n cell.format('row', curRowId)\r\n cell.children.forEach((cellLine) => {\r\n cellLine.format('row', curRowId)\r\n })\r\n })\r\n\r\n modifiedCells.forEach((cell) => {\r\n const cellRowspan = Number.parseInt(cell.formats().rowspan, 10)\r\n const curRowspan = cellRowspan - removedRowsLength\r\n cell.domNode.removeAttribute('style')\r\n cell.format('rowspan', curRowspan)\r\n cell.children.forEach((cellLine) => {\r\n cellLine.format('rowspan', curRowspan)\r\n })\r\n })\r\n\r\n removedCells.forEach((cell) => {\r\n cell.remove()\r\n })\r\n\r\n // fix: There will be a empty tr left if i delete the last row of a table,\r\n // this will cause the bottom border of the table to disappear,\r\n // and the empty tr will execute the matchTableRow method.\r\n tableRows.forEach((row) => {\r\n if (row.children.length === 0) {\r\n row.remove()\r\n }\r\n })\r\n }\r\n\r\n tableDestroy() {\r\n const quill = Quill.find(this.scroll.domNode.parentNode)\r\n const tableModule = quill.getModule('better-table')\r\n this.remove()\r\n tableModule.hideTableTools()\r\n quill.update(Quill.sources.USER)\r\n }\r\n\r\n insertCell(tableRow, ref, bg = '') {\r\n const id = cellId()\r\n const rId = tableRow.formats().row\r\n const tableCell = this.scroll.create(\r\n TableCell.blotName,\r\n { ...CELL_DEFAULT, row: rId },\r\n )\r\n tableCell.domNode.style.backgroundColor = bg\r\n const cellLine = this.scroll.create(TableCellLine.blotName, {\r\n row: rId,\r\n cell: id,\r\n })\r\n tableCell.appendChild(cellLine)\r\n\r\n if (ref) {\r\n tableRow.insertBefore(tableCell, ref)\r\n }\r\n else {\r\n tableRow.appendChild(tableCell)\r\n }\r\n }\r\n\r\n insertColumn(compareRect, colIndex, isRight = true, editorWrapper) {\r\n const [body] = this.descendants(TableBody)\r\n const [tableColGroup] = this.descendants(TableColGroup)\r\n const tableCols = this.descendants(TableCol)\r\n const addAsideCells = []\r\n const modifiedCells = []\r\n const affectedCells = []\r\n\r\n if (isNullOrUndefined(body) || isNullOrUndefined(body.children.head)) {\r\n return\r\n }\r\n const tableCells = this.descendants(TableCell)\r\n tableCells.forEach((cell) => {\r\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\r\n\r\n if (isRight) {\r\n if (Math.abs(cellRect.x1 - compareRect.x1) < ERROR_LIMIT) {\r\n // the right of selected boundary equal to the right of table cell,\r\n // add a new table cell right aside this table cell\r\n addAsideCells.push(cell)\r\n }\r\n else if (compareRect.x1 - cellRect.x > ERROR_LIMIT && compareRect.x1 - cellRect.x1 < -ERROR_LIMIT) {\r\n // the right of selected boundary is inside this table cell\r\n // colspan of this table cell will increase 1\r\n modifiedCells.push(cell)\r\n }\r\n }\r\n else {\r\n if (Math.abs(cellRect.x - compareRect.x) < ERROR_LIMIT) {\r\n // left of selected boundary equal to left of table cell,\r\n // add a new table cell left aside this table cell\r\n addAsideCells.push(cell)\r\n }\r\n else if (compareRect.x - cellRect.x > ERROR_LIMIT && compareRect.x - cellRect.x1 < -ERROR_LIMIT) {\r\n // the left of selected boundary is inside this table cell\r\n // colspan of this table cell will increase 1\r\n modifiedCells.push(cell)\r\n }\r\n }\r\n })\r\n\r\n addAsideCells.forEach((cell) => {\r\n const ref = isRight ? cell.next : cell\r\n const id = cellId()\r\n const tableRow = cell.parent\r\n const rId = tableRow.formats().row\r\n const cellFormats = cell.formats()\r\n const tableCell = this.scroll.create(\r\n TableCell.blotName,\r\n { ...CELL_DEFAULT, row: rId, rowspan: cellFormats.rowspan },\r\n )\r\n const cellLine = this.scroll.create(TableCellLine.blotName, {\r\n row: rId,\r\n cell: id,\r\n rowspan: cellFormats.rowspan,\r\n })\r\n tableCell.appendChild(cellLine)\r\n\r\n if (ref) {\r\n tableRow.insertBefore(tableCell, ref)\r\n }\r\n else {\r\n tableRow.appendChild(tableCell)\r\n }\r\n affectedCells.push(tableCell)\r\n })\r\n\r\n // insert new tableCol\r\n const tableCol = this.scroll.create(TableCol.blotName, true)\r\n let colRef\r\n if (isRight) {\r\n colRef = tableCols[colIndex] && tableCols[colIndex].next\r\n }\r\n else {\r\n colRef = tableCols[colIndex]\r\n }\r\n\r\n if (colRef) {\r\n tableColGroup.insertBefore(tableCol, colRef)\r\n }\r\n else {\r\n tableColGroup.appendChild(tableCol)\r\n }\r\n\r\n modifiedCells.forEach((cell) => {\r\n const cellColspan = cell.formats().colspan\r\n cell.format('colspan', Number.parseInt(cellColspan, 10) + 1)\r\n affectedCells.push(cell)\r\n })\r\n\r\n affectedCells.sort((cellA, cellB) => {\r\n const y1 = cellA.domNode.getBoundingClientRect().y\r\n const y2 = cellB.domNode.getBoundingClientRect().y\r\n return y1 - y2\r\n })\r\n\r\n this.updateTableWidth()\r\n return affectedCells\r\n }\r\n\r\n insertRow(compareRect, isDown, editorWrapper) {\r\n const [body] = this.descendants(TableBody)\r\n if (isNullOrUndefined(body) || isNullOrUndefined(body.children.head)) {\r\n return\r\n }\r\n\r\n const tableCells = this.descendants(TableCell)\r\n const rId = rowId()\r\n const newRow = this.scroll.create(TableRow.blotName, {\r\n row: rId,\r\n })\r\n const addBelowCells = []\r\n const modifiedCells = []\r\n const affectedCells = []\r\n\r\n tableCells.forEach((cell) => {\r\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\r\n\r\n if (isDown) {\r\n if (Math.abs(cellRect.y1 - compareRect.y1) < ERROR_LIMIT) {\r\n addBelowCells.push(cell)\r\n }\r\n else if (compareRect.y1 - cellRect.y > ERROR_LIMIT && compareRect.y1 - cellRect.y1 < -ERROR_LIMIT) {\r\n modifiedCells.push(cell)\r\n }\r\n }\r\n else {\r\n if (Math.abs(cellRect.y - compareRect.y) < ERROR_LIMIT) {\r\n addBelowCells.push(cell)\r\n }\r\n else if (compareRect.y - cellRect.y > ERROR_LIMIT && compareRect.y - cellRect.y1 < -ERROR_LIMIT) {\r\n modifiedCells.push(cell)\r\n }\r\n }\r\n })\r\n\r\n // ordered table cells with rect.x, fix error for inserting\r\n // new table cell in complicated table with wrong order.\r\n const sortFunc = (cellA, cellB) => {\r\n const x1 = cellA.domNode.getBoundingClientRect().x\r\n const x2 = cellB.domNode.getBoundingClientRect().x\r\n return x1 - x2\r\n }\r\n addBelowCells.sort(sortFunc)\r\n\r\n addBelowCells.forEach((cell) => {\r\n const cId = cellId()\r\n const cellFormats = cell.formats()\r\n\r\n const tableCell = this.scroll.create(\r\n TableCell.blotName,\r\n { ...CELL_DEFAULT, row: rId, cell: cId, colspan: cellFormats.colspan },\r\n )\r\n const cellLine = this.scroll.create(TableCellLine.blotName, {\r\n row: rId,\r\n cell: cId,\r\n colspan: cellFormats.colspan,\r\n })\r\n const empty = this.scroll.create(Break.blotName)\r\n cellLine.appendChild(empty)\r\n tableCell.appendChild(cellLine)\r\n newRow.appendChild(tableCell)\r\n affectedCells.push(tableCell)\r\n })\r\n\r\n modifiedCells.forEach((cell) => {\r\n const cellRowspan = Number.parseInt(cell.formats().rowspan, 10)\r\n cell.format('rowspan', cellRowspan + 1)\r\n affectedCells.push(cell)\r\n })\r\n\r\n const refRow = this.rows().find((row) => {\r\n const rowRect = getRelativeRect(row.domNode.getBoundingClientRect(), editorWrapper)\r\n if (isDown) {\r\n return Math.abs(rowRect.y - compareRect.y - compareRect.height) < ERROR_LIMIT\r\n }\r\n else {\r\n return Math.abs(rowRect.y - compareRect.y) < ERROR_LIMIT\r\n }\r\n })\r\n body.insertBefore(newRow, refRow)\r\n\r\n // reordering affectedCells\r\n affectedCells.sort(sortFunc)\r\n return affectedCells\r\n }\r\n\r\n mergeCells(_compareRect, mergingCells, rowspan, colspan, _editorWrapper) {\r\n const mergedCell = mergingCells.reduce((result, tableCell, index) => {\r\n if (index !== 0) {\r\n if (result) {\r\n tableCell.moveChildren(result)\r\n }\r\n tableCell.remove()\r\n }\r\n else {\r\n tableCell.format('colspan', colspan)\r\n tableCell.format('rowspan', rowspan)\r\n result = tableCell\r\n if (rowspan > 1) {\r\n // fix: 比较当前单元格高度样式与rowspan最小高度,小于则设置高度,不判断实际高度,因为合并时这一刻实际高度可能高于最小高度\r\n const minHeight = CELL_MIN_HEIGHT * rowspan + rowspan - 1\r\n const cellHeight = Number.parseInt(tableCell.domNode.style.height, 10) || 0\r\n if (cellHeight < minHeight) {\r\n tableCell.domNode.style.height = `${minHeight}px`\r\n }\r\n }\r\n }\r\n\r\n return result\r\n }, null)\r\n\r\n const rId = mergedCell.domNode.getAttribute('data-row')\r\n const cId = mergedCell.children.head.domNode.getAttribute('data-cell')\r\n mergedCell.children.forEach((cellLine) => {\r\n cellLine.domNode.setAttribute('data-parent-bg', mergedCell.domNode.style.backgroundColor)\r\n if (cellLine.children.head.domNode.style) {\r\n cellLine.children.head.domNode.style.backgroundColor = mergedCell.domNode.style.backgroundColor\r\n }\r\n\r\n if (!cellLine.prev || cellLine.domNode.textContent.trim()) {\r\n cellLine.format('cell', cId)\r\n cellLine.format('row', rId)\r\n cellLine.format('colspan', colspan)\r\n cellLine.format('rowspan', rowspan)\r\n }\r\n else {\r\n cellLine.remove()\r\n }\r\n })\r\n\r\n return mergedCell\r\n }\r\n\r\n unmergeCells(unmergingCells, editorWrapper) {\r\n let cellFormats: any = {}\r\n let cellRowspan = 1\r\n let cellColspan = 1\r\n\r\n unmergingCells.forEach((tableCell) => {\r\n const tableCellBgColor = tableCell.domNode.style.backgroundColor\r\n cellFormats = tableCell.formats()\r\n cellRowspan = cellFormats.rowspan\r\n cellColspan = cellFormats.colspan\r\n\r\n if (cellColspan > 1) {\r\n const ref = tableCell.next\r\n const row = tableCell.row()\r\n tableCell.format('colspan', 1)\r\n if (tableCell.domNode.children && tableCell.domNode.children[0].tagName === 'DIV' && tableCell.domNode.children[0].getAttribute('data-colspan')) {\r\n tableCell.domNode.children[0].setAttribute('data-colspan', 1)\r\n }\r\n for (let colspanIndex = cellColspan; colspanIndex > 1; colspanIndex--) {\r\n this.insertCell(row, ref, tableCellBgColor)\r\n }\r\n }\r\n\r\n if (cellRowspan > 1) {\r\n let rowspanIndex = cellRowspan\r\n let nextRow = tableCell.row().next\r\n while (rowspanIndex > 1) {\r\n const refInNextRow = nextRow.children.reduce((result, cell) => {\r\n const compareRect = getRelativeRect(tableCell.domNode.getBoundingClientRect(), editorWrapper)\r\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\r\n if (Math.abs(compareRect.x1 - cellRect.x) < ERROR_LIMIT) {\r\n result = cell\r\n }\r\n return result\r\n }, null)\r\n\r\n for (let colspanIndex = cellColspan; colspanIndex > 0; colspanIndex--) {\r\n this.insertCell(nextRow, refInNextRow, tableCellBgColor)\r\n }\r\n\r\n rowspanIndex -= 1\r\n nextRow = nextRow.next\r\n }\r\n\r\n tableCell.domNode.removeAttribute('style')\r\n if (tableCell.domNode.children && tableCell.domNode.children[0].tagName === 'DIV' && tableCell.domNode.children[0].getAttribute('data-rowspan')) {\r\n tableCell.domNode.children[0].setAttribute('data-rowspan', 1)\r\n }\r\n tableCell.format('rowspan', 1)\r\n }\r\n })\r\n }\r\n\r\n emptyCells(selectedTds) {\r\n selectedTds.forEach((selectedTd) => {\r\n // 构造空的table cell line, 优先使用单元格已有rowId和cellId,避免从table-cell-line向上层td提交id时不一致导致错位\r\n const cellFormats = selectedTd.formats()\r\n const cellLine = this.scroll.create(TableCellLine.blotName, {\r\n row: cellFormats.row || rowId(),\r\n cell: cellFormats.cell || cellId(),\r\n rowspan: cellFormats.rowspan,\r\n colspan: cellFormats.colspan,\r\n })\r\n const empty = this.scroll.create(Break.blotName)\r\n cellLine.appendChild(empty)\r\n\r\n selectedTd.domNode.innerHTML = ''\r\n selectedTd.appendChild(cellLine)\r\n })\r\n }\r\n\r\n rows() {\r\n const body = this.children.tail\r\n if (isNullOrUndefined(body)) {\r\n return []\r\n }\r\n return body.children.map(row => row)\r\n }\r\n}\r\nTableContainer.blotName = 'ql-table-container'\r\nTableContainer.className = 'quill-better-table'\r\nTableContainer.tagName = 'TABLE'\r\n\r\n// @dynamic\r\nclass TableViewWrapper extends Container {\r\n static blotName: string\r\n static tagName: string\r\n static className: string\r\n static allowedChildren: any\r\n constructor(scroll, domNode) {\r\n super(scroll, domNode)\r\n const quill = Quill.find(scroll.domNode.parentNode)\r\n // fix: 只读模式时超长表格默认包含滚动条\r\n if (quill.options.readOnly) {\r\n domNode.style.overflow = 'auto'\r\n }\r\n domNode.addEventListener(\r\n 'scroll',\r\n (e) => {\r\n const tableModule = quill.getModule('better-table')\r\n if (tableModule.columnTool) {\r\n tableModule.columnTool.domNode.scrollLeft = e.target.scrollLeft\r\n }\r\n\r\n if (tableModule.tableSelection && tableModule.tableSelection.selectedTds.length > 0) {\r\n tableModule.tableSelection.repositionHelpLines()\r\n }\r\n },\r\n false,\r\n )\r\n }\r\n}\r\nTableViewWrapper.blotName = 'table-view'\r\nTableViewWrapper.className = 'quill-better-table-wrapper'\r\nTableViewWrapper.tagName = 'DIV'\r\n\r\nTableViewWrapper.allowedChildren = [TableContainer]\r\nTableContainer.requiredContainer = TableViewWrapper\r\n\r\nTableContainer.allowedChildren = [TableBody, TableColGroup]\r\nTableBody.requiredContainer = TableContainer\r\n\r\nTableBody.allowedChildren = [TableRow]\r\nTableRow.requiredContainer = TableBody\r\n\r\nTableRow.allowedChildren = [TableCell]\r\nTableCell.requiredContainer = TableRow\r\n\r\nTableCell.allowedChildren = [TableCellLine, Header, ListItem, ListContainer]\r\nTableCellLine.requiredContainer = TableCell\r\n\r\nTableColGroup.allowedChildren = [TableCol]\r\nTableColGroup.requiredContainer = TableContainer\r\n\r\nTableCol.requiredContainer = TableColGroup\r\n\r\nfunction rowId() {\r\n const id = Math.random().toString(36).slice(2, 6)\r\n return `row-${id}`\r\n}\r\n\r\nfunction cellId() {\r\n const id = Math.random().toString(36).slice(2, 6)\r\n return `cell-${id}`\r\n}\r\n\r\nfunction reduceFormats(domNode: HTMLElement, formats: Record<string, any>) {\r\n return [...CELL_ATTRIBUTES, ...CELL_IDENTITY_KEYS].reduce((tableFormats, attribute) => {\r\n if (domNode.hasAttribute(`data-${attribute}`)) {\r\n tableFormats[attribute] = domNode.getAttribute(`data-${attribute}`) || undefined\r\n }\r\n return tableFormats\r\n }, formats)\r\n}\r\n\r\nexport {\r\n CELL_ATTRIBUTES,\r\n CELL_IDENTITY_KEYS,\r\n cellId,\r\n rowId,\r\n TableBody,\r\n TableCell,\r\n TableCellLine,\r\n TableCol,\r\n TableColGroup,\r\n TableContainer,\r\n TableRow,\r\n TableViewWrapper,\r\n}\r\n"],"names":["CELL_IDENTITY_KEYS","CELL_ATTRIBUTES","CELL_DEFAULT","compare","formats","isNullOrUndefined","COL_ATTRIBUTES","COL_DEFAULT","getRelativeRect","ERROR_LIMIT","index","CELL_MIN_HEIGHT","Header","ListItem","ListContainer"],"mappings":"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"}
|
|
@@ -1,400 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
-
const Quill = require("quill");
|
|
4
|
-
const tableConfig = require("../table-config.cjs.js");
|
|
5
|
-
const index = require("../utils/index.cjs.js");
|
|
6
|
-
class TableColumnTool {
|
|
7
|
-
constructor(table, quill, dom) {
|
|
8
|
-
if (!table) {
|
|
9
|
-
return null;
|
|
10
|
-
}
|
|
11
|
-
this.table = table;
|
|
12
|
-
this.quill = quill;
|
|
13
|
-
this.modulesContainer = dom;
|
|
14
|
-
this.domNode = null;
|
|
15
|
-
this.oldRootScrollTop = this.quill.root.scrollTop;
|
|
16
|
-
this.initColTool();
|
|
17
|
-
if (this.quill.root === this.quill.scrollingContainer) {
|
|
18
|
-
this.quill.root.addEventListener("scroll", this.handleQuillRootScroll.bind(this));
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
handleQuillRootScroll() {
|
|
22
|
-
if (this.domNode) {
|
|
23
|
-
this.domNode.style.marginTop = `${this.oldRootScrollTop - this.quill.root.scrollTop}px`;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
initColTool() {
|
|
27
|
-
const parent = this.quill.root.parentNode;
|
|
28
|
-
const containerRect = parent.getBoundingClientRect();
|
|
29
|
-
const tableViewRect = this.table.parentNode.getBoundingClientRect();
|
|
30
|
-
this.domNode = document.createElement("div");
|
|
31
|
-
this.domNode.classList.add("qlbt-table-control-panel");
|
|
32
|
-
this.columnCtrlPanel = document.createElement("div");
|
|
33
|
-
this.columnCtrlPanel.classList.add("qlbt-column-control-panel");
|
|
34
|
-
this.domNode.appendChild(this.columnCtrlPanel);
|
|
35
|
-
this.leftMask = document.createElement("div");
|
|
36
|
-
this.leftMask.classList.add("qlbt-left-mask");
|
|
37
|
-
index.css(this.leftMask, { height: `${tableViewRect.height + 50}px` });
|
|
38
|
-
this.domNode.appendChild(this.leftMask);
|
|
39
|
-
this.rowCtrlPanel = document.createElement("div");
|
|
40
|
-
this.rowCtrlPanel.classList.add("qlbt-row-control-panel");
|
|
41
|
-
this.domNode.appendChild(this.rowCtrlPanel);
|
|
42
|
-
this.updateRowToolCells();
|
|
43
|
-
this.updateColToolCells();
|
|
44
|
-
this.modulesContainer.appendChild(this.domNode);
|
|
45
|
-
index.css(this.domNode, {
|
|
46
|
-
width: "100%",
|
|
47
|
-
height: `${tableConfig.COL_TOOL_HEIGHT}px`,
|
|
48
|
-
left: "0px",
|
|
49
|
-
top: `${tableViewRect.top - containerRect.top + parent.scrollTop - 25}px`
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
createToolCell(isRow) {
|
|
53
|
-
window.quillIsIntable = true;
|
|
54
|
-
const toolCell = document.createElement("div");
|
|
55
|
-
const selector = document.createElement("div");
|
|
56
|
-
const resizeHolder = document.createElement("div");
|
|
57
|
-
if (isRow) {
|
|
58
|
-
toolCell.classList.add("qlbt-row-tool-cell");
|
|
59
|
-
selector.classList.add("qlbt-row-tool-cell-selector");
|
|
60
|
-
resizeHolder.classList.add("qlbt-row-tool-cell-holder");
|
|
61
|
-
index.css(toolCell, { width: `${tableConfig.ROW_TOOL_WIDTH}px` });
|
|
62
|
-
} else {
|
|
63
|
-
toolCell.classList.add("qlbt-col-tool-cell");
|
|
64
|
-
selector.classList.add("qlbt-col-tool-cell-selector");
|
|
65
|
-
resizeHolder.classList.add("qlbt-col-tool-cell-holder");
|
|
66
|
-
index.css(toolCell, { height: `${tableConfig.COL_TOOL_HEIGHT}px` });
|
|
67
|
-
}
|
|
68
|
-
toolCell.appendChild(selector);
|
|
69
|
-
toolCell.appendChild(resizeHolder);
|
|
70
|
-
return toolCell;
|
|
71
|
-
}
|
|
72
|
-
updateColToolCells() {
|
|
73
|
-
const tableContainer = Quill.find(this.table);
|
|
74
|
-
if (!tableContainer) {
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
const tableCols = tableContainer.colGroup().children;
|
|
78
|
-
const tableColsNum = Math.max(Array.from(tableCols).length, tableContainer.colGroup().domNode.children.length);
|
|
79
|
-
const existCells = Array.from(this.columnCtrlPanel.querySelectorAll(".qlbt-col-tool-cell"));
|
|
80
|
-
const cellsNumber = Math.max(existCells.length, tableColsNum);
|
|
81
|
-
for (let index$1 = 0; index$1 < cellsNumber; index$1++) {
|
|
82
|
-
let col = tableCols.at(index$1);
|
|
83
|
-
let colWidth = 0;
|
|
84
|
-
if (!col || col.domNode !== tableContainer.colGroup().domNode.children[index$1]) {
|
|
85
|
-
col = tableContainer.colGroup().domNode.children[index$1];
|
|
86
|
-
colWidth = col ? col.width : tableContainer.colGroup().domNode.children[index$1 - 1].width;
|
|
87
|
-
} else {
|
|
88
|
-
colWidth = Number.parseInt(col.formats()[col.statics.blotName].width, 10);
|
|
89
|
-
}
|
|
90
|
-
let colToolCell = null;
|
|
91
|
-
if (!existCells[index$1]) {
|
|
92
|
-
colToolCell = this.createToolCell(false);
|
|
93
|
-
this.columnCtrlPanel.appendChild(colToolCell);
|
|
94
|
-
this.addColCellSelectHandler(colToolCell);
|
|
95
|
-
this.addColCellHolderHandler(colToolCell);
|
|
96
|
-
index.css(colToolCell, {
|
|
97
|
-
"min-width": `${colWidth}px`
|
|
98
|
-
});
|
|
99
|
-
} else if (existCells[index$1] && index$1 >= tableColsNum) {
|
|
100
|
-
existCells[index$1].remove();
|
|
101
|
-
} else {
|
|
102
|
-
colToolCell = existCells[index$1];
|
|
103
|
-
index.css(colToolCell, {
|
|
104
|
-
"min-width": `${colWidth}px`
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
updateRowToolCells() {
|
|
110
|
-
const tableContainer = Quill.find(this.table);
|
|
111
|
-
if (!tableContainer) {
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
let tableRows = Array.from(tableContainer.domNode.querySelectorAll("tr"));
|
|
115
|
-
tableRows = tableRows.filter((tr) => tr.children.length);
|
|
116
|
-
const existCells = Array.from(this.rowCtrlPanel.querySelectorAll(".qlbt-row-tool-cell"));
|
|
117
|
-
const rowNumber = Math.max(existCells.length, tableRows.length);
|
|
118
|
-
for (let index$1 = 0; index$1 < rowNumber; index$1++) {
|
|
119
|
-
const row = tableRows[index$1];
|
|
120
|
-
let computedHeight = row && getComputedStyle(row).height;
|
|
121
|
-
if (computedHeight === "auto") {
|
|
122
|
-
computedHeight = row.querySelector("td").style.height || "30px";
|
|
123
|
-
}
|
|
124
|
-
let rowHeight = row && Number.parseFloat(computedHeight);
|
|
125
|
-
if (rowHeight < tableConfig.CELL_MIN_HEIGHT) {
|
|
126
|
-
const rowChildHeight = row && row.childNodes[0] && Number.parseFloat(getComputedStyle(row.childNodes[0]).height);
|
|
127
|
-
rowHeight = rowChildHeight;
|
|
128
|
-
}
|
|
129
|
-
let rowToolCell = null;
|
|
130
|
-
if (!existCells[index$1]) {
|
|
131
|
-
rowToolCell = this.createToolCell(true);
|
|
132
|
-
this.rowCtrlPanel.appendChild(rowToolCell);
|
|
133
|
-
this.addRowCellSelectHandler(rowToolCell);
|
|
134
|
-
this.addRowCellHolderHandler(rowToolCell);
|
|
135
|
-
index.css(rowToolCell, { height: `${rowHeight}px` });
|
|
136
|
-
} else if (existCells[index$1] && index$1 >= tableRows.length) {
|
|
137
|
-
existCells[index$1].remove();
|
|
138
|
-
} else {
|
|
139
|
-
rowToolCell = existCells[index$1];
|
|
140
|
-
index.css(rowToolCell, { height: `${rowHeight}px` });
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
destroy() {
|
|
145
|
-
window.quillIsIntable = false;
|
|
146
|
-
this.domNode.remove();
|
|
147
|
-
return null;
|
|
148
|
-
}
|
|
149
|
-
addRowCellSelectHandler(cell) {
|
|
150
|
-
const selector = cell.querySelector(".qlbt-row-tool-cell-selector");
|
|
151
|
-
const handleClick = (e) => {
|
|
152
|
-
e.preventDefault();
|
|
153
|
-
const dom = e.target.parentNode;
|
|
154
|
-
const domRect = dom.getBoundingClientRect();
|
|
155
|
-
const containerRect = this.quill.root.parentNode.getBoundingClientRect();
|
|
156
|
-
const tableRect = this.table.getBoundingClientRect();
|
|
157
|
-
const tableSelection = this.quill.getModule("better-table").tableSelection;
|
|
158
|
-
tableSelection.boundary = {
|
|
159
|
-
x: tableRect.left - containerRect.left,
|
|
160
|
-
// 表格左上角X轴坐标
|
|
161
|
-
x1: tableRect.left - containerRect.left + tableRect.width - 2,
|
|
162
|
-
// 表格右上角X轴坐标
|
|
163
|
-
y: domRect.top - containerRect.top,
|
|
164
|
-
// 表格左上角Y轴坐标
|
|
165
|
-
y1: domRect.top - containerRect.top + domRect.height - 1,
|
|
166
|
-
// 表格右上角Y轴坐标
|
|
167
|
-
width: tableRect.width - 2,
|
|
168
|
-
height: domRect.height - 1
|
|
169
|
-
};
|
|
170
|
-
tableSelection.selectedTds = tableSelection.computeSelectedTds();
|
|
171
|
-
tableSelection.repositionHelpLines();
|
|
172
|
-
dom.classList.add("qlbt-tool-cell-on");
|
|
173
|
-
this.activeToolCell = dom;
|
|
174
|
-
};
|
|
175
|
-
selector.addEventListener("click", handleClick, false);
|
|
176
|
-
}
|
|
177
|
-
addRowCellHolderHandler(cell) {
|
|
178
|
-
const holder = cell.querySelector(".qlbt-row-tool-cell-holder");
|
|
179
|
-
let dragging = false;
|
|
180
|
-
let y0 = 0;
|
|
181
|
-
let y = 0;
|
|
182
|
-
let delta = 0;
|
|
183
|
-
let height0 = 0;
|
|
184
|
-
let tableRect = {};
|
|
185
|
-
let cellRect = {};
|
|
186
|
-
let helpLine = null;
|
|
187
|
-
const handleDrag = (e) => {
|
|
188
|
-
e.preventDefault();
|
|
189
|
-
if (dragging) {
|
|
190
|
-
y = e.clientY;
|
|
191
|
-
if (height0 + y - y0 >= tableConfig.CELL_MIN_HEIGHT) {
|
|
192
|
-
delta = y - y0;
|
|
193
|
-
} else {
|
|
194
|
-
delta = tableConfig.CELL_MIN_HEIGHT - height0;
|
|
195
|
-
}
|
|
196
|
-
index.css(helpLine, {
|
|
197
|
-
top: `${cellRect.top + cellRect.height + delta}px`
|
|
198
|
-
});
|
|
199
|
-
}
|
|
200
|
-
};
|
|
201
|
-
const handleMouseup = (e) => {
|
|
202
|
-
e.preventDefault();
|
|
203
|
-
const existCells = Array.from(this.domNode.querySelectorAll(".qlbt-row-tool-cell"));
|
|
204
|
-
const rowIndex = existCells.indexOf(cell);
|
|
205
|
-
const rows = Array.from(this.table.querySelectorAll("tr"));
|
|
206
|
-
const tds = Array.from(rows[rowIndex].childNodes);
|
|
207
|
-
const hasContentTd = tds.find((td) => td.getAttribute("rowspan") === "1" && td.textContent !== "\n");
|
|
208
|
-
if (dragging) {
|
|
209
|
-
let tdHeight = `${height0 + delta}px`;
|
|
210
|
-
if (hasContentTd) {
|
|
211
|
-
tds.forEach((td) => td.getAttribute("rowspan") === "1" && index.css(td, { height: tdHeight }));
|
|
212
|
-
const currentHeight = getComputedStyle(hasContentTd).height;
|
|
213
|
-
tdHeight = Number.parseInt(currentHeight, 10) > height0 + delta && currentHeight || tdHeight;
|
|
214
|
-
}
|
|
215
|
-
index.css(cell, { height: tdHeight });
|
|
216
|
-
tds.forEach((td) => td.getAttribute("rowspan") === "1" && index.css(td, { height: tdHeight }));
|
|
217
|
-
const tableViewRect = this.table.parentNode.getBoundingClientRect();
|
|
218
|
-
index.css(this.leftMask, { height: `${tableViewRect.height + 50}px` });
|
|
219
|
-
y0 = 0;
|
|
220
|
-
y = 0;
|
|
221
|
-
delta = 0;
|
|
222
|
-
height0 = 0;
|
|
223
|
-
dragging = false;
|
|
224
|
-
holder.classList.remove("dragging");
|
|
225
|
-
}
|
|
226
|
-
this.quill.root.parentNode.removeEventListener("mousemove", handleDrag, false);
|
|
227
|
-
document.removeEventListener("mouseup", handleMouseup, false);
|
|
228
|
-
tableRect = {};
|
|
229
|
-
cellRect = {};
|
|
230
|
-
helpLine.remove();
|
|
231
|
-
helpLine = null;
|
|
232
|
-
const betterTableModule = this.quill.getModule("better-table");
|
|
233
|
-
const tableScrollBar = betterTableModule.tableScrollBar;
|
|
234
|
-
tableScrollBar.resetTableHeight(this.table);
|
|
235
|
-
const tableSelection = betterTableModule.tableSelection;
|
|
236
|
-
if (tableSelection && tableSelection.selectedTds.length) {
|
|
237
|
-
tableSelection.refreshHelpLinesPosition();
|
|
238
|
-
}
|
|
239
|
-
};
|
|
240
|
-
const handleMousedown = (e) => {
|
|
241
|
-
e.preventDefault();
|
|
242
|
-
this.quill.root.parentNode.addEventListener("mousemove", handleDrag, false);
|
|
243
|
-
document.addEventListener("mouseup", handleMouseup, false);
|
|
244
|
-
tableRect = this.table.getBoundingClientRect();
|
|
245
|
-
const tableViewRect = this.table.parentNode.getBoundingClientRect();
|
|
246
|
-
const width = tableRect.width > tableViewRect.width && tableViewRect.width || tableRect.width;
|
|
247
|
-
cellRect = cell.getBoundingClientRect();
|
|
248
|
-
helpLine = document.createElement("div");
|
|
249
|
-
index.css(helpLine, {
|
|
250
|
-
position: "fixed",
|
|
251
|
-
top: `${cellRect.top + cellRect.height}px`,
|
|
252
|
-
left: `${cellRect.left}px`,
|
|
253
|
-
zIndex: "100",
|
|
254
|
-
width: `${width + tableConfig.ROW_TOOL_WIDTH + 9}px`,
|
|
255
|
-
height: "1px",
|
|
256
|
-
backgroundColor: tableConfig.PRIMARY_COLOR
|
|
257
|
-
});
|
|
258
|
-
this.quill.root.parentNode.appendChild(helpLine);
|
|
259
|
-
dragging = true;
|
|
260
|
-
y0 = e.clientY;
|
|
261
|
-
height0 = cellRect.height;
|
|
262
|
-
holder.classList.add("dragging");
|
|
263
|
-
};
|
|
264
|
-
holder.addEventListener("mousedown", handleMousedown, false);
|
|
265
|
-
}
|
|
266
|
-
addColCellSelectHandler(cell) {
|
|
267
|
-
const selector = cell.querySelector(".qlbt-col-tool-cell-selector");
|
|
268
|
-
const handleClick = (e) => {
|
|
269
|
-
e.preventDefault();
|
|
270
|
-
const dom = e.target.parentNode;
|
|
271
|
-
const domRect = dom.getBoundingClientRect();
|
|
272
|
-
const containerRect = this.quill.root.parentNode.getBoundingClientRect();
|
|
273
|
-
const tableRect = this.table.getBoundingClientRect();
|
|
274
|
-
const tableSelection = this.quill.getModule("better-table").tableSelection;
|
|
275
|
-
tableSelection.boundary = {
|
|
276
|
-
x: domRect.left - containerRect.left - 1,
|
|
277
|
-
x1: domRect.left - containerRect.left + domRect.width - 2,
|
|
278
|
-
y: tableRect.top - containerRect.top,
|
|
279
|
-
y1: tableRect.top - containerRect.top + tableRect.height - 2,
|
|
280
|
-
width: domRect.width,
|
|
281
|
-
height: tableRect.height - 2
|
|
282
|
-
};
|
|
283
|
-
tableSelection.selectedTds = tableSelection.computeSelectedTds();
|
|
284
|
-
tableSelection.repositionHelpLines();
|
|
285
|
-
dom.classList.add("qlbt-tool-cell-on");
|
|
286
|
-
this.activeToolCell = dom;
|
|
287
|
-
};
|
|
288
|
-
selector.addEventListener("click", handleClick, false);
|
|
289
|
-
}
|
|
290
|
-
addColCellHolderHandler(cell) {
|
|
291
|
-
const tableContainer = Quill.find(this.table);
|
|
292
|
-
const holder = cell.querySelector(".qlbt-col-tool-cell-holder");
|
|
293
|
-
let dragging = false;
|
|
294
|
-
let x0 = 0;
|
|
295
|
-
let x = 0;
|
|
296
|
-
let delta = 0;
|
|
297
|
-
let width0 = 0;
|
|
298
|
-
let tableRect = {};
|
|
299
|
-
let scrollContainerRect = null;
|
|
300
|
-
let cellRect = {};
|
|
301
|
-
let helpLine = null;
|
|
302
|
-
const handleDrag = (e) => {
|
|
303
|
-
e.preventDefault();
|
|
304
|
-
if (dragging) {
|
|
305
|
-
x = e.clientX;
|
|
306
|
-
if (width0 + x - x0 >= tableConfig.CELL_MIN_WIDTH) {
|
|
307
|
-
delta = x - x0;
|
|
308
|
-
} else {
|
|
309
|
-
delta = tableConfig.CELL_MIN_WIDTH - width0;
|
|
310
|
-
}
|
|
311
|
-
let left = cellRect.left + cellRect.width - 1 + delta;
|
|
312
|
-
if (scrollContainerRect) {
|
|
313
|
-
left -= scrollContainerRect.left;
|
|
314
|
-
}
|
|
315
|
-
index.css(helpLine, {
|
|
316
|
-
left: `${left}px`
|
|
317
|
-
});
|
|
318
|
-
}
|
|
319
|
-
};
|
|
320
|
-
const handleMouseup = (e) => {
|
|
321
|
-
e.preventDefault();
|
|
322
|
-
const existCells = Array.from(this.domNode.querySelectorAll(".qlbt-col-tool-cell"));
|
|
323
|
-
const colIndex = existCells.indexOf(cell);
|
|
324
|
-
let colBlot = tableContainer.colGroup().children.at(colIndex);
|
|
325
|
-
if (!colBlot || colBlot.domNode !== tableContainer.colGroup().domNode.children[colIndex]) {
|
|
326
|
-
colBlot = tableContainer.colGroup().domNode.children[colIndex];
|
|
327
|
-
}
|
|
328
|
-
if (dragging) {
|
|
329
|
-
const colWidth = Number.parseInt(width0 + delta, 10);
|
|
330
|
-
if (colBlot.format) {
|
|
331
|
-
colBlot.format("width", colWidth);
|
|
332
|
-
} else {
|
|
333
|
-
colBlot.width = colWidth;
|
|
334
|
-
}
|
|
335
|
-
index.css(cell, { "min-width": `${colWidth}px` });
|
|
336
|
-
x0 = 0;
|
|
337
|
-
x = 0;
|
|
338
|
-
delta = 0;
|
|
339
|
-
width0 = 0;
|
|
340
|
-
dragging = false;
|
|
341
|
-
holder.classList.remove("dragging");
|
|
342
|
-
}
|
|
343
|
-
this.quill.root.parentNode.removeEventListener("mousemove", handleDrag, false);
|
|
344
|
-
document.removeEventListener("mouseup", handleMouseup, false);
|
|
345
|
-
tableRect = {};
|
|
346
|
-
scrollContainerRect = null;
|
|
347
|
-
cellRect = {};
|
|
348
|
-
helpLine.remove();
|
|
349
|
-
helpLine = null;
|
|
350
|
-
tableContainer.updateTableWidth();
|
|
351
|
-
setTimeout(() => {
|
|
352
|
-
this.updateRowToolCells();
|
|
353
|
-
const betterTableModule = this.quill.getModule("better-table");
|
|
354
|
-
const tableScrollBar = betterTableModule.tableScrollBar;
|
|
355
|
-
tableScrollBar.updateScrollBar();
|
|
356
|
-
const tableSelection = betterTableModule.tableSelection;
|
|
357
|
-
if (tableSelection && tableSelection.selectedTds.length) {
|
|
358
|
-
tableSelection.refreshHelpLinesPosition();
|
|
359
|
-
}
|
|
360
|
-
});
|
|
361
|
-
};
|
|
362
|
-
const handleMousedown = (e) => {
|
|
363
|
-
e.preventDefault();
|
|
364
|
-
this.quill.root.parentNode.addEventListener("mousemove", handleDrag, false);
|
|
365
|
-
document.addEventListener("mouseup", handleMouseup, false);
|
|
366
|
-
tableRect = this.table.getBoundingClientRect();
|
|
367
|
-
cellRect = cell.getBoundingClientRect();
|
|
368
|
-
let positionValue = "fixed";
|
|
369
|
-
let top = cellRect.top;
|
|
370
|
-
let left = cellRect.left + cellRect.width - 1;
|
|
371
|
-
if (this.quill.root === this.quill.scrollingContainer) {
|
|
372
|
-
positionValue = "absolute";
|
|
373
|
-
scrollContainerRect = this.quill.root.getBoundingClientRect();
|
|
374
|
-
top -= scrollContainerRect.top;
|
|
375
|
-
left -= scrollContainerRect.left;
|
|
376
|
-
}
|
|
377
|
-
helpLine = document.createElement("div");
|
|
378
|
-
index.css(helpLine, {
|
|
379
|
-
position: positionValue,
|
|
380
|
-
top: `${top}px`,
|
|
381
|
-
left: `${left}px`,
|
|
382
|
-
zIndex: "100",
|
|
383
|
-
height: `${tableRect.height + tableConfig.COL_TOOL_HEIGHT + 8}px`,
|
|
384
|
-
width: "1px",
|
|
385
|
-
backgroundColor: tableConfig.PRIMARY_COLOR
|
|
386
|
-
});
|
|
387
|
-
this.quill.root.parentNode.appendChild(helpLine);
|
|
388
|
-
dragging = true;
|
|
389
|
-
x0 = e.clientX;
|
|
390
|
-
width0 = cellRect.width;
|
|
391
|
-
holder.classList.add("dragging");
|
|
392
|
-
};
|
|
393
|
-
holder.addEventListener("mousedown", handleMousedown, false);
|
|
394
|
-
}
|
|
395
|
-
colToolCells() {
|
|
396
|
-
return Array.from(this.domNode.querySelectorAll(".qlbt-col-tool-cell"));
|
|
397
|
-
}
|
|
398
|
-
}
|
|
399
|
-
exports.default = TableColumnTool;
|
|
400
|
-
//# sourceMappingURL=table-column-tool.cjs.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"table-column-tool.cjs.js","sources":["../../../../../src/modules/table/modules/table-column-tool.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { CELL_MIN_HEIGHT, CELL_MIN_WIDTH, COL_TOOL_HEIGHT, PRIMARY_COLOR, ROW_TOOL_WIDTH } from '../table-config'\r\nimport { css } from '../utils'\r\n\r\nexport default class TableColumnTool {\r\n table: any\r\n quill: any\r\n modulesContainer: any\r\n domNode: any\r\n columnCtrlPanel: HTMLDivElement\r\n leftMask: HTMLDivElement\r\n rowCtrlPanel: HTMLDivElement\r\n activeToolCell: HTMLElement\r\n oldRootScrollTop: any\r\n constructor(table, quill, dom) {\r\n if (!table) {\r\n return null\r\n }\r\n this.table = table\r\n this.quill = quill\r\n this.modulesContainer = dom\r\n this.domNode = null\r\n this.oldRootScrollTop = this.quill.root.scrollTop\r\n\r\n this.initColTool()\r\n\r\n if (this.quill.root === this.quill.scrollingContainer) {\r\n this.quill.root.addEventListener('scroll', this.handleQuillRootScroll.bind(this))\r\n }\r\n }\r\n\r\n handleQuillRootScroll() {\r\n if (this.domNode) {\r\n this.domNode.style.marginTop = `${this.oldRootScrollTop - this.quill.root.scrollTop}px`\r\n }\r\n }\r\n\r\n initColTool() {\r\n const parent = this.quill.root.parentNode\r\n const containerRect = parent.getBoundingClientRect()\r\n const tableViewRect = this.table.parentNode.getBoundingClientRect()\r\n\r\n this.domNode = document.createElement('div')\r\n this.domNode.classList.add('qlbt-table-control-panel')\r\n\r\n // 以下添加顺序影响遮罩顺序,勿改变\r\n this.columnCtrlPanel = document.createElement('div')\r\n this.columnCtrlPanel.classList.add('qlbt-column-control-panel')\r\n this.domNode.appendChild(this.columnCtrlPanel)\r\n\r\n this.leftMask = document.createElement('div')\r\n this.leftMask.classList.add('qlbt-left-mask')\r\n css(this.leftMask, { height: `${tableViewRect.height + 50}px` })\r\n this.domNode.appendChild(this.leftMask)\r\n\r\n this.rowCtrlPanel = document.createElement('div')\r\n this.rowCtrlPanel.classList.add('qlbt-row-control-panel')\r\n this.domNode.appendChild(this.rowCtrlPanel)\r\n\r\n this.updateRowToolCells()\r\n this.updateColToolCells()\r\n\r\n this.modulesContainer.appendChild(this.domNode)\r\n css(this.domNode, {\r\n width: '100%',\r\n height: `${COL_TOOL_HEIGHT}px`,\r\n left: '0px',\r\n top: `${tableViewRect.top - containerRect.top + parent.scrollTop - 25}px`,\r\n })\r\n }\r\n\r\n createToolCell(isRow) {\r\n // @ts-ignore\r\n window.quillIsIntable = true\r\n const toolCell = document.createElement('div')\r\n const selector = document.createElement('div')\r\n const resizeHolder = document.createElement('div')\r\n if (isRow) {\r\n toolCell.classList.add('qlbt-row-tool-cell')\r\n selector.classList.add('qlbt-row-tool-cell-selector')\r\n resizeHolder.classList.add('qlbt-row-tool-cell-holder')\r\n css(toolCell, { width: `${ROW_TOOL_WIDTH}px` })\r\n }\r\n else {\r\n toolCell.classList.add('qlbt-col-tool-cell')\r\n selector.classList.add('qlbt-col-tool-cell-selector')\r\n resizeHolder.classList.add('qlbt-col-tool-cell-holder')\r\n css(toolCell, { height: `${COL_TOOL_HEIGHT}px` })\r\n }\r\n toolCell.appendChild(selector)\r\n toolCell.appendChild(resizeHolder)\r\n return toolCell\r\n }\r\n\r\n updateColToolCells() {\r\n const tableContainer = Quill.find(this.table)\r\n if (!tableContainer) {\r\n return\r\n }\r\n const tableCols = tableContainer.colGroup().children\r\n const tableColsNum = Math.max(Array.from(tableCols).length, tableContainer.colGroup().domNode.children.length)\r\n const existCells: any = Array.from(this.columnCtrlPanel.querySelectorAll('.qlbt-col-tool-cell'))\r\n const cellsNumber = Math.max(existCells.length, tableColsNum)\r\n\r\n for (let index = 0; index < cellsNumber; index++) {\r\n let col = tableCols.at(index)\r\n let colWidth = 0\r\n if (!col || col.domNode !== tableContainer.colGroup().domNode.children[index]) {\r\n col = tableContainer.colGroup().domNode.children[index]\r\n colWidth = col ? col.width : tableContainer.colGroup().domNode.children[index - 1].width\r\n }\r\n else {\r\n colWidth = Number.parseInt(col.formats()[col.statics.blotName].width, 10)\r\n }\r\n // if cell already exist\r\n let colToolCell = null\r\n if (!existCells[index]) {\r\n colToolCell = this.createToolCell(false)\r\n this.columnCtrlPanel.appendChild(colToolCell)\r\n this.addColCellSelectHandler(colToolCell)\r\n this.addColCellHolderHandler(colToolCell)\r\n // set tool cell min-width\r\n css(colToolCell, {\r\n 'min-width': `${colWidth}px`,\r\n })\r\n }\r\n else if (existCells[index] && index >= tableColsNum) {\r\n existCells[index].remove()\r\n }\r\n else {\r\n colToolCell = existCells[index]\r\n // set tool cell min-width\r\n css(colToolCell, {\r\n 'min-width': `${colWidth}px`,\r\n })\r\n }\r\n }\r\n }\r\n\r\n updateRowToolCells() {\r\n const tableContainer = Quill.find(this.table)\r\n if (!tableContainer) {\r\n return\r\n }\r\n let tableRows = Array.from(tableContainer.domNode.querySelectorAll('tr'))\r\n tableRows = tableRows.filter((tr: any) => tr.children.length)\r\n const existCells: any = Array.from(this.rowCtrlPanel.querySelectorAll('.qlbt-row-tool-cell'))\r\n const rowNumber = Math.max(existCells.length, tableRows.length)\r\n\r\n for (let index = 0; index < rowNumber; index++) {\r\n const row: any = tableRows[index]\r\n\r\n // fix: 修复 IE11/Edge 下无法拿到 height 的问题\r\n // IE11/Edge 下 height 会变成 'auto'\r\n let computedHeight = row && getComputedStyle(row).height\r\n if (computedHeight === 'auto') {\r\n computedHeight = row.querySelector('td').style.height || '30px'\r\n }\r\n\r\n let rowHeight = row && Number.parseFloat(computedHeight)\r\n if (rowHeight < CELL_MIN_HEIGHT) {\r\n const rowChildHeight = row && row.childNodes[0] && Number.parseFloat(getComputedStyle(row.childNodes[0]).height)\r\n rowHeight = rowChildHeight\r\n }\r\n // if cell already exist\r\n let rowToolCell = null\r\n if (!existCells[index]) {\r\n rowToolCell = this.createToolCell(true)\r\n this.rowCtrlPanel.appendChild(rowToolCell)\r\n this.addRowCellSelectHandler(rowToolCell)\r\n this.addRowCellHolderHandler(rowToolCell)\r\n // set tool cell height, ff not support min-height\r\n css(rowToolCell, { height: `${rowHeight}px` })\r\n }\r\n else if (existCells[index] && index >= tableRows.length) {\r\n existCells[index].remove()\r\n }\r\n else {\r\n rowToolCell = existCells[index]\r\n css(rowToolCell, { height: `${rowHeight}px` })\r\n }\r\n }\r\n }\r\n\r\n destroy() {\r\n // @ts-ignore\r\n window.quillIsIntable = false\r\n this.domNode.remove()\r\n return null\r\n }\r\n\r\n addRowCellSelectHandler(cell) {\r\n const selector = cell.querySelector('.qlbt-row-tool-cell-selector')\r\n\r\n const handleClick = (e) => {\r\n e.preventDefault()\r\n\r\n const dom = e.target.parentNode\r\n const domRect = dom.getBoundingClientRect()\r\n const containerRect = this.quill.root.parentNode.getBoundingClientRect()\r\n const tableRect = this.table.getBoundingClientRect()\r\n const tableSelection = this.quill.getModule('better-table').tableSelection\r\n tableSelection.boundary = {\r\n x: tableRect.left - containerRect.left, // 表格左上角X轴坐标\r\n x1: tableRect.left - containerRect.left + tableRect.width - 2, // 表格右上角X轴坐标\r\n y: domRect.top - containerRect.top, // 表格左上角Y轴坐标\r\n y1: domRect.top - containerRect.top + domRect.height - 1, // 表格右上角Y轴坐标\r\n width: tableRect.width - 2,\r\n height: domRect.height - 1,\r\n }\r\n tableSelection.selectedTds = tableSelection.computeSelectedTds()\r\n tableSelection.repositionHelpLines()\r\n\r\n dom.classList.add('qlbt-tool-cell-on')\r\n this.activeToolCell = dom\r\n }\r\n\r\n selector.addEventListener('click', handleClick, false)\r\n }\r\n\r\n addRowCellHolderHandler(cell) {\r\n const holder = cell.querySelector('.qlbt-row-tool-cell-holder')\r\n let dragging = false\r\n let y0 = 0\r\n let y = 0\r\n let delta = 0\r\n let height0 = 0\r\n // helpLine relation variable\r\n let tableRect: any = {}\r\n let cellRect: any = {}\r\n let helpLine = null\r\n\r\n const handleDrag = (e) => {\r\n e.preventDefault()\r\n\r\n if (dragging) {\r\n y = e.clientY\r\n\r\n if (height0 + y - y0 >= CELL_MIN_HEIGHT) {\r\n delta = y - y0\r\n }\r\n else {\r\n delta = CELL_MIN_HEIGHT - height0\r\n }\r\n\r\n css(helpLine, {\r\n top: `${cellRect.top + cellRect.height + delta}px`,\r\n })\r\n }\r\n }\r\n\r\n const handleMouseup = (e) => {\r\n e.preventDefault()\r\n\r\n const existCells = Array.from(this.domNode.querySelectorAll('.qlbt-row-tool-cell'))\r\n const rowIndex = existCells.indexOf(cell)\r\n const rows: any = Array.from(this.table.querySelectorAll('tr'))\r\n const tds = Array.from(rows[rowIndex].childNodes)\r\n const hasContentTd: any = tds.find((td: any) => td.getAttribute('rowspan') === '1' && td.textContent !== '\\n')\r\n\r\n if (dragging) {\r\n let tdHeight = `${height0 + delta}px`\r\n if (hasContentTd) {\r\n tds.forEach((td: any) => td.getAttribute('rowspan') === '1' && css(td, { height: tdHeight }))\r\n const currentHeight = getComputedStyle(hasContentTd).height\r\n tdHeight = (Number.parseInt(currentHeight, 10) > height0 + delta && currentHeight) || tdHeight\r\n }\r\n css(cell, { height: tdHeight })\r\n tds.forEach((td: any) => td.getAttribute('rowspan') === '1' && css(td, { height: tdHeight }))\r\n\r\n const tableViewRect = this.table.parentNode.getBoundingClientRect()\r\n css(this.leftMask, { height: `${tableViewRect.height + 50}px` })\r\n\r\n y0 = 0\r\n y = 0\r\n delta = 0\r\n height0 = 0\r\n dragging = false\r\n holder.classList.remove('dragging')\r\n }\r\n\r\n this.quill.root.parentNode.removeEventListener('mousemove', handleDrag, false)\r\n document.removeEventListener('mouseup', handleMouseup, false)\r\n tableRect = {}\r\n cellRect = {}\r\n helpLine.remove()\r\n helpLine = null\r\n\r\n const betterTableModule = this.quill.getModule('better-table')\r\n const tableScrollBar = betterTableModule.tableScrollBar\r\n tableScrollBar.resetTableHeight(this.table)\r\n\r\n // fix: 拖动滚动条时修正选区位置\r\n const tableSelection = betterTableModule.tableSelection\r\n if (tableSelection && tableSelection.selectedTds.length) {\r\n tableSelection.refreshHelpLinesPosition()\r\n }\r\n }\r\n\r\n const handleMousedown = (e) => {\r\n e.preventDefault()\r\n\r\n this.quill.root.parentNode.addEventListener('mousemove', handleDrag, false)\r\n document.addEventListener('mouseup', handleMouseup, false)\r\n\r\n tableRect = this.table.getBoundingClientRect()\r\n const tableViewRect = this.table.parentNode.getBoundingClientRect()\r\n const width = (tableRect.width > tableViewRect.width && tableViewRect.width) || tableRect.width\r\n cellRect = cell.getBoundingClientRect()\r\n helpLine = document.createElement('div')\r\n css(helpLine, {\r\n position: 'fixed',\r\n top: `${cellRect.top + cellRect.height}px`,\r\n left: `${cellRect.left}px`,\r\n zIndex: '100',\r\n width: `${width + ROW_TOOL_WIDTH + 9}px`,\r\n height: '1px',\r\n backgroundColor: PRIMARY_COLOR,\r\n })\r\n\r\n this.quill.root.parentNode.appendChild(helpLine)\r\n dragging = true\r\n y0 = e.clientY\r\n height0 = cellRect.height\r\n holder.classList.add('dragging')\r\n }\r\n\r\n holder.addEventListener('mousedown', handleMousedown, false)\r\n }\r\n\r\n addColCellSelectHandler(cell) {\r\n // 上方列宽控制条\r\n\r\n const selector = cell.querySelector('.qlbt-col-tool-cell-selector')\r\n\r\n const handleClick = (e) => {\r\n e.preventDefault()\r\n\r\n const dom = e.target.parentNode\r\n const domRect = dom.getBoundingClientRect()\r\n const containerRect = this.quill.root.parentNode.getBoundingClientRect()\r\n const tableRect = this.table.getBoundingClientRect()\r\n const tableSelection = this.quill.getModule('better-table').tableSelection\r\n tableSelection.boundary = {\r\n x: domRect.left - containerRect.left - 1,\r\n x1: domRect.left - containerRect.left + domRect.width - 2,\r\n y: tableRect.top - containerRect.top,\r\n y1: tableRect.top - containerRect.top + tableRect.height - 2,\r\n width: domRect.width,\r\n height: tableRect.height - 2,\r\n }\r\n tableSelection.selectedTds = tableSelection.computeSelectedTds()\r\n tableSelection.repositionHelpLines()\r\n\r\n dom.classList.add('qlbt-tool-cell-on')\r\n this.activeToolCell = dom\r\n }\r\n selector.addEventListener('click', handleClick, false)\r\n }\r\n\r\n addColCellHolderHandler(cell) {\r\n const tableContainer = Quill.find(this.table)\r\n const holder = cell.querySelector('.qlbt-col-tool-cell-holder')\r\n let dragging = false\r\n let x0 = 0\r\n let x = 0\r\n let delta: any = 0\r\n let width0 = 0\r\n // helpLine relation variable\r\n let tableRect: any = {}\r\n let scrollContainerRect = null\r\n let cellRect: any = {}\r\n let helpLine = null\r\n\r\n const handleDrag = (e) => {\r\n e.preventDefault()\r\n\r\n if (dragging) {\r\n x = e.clientX\r\n\r\n if (width0 + x - x0 >= CELL_MIN_WIDTH) {\r\n delta = x - x0\r\n }\r\n else {\r\n delta = CELL_MIN_WIDTH - width0\r\n }\r\n let left = cellRect.left + cellRect.width - 1 + delta\r\n if (scrollContainerRect) {\r\n left -= scrollContainerRect.left\r\n }\r\n\r\n css(helpLine, {\r\n left: `${left}px`,\r\n })\r\n }\r\n }\r\n\r\n const handleMouseup = (e) => {\r\n e.preventDefault()\r\n\r\n const existCells = Array.from(this.domNode.querySelectorAll('.qlbt-col-tool-cell'))\r\n const colIndex = existCells.indexOf(cell)\r\n let colBlot = tableContainer.colGroup().children.at(colIndex)\r\n if (!colBlot || colBlot.domNode !== tableContainer.colGroup().domNode.children[colIndex]) {\r\n colBlot = tableContainer.colGroup().domNode.children[colIndex]\r\n }\r\n if (dragging) {\r\n // fix: 防止 colWidth 是小数\r\n const colWidth = Number.parseInt(width0 + delta, 10)\r\n if (colBlot.format) {\r\n colBlot.format('width', colWidth)\r\n }\r\n else {\r\n colBlot.width = colWidth\r\n }\r\n\r\n css(cell, { 'min-width': `${colWidth}px` })\r\n\r\n x0 = 0\r\n x = 0\r\n delta = 0\r\n width0 = 0\r\n dragging = false\r\n holder.classList.remove('dragging')\r\n }\r\n\r\n this.quill.root.parentNode.removeEventListener('mousemove', handleDrag, false)\r\n document.removeEventListener('mouseup', handleMouseup, false)\r\n tableRect = {}\r\n scrollContainerRect = null\r\n cellRect = {}\r\n helpLine.remove()\r\n helpLine = null\r\n tableContainer.updateTableWidth()\r\n\r\n setTimeout(() => {\r\n this.updateRowToolCells()\r\n const betterTableModule = this.quill.getModule('better-table')\r\n const tableScrollBar = betterTableModule.tableScrollBar\r\n tableScrollBar.updateScrollBar()\r\n // fix: 拖动滚动条时修正选区位置\r\n const tableSelection = betterTableModule.tableSelection\r\n if (tableSelection && tableSelection.selectedTds.length) {\r\n tableSelection.refreshHelpLinesPosition()\r\n }\r\n })\r\n }\r\n\r\n const handleMousedown = (e) => {\r\n e.preventDefault()\r\n\r\n this.quill.root.parentNode.addEventListener('mousemove', handleDrag, false)\r\n document.addEventListener('mouseup', handleMouseup, false)\r\n\r\n tableRect = this.table.getBoundingClientRect()\r\n cellRect = cell.getBoundingClientRect()\r\n\r\n let positionValue = 'fixed'\r\n let top = cellRect.top\r\n let left = cellRect.left + cellRect.width - 1\r\n if (this.quill.root === this.quill.scrollingContainer) {\r\n positionValue = 'absolute'\r\n scrollContainerRect = this.quill.root.getBoundingClientRect()\r\n top -= scrollContainerRect.top\r\n left -= scrollContainerRect.left\r\n }\r\n\r\n helpLine = document.createElement('div')\r\n css(helpLine, {\r\n position: positionValue,\r\n top: `${top}px`,\r\n left: `${left}px`,\r\n zIndex: '100',\r\n height: `${tableRect.height + COL_TOOL_HEIGHT + 8}px`,\r\n width: '1px',\r\n backgroundColor: PRIMARY_COLOR,\r\n })\r\n\r\n this.quill.root.parentNode.appendChild(helpLine)\r\n dragging = true\r\n x0 = e.clientX\r\n width0 = cellRect.width\r\n holder.classList.add('dragging')\r\n }\r\n\r\n holder.addEventListener('mousedown', handleMousedown, false)\r\n }\r\n\r\n colToolCells() {\r\n return Array.from(this.domNode.querySelectorAll('.qlbt-col-tool-cell'))\r\n }\r\n}\r\n"],"names":["css","COL_TOOL_HEIGHT","ROW_TOOL_WIDTH","index","CELL_MIN_HEIGHT","PRIMARY_COLOR","CELL_MIN_WIDTH"],"mappings":"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"}
|