@opentiny/fluent-editor 3.25.0 → 3.25.2

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 (512) hide show
  1. package/README.md +7 -5
  2. package/es/config/base64-image.es.js +0 -2
  3. package/es/config/base64-image.es.js.map +1 -1
  4. package/es/config/index.es.js +0 -49
  5. package/es/config/index.es.js.map +1 -1
  6. package/es/core/fluent-editor.es.js +22 -0
  7. package/es/core/fluent-editor.es.js.map +1 -0
  8. package/es/fluent-editor.es.js +58 -196
  9. package/es/fluent-editor.es.js.map +1 -1
  10. package/es/{soft-break/index.es.js → formats/soft-break.es.js} +1 -1
  11. package/es/formats/soft-break.es.js.map +1 -0
  12. package/es/{strike/index.es.js → formats/strike.es.js} +1 -1
  13. package/es/formats/strike.es.js.map +1 -0
  14. package/es/{video/index.es.js → formats/video.es.js} +1 -1
  15. package/es/formats/video.es.js.map +1 -0
  16. package/es/index.es.js +4 -4
  17. package/es/index.es.js.map +1 -1
  18. package/es/{counter/index.es.js → modules/counter.es.js} +1 -1
  19. package/es/modules/counter.es.js.map +1 -0
  20. package/es/{custom-clipboard.es.js → modules/custom-clipboard.es.js} +3 -3
  21. package/es/modules/custom-clipboard.es.js.map +1 -0
  22. package/es/{custom-image → modules/custom-image}/BlotFormatter.es.js +28 -0
  23. package/es/modules/custom-image/BlotFormatter.es.js.map +1 -0
  24. package/es/modules/custom-image/Options.es.js.map +1 -0
  25. package/es/modules/custom-image/actions/Action.es.js.map +1 -0
  26. package/es/modules/custom-image/actions/CustomResizeAction.es.js.map +1 -0
  27. package/es/modules/custom-image/actions/DeleteAction.es.js.map +1 -0
  28. package/es/modules/custom-image/image-bar.es.js +126 -0
  29. package/es/modules/custom-image/image-bar.es.js.map +1 -0
  30. package/es/{custom-image → modules/custom-image}/image.es.js +1 -1
  31. package/es/modules/custom-image/image.es.js.map +1 -0
  32. package/es/modules/custom-image/specs/BlotSpec.es.js.map +1 -0
  33. package/es/{custom-image → modules/custom-image}/specs/CustomImageSpec.es.js +1 -1
  34. package/es/modules/custom-image/specs/CustomImageSpec.es.js.map +1 -0
  35. package/es/modules/custom-image/specs/ImageSpec.es.js.map +1 -0
  36. package/es/{custom-uploader.es.js → modules/custom-uploader.es.js} +2 -2
  37. package/es/modules/custom-uploader.es.js.map +1 -0
  38. package/es/{divider/index.es.js → modules/divider.es.js} +1 -1
  39. package/es/modules/divider.es.js.map +1 -0
  40. package/es/modules/emoji/emoji-list/people.es.js.map +1 -0
  41. package/es/modules/emoji/emoji-list.es.js.map +1 -0
  42. package/es/modules/emoji/emoji-map.es.js.map +1 -0
  43. package/es/modules/emoji/emoji-sprite.es.js +5 -0
  44. package/es/modules/emoji/emoji-sprite.es.js.map +1 -0
  45. package/es/modules/emoji/formats/emoji-blot.es.js.map +1 -0
  46. package/es/modules/emoji/index.es.js.map +1 -0
  47. package/es/modules/emoji/modules/emoji.es.js.map +1 -0
  48. package/es/{emoji → modules/emoji}/modules/toolbar-emoji.es.js +1 -1
  49. package/{lib/emoji/modules/toolbar-emoji.cjs.js.map → es/modules/emoji/modules/toolbar-emoji.es.js.map} +1 -1
  50. package/es/modules/emoji/utils.es.js.map +1 -0
  51. package/es/{file → modules/file}/formats/file.es.js +1 -1
  52. package/es/modules/file/formats/file.es.js.map +1 -0
  53. package/es/modules/file/index.es.js.map +1 -0
  54. package/es/{file → modules/file}/modules/file-bar.es.js +1 -1
  55. package/es/modules/file/modules/file-bar.es.js.map +1 -0
  56. package/es/modules/global-link/constants.es.js.map +1 -0
  57. package/es/modules/global-link/formats/customer-widget-link.es.js.map +1 -0
  58. package/es/modules/global-link/formats/doc-link.es.js.map +1 -0
  59. package/es/modules/global-link/formats/wiki-link.es.js.map +1 -0
  60. package/es/modules/global-link/formats/work-item-link.es.js.map +1 -0
  61. package/es/{global-link → modules/global-link}/index.es.js +1 -1
  62. package/es/modules/global-link/index.es.js.map +1 -0
  63. package/es/modules/global-link/utils/createTable.es.js.map +1 -0
  64. package/es/{i18n/index.es.js → modules/i18n.es.js} +2 -2
  65. package/es/modules/i18n.es.js.map +1 -0
  66. package/es/{link → modules/link}/formats/link.es.js +1 -1
  67. package/es/modules/link/formats/link.es.js.map +1 -0
  68. package/es/modules/link/index.es.js.map +1 -0
  69. package/es/{link → modules/link}/modules/tooltip.es.js +4 -4
  70. package/es/modules/link/modules/tooltip.es.js.map +1 -0
  71. package/es/modules/mathlive/formats.es.js.map +1 -0
  72. package/es/modules/mathlive/index.es.js.map +1 -0
  73. package/es/modules/mathlive/tooltip.es.js.map +1 -0
  74. package/es/{mention → modules/mention}/Mention.es.js +1 -1
  75. package/es/modules/mention/Mention.es.js.map +1 -0
  76. package/es/modules/mention/MentionLink.es.js.map +1 -0
  77. package/es/modules/mention/constants.es.js.map +1 -0
  78. package/es/{quick-menu/index.es.js → modules/quick-menu.es.js} +1 -1
  79. package/es/modules/quick-menu.es.js.map +1 -0
  80. package/es/{syntax/index.es.js → modules/syntax.es.js} +1 -1
  81. package/es/modules/syntax.es.js.map +1 -0
  82. package/es/{table → modules/table}/better-table.es.js +1 -1
  83. package/es/modules/table/better-table.es.js.map +1 -0
  84. package/es/{table → modules/table}/formats/header.es.js +1 -1
  85. package/es/modules/table/formats/header.es.js.map +1 -0
  86. package/es/modules/table/formats/list.es.js.map +1 -0
  87. package/es/{table → modules/table}/formats/table.es.js +2 -2
  88. package/es/modules/table/formats/table.es.js.map +1 -0
  89. package/es/modules/table/modules/table-column-tool.es.js.map +1 -0
  90. package/es/{table → modules/table}/modules/table-operation-menu.es.js +2 -2
  91. package/es/modules/table/modules/table-operation-menu.es.js.map +1 -0
  92. package/es/modules/table/modules/table-scroll-bar.es.js.map +1 -0
  93. package/es/modules/table/modules/table-selection.es.js.map +1 -0
  94. package/es/modules/table/modules/table-selector.es.js.map +1 -0
  95. package/es/modules/table/table-config.es.js.map +1 -0
  96. package/es/modules/table/utils/index.es.js.map +1 -0
  97. package/es/{table → modules/table}/utils/node-matchers.es.js +1 -1
  98. package/es/modules/table/utils/node-matchers.es.js.map +1 -0
  99. package/es/{toolbar → modules/toolbar}/better-picker.es.js +1 -1
  100. package/es/modules/toolbar/better-picker.es.js.map +1 -0
  101. package/es/{toolbar → modules/toolbar}/index.es.js +1 -1
  102. package/es/modules/toolbar/index.es.js.map +1 -0
  103. package/es/{toolbar → modules/toolbar}/toolbar-tip.es.js +2 -2
  104. package/es/modules/toolbar/toolbar-tip.es.js.map +1 -0
  105. package/es/themes/snow.es.js +119 -0
  106. package/es/themes/snow.es.js.map +1 -0
  107. package/es/{format-painter/index.es.js → tools/format-painter.es.js} +1 -1
  108. package/es/tools/format-painter.es.js.map +1 -0
  109. package/es/{fullscreen/handler.es.js → tools/fullscreen.es.js} +3 -2
  110. package/es/tools/fullscreen.es.js.map +1 -0
  111. package/es/{screenshot/index.es.js → tools/screenshot.es.js} +1 -1
  112. package/es/tools/screenshot.es.js.map +1 -0
  113. package/es/ui/icons.config.es.js.map +1 -0
  114. package/es/ui/icons.es.js +58 -0
  115. package/es/ui/icons.es.js.map +1 -0
  116. package/lib/config/base64-image.cjs.js +0 -2
  117. package/lib/config/base64-image.cjs.js.map +1 -1
  118. package/lib/config/index.cjs.js +0 -49
  119. package/lib/config/index.cjs.js.map +1 -1
  120. package/lib/core/fluent-editor.cjs.js +22 -0
  121. package/lib/core/fluent-editor.cjs.js.map +1 -0
  122. package/lib/fluent-editor.cjs.js +58 -196
  123. package/lib/fluent-editor.cjs.js.map +1 -1
  124. package/lib/{soft-break/index.cjs.js → formats/soft-break.cjs.js} +1 -1
  125. package/lib/formats/soft-break.cjs.js.map +1 -0
  126. package/lib/{strike/index.cjs.js → formats/strike.cjs.js} +1 -1
  127. package/lib/formats/strike.cjs.js.map +1 -0
  128. package/lib/{video/index.cjs.js → formats/video.cjs.js} +1 -1
  129. package/lib/formats/video.cjs.js.map +1 -0
  130. package/lib/index.cjs.js +4 -4
  131. package/lib/{counter/index.cjs.js → modules/counter.cjs.js} +1 -1
  132. package/{es/counter/index.es.js.map → lib/modules/counter.cjs.js.map} +1 -1
  133. package/lib/{custom-clipboard.cjs.js → modules/custom-clipboard.cjs.js} +3 -3
  134. package/lib/modules/custom-clipboard.cjs.js.map +1 -0
  135. package/lib/{custom-image → modules/custom-image}/BlotFormatter.cjs.js +28 -0
  136. package/lib/modules/custom-image/BlotFormatter.cjs.js.map +1 -0
  137. package/lib/modules/custom-image/Options.cjs.js.map +1 -0
  138. package/lib/modules/custom-image/actions/Action.cjs.js.map +1 -0
  139. package/lib/modules/custom-image/actions/CustomResizeAction.cjs.js.map +1 -0
  140. package/lib/modules/custom-image/actions/DeleteAction.cjs.js.map +1 -0
  141. package/lib/modules/custom-image/image-bar.cjs.js +126 -0
  142. package/lib/modules/custom-image/image-bar.cjs.js.map +1 -0
  143. package/lib/{custom-image → modules/custom-image}/image.cjs.js +1 -1
  144. package/lib/modules/custom-image/image.cjs.js.map +1 -0
  145. package/lib/modules/custom-image/specs/BlotSpec.cjs.js.map +1 -0
  146. package/lib/{custom-image → modules/custom-image}/specs/CustomImageSpec.cjs.js +1 -1
  147. package/lib/modules/custom-image/specs/CustomImageSpec.cjs.js.map +1 -0
  148. package/lib/modules/custom-image/specs/ImageSpec.cjs.js.map +1 -0
  149. package/lib/{custom-uploader.cjs.js → modules/custom-uploader.cjs.js} +2 -2
  150. package/lib/modules/custom-uploader.cjs.js.map +1 -0
  151. package/lib/{divider/index.cjs.js → modules/divider.cjs.js} +1 -1
  152. package/lib/modules/divider.cjs.js.map +1 -0
  153. package/lib/modules/emoji/emoji-list/people.cjs.js.map +1 -0
  154. package/lib/modules/emoji/emoji-list.cjs.js.map +1 -0
  155. package/lib/modules/emoji/emoji-map.cjs.js.map +1 -0
  156. package/lib/modules/emoji/emoji-sprite.cjs.js +5 -0
  157. package/lib/modules/emoji/emoji-sprite.cjs.js.map +1 -0
  158. package/lib/modules/emoji/formats/emoji-blot.cjs.js.map +1 -0
  159. package/lib/modules/emoji/index.cjs.js.map +1 -0
  160. package/lib/modules/emoji/modules/emoji.cjs.js.map +1 -0
  161. package/lib/{emoji → modules/emoji}/modules/toolbar-emoji.cjs.js +2 -2
  162. package/lib/modules/emoji/modules/toolbar-emoji.cjs.js.map +1 -0
  163. package/lib/modules/emoji/utils.cjs.js.map +1 -0
  164. package/lib/{file → modules/file}/formats/file.cjs.js +1 -1
  165. package/lib/modules/file/formats/file.cjs.js.map +1 -0
  166. package/lib/modules/file/index.cjs.js.map +1 -0
  167. package/lib/{file → modules/file}/modules/file-bar.cjs.js +1 -1
  168. package/lib/modules/file/modules/file-bar.cjs.js.map +1 -0
  169. package/lib/modules/global-link/constants.cjs.js.map +1 -0
  170. package/lib/modules/global-link/formats/customer-widget-link.cjs.js.map +1 -0
  171. package/lib/modules/global-link/formats/doc-link.cjs.js.map +1 -0
  172. package/lib/modules/global-link/formats/wiki-link.cjs.js.map +1 -0
  173. package/lib/modules/global-link/formats/work-item-link.cjs.js.map +1 -0
  174. package/lib/{global-link → modules/global-link}/index.cjs.js +1 -1
  175. package/lib/modules/global-link/index.cjs.js.map +1 -0
  176. package/lib/modules/global-link/utils/createTable.cjs.js.map +1 -0
  177. package/lib/{i18n/index.cjs.js → modules/i18n.cjs.js} +3 -3
  178. package/lib/modules/i18n.cjs.js.map +1 -0
  179. package/lib/{link → modules/link}/formats/link.cjs.js +1 -1
  180. package/lib/modules/link/formats/link.cjs.js.map +1 -0
  181. package/lib/modules/link/index.cjs.js.map +1 -0
  182. package/lib/{link → modules/link}/modules/tooltip.cjs.js +4 -4
  183. package/lib/modules/link/modules/tooltip.cjs.js.map +1 -0
  184. package/lib/modules/mathlive/formats.cjs.js.map +1 -0
  185. package/lib/modules/mathlive/index.cjs.js.map +1 -0
  186. package/lib/modules/mathlive/tooltip.cjs.js.map +1 -0
  187. package/lib/{mention → modules/mention}/Mention.cjs.js +1 -1
  188. package/lib/modules/mention/Mention.cjs.js.map +1 -0
  189. package/lib/modules/mention/MentionLink.cjs.js.map +1 -0
  190. package/lib/modules/mention/constants.cjs.js.map +1 -0
  191. package/lib/{quick-menu/index.cjs.js → modules/quick-menu.cjs.js} +1 -1
  192. package/lib/modules/quick-menu.cjs.js.map +1 -0
  193. package/lib/{syntax/index.cjs.js → modules/syntax.cjs.js} +1 -1
  194. package/lib/modules/syntax.cjs.js.map +1 -0
  195. package/lib/{table → modules/table}/better-table.cjs.js +1 -1
  196. package/lib/modules/table/better-table.cjs.js.map +1 -0
  197. package/lib/{table → modules/table}/formats/header.cjs.js +1 -1
  198. package/lib/modules/table/formats/header.cjs.js.map +1 -0
  199. package/lib/modules/table/formats/list.cjs.js.map +1 -0
  200. package/lib/{table → modules/table}/formats/table.cjs.js +2 -2
  201. package/lib/modules/table/formats/table.cjs.js.map +1 -0
  202. package/lib/modules/table/modules/table-column-tool.cjs.js.map +1 -0
  203. package/lib/{table → modules/table}/modules/table-operation-menu.cjs.js +2 -2
  204. package/lib/modules/table/modules/table-operation-menu.cjs.js.map +1 -0
  205. package/lib/modules/table/modules/table-scroll-bar.cjs.js.map +1 -0
  206. package/lib/modules/table/modules/table-selection.cjs.js.map +1 -0
  207. package/lib/modules/table/modules/table-selector.cjs.js.map +1 -0
  208. package/lib/modules/table/table-config.cjs.js.map +1 -0
  209. package/lib/modules/table/utils/index.cjs.js.map +1 -0
  210. package/lib/{table → modules/table}/utils/node-matchers.cjs.js +1 -1
  211. package/lib/modules/table/utils/node-matchers.cjs.js.map +1 -0
  212. package/lib/{toolbar → modules/toolbar}/better-picker.cjs.js +1 -1
  213. package/lib/modules/toolbar/better-picker.cjs.js.map +1 -0
  214. package/lib/{toolbar → modules/toolbar}/index.cjs.js +1 -1
  215. package/lib/modules/toolbar/index.cjs.js.map +1 -0
  216. package/lib/{toolbar → modules/toolbar}/toolbar-tip.cjs.js +2 -2
  217. package/lib/modules/toolbar/toolbar-tip.cjs.js.map +1 -0
  218. package/lib/themes/snow.cjs.js +119 -0
  219. package/lib/themes/snow.cjs.js.map +1 -0
  220. package/lib/{format-painter/index.cjs.js → tools/format-painter.cjs.js} +1 -1
  221. package/lib/tools/format-painter.cjs.js.map +1 -0
  222. package/lib/{fullscreen/handler.cjs.js → tools/fullscreen.cjs.js} +4 -3
  223. package/lib/tools/fullscreen.cjs.js.map +1 -0
  224. package/lib/{screenshot/index.cjs.js → tools/screenshot.cjs.js} +1 -1
  225. package/lib/tools/screenshot.cjs.js.map +1 -0
  226. package/lib/ui/icons.cjs.js +58 -0
  227. package/lib/ui/icons.cjs.js.map +1 -0
  228. package/lib/ui/icons.config.cjs.js.map +1 -0
  229. package/package.json +2 -2
  230. package/style.css +193 -0
  231. package/types/config/base64-image.d.ts +0 -1
  232. package/types/config/index.d.ts +0 -3
  233. package/types/config/types/editor-config.interface.d.ts +1 -1
  234. package/types/config/types/editor-toolbar.interface.d.ts +1 -1
  235. package/types/core/fluent-editor.d.ts +12 -0
  236. package/types/fluent-editor.d.ts +2 -11
  237. package/types/index.d.ts +2 -2
  238. package/types/{counter/index.d.ts → modules/counter.d.ts} +1 -1
  239. package/types/{custom-clipboard.d.ts → modules/custom-clipboard.d.ts} +1 -1
  240. package/types/{custom-image → modules/custom-image}/BlotFormatter.d.ts +5 -0
  241. package/types/modules/custom-image/image-bar.d.ts +15 -0
  242. package/types/modules/emoji/emoji-sprite.d.ts +1 -0
  243. package/types/{i18n/index.d.ts → modules/i18n.d.ts} +5 -3
  244. package/types/{table → modules/table}/formats/list.d.ts +1 -1
  245. package/types/{toolbar → modules/toolbar}/toolbar-tip.d.ts +2 -2
  246. package/types/themes/snow.d.ts +4 -0
  247. package/types/ui/icons.d.ts +6 -0
  248. package/es/config/icons.config.es.js.map +0 -1
  249. package/es/custom-clipboard.es.js.map +0 -1
  250. package/es/custom-image/BlotFormatter.es.js.map +0 -1
  251. package/es/custom-image/Options.es.js.map +0 -1
  252. package/es/custom-image/actions/Action.es.js.map +0 -1
  253. package/es/custom-image/actions/CustomResizeAction.es.js.map +0 -1
  254. package/es/custom-image/actions/DeleteAction.es.js.map +0 -1
  255. package/es/custom-image/image.es.js.map +0 -1
  256. package/es/custom-image/specs/BlotSpec.es.js.map +0 -1
  257. package/es/custom-image/specs/CustomImageSpec.es.js.map +0 -1
  258. package/es/custom-image/specs/ImageSpec.es.js.map +0 -1
  259. package/es/custom-uploader.es.js.map +0 -1
  260. package/es/divider/index.es.js.map +0 -1
  261. package/es/emoji/emoji-list/people.es.js.map +0 -1
  262. package/es/emoji/emoji-list.es.js.map +0 -1
  263. package/es/emoji/emoji-map.es.js.map +0 -1
  264. package/es/emoji/formats/emoji-blot.es.js.map +0 -1
  265. package/es/emoji/index.es.js.map +0 -1
  266. package/es/emoji/modules/emoji.es.js.map +0 -1
  267. package/es/emoji/modules/toolbar-emoji.es.js.map +0 -1
  268. package/es/emoji/utils.es.js.map +0 -1
  269. package/es/file/formats/file.es.js.map +0 -1
  270. package/es/file/index.es.js.map +0 -1
  271. package/es/file/modules/file-bar.es.js.map +0 -1
  272. package/es/format-painter/index.es.js.map +0 -1
  273. package/es/fullscreen/handler.es.js.map +0 -1
  274. package/es/global-link/constants.es.js.map +0 -1
  275. package/es/global-link/formats/customer-widget-link.es.js.map +0 -1
  276. package/es/global-link/formats/doc-link.es.js.map +0 -1
  277. package/es/global-link/formats/wiki-link.es.js.map +0 -1
  278. package/es/global-link/formats/work-item-link.es.js.map +0 -1
  279. package/es/global-link/index.es.js.map +0 -1
  280. package/es/global-link/utils/createTable.es.js.map +0 -1
  281. package/es/i18n/index.es.js.map +0 -1
  282. package/es/link/formats/link.es.js.map +0 -1
  283. package/es/link/index.es.js.map +0 -1
  284. package/es/link/modules/tooltip.es.js.map +0 -1
  285. package/es/mathlive/formats.es.js.map +0 -1
  286. package/es/mathlive/index.es.js.map +0 -1
  287. package/es/mathlive/tooltip.es.js.map +0 -1
  288. package/es/mention/Mention.es.js.map +0 -1
  289. package/es/mention/MentionLink.es.js.map +0 -1
  290. package/es/mention/constants.es.js.map +0 -1
  291. package/es/quick-menu/index.es.js.map +0 -1
  292. package/es/screenshot/index.es.js.map +0 -1
  293. package/es/soft-break/index.es.js.map +0 -1
  294. package/es/strike/index.es.js.map +0 -1
  295. package/es/syntax/index.es.js.map +0 -1
  296. package/es/table/better-table.es.js.map +0 -1
  297. package/es/table/formats/header.es.js.map +0 -1
  298. package/es/table/formats/list.es.js.map +0 -1
  299. package/es/table/formats/table.es.js.map +0 -1
  300. package/es/table/modules/table-column-tool.es.js.map +0 -1
  301. package/es/table/modules/table-operation-menu.es.js.map +0 -1
  302. package/es/table/modules/table-scroll-bar.es.js.map +0 -1
  303. package/es/table/modules/table-selection.es.js.map +0 -1
  304. package/es/table/modules/table-selector.es.js.map +0 -1
  305. package/es/table/table-config.es.js.map +0 -1
  306. package/es/table/utils/index.es.js.map +0 -1
  307. package/es/table/utils/node-matchers.es.js.map +0 -1
  308. package/es/toolbar/better-picker.es.js.map +0 -1
  309. package/es/toolbar/index.es.js.map +0 -1
  310. package/es/toolbar/toolbar-tip.es.js.map +0 -1
  311. package/es/video/index.es.js.map +0 -1
  312. package/lib/config/icons.config.cjs.js.map +0 -1
  313. package/lib/counter/index.cjs.js.map +0 -1
  314. package/lib/custom-clipboard.cjs.js.map +0 -1
  315. package/lib/custom-image/BlotFormatter.cjs.js.map +0 -1
  316. package/lib/custom-image/Options.cjs.js.map +0 -1
  317. package/lib/custom-image/actions/Action.cjs.js.map +0 -1
  318. package/lib/custom-image/actions/CustomResizeAction.cjs.js.map +0 -1
  319. package/lib/custom-image/actions/DeleteAction.cjs.js.map +0 -1
  320. package/lib/custom-image/image.cjs.js.map +0 -1
  321. package/lib/custom-image/specs/BlotSpec.cjs.js.map +0 -1
  322. package/lib/custom-image/specs/CustomImageSpec.cjs.js.map +0 -1
  323. package/lib/custom-image/specs/ImageSpec.cjs.js.map +0 -1
  324. package/lib/custom-uploader.cjs.js.map +0 -1
  325. package/lib/divider/index.cjs.js.map +0 -1
  326. package/lib/emoji/emoji-list/people.cjs.js.map +0 -1
  327. package/lib/emoji/emoji-list.cjs.js.map +0 -1
  328. package/lib/emoji/emoji-map.cjs.js.map +0 -1
  329. package/lib/emoji/formats/emoji-blot.cjs.js.map +0 -1
  330. package/lib/emoji/index.cjs.js.map +0 -1
  331. package/lib/emoji/modules/emoji.cjs.js.map +0 -1
  332. package/lib/emoji/utils.cjs.js.map +0 -1
  333. package/lib/file/formats/file.cjs.js.map +0 -1
  334. package/lib/file/index.cjs.js.map +0 -1
  335. package/lib/file/modules/file-bar.cjs.js.map +0 -1
  336. package/lib/format-painter/index.cjs.js.map +0 -1
  337. package/lib/fullscreen/handler.cjs.js.map +0 -1
  338. package/lib/global-link/constants.cjs.js.map +0 -1
  339. package/lib/global-link/formats/customer-widget-link.cjs.js.map +0 -1
  340. package/lib/global-link/formats/doc-link.cjs.js.map +0 -1
  341. package/lib/global-link/formats/wiki-link.cjs.js.map +0 -1
  342. package/lib/global-link/formats/work-item-link.cjs.js.map +0 -1
  343. package/lib/global-link/index.cjs.js.map +0 -1
  344. package/lib/global-link/utils/createTable.cjs.js.map +0 -1
  345. package/lib/i18n/index.cjs.js.map +0 -1
  346. package/lib/link/formats/link.cjs.js.map +0 -1
  347. package/lib/link/index.cjs.js.map +0 -1
  348. package/lib/link/modules/tooltip.cjs.js.map +0 -1
  349. package/lib/mathlive/formats.cjs.js.map +0 -1
  350. package/lib/mathlive/index.cjs.js.map +0 -1
  351. package/lib/mathlive/tooltip.cjs.js.map +0 -1
  352. package/lib/mention/Mention.cjs.js.map +0 -1
  353. package/lib/mention/MentionLink.cjs.js.map +0 -1
  354. package/lib/mention/constants.cjs.js.map +0 -1
  355. package/lib/quick-menu/index.cjs.js.map +0 -1
  356. package/lib/screenshot/index.cjs.js.map +0 -1
  357. package/lib/soft-break/index.cjs.js.map +0 -1
  358. package/lib/strike/index.cjs.js.map +0 -1
  359. package/lib/syntax/index.cjs.js.map +0 -1
  360. package/lib/table/better-table.cjs.js.map +0 -1
  361. package/lib/table/formats/header.cjs.js.map +0 -1
  362. package/lib/table/formats/list.cjs.js.map +0 -1
  363. package/lib/table/formats/table.cjs.js.map +0 -1
  364. package/lib/table/modules/table-column-tool.cjs.js.map +0 -1
  365. package/lib/table/modules/table-operation-menu.cjs.js.map +0 -1
  366. package/lib/table/modules/table-scroll-bar.cjs.js.map +0 -1
  367. package/lib/table/modules/table-selection.cjs.js.map +0 -1
  368. package/lib/table/modules/table-selector.cjs.js.map +0 -1
  369. package/lib/table/table-config.cjs.js.map +0 -1
  370. package/lib/table/utils/index.cjs.js.map +0 -1
  371. package/lib/table/utils/node-matchers.cjs.js.map +0 -1
  372. package/lib/toolbar/better-picker.cjs.js.map +0 -1
  373. package/lib/toolbar/index.cjs.js.map +0 -1
  374. package/lib/toolbar/toolbar-tip.cjs.js.map +0 -1
  375. package/lib/video/index.cjs.js.map +0 -1
  376. /package/es/{custom-image → modules/custom-image}/Options.es.js +0 -0
  377. /package/es/{custom-image → modules/custom-image}/actions/Action.es.js +0 -0
  378. /package/es/{custom-image → modules/custom-image}/actions/CustomResizeAction.es.js +0 -0
  379. /package/es/{custom-image → modules/custom-image}/actions/DeleteAction.es.js +0 -0
  380. /package/es/{custom-image → modules/custom-image}/specs/BlotSpec.es.js +0 -0
  381. /package/es/{custom-image → modules/custom-image}/specs/ImageSpec.es.js +0 -0
  382. /package/es/{emoji → modules/emoji}/emoji-list/index.es.js +0 -0
  383. /package/es/{emoji → modules/emoji}/emoji-list/index.es.js.map +0 -0
  384. /package/es/{emoji → modules/emoji}/emoji-list/people.es.js +0 -0
  385. /package/es/{emoji → modules/emoji}/emoji-list.es.js +0 -0
  386. /package/es/{emoji → modules/emoji}/emoji-map.es.js +0 -0
  387. /package/es/{emoji → modules/emoji}/formats/emoji-blot.es.js +0 -0
  388. /package/es/{emoji → modules/emoji}/index.es.js +0 -0
  389. /package/es/{emoji → modules/emoji}/modules/emoji.es.js +0 -0
  390. /package/es/{emoji → modules/emoji}/utils.es.js +0 -0
  391. /package/es/{file → modules/file}/index.es.js +0 -0
  392. /package/es/{global-link → modules/global-link}/constants.es.js +0 -0
  393. /package/es/{global-link → modules/global-link}/formats/customer-widget-link.es.js +0 -0
  394. /package/es/{global-link → modules/global-link}/formats/doc-link.es.js +0 -0
  395. /package/es/{global-link → modules/global-link}/formats/wiki-link.es.js +0 -0
  396. /package/es/{global-link → modules/global-link}/formats/work-item-link.es.js +0 -0
  397. /package/es/{global-link → modules/global-link}/global-link-panel.es.js +0 -0
  398. /package/es/{global-link → modules/global-link}/global-link-panel.es.js.map +0 -0
  399. /package/es/{global-link → modules/global-link}/utils/createTable.es.js +0 -0
  400. /package/es/{link → modules/link}/index.es.js +0 -0
  401. /package/es/{mathlive → modules/mathlive}/formats.es.js +0 -0
  402. /package/es/{mathlive → modules/mathlive}/index.es.js +0 -0
  403. /package/es/{mathlive → modules/mathlive}/tooltip.es.js +0 -0
  404. /package/es/{mention → modules/mention}/MentionLink.es.js +0 -0
  405. /package/es/{mention → modules/mention}/constants.es.js +0 -0
  406. /package/es/{table → modules/table}/formats/list.es.js +0 -0
  407. /package/es/{table → modules/table}/modules/table-column-tool.es.js +0 -0
  408. /package/es/{table → modules/table}/modules/table-scroll-bar.es.js +0 -0
  409. /package/es/{table → modules/table}/modules/table-selection.es.js +0 -0
  410. /package/es/{table → modules/table}/modules/table-selector.es.js +0 -0
  411. /package/es/{table → modules/table}/table-config.es.js +0 -0
  412. /package/es/{table → modules/table}/utils/index.es.js +0 -0
  413. /package/es/{config → ui}/icons.config.es.js +0 -0
  414. /package/lib/{custom-image → modules/custom-image}/Options.cjs.js +0 -0
  415. /package/lib/{custom-image → modules/custom-image}/actions/Action.cjs.js +0 -0
  416. /package/lib/{custom-image → modules/custom-image}/actions/CustomResizeAction.cjs.js +0 -0
  417. /package/lib/{custom-image → modules/custom-image}/actions/DeleteAction.cjs.js +0 -0
  418. /package/lib/{custom-image → modules/custom-image}/specs/BlotSpec.cjs.js +0 -0
  419. /package/lib/{custom-image → modules/custom-image}/specs/ImageSpec.cjs.js +0 -0
  420. /package/lib/{emoji → modules/emoji}/emoji-list/index.cjs.js +0 -0
  421. /package/lib/{emoji → modules/emoji}/emoji-list/index.cjs.js.map +0 -0
  422. /package/lib/{emoji → modules/emoji}/emoji-list/people.cjs.js +0 -0
  423. /package/lib/{emoji → modules/emoji}/emoji-list.cjs.js +0 -0
  424. /package/lib/{emoji → modules/emoji}/emoji-map.cjs.js +0 -0
  425. /package/lib/{emoji → modules/emoji}/formats/emoji-blot.cjs.js +0 -0
  426. /package/lib/{emoji → modules/emoji}/index.cjs.js +0 -0
  427. /package/lib/{emoji → modules/emoji}/modules/emoji.cjs.js +0 -0
  428. /package/lib/{emoji → modules/emoji}/utils.cjs.js +0 -0
  429. /package/lib/{file → modules/file}/index.cjs.js +0 -0
  430. /package/lib/{global-link → modules/global-link}/constants.cjs.js +0 -0
  431. /package/lib/{global-link → modules/global-link}/formats/customer-widget-link.cjs.js +0 -0
  432. /package/lib/{global-link → modules/global-link}/formats/doc-link.cjs.js +0 -0
  433. /package/lib/{global-link → modules/global-link}/formats/wiki-link.cjs.js +0 -0
  434. /package/lib/{global-link → modules/global-link}/formats/work-item-link.cjs.js +0 -0
  435. /package/lib/{global-link → modules/global-link}/global-link-panel.cjs.js +0 -0
  436. /package/lib/{global-link → modules/global-link}/global-link-panel.cjs.js.map +0 -0
  437. /package/lib/{global-link → modules/global-link}/utils/createTable.cjs.js +0 -0
  438. /package/lib/{link → modules/link}/index.cjs.js +0 -0
  439. /package/lib/{mathlive → modules/mathlive}/formats.cjs.js +0 -0
  440. /package/lib/{mathlive → modules/mathlive}/index.cjs.js +0 -0
  441. /package/lib/{mathlive → modules/mathlive}/tooltip.cjs.js +0 -0
  442. /package/lib/{mention → modules/mention}/MentionLink.cjs.js +0 -0
  443. /package/lib/{mention → modules/mention}/constants.cjs.js +0 -0
  444. /package/lib/{table → modules/table}/formats/list.cjs.js +0 -0
  445. /package/lib/{table → modules/table}/modules/table-column-tool.cjs.js +0 -0
  446. /package/lib/{table → modules/table}/modules/table-scroll-bar.cjs.js +0 -0
  447. /package/lib/{table → modules/table}/modules/table-selection.cjs.js +0 -0
  448. /package/lib/{table → modules/table}/modules/table-selector.cjs.js +0 -0
  449. /package/lib/{table → modules/table}/table-config.cjs.js +0 -0
  450. /package/lib/{table → modules/table}/utils/index.cjs.js +0 -0
  451. /package/lib/{config → ui}/icons.config.cjs.js +0 -0
  452. /package/types/{soft-break/index.d.ts → formats/soft-break.d.ts} +0 -0
  453. /package/types/{strike/index.d.ts → formats/strike.d.ts} +0 -0
  454. /package/types/{video/index.d.ts → formats/video.d.ts} +0 -0
  455. /package/types/{custom-image → modules/custom-image}/Options.d.ts +0 -0
  456. /package/types/{custom-image → modules/custom-image}/actions/Action.d.ts +0 -0
  457. /package/types/{custom-image → modules/custom-image}/actions/CustomResizeAction.d.ts +0 -0
  458. /package/types/{custom-image → modules/custom-image}/actions/DeleteAction.d.ts +0 -0
  459. /package/types/{custom-image → modules/custom-image}/image.d.ts +0 -0
  460. /package/types/{custom-image → modules/custom-image}/specs/BlotSpec.d.ts +0 -0
  461. /package/types/{custom-image → modules/custom-image}/specs/CustomImageSpec.d.ts +0 -0
  462. /package/types/{custom-image → modules/custom-image}/specs/ImageSpec.d.ts +0 -0
  463. /package/types/{custom-uploader.d.ts → modules/custom-uploader.d.ts} +0 -0
  464. /package/types/{divider/index.d.ts → modules/divider.d.ts} +0 -0
  465. /package/types/{emoji → modules/emoji}/emoji-list/index.d.ts +0 -0
  466. /package/types/{emoji → modules/emoji}/emoji-list/people.d.ts +0 -0
  467. /package/types/{emoji → modules/emoji}/emoji-list.d.ts +0 -0
  468. /package/types/{emoji → modules/emoji}/emoji-map.d.ts +0 -0
  469. /package/types/{emoji → modules/emoji}/formats/emoji-blot.d.ts +0 -0
  470. /package/types/{emoji → modules/emoji}/index.d.ts +0 -0
  471. /package/types/{emoji → modules/emoji}/modules/emoji.d.ts +0 -0
  472. /package/types/{emoji → modules/emoji}/modules/toolbar-emoji.d.ts +0 -0
  473. /package/types/{emoji → modules/emoji}/utils.d.ts +0 -0
  474. /package/types/{file → modules/file}/formats/file.d.ts +0 -0
  475. /package/types/{file → modules/file}/index.d.ts +0 -0
  476. /package/types/{file → modules/file}/modules/file-bar.d.ts +0 -0
  477. /package/types/{global-link → modules/global-link}/constants.d.ts +0 -0
  478. /package/types/{global-link → modules/global-link}/formats/customer-widget-link.d.ts +0 -0
  479. /package/types/{global-link → modules/global-link}/formats/doc-link.d.ts +0 -0
  480. /package/types/{global-link → modules/global-link}/formats/wiki-link.d.ts +0 -0
  481. /package/types/{global-link → modules/global-link}/formats/work-item-link.d.ts +0 -0
  482. /package/types/{global-link → modules/global-link}/global-link-panel.d.ts +0 -0
  483. /package/types/{global-link → modules/global-link}/index.d.ts +0 -0
  484. /package/types/{global-link → modules/global-link}/utils/createTable.d.ts +0 -0
  485. /package/types/{link → modules/link}/formats/link.d.ts +0 -0
  486. /package/types/{link → modules/link}/index.d.ts +0 -0
  487. /package/types/{link → modules/link}/modules/tooltip.d.ts +0 -0
  488. /package/types/{mathlive → modules/mathlive}/formats.d.ts +0 -0
  489. /package/types/{mathlive → modules/mathlive}/index.d.ts +0 -0
  490. /package/types/{mathlive → modules/mathlive}/tooltip.d.ts +0 -0
  491. /package/types/{mention → modules/mention}/Mention.d.ts +0 -0
  492. /package/types/{mention → modules/mention}/MentionLink.d.ts +0 -0
  493. /package/types/{mention → modules/mention}/constants.d.ts +0 -0
  494. /package/types/{quick-menu/index.d.ts → modules/quick-menu.d.ts} +0 -0
  495. /package/types/{syntax/index.d.ts → modules/syntax.d.ts} +0 -0
  496. /package/types/{table → modules/table}/better-table.d.ts +0 -0
  497. /package/types/{table → modules/table}/formats/header.d.ts +0 -0
  498. /package/types/{table → modules/table}/formats/table.d.ts +0 -0
  499. /package/types/{table → modules/table}/modules/table-column-tool.d.ts +0 -0
  500. /package/types/{table → modules/table}/modules/table-operation-menu.d.ts +0 -0
  501. /package/types/{table → modules/table}/modules/table-scroll-bar.d.ts +0 -0
  502. /package/types/{table → modules/table}/modules/table-selection.d.ts +0 -0
  503. /package/types/{table → modules/table}/modules/table-selector.d.ts +0 -0
  504. /package/types/{table → modules/table}/table-config.d.ts +0 -0
  505. /package/types/{table → modules/table}/utils/index.d.ts +0 -0
  506. /package/types/{table → modules/table}/utils/node-matchers.d.ts +0 -0
  507. /package/types/{toolbar → modules/toolbar}/better-picker.d.ts +0 -0
  508. /package/types/{toolbar → modules/toolbar}/index.d.ts +0 -0
  509. /package/types/{format-painter/index.d.ts → tools/format-painter.d.ts} +0 -0
  510. /package/types/{fullscreen/handler.d.ts → tools/fullscreen.d.ts} +0 -0
  511. /package/types/{screenshot/index.d.ts → tools/screenshot.d.ts} +0 -0
  512. /package/types/{config → ui}/icons.config.d.ts +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"table.es.js","sources":["../../../../src/table/formats/table.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { isNullOrUndefined } from '../../config/editor.utils'\r\nimport { compare } from '../../utils/method'\r\nimport {\r\n CELL_ATTRIBUTES,\r\n CELL_DEFAULT,\r\n CELL_IDENTITY_KEYS,\r\n CELL_MIN_HEIGHT,\r\n COL_ATTRIBUTES,\r\n COL_DEFAULT,\r\n ERROR_LIMIT,\r\n} from '../table-config'\r\nimport { getRelativeRect } from '../utils'\r\nimport Header from './header'\r\nimport ListItem, { ListContainer } from './list'\r\n\r\nconst Break = Quill.imports['blots/break']\r\nconst Block = Quill.imports['blots/block']\r\nconst Container = Quill.imports['blots/container']\r\n\r\n// @dynamic\r\nclass TableCellLine extends Block {\r\n static requiredContainer: any\r\n static tagName: string\r\n static className: string\r\n static blotName: any\r\n domNode: any\r\n statics: any\r\n wrap: any\r\n parent: any\r\n\r\n static create(value) {\r\n const node = super.create(value)\r\n\r\n // fix: when td has background-color, quill can't set it to table-cell blot\r\n if (value.tdBgColor) {\r\n node.setAttribute(`data-parent-bg`, value.tdBgColor)\r\n delete value.tdBgColor\r\n }\r\n\r\n CELL_IDENTITY_KEYS.forEach((key) => {\r\n const identityMaker = key === 'row' ? rowId : cellId\r\n node.setAttribute(`data-${key}`, value[key] || identityMaker())\r\n })\r\n\r\n CELL_ATTRIBUTES.forEach((attrName) => {\r\n const keyValue = value[attrName] || CELL_DEFAULT[attrName]\r\n keyValue && node.setAttribute(`data-${attrName}`, keyValue)\r\n })\r\n\r\n if (value.height) {\r\n node.setAttribute('height', value.height)\r\n }\r\n\r\n return node\r\n }\r\n\r\n static formats(domNode) {\r\n const formats = {}\r\n if (formats.list) {\r\n formats.list = domNode.classList.item(0)\r\n }\r\n return reduceFormats(domNode, formats)\r\n }\r\n\r\n toggleAttribute(name, value) {\r\n if (value) {\r\n this.domNode.setAttribute(name, value)\r\n }\r\n else {\r\n this.domNode.removeAttribute(name)\r\n }\r\n }\r\n\r\n formatChildren(name, value) {\r\n this.children.forEach((child) => {\r\n child.format && child.format(name, value)\r\n if (!child.domNode.style) {\r\n return\r\n }\r\n if (child.domNode.tagName === 'SPAN' && value) {\r\n child.domNode.style.backgroundColor = value\r\n }\r\n else {\r\n child.domNode.style.backgroundColor = 'initial'\r\n }\r\n })\r\n }\r\n\r\n format(name, value) {\r\n if ([...CELL_ATTRIBUTES, ...CELL_IDENTITY_KEYS, 'parent-bg'].includes(name)) {\r\n if (value) {\r\n this.domNode.setAttribute(`data-${name}`, value)\r\n }\r\n else {\r\n this.domNode.removeAttribute(`data-${name}`)\r\n }\r\n }\r\n else if (name === 'header') {\r\n if (!value) {\r\n return\r\n }\r\n const { row, cell, rowspan, colspan }: any = TableCellLine.formats(this.domNode)\r\n super.format(name, {\r\n value,\r\n row,\r\n cell,\r\n rowspan,\r\n colspan,\r\n })\r\n }\r\n else {\r\n super.format(name, value)\r\n }\r\n switch (true) {\r\n case name === 'cell-bg': {\r\n this.toggleAttribute('data-cell-bg', value)\r\n }\r\n }\r\n }\r\n\r\n optimize(context) {\r\n super.optimize(context)\r\n\r\n // cover shadowBlot's wrap call, pass params parentBlot initialize\r\n // needed\r\n const { row, cell, rowspan, colspan, cellBg } = this.domNode.dataset\r\n const formats: Record<string, any> = TableCellLine.formats(this.domNode)\r\n const parentFormats = this.parent.formats()\r\n if (this.statics.requiredContainer && !(this.parent instanceof this.statics.requiredContainer)) {\r\n this.wrap(this.statics.requiredContainer.blotName, { row, cell, rowspan, colspan, cellBg })\r\n }\r\n else if (!compare(formats, parentFormats)) {\r\n this.parent.format('row', formats.row)\r\n this.parent.format('cell', formats.cell)\r\n this.parent.format('rowspan', formats.rowspan)\r\n this.parent.format('colspan', formats.colspan)\r\n formats['cell-bg'] && this.parent.setCellBg(formats['cell-bg'])\r\n }\r\n\r\n const parentHeight = this.domNode.getAttribute('height')\r\n if (parentHeight) {\r\n this.parent.domNode.style.height = parentHeight\r\n }\r\n }\r\n\r\n tableCell() {\r\n return this.parent\r\n }\r\n}\r\nTableCellLine.blotName = 'table-cell-line'\r\nTableCellLine.className = 'qlbt-cell-line'\r\nTableCellLine.tagName = 'DIV'\r\n\r\n// @dynamic\r\nclass TableCell extends Container {\r\n static allowedChildren: any\r\n static blotName: any\r\n static requiredContainer: any\r\n static tagName: string\r\n next: any\r\n children: any\r\n parent: any\r\n domNode: any\r\n statics: any\r\n wrap: any\r\n splitAfter: any\r\n prev: any\r\n scroll: any\r\n\r\n static create(value = { row: rowId() }) {\r\n const node = super.create(value)\r\n\r\n CELL_IDENTITY_KEYS.forEach((key) => {\r\n node.setAttribute(`data-${key}`, value[key])\r\n })\r\n\r\n CELL_ATTRIBUTES.forEach((attrName) => {\r\n if (value[attrName]) {\r\n node.setAttribute(attrName, value[attrName])\r\n }\r\n })\r\n\r\n return node\r\n }\r\n\r\n static formats(domNode) {\r\n const formats = {\r\n height: undefined,\r\n row: undefined,\r\n }\r\n\r\n formats.height = domNode.getAttribute('height') || undefined\r\n\r\n if (domNode.hasAttribute('data-row')) {\r\n formats.row = domNode.getAttribute('data-row')\r\n }\r\n\r\n if (domNode.hasAttribute('data-cell-bg')) {\r\n formats['cell-bg'] = domNode.getAttribute('data-cell-bg') || undefined\r\n }\r\n return CELL_ATTRIBUTES.reduce((formats, attribute) => {\r\n if (domNode.hasAttribute(attribute)) {\r\n formats[attribute] = domNode.getAttribute(attribute)\r\n }\r\n\r\n return formats\r\n }, formats)\r\n }\r\n\r\n checkMerge() {\r\n if (super.checkMerge() && !isNullOrUndefined(this.next.children.head)) {\r\n const getCellId = (node) => {\r\n return (\r\n (node.formats && node.formats()[node.statics.blotName]) || {\r\n cell: node.domNode.getAttribute('data-cell'),\r\n }\r\n )\r\n }\r\n const thisHead = getCellId(this.children.head)\r\n const thisTail = getCellId(this.children.tail)\r\n const nextHead = getCellId(this.next.children.head)\r\n const nextTail = getCellId(this.next.children.tail)\r\n return thisHead.cell === thisTail.cell && thisHead.cell === nextHead.cell && thisHead.cell === nextTail.cell\r\n }\r\n return false\r\n }\r\n\r\n cellOffset() {\r\n if (this.parent) {\r\n return this.parent.children.indexOf(this)\r\n }\r\n return -1\r\n }\r\n\r\n formats() {\r\n const formats = {}\r\n\r\n if (this.domNode.hasAttribute('data-row')) {\r\n formats.row = this.domNode.getAttribute('data-row')\r\n }\r\n if (this.domNode.hasAttribute('data-cell')) {\r\n formats.cell = this.domNode.getAttribute('data-cell')\r\n }\r\n\r\n return CELL_ATTRIBUTES.reduce((tableFormats, attribute) => {\r\n if (this.domNode.hasAttribute(attribute)) {\r\n tableFormats[attribute] = this.domNode.getAttribute(attribute)\r\n }\r\n\r\n return tableFormats\r\n }, formats)\r\n }\r\n\r\n toggleAttribute(name, value) {\r\n if (value) {\r\n this.domNode.setAttribute(name, value)\r\n }\r\n else {\r\n this.domNode.removeAttribute(name)\r\n }\r\n }\r\n\r\n formatChildren(name, value) {\r\n this.children.forEach((child) => {\r\n child.format(name, value)\r\n })\r\n }\r\n\r\n /**\r\n * this method is for TableCellLine to change cell background color\r\n * if use `format('cell-bg', value)` will loop trigger\r\n * TableCellLine.optimize -> TableCell.format -> TableCellLine.optimize ...\r\n */\r\n setCellBg(value?: string) {\r\n if (value) {\r\n this.domNode.style.backgroundColor = value\r\n }\r\n else {\r\n this.domNode.style.backgroundColor = 'initial'\r\n }\r\n }\r\n\r\n format(name, value) {\r\n const quill = Quill.find(this.scroll.domNode.parentNode)\r\n switch (true) {\r\n case CELL_ATTRIBUTES.includes(name):\r\n this.toggleAttribute(name, value)\r\n break\r\n case ['row', 'cell'].includes(name):\r\n this.toggleAttribute(`data-${name}`, value)\r\n break\r\n case name === 'background': {\r\n const hasBgColor = this.domNode.querySelectorAll('div.qlbt-cell-line[data-parent-bg]')\r\n hasBgColor.forEach(child => child.removeAttribute('data-parent-bg'))\r\n this.domNode.style.background = ''\r\n this.domNode.style.backgroundColor = value\r\n this.children.head.format('parent-bg', value)\r\n break\r\n }\r\n // TODO: 其他格式可同理实现,但已有格式清除时会清除所有格式,待解决\r\n case name === 'size': {\r\n const start = quill.getIndex(this.children.head)\r\n const total = quill.getIndex(this.children.tail) + this.children.tail.length()\r\n const length = total - start > 0 ? total - start : 0\r\n quill.setSelection(start, length, Quill.sources.USER)\r\n quill.format(name, value, Quill.sources.USER)\r\n // 设置选区后需清除选区,否则会固定处理选区内容\r\n quill.setSelection(start)\r\n break\r\n }\r\n case name === 'cell-bg': {\r\n this.toggleAttribute('data-cell-bg', value)\r\n this.toggleAttribute('data-parent-bg', value)\r\n this.formatChildren(name, value)\r\n this.setCellBg(value)\r\n break\r\n }\r\n }\r\n }\r\n\r\n optimize(context) {\r\n // fix: when td has background-color, quill can't set it to table-cell bolt\r\n const hasBg: any = Array.from(this.domNode.childNodes).find((item: any) => item.getAttribute('data-parent-bg'))\r\n const bgColor = hasBg && hasBg.getAttribute('data-parent-bg')\r\n if (bgColor && bgColor !== this.domNode.style.backgroundColor) {\r\n this.domNode.style.backgroundColor = bgColor\r\n }\r\n\r\n const rId = this.domNode.getAttribute('data-row')\r\n if (this.statics.requiredContainer && !(this.parent instanceof this.statics.requiredContainer)) {\r\n this.wrap(this.statics.requiredContainer.blotName, {\r\n row: rId,\r\n })\r\n }\r\n else if (rId !== this.parent.formats().row) {\r\n this.parent.format('row', rId)\r\n }\r\n\r\n this.children.forEach((child) => {\r\n if (isNullOrUndefined(child.next)) {\r\n return\r\n }\r\n const childFormats: any = this.getFormat(child.domNode)\r\n const nextFormats: any = this.getFormat(child.next.domNode)\r\n if (childFormats.cell !== nextFormats.cell) {\r\n const next = this.splitAfter(child)\r\n if (next) {\r\n next.optimize()\r\n }\r\n // We might be able to merge with prev now\r\n if (this.prev) {\r\n this.prev.optimize()\r\n }\r\n }\r\n })\r\n\r\n super.optimize(context)\r\n }\r\n\r\n // 兼容读取TableCell中的子blot,包括table-cell-line、line、head\r\n getFormat(domNode) {\r\n const formats = {}\r\n const firstChild = domNode.childNodes[0]\r\n if (firstChild && domNode.tagName === 'OL') {\r\n formats.list = firstChild.classList.item(0)\r\n }\r\n\r\n return reduceFormats(domNode, formats)\r\n }\r\n\r\n row() {\r\n return this.parent\r\n }\r\n\r\n rowOffset() {\r\n if (this.row()) {\r\n return -1\r\n }\r\n return this.row().rowOffset()\r\n }\r\n\r\n table() {\r\n return this.row() && this.row().table()\r\n }\r\n}\r\nTableCell.blotName = 'table'\r\nTableCell.tagName = 'TD'\r\n\r\n// @dynamic\r\nclass TableRow extends Container {\r\n static requiredContainer: any\r\n static allowedChildren: any\r\n static blotName: string\r\n static tagName: string\r\n next: any\r\n children: any\r\n domNode: any\r\n statics: any\r\n wrap: any\r\n splitAfter: any\r\n enforceAllowedChildren: any\r\n uiNode: any\r\n parent: any\r\n prev: any\r\n\r\n static create(value) {\r\n const node = super.create(value)\r\n if (value.row) {\r\n node.setAttribute('data-row', value.row)\r\n }\r\n return node\r\n }\r\n\r\n checkMerge() {\r\n if (super.checkMerge() && !isNullOrUndefined(this.next.children.head)) {\r\n const thisHead = this.children.head.formats()\r\n const thisTail = this.children.tail.formats()\r\n const nextHead = this.next.children.head.formats()\r\n const nextTail = this.next.children.tail.formats()\r\n\r\n return thisHead.row === thisTail.row && thisHead.row === nextHead.row && thisHead.row === nextTail.row\r\n }\r\n return false\r\n }\r\n\r\n formats() {\r\n return ['row'].reduce((formats, attrName) => {\r\n if (this.domNode.hasAttribute(`data-${attrName}`)) {\r\n formats[attrName] = this.domNode.getAttribute(`data-${attrName}`)\r\n }\r\n return formats\r\n }, {})\r\n }\r\n\r\n format(key, value) {\r\n this.domNode.setAttribute(`data-${key}`, value)\r\n }\r\n\r\n optimize(context) {\r\n // optimize function of ShadowBlot\r\n if (this.statics.requiredContainer && !(this.parent instanceof this.statics.requiredContainer)) {\r\n this.wrap(this.statics.requiredContainer.blotName)\r\n }\r\n\r\n this.children.forEach((child) => {\r\n if (isNullOrUndefined(child.next)) {\r\n return\r\n }\r\n const childFormats = child.formats()\r\n const nextFormats = child.next.formats()\r\n if (childFormats.row !== nextFormats.row) {\r\n const next = this.splitAfter(child)\r\n if (next) {\r\n next.optimize()\r\n }\r\n if (this.prev) {\r\n this.prev.optimize()\r\n }\r\n }\r\n })\r\n\r\n super.optimize(context)\r\n }\r\n\r\n rowOffset() {\r\n if (!this.parent) {\r\n return -1\r\n }\r\n return this.parent.children.indexOf(this)\r\n }\r\n\r\n table() {\r\n return this.parent && this.parent.parent\r\n }\r\n}\r\nTableRow.blotName = 'table-row'\r\nTableRow.tagName = 'TR'\r\n\r\n// @dynamic\r\nclass TableBody extends Container {\r\n static requiredContainer: any\r\n static allowedChildren: any\r\n static blotName: string\r\n static tagName: string\r\n}\r\nTableBody.blotName = 'table-body'\r\nTableBody.tagName = 'TBODY'\r\n\r\n// @dynamic\r\nclass TableCol extends Block {\r\n static requiredContainer: any\r\n static blotName: string\r\n static tagName: string\r\n domNode: any\r\n\r\n static create(value) {\r\n const node = super.create(value)\r\n COL_ATTRIBUTES.forEach((attrName) => {\r\n node.setAttribute(`${attrName}`, value[attrName] || COL_DEFAULT[attrName])\r\n })\r\n return node\r\n }\r\n\r\n static formats(domNode) {\r\n return COL_ATTRIBUTES.reduce((formats, attribute) => {\r\n if (domNode.hasAttribute(`${attribute}`)) {\r\n formats[attribute] = domNode.getAttribute(`${attribute}`) || undefined\r\n }\r\n return formats\r\n }, {})\r\n }\r\n\r\n format(name, value) {\r\n if (COL_ATTRIBUTES.includes(name)) {\r\n this.domNode.setAttribute(`${name}`, value || COL_DEFAULT[name])\r\n }\r\n else {\r\n super.format(name, value)\r\n }\r\n }\r\n\r\n html() {\r\n return this.domNode.outerHTML\r\n }\r\n}\r\nTableCol.blotName = 'table-col'\r\nTableCol.tagName = 'col'\r\n\r\n// @dynamic\r\nclass TableColGroup extends Container {\r\n static requiredContainer: any\r\n static allowedChildren: any\r\n static blotName: string\r\n static tagName: string\r\n parent: any\r\n statics: any\r\n\r\n optimize(context) {\r\n super.optimize(context)\r\n // optimize 是当前slot更新后调用的callback方法,当TableBody更新后判断父容器的存在和类型相符则调用更新表格宽度方法更新宽度\r\n // 切记不要在当前slot内调用能改变当前slot的方法,会造成无限循环,一般通过子更新改变父较好\r\n if (this.parent && this.statics.requiredContainer && this.parent instanceof this.statics.requiredContainer) {\r\n this.parent.updateTableWidth()\r\n }\r\n // 此时colgroup创建完毕,检查colgroup的col数量是否正确\r\n // fix:colgroup的col数量不正确导致最后一列宽度为空\r\n if (this.parent.parent.domNode.className === 'quill-better-table-wrapper'\r\n && this.parent.parent.domNode.tagName === 'DIV'\r\n && this.parent.domNode.children.length >= 2\r\n && this.parent.domNode.children[0].tagName === 'COLGROUP'\r\n && this.parent.domNode.children[1].tagName === 'TBODY'\r\n ) {\r\n let trId = ''\r\n let colSpan = 0\r\n let colgroupNumber = 0\r\n for (let i = 0; i < this.parent.domNode.children.length; i++) {\r\n if (this.parent.domNode.children[i].tagName === 'TBODY') {\r\n if (trId === '') {\r\n trId = this.parent.domNode.children[i].children[0].getAttribute('data-row')\r\n }\r\n colSpan = this.findTdColspanInTbody(this.parent.domNode.children[i], trId)\r\n }\r\n else if (this.parent.domNode.children[i].tagName === 'COLGROUP') {\r\n colgroupNumber = this.parent.domNode.children[i].children.length\r\n }\r\n }\r\n let elementSibling = this.parent.domNode.nextElementSibling\r\n\r\n while (elementSibling && elementSibling.tagName === 'TABLE') {\r\n for (let i = 0; i < elementSibling.children.length; i++) {\r\n if (elementSibling.children[i].tagName === 'TBODY') {\r\n colSpan += this.findTdColspanInTbody(elementSibling.children[i], trId)\r\n }\r\n }\r\n elementSibling = elementSibling.nextElementSibling\r\n }\r\n\r\n if (colgroupNumber < colSpan) {\r\n const length = colSpan - colgroupNumber\r\n\r\n for (let i = 0; i < length; i++) {\r\n const newCol = document.createElement('col')\r\n newCol.width = this.parent.domNode.children[0].children[this.parent.domNode.children[0].children.length - 1].width\r\n const newBr = document.createElement('br')\r\n newCol.appendChild(newBr)\r\n this.parent.domNode.children[0].appendChild(newCol)\r\n this.parent.domNode.style.width += newCol.width\r\n }\r\n }\r\n }\r\n }\r\n\r\n // this.parent.domNode.children[1].children[0].children[0].colSpan\r\n findTdColspanInTbody(tbody, trId) {\r\n let colSpan = 0\r\n // let tbodyChildrenLength\r\n for (let i = 0; i < tbody.children.length; i++) {\r\n if (tbody.children[i].getAttribute('data-row') !== trId) {\r\n return colSpan\r\n }\r\n for (let j = 0; j < tbody.children[i].children.length; j++) {\r\n if (tbody.children[i].children[j].colSpan) {\r\n colSpan += tbody.children[i].children[j].colSpan\r\n }\r\n }\r\n }\r\n return colSpan\r\n }\r\n}\r\nTableColGroup.blotName = 'table-col-group'\r\nTableColGroup.tagName = 'colgroup'\r\n\r\n// @dynamic\r\nclass TableContainer extends Container {\r\n static blotName: string\r\n static className: string\r\n static tagName: string\r\n static requiredContainer: any\r\n static allowedChildren: any\r\n domNode: any\r\n parent: any\r\n children: any\r\n descendants: any\r\n scroll: any\r\n remove: any\r\n static create() {\r\n const node = super.create()\r\n return node\r\n }\r\n\r\n constructor(scroll, domNode) {\r\n super(scroll, domNode)\r\n domNode.setAttribute('contenteditable', false)\r\n this.updateTableWidth()\r\n }\r\n\r\n updateTableWidth() {\r\n let colGroup = this.colGroup()\r\n if (!colGroup) {\r\n // undo时原表格dom被移除,因此colGroup和domNode都不对应当前新表格,需从父容器dom树重新获取\r\n // 如果表格有style属性则不为新添加表格,避免错误赋值\r\n if (this.parent && this.parent.children.head && this.domNode.hasAttribute('style')) {\r\n colGroup = this.parent.children.head.children.head\r\n this.domNode = this.parent.children.head.domNode\r\n }\r\n else if (this.domNode.tagName === 'TABLE') {\r\n // this.domNode.forEach\r\n return\r\n }\r\n else {\r\n return\r\n }\r\n }\r\n const tableWidth = colGroup.children.reduce((sumWidth, col) => {\r\n // 兼容 table-col 不存在的情况\r\n const tableCol = col.formats()[TableCol.blotName]\r\n let tableColWidth = COL_DEFAULT.width\r\n if (tableCol && tableCol.width) {\r\n tableColWidth = Number.parseInt(tableCol.width, 10)\r\n }\r\n sumWidth = sumWidth + tableColWidth\r\n return sumWidth\r\n }, 0)\r\n this.domNode.removeAttribute('style')\r\n this.domNode.style.width = `${tableWidth}px`\r\n // 当表格加载结束后修正width设定为auto的列宽度\r\n if (colGroup.next) {\r\n setTimeout(() => {\r\n let tdIndex = 0\r\n let maxTds\r\n const colNum = colGroup.children.length\r\n const tableRows = this.descendants(TableRow)\r\n // 查询单元格数等于列数的行作为宽度赋值依据\r\n for (let i = 0; i < tableRows.length; i++) {\r\n const tds = tableRows[i].domNode.querySelectorAll('td')\r\n if (tds.length === colNum) {\r\n maxTds = tds\r\n break\r\n }\r\n }\r\n colGroup.children.forEach((col) => {\r\n if (maxTds && col.domNode.width === 'auto') {\r\n const width = getComputedStyle(maxTds[tdIndex]).width\r\n const num = Number.parseInt(width, 10)\r\n col.domNode.width = (num < COL_DEFAULT.width && COL_DEFAULT.width) || num\r\n }\r\n tdIndex++\r\n })\r\n })\r\n }\r\n }\r\n\r\n cells(column) {\r\n return this.rows().map(row => row.children.at(column))\r\n }\r\n\r\n colGroup() {\r\n return this.children.head\r\n }\r\n\r\n deleteColumns(compareRect, delIndexes = [], editorWrapper) {\r\n const [body] = this.descendants(TableBody)\r\n if (isNullOrUndefined(body) || isNullOrUndefined(body.children.head)) {\r\n return\r\n }\r\n\r\n const tableCells = this.descendants(TableCell)\r\n const removedCells = []\r\n const modifiedCells = []\r\n\r\n tableCells.forEach((cell) => {\r\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\r\n\r\n if (cellRect.x + ERROR_LIMIT > compareRect.x && cellRect.x1 - ERROR_LIMIT < compareRect.x1) {\r\n removedCells.push(cell)\r\n }\r\n else if (cellRect.x < compareRect.x + ERROR_LIMIT && cellRect.x1 > compareRect.x1 - ERROR_LIMIT) {\r\n modifiedCells.push(cell)\r\n }\r\n })\r\n\r\n if (removedCells.length === tableCells.length) {\r\n this.tableDestroy()\r\n return true\r\n }\r\n\r\n // remove the matches column tool cell\r\n delIndexes.forEach(() => {\r\n const col = this.colGroup().children.at(delIndexes[0])\r\n if (!col || this.colGroup().children.at(delIndexes[0]).domNode !== this.colGroup().domNode.children[delIndexes[0]]) {\r\n this.colGroup().domNode.removeChild(this.colGroup().domNode.children[delIndexes[0]])\r\n }\r\n else {\r\n col.remove()\r\n }\r\n })\r\n\r\n removedCells.forEach((cell) => {\r\n cell.remove()\r\n })\r\n\r\n modifiedCells.forEach((cell) => {\r\n const cellColspan = Number.parseInt(cell.formats().colspan, 10)\r\n // const cellWidth = parseInt(cell.formats().width, 10);\r\n cell.format('colspan', cellColspan - delIndexes.length)\r\n })\r\n\r\n this.updateTableWidth()\r\n }\r\n\r\n deleteRow(compareRect, editorWrapper) {\r\n const [body] = this.descendants(TableBody)\r\n if (isNullOrUndefined(body) || isNullOrUndefined(body.children.head)) {\r\n return\r\n }\r\n\r\n const tableCells = this.descendants(TableCell)\r\n const tableRows = this.descendants(TableRow)\r\n const removedCells = [] // cells to be removed\r\n const modifiedCells = [] // cells to be modified\r\n const fallCells = [] // cells to fall into next row\r\n\r\n tableCells.forEach((cell) => {\r\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\r\n\r\n if (cellRect.y > compareRect.y - ERROR_LIMIT && cellRect.y1 < compareRect.y1 + ERROR_LIMIT) {\r\n removedCells.push(cell)\r\n }\r\n else if (cellRect.y < compareRect.y + ERROR_LIMIT && cellRect.y1 > compareRect.y1 - ERROR_LIMIT) {\r\n modifiedCells.push(cell)\r\n\r\n if (Math.abs(cellRect.y - compareRect.y) < ERROR_LIMIT) {\r\n fallCells.push(cell)\r\n }\r\n }\r\n })\r\n\r\n if (removedCells.length === tableCells.length) {\r\n this.tableDestroy()\r\n return\r\n }\r\n\r\n // compute length of removed rows\r\n const removedRowsLength = this.rows().reduce((sum, row) => {\r\n const rowRect = getRelativeRect(row.domNode.getBoundingClientRect(), editorWrapper)\r\n\r\n if (rowRect.y > compareRect.y - ERROR_LIMIT && rowRect.y1 < compareRect.y1 + ERROR_LIMIT) {\r\n sum += 1\r\n }\r\n return sum\r\n }, 0)\r\n\r\n // it must execute before the table layout changed with other operation\r\n fallCells.forEach((cell) => {\r\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\r\n const nextRow = cell.parent.next\r\n const cellsInNextRow = nextRow.children\r\n\r\n const refCell = cellsInNextRow.reduce((ref, compareCell) => {\r\n const compareCellRect = getRelativeRect(compareCell.domNode.getBoundingClientRect(), editorWrapper)\r\n if (cellRect.x1 - compareCellRect.x < ERROR_LIMIT) {\r\n ref = compareCell\r\n }\r\n return ref\r\n }, null)\r\n\r\n nextRow.insertBefore(cell, refCell)\r\n const curRowId = nextRow.formats().row\r\n cell.format('row', curRowId)\r\n cell.children.forEach((cellLine) => {\r\n cellLine.format('row', curRowId)\r\n })\r\n })\r\n\r\n modifiedCells.forEach((cell) => {\r\n const cellRowspan = Number.parseInt(cell.formats().rowspan, 10)\r\n const curRowspan = cellRowspan - removedRowsLength\r\n cell.domNode.removeAttribute('style')\r\n cell.format('rowspan', curRowspan)\r\n cell.children.forEach((cellLine) => {\r\n cellLine.format('rowspan', curRowspan)\r\n })\r\n })\r\n\r\n removedCells.forEach((cell) => {\r\n cell.remove()\r\n })\r\n\r\n // fix: There will be a empty tr left if i delete the last row of a table,\r\n // this will cause the bottom border of the table to disappear,\r\n // and the empty tr will execute the matchTableRow method.\r\n tableRows.forEach((row) => {\r\n if (row.children.length === 0) {\r\n row.remove()\r\n }\r\n })\r\n }\r\n\r\n tableDestroy() {\r\n const quill = Quill.find(this.scroll.domNode.parentNode)\r\n const tableModule = quill.getModule('better-table')\r\n this.remove()\r\n tableModule.hideTableTools()\r\n quill.update(Quill.sources.USER)\r\n }\r\n\r\n insertCell(tableRow, ref, bg = '') {\r\n const id = cellId()\r\n const rId = tableRow.formats().row\r\n const tableCell = this.scroll.create(\r\n TableCell.blotName,\r\n { ...CELL_DEFAULT, row: rId },\r\n )\r\n tableCell.domNode.style.backgroundColor = bg\r\n const cellLine = this.scroll.create(TableCellLine.blotName, {\r\n row: rId,\r\n cell: id,\r\n })\r\n tableCell.appendChild(cellLine)\r\n\r\n if (ref) {\r\n tableRow.insertBefore(tableCell, ref)\r\n }\r\n else {\r\n tableRow.appendChild(tableCell)\r\n }\r\n }\r\n\r\n insertColumn(compareRect, colIndex, isRight = true, editorWrapper) {\r\n const [body] = this.descendants(TableBody)\r\n const [tableColGroup] = this.descendants(TableColGroup)\r\n const tableCols = this.descendants(TableCol)\r\n const addAsideCells = []\r\n const modifiedCells = []\r\n const affectedCells = []\r\n\r\n if (isNullOrUndefined(body) || isNullOrUndefined(body.children.head)) {\r\n return\r\n }\r\n const tableCells = this.descendants(TableCell)\r\n tableCells.forEach((cell) => {\r\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\r\n\r\n if (isRight) {\r\n if (Math.abs(cellRect.x1 - compareRect.x1) < ERROR_LIMIT) {\r\n // the right of selected boundary equal to the right of table cell,\r\n // add a new table cell right aside this table cell\r\n addAsideCells.push(cell)\r\n }\r\n else if (compareRect.x1 - cellRect.x > ERROR_LIMIT && compareRect.x1 - cellRect.x1 < -ERROR_LIMIT) {\r\n // the right of selected boundary is inside this table cell\r\n // colspan of this table cell will increase 1\r\n modifiedCells.push(cell)\r\n }\r\n }\r\n else {\r\n if (Math.abs(cellRect.x - compareRect.x) < ERROR_LIMIT) {\r\n // left of selected boundary equal to left of table cell,\r\n // add a new table cell left aside this table cell\r\n addAsideCells.push(cell)\r\n }\r\n else if (compareRect.x - cellRect.x > ERROR_LIMIT && compareRect.x - cellRect.x1 < -ERROR_LIMIT) {\r\n // the left of selected boundary is inside this table cell\r\n // colspan of this table cell will increase 1\r\n modifiedCells.push(cell)\r\n }\r\n }\r\n })\r\n\r\n addAsideCells.forEach((cell) => {\r\n const ref = isRight ? cell.next : cell\r\n const id = cellId()\r\n const tableRow = cell.parent\r\n const rId = tableRow.formats().row\r\n const cellFormats = cell.formats()\r\n const tableCell = this.scroll.create(\r\n TableCell.blotName,\r\n { ...CELL_DEFAULT, row: rId, rowspan: cellFormats.rowspan },\r\n )\r\n const cellLine = this.scroll.create(TableCellLine.blotName, {\r\n row: rId,\r\n cell: id,\r\n rowspan: cellFormats.rowspan,\r\n })\r\n tableCell.appendChild(cellLine)\r\n\r\n if (ref) {\r\n tableRow.insertBefore(tableCell, ref)\r\n }\r\n else {\r\n tableRow.appendChild(tableCell)\r\n }\r\n affectedCells.push(tableCell)\r\n })\r\n\r\n // insert new tableCol\r\n const tableCol = this.scroll.create(TableCol.blotName, true)\r\n let colRef\r\n if (isRight) {\r\n colRef = tableCols[colIndex] && tableCols[colIndex].next\r\n }\r\n else {\r\n colRef = tableCols[colIndex]\r\n }\r\n\r\n if (colRef) {\r\n tableColGroup.insertBefore(tableCol, colRef)\r\n }\r\n else {\r\n tableColGroup.appendChild(tableCol)\r\n }\r\n\r\n modifiedCells.forEach((cell) => {\r\n const cellColspan = cell.formats().colspan\r\n cell.format('colspan', Number.parseInt(cellColspan, 10) + 1)\r\n affectedCells.push(cell)\r\n })\r\n\r\n affectedCells.sort((cellA, cellB) => {\r\n const y1 = cellA.domNode.getBoundingClientRect().y\r\n const y2 = cellB.domNode.getBoundingClientRect().y\r\n return y1 - y2\r\n })\r\n\r\n this.updateTableWidth()\r\n return affectedCells\r\n }\r\n\r\n insertRow(compareRect, isDown, editorWrapper) {\r\n const [body] = this.descendants(TableBody)\r\n if (isNullOrUndefined(body) || isNullOrUndefined(body.children.head)) {\r\n return\r\n }\r\n\r\n const tableCells = this.descendants(TableCell)\r\n const rId = rowId()\r\n const newRow = this.scroll.create(TableRow.blotName, {\r\n row: rId,\r\n })\r\n const addBelowCells = []\r\n const modifiedCells = []\r\n const affectedCells = []\r\n\r\n tableCells.forEach((cell) => {\r\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\r\n\r\n if (isDown) {\r\n if (Math.abs(cellRect.y1 - compareRect.y1) < ERROR_LIMIT) {\r\n addBelowCells.push(cell)\r\n }\r\n else if (compareRect.y1 - cellRect.y > ERROR_LIMIT && compareRect.y1 - cellRect.y1 < -ERROR_LIMIT) {\r\n modifiedCells.push(cell)\r\n }\r\n }\r\n else {\r\n if (Math.abs(cellRect.y - compareRect.y) < ERROR_LIMIT) {\r\n addBelowCells.push(cell)\r\n }\r\n else if (compareRect.y - cellRect.y > ERROR_LIMIT && compareRect.y - cellRect.y1 < -ERROR_LIMIT) {\r\n modifiedCells.push(cell)\r\n }\r\n }\r\n })\r\n\r\n // ordered table cells with rect.x, fix error for inserting\r\n // new table cell in complicated table with wrong order.\r\n const sortFunc = (cellA, cellB) => {\r\n const x1 = cellA.domNode.getBoundingClientRect().x\r\n const x2 = cellB.domNode.getBoundingClientRect().x\r\n return x1 - x2\r\n }\r\n addBelowCells.sort(sortFunc)\r\n\r\n addBelowCells.forEach((cell) => {\r\n const cId = cellId()\r\n const cellFormats = cell.formats()\r\n\r\n const tableCell = this.scroll.create(\r\n TableCell.blotName,\r\n { ...CELL_DEFAULT, row: rId, cell: cId, colspan: cellFormats.colspan },\r\n )\r\n const cellLine = this.scroll.create(TableCellLine.blotName, {\r\n row: rId,\r\n cell: cId,\r\n colspan: cellFormats.colspan,\r\n })\r\n const empty = this.scroll.create(Break.blotName)\r\n cellLine.appendChild(empty)\r\n tableCell.appendChild(cellLine)\r\n newRow.appendChild(tableCell)\r\n affectedCells.push(tableCell)\r\n })\r\n\r\n modifiedCells.forEach((cell) => {\r\n const cellRowspan = Number.parseInt(cell.formats().rowspan, 10)\r\n cell.format('rowspan', cellRowspan + 1)\r\n affectedCells.push(cell)\r\n })\r\n\r\n const refRow = this.rows().find((row) => {\r\n const rowRect = getRelativeRect(row.domNode.getBoundingClientRect(), editorWrapper)\r\n if (isDown) {\r\n return Math.abs(rowRect.y - compareRect.y - compareRect.height) < ERROR_LIMIT\r\n }\r\n else {\r\n return Math.abs(rowRect.y - compareRect.y) < ERROR_LIMIT\r\n }\r\n })\r\n body.insertBefore(newRow, refRow)\r\n\r\n // reordering affectedCells\r\n affectedCells.sort(sortFunc)\r\n return affectedCells\r\n }\r\n\r\n mergeCells(_compareRect, mergingCells, rowspan, colspan, _editorWrapper) {\r\n const mergedCell = mergingCells.reduce((result, tableCell, index) => {\r\n if (index !== 0) {\r\n if (result) {\r\n tableCell.moveChildren(result)\r\n }\r\n tableCell.remove()\r\n }\r\n else {\r\n tableCell.format('colspan', colspan)\r\n tableCell.format('rowspan', rowspan)\r\n result = tableCell\r\n if (rowspan > 1) {\r\n // fix: 比较当前单元格高度样式与rowspan最小高度,小于则设置高度,不判断实际高度,因为合并时这一刻实际高度可能高于最小高度\r\n const minHeight = CELL_MIN_HEIGHT * rowspan + rowspan - 1\r\n const cellHeight = Number.parseInt(tableCell.domNode.style.height, 10) || 0\r\n if (cellHeight < minHeight) {\r\n tableCell.domNode.style.height = `${minHeight}px`\r\n }\r\n }\r\n }\r\n\r\n return result\r\n }, null)\r\n\r\n const rId = mergedCell.domNode.getAttribute('data-row')\r\n const cId = mergedCell.children.head.domNode.getAttribute('data-cell')\r\n mergedCell.children.forEach((cellLine) => {\r\n cellLine.domNode.setAttribute('data-parent-bg', mergedCell.domNode.style.backgroundColor)\r\n if (cellLine.children.head.domNode.style) {\r\n cellLine.children.head.domNode.style.backgroundColor = mergedCell.domNode.style.backgroundColor\r\n }\r\n\r\n if (!cellLine.prev || cellLine.domNode.textContent.trim()) {\r\n cellLine.format('cell', cId)\r\n cellLine.format('row', rId)\r\n cellLine.format('colspan', colspan)\r\n cellLine.format('rowspan', rowspan)\r\n }\r\n else {\r\n cellLine.remove()\r\n }\r\n })\r\n\r\n return mergedCell\r\n }\r\n\r\n unmergeCells(unmergingCells, editorWrapper) {\r\n let cellFormats: any = {}\r\n let cellRowspan = 1\r\n let cellColspan = 1\r\n\r\n unmergingCells.forEach((tableCell) => {\r\n const tableCellBgColor = tableCell.domNode.style.backgroundColor\r\n cellFormats = tableCell.formats()\r\n cellRowspan = cellFormats.rowspan\r\n cellColspan = cellFormats.colspan\r\n\r\n if (cellColspan > 1) {\r\n const ref = tableCell.next\r\n const row = tableCell.row()\r\n tableCell.format('colspan', 1)\r\n if (tableCell.domNode.children && tableCell.domNode.children[0].tagName === 'DIV' && tableCell.domNode.children[0].getAttribute('data-colspan')) {\r\n tableCell.domNode.children[0].setAttribute('data-colspan', 1)\r\n }\r\n for (let colspanIndex = cellColspan; colspanIndex > 1; colspanIndex--) {\r\n this.insertCell(row, ref, tableCellBgColor)\r\n }\r\n }\r\n\r\n if (cellRowspan > 1) {\r\n let rowspanIndex = cellRowspan\r\n let nextRow = tableCell.row().next\r\n while (rowspanIndex > 1) {\r\n const refInNextRow = nextRow.children.reduce((result, cell) => {\r\n const compareRect = getRelativeRect(tableCell.domNode.getBoundingClientRect(), editorWrapper)\r\n const cellRect = getRelativeRect(cell.domNode.getBoundingClientRect(), editorWrapper)\r\n if (Math.abs(compareRect.x1 - cellRect.x) < ERROR_LIMIT) {\r\n result = cell\r\n }\r\n return result\r\n }, null)\r\n\r\n for (let colspanIndex = cellColspan; colspanIndex > 0; colspanIndex--) {\r\n this.insertCell(nextRow, refInNextRow, tableCellBgColor)\r\n }\r\n\r\n rowspanIndex -= 1\r\n nextRow = nextRow.next\r\n }\r\n\r\n tableCell.domNode.removeAttribute('style')\r\n if (tableCell.domNode.children && tableCell.domNode.children[0].tagName === 'DIV' && tableCell.domNode.children[0].getAttribute('data-rowspan')) {\r\n tableCell.domNode.children[0].setAttribute('data-rowspan', 1)\r\n }\r\n tableCell.format('rowspan', 1)\r\n }\r\n })\r\n }\r\n\r\n emptyCells(selectedTds) {\r\n selectedTds.forEach((selectedTd) => {\r\n // 构造空的table cell line, 优先使用单元格已有rowId和cellId,避免从table-cell-line向上层td提交id时不一致导致错位\r\n const cellFormats = selectedTd.formats()\r\n const cellLine = this.scroll.create(TableCellLine.blotName, {\r\n row: cellFormats.row || rowId(),\r\n cell: cellFormats.cell || cellId(),\r\n rowspan: cellFormats.rowspan,\r\n colspan: cellFormats.colspan,\r\n })\r\n const empty = this.scroll.create(Break.blotName)\r\n cellLine.appendChild(empty)\r\n\r\n selectedTd.domNode.innerHTML = ''\r\n selectedTd.appendChild(cellLine)\r\n })\r\n }\r\n\r\n rows() {\r\n const body = this.children.tail\r\n if (isNullOrUndefined(body)) {\r\n return []\r\n }\r\n return body.children.map(row => row)\r\n }\r\n}\r\nTableContainer.blotName = 'ql-table-container'\r\nTableContainer.className = 'quill-better-table'\r\nTableContainer.tagName = 'TABLE'\r\n\r\n// @dynamic\r\nclass TableViewWrapper extends Container {\r\n static blotName: string\r\n static tagName: string\r\n static className: string\r\n static allowedChildren: any\r\n constructor(scroll, domNode) {\r\n super(scroll, domNode)\r\n const quill = Quill.find(scroll.domNode.parentNode)\r\n // fix: 只读模式时超长表格默认包含滚动条\r\n if (quill.options.readOnly) {\r\n domNode.style.overflow = 'auto'\r\n }\r\n domNode.addEventListener(\r\n 'scroll',\r\n (e) => {\r\n const tableModule = quill.getModule('better-table')\r\n if (tableModule.columnTool) {\r\n tableModule.columnTool.domNode.scrollLeft = e.target.scrollLeft\r\n }\r\n\r\n if (tableModule.tableSelection && tableModule.tableSelection.selectedTds.length > 0) {\r\n tableModule.tableSelection.repositionHelpLines()\r\n }\r\n },\r\n false,\r\n )\r\n }\r\n}\r\nTableViewWrapper.blotName = 'table-view'\r\nTableViewWrapper.className = 'quill-better-table-wrapper'\r\nTableViewWrapper.tagName = 'DIV'\r\n\r\nTableViewWrapper.allowedChildren = [TableContainer]\r\nTableContainer.requiredContainer = TableViewWrapper\r\n\r\nTableContainer.allowedChildren = [TableBody, TableColGroup]\r\nTableBody.requiredContainer = TableContainer\r\n\r\nTableBody.allowedChildren = [TableRow]\r\nTableRow.requiredContainer = TableBody\r\n\r\nTableRow.allowedChildren = [TableCell]\r\nTableCell.requiredContainer = TableRow\r\n\r\nTableCell.allowedChildren = [TableCellLine, Header, ListItem, ListContainer]\r\nTableCellLine.requiredContainer = TableCell\r\n\r\nTableColGroup.allowedChildren = [TableCol]\r\nTableColGroup.requiredContainer = TableContainer\r\n\r\nTableCol.requiredContainer = TableColGroup\r\n\r\nfunction rowId() {\r\n const id = Math.random().toString(36).slice(2, 6)\r\n return `row-${id}`\r\n}\r\n\r\nfunction cellId() {\r\n const id = Math.random().toString(36).slice(2, 6)\r\n return `cell-${id}`\r\n}\r\n\r\nfunction reduceFormats(domNode: HTMLElement, formats: Record<string, any>) {\r\n return [...CELL_ATTRIBUTES, ...CELL_IDENTITY_KEYS].reduce((tableFormats, attribute) => {\r\n if (domNode.hasAttribute(`data-${attribute}`)) {\r\n tableFormats[attribute] = domNode.getAttribute(`data-${attribute}`) || undefined\r\n }\r\n return tableFormats\r\n }, formats)\r\n}\r\n\r\nexport {\r\n CELL_ATTRIBUTES,\r\n CELL_IDENTITY_KEYS,\r\n cellId,\r\n rowId,\r\n TableBody,\r\n TableCell,\r\n TableCellLine,\r\n TableCol,\r\n TableColGroup,\r\n TableContainer,\r\n TableRow,\r\n TableViewWrapper,\r\n}\r\n"],"names":["formats"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"table-column-tool.es.js","sources":["../../../../src/table/modules/table-column-tool.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { CELL_MIN_HEIGHT, CELL_MIN_WIDTH, COL_TOOL_HEIGHT, PRIMARY_COLOR, ROW_TOOL_WIDTH } from '../table-config'\r\nimport { css } from '../utils'\r\n\r\nexport default class TableColumnTool {\r\n table: any\r\n quill: any\r\n modulesContainer: any\r\n domNode: any\r\n columnCtrlPanel: HTMLDivElement\r\n leftMask: HTMLDivElement\r\n rowCtrlPanel: HTMLDivElement\r\n activeToolCell: HTMLElement\r\n oldRootScrollTop: any\r\n constructor(table, quill, dom) {\r\n if (!table) {\r\n return null\r\n }\r\n this.table = table\r\n this.quill = quill\r\n this.modulesContainer = dom\r\n this.domNode = null\r\n this.oldRootScrollTop = this.quill.root.scrollTop\r\n\r\n this.initColTool()\r\n\r\n if (this.quill.root === this.quill.scrollingContainer) {\r\n this.quill.root.addEventListener('scroll', this.handleQuillRootScroll.bind(this))\r\n }\r\n }\r\n\r\n handleQuillRootScroll() {\r\n if (this.domNode) {\r\n this.domNode.style.marginTop = `${this.oldRootScrollTop - this.quill.root.scrollTop}px`\r\n }\r\n }\r\n\r\n initColTool() {\r\n const parent = this.quill.root.parentNode\r\n const containerRect = parent.getBoundingClientRect()\r\n const tableViewRect = this.table.parentNode.getBoundingClientRect()\r\n\r\n this.domNode = document.createElement('div')\r\n this.domNode.classList.add('qlbt-table-control-panel')\r\n\r\n // 以下添加顺序影响遮罩顺序,勿改变\r\n this.columnCtrlPanel = document.createElement('div')\r\n this.columnCtrlPanel.classList.add('qlbt-column-control-panel')\r\n this.domNode.appendChild(this.columnCtrlPanel)\r\n\r\n this.leftMask = document.createElement('div')\r\n this.leftMask.classList.add('qlbt-left-mask')\r\n css(this.leftMask, { height: `${tableViewRect.height + 50}px` })\r\n this.domNode.appendChild(this.leftMask)\r\n\r\n this.rowCtrlPanel = document.createElement('div')\r\n this.rowCtrlPanel.classList.add('qlbt-row-control-panel')\r\n this.domNode.appendChild(this.rowCtrlPanel)\r\n\r\n this.updateRowToolCells()\r\n this.updateColToolCells()\r\n\r\n this.modulesContainer.appendChild(this.domNode)\r\n css(this.domNode, {\r\n width: '100%',\r\n height: `${COL_TOOL_HEIGHT}px`,\r\n left: '0px',\r\n top: `${tableViewRect.top - containerRect.top + parent.scrollTop - 25}px`,\r\n })\r\n }\r\n\r\n createToolCell(isRow) {\r\n // @ts-ignore\r\n window.quillIsIntable = true\r\n const toolCell = document.createElement('div')\r\n const selector = document.createElement('div')\r\n const resizeHolder = document.createElement('div')\r\n if (isRow) {\r\n toolCell.classList.add('qlbt-row-tool-cell')\r\n selector.classList.add('qlbt-row-tool-cell-selector')\r\n resizeHolder.classList.add('qlbt-row-tool-cell-holder')\r\n css(toolCell, { width: `${ROW_TOOL_WIDTH}px` })\r\n }\r\n else {\r\n toolCell.classList.add('qlbt-col-tool-cell')\r\n selector.classList.add('qlbt-col-tool-cell-selector')\r\n resizeHolder.classList.add('qlbt-col-tool-cell-holder')\r\n css(toolCell, { height: `${COL_TOOL_HEIGHT}px` })\r\n }\r\n toolCell.appendChild(selector)\r\n toolCell.appendChild(resizeHolder)\r\n return toolCell\r\n }\r\n\r\n updateColToolCells() {\r\n const tableContainer = Quill.find(this.table)\r\n if (!tableContainer) {\r\n return\r\n }\r\n const tableCols = tableContainer.colGroup().children\r\n const tableColsNum = Math.max(Array.from(tableCols).length, tableContainer.colGroup().domNode.children.length)\r\n const existCells: any = Array.from(this.columnCtrlPanel.querySelectorAll('.qlbt-col-tool-cell'))\r\n const cellsNumber = Math.max(existCells.length, tableColsNum)\r\n\r\n for (let index = 0; index < cellsNumber; index++) {\r\n let col = tableCols.at(index)\r\n let colWidth = 0\r\n if (!col || col.domNode !== tableContainer.colGroup().domNode.children[index]) {\r\n col = tableContainer.colGroup().domNode.children[index]\r\n colWidth = col ? col.width : tableContainer.colGroup().domNode.children[index - 1].width\r\n }\r\n else {\r\n colWidth = Number.parseInt(col.formats()[col.statics.blotName].width, 10)\r\n }\r\n // if cell already exist\r\n let colToolCell = null\r\n if (!existCells[index]) {\r\n colToolCell = this.createToolCell(false)\r\n this.columnCtrlPanel.appendChild(colToolCell)\r\n this.addColCellSelectHandler(colToolCell)\r\n this.addColCellHolderHandler(colToolCell)\r\n // set tool cell min-width\r\n css(colToolCell, {\r\n 'min-width': `${colWidth}px`,\r\n })\r\n }\r\n else if (existCells[index] && index >= tableColsNum) {\r\n existCells[index].remove()\r\n }\r\n else {\r\n colToolCell = existCells[index]\r\n // set tool cell min-width\r\n css(colToolCell, {\r\n 'min-width': `${colWidth}px`,\r\n })\r\n }\r\n }\r\n }\r\n\r\n updateRowToolCells() {\r\n const tableContainer = Quill.find(this.table)\r\n if (!tableContainer) {\r\n return\r\n }\r\n let tableRows = Array.from(tableContainer.domNode.querySelectorAll('tr'))\r\n tableRows = tableRows.filter((tr: any) => tr.children.length)\r\n const existCells: any = Array.from(this.rowCtrlPanel.querySelectorAll('.qlbt-row-tool-cell'))\r\n const rowNumber = Math.max(existCells.length, tableRows.length)\r\n\r\n for (let index = 0; index < rowNumber; index++) {\r\n const row: any = tableRows[index]\r\n\r\n // fix: 修复 IE11/Edge 下无法拿到 height 的问题\r\n // IE11/Edge 下 height 会变成 'auto'\r\n let computedHeight = row && getComputedStyle(row).height\r\n if (computedHeight === 'auto') {\r\n computedHeight = row.querySelector('td').style.height || '30px'\r\n }\r\n\r\n let rowHeight = row && Number.parseFloat(computedHeight)\r\n if (rowHeight < CELL_MIN_HEIGHT) {\r\n const rowChildHeight = row && row.childNodes[0] && Number.parseFloat(getComputedStyle(row.childNodes[0]).height)\r\n rowHeight = rowChildHeight\r\n }\r\n // if cell already exist\r\n let rowToolCell = null\r\n if (!existCells[index]) {\r\n rowToolCell = this.createToolCell(true)\r\n this.rowCtrlPanel.appendChild(rowToolCell)\r\n this.addRowCellSelectHandler(rowToolCell)\r\n this.addRowCellHolderHandler(rowToolCell)\r\n // set tool cell height, ff not support min-height\r\n css(rowToolCell, { height: `${rowHeight}px` })\r\n }\r\n else if (existCells[index] && index >= tableRows.length) {\r\n existCells[index].remove()\r\n }\r\n else {\r\n rowToolCell = existCells[index]\r\n css(rowToolCell, { height: `${rowHeight}px` })\r\n }\r\n }\r\n }\r\n\r\n destroy() {\r\n // @ts-ignore\r\n window.quillIsIntable = false\r\n this.domNode.remove()\r\n return null\r\n }\r\n\r\n addRowCellSelectHandler(cell) {\r\n const selector = cell.querySelector('.qlbt-row-tool-cell-selector')\r\n\r\n const handleClick = (e) => {\r\n e.preventDefault()\r\n\r\n const dom = e.target.parentNode\r\n const domRect = dom.getBoundingClientRect()\r\n const containerRect = this.quill.root.parentNode.getBoundingClientRect()\r\n const tableRect = this.table.getBoundingClientRect()\r\n const tableSelection = this.quill.getModule('better-table').tableSelection\r\n tableSelection.boundary = {\r\n x: tableRect.left - containerRect.left, // 表格左上角X轴坐标\r\n x1: tableRect.left - containerRect.left + tableRect.width - 2, // 表格右上角X轴坐标\r\n y: domRect.top - containerRect.top, // 表格左上角Y轴坐标\r\n y1: domRect.top - containerRect.top + domRect.height - 1, // 表格右上角Y轴坐标\r\n width: tableRect.width - 2,\r\n height: domRect.height - 1,\r\n }\r\n tableSelection.selectedTds = tableSelection.computeSelectedTds()\r\n tableSelection.repositionHelpLines()\r\n\r\n dom.classList.add('qlbt-tool-cell-on')\r\n this.activeToolCell = dom\r\n }\r\n\r\n selector.addEventListener('click', handleClick, false)\r\n }\r\n\r\n addRowCellHolderHandler(cell) {\r\n const holder = cell.querySelector('.qlbt-row-tool-cell-holder')\r\n let dragging = false\r\n let y0 = 0\r\n let y = 0\r\n let delta = 0\r\n let height0 = 0\r\n // helpLine relation variable\r\n let tableRect: any = {}\r\n let cellRect: any = {}\r\n let helpLine = null\r\n\r\n const handleDrag = (e) => {\r\n e.preventDefault()\r\n\r\n if (dragging) {\r\n y = e.clientY\r\n\r\n if (height0 + y - y0 >= CELL_MIN_HEIGHT) {\r\n delta = y - y0\r\n }\r\n else {\r\n delta = CELL_MIN_HEIGHT - height0\r\n }\r\n\r\n css(helpLine, {\r\n top: `${cellRect.top + cellRect.height + delta}px`,\r\n })\r\n }\r\n }\r\n\r\n const handleMouseup = (e) => {\r\n e.preventDefault()\r\n\r\n const existCells = Array.from(this.domNode.querySelectorAll('.qlbt-row-tool-cell'))\r\n const rowIndex = existCells.indexOf(cell)\r\n const rows: any = Array.from(this.table.querySelectorAll('tr'))\r\n const tds = Array.from(rows[rowIndex].childNodes)\r\n const hasContentTd: any = tds.find((td: any) => td.getAttribute('rowspan') === '1' && td.textContent !== '\\n')\r\n\r\n if (dragging) {\r\n let tdHeight = `${height0 + delta}px`\r\n if (hasContentTd) {\r\n tds.forEach((td: any) => td.getAttribute('rowspan') === '1' && css(td, { height: tdHeight }))\r\n const currentHeight = getComputedStyle(hasContentTd).height\r\n tdHeight = (Number.parseInt(currentHeight, 10) > height0 + delta && currentHeight) || tdHeight\r\n }\r\n css(cell, { height: tdHeight })\r\n tds.forEach((td: any) => td.getAttribute('rowspan') === '1' && css(td, { height: tdHeight }))\r\n\r\n const tableViewRect = this.table.parentNode.getBoundingClientRect()\r\n css(this.leftMask, { height: `${tableViewRect.height + 50}px` })\r\n\r\n y0 = 0\r\n y = 0\r\n delta = 0\r\n height0 = 0\r\n dragging = false\r\n holder.classList.remove('dragging')\r\n }\r\n\r\n this.quill.root.parentNode.removeEventListener('mousemove', handleDrag, false)\r\n document.removeEventListener('mouseup', handleMouseup, false)\r\n tableRect = {}\r\n cellRect = {}\r\n helpLine.remove()\r\n helpLine = null\r\n\r\n const betterTableModule = this.quill.getModule('better-table')\r\n const tableScrollBar = betterTableModule.tableScrollBar\r\n tableScrollBar.resetTableHeight(this.table)\r\n\r\n // fix: 拖动滚动条时修正选区位置\r\n const tableSelection = betterTableModule.tableSelection\r\n if (tableSelection && tableSelection.selectedTds.length) {\r\n tableSelection.refreshHelpLinesPosition()\r\n }\r\n }\r\n\r\n const handleMousedown = (e) => {\r\n e.preventDefault()\r\n\r\n this.quill.root.parentNode.addEventListener('mousemove', handleDrag, false)\r\n document.addEventListener('mouseup', handleMouseup, false)\r\n\r\n tableRect = this.table.getBoundingClientRect()\r\n const tableViewRect = this.table.parentNode.getBoundingClientRect()\r\n const width = (tableRect.width > tableViewRect.width && tableViewRect.width) || tableRect.width\r\n cellRect = cell.getBoundingClientRect()\r\n helpLine = document.createElement('div')\r\n css(helpLine, {\r\n position: 'fixed',\r\n top: `${cellRect.top + cellRect.height}px`,\r\n left: `${cellRect.left}px`,\r\n zIndex: '100',\r\n width: `${width + ROW_TOOL_WIDTH + 9}px`,\r\n height: '1px',\r\n backgroundColor: PRIMARY_COLOR,\r\n })\r\n\r\n this.quill.root.parentNode.appendChild(helpLine)\r\n dragging = true\r\n y0 = e.clientY\r\n height0 = cellRect.height\r\n holder.classList.add('dragging')\r\n }\r\n\r\n holder.addEventListener('mousedown', handleMousedown, false)\r\n }\r\n\r\n addColCellSelectHandler(cell) {\r\n // 上方列宽控制条\r\n\r\n const selector = cell.querySelector('.qlbt-col-tool-cell-selector')\r\n\r\n const handleClick = (e) => {\r\n e.preventDefault()\r\n\r\n const dom = e.target.parentNode\r\n const domRect = dom.getBoundingClientRect()\r\n const containerRect = this.quill.root.parentNode.getBoundingClientRect()\r\n const tableRect = this.table.getBoundingClientRect()\r\n const tableSelection = this.quill.getModule('better-table').tableSelection\r\n tableSelection.boundary = {\r\n x: domRect.left - containerRect.left - 1,\r\n x1: domRect.left - containerRect.left + domRect.width - 2,\r\n y: tableRect.top - containerRect.top,\r\n y1: tableRect.top - containerRect.top + tableRect.height - 2,\r\n width: domRect.width,\r\n height: tableRect.height - 2,\r\n }\r\n tableSelection.selectedTds = tableSelection.computeSelectedTds()\r\n tableSelection.repositionHelpLines()\r\n\r\n dom.classList.add('qlbt-tool-cell-on')\r\n this.activeToolCell = dom\r\n }\r\n selector.addEventListener('click', handleClick, false)\r\n }\r\n\r\n addColCellHolderHandler(cell) {\r\n const tableContainer = Quill.find(this.table)\r\n const holder = cell.querySelector('.qlbt-col-tool-cell-holder')\r\n let dragging = false\r\n let x0 = 0\r\n let x = 0\r\n let delta: any = 0\r\n let width0 = 0\r\n // helpLine relation variable\r\n let tableRect: any = {}\r\n let scrollContainerRect = null\r\n let cellRect: any = {}\r\n let helpLine = null\r\n\r\n const handleDrag = (e) => {\r\n e.preventDefault()\r\n\r\n if (dragging) {\r\n x = e.clientX\r\n\r\n if (width0 + x - x0 >= CELL_MIN_WIDTH) {\r\n delta = x - x0\r\n }\r\n else {\r\n delta = CELL_MIN_WIDTH - width0\r\n }\r\n let left = cellRect.left + cellRect.width - 1 + delta\r\n if (scrollContainerRect) {\r\n left -= scrollContainerRect.left\r\n }\r\n\r\n css(helpLine, {\r\n left: `${left}px`,\r\n })\r\n }\r\n }\r\n\r\n const handleMouseup = (e) => {\r\n e.preventDefault()\r\n\r\n const existCells = Array.from(this.domNode.querySelectorAll('.qlbt-col-tool-cell'))\r\n const colIndex = existCells.indexOf(cell)\r\n let colBlot = tableContainer.colGroup().children.at(colIndex)\r\n if (!colBlot || colBlot.domNode !== tableContainer.colGroup().domNode.children[colIndex]) {\r\n colBlot = tableContainer.colGroup().domNode.children[colIndex]\r\n }\r\n if (dragging) {\r\n // fix: 防止 colWidth 是小数\r\n const colWidth = Number.parseInt(width0 + delta, 10)\r\n if (colBlot.format) {\r\n colBlot.format('width', colWidth)\r\n }\r\n else {\r\n colBlot.width = colWidth\r\n }\r\n\r\n css(cell, { 'min-width': `${colWidth}px` })\r\n\r\n x0 = 0\r\n x = 0\r\n delta = 0\r\n width0 = 0\r\n dragging = false\r\n holder.classList.remove('dragging')\r\n }\r\n\r\n this.quill.root.parentNode.removeEventListener('mousemove', handleDrag, false)\r\n document.removeEventListener('mouseup', handleMouseup, false)\r\n tableRect = {}\r\n scrollContainerRect = null\r\n cellRect = {}\r\n helpLine.remove()\r\n helpLine = null\r\n tableContainer.updateTableWidth()\r\n\r\n setTimeout(() => {\r\n this.updateRowToolCells()\r\n const betterTableModule = this.quill.getModule('better-table')\r\n const tableScrollBar = betterTableModule.tableScrollBar\r\n tableScrollBar.updateScrollBar()\r\n // fix: 拖动滚动条时修正选区位置\r\n const tableSelection = betterTableModule.tableSelection\r\n if (tableSelection && tableSelection.selectedTds.length) {\r\n tableSelection.refreshHelpLinesPosition()\r\n }\r\n })\r\n }\r\n\r\n const handleMousedown = (e) => {\r\n e.preventDefault()\r\n\r\n this.quill.root.parentNode.addEventListener('mousemove', handleDrag, false)\r\n document.addEventListener('mouseup', handleMouseup, false)\r\n\r\n tableRect = this.table.getBoundingClientRect()\r\n cellRect = cell.getBoundingClientRect()\r\n\r\n let positionValue = 'fixed'\r\n let top = cellRect.top\r\n let left = cellRect.left + cellRect.width - 1\r\n if (this.quill.root === this.quill.scrollingContainer) {\r\n positionValue = 'absolute'\r\n scrollContainerRect = this.quill.root.getBoundingClientRect()\r\n top -= scrollContainerRect.top\r\n left -= scrollContainerRect.left\r\n }\r\n\r\n helpLine = document.createElement('div')\r\n css(helpLine, {\r\n position: positionValue,\r\n top: `${top}px`,\r\n left: `${left}px`,\r\n zIndex: '100',\r\n height: `${tableRect.height + COL_TOOL_HEIGHT + 8}px`,\r\n width: '1px',\r\n backgroundColor: PRIMARY_COLOR,\r\n })\r\n\r\n this.quill.root.parentNode.appendChild(helpLine)\r\n dragging = true\r\n x0 = e.clientX\r\n width0 = cellRect.width\r\n holder.classList.add('dragging')\r\n }\r\n\r\n holder.addEventListener('mousedown', handleMousedown, false)\r\n }\r\n\r\n colToolCells() {\r\n return Array.from(this.domNode.querySelectorAll('.qlbt-col-tool-cell'))\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"table-operation-menu.es.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.getLangText('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.emitter.on(CHANGE_LANGUAGE_EVENT, () => {\r\n this.destroy()\r\n this.DEFAULT_COLOR_SUBTITLE = this.quill.getLangText('sub-title-bg-color')\r\n this.setDefaultMenu()\r\n })\r\n }\r\n\r\n setDefaultMenu() {\r\n this.DEFAULT_MENU = {\r\n copyCells: {\r\n text: this.quill.getLangText('copy-cells'),\r\n handler() {\r\n this.onCopy('copy')\r\n },\r\n },\r\n copyTable: {\r\n text: this.quill.getLangText('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: this.quill.getLangText('cut-cells'),\r\n handler() {\r\n this.onCopy('cut')\r\n },\r\n },\r\n emptyCells: {\r\n text: this.quill.getLangText('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: this.quill.getLangText('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: this.quill.getLangText('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: this.quill.getLangText('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: this.quill.getLangText('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: this.quill.getLangText('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: this.quill.getLangText('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: this.quill.getLangText('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: this.quill.getLangText('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: this.quill.getLangText('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":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"table-scroll-bar.es.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":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"table-selection.es.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":[],"mappings":";;;;AAKA,MAAqB,eAAe;AAAA,EAuBlC,YAAY,OAAO,OAAO,KAAK;AAC7B,QAAI,CAAC,OAAO;AACH,aAAA;AAAA,IAAA;AAET,SAAK,QAAQ;AACb,SAAK,QAAQ;AACb,SAAK,mBAAmB;AACnB,SAAA,SAAS,KAAK,MAAM,KAAK;AAC9B,SAAK,WAAW,CAAC;AACjB,SAAK,cAAc,CAAC;AACpB,SAAK,WAAW;AAChB,SAAK,mBAAmB;AACnB,SAAA,mBAAmB,KAAK,MAAM,KAAK;AAExC,SAAK,mBAAmB,KAAK,iBAAiB,KAAK,IAAI;AAEvD,SAAK,gBAAgB,KAAK,cAAc,KAAK,IAAI;AACjD,SAAK,kBAAkB,KAAK,SAAS,KAAK,IAAI;AAE9C,SAAK,iBAAiB;AACtB,SAAK,qBAAqB;AAE1B,SAAK,MAAM,KAAK,WAAW,iBAAiB,aAAa,KAAK,kBAAkB,KAAK;AACrF,SAAK,MAAM,GAAG,eAAe,KAAK,eAAe;AACjD,QAAI,KAAK,MAAM,SAAS,KAAK,MAAM,oBAAoB;AAChD,WAAA,MAAM,KAAK,iBAAiB,UAAU,KAAK,sBAAsB,KAAK,IAAI,CAAC;AAAA,IAAA;AAAA,EAClF;AAAA,EAGF,wBAAwB;AACP,mBAAA,QAAQ,CAAC,cAAc;AAC9B,YAAA,gBAAgB,KAAK,SAAS;AACpC,UAAI,eAAe;AACH,sBAAA,MAAM,YAAY,GAAG,KAAK,mBAAmB,KAAK,MAAM,KAAK,SAAS;AAAA,MAAA;AAAA,IACtF,CACD;AAAA,EAAA;AAAA,EAGH,uBAAuB;AACrB,QAAI,KAAK,MAAM,KAAK,eAAe,KAAK,MAAM,KAAK,cAAc;AAC/D,UAAI,KAAK,kBAAkB,EAAE,OAAO,qBAAqB;AAAA,IAAA,OAEtD;AACE,WAAA,iBAAiB,gBAAgB,OAAO;AAAA,IAAA;AAAA,EAC/C;AAAA,EAGF,mBAAmB;AACF,mBAAA,QAAQ,CAAC,cAAc;AACpC,WAAK,SAAS,IAAI,SAAS,cAAc,KAAK;AAC9C,WAAK,SAAS,EAAE,UAAU,IAAI,qBAAqB;AACnD,UAAI,cAAc,QAAQ;AACxB,aAAK,SAAS,EAAE,UAAU,IAAI,2BAA2B;AACnD,cAAA,gBAAgB,SAAS,cAAc,KAAK;AAC7C,aAAA,SAAS,EAAE,YAAY,aAAa;AAAA,MAAA;AAE3C,UAAI,cAAc,UAAU;AAC1B,aAAK,SAAS,EAAE,UAAU,IAAI,0BAA0B;AAClD,cAAA,iBAAiB,SAAS,cAAc,KAAK;AAC9C,aAAA,SAAS,EAAE,YAAY,cAAc;AAAA,MAAA;AAExC,UAAA,KAAK,SAAS,GAAG;AAAA,QACnB,YAAY;AAAA,QACZ,WAAW;AAAA,QACX,oBAAoB;AAAA,MAAA,CACrB;AACD,WAAK,iBAAiB,YAAY,KAAK,SAAS,CAAC;AAAA,IAAA,CAClD;AAAA,EAAA;AAAA,EAGH,iBAAiB,GAAG;AACd,QAAA,EAAE,WAAW,GAAG;AAClB;AAAA,IAAA;AAEF,UAAM,OAAY;AAClB,UAAM,oBAAoB,KAAK,MAAM,UAAU,cAAc;AAC7D,UAAM,kBAAkB,kBAAkB;AAC1C,QAAI,gBAAgB,gBAAgB;AAClB,sBAAA,eAAe,UAAU,OAAO,mBAAmB;AACnE,sBAAgB,iBAAiB;AAAA,IAAA;AAEnC,QAAI,EAAE,OAAO,QAAQ,qBAAqB,GAAG;AAC3C,UAAI,EAAE,UAAU;AACd,aAAK,QAAQ,EAAE,OAAO,QAAQ,cAAc;AACvC,aAAA,cAAc,MAAM,IAAI;AAEzB,YAAA,KAAK,YAAY,KAAK,OAAO;AAC/B,eAAK,MAAM,KAAK;AAAA,QAAA;AAAA,MAClB,OAEG;AACH,aAAK,UAAU,EAAE,OAAO,QAAQ,cAAc;AACzC,aAAA,cAAc,MAAM,KAAK;AAC9B,aAAK,WAAW;AAEhB,aAAK,OAAO,iBAAiB,aAAa,kBAAkB,KAAK;AACxD,iBAAA,iBAAiB,WAAW,gBAAgB,KAAK;AAAA,MAAA;AAAA,IAGrD,WAAA,EAAE,OAAO,QAAQ,sBAAsB,GAAG;AACjD,WAAK,OAAO,iBAAiB,aAAa,kBAAkB,KAAK;AACxD,eAAA,iBAAiB,WAAW,gBAAgB,KAAK;AAAA,IAAA;AAG5D,aAAS,iBAAiB,OAAO;AAC/B,YAAM,gBAAgB;AAElB,UAAA,MAAM,WAAW,KAAK,CAAC,MAAM,OAAO,QAAQ,qBAAqB,GAAG;AACtE;AAAA,MAAA;AAEF,WAAK,QAAQ,MAAM,OAAO,QAAQ,cAAc;AAC5C,UAAA,CAAC,KAAK,OAAO;AACf;AAAA,MAAA;AAEG,WAAA,cAAc,MAAM,IAAI;AAEzB,UAAA,KAAK,YAAY,KAAK,OAAO;AAC/B,aAAK,MAAM,KAAK;AAAA,MAAA;AAAA,IAClB;AAGF,aAAS,iBAAiB;AACxB,WAAK,OAAO,oBAAoB,aAAa,kBAAkB,KAAK;AAC3D,eAAA,oBAAoB,WAAW,gBAAgB,KAAK;AAC7D,WAAK,WAAW;AAAA,IAAA;AAAA,EAClB;AAAA,EAGF,cAAc,MAAM,KAAK;AAElB,SAAA,cAAc,gBAAgB,KAAK,QAAQ,sBAAyB,GAAA,KAAK,MAAM,KAAK,UAAU;AACnG,QAAI,YAAY,KAAK;AACrB,QAAI,KAAK;AACF,WAAA,YAAY,gBAAgB,KAAK,MAAM,sBAAyB,GAAA,KAAK,MAAM,KAAK,UAAU;AAC/F,kBAAY,KAAK;AAAA,IAAA;AAEnB,SAAK,WAAW,yBAAyB,KAAK,aAAa,SAAS;AAC/D,SAAA,cAAc,KAAK,mBAAmB;AAC3C,SAAK,oBAAoB;AAAA,EAAA;AAAA,EAG3B,cAAc,GAAG;AACX,QAAA,CAAC,KAAK,QAAQ;AAChB;AAAA,IAAA;AAEF,SAAK,OAAO,oBAAoB,YAAY,KAAK,eAAe,KAAK;AAC/D,UAAA,MAAM,KAAK,OAAO;AACxB,QAAI,oBAAoB,SAAS,KAAK,eAAe,KAAK;AACtD,QAAA,UAAU,IAAI,qBAAqB;AACnC,QAAA,aAAa,mBAAmB,IAAI;AACpC,QAAA,EAAE,SAAS,YAAY;AACzB,UAAI,IAAI,WAAW,SAAS,KAAK,IAAI,WAAW,cAAc,QAAQ;AAC9D,cAAA,QAAQ,IAAI,WAAW,UAAU;AACvC,cAAM,YAAY;AAClB,YAAI,YAAY;AAChB,YAAI,YAAY,KAAK;AAAA,MAAA;AAEvB,UAAI,MAAM;AAAA,IAAA;AAAA,EACZ;AAAA,EAGF,WAAW;AACL,QAAA,CAAC,KAAK,UAAW,KAAK,QAAQ,CAAC,KAAK,KAAK,cAAe;AAC1D;AAAA,IAAA;AAEE,QAAA,KAAK,YAAY,SAAS,GAAG;AAC/B,WAAK,yBAAyB;AAAA,IAAA,OAE3B;AACG,YAAA,MAAM,KAAK,OAAO;AAClB,YAAA,UAAU,gBAAgB,IAAI,yBAAyB,KAAK,MAAM,KAAK,UAAU;AAClF,WAAA,WAAW,yBAAyB,SAAS,OAAO;AACzD,WAAK,oBAAoB;AAAA,IAAA;AAI3B,SAAK,qBAAqB;AAG1B,UAAM,oBAAoB,KAAK,MAAM,UAAU,cAAc;AAC7D,UAAM,kBAAkB,kBAAkB;AAC1C,QAAI,iBAAiB;AACnB,sBAAgB,mBAAmB;AACnC,YAAM,gBAAgB,KAAK,MAAM,WAAW,sBAAsB;AAClE,UAAI,gBAAgB,UAAU;AACxB,YAAA,gBAAgB,UAAU,EAAE,QAAQ,GAAG,cAAc,SAAS,EAAE,MAAM;AAAA,MAAA;AAAA,IAC5E;AAGF,UAAM,iBAAiB,kBAAkB;AAC1B,mBAAA,iBAAiB,KAAK,KAAK;AAAA,EAAA;AAAA,EAG5C,QAAQ,GAAG;AACT,UAAM,MAAM,EAAE;AACV,QAAA,UAAU,OAAO,qBAAqB;AACtC,QAAA,aAAa,mBAAmB,KAAK;AACzC,QAAI,gBAAgB,iBAAiB;AAAA,EAAA;AAAA,EAGvC,kBAAkB;AAChB,UAAM,iBAAiB,MAAM,KAAK,KAAK,KAAK;AACtC,UAAA,aAAa,eAAe,YAAY,SAAS;AAE5C,eAAA,QAAQ,CAAC,cAAc;AAChC,YAAM,EAAE,GAAG,GAAG,OAAO,OAAW,IAAA,gBAAgB,UAAU,QAAQ,sBAAsB,GAAG,KAAK,MAAM,KAAK,UAAU;AACrH,YAAM,qBACA,IAAI,eAAe,KAAK,SAAS,KAAK,IAAI,eAAe,KAAK,SAAS,MACrE,IAAI,cAAc,SAAS,KAAK,SAAS,KAAK,IAAI,cAAc,SAAS,KAAK,SAAS,QACxF,IAAI,eAAe,KAAK,SAAS,KAAK,IAAI,eAAe,KAAK,SAAS,MACtE,IAAI,cAAc,UAAU,KAAK,SAAS,KAAK,IAAI,cAAc,UAAU,KAAK,SAAS;AACjG,UAAI,mBAAmB;AAChB,aAAA,WAAW,yBAAyB,KAAK,UAAU,EAAE,GAAG,GAAG,OAAO,QAAQ;AAAA,MAAA;AAAA,IACjF,CACD;AAAA,EAAA;AAAA,EAGH,qBAAqB;AACnB,UAAM,iBAAiB,MAAM,KAAK,KAAK,KAAK;AACtC,UAAA,aAAa,eAAe,YAAY,SAAS;AAEvD,UAAM,SAAS,WAAW,OAAO,CAAC,eAAe,cAAc;AAC7D,YAAM,EAAE,GAAG,GAAG,OAAO,OAAW,IAAA,gBAAgB,UAAU,QAAQ,sBAAsB,GAAG,KAAK,MAAM,KAAK,UAAU;AAC/G,YAAA,iBACF,IAAI,eAAe,KAAK,SAAS,KAChC,IAAI,cAAc,SAAS,KAAK,SAAS,MACzC,IAAI,eAAe,KAAK,SAAS,KACjC,IAAI,cAAc,UAAU,KAAK,SAAS;AAE/C,UAAI,gBAAgB;AAClB,sBAAc,KAAK,SAAS;AAAA,MAAA;AAGvB,aAAA;AAAA,IACT,GAAG,EAAE;AAEL,QAAI,OAAO,WAAW,KAAK,KAAK,WAAW,OAAO,CAAC,GAAG;AACpD,YAAM,WAAW,KAAK,MAAM,iBAAiB,0BAA0B;AAC9D,eAAA,QAAQ,QAAM,KAAK,QAAQ,EAAE,QAAQ,GAAA,CAAI,CAAC;AAC9C,WAAA,SAAS,OAAO,CAAC;AACtB,WAAK,OAAO,QAAQ,iBAAiB,aAAa,KAAK,eAAe,KAAK;AAC3E,WAAK,OAAO,iBAAiB,YAAY,KAAK,eAAe,KAAK;AAAA,IAAA;AAG7D,WAAA;AAAA,EAAA;AAAA,EAGT,sBAAsB;AACf,SAAA,mBAAmB,KAAK,MAAM,KAAK;AACpC,QAAA,CAAC,KAAK,MAAM;AACd;AAAA,IAAA;AAGF,QAAI,KAAK,MAAM;AAAA,MACb,WAAW;AAAA,MACX,QAAQ,GAAG,KAAK,SAAS,IAAI,CAAC;AAAA,MAC9B,OAAO,GAAG,KAAK,SAAS,CAAC;AAAA,MACzB,UAAU,GAAG,KAAK,SAAS,SAAS,CAAC;AAAA,MACrC,SAAS;AAAA,MACT,cAAc;AAAA,IAAA,CACf;AAED,QAAI,KAAK,OAAO;AAAA,MACd,WAAW;AAAA,MACX,QAAQ,GAAG,KAAK,SAAS,EAAE;AAAA,MAC3B,OAAO,GAAG,KAAK,SAAS,IAAI,CAAC;AAAA,MAC7B,UAAU,GAAG,KAAK,SAAS,SAAS,CAAC;AAAA,MACrC,SAAS;AAAA,MACT,cAAc;AAAA,IAAA,CACf;AAED,QAAI,KAAK,KAAK;AAAA,MACZ,WAAW;AAAA,MACX,QAAQ,GAAG,KAAK,SAAS,IAAI,CAAC;AAAA,MAC9B,OAAO,GAAG,KAAK,SAAS,IAAI,CAAC;AAAA,MAC7B,SAAS,GAAG,KAAK,SAAS,QAAQ,CAAC;AAAA,MACnC,UAAU;AAAA,MACV,cAAc;AAAA,IAAA,CACf;AAED,QAAI,KAAK,QAAQ;AAAA,MACf,WAAW;AAAA,MACX,QAAQ,GAAG,KAAK,SAAS,IAAI,CAAC;AAAA,MAC9B,OAAO,GAAG,KAAK,SAAS,EAAE;AAAA,MAC1B,SAAS,GAAG,KAAK,SAAS,QAAQ,CAAC;AAAA,MACnC,UAAU;AAAA,MACV,cAAc;AAAA,IAAA,CACf;AAAA,EAAA;AAAA;AAAA;AAAA,EAKH,2BAA2B;AACzB,UAAM,YAAY,gBAAgB,KAAK,YAAY,CAAC,EAAE,QAAQ,sBAAyB,GAAA,KAAK,MAAM,KAAK,UAAU;AACjH,UAAM,UAAU;AAAA,MACd,KAAK,YAAY,KAAK,YAAY,SAAS,CAAC,EAAE,QAAQ,sBAAsB;AAAA,MAC5E,KAAK,MAAM,KAAK;AAAA,IAClB;AACK,SAAA,WAAW,yBAAyB,WAAW,OAAO;AAC3D,SAAK,oBAAoB;AAAA,EAAA;AAAA,EAG3B,UAAU;AACR,UAAM,WAAW,KAAK,MAAM,iBAAiB,0BAA0B;AAC9D,aAAA,QAAQ,QAAM,KAAK,QAAQ,EAAE,QAAQ,GAAA,CAAI,CAAC;AAEpC,mBAAA,QAAQ,CAAC,cAAc;AAChC,UAAA,KAAK,SAAS,GAAG;AACd,aAAA,SAAS,EAAE,OAAO;AACvB,aAAK,SAAS,IAAI;AAAA,MAAA;AAAA,IACpB,CACD;AAED,SAAK,MAAM,KAAK,WAAW,oBAAoB,aAAa,KAAK,kBAAkB,KAAK;AAExF,WAAO,KAAK;AAEL,WAAA;AAAA,EAAA;AAAA,EAGT,aAAa,WAAW,SAAS;AAC/B,SAAK,WAAW;AAAA,MACd,gBAAgB,WAAW,KAAK,MAAM,KAAK,UAAU;AAAA,MACrD,gBAAgB,SAAS,KAAK,MAAM,KAAK,UAAU;AAAA,IACrD;AACA,SAAK,gBAAgB;AAChB,SAAA,cAAc,KAAK,mBAAmB;AAC3C,SAAK,oBAAoB;AAAA,EAAA;AAAA,EAG3B,iBAAiB;AACf,UAAM,WAAW,KAAK,MAAM,iBAAiB,0BAA0B;AAC9D,aAAA,QAAQ,QAAM,KAAK,QAAQ,EAAE,QAAQ,GAAA,CAAI,CAAC;AACnD,SAAK,WAAW,CAAC;AACjB,SAAK,cAAc,CAAC;AACL,mBAAA,QAAQ,CAAC,cAAc;AAChC,UAAA,KAAK,SAAS,GAAG;AACf,YAAA,KAAK,SAAS,GAAG;AAAA,UACnB,SAAS;AAAA,QAAA,CACV;AAAA,MAAA;AAAA,IACH,CACD;AAAA,EAAA;AAEL;AAEA,SAAS,yBAAyB,WAAW,SAAS;AACpD,QAAM,IAAI,KAAK,IAAI,UAAU,GAAG,QAAQ,GAAG,UAAU,IAAI,UAAU,QAAQ,GAAG,QAAQ,IAAI,QAAQ,QAAQ,CAAC;AAE3G,QAAM,KAAK,KAAK,IAAI,UAAU,GAAG,QAAQ,GAAG,UAAU,IAAI,UAAU,QAAQ,GAAG,QAAQ,IAAI,QAAQ,QAAQ,CAAC;AAE5G,QAAM,IAAI,KAAK,IAAI,UAAU,GAAG,QAAQ,GAAG,UAAU,IAAI,UAAU,SAAS,GAAG,QAAQ,IAAI,QAAQ,SAAS,CAAC;AAE7G,QAAM,KAAK,KAAK,IAAI,UAAU,GAAG,QAAQ,GAAG,UAAU,IAAI,UAAU,SAAS,GAAG,QAAQ,IAAI,QAAQ,SAAS,CAAC;AAE9G,QAAM,QAAQ,KAAK;AACnB,QAAM,SAAS,KAAK;AAEpB,SAAO,EAAE,GAAG,IAAI,GAAG,IAAI,OAAO,OAAO;AACvC;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"table-selector.es.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":["removeListeners"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"table-config.es.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 +0,0 @@
1
- {"version":3,"file":"index.es.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,QAAA;AAAA,MAClC;AAAA,IACF;AAAA,EACF;AAEJ;AAQgB,SAAA,gBAAgB,YAAY,WAAW;AAC/C,QAAA,gBAAgB,UAAU,sBAAsB;AAE/C,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,EACrB;AACF;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,IACF;AAAA,EAAA;AAGF,QAAM,SAAS,UAAU;AACzB,QAAM,WAAW,CAAC;AAElB,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,IAAA;AAAA,EAC5B;AAGK,SAAA;AACT;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"node-matchers.es.js","sources":["../../../../src/table/utils/node-matchers.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { omit, splitWithBreak } from '../../config/editor.utils'\r\nimport { cellId as tableCellId, rowId as tableRowId, TableViewWrapper } from '../formats/table'\r\nimport { CELL_MIN_WIDTH } from '../table-config'\r\n\r\nconst Delta = Quill.imports.delta\r\nconst InlineBlot = Quill.imports.parchment.InlineBlot\r\n\r\n// rebuild delta\r\nexport function matchTableCell(node, delta) {\r\n // fix: 移除旧数据中的pt高度,避免由于高度平均分导致无法插入行\r\n if (node.style.height.indexOf('pt')) {\r\n node.removeAttribute('style')\r\n }\r\n\r\n const row = node.parentNode\r\n let rowId = row.dataset.row\r\n if (!rowId) {\r\n rowId = row.dataset.row = tableRowId()\r\n }\r\n let cellId = node.dataset.cell\r\n // fix: dataset.cell in td will be 'undefined' when insert row/column\r\n if (!cellId || cellId === 'undefined') {\r\n cellId = tableCellId()\r\n }\r\n const colspan = node.getAttribute('colspan') || 1\r\n const rowspan = node.getAttribute('rowspan') || 1\r\n\r\n // fix: empty table cells copied from other place will be removed unexpectedly\r\n if (delta.length() === 0) {\r\n delta = new Delta().insert('\\n', {\r\n 'table-cell-line': { row: rowId, cell: cellId, rowspan, colspan },\r\n })\r\n return delta\r\n }\r\n\r\n delta = delta.reduce((newDelta, op) => {\r\n if (op.insert && typeof op.insert === 'string') {\r\n const lines = splitWithBreak(op.insert)\r\n\r\n lines.forEach((text) => {\r\n if (text === '\\n') {\r\n let attributes = {}\r\n const cellAttributes = {\r\n row: rowId,\r\n cell: cellId,\r\n rowspan,\r\n colspan,\r\n }\r\n if (op.attributes.table) {\r\n delete op.attributes.table\r\n }\r\n switch (true) {\r\n case !!op.attributes.header:\r\n attributes = Object.assign(op.attributes.header, cellAttributes)\r\n break\r\n case !!op.attributes.list:\r\n attributes = { list: Object.assign(op.attributes.list, cellAttributes) }\r\n break\r\n default:\r\n attributes = { 'table-cell-line': cellAttributes }\r\n }\r\n // fix: when td has background-color, quill can't set it to table-cell bolt\r\n if (op.attributes.background && attributes['table-cell-line']) {\r\n attributes['table-cell-line'].tdBgColor = op.attributes.background\r\n }\r\n newDelta.insert('\\n', Object.assign(op.attributes, attributes))\r\n }\r\n else {\r\n newDelta.insert(text, omit(op.attributes, ['table', 'table-cell-line', 'header', 'list']))\r\n }\r\n })\r\n }\r\n else {\r\n newDelta.insert(op.insert, op.attributes)\r\n }\r\n\r\n return newDelta\r\n }, new Delta())\r\n\r\n // fix: table cell height becomes larger(because insert unnecessary <div> on both sides of cell) when init table ngModel\r\n const regexp = /^[\\n]+$/\r\n const firstDelta = delta.ops[0]\r\n if (delta.ops.length >= 3) {\r\n const lastDelta = delta.ops[delta.ops.length - 1]\r\n if (regexp.test(firstDelta.insert) && firstDelta.attributes['table-cell-line']) {\r\n delta.ops.splice(0, 1)\r\n }\r\n if (regexp.test(lastDelta.insert) && lastDelta.attributes['table-cell-line']) {\r\n delta.ops[delta.ops.length - 1].insert = '\\n'\r\n }\r\n }\r\n else if (delta.ops.length === 1 && regexp.test(firstDelta.insert) && firstDelta.attributes['table-cell-line']) {\r\n delta.ops[0].insert = '\\n'\r\n }\r\n\r\n return delta\r\n}\r\n\r\n// replace th tag with td tag\r\nexport function matchTableHeader(node, delta, _scroll) {\r\n const row = node.parentNode\r\n const cells = Array.from(row.querySelectorAll('th'))\r\n let rowId = row.dataset.row\r\n if (!rowId) {\r\n rowId = row.dataset.row = tableRowId()\r\n }\r\n const cellId = cells.indexOf(node) + 1\r\n const colspan = node.getAttribute('colspan') || false\r\n const rowspan = node.getAttribute('rowspan') || false\r\n\r\n // fix: empty table cells copied from other place will be removed unexpectedly\r\n if (delta.length() === 0) {\r\n delta = new Delta().insert('\\n', {\r\n 'table-cell-line': { row: rowId, cell: cellId, rowspan, colspan },\r\n })\r\n return delta\r\n }\r\n\r\n delta = delta.reduce((newDelta, op) => {\r\n if (op.insert && typeof op.insert === 'string') {\r\n const lines = splitWithBreak(op.insert)\r\n\r\n // fix: no '\\n' in the end of op.insert, push a '\\n' to lines\r\n if (lines[lines.length - 1] !== '\\n') {\r\n lines.push('\\n')\r\n }\r\n\r\n lines.forEach((text) => {\r\n text === '\\n'\r\n ? newDelta.insert('\\n', { 'table-cell-line': { row: rowId, cell: cellId, rowspan, colspan } })\r\n : newDelta.insert(text, op.attributes)\r\n })\r\n }\r\n else {\r\n newDelta.insert(op.insert, op.attributes)\r\n }\r\n\r\n return newDelta\r\n }, new Delta())\r\n\r\n delta = delta.reduce((newDelta, op) => {\r\n if (op.insert && typeof op.insert === 'string' && op.insert.startsWith('\\n')) {\r\n newDelta.insert(op.insert, { 'table-cell-line': { row: rowId, cell: cellId, rowspan, colspan } })\r\n }\r\n else {\r\n newDelta.insert(op.insert, { ...omit(op.attributes, ['table', 'table-cell-line']) })\r\n }\r\n\r\n return newDelta\r\n }, new Delta())\r\n\r\n return delta\r\n}\r\n\r\n// supplement colgroup and col\r\nexport function matchTable(node, delta, scroll) {\r\n const isWordTable = node.children.length === 1\r\n if (!(node instanceof Element)) {\r\n return\r\n }\r\n const getMaxColNumber = (tds) => {\r\n if (isWordTable) {\r\n return tds.length\r\n }\r\n let colsNumber = 0\r\n tds.forEach((td) => {\r\n colsNumber += td.colSpan\r\n })\r\n return Math.max(tds.length, colsNumber)\r\n }\r\n\r\n const checkMinWidth = (width) => {\r\n if (Number.isNaN(width)) {\r\n // 无指定值时默认为auto,待渲染后修正\r\n return { 'table-col': { width: 'auto' } }\r\n }\r\n else if (width < CELL_MIN_WIDTH) {\r\n // 当列宽度小于默认宽度时取默认宽度\r\n return { 'table-col': true }\r\n }\r\n else {\r\n // 大于默认值取实际指定值\r\n return { 'table-col': { width } }\r\n }\r\n }\r\n\r\n // fix: a table with an empty tr is invalid, should not be displayed\r\n const rows = node.querySelectorAll('tr')\r\n const topRow = rows[0]\r\n const onlyEmptyTr = rows.length === 1 && !topRow.querySelector('td')\r\n\r\n // fix: empty table will return empty delta\r\n if (!topRow || onlyEmptyTr) {\r\n return new Delta().insert('\\n')\r\n }\r\n\r\n const colsNumber = node.querySelectorAll('col').length\r\n let maxCellsNumber = 0\r\n let maxCells\r\n // 遍历行获取最大列数和该行的所有单元格\r\n Array.prototype.slice.call(rows).forEach((row) => {\r\n const tds = row.querySelectorAll('td')\r\n maxCellsNumber = Math.max(getMaxColNumber(tds), maxCellsNumber)\r\n maxCells = tds\r\n })\r\n\r\n // 列的累计器\r\n let colCount = 0\r\n delta = delta.reduce((newDelta, op) => {\r\n // 当colCount与colsNumber相等时,则补充相差列\r\n if (colCount === colsNumber) {\r\n const fillNumber = maxCellsNumber - colCount\r\n const outset = colCount\r\n // index为差值列索引,通过遍历差值得到mexCells行中对应索引的单元格宽度\r\n for (let i = 0; i < fillNumber; i++) {\r\n const index = outset + i\r\n const colWidth = Number.parseInt(\r\n index < maxCells.length\r\n ? maxCells[index].width\r\n // maxCells[index].style && maxCells[index].style.width ? maxCells[index].style.width :\r\n : maxCells[maxCells.length - 1].width,\r\n 10,\r\n )\r\n newDelta.insert('\\n', checkMinWidth(colWidth))\r\n colCount++\r\n }\r\n }\r\n const attr = op.attributes || {}\r\n switch (true) {\r\n case !!attr['table-col']:\r\n // 只有当前列数小于实际总列数才操作,所以不存在大于的情况\r\n if (colCount < maxCellsNumber) {\r\n // 当table-col宽度一致时会合并为单一insert,insert长度大于1,截取符合实际总列数的长度来插入\r\n const insert = op.insert.slice(0, maxCellsNumber)\r\n const colWidth = Number.parseInt(attr['table-col'].width, 10)\r\n newDelta.insert(insert, checkMinWidth(colWidth))\r\n colCount += insert.length\r\n }\r\n break\r\n case !!attr.notFilled:\r\n { // 将标记的空tr填充对应列数的单元格\r\n const rowId = tableRowId()\r\n for (let x = 0; x < maxCellsNumber; x++) {\r\n newDelta.insert('\\n', { 'table-cell-line': { row: rowId, cell: tableCellId(), rowspan: 1, colspan: 1 } })\r\n }\r\n break }\r\n default:\r\n newDelta.insert(op.insert, op.attributes)\r\n }\r\n return newDelta\r\n }, new Delta())\r\n\r\n const tableItem = node.closest('.quill-better-table-wrapper') || node\r\n const prevBlot = tableItem.previousElementSibling && scroll.query(tableItem.previousElementSibling)\r\n const nextBlot = tableItem.nextElementSibling && scroll.query(tableItem.nextElementSibling)\r\n // fix: prevent two adjacent tables from sticking together\r\n if (!nextBlot || nextBlot.prototype instanceof InlineBlot) {\r\n delta = delta.insert('\\n')\r\n }\r\n // fix: When there is no line break in front of the table, pressing the Enter key will cause a problem with the table.\r\n if (!prevBlot || prevBlot.prototype instanceof InlineBlot) {\r\n const newLine = new Delta().insert('\\n')\r\n delta = newLine.concat(delta)\r\n }\r\n if (nextBlot === TableViewWrapper) {\r\n delta = delta.insert('\\n')\r\n }\r\n\r\n return delta\r\n}\r\n\r\nexport function matchTableRow(_node, delta) {\r\n // fix: 处理空<tr>标签被忽略的情况\r\n if (delta.ops.length === 1 && !delta.ops[0].attributes) {\r\n delta = new Delta().insert('\\n', { notFilled: true })\r\n }\r\n return delta\r\n}\r\n\r\n// match h tags, distinguish between headers in the table and headers outside the table\r\nexport function matchHeader(node, delta) {\r\n const newDelta = new Delta()\r\n const fontSize = node.style.fontSize\r\n delta.forEach((op) => {\r\n newDelta.insert(\r\n op.insert,\r\n Object.assign({}, op.attributes, {\r\n size: fontSize,\r\n }),\r\n )\r\n })\r\n return newDelta\r\n}\r\n\r\nexport function matchList(node, delta) {\r\n const value = node.tagName === 'UL' ? 'bullet' : 'ordered'\r\n delta.forEach((op) => {\r\n if (typeof op.attributes.list === 'string') {\r\n delete op.attributes.list\r\n }\r\n else if (typeof op.attributes.list === 'object' && !op.attributes.list.value) {\r\n op.attributes.list.value = value\r\n }\r\n })\r\n return delta\r\n}\r\n\r\nexport function matchInline(node, delta, scroll) {\r\n const quill = Quill.find(scroll.domNode.parentNode)\r\n const currentRange = quill.getSelection()\r\n const formats = currentRange && quill.getFormat(currentRange)\r\n if (\r\n formats\r\n && formats['table-cell-line'] // 当前光标节点在表格内,否则不操作delta\r\n && node.nextElementSibling\r\n ) {\r\n // 插入节点是否存在下一个兄弟元素\r\n const match = scroll.query(node)\r\n const nodeHtml = node.nextElementSibling.innerHTML\r\n const nodeText = node.nextElementSibling.textContent\r\n if (\r\n (match && match.prototype instanceof InlineBlot) // 判断当前节点是否为内联\r\n || (node.tagName === 'P' && nodeHtml !== nodeText)\r\n ) {\r\n // 非内联时如果为P且下一个不为text节点\r\n delta.forEach((op) => {\r\n op.insert += '\\n'\r\n })\r\n }\r\n }\r\n return delta\r\n}\r\n\r\n// 匹配 word 自带的 v:shape 标签中的图片 v:imageData\r\nexport function matchWordShapeImage(node, delta) {\r\n if (node) {\r\n const imageUrl = node.attributes.src?.nodeValue\r\n delta = new Delta().insert({ image: imageUrl })\r\n }\r\n return delta\r\n}\r\n\r\nexport function matchMentionLink(node, delta, scroll) {\r\n const name = node.dataset.mentionId\r\n if (name) {\r\n const quill = Quill.find(scroll.domNode.parentNode)\r\n const mention = quill.getModule('mention')\r\n if (mention) {\r\n mention.options.search(name).then((res) => {\r\n const [item] = res\r\n if (item) {\r\n mention.options.select(item)\r\n }\r\n })\r\n }\r\n }\r\n return delta\r\n}\r\n"],"names":["rowId","tableRowId","cellId","tableCellId","colsNumber"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"better-picker.es.js","sources":["../../../src/toolbar/better-picker.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { isNullOrUndefined } from '../config/editor.utils'\r\n\r\nconst SnowTheme = Quill.imports['themes/snow']\r\n\r\nlet optionsCounter = 0\r\n\r\nfunction toggleAriaAttribute(element, attribute) {\r\n element.setAttribute(\r\n attribute,\r\n element.getAttribute(attribute) !== 'true',\r\n )\r\n}\r\n\r\nclass Picker {\r\n container: any\r\n label: any\r\n options: any\r\n select: any\r\n constructor(select) {\r\n this.select = select\r\n this.container = document.createElement('span')\r\n this.buildPicker()\r\n this.select.style.display = 'none'\r\n this.select.parentNode.insertBefore(this.container, this.select)\r\n\r\n this.label.addEventListener('mousedown', (e) => {\r\n this.togglePicker()\r\n e.preventDefault()\r\n })\r\n this.label.addEventListener('keydown', (event) => {\r\n switch (event.key) {\r\n case 'Enter':\r\n this.togglePicker()\r\n break\r\n case 'Escape':\r\n this.escape()\r\n event.preventDefault()\r\n break\r\n default:\r\n }\r\n })\r\n this.select.addEventListener('change', this.update.bind(this))\r\n }\r\n\r\n togglePicker() {\r\n this.container.classList.toggle('ql-expanded')\r\n // Toggle aria-expanded and aria-hidden to make the picker accessible\r\n toggleAriaAttribute(this.label, 'aria-expanded')\r\n toggleAriaAttribute(this.options, 'aria-hidden')\r\n }\r\n\r\n buildItem(option) {\r\n const item = document.createElement('span')\r\n item.tabIndex = 0\r\n item.setAttribute('role', 'button')\r\n item.classList.add('ql-picker-item')\r\n if (option.hasAttribute('value')) {\r\n item.setAttribute('data-value', option.getAttribute('value'))\r\n }\r\n if (option.textContent) {\r\n item.setAttribute('data-label', option.textContent)\r\n }\r\n item.addEventListener('click', () => {\r\n this.selectItem(item, true)\r\n })\r\n item.addEventListener('keydown', (event) => {\r\n switch (event.key) {\r\n case 'Enter':\r\n this.selectItem(item, true)\r\n event.preventDefault()\r\n break\r\n case 'Escape':\r\n this.escape()\r\n event.preventDefault()\r\n break\r\n default:\r\n }\r\n })\r\n\r\n return item\r\n }\r\n\r\n buildLabel() {\r\n const label = document.createElement('span')\r\n label.classList.add('ql-picker-label')\r\n label.innerHTML = `\r\n <svg viewbox=\"0 0 18 18\">\r\n <polygon class=\"ql-stroke\" points=\"7 11 9 13 11 11 7 11\"></polygon>\r\n <polygon class=\"ql-stroke\" points=\"7 7 9 5 11 7 7 7\"></polygon>\r\n </svg>\r\n `\r\n label.tabIndex = 0\r\n label.setAttribute('role', 'button')\r\n label.setAttribute('aria-expanded', 'false')\r\n this.container.appendChild(label)\r\n return label\r\n }\r\n\r\n buildOptions() {\r\n const options = document.createElement('span')\r\n options.classList.add('ql-picker-options')\r\n\r\n // Don't want screen readers to read this until options are visible\r\n options.setAttribute('aria-hidden', 'true')\r\n options.tabIndex = -1\r\n\r\n // Need a unique id for aria-controls\r\n options.id = `ql-picker-options-${optionsCounter}`\r\n optionsCounter += 1\r\n this.label.setAttribute('aria-controls', options.id)\r\n\r\n this.options = options\r\n\r\n Array.from(this.select.options).forEach((option: any) => {\r\n const item = this.buildItem(option)\r\n options.appendChild(item)\r\n if (option.selected === true) {\r\n this.selectItem(item)\r\n }\r\n })\r\n this.container.appendChild(options)\r\n }\r\n\r\n buildPicker() {\r\n Array.from(this.select.attributes).forEach((item: any) => {\r\n this.container.setAttribute(item.name, item.value)\r\n })\r\n this.container.classList.add('ql-picker')\r\n this.label = this.buildLabel()\r\n this.buildOptions()\r\n }\r\n\r\n escape() {\r\n // Close menu and return focus to trigger label\r\n this.close()\r\n // Need setTimeout for accessibility to ensure that the browser executes\r\n // focus on the next process thread and after any DOM content changes\r\n setTimeout(() => this.label.focus(), 1)\r\n }\r\n\r\n close() {\r\n this.container.classList.remove('ql-expanded')\r\n this.label.setAttribute('aria-expanded', 'false')\r\n this.options.setAttribute('aria-hidden', 'true')\r\n }\r\n\r\n selectItem(item, trigger = false) {\r\n const selected = this.container.querySelector('.ql-selected')\r\n if (item === selected) return\r\n if (!isNullOrUndefined(selected)) {\r\n selected.classList.remove('ql-selected')\r\n }\r\n if (isNullOrUndefined(item)) return\r\n item.classList.add('ql-selected')\r\n this.select.selectedIndex = Array.from(item.parentNode.children).indexOf(\r\n item,\r\n )\r\n if (item.hasAttribute('data-value')) {\r\n this.label.setAttribute('data-value', item.getAttribute('data-value'))\r\n }\r\n else {\r\n this.label.removeAttribute('data-value')\r\n }\r\n if (item.hasAttribute('data-label')) {\r\n this.label.setAttribute('data-label', item.getAttribute('data-label'))\r\n }\r\n else {\r\n this.label.removeAttribute('data-label')\r\n }\r\n if (trigger) {\r\n let ev\r\n if (typeof Event === 'function') {\r\n ev = new Event('change')\r\n }\r\n else {\r\n ev = document.createEvent('Event')\r\n ev.initEvent('change', true, true)\r\n }\r\n this.select.dispatchEvent(ev)\r\n this.close()\r\n }\r\n }\r\n\r\n update() {\r\n let option\r\n if (this.select.selectedIndex > -1) {\r\n const item = this.container.querySelector('.ql-picker-options').children[\r\n this.select.selectedIndex\r\n ]\r\n option = this.select.options[this.select.selectedIndex]\r\n this.selectItem(item)\r\n }\r\n else {\r\n this.selectItem(null)\r\n }\r\n const isActive\r\n = !isNullOrUndefined(option)\r\n && option !== this.select.querySelector('option[selected]')\r\n\r\n if (isActive) {\r\n this.label.classList.add('ql-active')\r\n }\r\n else {\r\n this.label.classList.remove('ql-active')\r\n }\r\n }\r\n}\r\n\r\nclass IconPicker extends Picker {\r\n defaultItem: any\r\n constructor(select, icons) {\r\n super(select)\r\n this.container.classList.add('ql-icon-picker')\r\n Array.from(this.container.querySelectorAll('.ql-picker-item')).forEach(\r\n (item: any) => {\r\n item.innerHTML = icons[item.getAttribute('data-value') || '']\r\n },\r\n )\r\n this.defaultItem = this.container.querySelector('.ql-selected')\r\n this.selectItem(this.defaultItem, null)\r\n }\r\n\r\n selectItem(target, trigger) {\r\n super.selectItem(target, trigger)\r\n const item = target || this.defaultItem\r\n if (this.label.innerHTML === item.innerHTML) return\r\n this.label.innerHTML = item.innerHTML\r\n }\r\n}\r\n\r\nclass ColorPicker extends Picker {\r\n constructor(select, label) {\r\n super(select)\r\n this.label.innerHTML = label\r\n this.container.classList.add('ql-color-picker')\r\n Array.from(this.container.querySelectorAll('.ql-picker-item'))\r\n .slice(0, 7)\r\n .forEach((item: any) => {\r\n item.classList.add('ql-primary')\r\n })\r\n }\r\n\r\n buildItem(option) {\r\n const item = super.buildItem(option)\r\n item.style.backgroundColor = option.getAttribute('value') || ''\r\n return item\r\n }\r\n\r\n selectItem(item, trigger) {\r\n super.selectItem(item, trigger)\r\n const colorLabel = this.label.querySelector('.ql-color-label')\r\n const value = item ? item.getAttribute('data-value') || '' : ''\r\n if (colorLabel) {\r\n if (colorLabel.tagName === 'line') {\r\n colorLabel.style.stroke = value\r\n }\r\n else {\r\n colorLabel.style.fill = value\r\n }\r\n }\r\n }\r\n}\r\n\r\nQuill.register('ui/picker', Picker, true)\r\nQuill.register('ui/icon-picker', IconPicker, true)\r\nQuill.register('ui/color-picker', ColorPicker, true)\r\n\r\nconst ALIGNS = [false, 'center', 'right']\r\n\r\nconst COLORS = [\r\n '#000000',\r\n '#e60000',\r\n '#ff9900',\r\n '#ffff00',\r\n '#008a00',\r\n '#0066cc',\r\n '#9933ff',\r\n '#ffffff',\r\n '#facccc',\r\n '#ffebcc',\r\n '#ffffcc',\r\n '#cce8cc',\r\n '#cce0f5',\r\n '#ebd6ff',\r\n '#bbbbbb',\r\n '#f06666',\r\n '#ffc266',\r\n '#ffff66',\r\n '#66b966',\r\n '#66a3e0',\r\n '#c285ff',\r\n '#888888',\r\n '#a10000',\r\n '#b26b00',\r\n '#b2b200',\r\n '#006100',\r\n '#0047b2',\r\n '#6b24b2',\r\n '#444444',\r\n '#5c0000',\r\n '#663d00',\r\n '#666600',\r\n '#003700',\r\n '#002966',\r\n '#3d1466',\r\n]\r\n\r\nconst FONTS = [false, 'serif', 'monospace']\r\n\r\nconst HEADERS = ['1', '2', '3', false]\r\n\r\nconst SIZES = ['small', false, 'large', 'huge']\r\n\r\nSnowTheme.prototype.buildPickers = function (selects, icons) {\r\n this.pickers = Array.from(selects).map((select: any) => {\r\n if (select.classList.contains('ql-align')) {\r\n if (isNullOrUndefined(select.querySelector('option'))) {\r\n fillSelect(select, ALIGNS)\r\n }\r\n return new IconPicker(select, icons.align)\r\n }\r\n if (\r\n select.classList.contains('ql-background')\r\n || select.classList.contains('ql-color')\r\n ) {\r\n const format = select.classList.contains('ql-background')\r\n ? 'background'\r\n : 'color'\r\n if (isNullOrUndefined(select.querySelector('option'))) {\r\n fillSelect(\r\n select,\r\n COLORS,\r\n )\r\n }\r\n return new ColorPicker(select, icons[format])\r\n }\r\n if (isNullOrUndefined(select.querySelector('option'))) {\r\n if (select.classList.contains('ql-font')) {\r\n fillSelect(select, FONTS)\r\n }\r\n else if (select.classList.contains('ql-header')) {\r\n fillSelect(select, HEADERS)\r\n }\r\n else if (select.classList.contains('ql-size')) {\r\n fillSelect(select, SIZES)\r\n }\r\n }\r\n return new Picker(select)\r\n })\r\n const update = () => {\r\n this.pickers.forEach((picker) => {\r\n picker.update()\r\n })\r\n }\r\n this.quill.on(Quill.events.EDITOR_CHANGE, update)\r\n}\r\n\r\nfunction fillSelect(select, values, defaultValue = false) {\r\n values.forEach((value) => {\r\n const option = document.createElement('option')\r\n if (value === defaultValue) {\r\n option.setAttribute('selected', 'selected')\r\n }\r\n else {\r\n option.setAttribute('value', value)\r\n }\r\n select.appendChild(option)\r\n })\r\n}\r\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.es.js","sources":["../../../src/toolbar/index.ts"],"sourcesContent":["import type TypeToolbar from 'quill/modules/toolbar'\r\nimport Quill from 'quill'\r\nimport { isNullOrUndefined } from '../config/editor.utils'\r\nimport './better-picker'\r\n\r\nconst Delta = Quill.import('delta')\r\nconst Parchment = Quill.import('parchment')\r\nconst levels = ['error', 'warn', 'log', 'info'] as const\r\nlet level = 'warn' as const\r\n\r\nfunction debuglogger(method: typeof levels[number], ...args) {\r\n if (levels.indexOf(method) <= levels.indexOf(level)) {\r\n console[method](...args) // eslint-disable-line no-console\r\n }\r\n}\r\n\r\nfunction namespace(ns) {\r\n return levels.reduce((logger, method) => {\r\n logger[method] = debuglogger.bind(console, method, ns)\r\n return logger\r\n }, {} as Record<typeof levels[number], (...args: any) => void>)\r\n}\r\n\r\nnamespace.level = (newLevel) => {\r\n level = newLevel\r\n}\r\ndebuglogger.level = namespace.level\r\nconst debug = namespace('quill:toolbar')\r\n\r\nconst Toolbar = Quill.import('modules/toolbar') as typeof TypeToolbar\r\n// let oldClean = Toolbar.DEFAULTS.handlers.clean\r\n\r\nclass BetterToolbar extends Toolbar {\r\n update(range) {\r\n const formats = isNullOrUndefined(range) ? {} : this.quill.getFormat(range) as Record<string, any>\r\n this.controls.forEach((pair) => {\r\n const [format, input] = pair\r\n if (input.tagName === 'SELECT') {\r\n const select = input as HTMLSelectElement\r\n let option\r\n if (isNullOrUndefined(range)) {\r\n option = null\r\n }\r\n else if (isNullOrUndefined(formats[format])) {\r\n option = select.querySelector('option[selected]')\r\n }\r\n else if (!Array.isArray(formats[format])) {\r\n let value = format === 'header' ? formats[format].value : formats[format]\r\n if (typeof value === 'string') {\r\n value = value.replace(/\"/g, '\\\\\"')\r\n }\r\n option = select.querySelector(`option[value=\"${value}\"]`)\r\n }\r\n if (isNullOrUndefined(option)) {\r\n select.value = '' // TODO make configurable?\r\n select.selectedIndex = -1\r\n }\r\n else {\r\n option.selected = true\r\n }\r\n }\r\n else if (isNullOrUndefined(range)) {\r\n input.classList.remove('ql-active')\r\n }\r\n else if (input.hasAttribute('value')) {\r\n // both being null should match (default values)\r\n // '1' should match with 1 (headers)\r\n let isActive\r\n = formats[format] === input.getAttribute('value')\r\n || (!isNullOrUndefined(formats[format])\r\n && (formats[format].value === input.getAttribute('value')\r\n || formats[format].toString() === input.getAttribute('value')))\r\n || (isNullOrUndefined(formats[format]) && !input.getAttribute('value'))\r\n\r\n if (!isActive) {\r\n const checkFormat = formats[format]\r\n if (checkFormat === 'checked' || checkFormat === 'unchecked') {\r\n isActive = input.getAttribute('value') === 'check'\r\n }\r\n }\r\n\r\n if (isActive) {\r\n input.classList.add('ql-active')\r\n }\r\n else {\r\n input.classList.remove('ql-active')\r\n }\r\n }\r\n else {\r\n if (!isNullOrUndefined(formats[format])) {\r\n input.classList.add('ql-active')\r\n }\r\n else {\r\n input.classList.remove('ql-active')\r\n }\r\n }\r\n })\r\n }\r\n\r\n attach(input: HTMLElement) {\r\n let format = Array.from(input.classList).find((className) => {\r\n return className.indexOf('ql-') === 0\r\n })\r\n if (!format) return\r\n format = format.slice('ql-'.length)\r\n\r\n if (input.tagName === 'BUTTON') {\r\n input.setAttribute('type', 'button')\r\n }\r\n\r\n if (this.handlers[format] == null && this.quill.scroll.query(format) == null) {\r\n debug.warn('ignoring attaching to nonexistent format', format, input)\r\n return\r\n }\r\n\r\n const eventName = input.tagName === 'SELECT' ? 'change' : 'click'\r\n input.addEventListener(eventName, (e) => {\r\n let value: boolean | string\r\n\r\n if (input.tagName === 'SELECT') {\r\n const select = input as HTMLSelectElement\r\n if (select.selectedIndex < 0) return\r\n const selected = select.options[select.selectedIndex]\r\n\r\n if (selected.hasAttribute('selected')) {\r\n value = false\r\n }\r\n else {\r\n value = selected.value || false\r\n }\r\n }\r\n else {\r\n const button = input as HTMLButtonElement\r\n if (button.classList.contains('ql-active')) {\r\n value = false\r\n }\r\n else {\r\n value = button.value || !button.hasAttribute('value')\r\n }\r\n e.preventDefault()\r\n }\r\n\r\n this.quill.focus({ preventScroll: format === 'screenshot' })\r\n const [range] = this.quill.selection.getRange()\r\n if (this.handlers[format] != null) {\r\n // @ts-ignore\r\n if (!isNullOrUndefined(window.quillIsIntable) && window.quillIsIntable === true && (format === 'blockquote' || format === 'code-block' || format === 'list' || format === 'indent' || format === 'clean')) {\r\n return\r\n }\r\n this.handlers[format].call(this, value)\r\n }\r\n else if (\r\n // @ts-ignore\r\n this.quill.scroll.query(format).prototype instanceof Parchment.EmbedBlot\r\n ) {\r\n value = prompt(`Enter ${format}`)\r\n if (!value) return\r\n this.quill.updateContents(\r\n new Delta()\r\n .retain(range.index)\r\n .delete(range.length)\r\n .insert({ [format]: value }),\r\n Quill.sources.USER,\r\n )\r\n }\r\n else {\r\n // @ts-ignore\r\n if (!isNullOrUndefined(window.quillIsIntable) && window.quillIsIntable === true && (format === 'blockquote' || format === 'code-block' || format === 'list' || format === 'indent' || format === 'clean')) {\r\n return\r\n }\r\n this.quill.format(format, value, Quill.sources.USER)\r\n }\r\n\r\n this.update(range)\r\n })\r\n this.controls.push([format, input])\r\n }\r\n}\r\n\r\nexport default BetterToolbar\r\nexport * from './toolbar-tip'\r\n"],"names":[],"mappings":"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"}