@opentiny/fluent-editor 3.23.2 → 3.24.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.
Files changed (267) hide show
  1. package/README.md +103 -102
  2. package/es/attributors/line-height.es.js.map +1 -1
  3. package/es/config/base64-image.es.js.map +1 -1
  4. package/es/config/editor.config.es.js.map +1 -1
  5. package/es/config/editor.utils.es.js.map +1 -1
  6. package/es/config/i18n/en-us.es.js.map +1 -1
  7. package/es/config/i18n/zh-cn.es.js.map +1 -1
  8. package/es/config/icons.config.es.js.map +1 -1
  9. package/es/config/index.es.js +15 -1
  10. package/es/config/index.es.js.map +1 -1
  11. package/es/counter/index.es.js.map +1 -1
  12. package/es/custom-clipboard.es.js.map +1 -1
  13. package/es/custom-image/BlotFormatter.es.js.map +1 -1
  14. package/es/custom-image/Options.es.js.map +1 -1
  15. package/es/custom-image/actions/Action.es.js.map +1 -1
  16. package/es/custom-image/actions/CustomResizeAction.es.js.map +1 -1
  17. package/es/custom-image/actions/DeleteAction.es.js.map +1 -1
  18. package/es/custom-image/image.es.js.map +1 -1
  19. package/es/custom-image/specs/BlotSpec.es.js.map +1 -1
  20. package/es/custom-image/specs/CustomImageSpec.es.js.map +1 -1
  21. package/es/custom-image/specs/ImageSpec.es.js.map +1 -1
  22. package/es/custom-uploader.es.js +13 -2
  23. package/es/custom-uploader.es.js.map +1 -1
  24. package/es/emoji/emoji-list/people.es.js.map +1 -1
  25. package/es/emoji/emoji-list.es.js.map +1 -1
  26. package/es/emoji/emoji-map.es.js.map +1 -1
  27. package/es/emoji/formats/emoji-blot.es.js.map +1 -1
  28. package/es/emoji/index.es.js.map +1 -1
  29. package/es/emoji/modules/emoji.es.js.map +1 -1
  30. package/es/emoji/modules/toolbar-emoji.es.js.map +1 -1
  31. package/es/emoji/utils.es.js.map +1 -1
  32. package/es/file/formats/file.es.js.map +1 -1
  33. package/es/file/index.es.js.map +1 -1
  34. package/es/file/modules/file-bar.es.js.map +1 -1
  35. package/es/fluent-editor.es.js +4 -1
  36. package/es/fluent-editor.es.js.map +1 -1
  37. package/es/global-link/constants.es.js.map +1 -1
  38. package/es/global-link/formats/customer-widget-link.es.js.map +1 -1
  39. package/es/global-link/formats/doc-link.es.js.map +1 -1
  40. package/es/global-link/formats/wiki-link.es.js.map +1 -1
  41. package/es/global-link/formats/work-item-link.es.js.map +1 -1
  42. package/es/global-link/index.es.js.map +1 -1
  43. package/es/global-link/utils/createTable.es.js.map +1 -1
  44. package/es/index.es.js +15 -1
  45. package/es/index.es.js.map +1 -1
  46. package/es/link/formats/link.es.js.map +1 -1
  47. package/es/link/index.es.js.map +1 -1
  48. package/es/link/modules/tooltip.es.js.map +1 -1
  49. package/es/mathlive/formats.es.js.map +1 -1
  50. package/es/mathlive/index.es.js.map +1 -1
  51. package/es/mathlive/tooltip.es.js.map +1 -1
  52. package/es/mention/Mention.es.js.map +1 -1
  53. package/es/mention/MentionLink.es.js.map +1 -1
  54. package/es/mention/constants.es.js.map +1 -1
  55. package/es/quick-menu/index.es.js.map +1 -1
  56. package/es/screenshot/index.es.js.map +1 -1
  57. package/es/soft-break/index.es.js.map +1 -1
  58. package/es/strike/index.es.js.map +1 -1
  59. package/es/syntax/index.es.js.map +1 -1
  60. package/es/table/better-table.es.js +53 -1
  61. package/es/table/better-table.es.js.map +1 -1
  62. package/es/table/formats/header.es.js.map +1 -1
  63. package/es/table/formats/list.es.js.map +1 -1
  64. package/es/table/formats/table.es.js.map +1 -1
  65. package/es/table/modules/table-column-tool.es.js.map +1 -1
  66. package/es/table/modules/table-operation-menu.es.js +9 -3
  67. package/es/table/modules/table-operation-menu.es.js.map +1 -1
  68. package/es/table/modules/table-scroll-bar.es.js.map +1 -1
  69. package/es/table/modules/table-selection.es.js.map +1 -1
  70. package/es/table/modules/table-selector.es.js +158 -0
  71. package/es/table/modules/table-selector.es.js.map +1 -0
  72. package/es/table/table-config.es.js.map +1 -1
  73. package/es/table/utils/index.es.js.map +1 -1
  74. package/es/table/utils/node-matchers.es.js.map +1 -1
  75. package/es/toolbar/better-picker.es.js.map +1 -1
  76. package/es/toolbar/index.es.js.map +1 -1
  77. package/es/utils/debounce.es.js.map +1 -1
  78. package/es/utils/method.es.js.map +1 -1
  79. package/es/video/index.es.js.map +1 -1
  80. package/lib/attributors/line-height.cjs.js.map +1 -1
  81. package/lib/config/base64-image.cjs.js.map +1 -1
  82. package/lib/config/editor.config.cjs.js.map +1 -1
  83. package/lib/config/editor.utils.cjs.js.map +1 -1
  84. package/lib/config/i18n/en-us.cjs.js.map +1 -1
  85. package/lib/config/i18n/zh-cn.cjs.js.map +1 -1
  86. package/lib/config/icons.config.cjs.js.map +1 -1
  87. package/lib/config/index.cjs.js +13 -0
  88. package/lib/config/index.cjs.js.map +1 -1
  89. package/lib/counter/index.cjs.js.map +1 -1
  90. package/lib/custom-clipboard.cjs.js.map +1 -1
  91. package/lib/custom-image/BlotFormatter.cjs.js.map +1 -1
  92. package/lib/custom-image/Options.cjs.js.map +1 -1
  93. package/lib/custom-image/actions/Action.cjs.js.map +1 -1
  94. package/lib/custom-image/actions/CustomResizeAction.cjs.js.map +1 -1
  95. package/lib/custom-image/actions/DeleteAction.cjs.js.map +1 -1
  96. package/lib/custom-image/image.cjs.js.map +1 -1
  97. package/lib/custom-image/specs/BlotSpec.cjs.js.map +1 -1
  98. package/lib/custom-image/specs/CustomImageSpec.cjs.js.map +1 -1
  99. package/lib/custom-image/specs/ImageSpec.cjs.js.map +1 -1
  100. package/lib/custom-uploader.cjs.js +13 -2
  101. package/lib/custom-uploader.cjs.js.map +1 -1
  102. package/lib/emoji/emoji-list/people.cjs.js.map +1 -1
  103. package/lib/emoji/emoji-list.cjs.js.map +1 -1
  104. package/lib/emoji/emoji-map.cjs.js.map +1 -1
  105. package/lib/emoji/formats/emoji-blot.cjs.js.map +1 -1
  106. package/lib/emoji/index.cjs.js.map +1 -1
  107. package/lib/emoji/modules/emoji.cjs.js.map +1 -1
  108. package/lib/emoji/modules/toolbar-emoji.cjs.js.map +1 -1
  109. package/lib/emoji/utils.cjs.js.map +1 -1
  110. package/lib/file/formats/file.cjs.js.map +1 -1
  111. package/lib/file/index.cjs.js.map +1 -1
  112. package/lib/file/modules/file-bar.cjs.js.map +1 -1
  113. package/lib/fluent-editor.cjs.js +4 -1
  114. package/lib/fluent-editor.cjs.js.map +1 -1
  115. package/lib/global-link/constants.cjs.js.map +1 -1
  116. package/lib/global-link/formats/customer-widget-link.cjs.js.map +1 -1
  117. package/lib/global-link/formats/doc-link.cjs.js.map +1 -1
  118. package/lib/global-link/formats/wiki-link.cjs.js.map +1 -1
  119. package/lib/global-link/formats/work-item-link.cjs.js.map +1 -1
  120. package/lib/global-link/index.cjs.js.map +1 -1
  121. package/lib/global-link/utils/createTable.cjs.js.map +1 -1
  122. package/lib/index.cjs.js +14 -0
  123. package/lib/index.cjs.js.map +1 -1
  124. package/lib/link/formats/link.cjs.js.map +1 -1
  125. package/lib/link/index.cjs.js.map +1 -1
  126. package/lib/link/modules/tooltip.cjs.js.map +1 -1
  127. package/lib/mathlive/formats.cjs.js.map +1 -1
  128. package/lib/mathlive/index.cjs.js.map +1 -1
  129. package/lib/mathlive/tooltip.cjs.js.map +1 -1
  130. package/lib/mention/Mention.cjs.js.map +1 -1
  131. package/lib/mention/MentionLink.cjs.js.map +1 -1
  132. package/lib/mention/constants.cjs.js.map +1 -1
  133. package/lib/quick-menu/index.cjs.js.map +1 -1
  134. package/lib/screenshot/index.cjs.js.map +1 -1
  135. package/lib/soft-break/index.cjs.js.map +1 -1
  136. package/lib/strike/index.cjs.js.map +1 -1
  137. package/lib/syntax/index.cjs.js.map +1 -1
  138. package/lib/table/better-table.cjs.js +55 -3
  139. package/lib/table/better-table.cjs.js.map +1 -1
  140. package/lib/table/formats/header.cjs.js.map +1 -1
  141. package/lib/table/formats/list.cjs.js.map +1 -1
  142. package/lib/table/formats/table.cjs.js.map +1 -1
  143. package/lib/table/modules/table-column-tool.cjs.js.map +1 -1
  144. package/lib/table/modules/table-operation-menu.cjs.js +9 -3
  145. package/lib/table/modules/table-operation-menu.cjs.js.map +1 -1
  146. package/lib/table/modules/table-scroll-bar.cjs.js.map +1 -1
  147. package/lib/table/modules/table-selection.cjs.js.map +1 -1
  148. package/lib/table/modules/table-selector.cjs.js +158 -0
  149. package/lib/table/modules/table-selector.cjs.js.map +1 -0
  150. package/lib/table/table-config.cjs.js.map +1 -1
  151. package/lib/table/utils/index.cjs.js.map +1 -1
  152. package/lib/table/utils/node-matchers.cjs.js.map +1 -1
  153. package/lib/toolbar/better-picker.cjs.js.map +1 -1
  154. package/lib/toolbar/index.cjs.js.map +1 -1
  155. package/lib/utils/debounce.cjs.js.map +1 -1
  156. package/lib/utils/method.cjs.js.map +1 -1
  157. package/lib/video/index.cjs.js.map +1 -1
  158. package/package.json +57 -57
  159. package/style.css +3 -3
  160. package/types/attributors/font-size.d.ts +1 -1
  161. package/types/attributors/font-style.d.ts +1 -1
  162. package/types/attributors/index.d.ts +4 -4
  163. package/types/attributors/line-height.d.ts +1 -1
  164. package/types/attributors/text-indent.d.ts +1 -1
  165. package/types/config/base64-image.d.ts +3 -3
  166. package/types/config/editor.config.d.ts +225 -225
  167. package/types/config/editor.utils.d.ts +42 -42
  168. package/types/config/i18n/en-us.d.ts +106 -106
  169. package/types/config/i18n/zh-cn.d.ts +106 -106
  170. package/types/config/icons.config.d.ts +34 -34
  171. package/types/config/index.d.ts +9 -8
  172. package/types/config/types/additional-toolbar-item.interface.d.ts +7 -6
  173. package/types/config/types/content-change.interface.d.ts +13 -13
  174. package/types/config/types/content-save.interface.d.ts +6 -6
  175. package/types/config/types/counter-option.interface.d.ts +8 -7
  176. package/types/config/types/editor-config.interface.d.ts +26 -18
  177. package/types/config/types/editor-modules.interface.d.ts +30 -29
  178. package/types/config/types/editor-toolbar.interface.d.ts +4 -3
  179. package/types/config/types/file-operation.interface.d.ts +11 -10
  180. package/types/config/types/focus-change.interface.d.ts +4 -4
  181. package/types/config/types/fullscreen-module.interface.d.ts +4 -4
  182. package/types/config/types/help-panel-item.interface.d.ts +5 -5
  183. package/types/config/types/help-panel-option.interface.d.ts +6 -5
  184. package/types/config/types/image-module.interface.d.ts +3 -3
  185. package/types/config/types/image-upload.interface.d.ts +6 -5
  186. package/types/config/types/index.d.ts +23 -23
  187. package/types/config/types/load-on-demand-module.interface.d.ts +5 -5
  188. package/types/config/types/mention-module.interface.d.ts +8 -8
  189. package/types/config/types/paste-change.interface.d.ts +5 -4
  190. package/types/config/types/quick-menu-module.interface.d.ts +3 -3
  191. package/types/config/types/range.interface.d.ts +4 -4
  192. package/types/config/types/registry-options.interface.d.ts +5 -5
  193. package/types/config/types/selection-change.interface.d.ts +7 -6
  194. package/types/config/types/toolbar-item.interface.d.ts +13 -13
  195. package/types/config/types/type.d.ts +4 -3
  196. package/types/config/types/validate-error.interface.d.ts +13 -13
  197. package/types/counter/index.d.ts +15 -14
  198. package/types/custom-clipboard.d.ts +27 -26
  199. package/types/custom-image/BlotFormatter.d.ts +21 -20
  200. package/types/custom-image/Options.d.ts +36 -36
  201. package/types/custom-image/actions/Action.d.ts +7 -7
  202. package/types/custom-image/actions/CustomResizeAction.d.ts +23 -22
  203. package/types/custom-image/actions/DeleteAction.d.ts +6 -5
  204. package/types/custom-image/image.d.ts +28 -28
  205. package/types/custom-image/specs/BlotSpec.d.ts +11 -10
  206. package/types/custom-image/specs/CustomImageSpec.d.ts +18 -17
  207. package/types/custom-image/specs/ImageSpec.d.ts +9 -8
  208. package/types/custom-uploader.d.ts +30 -28
  209. package/types/emoji/emoji-list/index.d.ts +1 -1
  210. package/types/emoji/emoji-list/people.d.ts +1 -1
  211. package/types/emoji/emoji-list.d.ts +2 -2
  212. package/types/emoji/emoji-map.d.ts +2 -2
  213. package/types/emoji/formats/emoji-blot.d.ts +13 -13
  214. package/types/emoji/index.d.ts +7 -6
  215. package/types/emoji/modules/emoji.d.ts +38 -38
  216. package/types/emoji/modules/toolbar-emoji.d.ts +8 -8
  217. package/types/emoji/utils.d.ts +1 -1
  218. package/types/file/formats/file.d.ts +15 -15
  219. package/types/file/index.d.ts +10 -9
  220. package/types/file/modules/file-bar.d.ts +14 -14
  221. package/types/fluent-editor.d.ts +13 -12
  222. package/types/format-painter/index.d.ts +14 -13
  223. package/types/fullscreen/handler.d.ts +2 -1
  224. package/types/global-link/constants.d.ts +3 -3
  225. package/types/global-link/formats/customer-widget-link.d.ts +14 -14
  226. package/types/global-link/formats/doc-link.d.ts +17 -17
  227. package/types/global-link/formats/wiki-link.d.ts +16 -16
  228. package/types/global-link/formats/work-item-link.d.ts +16 -16
  229. package/types/global-link/global-link-panel.d.ts +18 -17
  230. package/types/global-link/index.d.ts +18 -18
  231. package/types/global-link/utils/createTable.d.ts +1 -1
  232. package/types/index.d.ts +3 -2
  233. package/types/link/formats/link.d.ts +15 -14
  234. package/types/link/index.d.ts +6 -6
  235. package/types/link/modules/tooltip.d.ts +32 -31
  236. package/types/mathlive/formats.d.ts +21 -20
  237. package/types/mathlive/index.d.ts +7 -6
  238. package/types/mathlive/tooltip.d.ts +15 -14
  239. package/types/mention/Mention.d.ts +54 -53
  240. package/types/mention/MentionLink.d.ts +15 -14
  241. package/types/mention/constants.d.ts +3 -3
  242. package/types/quick-menu/index.d.ts +21 -20
  243. package/types/screenshot/index.d.ts +18 -17
  244. package/types/soft-break/index.d.ts +14 -14
  245. package/types/strike/index.d.ts +7 -7
  246. package/types/syntax/index.d.ts +13 -12
  247. package/types/table/better-table.d.ts +33 -24
  248. package/types/table/formats/header.d.ts +22 -22
  249. package/types/table/formats/list.d.ts +34 -34
  250. package/types/table/formats/table.d.ts +146 -145
  251. package/types/table/modules/table-column-tool.d.ts +23 -23
  252. package/types/table/modules/table-operation-menu.d.ts +38 -38
  253. package/types/table/modules/table-scroll-bar.d.ts +33 -33
  254. package/types/table/modules/table-selection.d.ts +37 -37
  255. package/types/table/modules/table-selector.d.ts +22 -0
  256. package/types/table/table-config.d.ts +38 -38
  257. package/types/table/utils/index.d.ts +17 -17
  258. package/types/table/utils/node-matchers.d.ts +9 -9
  259. package/types/toolbar/better-picker.d.ts +1 -1
  260. package/types/toolbar/index.d.ts +8 -7
  261. package/types/toolbar/toolbar-tip.d.ts +7 -6
  262. package/types/utils/debounce.d.ts +6 -6
  263. package/types/utils/image.d.ts +1 -1
  264. package/types/utils/is.d.ts +2 -2
  265. package/types/utils/method.d.ts +6 -6
  266. package/types/utils/scroll-lock.d.ts +6 -6
  267. package/types/video/index.d.ts +15 -14
@@ -1 +1 @@
1
- {"version":3,"file":"table-operation-menu.cjs.js","sources":["../../../../src/table/modules/table-operation-menu.ts"],"sourcesContent":["import Quill from 'quill'\nimport { CHANGE_LANGUAGE_EVENT } from '../../config'\nimport {\n ERROR_LIMIT,\n MENU_ITEM_HEIGHT,\n MENU_MIN_HEIGHT,\n MENU_WIDTH,\n OPERATE_MENU_COLORPICKER_CLASS,\n OPERATE_MENU_COLORPICKER_ITEM_CLASS,\n OPERATE_MENU_DIVIDING_CLASS,\n OPERATE_MENU_ITEM_CLASS,\n OPERATE_MENU_SUBTITLE_CLASS,\n} from '../table-config'\nimport { arrayFrom, css, elementRemove, getRelativeRect } from '../utils'\n\nconst DEFAULT_CELL_COLORS = ['white', 'red', 'yellow', 'blue']\nconst NODE_EVENT_MAP = new WeakMap()\nexport default class TableOperationMenu {\n tableSelection: any\n table: any\n quill: any\n options: any\n menuItems: any\n tableColumnTool: any\n tableScrollBar: any\n boundary: any\n selectedTds: any\n destroyHandler: any\n columnToolCells: any\n colorSubTitle: any\n cellColors: any\n domNode: any\n DEFAULT_COLOR_SUBTITLE: string\n DEFAULT_MENU: Record<string, {\n text: string\n handler: () => void\n }>\n\n constructor(params, quill, options) {\n const betterTableModule = quill.getModule('better-table')\n this.tableSelection = betterTableModule.tableSelection\n this.table = params.table\n this.quill = quill\n this.options = options\n this.setDefaultMenu()\n this.menuItems = { ...this.DEFAULT_MENU, ...options.items }\n this.tableColumnTool = betterTableModule.columnTool\n // this.tableRowTool = betterTableModule.rowTool\n this.tableScrollBar = betterTableModule.tableScrollBar\n this.boundary = this.tableSelection.boundary\n this.selectedTds = this.tableSelection.selectedTds\n this.destroyHandler = this.destroy.bind(this)\n this.columnToolCells = this.tableColumnTool.colToolCells()\n this.DEFAULT_COLOR_SUBTITLE = this.quill.options.langText['sub-title-bg-color']\n this.colorSubTitle\n = options.color && options.color.text\n ? options.color.text\n : this.DEFAULT_COLOR_SUBTITLE\n this.cellColors\n = options.color && options.color.colors\n ? options.color.colors\n : DEFAULT_CELL_COLORS\n\n this.menuInitial(params)\n this.mount()\n document.addEventListener('click', this.destroyHandler, false)\n this.quill.on(CHANGE_LANGUAGE_EVENT, () => {\n this.destroy()\n this.DEFAULT_COLOR_SUBTITLE = this.quill.options.langText['sub-title-bg-color']\n this.setDefaultMenu()\n })\n }\n\n setDefaultMenu() {\n const langText = this.quill.options.langText\n this.DEFAULT_MENU = {\n copyCells: {\n text: langText['copy-cells'],\n handler() {\n this.onCopy('copy')\n },\n },\n copyTable: {\n text: langText['copy-table'],\n async handler() {\n this.tableColumnTool.destroy()\n this.tableScrollBar.destroy()\n this.tableSelection.clearSelection()\n const dom = this.table.cloneNode(true)\n const trArr = dom.querySelectorAll('tr[data-row]')\n trArr.forEach(tr => tr.removeAttribute('data-row'))\n this.setCopyRange(dom)\n const blob = new Blob([dom.outerHTML], { type: 'text/html' })\n const clipboardItem = new ClipboardItem({ 'text/html': blob })\n try {\n await navigator.clipboard.write([clipboardItem])\n }\n catch (_e) {\n throw new Error('Failed to write to clipboard.')\n }\n },\n },\n cutCells: {\n text: langText['cut-cells'],\n handler() {\n this.onCopy('cut')\n },\n },\n emptyCells: {\n text: langText['empty-cells'],\n handler() {\n const tableContainer = Quill.find(this.table)\n const { selectedTds } = this.tableSelection\n tableContainer.emptyCells(selectedTds)\n },\n },\n insertColumnRight: {\n text: langText['insert-column-right'],\n handler() {\n const tableContainer = Quill.find(this.table)\n const colIndex = getColToolCellIndexByBoundary(\n this.columnToolCells,\n this.boundary,\n (cellRect, boundary) => {\n return Math.abs(cellRect.x + cellRect.width - boundary.x1) <= ERROR_LIMIT\n },\n this.quill.root.parentNode,\n )\n\n const newColumn = tableContainer.insertColumn(this.boundary, colIndex, true, this.quill.root.parentNode)\n\n this.tableColumnTool.updateColToolCells()\n this.quill.update(Quill.sources.USER)\n // fix: the scroll bar will go to the top when insert row/column to the table\n // this.quill.setSelection(\n // this.quill.getIndex(newColumn[0]),\n // 0,\n // Quill.sources.SILENT\n // )\n this.tableSelection.setSelection(\n newColumn[0].domNode.getBoundingClientRect(),\n newColumn[0].domNode.getBoundingClientRect(),\n )\n\n setTimeout(() => this.tableScrollBar.updateScrollBar())\n },\n },\n insertColumnLeft: {\n text: langText['insert-column-left'],\n handler() {\n const tableContainer = Quill.find(this.table)\n const colIndex = getColToolCellIndexByBoundary(\n this.columnToolCells,\n this.boundary,\n (cellRect, boundary) => {\n return Math.abs(cellRect.x - boundary.x) <= ERROR_LIMIT\n },\n this.quill.root.parentNode,\n )\n\n const newColumn = tableContainer.insertColumn(this.boundary, colIndex, false, this.quill.root.parentNode)\n\n this.tableColumnTool.updateColToolCells()\n this.quill.update(Quill.sources.USER)\n // this.quill.setSelection(\n // this.quill.getIndex(newColumn[0]),\n // 0,\n // Quill.sources.SILENT\n // )\n this.tableSelection.setSelection(\n newColumn[0].domNode.getBoundingClientRect(),\n newColumn[0].domNode.getBoundingClientRect(),\n )\n\n setTimeout(() => this.tableScrollBar.updateScrollBar())\n },\n },\n insertRowUp: {\n text: langText['insert-row-up'],\n handler() {\n const tableContainer = Quill.find(this.table)\n const affectedCells = tableContainer.insertRow(this.boundary, false, this.quill.root.parentNode)\n\n this.tableColumnTool.updateRowToolCells()\n this.quill.update(Quill.sources.USER)\n // this.quill.setSelection(\n // this.quill.getIndex(affectedCells[0]),\n // 0,\n // Quill.sources.SILENT\n // )\n this.tableSelection.setSelection(\n affectedCells[0].domNode.getBoundingClientRect(),\n affectedCells[0].domNode.getBoundingClientRect(),\n )\n\n setTimeout(() => this.tableScrollBar.resetTableHeight(this.table))\n },\n },\n insertRowDown: {\n text: langText['insert-row-down'],\n handler() {\n const tableContainer = Quill.find(this.table)\n const affectedCells = tableContainer.insertRow(this.boundary, true, this.quill.root.parentNode)\n\n this.tableColumnTool.updateRowToolCells()\n this.quill.update(Quill.sources.USER)\n // this.quill.setSelection(\n // this.quill.getIndex(affectedCells[0]),\n // 0,\n // Quill.sources.SILENT\n // )\n this.tableSelection.setSelection(\n affectedCells[0].domNode.getBoundingClientRect(),\n affectedCells[0].domNode.getBoundingClientRect(),\n )\n\n setTimeout(() => this.tableScrollBar.resetTableHeight(this.table))\n },\n },\n mergeCells: {\n text: langText['merge-cells'],\n handler() {\n const tableContainer = Quill.find(this.table)\n // compute merged Cell rowspan, equal to length of selected rows\n const rowspan = tableContainer.rows().reduce((sum, row) => {\n const rowRect = getRelativeRect(row.domNode.getBoundingClientRect(), this.quill.root.parentNode)\n if (\n rowRect.y > this.boundary.y - ERROR_LIMIT\n && rowRect.y + rowRect.height < this.boundary.y + this.boundary.height + ERROR_LIMIT\n ) {\n sum += 1\n }\n return sum\n }, 0)\n\n // compute merged cell colspan, equal to length of selected cols\n const colspan = this.columnToolCells.reduce((sum, cell) => {\n const cellRect = getRelativeRect(cell.getBoundingClientRect(), this.quill.root.parentNode)\n if (\n cellRect.x > this.boundary.x - ERROR_LIMIT\n && cellRect.x + cellRect.width < this.boundary.x + this.boundary.width + ERROR_LIMIT\n ) {\n sum += 1\n }\n return sum\n }, 0)\n\n const mergedCell = tableContainer.mergeCells(\n this.boundary,\n this.selectedTds,\n rowspan,\n colspan,\n this.quill.root.parentNode,\n )\n this.quill.update(Quill.sources.USER)\n this.tableSelection.setSelection(\n mergedCell.domNode.getBoundingClientRect(),\n mergedCell.domNode.getBoundingClientRect(),\n )\n },\n },\n unmergeCells: {\n text: langText['unmerge-cells'],\n handler() {\n const tableContainer = Quill.find(this.table)\n tableContainer.unmergeCells(this.selectedTds, this.quill.root.parentNode)\n this.quill.update(Quill.sources.USER)\n this.tableSelection.clearSelection()\n },\n },\n deleteColumn: {\n text: langText['delete-column'],\n handler() {\n const tableContainer = Quill.find(this.table)\n const colIndexes = getColToolCellIndexesByBoundary(\n this.columnToolCells,\n this.boundary,\n (cellRect, boundary) => {\n return cellRect.x + ERROR_LIMIT > boundary.x && cellRect.x + cellRect.width - ERROR_LIMIT < boundary.x1\n },\n this.quill.root.parentNode,\n )\n\n const isDeleteTable = tableContainer.deleteColumns(this.boundary, colIndexes, this.quill.root.parentNode)\n if (!isDeleteTable) {\n this.tableColumnTool.updateColToolCells()\n this.quill.update(Quill.sources.USER)\n this.tableSelection.clearSelection()\n }\n\n setTimeout(() => this.tableScrollBar.updateScrollBar())\n },\n },\n deleteRow: {\n text: langText['delete-row'],\n handler() {\n const tableContainer = Quill.find(this.table)\n const isDeleteTable = tableContainer.deleteRow(this.boundary, this.quill.root.parentNode)\n if (!isDeleteTable) {\n this.tableColumnTool.updateRowToolCells()\n this.quill.update(Quill.sources.USER)\n this.tableSelection.clearSelection()\n }\n },\n },\n deleteTable: {\n text: langText['delete-table'],\n handler() {\n const betterTableModule = this.quill.getModule('better-table')\n const tableContainer = Quill.find(this.table)\n betterTableModule.hideTableTools()\n tableContainer.remove()\n this.quill.update(Quill.sources.USER)\n // fix: 右键菜单删除表格后编辑器失焦\n this.quill.focus()\n },\n },\n }\n }\n\n mount() {\n this.quill.root.parentNode.appendChild(this.domNode)\n }\n\n destroy() {\n const menuItems = arrayFrom(\n this.domNode.querySelectorAll(`.${OPERATE_MENU_ITEM_CLASS}`),\n )\n const colorPickerItems = arrayFrom(\n this.domNode.querySelectorAll(`.${OPERATE_MENU_COLORPICKER_ITEM_CLASS}`),\n )\n const nodes = menuItems.concat(colorPickerItems)\n\n nodes.forEach((node) => {\n if (NODE_EVENT_MAP.has(node)) {\n const unregister = NODE_EVENT_MAP.get(node)\n\n if (unregister && typeof unregister === 'function') {\n unregister()\n }\n }\n })\n\n elementRemove(this.domNode)\n document.removeEventListener('mousedown', this.destroyHandler, false)\n\n return null\n }\n\n menuInitial({ cell, left, top }) {\n const rowspan = cell.getAttribute('rowspan')\n const colspan = cell.getAttribute('colspan')\n const winHeight = window.innerHeight || Math.max(document.documentElement.clientHeight, document.body.clientHeight)\n const num = Object.keys(this.menuItems) || []\n const menuHeight = MENU_ITEM_HEIGHT * num.length || MENU_MIN_HEIGHT\n const transformOffset = checkAndGetViewPointChange(this.quill.root.parentNode, left, top)\n const leftPos = left - transformOffset.offsetX\n const topPos = top - transformOffset.offsetY\n const cssContent = {\n 'left': `${leftPos}px`,\n 'top': `${topPos}px`,\n 'min-height': `${MENU_MIN_HEIGHT}px`,\n 'width': `${MENU_WIDTH}px`,\n }\n\n if (menuHeight + top > winHeight && menuHeight < winHeight) {\n delete cssContent.top\n cssContent.bottom = '10px'\n }\n\n this.domNode = document.createElement('div')\n this.domNode.classList.add('qlbt-operation-menu')\n css(this.domNode, cssContent)\n\n for (const name in this.menuItems) {\n if (this.menuItems[name]) {\n const item = { ...this.DEFAULT_MENU[name], ...this.menuItems[name] }\n const dom = this.menuItemCreator(item)\n if (\n (name === 'mergeCells' && this.tableSelection.selectedTds.length === 1)\n || (name === 'unmergeCells' && rowspan === 1 && colspan === 1)\n ) {\n dom.classList.add('qlbt-operation-menu-disabled')\n }\n else {\n dom.addEventListener('mouseup', item.handler.bind(this), false)\n }\n this.domNode.appendChild(dom)\n }\n }\n\n // if colors option is false, disabled bg color\n if (this.options.color && this.options.color !== false) {\n this.domNode.appendChild(dividingCreator())\n this.domNode.appendChild(subTitleCreator(this.colorSubTitle))\n this.domNode.appendChild(this.colorsItemCreator(this.cellColors))\n }\n\n // create dividing line\n function dividingCreator() {\n const dividing = document.createElement('div')\n dividing.classList.add(OPERATE_MENU_DIVIDING_CLASS)\n return dividing\n }\n\n // create subtitle for menu\n function subTitleCreator(title) {\n const subTitle = document.createElement('div')\n subTitle.classList.add(OPERATE_MENU_SUBTITLE_CLASS)\n subTitle.textContent = title\n return subTitle\n }\n }\n\n colorsItemCreator(colors) {\n const self = this\n const node = document.createElement('div')\n node.classList.add(OPERATE_MENU_COLORPICKER_CLASS)\n\n colors.forEach((color) => {\n const colorBox = colorBoxCreator(color)\n node.appendChild(colorBox)\n })\n\n function colorBoxCreator(color) {\n const box = document.createElement('div')\n box.classList.add(OPERATE_MENU_COLORPICKER_ITEM_CLASS)\n box.setAttribute('data-color', color)\n box.style.backgroundColor = color\n\n const clickHandler = function () {\n const selectedTds = self.tableSelection.selectedTds\n if (selectedTds && selectedTds.length > 0) {\n selectedTds.forEach((tableCell) => {\n tableCell.domNode.children[0].setAttribute('data-parent-bg', color)\n tableCell.format('cell-bg', color)\n })\n }\n }\n\n box.addEventListener('click', clickHandler, false)\n\n NODE_EVENT_MAP.set(box, () => {\n box.removeEventListener('click', clickHandler, false)\n })\n\n return box\n }\n\n return node\n }\n\n menuItemCreator({ text }) {\n const node = document.createElement('div')\n node.classList.add('qlbt-operation-menu-item')\n node.textContent = text\n // node.addEventListener('click', handler.bind(this), false)\n return node\n }\n\n async onCopy(operation) {\n const { selectedTds } = this.tableSelection\n const virtualTable = this.createVirtualTable(selectedTds, operation)\n this.setCopyRange(virtualTable)\n this.tableSelection.preSelectedTable = virtualTable\n this.tableSelection.preSelectedTds = selectedTds\n const blob = new Blob([this.tableSelection.preSelectedTable.outerHTML], { type: 'text/html' })\n const clipboardItem = new ClipboardItem({ 'text/html': blob })\n try {\n await navigator.clipboard.write([clipboardItem])\n }\n catch (_e) {\n throw new Error('Failed to write to clipboard.')\n }\n if (operation === 'cut') {\n const tableContainer = Quill.find(this.table)\n tableContainer.emptyCells(selectedTds)\n }\n }\n\n createVirtualTable(selectedTds, _operation) {\n const virtualTable: any = document.createElement('table')\n virtualTable.style.position = 'fixed'\n virtualTable.style.top = 0\n virtualTable.style.left = 0\n virtualTable.style.clip = 'rect(0,0,0,0)'\n let preParentSign = ''\n let virtualTr = null\n selectedTds.forEach((selectedCell) => {\n const { domNode, parent } = selectedCell\n const currentParentSign = parent.domNode.getAttribute('data-row')\n const rowspan = domNode.firstChild.dataset.rowspan\n const colspan = domNode.firstChild.dataset.colspan\n const row = domNode.firstChild.dataset.row\n const cell = domNode.firstChild.dataset.cell\n\n selectedCell.dataCell = cell\n selectedCell.dataRow = row\n selectedCell.dataColSpan = colspan\n selectedCell.dataRowSpan = rowspan\n\n if (currentParentSign !== preParentSign) {\n if (preParentSign !== '') {\n virtualTable.appendChild(virtualTr)\n }\n virtualTr = document.createElement('tr')\n preParentSign = currentParentSign\n }\n\n const domNodeWidth = domNode.offsetWidth\n const cloneNode = domNode.cloneNode(true)\n cloneNode.setAttribute('width', domNodeWidth)\n\n virtualTr.appendChild(cloneNode)\n })\n virtualTable.appendChild(virtualTr)\n return virtualTable\n }\n\n setCopyRange(selectedNodes) {\n const range = document.createRange()\n const windowSelectionRange = window.getSelection()\n range.selectNodeContents(selectedNodes)\n windowSelectionRange.removeAllRanges()\n windowSelectionRange.addRange(range)\n }\n\n groupTableCell(selectedTds) {\n const rowGroup = []\n let dataRow = ''\n let preDataRow = ''\n let index = 0\n selectedTds.forEach((tableCell) => {\n dataRow = tableCell.parent.domNode.getAttribute('data-row')\n\n if (dataRow !== preDataRow) {\n if (preDataRow !== '') {\n index++\n }\n rowGroup[index] = []\n preDataRow = dataRow\n }\n\n rowGroup[index].push(tableCell)\n })\n return rowGroup\n }\n}\n\nfunction getColToolCellIndexByBoundary(cells, boundary, conditionFn, container) {\n return cells.reduce((findIndex, cell) => {\n const cellRect = getRelativeRect(cell.getBoundingClientRect(), container)\n if (conditionFn(cellRect, boundary)) {\n findIndex = cells.indexOf(cell)\n }\n return findIndex\n }, false)\n}\n\nfunction getColToolCellIndexesByBoundary(cells, boundary, conditionFn, container) {\n return cells.reduce((findIndexes, cell) => {\n const cellRect = getRelativeRect(cell.getBoundingClientRect(), container)\n if (conditionFn(cellRect, boundary)) {\n findIndexes.push(cells.indexOf(cell))\n }\n return findIndexes\n }, [])\n}\n\nfunction checkAndGetViewPointChange(parentContainer: HTMLElement, left: number, top: number) {\n if (!parentContainer) {\n return {\n offsetX: 0,\n offsetY: 0,\n }\n }\n // 模拟一个元素测预测位置和最终位置是否符合,如果不符合则是有transform等造成的偏移\n const testEl = document.createElement('div')\n css(testEl, {\n opacity: '0',\n position: 'fixed',\n left: `${left}px`,\n top: `${top}px`,\n width: '1px',\n height: '1px',\n zIndex: '-999999',\n })\n parentContainer.appendChild(testEl)\n const testElPosition = testEl.getBoundingClientRect()\n parentContainer.removeChild(testEl)\n return {\n offsetX: testElPosition.left - left,\n offsetY: testElPosition.top - top,\n }\n}\n"],"names":["CHANGE_LANGUAGE_EVENT","ERROR_LIMIT","getRelativeRect","arrayFrom","OPERATE_MENU_ITEM_CLASS","OPERATE_MENU_COLORPICKER_ITEM_CLASS","elementRemove","MENU_ITEM_HEIGHT","MENU_MIN_HEIGHT","MENU_WIDTH","css","OPERATE_MENU_DIVIDING_CLASS","OPERATE_MENU_SUBTITLE_CLASS","OPERATE_MENU_COLORPICKER_CLASS","index"],"mappings":"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"}
1
+ {"version":3,"file":"table-operation-menu.cjs.js","sources":["../../../../src/table/modules/table-operation-menu.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { CHANGE_LANGUAGE_EVENT } from '../../config'\r\nimport {\r\n ERROR_LIMIT,\r\n MENU_ITEM_HEIGHT,\r\n MENU_MIN_HEIGHT,\r\n MENU_WIDTH,\r\n OPERATE_MENU_COLORPICKER_CLASS,\r\n OPERATE_MENU_COLORPICKER_ITEM_CLASS,\r\n OPERATE_MENU_DIVIDING_CLASS,\r\n OPERATE_MENU_ITEM_CLASS,\r\n OPERATE_MENU_SUBTITLE_CLASS,\r\n} from '../table-config'\r\nimport { arrayFrom, css, elementRemove, getRelativeRect } from '../utils'\r\n\r\nconst DEFAULT_CELL_COLORS = ['white', 'red', 'yellow', 'blue']\r\nconst NODE_EVENT_MAP = new WeakMap()\r\nexport default class TableOperationMenu {\r\n tableSelection: any\r\n table: any\r\n quill: any\r\n options: any\r\n menuItems: any\r\n tableColumnTool: any\r\n tableScrollBar: any\r\n boundary: any\r\n selectedTds: any\r\n destroyHandler: any\r\n columnToolCells: any\r\n colorSubTitle: any\r\n cellColors: any\r\n domNode: any\r\n DEFAULT_COLOR_SUBTITLE: string\r\n DEFAULT_MENU: Record<string, {\r\n text: string\r\n handler: () => void\r\n }>\r\n\r\n constructor(params, quill, options) {\r\n const betterTableModule = quill.getModule('better-table')\r\n this.tableSelection = betterTableModule.tableSelection\r\n this.table = params.table\r\n this.quill = quill\r\n this.options = options\r\n this.setDefaultMenu()\r\n this.menuItems = { ...this.DEFAULT_MENU, ...options.items }\r\n this.tableColumnTool = betterTableModule.columnTool\r\n // this.tableRowTool = betterTableModule.rowTool\r\n this.tableScrollBar = betterTableModule.tableScrollBar\r\n this.boundary = this.tableSelection.boundary\r\n this.selectedTds = this.tableSelection.selectedTds\r\n this.destroyHandler = this.destroy.bind(this)\r\n this.columnToolCells = this.tableColumnTool.colToolCells()\r\n this.DEFAULT_COLOR_SUBTITLE = this.quill.options.langText['sub-title-bg-color']\r\n this.colorSubTitle\r\n = options.color && options.color.text\r\n ? options.color.text\r\n : this.DEFAULT_COLOR_SUBTITLE\r\n this.cellColors\r\n = options.color && options.color.colors\r\n ? options.color.colors\r\n : DEFAULT_CELL_COLORS\r\n\r\n this.menuInitial(params)\r\n this.mount()\r\n document.addEventListener('click', this.destroyHandler, false)\r\n this.quill.on(CHANGE_LANGUAGE_EVENT, () => {\r\n this.destroy()\r\n this.DEFAULT_COLOR_SUBTITLE = this.quill.options.langText['sub-title-bg-color']\r\n this.setDefaultMenu()\r\n })\r\n }\r\n\r\n setDefaultMenu() {\r\n const langText = this.quill.options.langText\r\n this.DEFAULT_MENU = {\r\n copyCells: {\r\n text: langText['copy-cells'],\r\n handler() {\r\n this.onCopy('copy')\r\n },\r\n },\r\n copyTable: {\r\n text: langText['copy-table'],\r\n async handler() {\r\n this.tableColumnTool.destroy()\r\n this.tableScrollBar.destroy()\r\n this.tableSelection.clearSelection()\r\n const dom = this.table.cloneNode(true)\r\n const trArr = dom.querySelectorAll('tr[data-row]')\r\n trArr.forEach(tr => tr.removeAttribute('data-row'))\r\n this.setCopyRange(dom)\r\n const blob = new Blob([dom.outerHTML], { type: 'text/html' })\r\n const clipboardItem = new ClipboardItem({ 'text/html': blob })\r\n try {\r\n await navigator.clipboard.write([clipboardItem])\r\n }\r\n catch (_e) {\r\n throw new Error('Failed to write to clipboard.')\r\n }\r\n },\r\n },\r\n cutCells: {\r\n text: langText['cut-cells'],\r\n handler() {\r\n this.onCopy('cut')\r\n },\r\n },\r\n emptyCells: {\r\n text: langText['empty-cells'],\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n const { selectedTds } = this.tableSelection\r\n tableContainer.emptyCells(selectedTds)\r\n },\r\n },\r\n insertColumnRight: {\r\n text: langText['insert-column-right'],\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n const colIndex = getColToolCellIndexByBoundary(\r\n this.columnToolCells,\r\n this.boundary,\r\n (cellRect, boundary) => {\r\n return Math.abs(cellRect.x + cellRect.width - boundary.x1) <= ERROR_LIMIT\r\n },\r\n this.quill.root.parentNode,\r\n )\r\n\r\n const newColumn = tableContainer.insertColumn(this.boundary, colIndex, true, this.quill.root.parentNode)\r\n\r\n this.tableColumnTool.updateColToolCells()\r\n this.quill.update(Quill.sources.USER)\r\n // fix: the scroll bar will go to the top when insert row/column to the table\r\n // this.quill.setSelection(\r\n // this.quill.getIndex(newColumn[0]),\r\n // 0,\r\n // Quill.sources.SILENT\r\n // )\r\n this.tableSelection.setSelection(\r\n newColumn[0].domNode.getBoundingClientRect(),\r\n newColumn[0].domNode.getBoundingClientRect(),\r\n )\r\n\r\n setTimeout(() => this.tableScrollBar.updateScrollBar())\r\n },\r\n },\r\n insertColumnLeft: {\r\n text: langText['insert-column-left'],\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n const colIndex = getColToolCellIndexByBoundary(\r\n this.columnToolCells,\r\n this.boundary,\r\n (cellRect, boundary) => {\r\n return Math.abs(cellRect.x - boundary.x) <= ERROR_LIMIT\r\n },\r\n this.quill.root.parentNode,\r\n )\r\n\r\n const newColumn = tableContainer.insertColumn(this.boundary, colIndex, false, this.quill.root.parentNode)\r\n\r\n this.tableColumnTool.updateColToolCells()\r\n this.quill.update(Quill.sources.USER)\r\n // this.quill.setSelection(\r\n // this.quill.getIndex(newColumn[0]),\r\n // 0,\r\n // Quill.sources.SILENT\r\n // )\r\n this.tableSelection.setSelection(\r\n newColumn[0].domNode.getBoundingClientRect(),\r\n newColumn[0].domNode.getBoundingClientRect(),\r\n )\r\n\r\n setTimeout(() => this.tableScrollBar.updateScrollBar())\r\n },\r\n },\r\n insertRowUp: {\r\n text: langText['insert-row-up'],\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n const affectedCells = tableContainer.insertRow(this.boundary, false, this.quill.root.parentNode)\r\n\r\n this.tableColumnTool.updateRowToolCells()\r\n this.quill.update(Quill.sources.USER)\r\n // this.quill.setSelection(\r\n // this.quill.getIndex(affectedCells[0]),\r\n // 0,\r\n // Quill.sources.SILENT\r\n // )\r\n this.tableSelection.setSelection(\r\n affectedCells[0].domNode.getBoundingClientRect(),\r\n affectedCells[0].domNode.getBoundingClientRect(),\r\n )\r\n\r\n setTimeout(() => this.tableScrollBar.resetTableHeight(this.table))\r\n },\r\n },\r\n insertRowDown: {\r\n text: langText['insert-row-down'],\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n const affectedCells = tableContainer.insertRow(this.boundary, true, this.quill.root.parentNode)\r\n\r\n this.tableColumnTool.updateRowToolCells()\r\n this.quill.update(Quill.sources.USER)\r\n // this.quill.setSelection(\r\n // this.quill.getIndex(affectedCells[0]),\r\n // 0,\r\n // Quill.sources.SILENT\r\n // )\r\n this.tableSelection.setSelection(\r\n affectedCells[0].domNode.getBoundingClientRect(),\r\n affectedCells[0].domNode.getBoundingClientRect(),\r\n )\r\n\r\n setTimeout(() => this.tableScrollBar.resetTableHeight(this.table))\r\n },\r\n },\r\n mergeCells: {\r\n text: langText['merge-cells'],\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n // compute merged Cell rowspan, equal to length of selected rows\r\n const rowspan = tableContainer.rows().reduce((sum, row) => {\r\n const rowRect = getRelativeRect(row.domNode.getBoundingClientRect(), this.quill.root.parentNode)\r\n if (\r\n rowRect.y > this.boundary.y - ERROR_LIMIT\r\n && rowRect.y + rowRect.height < this.boundary.y + this.boundary.height + ERROR_LIMIT\r\n ) {\r\n sum += 1\r\n }\r\n return sum\r\n }, 0)\r\n\r\n // compute merged cell colspan, equal to length of selected cols\r\n const colspan = this.columnToolCells.reduce((sum, cell) => {\r\n const cellRect = getRelativeRect(cell.getBoundingClientRect(), this.quill.root.parentNode)\r\n if (\r\n cellRect.x > this.boundary.x - ERROR_LIMIT\r\n && cellRect.x + cellRect.width < this.boundary.x + this.boundary.width + ERROR_LIMIT\r\n ) {\r\n sum += 1\r\n }\r\n return sum\r\n }, 0)\r\n\r\n const mergedCell = tableContainer.mergeCells(\r\n this.boundary,\r\n this.selectedTds,\r\n rowspan,\r\n colspan,\r\n this.quill.root.parentNode,\r\n )\r\n this.quill.update(Quill.sources.USER)\r\n this.tableSelection.setSelection(\r\n mergedCell.domNode.getBoundingClientRect(),\r\n mergedCell.domNode.getBoundingClientRect(),\r\n )\r\n },\r\n },\r\n unmergeCells: {\r\n text: langText['unmerge-cells'],\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n tableContainer.unmergeCells(this.selectedTds, this.quill.root.parentNode)\r\n this.quill.update(Quill.sources.USER)\r\n this.tableSelection.clearSelection()\r\n },\r\n },\r\n deleteColumn: {\r\n text: langText['delete-column'],\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n const colIndexes = getColToolCellIndexesByBoundary(\r\n this.columnToolCells,\r\n this.boundary,\r\n (cellRect, boundary) => {\r\n return cellRect.x + ERROR_LIMIT > boundary.x && cellRect.x + cellRect.width - ERROR_LIMIT < boundary.x1\r\n },\r\n this.quill.root.parentNode,\r\n )\r\n\r\n const isDeleteTable = tableContainer.deleteColumns(this.boundary, colIndexes, this.quill.root.parentNode)\r\n if (!isDeleteTable) {\r\n this.tableColumnTool.updateColToolCells()\r\n this.quill.update(Quill.sources.USER)\r\n this.tableSelection.clearSelection()\r\n }\r\n\r\n setTimeout(() => this.tableScrollBar.updateScrollBar())\r\n },\r\n },\r\n deleteRow: {\r\n text: langText['delete-row'],\r\n handler() {\r\n const tableContainer = Quill.find(this.table)\r\n const isDeleteTable = tableContainer.deleteRow(this.boundary, this.quill.root.parentNode)\r\n if (!isDeleteTable) {\r\n this.tableColumnTool.updateRowToolCells()\r\n this.quill.update(Quill.sources.USER)\r\n this.tableSelection.clearSelection()\r\n }\r\n },\r\n },\r\n deleteTable: {\r\n text: langText['delete-table'],\r\n handler() {\r\n const betterTableModule = this.quill.getModule('better-table')\r\n const tableContainer = Quill.find(this.table)\r\n betterTableModule.hideTableTools()\r\n tableContainer.remove()\r\n this.quill.update(Quill.sources.USER)\r\n // fix: 右键菜单删除表格后编辑器失焦\r\n this.quill.focus()\r\n },\r\n },\r\n }\r\n }\r\n\r\n mount() {\r\n this.quill.root.parentNode.appendChild(this.domNode)\r\n }\r\n\r\n destroy() {\r\n const menuItems = arrayFrom(\r\n this.domNode.querySelectorAll(`.${OPERATE_MENU_ITEM_CLASS}`),\r\n )\r\n const colorPickerItems = arrayFrom(\r\n this.domNode.querySelectorAll(`.${OPERATE_MENU_COLORPICKER_ITEM_CLASS}`),\r\n )\r\n const nodes = menuItems.concat(colorPickerItems)\r\n\r\n nodes.forEach((node) => {\r\n if (NODE_EVENT_MAP.has(node)) {\r\n const unregister = NODE_EVENT_MAP.get(node)\r\n\r\n if (unregister && typeof unregister === 'function') {\r\n unregister()\r\n }\r\n }\r\n })\r\n\r\n elementRemove(this.domNode)\r\n document.removeEventListener('mousedown', this.destroyHandler, false)\r\n\r\n return null\r\n }\r\n\r\n menuInitial({ cell, left, top }) {\r\n const rowspan = cell.getAttribute('rowspan')\r\n const colspan = cell.getAttribute('colspan')\r\n const winHeight = window.innerHeight || Math.max(document.documentElement.clientHeight, document.body.clientHeight)\r\n const num = Object.keys(this.menuItems) || []\r\n const menuHeight = MENU_ITEM_HEIGHT * num.length || MENU_MIN_HEIGHT\r\n const transformOffset = checkAndGetViewPointChange(this.quill.root.parentNode, left, top)\r\n const leftPos = left - transformOffset.offsetX\r\n const topPos = top - transformOffset.offsetY\r\n\r\n const cssContent = {\r\n 'left': `${leftPos}px`,\r\n 'top': `${topPos}px`,\r\n 'min-height': `${MENU_MIN_HEIGHT}px`,\r\n 'max-height': `${winHeight - topPos}px`,\r\n 'width': `${MENU_WIDTH}px`,\r\n 'overflow-y': 'auto',\r\n }\r\n // fix: 处理菜单超出屏幕\r\n if (menuHeight + top > winHeight || topPos > winHeight / 2) {\r\n delete cssContent.top\r\n cssContent['max-height'] = `${winHeight - 20}px`\r\n cssContent.bottom = '10px'\r\n }\r\n\r\n this.domNode = document.createElement('div')\r\n this.domNode.classList.add('qlbt-operation-menu')\r\n css(this.domNode, cssContent)\r\n const fragment = document.createDocumentFragment()\r\n\r\n for (const name in this.menuItems) {\r\n if (this.menuItems[name]) {\r\n const item = { ...this.DEFAULT_MENU[name], ...this.menuItems[name] }\r\n const dom = this.menuItemCreator(item)\r\n if (\r\n (name === 'mergeCells' && this.tableSelection.selectedTds.length === 1)\r\n || (name === 'unmergeCells' && rowspan === 1 && colspan === 1)\r\n ) {\r\n dom.classList.add('qlbt-operation-menu-disabled')\r\n }\r\n else {\r\n dom.addEventListener('mouseup', item.handler.bind(this), false)\r\n }\r\n fragment.appendChild(dom)\r\n }\r\n }\r\n this.domNode.appendChild(fragment)\r\n\r\n // if colors option is false, disabled bg color\r\n if (this.options.color && this.options.color !== false) {\r\n this.domNode.appendChild(dividingCreator())\r\n this.domNode.appendChild(subTitleCreator(this.colorSubTitle))\r\n this.domNode.appendChild(this.colorsItemCreator(this.cellColors))\r\n }\r\n\r\n // create dividing line\r\n function dividingCreator() {\r\n const dividing = document.createElement('div')\r\n dividing.classList.add(OPERATE_MENU_DIVIDING_CLASS)\r\n return dividing\r\n }\r\n\r\n // create subtitle for menu\r\n function subTitleCreator(title) {\r\n const subTitle = document.createElement('div')\r\n subTitle.classList.add(OPERATE_MENU_SUBTITLE_CLASS)\r\n subTitle.textContent = title\r\n return subTitle\r\n }\r\n }\r\n\r\n colorsItemCreator(colors) {\r\n const self = this\r\n const node = document.createElement('div')\r\n node.classList.add(OPERATE_MENU_COLORPICKER_CLASS)\r\n\r\n colors.forEach((color) => {\r\n const colorBox = colorBoxCreator(color)\r\n node.appendChild(colorBox)\r\n })\r\n\r\n function colorBoxCreator(color) {\r\n const box = document.createElement('div')\r\n box.classList.add(OPERATE_MENU_COLORPICKER_ITEM_CLASS)\r\n box.setAttribute('data-color', color)\r\n box.style.backgroundColor = color\r\n\r\n const clickHandler = function () {\r\n const selectedTds = self.tableSelection.selectedTds\r\n if (selectedTds && selectedTds.length > 0) {\r\n selectedTds.forEach((tableCell) => {\r\n tableCell.domNode.children[0].setAttribute('data-parent-bg', color)\r\n tableCell.format('cell-bg', color)\r\n })\r\n }\r\n }\r\n\r\n box.addEventListener('click', clickHandler, false)\r\n\r\n NODE_EVENT_MAP.set(box, () => {\r\n box.removeEventListener('click', clickHandler, false)\r\n })\r\n\r\n return box\r\n }\r\n\r\n return node\r\n }\r\n\r\n menuItemCreator({ text }) {\r\n const node = document.createElement('div')\r\n node.classList.add('qlbt-operation-menu-item')\r\n node.style.height = `${MENU_ITEM_HEIGHT}px`\r\n node.textContent = text\r\n // node.addEventListener('click', handler.bind(this), false)\r\n return node\r\n }\r\n\r\n async onCopy(operation) {\r\n const { selectedTds } = this.tableSelection\r\n const virtualTable = this.createVirtualTable(selectedTds, operation)\r\n this.setCopyRange(virtualTable)\r\n this.tableSelection.preSelectedTable = virtualTable\r\n this.tableSelection.preSelectedTds = selectedTds\r\n const blob = new Blob([this.tableSelection.preSelectedTable.outerHTML], { type: 'text/html' })\r\n const clipboardItem = new ClipboardItem({ 'text/html': blob })\r\n try {\r\n await navigator.clipboard.write([clipboardItem])\r\n }\r\n catch (_e) {\r\n throw new Error('Failed to write to clipboard.')\r\n }\r\n if (operation === 'cut') {\r\n const tableContainer = Quill.find(this.table)\r\n tableContainer.emptyCells(selectedTds)\r\n }\r\n }\r\n\r\n createVirtualTable(selectedTds, _operation) {\r\n const virtualTable: any = document.createElement('table')\r\n virtualTable.style.position = 'fixed'\r\n virtualTable.style.top = 0\r\n virtualTable.style.left = 0\r\n virtualTable.style.clip = 'rect(0,0,0,0)'\r\n let preParentSign = ''\r\n let virtualTr = null\r\n selectedTds.forEach((selectedCell) => {\r\n const { domNode, parent } = selectedCell\r\n const currentParentSign = parent.domNode.getAttribute('data-row')\r\n const rowspan = domNode.firstChild.dataset.rowspan\r\n const colspan = domNode.firstChild.dataset.colspan\r\n const row = domNode.firstChild.dataset.row\r\n const cell = domNode.firstChild.dataset.cell\r\n\r\n selectedCell.dataCell = cell\r\n selectedCell.dataRow = row\r\n selectedCell.dataColSpan = colspan\r\n selectedCell.dataRowSpan = rowspan\r\n\r\n if (currentParentSign !== preParentSign) {\r\n if (preParentSign !== '') {\r\n virtualTable.appendChild(virtualTr)\r\n }\r\n virtualTr = document.createElement('tr')\r\n preParentSign = currentParentSign\r\n }\r\n\r\n const domNodeWidth = domNode.offsetWidth\r\n const cloneNode = domNode.cloneNode(true)\r\n cloneNode.setAttribute('width', domNodeWidth)\r\n\r\n virtualTr.appendChild(cloneNode)\r\n })\r\n virtualTable.appendChild(virtualTr)\r\n return virtualTable\r\n }\r\n\r\n setCopyRange(selectedNodes) {\r\n const range = document.createRange()\r\n const windowSelectionRange = window.getSelection()\r\n range.selectNodeContents(selectedNodes)\r\n windowSelectionRange.removeAllRanges()\r\n windowSelectionRange.addRange(range)\r\n }\r\n\r\n groupTableCell(selectedTds) {\r\n const rowGroup = []\r\n let dataRow = ''\r\n let preDataRow = ''\r\n let index = 0\r\n selectedTds.forEach((tableCell) => {\r\n dataRow = tableCell.parent.domNode.getAttribute('data-row')\r\n\r\n if (dataRow !== preDataRow) {\r\n if (preDataRow !== '') {\r\n index++\r\n }\r\n rowGroup[index] = []\r\n preDataRow = dataRow\r\n }\r\n\r\n rowGroup[index].push(tableCell)\r\n })\r\n return rowGroup\r\n }\r\n}\r\n\r\nfunction getColToolCellIndexByBoundary(cells, boundary, conditionFn, container) {\r\n return cells.reduce((findIndex, cell) => {\r\n const cellRect = getRelativeRect(cell.getBoundingClientRect(), container)\r\n if (conditionFn(cellRect, boundary)) {\r\n findIndex = cells.indexOf(cell)\r\n }\r\n return findIndex\r\n }, false)\r\n}\r\n\r\nfunction getColToolCellIndexesByBoundary(cells, boundary, conditionFn, container) {\r\n return cells.reduce((findIndexes, cell) => {\r\n const cellRect = getRelativeRect(cell.getBoundingClientRect(), container)\r\n if (conditionFn(cellRect, boundary)) {\r\n findIndexes.push(cells.indexOf(cell))\r\n }\r\n return findIndexes\r\n }, [])\r\n}\r\n\r\nfunction checkAndGetViewPointChange(parentContainer: HTMLElement, left: number, top: number) {\r\n if (!parentContainer) {\r\n return {\r\n offsetX: 0,\r\n offsetY: 0,\r\n }\r\n }\r\n // 模拟一个元素测预测位置和最终位置是否符合,如果不符合则是有transform等造成的偏移\r\n const testEl = document.createElement('div')\r\n css(testEl, {\r\n opacity: '0',\r\n position: 'fixed',\r\n left: `${left}px`,\r\n top: `${top}px`,\r\n width: '1px',\r\n height: '1px',\r\n zIndex: '-999999',\r\n })\r\n parentContainer.appendChild(testEl)\r\n const testElPosition = testEl.getBoundingClientRect()\r\n parentContainer.removeChild(testEl)\r\n return {\r\n offsetX: testElPosition.left - left,\r\n offsetY: testElPosition.top - top,\r\n }\r\n}\r\n"],"names":["CHANGE_LANGUAGE_EVENT","ERROR_LIMIT","getRelativeRect","arrayFrom","OPERATE_MENU_ITEM_CLASS","OPERATE_MENU_COLORPICKER_ITEM_CLASS","elementRemove","MENU_ITEM_HEIGHT","MENU_MIN_HEIGHT","MENU_WIDTH","css","OPERATE_MENU_DIVIDING_CLASS","OPERATE_MENU_SUBTITLE_CLASS","OPERATE_MENU_COLORPICKER_CLASS","index"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"table-scroll-bar.cjs.js","sources":["../../../../src/table/modules/table-scroll-bar.ts"],"sourcesContent":["import { SCROLL_BAR_PANEL_HEIGHT } from '../table-config'\nimport { css } from '../utils'\n\nexport default class TableScrollBar {\n table: any\n quill: any\n modulesContainer: any\n domNode: any\n oldRootScrollTop: any\n // @ts-ignore\n prev: number\n columnToolDomNode: any\n columnCtrlPanel: any\n leftMask: any\n tableViewRect: any\n tableRect: any\n containerRect: any\n subscriber: any\n // @ts-ignore\n tableMoveDistance: number\n // @ts-ignore\n maxBarLeft: number\n // @ts-ignore\n scrollBar: Element\n // @ts-ignore\n isTableOverflow: boolean // 表格是否溢出开关,判断开关值后只改变样式一次,不重复修改\n\n constructor(table, quill, dom) {\n if (!table) {\n return\n }\n this.table = table\n this.quill = quill\n this.modulesContainer = dom\n this.domNode = null\n this.oldRootScrollTop = this.quill.root.scrollTop\n this.prev = 0\n\n const betterTableModule = this.quill.getModule('better-table')\n const tableColumnTool = betterTableModule.columnTool\n this.columnToolDomNode = tableColumnTool.domNode\n this.columnCtrlPanel = tableColumnTool.columnCtrlPanel\n this.leftMask = tableColumnTool.leftMask\n\n this.updateScrollBar()\n\n if (this.quill.root === this.quill.scrollingContainer) {\n this.quill.root.addEventListener('scroll', this.handleQuillRootScroll.bind(this))\n }\n }\n\n handleQuillRootScroll() {\n if (!this.domNode) {\n return\n }\n const curTableRect = this.table.getBoundingClientRect()\n const curContainerRect = this.quill.root.parentNode.getBoundingClientRect()\n const tableTop = curTableRect.top + SCROLL_BAR_PANEL_HEIGHT\n const tableBottom = curTableRect.top + curTableRect.height - 1\n const containerBottom = curContainerRect.top + curContainerRect.height\n if (containerBottom < tableBottom && containerBottom > tableTop) { // 表格下端溢出容器下端\n if (!this.isTableOverflow) {\n this.isTableOverflow = true\n css(this.domNode, {\n display: 'block',\n top: `${this.containerRect.height - SCROLL_BAR_PANEL_HEIGHT}px`,\n marginTop: '0px',\n })\n }\n }\n else if (containerBottom <= tableTop) { // 表格上端溢出容器下端\n this.isTableOverflow = false\n this.domNode.style.display = 'none'\n }\n else { // 表格下端在容器内\n this.setScrollBarToBottom()\n css(this.domNode, { marginTop: `${this.oldRootScrollTop - this.quill.root.scrollTop}px` })\n }\n }\n\n setScrollBarToBottom() {\n if (this.isTableOverflow) {\n this.isTableOverflow = false\n const barPos = this.tableRect.top + this.tableRect.height - this.containerRect.top - 1\n css(this.domNode, { display: 'block', top: `${barPos}px` })\n }\n }\n\n resetTableHeight(table) {\n if (this.domNode) {\n // 表格的高度改变,重置初始化tableRect的高度,但不重置其他坐标值\n this.tableRect.height = table.getBoundingClientRect().height\n this.isTableOverflow = !this.isTableOverflow\n this.handleQuillRootScroll()\n }\n }\n\n setScrollBarMove(pos, isMouse) {\n // 获取当前滑块左边距和鼠标两次事件节点之间的位移差,计算当前滑块位置及是否显示左右遮罩层,通过比例计算表格位移并赋值\n const currentBarLeft = Number.parseInt(getComputedStyle(this.scrollBar).left, 10)\n let left = isMouse ? pos - this.prev + currentBarLeft : currentBarLeft + pos\n this.showMask(left)\n left = this.getLimitedDistance(left)\n const scale = this.tableViewRect.width / this.tableRect.width\n const move = left / scale\n const columnCtrlPanelLeft = this.tableViewRect.left - this.containerRect.left - move\n css(this.scrollBar, { left: `${left}px` }) // 移动表格滚动条\n css(this.columnCtrlPanel, { left: `${columnCtrlPanelLeft}px` }) // 移动顶部列宽控制条\n this.table.parentNode.scrollLeft = move // 移动表格\n if (isMouse) {\n this.prev = pos\n }\n\n // fix: 拖动滚动条时修正选区位置\n const tableSelection = this.quill.getModule('better-table').tableSelection\n if (tableSelection && tableSelection.selectedTds.length) {\n tableSelection.refreshHelpLinesPosition()\n }\n }\n\n handleScrollBarMouseDown(mouseDownEvent) {\n mouseDownEvent.preventDefault()\n\n this.prev = mouseDownEvent.clientX\n this.subscriber = (mouseMoveEvent: any) => {\n mouseMoveEvent.preventDefault()\n mouseMoveEvent.stopPropagation()\n this.setScrollBarMove(mouseMoveEvent.clientX, true)\n }\n this.quill.root.parentNode.addEventListener('mousemove', this.subscriber, false)\n document.addEventListener('mouseup', this.handleScrollBarMouseup.bind(this), false)\n }\n\n handleScrollBarMouseup(event) {\n event.preventDefault()\n this.quill.root.parentNode.removeEventListener('mousemove', this.subscriber)\n document.removeEventListener('mouseup', this.handleScrollBarMouseup.bind(this), false)\n }\n\n handleWheel(event) {\n // 按住 Shift 滚动鼠标滚轮,可以对表格进行横向滚动\n if (event.shiftKey) {\n const { deltaY } = event // 每次滚动鼠标滚轮移动的距离\n this.setScrollBarMove(deltaY, false)\n }\n }\n\n showMask(distance) {\n // 根据当前滑块左边距判断是否显示左右遮罩层\n if (distance >= Math.floor(this.maxBarLeft)) {\n css(this.leftMask, { display: 'block' })\n }\n else if (distance <= 0) {\n css(this.leftMask, { display: 'none' })\n }\n else {\n css(this.leftMask, { display: 'block' })\n }\n }\n\n getLimitedDistance(distance) {\n if (distance >= Math.floor(this.maxBarLeft)) {\n distance = this.maxBarLeft\n }\n else if (distance <= 0) {\n distance = 0\n }\n return distance\n }\n\n updateScrollBar() {\n if (!this.table?.parentNode) {\n return\n }\n // 获取表格尺寸和表格容器尺寸\n const tableRect = this.table.getBoundingClientRect()\n const tableViewRect = this.table.parentNode.getBoundingClientRect()\n const tableMoveDistance = tableRect.width - tableViewRect.width // 表格最大移动距离\n this.tableRect = tableRect\n this.tableViewRect = tableViewRect\n this.tableMoveDistance = tableMoveDistance\n this.oldRootScrollTop = this.quill.root.scrollTop\n\n if (tableMoveDistance > 0) {\n this.createScrollBar()\n }\n else {\n this.destroyScrollBar()\n }\n }\n\n createScrollBar() {\n // 列控制条增加表格相应位移\n const parent = this.quill.root.parentNode\n const containerRect = parent.getBoundingClientRect() // 编辑器容器宽度\n this.containerRect = containerRect\n css(this.columnCtrlPanel, {\n left: `${this.tableViewRect.left - containerRect.left - this.table.parentNode.scrollLeft}px`,\n })\n\n // 创建滚动条\n if (this.domNode) {\n this.domNode.remove()\n }\n this.domNode = document.createElement('div')\n this.domNode.classList.add('qlbt-table-scroll-bar-panel')\n this.scrollBar = document.createElement('div')\n this.scrollBar.classList.add('qlbt-table-scroll-bar')\n this.scrollBar.addEventListener('mousedown', this.handleScrollBarMouseDown.bind(this), false)\n const scale = this.tableViewRect.width / this.tableRect.width\n const barWidth = this.tableViewRect.width - this.tableMoveDistance * scale // 滑块宽度\n css(this.scrollBar, { width: `${barWidth}px` })\n this.domNode.appendChild(this.scrollBar)\n\n // 判断当前表格是否存在位移,如存在通过比例计算滑块当前位移并赋值\n const tableScrollLeft = this.table.parentNode.scrollLeft\n this.maxBarLeft = this.tableMoveDistance * scale // 滑块最大移动距离\n if (tableScrollLeft) {\n const barLeft = tableScrollLeft * scale\n this.showMask(barLeft)\n css(this.scrollBar, { left: `${this.getLimitedDistance(barLeft)}px` })\n }\n\n // 将滚动条插入到 table control panel 中\n const barPos = this.tableRect.top + this.tableRect.height - containerRect.top - 1\n this.isTableOverflow = containerRect.top + containerRect.height < this.tableRect.top + this.tableRect.height\n this.modulesContainer.appendChild(this.domNode)\n css(this.domNode, { top: `${Math.min(containerRect.height - SCROLL_BAR_PANEL_HEIGHT, barPos)}px` })\n\n // 绑定鼠标滚轮事件:Shift+鼠标滚轮,滚动表格横向滚动条\n document.addEventListener('wheel', this.handleWheel.bind(this))\n }\n\n destroyScrollBar() {\n css(this.leftMask, { display: 'none' })\n this.columnCtrlPanel.removeAttribute('style')\n this.maxBarLeft = null\n this.destroy()\n }\n\n destroy() {\n if (this.domNode) {\n this.domNode.remove()\n }\n this.quill.root.removeEventListener('scroll', this.handleQuillRootScroll.bind(this))\n document.removeEventListener('wheel', this.handleWheel.bind(this))\n }\n}\n"],"names":["SCROLL_BAR_PANEL_HEIGHT","css"],"mappings":"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"}
1
+ {"version":3,"file":"table-scroll-bar.cjs.js","sources":["../../../../src/table/modules/table-scroll-bar.ts"],"sourcesContent":["import { SCROLL_BAR_PANEL_HEIGHT } from '../table-config'\r\nimport { css } from '../utils'\r\n\r\nexport default class TableScrollBar {\r\n table: any\r\n quill: any\r\n modulesContainer: any\r\n domNode: any\r\n oldRootScrollTop: any\r\n // @ts-ignore\r\n prev: number\r\n columnToolDomNode: any\r\n columnCtrlPanel: any\r\n leftMask: any\r\n tableViewRect: any\r\n tableRect: any\r\n containerRect: any\r\n subscriber: any\r\n // @ts-ignore\r\n tableMoveDistance: number\r\n // @ts-ignore\r\n maxBarLeft: number\r\n // @ts-ignore\r\n scrollBar: Element\r\n // @ts-ignore\r\n isTableOverflow: boolean // 表格是否溢出开关,判断开关值后只改变样式一次,不重复修改\r\n\r\n constructor(table, quill, dom) {\r\n if (!table) {\r\n return\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 this.prev = 0\r\n\r\n const betterTableModule = this.quill.getModule('better-table')\r\n const tableColumnTool = betterTableModule.columnTool\r\n this.columnToolDomNode = tableColumnTool.domNode\r\n this.columnCtrlPanel = tableColumnTool.columnCtrlPanel\r\n this.leftMask = tableColumnTool.leftMask\r\n\r\n this.updateScrollBar()\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 return\r\n }\r\n const curTableRect = this.table.getBoundingClientRect()\r\n const curContainerRect = this.quill.root.parentNode.getBoundingClientRect()\r\n const tableTop = curTableRect.top + SCROLL_BAR_PANEL_HEIGHT\r\n const tableBottom = curTableRect.top + curTableRect.height - 1\r\n const containerBottom = curContainerRect.top + curContainerRect.height\r\n if (containerBottom < tableBottom && containerBottom > tableTop) { // 表格下端溢出容器下端\r\n if (!this.isTableOverflow) {\r\n this.isTableOverflow = true\r\n css(this.domNode, {\r\n display: 'block',\r\n top: `${this.containerRect.height - SCROLL_BAR_PANEL_HEIGHT}px`,\r\n marginTop: '0px',\r\n })\r\n }\r\n }\r\n else if (containerBottom <= tableTop) { // 表格上端溢出容器下端\r\n this.isTableOverflow = false\r\n this.domNode.style.display = 'none'\r\n }\r\n else { // 表格下端在容器内\r\n this.setScrollBarToBottom()\r\n css(this.domNode, { marginTop: `${this.oldRootScrollTop - this.quill.root.scrollTop}px` })\r\n }\r\n }\r\n\r\n setScrollBarToBottom() {\r\n if (this.isTableOverflow) {\r\n this.isTableOverflow = false\r\n const barPos = this.tableRect.top + this.tableRect.height - this.containerRect.top - 1\r\n css(this.domNode, { display: 'block', top: `${barPos}px` })\r\n }\r\n }\r\n\r\n resetTableHeight(table) {\r\n if (this.domNode) {\r\n // 表格的高度改变,重置初始化tableRect的高度,但不重置其他坐标值\r\n this.tableRect.height = table.getBoundingClientRect().height\r\n this.isTableOverflow = !this.isTableOverflow\r\n this.handleQuillRootScroll()\r\n }\r\n }\r\n\r\n setScrollBarMove(pos, isMouse) {\r\n // 获取当前滑块左边距和鼠标两次事件节点之间的位移差,计算当前滑块位置及是否显示左右遮罩层,通过比例计算表格位移并赋值\r\n const currentBarLeft = Number.parseInt(getComputedStyle(this.scrollBar).left, 10)\r\n let left = isMouse ? pos - this.prev + currentBarLeft : currentBarLeft + pos\r\n this.showMask(left)\r\n left = this.getLimitedDistance(left)\r\n const scale = this.tableViewRect.width / this.tableRect.width\r\n const move = left / scale\r\n const columnCtrlPanelLeft = this.tableViewRect.left - this.containerRect.left - move\r\n css(this.scrollBar, { left: `${left}px` }) // 移动表格滚动条\r\n css(this.columnCtrlPanel, { left: `${columnCtrlPanelLeft}px` }) // 移动顶部列宽控制条\r\n this.table.parentNode.scrollLeft = move // 移动表格\r\n if (isMouse) {\r\n this.prev = pos\r\n }\r\n\r\n // fix: 拖动滚动条时修正选区位置\r\n const tableSelection = this.quill.getModule('better-table').tableSelection\r\n if (tableSelection && tableSelection.selectedTds.length) {\r\n tableSelection.refreshHelpLinesPosition()\r\n }\r\n }\r\n\r\n handleScrollBarMouseDown(mouseDownEvent) {\r\n mouseDownEvent.preventDefault()\r\n\r\n this.prev = mouseDownEvent.clientX\r\n this.subscriber = (mouseMoveEvent: any) => {\r\n mouseMoveEvent.preventDefault()\r\n mouseMoveEvent.stopPropagation()\r\n this.setScrollBarMove(mouseMoveEvent.clientX, true)\r\n }\r\n this.quill.root.parentNode.addEventListener('mousemove', this.subscriber, false)\r\n document.addEventListener('mouseup', this.handleScrollBarMouseup.bind(this), false)\r\n }\r\n\r\n handleScrollBarMouseup(event) {\r\n event.preventDefault()\r\n this.quill.root.parentNode.removeEventListener('mousemove', this.subscriber)\r\n document.removeEventListener('mouseup', this.handleScrollBarMouseup.bind(this), false)\r\n }\r\n\r\n handleWheel(event) {\r\n // 按住 Shift 滚动鼠标滚轮,可以对表格进行横向滚动\r\n if (event.shiftKey) {\r\n const { deltaY } = event // 每次滚动鼠标滚轮移动的距离\r\n this.setScrollBarMove(deltaY, false)\r\n }\r\n }\r\n\r\n showMask(distance) {\r\n // 根据当前滑块左边距判断是否显示左右遮罩层\r\n if (distance >= Math.floor(this.maxBarLeft)) {\r\n css(this.leftMask, { display: 'block' })\r\n }\r\n else if (distance <= 0) {\r\n css(this.leftMask, { display: 'none' })\r\n }\r\n else {\r\n css(this.leftMask, { display: 'block' })\r\n }\r\n }\r\n\r\n getLimitedDistance(distance) {\r\n if (distance >= Math.floor(this.maxBarLeft)) {\r\n distance = this.maxBarLeft\r\n }\r\n else if (distance <= 0) {\r\n distance = 0\r\n }\r\n return distance\r\n }\r\n\r\n updateScrollBar() {\r\n if (!this.table?.parentNode) {\r\n return\r\n }\r\n // 获取表格尺寸和表格容器尺寸\r\n const tableRect = this.table.getBoundingClientRect()\r\n const tableViewRect = this.table.parentNode.getBoundingClientRect()\r\n const tableMoveDistance = tableRect.width - tableViewRect.width // 表格最大移动距离\r\n this.tableRect = tableRect\r\n this.tableViewRect = tableViewRect\r\n this.tableMoveDistance = tableMoveDistance\r\n this.oldRootScrollTop = this.quill.root.scrollTop\r\n\r\n if (tableMoveDistance > 0) {\r\n this.createScrollBar()\r\n }\r\n else {\r\n this.destroyScrollBar()\r\n }\r\n }\r\n\r\n createScrollBar() {\r\n // 列控制条增加表格相应位移\r\n const parent = this.quill.root.parentNode\r\n const containerRect = parent.getBoundingClientRect() // 编辑器容器宽度\r\n this.containerRect = containerRect\r\n css(this.columnCtrlPanel, {\r\n left: `${this.tableViewRect.left - containerRect.left - this.table.parentNode.scrollLeft}px`,\r\n })\r\n\r\n // 创建滚动条\r\n if (this.domNode) {\r\n this.domNode.remove()\r\n }\r\n this.domNode = document.createElement('div')\r\n this.domNode.classList.add('qlbt-table-scroll-bar-panel')\r\n this.scrollBar = document.createElement('div')\r\n this.scrollBar.classList.add('qlbt-table-scroll-bar')\r\n this.scrollBar.addEventListener('mousedown', this.handleScrollBarMouseDown.bind(this), false)\r\n const scale = this.tableViewRect.width / this.tableRect.width\r\n const barWidth = this.tableViewRect.width - this.tableMoveDistance * scale // 滑块宽度\r\n css(this.scrollBar, { width: `${barWidth}px` })\r\n this.domNode.appendChild(this.scrollBar)\r\n\r\n // 判断当前表格是否存在位移,如存在通过比例计算滑块当前位移并赋值\r\n const tableScrollLeft = this.table.parentNode.scrollLeft\r\n this.maxBarLeft = this.tableMoveDistance * scale // 滑块最大移动距离\r\n if (tableScrollLeft) {\r\n const barLeft = tableScrollLeft * scale\r\n this.showMask(barLeft)\r\n css(this.scrollBar, { left: `${this.getLimitedDistance(barLeft)}px` })\r\n }\r\n\r\n // 将滚动条插入到 table control panel 中\r\n const barPos = this.tableRect.top + this.tableRect.height - containerRect.top - 1\r\n this.isTableOverflow = containerRect.top + containerRect.height < this.tableRect.top + this.tableRect.height\r\n this.modulesContainer.appendChild(this.domNode)\r\n css(this.domNode, { top: `${Math.min(containerRect.height - SCROLL_BAR_PANEL_HEIGHT, barPos)}px` })\r\n\r\n // 绑定鼠标滚轮事件:Shift+鼠标滚轮,滚动表格横向滚动条\r\n document.addEventListener('wheel', this.handleWheel.bind(this))\r\n }\r\n\r\n destroyScrollBar() {\r\n css(this.leftMask, { display: 'none' })\r\n this.columnCtrlPanel.removeAttribute('style')\r\n this.maxBarLeft = null\r\n this.destroy()\r\n }\r\n\r\n destroy() {\r\n if (this.domNode) {\r\n this.domNode.remove()\r\n }\r\n this.quill.root.removeEventListener('scroll', this.handleQuillRootScroll.bind(this))\r\n document.removeEventListener('wheel', this.handleWheel.bind(this))\r\n }\r\n}\r\n"],"names":["SCROLL_BAR_PANEL_HEIGHT","css"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"table-selection.cjs.js","sources":["../../../../src/table/modules/table-selection.ts"],"sourcesContent":["import Quill from 'quill'\nimport { TableCell } from '../formats/table'\nimport { ERROR_LIMIT, LINE_POSITIONS, PRIMARY_COLOR } from '../table-config'\nimport { css, getRelativeRect } from '../utils'\n\nexport default class TableSelection {\n table: any\n quill: any\n modulesContainer: any\n parent: any\n boundary: any\n // @ts-ignore\n selectedTds: any[]\n // @ts-ignore\n dragging: boolean\n preSelectedTable: any\n oldRootScrollTop: any\n selectingHandler: any\n tdEditHandler: any\n tdResizeHandler: any\n endTd: any\n startTd: any\n editTd: any\n left: any\n bottom: any\n top: any\n right: any\n\n constructor(table, quill, dom) {\n if (!table) {\n return null\n }\n this.table = table\n this.quill = quill\n this.modulesContainer = dom\n this.parent = this.quill.root.parentNode\n this.boundary = {} // params for selected square\n this.selectedTds = [] // array for selected table-cells\n this.dragging = false\n this.preSelectedTable = null\n this.oldRootScrollTop = this.quill.root.scrollTop\n\n this.selectingHandler = this.mouseDownHandler.bind(this)\n\n this.tdEditHandler = this.setTdEditable.bind(this)\n this.tdResizeHandler = this.resizeTd.bind(this)\n\n this.helpLinesInitial()\n this.isEditorHasScrollBar()\n\n this.quill.root.parentNode.addEventListener('mousedown', this.selectingHandler, false)\n this.quill.on('text-change', this.tdResizeHandler)\n if (this.quill.root === this.quill.scrollingContainer) {\n this.quill.root.addEventListener('scroll', this.handleQuillRootScroll.bind(this))\n }\n }\n\n handleQuillRootScroll() {\n LINE_POSITIONS.forEach((direction) => {\n const selectionLine = this[direction]\n if (selectionLine) {\n selectionLine.style.marginTop = `${this.oldRootScrollTop - this.quill.root.scrollTop}px`\n }\n })\n }\n\n isEditorHasScrollBar() {\n if (this.quill.root.scrollHeight > this.quill.root.clientHeight) {\n css(this.modulesContainer, { width: 'calc(100% - 23px)' })\n }\n else {\n this.modulesContainer.removeAttribute('style')\n }\n }\n\n helpLinesInitial() {\n LINE_POSITIONS.forEach((direction) => {\n this[direction] = document.createElement('div')\n this[direction].classList.add('qlbt-selection-line')\n if (direction === 'left') {\n this[direction].classList.add('qlbt-selection-line-first')\n const ctrlPointLeft = document.createElement('div')\n this[direction].appendChild(ctrlPointLeft)\n }\n if (direction === 'bottom') {\n this[direction].classList.add('qlbt-selection-line-last')\n const ctrlPointRight = document.createElement('div')\n this[direction].appendChild(ctrlPointRight)\n }\n css(this[direction], {\n 'position': 'absolute',\n 'display': 'none',\n 'background-color': PRIMARY_COLOR,\n })\n this.modulesContainer.appendChild(this[direction])\n })\n }\n\n mouseDownHandler(e) {\n if (e.button !== 0) {\n return\n }\n const self: any = this\n const betterTableModule = this.quill.getModule('better-table')\n const tableColumnTool = betterTableModule.columnTool\n if (tableColumnTool.activeToolCell) {\n tableColumnTool.activeToolCell.classList.remove('qlbt-tool-cell-on')\n tableColumnTool.activeToolCell = null\n }\n if (e.target.closest('.quill-better-table')) {\n if (e.shiftKey) {\n this.endTd = e.target.closest('td[data-row]')\n this.drawSelection(this, true)\n // avoid select text in multiple table-cell\n if (this.startTd !== this.endTd) {\n this.quill.blur()\n }\n }\n else {\n this.startTd = e.target.closest('td[data-row]')\n this.drawSelection(this, false)\n this.dragging = true\n\n this.parent.addEventListener('mousemove', mouseMoveHandler, false)\n document.addEventListener('mouseup', mouseUpHandler, false)\n }\n }\n else if (e.target.closest('.qlbt-selection-line')) {\n this.parent.addEventListener('mousemove', mouseMoveHandler, false)\n document.addEventListener('mouseup', mouseUpHandler, false)\n }\n\n function mouseMoveHandler(event) {\n event.stopPropagation()\n\n if (event.button !== 0 || !event.target.closest('.quill-better-table')) {\n return\n }\n self.endTd = event.target.closest('td[data-row]')\n if (!self.endTd) {\n return\n }\n self.drawSelection(self, true)\n // avoid select text in multiple table-cell\n if (self.startTd !== self.endTd) {\n self.quill.blur()\n }\n }\n\n function mouseUpHandler() {\n self.parent.removeEventListener('mousemove', mouseMoveHandler, false)\n document.removeEventListener('mouseup', mouseUpHandler, false)\n self.dragging = false\n }\n }\n\n drawSelection(self, end) {\n // fix: 如果滚动条拖动,startTd的位置已经改变了,需要重置startTdRect\n self.startTdRect = getRelativeRect(self.startTd.getBoundingClientRect(), self.quill.root.parentNode)\n let endTdRect = self.startTdRect\n if (end) {\n self.endTdRect = getRelativeRect(self.endTd.getBoundingClientRect(), self.quill.root.parentNode)\n endTdRect = self.endTdRect\n }\n self.boundary = computeBoundaryFromRects(self.startTdRect, endTdRect)\n self.selectedTds = self.computeSelectedTds()\n self.repositionHelpLines()\n }\n\n setTdEditable(e) {\n if (!this.editTd) {\n return\n }\n this.parent.removeEventListener('keypress', this.tdEditHandler, false)\n const dom = this.editTd.domNode\n dom.removeEventListener('click', this.tdEditHandler, false)\n dom.classList.add('editing-select-able')\n dom.setAttribute('contenteditable', true)\n if (e.type === 'keypress') {\n if (dom.childNodes.length > 1 || dom.firstChild.innerHTML !== '<br>') {\n const blank = dom.firstChild.cloneNode()\n blank.innerHTML = '<br>'\n dom.innerHTML = ''\n dom.appendChild(blank)\n }\n dom.focus()\n }\n }\n\n resizeTd() {\n if (!this.editTd || (this.left && !this.left.offsetParent)) {\n return\n }\n if (this.selectedTds.length > 1) {\n this.refreshHelpLinesPosition()\n }\n else {\n const dom = this.editTd.domNode\n const domRect = getRelativeRect(dom.getBoundingClientRect(), this.quill.root.parentNode)\n this.boundary = computeBoundaryFromRects(domRect, domRect)\n this.repositionHelpLines()\n }\n\n // 判断编辑器是否有滚动条,调整遮罩宽度\n this.isEditorHasScrollBar()\n\n // 更新行高 更新滑块位置\n const betterTableModule = this.quill.getModule('better-table')\n const tableColumnTool = betterTableModule.columnTool\n if (tableColumnTool) {\n tableColumnTool.updateRowToolCells()\n const tableViewRect = this.table.parentNode.getBoundingClientRect()\n if (tableColumnTool.leftMask) {\n css(tableColumnTool.leftMask, { height: `${tableViewRect.height + 50}px` })\n }\n }\n\n const tableScrollBar = betterTableModule.tableScrollBar\n tableScrollBar.resetTableHeight(this.table)\n }\n\n resetTd(e) {\n const dom = e.target\n dom.classList.remove('editing-select-able')\n dom.setAttribute('contenteditable', false)\n dom.removeAttribute('contenteditable')\n }\n\n correctBoundary() {\n const tableContainer = Quill.find(this.table)\n const tableCells = tableContainer.descendants(TableCell)\n\n tableCells.forEach((tableCell) => {\n const { x, y, width, height } = getRelativeRect(tableCell.domNode.getBoundingClientRect(), this.quill.root.parentNode)\n const isCellIntersected\n = ((x + ERROR_LIMIT >= this.boundary.x && x + ERROR_LIMIT <= this.boundary.x1)\n || (x - ERROR_LIMIT + width >= this.boundary.x && x - ERROR_LIMIT + width <= this.boundary.x1))\n && ((y + ERROR_LIMIT >= this.boundary.y && y + ERROR_LIMIT <= this.boundary.y1)\n || (y - ERROR_LIMIT + height >= this.boundary.y && y - ERROR_LIMIT + height <= this.boundary.y1))\n if (isCellIntersected) {\n this.boundary = computeBoundaryFromRects(this.boundary, { x, y, width, height })\n }\n })\n }\n\n computeSelectedTds() {\n const tableContainer = Quill.find(this.table)\n const tableCells = tableContainer.descendants(TableCell)\n\n const result = tableCells.reduce((selectedCells, tableCell) => {\n const { x, y, width, height } = getRelativeRect(tableCell.domNode.getBoundingClientRect(), this.quill.root.parentNode)\n const isCellIncluded\n = x + ERROR_LIMIT >= this.boundary.x\n && x - ERROR_LIMIT + width <= this.boundary.x1\n && y + ERROR_LIMIT >= this.boundary.y\n && y - ERROR_LIMIT + height <= this.boundary.y1\n\n if (isCellIncluded) {\n selectedCells.push(tableCell)\n }\n\n return selectedCells\n }, [])\n\n if (result.length === 1 && this.editTd !== result[0]) {\n const resetTds = this.table.querySelectorAll('td[contenteditable=true]')\n resetTds.forEach(td => this.resetTd({ target: td }))\n this.editTd = result[0]\n this.editTd.domNode.addEventListener('mousedown', this.tdEditHandler, false)\n this.parent.addEventListener('keypress', this.tdEditHandler, false)\n }\n\n return result\n }\n\n repositionHelpLines() {\n this.oldRootScrollTop = this.quill.root.scrollTop\n if (!this.left) {\n return\n }\n\n css(this.left, {\n 'display': 'block',\n 'left': `${this.boundary.x - 1}px`,\n 'top': `${this.boundary.y}px`,\n 'height': `${this.boundary.height + 1}px`,\n 'width': '1px',\n 'margin-top': '0px',\n })\n\n css(this.right, {\n 'display': 'block',\n 'left': `${this.boundary.x1}px`,\n 'top': `${this.boundary.y - 1}px`,\n 'height': `${this.boundary.height + 1}px`,\n 'width': '1px',\n 'margin-top': '0px',\n })\n\n css(this.top, {\n 'display': 'block',\n 'left': `${this.boundary.x - 1}px`,\n 'top': `${this.boundary.y - 1}px`,\n 'width': `${this.boundary.width + 1}px`,\n 'height': '1px',\n 'margin-top': '0px',\n })\n\n css(this.bottom, {\n 'display': 'block',\n 'left': `${this.boundary.x - 1}px`,\n 'top': `${this.boundary.y1}px`,\n 'width': `${this.boundary.width + 1}px`,\n 'height': '1px',\n 'margin-top': '0px',\n })\n }\n\n // based on selectedTds compute positions of help lines\n // It is useful when selectedTds are not changed\n refreshHelpLinesPosition() {\n const startRect = getRelativeRect(this.selectedTds[0].domNode.getBoundingClientRect(), this.quill.root.parentNode)\n const endRect = getRelativeRect(\n this.selectedTds[this.selectedTds.length - 1].domNode.getBoundingClientRect(),\n this.quill.root.parentNode,\n )\n this.boundary = computeBoundaryFromRects(startRect, endRect)\n this.repositionHelpLines()\n }\n\n destroy() {\n const resetTds = this.table.querySelectorAll('td[contenteditable=true]')\n resetTds.forEach(td => this.resetTd({ target: td }))\n\n LINE_POSITIONS.forEach((direction) => {\n if (this[direction]) {\n this[direction].remove()\n this[direction] = null\n }\n })\n\n this.quill.root.parentNode.removeEventListener('mousedown', this.selectingHandler, false)\n\n delete this.editTd\n\n return null\n }\n\n setSelection(startRect, endRect) {\n this.boundary = computeBoundaryFromRects(\n getRelativeRect(startRect, this.quill.root.parentNode),\n getRelativeRect(endRect, this.quill.root.parentNode),\n )\n this.correctBoundary()\n this.selectedTds = this.computeSelectedTds()\n this.repositionHelpLines()\n }\n\n clearSelection() {\n const resetTds = this.table.querySelectorAll('td[contenteditable=true]')\n resetTds.forEach(td => this.resetTd({ target: td }))\n this.boundary = {}\n this.selectedTds = []\n LINE_POSITIONS.forEach((direction) => {\n if (this[direction]) {\n css(this[direction], {\n display: 'none',\n })\n }\n })\n }\n}\n\nfunction computeBoundaryFromRects(startRect, endRect) {\n const x = Math.min(startRect.x, endRect.x, startRect.x + startRect.width - 1, endRect.x + endRect.width - 1)\n\n const x1 = Math.max(startRect.x, endRect.x, startRect.x + startRect.width - 1, endRect.x + endRect.width - 1)\n\n const y = Math.min(startRect.y, endRect.y, startRect.y + startRect.height - 1, endRect.y + endRect.height - 1)\n\n const y1 = Math.max(startRect.y, endRect.y, startRect.y + startRect.height - 1, endRect.y + endRect.height - 1)\n\n const width = x1 - x\n const height = y1 - y\n\n return { x, x1, y, y1, width, height }\n}\n"],"names":["table","LINE_POSITIONS","css","PRIMARY_COLOR","getRelativeRect","TableCell","ERROR_LIMIT"],"mappings":"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"}
1
+ {"version":3,"file":"table-selection.cjs.js","sources":["../../../../src/table/modules/table-selection.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { TableCell } from '../formats/table'\r\nimport { ERROR_LIMIT, LINE_POSITIONS, PRIMARY_COLOR } from '../table-config'\r\nimport { css, getRelativeRect } from '../utils'\r\n\r\nexport default class TableSelection {\r\n table: any\r\n quill: any\r\n modulesContainer: any\r\n parent: any\r\n boundary: any\r\n // @ts-ignore\r\n selectedTds: any[]\r\n // @ts-ignore\r\n dragging: boolean\r\n preSelectedTable: any\r\n oldRootScrollTop: any\r\n selectingHandler: any\r\n tdEditHandler: any\r\n tdResizeHandler: any\r\n endTd: any\r\n startTd: any\r\n editTd: any\r\n left: any\r\n bottom: any\r\n top: any\r\n right: any\r\n\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.parent = this.quill.root.parentNode\r\n this.boundary = {} // params for selected square\r\n this.selectedTds = [] // array for selected table-cells\r\n this.dragging = false\r\n this.preSelectedTable = null\r\n this.oldRootScrollTop = this.quill.root.scrollTop\r\n\r\n this.selectingHandler = this.mouseDownHandler.bind(this)\r\n\r\n this.tdEditHandler = this.setTdEditable.bind(this)\r\n this.tdResizeHandler = this.resizeTd.bind(this)\r\n\r\n this.helpLinesInitial()\r\n this.isEditorHasScrollBar()\r\n\r\n this.quill.root.parentNode.addEventListener('mousedown', this.selectingHandler, false)\r\n this.quill.on('text-change', this.tdResizeHandler)\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 LINE_POSITIONS.forEach((direction) => {\r\n const selectionLine = this[direction]\r\n if (selectionLine) {\r\n selectionLine.style.marginTop = `${this.oldRootScrollTop - this.quill.root.scrollTop}px`\r\n }\r\n })\r\n }\r\n\r\n isEditorHasScrollBar() {\r\n if (this.quill.root.scrollHeight > this.quill.root.clientHeight) {\r\n css(this.modulesContainer, { width: 'calc(100% - 23px)' })\r\n }\r\n else {\r\n this.modulesContainer.removeAttribute('style')\r\n }\r\n }\r\n\r\n helpLinesInitial() {\r\n LINE_POSITIONS.forEach((direction) => {\r\n this[direction] = document.createElement('div')\r\n this[direction].classList.add('qlbt-selection-line')\r\n if (direction === 'left') {\r\n this[direction].classList.add('qlbt-selection-line-first')\r\n const ctrlPointLeft = document.createElement('div')\r\n this[direction].appendChild(ctrlPointLeft)\r\n }\r\n if (direction === 'bottom') {\r\n this[direction].classList.add('qlbt-selection-line-last')\r\n const ctrlPointRight = document.createElement('div')\r\n this[direction].appendChild(ctrlPointRight)\r\n }\r\n css(this[direction], {\r\n 'position': 'absolute',\r\n 'display': 'none',\r\n 'background-color': PRIMARY_COLOR,\r\n })\r\n this.modulesContainer.appendChild(this[direction])\r\n })\r\n }\r\n\r\n mouseDownHandler(e) {\r\n if (e.button !== 0) {\r\n return\r\n }\r\n const self: any = this\r\n const betterTableModule = this.quill.getModule('better-table')\r\n const tableColumnTool = betterTableModule.columnTool\r\n if (tableColumnTool.activeToolCell) {\r\n tableColumnTool.activeToolCell.classList.remove('qlbt-tool-cell-on')\r\n tableColumnTool.activeToolCell = null\r\n }\r\n if (e.target.closest('.quill-better-table')) {\r\n if (e.shiftKey) {\r\n this.endTd = e.target.closest('td[data-row]')\r\n this.drawSelection(this, true)\r\n // avoid select text in multiple table-cell\r\n if (this.startTd !== this.endTd) {\r\n this.quill.blur()\r\n }\r\n }\r\n else {\r\n this.startTd = e.target.closest('td[data-row]')\r\n this.drawSelection(this, false)\r\n this.dragging = true\r\n\r\n this.parent.addEventListener('mousemove', mouseMoveHandler, false)\r\n document.addEventListener('mouseup', mouseUpHandler, false)\r\n }\r\n }\r\n else if (e.target.closest('.qlbt-selection-line')) {\r\n this.parent.addEventListener('mousemove', mouseMoveHandler, false)\r\n document.addEventListener('mouseup', mouseUpHandler, false)\r\n }\r\n\r\n function mouseMoveHandler(event) {\r\n event.stopPropagation()\r\n\r\n if (event.button !== 0 || !event.target.closest('.quill-better-table')) {\r\n return\r\n }\r\n self.endTd = event.target.closest('td[data-row]')\r\n if (!self.endTd) {\r\n return\r\n }\r\n self.drawSelection(self, true)\r\n // avoid select text in multiple table-cell\r\n if (self.startTd !== self.endTd) {\r\n self.quill.blur()\r\n }\r\n }\r\n\r\n function mouseUpHandler() {\r\n self.parent.removeEventListener('mousemove', mouseMoveHandler, false)\r\n document.removeEventListener('mouseup', mouseUpHandler, false)\r\n self.dragging = false\r\n }\r\n }\r\n\r\n drawSelection(self, end) {\r\n // fix: 如果滚动条拖动,startTd的位置已经改变了,需要重置startTdRect\r\n self.startTdRect = getRelativeRect(self.startTd.getBoundingClientRect(), self.quill.root.parentNode)\r\n let endTdRect = self.startTdRect\r\n if (end) {\r\n self.endTdRect = getRelativeRect(self.endTd.getBoundingClientRect(), self.quill.root.parentNode)\r\n endTdRect = self.endTdRect\r\n }\r\n self.boundary = computeBoundaryFromRects(self.startTdRect, endTdRect)\r\n self.selectedTds = self.computeSelectedTds()\r\n self.repositionHelpLines()\r\n }\r\n\r\n setTdEditable(e) {\r\n if (!this.editTd) {\r\n return\r\n }\r\n this.parent.removeEventListener('keypress', this.tdEditHandler, false)\r\n const dom = this.editTd.domNode\r\n dom.removeEventListener('click', this.tdEditHandler, false)\r\n dom.classList.add('editing-select-able')\r\n dom.setAttribute('contenteditable', true)\r\n if (e.type === 'keypress') {\r\n if (dom.childNodes.length > 1 || dom.firstChild.innerHTML !== '<br>') {\r\n const blank = dom.firstChild.cloneNode()\r\n blank.innerHTML = '<br>'\r\n dom.innerHTML = ''\r\n dom.appendChild(blank)\r\n }\r\n dom.focus()\r\n }\r\n }\r\n\r\n resizeTd() {\r\n if (!this.editTd || (this.left && !this.left.offsetParent)) {\r\n return\r\n }\r\n if (this.selectedTds.length > 1) {\r\n this.refreshHelpLinesPosition()\r\n }\r\n else {\r\n const dom = this.editTd.domNode\r\n const domRect = getRelativeRect(dom.getBoundingClientRect(), this.quill.root.parentNode)\r\n this.boundary = computeBoundaryFromRects(domRect, domRect)\r\n this.repositionHelpLines()\r\n }\r\n\r\n // 判断编辑器是否有滚动条,调整遮罩宽度\r\n this.isEditorHasScrollBar()\r\n\r\n // 更新行高 更新滑块位置\r\n const betterTableModule = this.quill.getModule('better-table')\r\n const tableColumnTool = betterTableModule.columnTool\r\n if (tableColumnTool) {\r\n tableColumnTool.updateRowToolCells()\r\n const tableViewRect = this.table.parentNode.getBoundingClientRect()\r\n if (tableColumnTool.leftMask) {\r\n css(tableColumnTool.leftMask, { height: `${tableViewRect.height + 50}px` })\r\n }\r\n }\r\n\r\n const tableScrollBar = betterTableModule.tableScrollBar\r\n tableScrollBar.resetTableHeight(this.table)\r\n }\r\n\r\n resetTd(e) {\r\n const dom = e.target\r\n dom.classList.remove('editing-select-able')\r\n dom.setAttribute('contenteditable', false)\r\n dom.removeAttribute('contenteditable')\r\n }\r\n\r\n correctBoundary() {\r\n const tableContainer = Quill.find(this.table)\r\n const tableCells = tableContainer.descendants(TableCell)\r\n\r\n tableCells.forEach((tableCell) => {\r\n const { x, y, width, height } = getRelativeRect(tableCell.domNode.getBoundingClientRect(), this.quill.root.parentNode)\r\n const isCellIntersected\r\n = ((x + ERROR_LIMIT >= this.boundary.x && x + ERROR_LIMIT <= this.boundary.x1)\r\n || (x - ERROR_LIMIT + width >= this.boundary.x && x - ERROR_LIMIT + width <= this.boundary.x1))\r\n && ((y + ERROR_LIMIT >= this.boundary.y && y + ERROR_LIMIT <= this.boundary.y1)\r\n || (y - ERROR_LIMIT + height >= this.boundary.y && y - ERROR_LIMIT + height <= this.boundary.y1))\r\n if (isCellIntersected) {\r\n this.boundary = computeBoundaryFromRects(this.boundary, { x, y, width, height })\r\n }\r\n })\r\n }\r\n\r\n computeSelectedTds() {\r\n const tableContainer = Quill.find(this.table)\r\n const tableCells = tableContainer.descendants(TableCell)\r\n\r\n const result = tableCells.reduce((selectedCells, tableCell) => {\r\n const { x, y, width, height } = getRelativeRect(tableCell.domNode.getBoundingClientRect(), this.quill.root.parentNode)\r\n const isCellIncluded\r\n = x + ERROR_LIMIT >= this.boundary.x\r\n && x - ERROR_LIMIT + width <= this.boundary.x1\r\n && y + ERROR_LIMIT >= this.boundary.y\r\n && y - ERROR_LIMIT + height <= this.boundary.y1\r\n\r\n if (isCellIncluded) {\r\n selectedCells.push(tableCell)\r\n }\r\n\r\n return selectedCells\r\n }, [])\r\n\r\n if (result.length === 1 && this.editTd !== result[0]) {\r\n const resetTds = this.table.querySelectorAll('td[contenteditable=true]')\r\n resetTds.forEach(td => this.resetTd({ target: td }))\r\n this.editTd = result[0]\r\n this.editTd.domNode.addEventListener('mousedown', this.tdEditHandler, false)\r\n this.parent.addEventListener('keypress', this.tdEditHandler, false)\r\n }\r\n\r\n return result\r\n }\r\n\r\n repositionHelpLines() {\r\n this.oldRootScrollTop = this.quill.root.scrollTop\r\n if (!this.left) {\r\n return\r\n }\r\n\r\n css(this.left, {\r\n 'display': 'block',\r\n 'left': `${this.boundary.x - 1}px`,\r\n 'top': `${this.boundary.y}px`,\r\n 'height': `${this.boundary.height + 1}px`,\r\n 'width': '1px',\r\n 'margin-top': '0px',\r\n })\r\n\r\n css(this.right, {\r\n 'display': 'block',\r\n 'left': `${this.boundary.x1}px`,\r\n 'top': `${this.boundary.y - 1}px`,\r\n 'height': `${this.boundary.height + 1}px`,\r\n 'width': '1px',\r\n 'margin-top': '0px',\r\n })\r\n\r\n css(this.top, {\r\n 'display': 'block',\r\n 'left': `${this.boundary.x - 1}px`,\r\n 'top': `${this.boundary.y - 1}px`,\r\n 'width': `${this.boundary.width + 1}px`,\r\n 'height': '1px',\r\n 'margin-top': '0px',\r\n })\r\n\r\n css(this.bottom, {\r\n 'display': 'block',\r\n 'left': `${this.boundary.x - 1}px`,\r\n 'top': `${this.boundary.y1}px`,\r\n 'width': `${this.boundary.width + 1}px`,\r\n 'height': '1px',\r\n 'margin-top': '0px',\r\n })\r\n }\r\n\r\n // based on selectedTds compute positions of help lines\r\n // It is useful when selectedTds are not changed\r\n refreshHelpLinesPosition() {\r\n const startRect = getRelativeRect(this.selectedTds[0].domNode.getBoundingClientRect(), this.quill.root.parentNode)\r\n const endRect = getRelativeRect(\r\n this.selectedTds[this.selectedTds.length - 1].domNode.getBoundingClientRect(),\r\n this.quill.root.parentNode,\r\n )\r\n this.boundary = computeBoundaryFromRects(startRect, endRect)\r\n this.repositionHelpLines()\r\n }\r\n\r\n destroy() {\r\n const resetTds = this.table.querySelectorAll('td[contenteditable=true]')\r\n resetTds.forEach(td => this.resetTd({ target: td }))\r\n\r\n LINE_POSITIONS.forEach((direction) => {\r\n if (this[direction]) {\r\n this[direction].remove()\r\n this[direction] = null\r\n }\r\n })\r\n\r\n this.quill.root.parentNode.removeEventListener('mousedown', this.selectingHandler, false)\r\n\r\n delete this.editTd\r\n\r\n return null\r\n }\r\n\r\n setSelection(startRect, endRect) {\r\n this.boundary = computeBoundaryFromRects(\r\n getRelativeRect(startRect, this.quill.root.parentNode),\r\n getRelativeRect(endRect, this.quill.root.parentNode),\r\n )\r\n this.correctBoundary()\r\n this.selectedTds = this.computeSelectedTds()\r\n this.repositionHelpLines()\r\n }\r\n\r\n clearSelection() {\r\n const resetTds = this.table.querySelectorAll('td[contenteditable=true]')\r\n resetTds.forEach(td => this.resetTd({ target: td }))\r\n this.boundary = {}\r\n this.selectedTds = []\r\n LINE_POSITIONS.forEach((direction) => {\r\n if (this[direction]) {\r\n css(this[direction], {\r\n display: 'none',\r\n })\r\n }\r\n })\r\n }\r\n}\r\n\r\nfunction computeBoundaryFromRects(startRect, endRect) {\r\n const x = Math.min(startRect.x, endRect.x, startRect.x + startRect.width - 1, endRect.x + endRect.width - 1)\r\n\r\n const x1 = Math.max(startRect.x, endRect.x, startRect.x + startRect.width - 1, endRect.x + endRect.width - 1)\r\n\r\n const y = Math.min(startRect.y, endRect.y, startRect.y + startRect.height - 1, endRect.y + endRect.height - 1)\r\n\r\n const y1 = Math.max(startRect.y, endRect.y, startRect.y + startRect.height - 1, endRect.y + endRect.height - 1)\r\n\r\n const width = x1 - x\r\n const height = y1 - y\r\n\r\n return { x, x1, y, y1, width, height }\r\n}\r\n"],"names":["table","LINE_POSITIONS","css","PRIMARY_COLOR","getRelativeRect","TableCell","ERROR_LIMIT"],"mappings":"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"}
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
+ const index = require("../utils/index.cjs.js");
4
+ const GRID_SIZE = {
5
+ ROWS: 10,
6
+ COLS: 10,
7
+ CELL_SIZE: 15
8
+ };
9
+ const STYLES = {
10
+ container: {
11
+ "position": "absolute",
12
+ "z-index": "1000",
13
+ "background": "white",
14
+ "border": "1px solid #ccc",
15
+ "padding": "5px",
16
+ "box-shadow": "0 2px 8px rgba(0,0,0,0.1)"
17
+ },
18
+ grid: {
19
+ "display": "grid",
20
+ "grid-template-columns": `repeat(${GRID_SIZE.COLS}, ${GRID_SIZE.CELL_SIZE - 1}px)`,
21
+ "grid-template-rows": `repeat(${GRID_SIZE.ROWS}, ${GRID_SIZE.CELL_SIZE - 1}px)`,
22
+ "gap": "0px"
23
+ },
24
+ row: {
25
+ display: "contents"
26
+ },
27
+ cell: {
28
+ "width": `${GRID_SIZE.CELL_SIZE}px`,
29
+ "height": `${GRID_SIZE.CELL_SIZE}px`,
30
+ "border": "1px solid #ddd",
31
+ "background-color": "#fff",
32
+ "box-sizing": "border-box"
33
+ },
34
+ label: {
35
+ "text-align": "center",
36
+ "margin-top": "5px",
37
+ "font-size": "12px",
38
+ "color": "#666"
39
+ }
40
+ };
41
+ function createCell(row, col, handleMouseOver, handleClick) {
42
+ const cellDiv = document.createElement("div");
43
+ cellDiv.className = "cell";
44
+ index.css(cellDiv, STYLES.cell);
45
+ const mouseOverListener = () => handleMouseOver(row + 1, col + 1);
46
+ const clickListener = () => handleClick();
47
+ cellDiv.addEventListener("mouseover", mouseOverListener);
48
+ cellDiv.addEventListener("click", clickListener);
49
+ const removeListeners = () => {
50
+ cellDiv.removeEventListener("mouseover", mouseOverListener);
51
+ cellDiv.removeEventListener("click", clickListener);
52
+ };
53
+ return { cellDiv, removeListeners };
54
+ }
55
+ function createRow(rowIndex, handleMouseOver, handleClick) {
56
+ const rowDiv = document.createElement("div");
57
+ rowDiv.className = "row";
58
+ index.css(rowDiv, STYLES.row);
59
+ const fragment = document.createDocumentFragment();
60
+ const removeListenersArray = [];
61
+ for (let col = 0; col < GRID_SIZE.COLS; col++) {
62
+ const { cellDiv, removeListeners: removeListeners2 } = createCell(rowIndex, col, handleMouseOver, handleClick);
63
+ fragment.appendChild(cellDiv);
64
+ removeListenersArray.push(removeListeners2);
65
+ }
66
+ rowDiv.appendChild(fragment);
67
+ const removeListeners = () => {
68
+ removeListenersArray.forEach((remove) => remove());
69
+ };
70
+ return { rowDiv, removeListeners };
71
+ }
72
+ class TableSelector {
73
+ constructor({ onSelect }) {
74
+ this.rows = 0;
75
+ this.cols = 0;
76
+ this.removeListenersArray = [];
77
+ this.onSelect = onSelect;
78
+ this.initContainer();
79
+ this.initGrid();
80
+ this.initLabel();
81
+ }
82
+ // init table-selector container
83
+ initContainer() {
84
+ this.container = document.createElement("div");
85
+ this.container.className = "table-selector";
86
+ index.css(this.container, STYLES.container);
87
+ }
88
+ // init grid
89
+ initGrid() {
90
+ this.grid = document.createElement("div");
91
+ this.grid.className = "grid";
92
+ index.css(this.grid, STYLES.grid);
93
+ const fragment = document.createDocumentFragment();
94
+ for (let row = 0; row < GRID_SIZE.ROWS; row++) {
95
+ const { rowDiv, removeListeners } = createRow(
96
+ row,
97
+ this.handleMouseOver.bind(this),
98
+ this.handleClick.bind(this)
99
+ );
100
+ fragment.appendChild(rowDiv);
101
+ this.removeListenersArray.push(removeListeners);
102
+ }
103
+ this.grid.appendChild(fragment);
104
+ this.container.appendChild(this.grid);
105
+ }
106
+ // init label
107
+ initLabel() {
108
+ this.label = document.createElement("div");
109
+ this.label.className = "label";
110
+ index.css(this.label, STYLES.label);
111
+ this.container.appendChild(this.label);
112
+ }
113
+ handleMouseOver(row, col) {
114
+ this.rows = row;
115
+ this.cols = col;
116
+ this.updateGrid();
117
+ }
118
+ handleClick() {
119
+ this.onSelect(this.rows, this.cols);
120
+ this.hide();
121
+ }
122
+ updateGrid() {
123
+ const cells = this.grid.getElementsByClassName("cell");
124
+ for (let i = 0; i < cells.length; i++) {
125
+ const cell = cells[i];
126
+ const row = Math.floor(i / GRID_SIZE.COLS);
127
+ const col = i % GRID_SIZE.COLS;
128
+ index.css(cell, {
129
+ "background-color": row < this.rows && col < this.cols ? "#e6f3ff" : "#fff"
130
+ });
131
+ }
132
+ this.label.textContent = `${this.rows} x ${this.cols}`;
133
+ }
134
+ show(x, y) {
135
+ index.css(this.container, {
136
+ "left": `${x}px`,
137
+ "top": `${y}px`,
138
+ "display": "block",
139
+ "margin-top": "1px"
140
+ });
141
+ }
142
+ hide() {
143
+ index.css(this.container, { display: "none" });
144
+ }
145
+ destroy() {
146
+ this.removeListenersArray.forEach((remove) => remove());
147
+ this.removeListenersArray = [];
148
+ this.hide();
149
+ if (this.container.parentNode) {
150
+ this.container.parentNode.removeChild(this.container);
151
+ }
152
+ this.rows = 0;
153
+ this.cols = 0;
154
+ return null;
155
+ }
156
+ }
157
+ exports.default = TableSelector;
158
+ //# sourceMappingURL=table-selector.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-selector.cjs.js","sources":["../../../../src/table/modules/table-selector.ts"],"sourcesContent":["import { css } from '../utils'\r\n\r\n// 配置\r\nconst GRID_SIZE = {\r\n ROWS: 10,\r\n COLS: 10,\r\n CELL_SIZE: 15,\r\n}\r\n\r\nconst STYLES = {\r\n container: {\r\n 'position': 'absolute',\r\n 'z-index': '1000',\r\n 'background': 'white',\r\n 'border': '1px solid #ccc',\r\n 'padding': '5px',\r\n 'box-shadow': '0 2px 8px rgba(0,0,0,0.1)',\r\n },\r\n grid: {\r\n 'display': 'grid',\r\n 'grid-template-columns': `repeat(${GRID_SIZE.COLS}, ${GRID_SIZE.CELL_SIZE - 1}px)`,\r\n 'grid-template-rows': `repeat(${GRID_SIZE.ROWS}, ${GRID_SIZE.CELL_SIZE - 1}px)`,\r\n 'gap': '0px',\r\n },\r\n row: {\r\n display: 'contents',\r\n },\r\n cell: {\r\n 'width': `${GRID_SIZE.CELL_SIZE}px`,\r\n 'height': `${GRID_SIZE.CELL_SIZE}px`,\r\n 'border': '1px solid #ddd',\r\n 'background-color': '#fff',\r\n 'box-sizing': 'border-box',\r\n },\r\n label: {\r\n 'text-align': 'center',\r\n 'margin-top': '5px',\r\n 'font-size': '12px',\r\n 'color': '#666',\r\n },\r\n}\r\n\r\nfunction createCell(\r\n row: number,\r\n col: number,\r\n handleMouseOver: (row: number, col: number) => void,\r\n handleClick: () => void,\r\n): { cellDiv: HTMLDivElement, removeListeners: () => void } {\r\n const cellDiv = document.createElement('div')\r\n cellDiv.className = 'cell'\r\n css(cellDiv, STYLES.cell)\r\n\r\n const mouseOverListener = () => handleMouseOver(row + 1, col + 1)\r\n const clickListener = () => handleClick()\r\n\r\n cellDiv.addEventListener('mouseover', mouseOverListener)\r\n cellDiv.addEventListener('click', clickListener)\r\n\r\n const removeListeners = () => {\r\n cellDiv.removeEventListener('mouseover', mouseOverListener)\r\n cellDiv.removeEventListener('click', clickListener)\r\n }\r\n\r\n return { cellDiv, removeListeners }\r\n}\r\n\r\nfunction createRow(\r\n rowIndex: number,\r\n handleMouseOver: (row: number, col: number) => void,\r\n handleClick: () => void,\r\n): { rowDiv: HTMLDivElement, removeListeners: () => void } {\r\n const rowDiv = document.createElement('div')\r\n rowDiv.className = 'row'\r\n css(rowDiv, STYLES.row)\r\n\r\n const fragment = document.createDocumentFragment()\r\n const removeListenersArray: (() => void)[] = []\r\n\r\n for (let col = 0; col < GRID_SIZE.COLS; col++) {\r\n const { cellDiv, removeListeners } = createCell(rowIndex, col, handleMouseOver, handleClick)\r\n fragment.appendChild(cellDiv)\r\n removeListenersArray.push(removeListeners)\r\n }\r\n\r\n rowDiv.appendChild(fragment)\r\n\r\n const removeListeners = () => {\r\n removeListenersArray.forEach(remove => remove())\r\n }\r\n\r\n return { rowDiv, removeListeners }\r\n}\r\n\r\nclass TableSelector {\r\n private onSelect: (rows: number, cols: number) => void\r\n container: HTMLDivElement\r\n private grid: HTMLDivElement\r\n private label: HTMLDivElement\r\n private rows: number = 0\r\n private cols: number = 0\r\n private removeListenersArray: (() => void)[] = []\r\n\r\n constructor({ onSelect }: { onSelect: (rows: number, cols: number) => void }) {\r\n this.onSelect = onSelect\r\n this.initContainer()\r\n this.initGrid()\r\n this.initLabel()\r\n }\r\n\r\n // init table-selector container\r\n private initContainer() {\r\n this.container = document.createElement('div')\r\n this.container.className = 'table-selector'\r\n css(this.container, STYLES.container)\r\n }\r\n\r\n // init grid\r\n private initGrid() {\r\n this.grid = document.createElement('div')\r\n this.grid.className = 'grid'\r\n css(this.grid, STYLES.grid)\r\n\r\n const fragment = document.createDocumentFragment()\r\n\r\n for (let row = 0; row < GRID_SIZE.ROWS; row++) {\r\n const { rowDiv, removeListeners } = createRow(\r\n row,\r\n this.handleMouseOver.bind(this),\r\n this.handleClick.bind(this),\r\n )\r\n fragment.appendChild(rowDiv)\r\n this.removeListenersArray.push(removeListeners)\r\n }\r\n this.grid.appendChild(fragment)\r\n this.container.appendChild(this.grid)\r\n }\r\n\r\n // init label\r\n private initLabel() {\r\n this.label = document.createElement('div')\r\n this.label.className = 'label'\r\n css(this.label, STYLES.label)\r\n this.container.appendChild(this.label)\r\n }\r\n\r\n private handleMouseOver(row: number, col: number) {\r\n this.rows = row\r\n this.cols = col\r\n this.updateGrid()\r\n }\r\n\r\n private handleClick() {\r\n this.onSelect(this.rows, this.cols)\r\n this.hide()\r\n }\r\n\r\n updateGrid() {\r\n const cells = this.grid.getElementsByClassName('cell')\r\n for (let i = 0; i < cells.length; i++) {\r\n const cell = cells[i] as HTMLElement\r\n const row = Math.floor(i / GRID_SIZE.COLS)\r\n const col = i % GRID_SIZE.COLS\r\n css(cell, {\r\n 'background-color': row < this.rows && col < this.cols ? '#e6f3ff' : '#fff',\r\n })\r\n }\r\n this.label.textContent = `${this.rows} x ${this.cols}`\r\n }\r\n\r\n show(x: number, y: number) {\r\n css(this.container, {\r\n 'left': `${x}px`,\r\n 'top': `${y}px`,\r\n 'display': 'block',\r\n 'margin-top': '1px',\r\n })\r\n }\r\n\r\n hide() {\r\n css(this.container, { display: 'none' })\r\n }\r\n\r\n destroy() {\r\n this.removeListenersArray.forEach(remove => remove())\r\n this.removeListenersArray = []\r\n\r\n this.hide()\r\n if (this.container.parentNode) {\r\n this.container.parentNode.removeChild(this.container)\r\n }\r\n this.rows = 0\r\n this.cols = 0\r\n return null\r\n }\r\n}\r\n\r\nexport default TableSelector\r\n"],"names":["css","removeListeners"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"table-config.cjs.js","sources":["../../../src/table/table-config.ts"],"sourcesContent":["export const TABLE_CELL_LINE_CLASS = 'qlrte__better-table-cell-line'\nexport const ROW_TOOL_CLASS = 'qlrte__row-tool'\nexport const ROW_TOOL_CELL_CLASS = 'qlrte__row-tool-cell'\nexport const ROW_TOOL_CELL_HOLDER_CLASS = 'qlrte__row-tool-cell-holder'\nexport const COL_TOOL_CLASS = 'qlrte__col-tool'\nexport const COL_TOOL_CELL_CLASS = 'qlrte__col-tool-cell'\nexport const COL_TOOL_CELL_HOLDER_CLASS = 'qlrte__col-tool-cell-holder'\nexport const SELECT_LINE_CLASS = 'qlrte__selection-line'\nexport const OPERATE_MENU_CLASS = 'qlrte__op-menu'\nexport const OPERATE_MENU_ITEM_CLASS = 'qlrte__op-menu-item'\nexport const OPERATE_MENU_ICON_CLASS = 'qlrte__op-menu-icon'\nexport const OPERATE_MENU_ICON_PREFIX_CLASS = 'qlrte__op-menu-icon-prefix'\nexport const OPERATE_MENU_TEXT_CLASS = 'qlrte__op-menu-text'\nexport const OPERATE_MENU_DIVIDING_CLASS = 'qlrte__op-menu-dividing'\nexport const OPERATE_MENU_SUBTITLE_CLASS = 'qlrte__op-menu-subtitle'\nexport const OPERATE_MENU_COLORPICKER_CLASS = 'qlrte__op-menu-color-picker'\nexport const OPERATE_MENU_COLORPICKER_ITEM_CLASS\n = 'qlrte__op-menu-color-picker-item'\nexport const COL_ATTRIBUTES = ['width']\nexport const COL_DEFAULT = {\n width: 100,\n}\nexport const CELL_IDENTITY_KEYS = ['row', 'cell']\nexport const CELL_ATTRIBUTES = ['rowspan', 'colspan', 'cell-bg', 'list']\nexport const CELL_DEFAULT = {\n rowspan: 1,\n colspan: 1,\n}\nexport const ERROR_LIMIT = 5\n\nexport const SCROLL_BAR_PANEL_HEIGHT = 32\nexport const ROW_TOOL_WIDTH = 16\nexport const COL_TOOL_HEIGHT = 16\nexport const CELL_MIN_WIDTH = 50\nexport const CELL_MIN_HEIGHT = 29\nexport const PRIMARY_COLOR = ['#5170ff', 'var(--brand-1, #5170ff)']\n\nexport const MENU_ITEM_HEIGHT = 40\nexport const MENU_MIN_HEIGHT = 150\nexport const MENU_WIDTH = 205\n\nexport const LINE_POSITIONS = ['left', 'right', 'top', 'bottom']\n"],"names":[],"mappings":";;AAAO,MAAM,wBAAwB;AAC9B,MAAM,iBAAiB;AACvB,MAAM,sBAAsB;AAC5B,MAAM,6BAA6B;AACnC,MAAM,iBAAiB;AACvB,MAAM,sBAAsB;AAC5B,MAAM,6BAA6B;AACnC,MAAM,oBAAoB;AAC1B,MAAM,qBAAqB;AAC3B,MAAM,0BAA0B;AAChC,MAAM,0BAA0B;AAChC,MAAM,iCAAiC;AACvC,MAAM,0BAA0B;AAChC,MAAM,8BAA8B;AACpC,MAAM,8BAA8B;AACpC,MAAM,iCAAiC;AACvC,MAAM,sCACT;AACS,MAAA,iBAAiB,CAAC,OAAO;AAC/B,MAAM,cAAc;AAAA,EACzB,OAAO;AACT;AACa,MAAA,qBAAqB,CAAC,OAAO,MAAM;AACzC,MAAM,kBAAkB,CAAC,WAAW,WAAW,WAAW,MAAM;AAChE,MAAM,eAAe;AAAA,EAC1B,SAAS;AAAA,EACT,SAAS;AACX;AACO,MAAM,cAAc;AAEpB,MAAM,0BAA0B;AAChC,MAAM,iBAAiB;AACvB,MAAM,kBAAkB;AACxB,MAAM,iBAAiB;AACvB,MAAM,kBAAkB;AAClB,MAAA,gBAAgB,CAAC,WAAW,yBAAyB;AAE3D,MAAM,mBAAmB;AACzB,MAAM,kBAAkB;AACxB,MAAM,aAAa;AAEnB,MAAM,iBAAiB,CAAC,QAAQ,SAAS,OAAO,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"table-config.cjs.js","sources":["../../../src/table/table-config.ts"],"sourcesContent":["export const TABLE_CELL_LINE_CLASS = 'qlrte__better-table-cell-line'\r\nexport const ROW_TOOL_CLASS = 'qlrte__row-tool'\r\nexport const ROW_TOOL_CELL_CLASS = 'qlrte__row-tool-cell'\r\nexport const ROW_TOOL_CELL_HOLDER_CLASS = 'qlrte__row-tool-cell-holder'\r\nexport const COL_TOOL_CLASS = 'qlrte__col-tool'\r\nexport const COL_TOOL_CELL_CLASS = 'qlrte__col-tool-cell'\r\nexport const COL_TOOL_CELL_HOLDER_CLASS = 'qlrte__col-tool-cell-holder'\r\nexport const SELECT_LINE_CLASS = 'qlrte__selection-line'\r\nexport const OPERATE_MENU_CLASS = 'qlrte__op-menu'\r\nexport const OPERATE_MENU_ITEM_CLASS = 'qlrte__op-menu-item'\r\nexport const OPERATE_MENU_ICON_CLASS = 'qlrte__op-menu-icon'\r\nexport const OPERATE_MENU_ICON_PREFIX_CLASS = 'qlrte__op-menu-icon-prefix'\r\nexport const OPERATE_MENU_TEXT_CLASS = 'qlrte__op-menu-text'\r\nexport const OPERATE_MENU_DIVIDING_CLASS = 'qlrte__op-menu-dividing'\r\nexport const OPERATE_MENU_SUBTITLE_CLASS = 'qlrte__op-menu-subtitle'\r\nexport const OPERATE_MENU_COLORPICKER_CLASS = 'qlrte__op-menu-color-picker'\r\nexport const OPERATE_MENU_COLORPICKER_ITEM_CLASS\r\n = 'qlrte__op-menu-color-picker-item'\r\nexport const COL_ATTRIBUTES = ['width']\r\nexport const COL_DEFAULT = {\r\n width: 100,\r\n}\r\nexport const CELL_IDENTITY_KEYS = ['row', 'cell']\r\nexport const CELL_ATTRIBUTES = ['rowspan', 'colspan', 'cell-bg', 'list']\r\nexport const CELL_DEFAULT = {\r\n rowspan: 1,\r\n colspan: 1,\r\n}\r\nexport const ERROR_LIMIT = 5\r\n\r\nexport const SCROLL_BAR_PANEL_HEIGHT = 32\r\nexport const ROW_TOOL_WIDTH = 16\r\nexport const COL_TOOL_HEIGHT = 16\r\nexport const CELL_MIN_WIDTH = 50\r\nexport const CELL_MIN_HEIGHT = 29\r\nexport const PRIMARY_COLOR = ['#5170ff', 'var(--brand-1, #5170ff)']\r\n\r\nexport const MENU_ITEM_HEIGHT = 40\r\nexport const MENU_MIN_HEIGHT = 150\r\nexport const MENU_WIDTH = 205\r\n\r\nexport const LINE_POSITIONS = ['left', 'right', 'top', 'bottom']\r\n"],"names":[],"mappings":";;AAAO,MAAM,wBAAwB;AAC9B,MAAM,iBAAiB;AACvB,MAAM,sBAAsB;AAC5B,MAAM,6BAA6B;AACnC,MAAM,iBAAiB;AACvB,MAAM,sBAAsB;AAC5B,MAAM,6BAA6B;AACnC,MAAM,oBAAoB;AAC1B,MAAM,qBAAqB;AAC3B,MAAM,0BAA0B;AAChC,MAAM,0BAA0B;AAChC,MAAM,iCAAiC;AACvC,MAAM,0BAA0B;AAChC,MAAM,8BAA8B;AACpC,MAAM,8BAA8B;AACpC,MAAM,iCAAiC;AACvC,MAAM,sCACT;AACS,MAAA,iBAAiB,CAAC,OAAO;AAC/B,MAAM,cAAc;AAAA,EACzB,OAAO;AACT;AACa,MAAA,qBAAqB,CAAC,OAAO,MAAM;AACzC,MAAM,kBAAkB,CAAC,WAAW,WAAW,WAAW,MAAM;AAChE,MAAM,eAAe;AAAA,EAC1B,SAAS;AAAA,EACT,SAAS;AACX;AACO,MAAM,cAAc;AAEpB,MAAM,0BAA0B;AAChC,MAAM,iBAAiB;AACvB,MAAM,kBAAkB;AACxB,MAAM,iBAAiB;AACvB,MAAM,kBAAkB;AAClB,MAAA,gBAAgB,CAAC,WAAW,yBAAyB;AAE3D,MAAM,mBAAmB;AACzB,MAAM,kBAAkB;AACxB,MAAM,aAAa;AAEnB,MAAM,iBAAiB,CAAC,QAAQ,SAAS,OAAO,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../../../../src/table/utils/index.ts"],"sourcesContent":["export function css(domNode, rules) {\n if (typeof rules === 'object') {\n for (const prop in rules) {\n if (prop) {\n if (Array.isArray(rules[prop])) {\n // 兼容IE11浏览器\n rules[prop].forEach((val) => {\n domNode.style[prop] = val\n })\n }\n else {\n domNode.style[prop] = rules[prop]\n }\n }\n }\n }\n}\n\n/**\n * getRelativeRect\n * @param targetRect rect data for target element {Object}\n * @param container container element {Element}\n * @return an object with rect data {Object}\n */\nexport function getRelativeRect(targetRect, container) {\n const containerRect = container.getBoundingClientRect()\n\n return { // ie浏览器中getBoundingClientRect输出为left、right、top、bottom,与chrome的x、y不同\n x: (targetRect.x || targetRect.left) - (containerRect.x || containerRect.left) - container.scrollLeft,\n y: (targetRect.y || targetRect.top) - (containerRect.y || containerRect.top) - container.scrollTop,\n x1: (targetRect.x || targetRect.left) - (containerRect.x || containerRect.left) - container.scrollLeft + targetRect.width,\n y1: (targetRect.y || targetRect.top) - (containerRect.y || containerRect.top) - container.scrollTop + targetRect.height,\n width: targetRect.width,\n height: targetRect.height,\n }\n}\n\nexport const elementRemove = function (node) {\n node && node.parentNode && node.parentNode.removeChild(node)\n}\n\nexport const arrayFrom = function (arrayLike, mapFn?, thisArg?) {\n if (!arrayLike) {\n throw new TypeError(\n 'Array.from requires an array-like object - not null or undefined',\n )\n }\n\n const length = arrayLike.length\n const resArray = []\n\n for (let i = 0; i < length; i++) {\n if (typeof mapFn === 'function') {\n resArray.push(mapFn.call(thisArg, arrayLike[i]))\n }\n else {\n resArray.push(arrayLike[i])\n }\n }\n\n return resArray\n}\n"],"names":[],"mappings":";;AAAgB,SAAA,IAAI,SAAS,OAAO;AAC9B,MAAA,OAAO,UAAU,UAAU;AAC7B,eAAW,QAAQ,OAAO;AACxB,UAAI,MAAM;AACR,YAAI,MAAM,QAAQ,MAAM,IAAI,CAAC,GAAG;AAE9B,gBAAM,IAAI,EAAE,QAAQ,CAAC,QAAQ;AACnB,oBAAA,MAAM,IAAI,IAAI;AAAA,UAAA,CACvB;AAAA,QAAA,OAEE;AACH,kBAAQ,MAAM,IAAI,IAAI,MAAM,IAAI;AAAA,QAClC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAQgB,SAAA,gBAAgB,YAAY,WAAW;AAC/C,QAAA,gBAAgB,UAAU;AAEzB,SAAA;AAAA;AAAA,IACL,IAAI,WAAW,KAAK,WAAW,SAAS,cAAc,KAAK,cAAc,QAAQ,UAAU;AAAA,IAC3F,IAAI,WAAW,KAAK,WAAW,QAAQ,cAAc,KAAK,cAAc,OAAO,UAAU;AAAA,IACzF,KAAK,WAAW,KAAK,WAAW,SAAS,cAAc,KAAK,cAAc,QAAQ,UAAU,aAAa,WAAW;AAAA,IACpH,KAAK,WAAW,KAAK,WAAW,QAAQ,cAAc,KAAK,cAAc,OAAO,UAAU,YAAY,WAAW;AAAA,IACjH,OAAO,WAAW;AAAA,IAClB,QAAQ,WAAW;AAAA,EAAA;AAEvB;AAEa,MAAA,gBAAgB,SAAU,MAAM;AAC3C,UAAQ,KAAK,cAAc,KAAK,WAAW,YAAY,IAAI;AAC7D;AAEO,MAAM,YAAY,SAAU,WAAW,OAAQ,SAAU;AAC9D,MAAI,CAAC,WAAW;AACd,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAAA,EAEJ;AAEA,QAAM,SAAS,UAAU;AACzB,QAAM,WAAW,CAAA;AAEjB,WAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC3B,QAAA,OAAO,UAAU,YAAY;AAC/B,eAAS,KAAK,MAAM,KAAK,SAAS,UAAU,CAAC,CAAC,CAAC;AAAA,IAAA,OAE5C;AACM,eAAA,KAAK,UAAU,CAAC,CAAC;AAAA,IAC5B;AAAA,EACF;AAEO,SAAA;AACT;;;;;"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../../../../src/table/utils/index.ts"],"sourcesContent":["export function css(domNode, rules) {\r\n if (typeof rules === 'object') {\r\n for (const prop in rules) {\r\n if (prop) {\r\n if (Array.isArray(rules[prop])) {\r\n // 兼容IE11浏览器\r\n rules[prop].forEach((val) => {\r\n domNode.style[prop] = val\r\n })\r\n }\r\n else {\r\n domNode.style[prop] = rules[prop]\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * getRelativeRect\r\n * @param targetRect rect data for target element {Object}\r\n * @param container container element {Element}\r\n * @return an object with rect data {Object}\r\n */\r\nexport function getRelativeRect(targetRect, container) {\r\n const containerRect = container.getBoundingClientRect()\r\n\r\n return { // ie浏览器中getBoundingClientRect输出为left、right、top、bottom,与chrome的x、y不同\r\n x: (targetRect.x || targetRect.left) - (containerRect.x || containerRect.left) - container.scrollLeft,\r\n y: (targetRect.y || targetRect.top) - (containerRect.y || containerRect.top) - container.scrollTop,\r\n x1: (targetRect.x || targetRect.left) - (containerRect.x || containerRect.left) - container.scrollLeft + targetRect.width,\r\n y1: (targetRect.y || targetRect.top) - (containerRect.y || containerRect.top) - container.scrollTop + targetRect.height,\r\n width: targetRect.width,\r\n height: targetRect.height,\r\n }\r\n}\r\n\r\nexport const elementRemove = function (node) {\r\n node && node.parentNode && node.parentNode.removeChild(node)\r\n}\r\n\r\nexport const arrayFrom = function (arrayLike, mapFn?, thisArg?) {\r\n if (!arrayLike) {\r\n throw new TypeError(\r\n 'Array.from requires an array-like object - not null or undefined',\r\n )\r\n }\r\n\r\n const length = arrayLike.length\r\n const resArray = []\r\n\r\n for (let i = 0; i < length; i++) {\r\n if (typeof mapFn === 'function') {\r\n resArray.push(mapFn.call(thisArg, arrayLike[i]))\r\n }\r\n else {\r\n resArray.push(arrayLike[i])\r\n }\r\n }\r\n\r\n return resArray\r\n}\r\n"],"names":[],"mappings":";;AAAgB,SAAA,IAAI,SAAS,OAAO;AAC9B,MAAA,OAAO,UAAU,UAAU;AAC7B,eAAW,QAAQ,OAAO;AACxB,UAAI,MAAM;AACR,YAAI,MAAM,QAAQ,MAAM,IAAI,CAAC,GAAG;AAE9B,gBAAM,IAAI,EAAE,QAAQ,CAAC,QAAQ;AACnB,oBAAA,MAAM,IAAI,IAAI;AAAA,UAAA,CACvB;AAAA,QAAA,OAEE;AACH,kBAAQ,MAAM,IAAI,IAAI,MAAM,IAAI;AAAA,QAClC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAQgB,SAAA,gBAAgB,YAAY,WAAW;AAC/C,QAAA,gBAAgB,UAAU;AAEzB,SAAA;AAAA;AAAA,IACL,IAAI,WAAW,KAAK,WAAW,SAAS,cAAc,KAAK,cAAc,QAAQ,UAAU;AAAA,IAC3F,IAAI,WAAW,KAAK,WAAW,QAAQ,cAAc,KAAK,cAAc,OAAO,UAAU;AAAA,IACzF,KAAK,WAAW,KAAK,WAAW,SAAS,cAAc,KAAK,cAAc,QAAQ,UAAU,aAAa,WAAW;AAAA,IACpH,KAAK,WAAW,KAAK,WAAW,QAAQ,cAAc,KAAK,cAAc,OAAO,UAAU,YAAY,WAAW;AAAA,IACjH,OAAO,WAAW;AAAA,IAClB,QAAQ,WAAW;AAAA,EAAA;AAEvB;AAEa,MAAA,gBAAgB,SAAU,MAAM;AAC3C,UAAQ,KAAK,cAAc,KAAK,WAAW,YAAY,IAAI;AAC7D;AAEO,MAAM,YAAY,SAAU,WAAW,OAAQ,SAAU;AAC9D,MAAI,CAAC,WAAW;AACd,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAAA,EAEJ;AAEA,QAAM,SAAS,UAAU;AACzB,QAAM,WAAW,CAAA;AAEjB,WAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC3B,QAAA,OAAO,UAAU,YAAY;AAC/B,eAAS,KAAK,MAAM,KAAK,SAAS,UAAU,CAAC,CAAC,CAAC;AAAA,IAAA,OAE5C;AACM,eAAA,KAAK,UAAU,CAAC,CAAC;AAAA,IAC5B;AAAA,EACF;AAEO,SAAA;AACT;;;;;"}