@opentiny/fluent-editor 3.20.2 → 3.20.3

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 (530) hide show
  1. package/package.json +3 -3
  2. package/dist/package.json +0 -52
  3. package/scripts/pre-release.js +0 -34
  4. package/src/assets/better-table.scss +0 -367
  5. package/src/assets/common.scss +0 -279
  6. package/src/assets/counter.scss +0 -19
  7. package/src/assets/custom-image.scss +0 -20
  8. package/src/assets/editor.scss +0 -365
  9. package/src/assets/emoji/emoji.scss +0 -461
  10. package/src/assets/emoji/style.scss +0 -252
  11. package/src/assets/fileBar.scss +0 -116
  12. package/src/assets/font.scss +0 -36
  13. package/src/assets/fullscreen.scss +0 -21
  14. package/src/assets/iconfont/iconfont.ttf +0 -0
  15. package/src/assets/iconfont/iconfont.woff +0 -0
  16. package/src/assets/iconfont/iconfont.woff2 +0 -0
  17. package/src/assets/image1.png +0 -0
  18. package/src/assets/lineHeight.scss +0 -16
  19. package/src/assets/link.scss +0 -130
  20. package/src/assets/mention.scss +0 -48
  21. package/src/assets/screenshot.scss +0 -78
  22. package/src/assets/size.scss +0 -13
  23. package/src/assets/style.scss +0 -39
  24. package/src/assets/tasklist.scss +0 -76
  25. package/src/assets/toolbar.scss +0 -416
  26. package/src/attributors/font-size.ts +0 -6
  27. package/src/attributors/font-style.ts +0 -6
  28. package/src/attributors/index.ts +0 -4
  29. package/src/attributors/line-height.ts +0 -6
  30. package/src/attributors/text-indent.ts +0 -6
  31. package/src/config/base64-image.ts +0 -8
  32. package/src/config/editor.config.ts +0 -88
  33. package/src/config/editor.utils.ts +0 -199
  34. package/src/config/i18n/en-us.ts +0 -106
  35. package/src/config/i18n/zh-cn.ts +0 -104
  36. package/src/config/icons.config.ts +0 -297
  37. package/src/config/index.ts +0 -171
  38. package/src/config/types/additional-toolbar-item.interface.ts +0 -8
  39. package/src/config/types/content-change.interface.ts +0 -13
  40. package/src/config/types/content-save.interface.ts +0 -6
  41. package/src/config/types/counter-option.interface.ts +0 -9
  42. package/src/config/types/editor-config.interface.ts +0 -22
  43. package/src/config/types/editor-modules.interface.ts +0 -41
  44. package/src/config/types/file-operation.interface.ts +0 -12
  45. package/src/config/types/focus-change.interface.ts +0 -4
  46. package/src/config/types/fullscreen-module.interface.ts +0 -4
  47. package/src/config/types/help-panel-item.interface.ts +0 -5
  48. package/src/config/types/help-panel-option.interface.ts +0 -7
  49. package/src/config/types/image-module.interface.ts +0 -3
  50. package/src/config/types/image-upload.interface.ts +0 -7
  51. package/src/config/types/index.ts +0 -22
  52. package/src/config/types/load-on-demand-module.interface.ts +0 -5
  53. package/src/config/types/mention-module.interface.ts +0 -8
  54. package/src/config/types/paste-change.interface.ts +0 -6
  55. package/src/config/types/quick-menu-module.interface.ts +0 -3
  56. package/src/config/types/range.interface.ts +0 -4
  57. package/src/config/types/registry-options.interface.ts +0 -5
  58. package/src/config/types/selection-change.interface.ts +0 -8
  59. package/src/config/types/toolbar-item.interface.ts +0 -13
  60. package/src/config/types/type.ts +0 -5
  61. package/src/config/types/validate-error.interface.ts +0 -11
  62. package/src/counter/index.ts +0 -69
  63. package/src/custom-clipboard.ts +0 -633
  64. package/src/custom-image/BlotFormatter.ts +0 -167
  65. package/src/custom-image/Options.ts +0 -150
  66. package/src/custom-image/actions/Action.ts +0 -13
  67. package/src/custom-image/actions/CustomResizeAction.ts +0 -207
  68. package/src/custom-image/actions/DeleteAction.ts +0 -29
  69. package/src/custom-image/image.ts +0 -118
  70. package/src/custom-image/specs/BlotSpec.ts +0 -30
  71. package/src/custom-image/specs/CustomImageSpec.ts +0 -139
  72. package/src/custom-image/specs/ImageSpec.ts +0 -33
  73. package/src/custom-uploader.ts +0 -199
  74. package/src/emoji/emoji-list/index.ts +0 -1
  75. package/src/emoji/emoji-list/people.ts +0 -111
  76. package/src/emoji/emoji-list.ts +0 -9
  77. package/src/emoji/emoji-map.ts +0 -9
  78. package/src/emoji/formats/emoji-blot.ts +0 -54
  79. package/src/emoji/index.ts +0 -5
  80. package/src/emoji/modules/emoji.ts +0 -318
  81. package/src/emoji/modules/toolbar-emoji.ts +0 -182
  82. package/src/emoji/utils.ts +0 -15
  83. package/src/file/formats/file.ts +0 -67
  84. package/src/file/index.ts +0 -38
  85. package/src/file/modules/file-bar.ts +0 -146
  86. package/src/fluent-editor.ts +0 -164
  87. package/src/format-painter/index.ts +0 -79
  88. package/src/global-link/constants.ts +0 -3
  89. package/src/global-link/formats/customer-widget-link.ts +0 -36
  90. package/src/global-link/formats/doc-link.ts +0 -55
  91. package/src/global-link/formats/wiki-link.ts +0 -45
  92. package/src/global-link/formats/work-item-link.ts +0 -47
  93. package/src/global-link/global-link-panel.ts +0 -20
  94. package/src/global-link/index.ts +0 -165
  95. package/src/global-link/utils/createTable.ts +0 -54
  96. package/src/index.ts +0 -5
  97. package/src/link/formats/link.ts +0 -44
  98. package/src/link/index.ts +0 -35
  99. package/src/link/modules/tooltip.ts +0 -318
  100. package/src/mention/Mention.ts +0 -406
  101. package/src/mention/MentionLink.ts +0 -51
  102. package/src/mention/constants.ts +0 -3
  103. package/src/quick-menu/index.ts +0 -100
  104. package/src/screenshot/index.ts +0 -231
  105. package/src/soft-break/index.ts +0 -34
  106. package/src/strike/index.ts +0 -16
  107. package/src/syntax/index.ts +0 -35
  108. package/src/table/better-table.ts +0 -553
  109. package/src/table/formats/header.ts +0 -129
  110. package/src/table/formats/list.ts +0 -229
  111. package/src/table/formats/table.ts +0 -1272
  112. package/src/table/modules/table-column-tool.ts +0 -492
  113. package/src/table/modules/table-operation-menu.ts +0 -584
  114. package/src/table/modules/table-scroll-bar.ts +0 -248
  115. package/src/table/modules/table-selection.ts +0 -387
  116. package/src/table/table-config.ts +0 -42
  117. package/src/table/utils/index.ts +0 -62
  118. package/src/table/utils/node-matchers.ts +0 -359
  119. package/src/toolbar/better-picker.ts +0 -370
  120. package/src/toolbar/index.ts +0 -180
  121. package/src/utils/debounce.ts +0 -149
  122. package/src/utils/image.ts +0 -22
  123. package/src/utils/method.ts +0 -82
  124. package/src/utils/scroll-lock.ts +0 -52
  125. package/src/video/index.ts +0 -62
  126. package/tsconfig.json +0 -26
  127. package/vite.config.theme.ts +0 -20
  128. package/vite.config.ts +0 -56
  129. /package/{dist/README.md → README.md} +0 -0
  130. /package/{dist/es → es}/attributors/font-size.es.js +0 -0
  131. /package/{dist/es → es}/attributors/font-size.es.js.map +0 -0
  132. /package/{dist/es → es}/attributors/font-style.es.js +0 -0
  133. /package/{dist/es → es}/attributors/font-style.es.js.map +0 -0
  134. /package/{dist/es → es}/attributors/index.es.js +0 -0
  135. /package/{dist/es → es}/attributors/index.es.js.map +0 -0
  136. /package/{dist/es → es}/attributors/line-height.es.js +0 -0
  137. /package/{dist/es → es}/attributors/line-height.es.js.map +0 -0
  138. /package/{dist/es → es}/attributors/text-indent.es.js +0 -0
  139. /package/{dist/es → es}/attributors/text-indent.es.js.map +0 -0
  140. /package/{dist/es → es}/config/base64-image.es.js +0 -0
  141. /package/{dist/es → es}/config/base64-image.es.js.map +0 -0
  142. /package/{dist/es → es}/config/editor.config.es.js +0 -0
  143. /package/{dist/es → es}/config/editor.config.es.js.map +0 -0
  144. /package/{dist/es → es}/config/editor.utils.es.js +0 -0
  145. /package/{dist/es → es}/config/editor.utils.es.js.map +0 -0
  146. /package/{dist/es → es}/config/i18n/en-us.es.js +0 -0
  147. /package/{dist/es → es}/config/i18n/en-us.es.js.map +0 -0
  148. /package/{dist/es → es}/config/i18n/zh-cn.es.js +0 -0
  149. /package/{dist/es → es}/config/i18n/zh-cn.es.js.map +0 -0
  150. /package/{dist/es → es}/config/icons.config.es.js +0 -0
  151. /package/{dist/es → es}/config/icons.config.es.js.map +0 -0
  152. /package/{dist/es → es}/config/index.es.js +0 -0
  153. /package/{dist/es → es}/config/index.es.js.map +0 -0
  154. /package/{dist/es → es}/config/types/additional-toolbar-item.interface.es.js +0 -0
  155. /package/{dist/es → es}/config/types/additional-toolbar-item.interface.es.js.map +0 -0
  156. /package/{dist/es → es}/config/types/content-change.interface.es.js +0 -0
  157. /package/{dist/es → es}/config/types/content-change.interface.es.js.map +0 -0
  158. /package/{dist/es → es}/config/types/content-save.interface.es.js +0 -0
  159. /package/{dist/es → es}/config/types/content-save.interface.es.js.map +0 -0
  160. /package/{dist/es → es}/config/types/counter-option.interface.es.js +0 -0
  161. /package/{dist/es → es}/config/types/counter-option.interface.es.js.map +0 -0
  162. /package/{dist/es → es}/config/types/editor-config.interface.es.js +0 -0
  163. /package/{dist/es → es}/config/types/editor-config.interface.es.js.map +0 -0
  164. /package/{dist/es → es}/config/types/editor-modules.interface.es.js +0 -0
  165. /package/{dist/es → es}/config/types/editor-modules.interface.es.js.map +0 -0
  166. /package/{dist/es → es}/config/types/file-operation.interface.es.js +0 -0
  167. /package/{dist/es → es}/config/types/file-operation.interface.es.js.map +0 -0
  168. /package/{dist/es → es}/config/types/focus-change.interface.es.js +0 -0
  169. /package/{dist/es → es}/config/types/focus-change.interface.es.js.map +0 -0
  170. /package/{dist/es → es}/config/types/fullscreen-module.interface.es.js +0 -0
  171. /package/{dist/es → es}/config/types/fullscreen-module.interface.es.js.map +0 -0
  172. /package/{dist/es → es}/config/types/help-panel-item.interface.es.js +0 -0
  173. /package/{dist/es → es}/config/types/help-panel-item.interface.es.js.map +0 -0
  174. /package/{dist/es → es}/config/types/help-panel-option.interface.es.js +0 -0
  175. /package/{dist/es → es}/config/types/help-panel-option.interface.es.js.map +0 -0
  176. /package/{dist/es → es}/config/types/image-module.interface.es.js +0 -0
  177. /package/{dist/es → es}/config/types/image-module.interface.es.js.map +0 -0
  178. /package/{dist/es → es}/config/types/image-upload.interface.es.js +0 -0
  179. /package/{dist/es → es}/config/types/image-upload.interface.es.js.map +0 -0
  180. /package/{dist/es → es}/config/types/index.es.js +0 -0
  181. /package/{dist/es → es}/config/types/index.es.js.map +0 -0
  182. /package/{dist/es → es}/config/types/load-on-demand-module.interface.es.js +0 -0
  183. /package/{dist/es → es}/config/types/load-on-demand-module.interface.es.js.map +0 -0
  184. /package/{dist/es → es}/config/types/mention-module.interface.es.js +0 -0
  185. /package/{dist/es → es}/config/types/mention-module.interface.es.js.map +0 -0
  186. /package/{dist/es → es}/config/types/paste-change.interface.es.js +0 -0
  187. /package/{dist/es → es}/config/types/paste-change.interface.es.js.map +0 -0
  188. /package/{dist/es → es}/config/types/quick-menu-module.interface.es.js +0 -0
  189. /package/{dist/es → es}/config/types/quick-menu-module.interface.es.js.map +0 -0
  190. /package/{dist/es → es}/config/types/range.interface.es.js +0 -0
  191. /package/{dist/es → es}/config/types/range.interface.es.js.map +0 -0
  192. /package/{dist/es → es}/config/types/registry-options.interface.es.js +0 -0
  193. /package/{dist/es → es}/config/types/registry-options.interface.es.js.map +0 -0
  194. /package/{dist/es → es}/config/types/selection-change.interface.es.js +0 -0
  195. /package/{dist/es → es}/config/types/selection-change.interface.es.js.map +0 -0
  196. /package/{dist/es → es}/config/types/toolbar-item.interface.es.js +0 -0
  197. /package/{dist/es → es}/config/types/toolbar-item.interface.es.js.map +0 -0
  198. /package/{dist/es → es}/config/types/type.es.js +0 -0
  199. /package/{dist/es → es}/config/types/type.es.js.map +0 -0
  200. /package/{dist/es → es}/config/types/validate-error.interface.es.js +0 -0
  201. /package/{dist/es → es}/config/types/validate-error.interface.es.js.map +0 -0
  202. /package/{dist/es → es}/counter/index.es.js +0 -0
  203. /package/{dist/es → es}/counter/index.es.js.map +0 -0
  204. /package/{dist/es → es}/custom-clipboard.es.js +0 -0
  205. /package/{dist/es → es}/custom-clipboard.es.js.map +0 -0
  206. /package/{dist/es → es}/custom-image/BlotFormatter.es.js +0 -0
  207. /package/{dist/es → es}/custom-image/BlotFormatter.es.js.map +0 -0
  208. /package/{dist/es → es}/custom-image/Options.es.js +0 -0
  209. /package/{dist/es → es}/custom-image/Options.es.js.map +0 -0
  210. /package/{dist/es → es}/custom-image/actions/Action.es.js +0 -0
  211. /package/{dist/es → es}/custom-image/actions/Action.es.js.map +0 -0
  212. /package/{dist/es → es}/custom-image/actions/CustomResizeAction.es.js +0 -0
  213. /package/{dist/es → es}/custom-image/actions/CustomResizeAction.es.js.map +0 -0
  214. /package/{dist/es → es}/custom-image/actions/DeleteAction.es.js +0 -0
  215. /package/{dist/es → es}/custom-image/actions/DeleteAction.es.js.map +0 -0
  216. /package/{dist/es → es}/custom-image/image.es.js +0 -0
  217. /package/{dist/es → es}/custom-image/image.es.js.map +0 -0
  218. /package/{dist/es → es}/custom-image/specs/BlotSpec.es.js +0 -0
  219. /package/{dist/es → es}/custom-image/specs/BlotSpec.es.js.map +0 -0
  220. /package/{dist/es → es}/custom-image/specs/CustomImageSpec.es.js +0 -0
  221. /package/{dist/es → es}/custom-image/specs/CustomImageSpec.es.js.map +0 -0
  222. /package/{dist/es → es}/custom-image/specs/ImageSpec.es.js +0 -0
  223. /package/{dist/es → es}/custom-image/specs/ImageSpec.es.js.map +0 -0
  224. /package/{dist/es → es}/custom-uploader.es.js +0 -0
  225. /package/{dist/es → es}/custom-uploader.es.js.map +0 -0
  226. /package/{dist/es → es}/emoji/emoji-list/index.es.js +0 -0
  227. /package/{dist/es → es}/emoji/emoji-list/index.es.js.map +0 -0
  228. /package/{dist/es → es}/emoji/emoji-list/people.es.js +0 -0
  229. /package/{dist/es → es}/emoji/emoji-list/people.es.js.map +0 -0
  230. /package/{dist/es → es}/emoji/emoji-list.es.js +0 -0
  231. /package/{dist/es → es}/emoji/emoji-list.es.js.map +0 -0
  232. /package/{dist/es → es}/emoji/emoji-map.es.js +0 -0
  233. /package/{dist/es → es}/emoji/emoji-map.es.js.map +0 -0
  234. /package/{dist/es → es}/emoji/formats/emoji-blot.es.js +0 -0
  235. /package/{dist/es → es}/emoji/formats/emoji-blot.es.js.map +0 -0
  236. /package/{dist/es → es}/emoji/index.es.js +0 -0
  237. /package/{dist/es → es}/emoji/index.es.js.map +0 -0
  238. /package/{dist/es → es}/emoji/modules/emoji.es.js +0 -0
  239. /package/{dist/es → es}/emoji/modules/emoji.es.js.map +0 -0
  240. /package/{dist/es → es}/emoji/modules/toolbar-emoji.es.js +0 -0
  241. /package/{dist/es → es}/emoji/modules/toolbar-emoji.es.js.map +0 -0
  242. /package/{dist/es → es}/emoji/utils.es.js +0 -0
  243. /package/{dist/es → es}/emoji/utils.es.js.map +0 -0
  244. /package/{dist/es → es}/file/formats/file.es.js +0 -0
  245. /package/{dist/es → es}/file/formats/file.es.js.map +0 -0
  246. /package/{dist/es → es}/file/index.es.js +0 -0
  247. /package/{dist/es → es}/file/index.es.js.map +0 -0
  248. /package/{dist/es → es}/file/modules/file-bar.es.js +0 -0
  249. /package/{dist/es → es}/file/modules/file-bar.es.js.map +0 -0
  250. /package/{dist/es → es}/fluent-editor.es.js +0 -0
  251. /package/{dist/es → es}/fluent-editor.es.js.map +0 -0
  252. /package/{dist/es → es}/format-painter/index.es.js +0 -0
  253. /package/{dist/es → es}/format-painter/index.es.js.map +0 -0
  254. /package/{dist/es → es}/global-link/constants.es.js +0 -0
  255. /package/{dist/es → es}/global-link/constants.es.js.map +0 -0
  256. /package/{dist/es → es}/global-link/formats/customer-widget-link.es.js +0 -0
  257. /package/{dist/es → es}/global-link/formats/customer-widget-link.es.js.map +0 -0
  258. /package/{dist/es → es}/global-link/formats/doc-link.es.js +0 -0
  259. /package/{dist/es → es}/global-link/formats/doc-link.es.js.map +0 -0
  260. /package/{dist/es → es}/global-link/formats/wiki-link.es.js +0 -0
  261. /package/{dist/es → es}/global-link/formats/wiki-link.es.js.map +0 -0
  262. /package/{dist/es → es}/global-link/formats/work-item-link.es.js +0 -0
  263. /package/{dist/es → es}/global-link/formats/work-item-link.es.js.map +0 -0
  264. /package/{dist/es → es}/global-link/global-link-panel.es.js +0 -0
  265. /package/{dist/es → es}/global-link/global-link-panel.es.js.map +0 -0
  266. /package/{dist/es → es}/global-link/index.es.js +0 -0
  267. /package/{dist/es → es}/global-link/index.es.js.map +0 -0
  268. /package/{dist/es → es}/global-link/utils/createTable.es.js +0 -0
  269. /package/{dist/es → es}/global-link/utils/createTable.es.js.map +0 -0
  270. /package/{dist/es → es}/index.es.js +0 -0
  271. /package/{dist/es → es}/index.es.js.map +0 -0
  272. /package/{dist/es → es}/link/formats/link.es.js +0 -0
  273. /package/{dist/es → es}/link/formats/link.es.js.map +0 -0
  274. /package/{dist/es → es}/link/index.es.js +0 -0
  275. /package/{dist/es → es}/link/index.es.js.map +0 -0
  276. /package/{dist/es → es}/link/modules/tooltip.es.js +0 -0
  277. /package/{dist/es → es}/link/modules/tooltip.es.js.map +0 -0
  278. /package/{dist/es → es}/mention/Mention.es.js +0 -0
  279. /package/{dist/es → es}/mention/Mention.es.js.map +0 -0
  280. /package/{dist/es → es}/mention/MentionLink.es.js +0 -0
  281. /package/{dist/es → es}/mention/MentionLink.es.js.map +0 -0
  282. /package/{dist/es → es}/mention/constants.es.js +0 -0
  283. /package/{dist/es → es}/mention/constants.es.js.map +0 -0
  284. /package/{dist/es → es}/quick-menu/index.es.js +0 -0
  285. /package/{dist/es → es}/quick-menu/index.es.js.map +0 -0
  286. /package/{dist/es → es}/screenshot/index.es.js +0 -0
  287. /package/{dist/es → es}/screenshot/index.es.js.map +0 -0
  288. /package/{dist/es → es}/soft-break/index.es.js +0 -0
  289. /package/{dist/es → es}/soft-break/index.es.js.map +0 -0
  290. /package/{dist/es → es}/strike/index.es.js +0 -0
  291. /package/{dist/es → es}/strike/index.es.js.map +0 -0
  292. /package/{dist/es → es}/syntax/index.es.js +0 -0
  293. /package/{dist/es → es}/syntax/index.es.js.map +0 -0
  294. /package/{dist/es → es}/table/better-table.es.js +0 -0
  295. /package/{dist/es → es}/table/better-table.es.js.map +0 -0
  296. /package/{dist/es → es}/table/formats/header.es.js +0 -0
  297. /package/{dist/es → es}/table/formats/header.es.js.map +0 -0
  298. /package/{dist/es → es}/table/formats/list.es.js +0 -0
  299. /package/{dist/es → es}/table/formats/list.es.js.map +0 -0
  300. /package/{dist/es → es}/table/formats/table.es.js +0 -0
  301. /package/{dist/es → es}/table/formats/table.es.js.map +0 -0
  302. /package/{dist/es → es}/table/modules/table-column-tool.es.js +0 -0
  303. /package/{dist/es → es}/table/modules/table-column-tool.es.js.map +0 -0
  304. /package/{dist/es → es}/table/modules/table-operation-menu.es.js +0 -0
  305. /package/{dist/es → es}/table/modules/table-operation-menu.es.js.map +0 -0
  306. /package/{dist/es → es}/table/modules/table-scroll-bar.es.js +0 -0
  307. /package/{dist/es → es}/table/modules/table-scroll-bar.es.js.map +0 -0
  308. /package/{dist/es → es}/table/modules/table-selection.es.js +0 -0
  309. /package/{dist/es → es}/table/modules/table-selection.es.js.map +0 -0
  310. /package/{dist/es → es}/table/table-config.es.js +0 -0
  311. /package/{dist/es → es}/table/table-config.es.js.map +0 -0
  312. /package/{dist/es → es}/table/utils/index.es.js +0 -0
  313. /package/{dist/es → es}/table/utils/index.es.js.map +0 -0
  314. /package/{dist/es → es}/table/utils/node-matchers.es.js +0 -0
  315. /package/{dist/es → es}/table/utils/node-matchers.es.js.map +0 -0
  316. /package/{dist/es → es}/toolbar/better-picker.es.js +0 -0
  317. /package/{dist/es → es}/toolbar/better-picker.es.js.map +0 -0
  318. /package/{dist/es → es}/toolbar/index.es.js +0 -0
  319. /package/{dist/es → es}/toolbar/index.es.js.map +0 -0
  320. /package/{dist/es → es}/utils/debounce.es.js +0 -0
  321. /package/{dist/es → es}/utils/debounce.es.js.map +0 -0
  322. /package/{dist/es → es}/utils/image.es.js +0 -0
  323. /package/{dist/es → es}/utils/image.es.js.map +0 -0
  324. /package/{dist/es → es}/utils/method.es.js +0 -0
  325. /package/{dist/es → es}/utils/method.es.js.map +0 -0
  326. /package/{dist/es → es}/utils/scroll-lock.es.js +0 -0
  327. /package/{dist/es → es}/utils/scroll-lock.es.js.map +0 -0
  328. /package/{dist/es → es}/video/index.es.js +0 -0
  329. /package/{dist/es → es}/video/index.es.js.map +0 -0
  330. /package/{dist/lib → lib}/attributors/font-size.cjs.js +0 -0
  331. /package/{dist/lib → lib}/attributors/font-size.cjs.js.map +0 -0
  332. /package/{dist/lib → lib}/attributors/font-style.cjs.js +0 -0
  333. /package/{dist/lib → lib}/attributors/font-style.cjs.js.map +0 -0
  334. /package/{dist/lib → lib}/attributors/index.cjs.js +0 -0
  335. /package/{dist/lib → lib}/attributors/index.cjs.js.map +0 -0
  336. /package/{dist/lib → lib}/attributors/line-height.cjs.js +0 -0
  337. /package/{dist/lib → lib}/attributors/line-height.cjs.js.map +0 -0
  338. /package/{dist/lib → lib}/attributors/text-indent.cjs.js +0 -0
  339. /package/{dist/lib → lib}/attributors/text-indent.cjs.js.map +0 -0
  340. /package/{dist/lib → lib}/config/base64-image.cjs.js +0 -0
  341. /package/{dist/lib → lib}/config/base64-image.cjs.js.map +0 -0
  342. /package/{dist/lib → lib}/config/editor.config.cjs.js +0 -0
  343. /package/{dist/lib → lib}/config/editor.config.cjs.js.map +0 -0
  344. /package/{dist/lib → lib}/config/editor.utils.cjs.js +0 -0
  345. /package/{dist/lib → lib}/config/editor.utils.cjs.js.map +0 -0
  346. /package/{dist/lib → lib}/config/i18n/en-us.cjs.js +0 -0
  347. /package/{dist/lib → lib}/config/i18n/en-us.cjs.js.map +0 -0
  348. /package/{dist/lib → lib}/config/i18n/zh-cn.cjs.js +0 -0
  349. /package/{dist/lib → lib}/config/i18n/zh-cn.cjs.js.map +0 -0
  350. /package/{dist/lib → lib}/config/icons.config.cjs.js +0 -0
  351. /package/{dist/lib → lib}/config/icons.config.cjs.js.map +0 -0
  352. /package/{dist/lib → lib}/config/index.cjs.js +0 -0
  353. /package/{dist/lib → lib}/config/index.cjs.js.map +0 -0
  354. /package/{dist/lib → lib}/config/types/additional-toolbar-item.interface.cjs.js +0 -0
  355. /package/{dist/lib → lib}/config/types/additional-toolbar-item.interface.cjs.js.map +0 -0
  356. /package/{dist/lib → lib}/config/types/content-change.interface.cjs.js +0 -0
  357. /package/{dist/lib → lib}/config/types/content-change.interface.cjs.js.map +0 -0
  358. /package/{dist/lib → lib}/config/types/content-save.interface.cjs.js +0 -0
  359. /package/{dist/lib → lib}/config/types/content-save.interface.cjs.js.map +0 -0
  360. /package/{dist/lib → lib}/config/types/counter-option.interface.cjs.js +0 -0
  361. /package/{dist/lib → lib}/config/types/counter-option.interface.cjs.js.map +0 -0
  362. /package/{dist/lib → lib}/config/types/editor-config.interface.cjs.js +0 -0
  363. /package/{dist/lib → lib}/config/types/editor-config.interface.cjs.js.map +0 -0
  364. /package/{dist/lib → lib}/config/types/editor-modules.interface.cjs.js +0 -0
  365. /package/{dist/lib → lib}/config/types/editor-modules.interface.cjs.js.map +0 -0
  366. /package/{dist/lib → lib}/config/types/file-operation.interface.cjs.js +0 -0
  367. /package/{dist/lib → lib}/config/types/file-operation.interface.cjs.js.map +0 -0
  368. /package/{dist/lib → lib}/config/types/focus-change.interface.cjs.js +0 -0
  369. /package/{dist/lib → lib}/config/types/focus-change.interface.cjs.js.map +0 -0
  370. /package/{dist/lib → lib}/config/types/fullscreen-module.interface.cjs.js +0 -0
  371. /package/{dist/lib → lib}/config/types/fullscreen-module.interface.cjs.js.map +0 -0
  372. /package/{dist/lib → lib}/config/types/help-panel-item.interface.cjs.js +0 -0
  373. /package/{dist/lib → lib}/config/types/help-panel-item.interface.cjs.js.map +0 -0
  374. /package/{dist/lib → lib}/config/types/help-panel-option.interface.cjs.js +0 -0
  375. /package/{dist/lib → lib}/config/types/help-panel-option.interface.cjs.js.map +0 -0
  376. /package/{dist/lib → lib}/config/types/image-module.interface.cjs.js +0 -0
  377. /package/{dist/lib → lib}/config/types/image-module.interface.cjs.js.map +0 -0
  378. /package/{dist/lib → lib}/config/types/image-upload.interface.cjs.js +0 -0
  379. /package/{dist/lib → lib}/config/types/image-upload.interface.cjs.js.map +0 -0
  380. /package/{dist/lib → lib}/config/types/index.cjs.js +0 -0
  381. /package/{dist/lib → lib}/config/types/index.cjs.js.map +0 -0
  382. /package/{dist/lib → lib}/config/types/load-on-demand-module.interface.cjs.js +0 -0
  383. /package/{dist/lib → lib}/config/types/load-on-demand-module.interface.cjs.js.map +0 -0
  384. /package/{dist/lib → lib}/config/types/mention-module.interface.cjs.js +0 -0
  385. /package/{dist/lib → lib}/config/types/mention-module.interface.cjs.js.map +0 -0
  386. /package/{dist/lib → lib}/config/types/paste-change.interface.cjs.js +0 -0
  387. /package/{dist/lib → lib}/config/types/paste-change.interface.cjs.js.map +0 -0
  388. /package/{dist/lib → lib}/config/types/quick-menu-module.interface.cjs.js +0 -0
  389. /package/{dist/lib → lib}/config/types/quick-menu-module.interface.cjs.js.map +0 -0
  390. /package/{dist/lib → lib}/config/types/range.interface.cjs.js +0 -0
  391. /package/{dist/lib → lib}/config/types/range.interface.cjs.js.map +0 -0
  392. /package/{dist/lib → lib}/config/types/registry-options.interface.cjs.js +0 -0
  393. /package/{dist/lib → lib}/config/types/registry-options.interface.cjs.js.map +0 -0
  394. /package/{dist/lib → lib}/config/types/selection-change.interface.cjs.js +0 -0
  395. /package/{dist/lib → lib}/config/types/selection-change.interface.cjs.js.map +0 -0
  396. /package/{dist/lib → lib}/config/types/toolbar-item.interface.cjs.js +0 -0
  397. /package/{dist/lib → lib}/config/types/toolbar-item.interface.cjs.js.map +0 -0
  398. /package/{dist/lib → lib}/config/types/type.cjs.js +0 -0
  399. /package/{dist/lib → lib}/config/types/type.cjs.js.map +0 -0
  400. /package/{dist/lib → lib}/config/types/validate-error.interface.cjs.js +0 -0
  401. /package/{dist/lib → lib}/config/types/validate-error.interface.cjs.js.map +0 -0
  402. /package/{dist/lib → lib}/counter/index.cjs.js +0 -0
  403. /package/{dist/lib → lib}/counter/index.cjs.js.map +0 -0
  404. /package/{dist/lib → lib}/custom-clipboard.cjs.js +0 -0
  405. /package/{dist/lib → lib}/custom-clipboard.cjs.js.map +0 -0
  406. /package/{dist/lib → lib}/custom-image/BlotFormatter.cjs.js +0 -0
  407. /package/{dist/lib → lib}/custom-image/BlotFormatter.cjs.js.map +0 -0
  408. /package/{dist/lib → lib}/custom-image/Options.cjs.js +0 -0
  409. /package/{dist/lib → lib}/custom-image/Options.cjs.js.map +0 -0
  410. /package/{dist/lib → lib}/custom-image/actions/Action.cjs.js +0 -0
  411. /package/{dist/lib → lib}/custom-image/actions/Action.cjs.js.map +0 -0
  412. /package/{dist/lib → lib}/custom-image/actions/CustomResizeAction.cjs.js +0 -0
  413. /package/{dist/lib → lib}/custom-image/actions/CustomResizeAction.cjs.js.map +0 -0
  414. /package/{dist/lib → lib}/custom-image/actions/DeleteAction.cjs.js +0 -0
  415. /package/{dist/lib → lib}/custom-image/actions/DeleteAction.cjs.js.map +0 -0
  416. /package/{dist/lib → lib}/custom-image/image.cjs.js +0 -0
  417. /package/{dist/lib → lib}/custom-image/image.cjs.js.map +0 -0
  418. /package/{dist/lib → lib}/custom-image/specs/BlotSpec.cjs.js +0 -0
  419. /package/{dist/lib → lib}/custom-image/specs/BlotSpec.cjs.js.map +0 -0
  420. /package/{dist/lib → lib}/custom-image/specs/CustomImageSpec.cjs.js +0 -0
  421. /package/{dist/lib → lib}/custom-image/specs/CustomImageSpec.cjs.js.map +0 -0
  422. /package/{dist/lib → lib}/custom-image/specs/ImageSpec.cjs.js +0 -0
  423. /package/{dist/lib → lib}/custom-image/specs/ImageSpec.cjs.js.map +0 -0
  424. /package/{dist/lib → lib}/custom-uploader.cjs.js +0 -0
  425. /package/{dist/lib → lib}/custom-uploader.cjs.js.map +0 -0
  426. /package/{dist/lib → lib}/emoji/emoji-list/index.cjs.js +0 -0
  427. /package/{dist/lib → lib}/emoji/emoji-list/index.cjs.js.map +0 -0
  428. /package/{dist/lib → lib}/emoji/emoji-list/people.cjs.js +0 -0
  429. /package/{dist/lib → lib}/emoji/emoji-list/people.cjs.js.map +0 -0
  430. /package/{dist/lib → lib}/emoji/emoji-list.cjs.js +0 -0
  431. /package/{dist/lib → lib}/emoji/emoji-list.cjs.js.map +0 -0
  432. /package/{dist/lib → lib}/emoji/emoji-map.cjs.js +0 -0
  433. /package/{dist/lib → lib}/emoji/emoji-map.cjs.js.map +0 -0
  434. /package/{dist/lib → lib}/emoji/formats/emoji-blot.cjs.js +0 -0
  435. /package/{dist/lib → lib}/emoji/formats/emoji-blot.cjs.js.map +0 -0
  436. /package/{dist/lib → lib}/emoji/index.cjs.js +0 -0
  437. /package/{dist/lib → lib}/emoji/index.cjs.js.map +0 -0
  438. /package/{dist/lib → lib}/emoji/modules/emoji.cjs.js +0 -0
  439. /package/{dist/lib → lib}/emoji/modules/emoji.cjs.js.map +0 -0
  440. /package/{dist/lib → lib}/emoji/modules/toolbar-emoji.cjs.js +0 -0
  441. /package/{dist/lib → lib}/emoji/modules/toolbar-emoji.cjs.js.map +0 -0
  442. /package/{dist/lib → lib}/emoji/utils.cjs.js +0 -0
  443. /package/{dist/lib → lib}/emoji/utils.cjs.js.map +0 -0
  444. /package/{dist/lib → lib}/file/formats/file.cjs.js +0 -0
  445. /package/{dist/lib → lib}/file/formats/file.cjs.js.map +0 -0
  446. /package/{dist/lib → lib}/file/index.cjs.js +0 -0
  447. /package/{dist/lib → lib}/file/index.cjs.js.map +0 -0
  448. /package/{dist/lib → lib}/file/modules/file-bar.cjs.js +0 -0
  449. /package/{dist/lib → lib}/file/modules/file-bar.cjs.js.map +0 -0
  450. /package/{dist/lib → lib}/fluent-editor.cjs.js +0 -0
  451. /package/{dist/lib → lib}/fluent-editor.cjs.js.map +0 -0
  452. /package/{dist/lib → lib}/format-painter/index.cjs.js +0 -0
  453. /package/{dist/lib → lib}/format-painter/index.cjs.js.map +0 -0
  454. /package/{dist/lib → lib}/global-link/constants.cjs.js +0 -0
  455. /package/{dist/lib → lib}/global-link/constants.cjs.js.map +0 -0
  456. /package/{dist/lib → lib}/global-link/formats/customer-widget-link.cjs.js +0 -0
  457. /package/{dist/lib → lib}/global-link/formats/customer-widget-link.cjs.js.map +0 -0
  458. /package/{dist/lib → lib}/global-link/formats/doc-link.cjs.js +0 -0
  459. /package/{dist/lib → lib}/global-link/formats/doc-link.cjs.js.map +0 -0
  460. /package/{dist/lib → lib}/global-link/formats/wiki-link.cjs.js +0 -0
  461. /package/{dist/lib → lib}/global-link/formats/wiki-link.cjs.js.map +0 -0
  462. /package/{dist/lib → lib}/global-link/formats/work-item-link.cjs.js +0 -0
  463. /package/{dist/lib → lib}/global-link/formats/work-item-link.cjs.js.map +0 -0
  464. /package/{dist/lib → lib}/global-link/global-link-panel.cjs.js +0 -0
  465. /package/{dist/lib → lib}/global-link/global-link-panel.cjs.js.map +0 -0
  466. /package/{dist/lib → lib}/global-link/index.cjs.js +0 -0
  467. /package/{dist/lib → lib}/global-link/index.cjs.js.map +0 -0
  468. /package/{dist/lib → lib}/global-link/utils/createTable.cjs.js +0 -0
  469. /package/{dist/lib → lib}/global-link/utils/createTable.cjs.js.map +0 -0
  470. /package/{dist/lib → lib}/index.cjs.js +0 -0
  471. /package/{dist/lib → lib}/index.cjs.js.map +0 -0
  472. /package/{dist/lib → lib}/link/formats/link.cjs.js +0 -0
  473. /package/{dist/lib → lib}/link/formats/link.cjs.js.map +0 -0
  474. /package/{dist/lib → lib}/link/index.cjs.js +0 -0
  475. /package/{dist/lib → lib}/link/index.cjs.js.map +0 -0
  476. /package/{dist/lib → lib}/link/modules/tooltip.cjs.js +0 -0
  477. /package/{dist/lib → lib}/link/modules/tooltip.cjs.js.map +0 -0
  478. /package/{dist/lib → lib}/mention/Mention.cjs.js +0 -0
  479. /package/{dist/lib → lib}/mention/Mention.cjs.js.map +0 -0
  480. /package/{dist/lib → lib}/mention/MentionLink.cjs.js +0 -0
  481. /package/{dist/lib → lib}/mention/MentionLink.cjs.js.map +0 -0
  482. /package/{dist/lib → lib}/mention/constants.cjs.js +0 -0
  483. /package/{dist/lib → lib}/mention/constants.cjs.js.map +0 -0
  484. /package/{dist/lib → lib}/quick-menu/index.cjs.js +0 -0
  485. /package/{dist/lib → lib}/quick-menu/index.cjs.js.map +0 -0
  486. /package/{dist/lib → lib}/screenshot/index.cjs.js +0 -0
  487. /package/{dist/lib → lib}/screenshot/index.cjs.js.map +0 -0
  488. /package/{dist/lib → lib}/soft-break/index.cjs.js +0 -0
  489. /package/{dist/lib → lib}/soft-break/index.cjs.js.map +0 -0
  490. /package/{dist/lib → lib}/strike/index.cjs.js +0 -0
  491. /package/{dist/lib → lib}/strike/index.cjs.js.map +0 -0
  492. /package/{dist/lib → lib}/syntax/index.cjs.js +0 -0
  493. /package/{dist/lib → lib}/syntax/index.cjs.js.map +0 -0
  494. /package/{dist/lib → lib}/table/better-table.cjs.js +0 -0
  495. /package/{dist/lib → lib}/table/better-table.cjs.js.map +0 -0
  496. /package/{dist/lib → lib}/table/formats/header.cjs.js +0 -0
  497. /package/{dist/lib → lib}/table/formats/header.cjs.js.map +0 -0
  498. /package/{dist/lib → lib}/table/formats/list.cjs.js +0 -0
  499. /package/{dist/lib → lib}/table/formats/list.cjs.js.map +0 -0
  500. /package/{dist/lib → lib}/table/formats/table.cjs.js +0 -0
  501. /package/{dist/lib → lib}/table/formats/table.cjs.js.map +0 -0
  502. /package/{dist/lib → lib}/table/modules/table-column-tool.cjs.js +0 -0
  503. /package/{dist/lib → lib}/table/modules/table-column-tool.cjs.js.map +0 -0
  504. /package/{dist/lib → lib}/table/modules/table-operation-menu.cjs.js +0 -0
  505. /package/{dist/lib → lib}/table/modules/table-operation-menu.cjs.js.map +0 -0
  506. /package/{dist/lib → lib}/table/modules/table-scroll-bar.cjs.js +0 -0
  507. /package/{dist/lib → lib}/table/modules/table-scroll-bar.cjs.js.map +0 -0
  508. /package/{dist/lib → lib}/table/modules/table-selection.cjs.js +0 -0
  509. /package/{dist/lib → lib}/table/modules/table-selection.cjs.js.map +0 -0
  510. /package/{dist/lib → lib}/table/table-config.cjs.js +0 -0
  511. /package/{dist/lib → lib}/table/table-config.cjs.js.map +0 -0
  512. /package/{dist/lib → lib}/table/utils/index.cjs.js +0 -0
  513. /package/{dist/lib → lib}/table/utils/index.cjs.js.map +0 -0
  514. /package/{dist/lib → lib}/table/utils/node-matchers.cjs.js +0 -0
  515. /package/{dist/lib → lib}/table/utils/node-matchers.cjs.js.map +0 -0
  516. /package/{dist/lib → lib}/toolbar/better-picker.cjs.js +0 -0
  517. /package/{dist/lib → lib}/toolbar/better-picker.cjs.js.map +0 -0
  518. /package/{dist/lib → lib}/toolbar/index.cjs.js +0 -0
  519. /package/{dist/lib → lib}/toolbar/index.cjs.js.map +0 -0
  520. /package/{dist/lib → lib}/utils/debounce.cjs.js +0 -0
  521. /package/{dist/lib → lib}/utils/debounce.cjs.js.map +0 -0
  522. /package/{dist/lib → lib}/utils/image.cjs.js +0 -0
  523. /package/{dist/lib → lib}/utils/image.cjs.js.map +0 -0
  524. /package/{dist/lib → lib}/utils/method.cjs.js +0 -0
  525. /package/{dist/lib → lib}/utils/method.cjs.js.map +0 -0
  526. /package/{dist/lib → lib}/utils/scroll-lock.cjs.js +0 -0
  527. /package/{dist/lib → lib}/utils/scroll-lock.cjs.js.map +0 -0
  528. /package/{dist/lib → lib}/video/index.cjs.js +0 -0
  529. /package/{dist/lib → lib}/video/index.cjs.js.map +0 -0
  530. /package/{dist/style.css → style.css} +0 -0
@@ -1,633 +0,0 @@
1
- import Quill from 'quill'
2
- import {
3
- ERROR_IMAGE_PLACEHOLDER_CN,
4
- ERROR_IMAGE_PLACEHOLDER_EN,
5
- } from './config/base64-image'
6
- import { BIG_DELTA_LIMIT, LANG_CONF } from './config/editor.config'
7
- import {
8
- hexToRgbA,
9
- imageFileToUrl,
10
- imageUrlToFile,
11
- insideTable,
12
- isNullOrUndefined,
13
- omit,
14
- replaceDeltaImage,
15
- splitWithBreak,
16
- } from './config/editor.utils'
17
-
18
- const Clipboard = Quill.imports['modules/clipboard']
19
- const Delta = Quill.import('delta')
20
-
21
- class CustomClipboard extends Clipboard {
22
- quill
23
- convert
24
- onCopy
25
- matchers
26
-
27
- prepareMatching(container, nodeMatches) {
28
- const elementMatchers = []
29
- const textMatchers = []
30
- this.matchers.forEach((pair) => {
31
- const [selector, matcher] = pair
32
- switch (selector) {
33
- case Node.TEXT_NODE:
34
- textMatchers.push(matcher)
35
- break
36
- case Node.ELEMENT_NODE:
37
- elementMatchers.push(matcher)
38
- break
39
- default: {
40
- // word 的 v:shape 系列标签只能通过 getElementsByTagName 获取
41
- const vRegex = /v:(.+)/
42
- const nodeList = vRegex.test(selector)
43
- ? Array.from(container.getElementsByTagName(selector))
44
- : Array.from(container.querySelectorAll(selector))
45
- nodeList.forEach((node) => {
46
- if (nodeMatches.has(node)) {
47
- const matches = nodeMatches.get(node)
48
- matches.push(matcher)
49
- }
50
- else {
51
- nodeMatches.set(node, [matcher])
52
- }
53
- })
54
- break
55
- }
56
- }
57
- })
58
- return [elementMatchers, textMatchers]
59
- }
60
-
61
- onCaptureCopy(e, isCut = false) {
62
- if (e.defaultPrevented) {
63
- return
64
- }
65
- e.preventDefault()
66
- const [range] = this.quill.selection.getRange()
67
- if (isNullOrUndefined(range)) {
68
- return
69
- }
70
- const { html, text } = this.onCopy(range, isCut)
71
-
72
- // 兼容IE11浏览器`
73
- if (!e.clipboardData) {
74
- e.clipboardData = {
75
- types: 'text/plain',
76
- setData: (_type, value) => {
77
- return window.clipboardData.setData('Text', value)
78
- },
79
- }
80
- }
81
-
82
- // 复制代码时移除utf8中产生的不间断空格\u00A0
83
- let plainText = text
84
- if (html.startsWith('<pre>')) {
85
- plainText = text.replace(/\u00A0/g, ' ')
86
- }
87
-
88
- e.clipboardData.setData('text/html', html)
89
- e.clipboardData.setData('text/plain', plainText)
90
- if (isCut) {
91
- this.quill.deleteText(range, Quill.sources.USER)
92
- }
93
- }
94
-
95
- onCapturePaste(e) {
96
- if (e.defaultPrevented || !this.quill.isEnabled()) {
97
- return
98
- }
99
- e.preventDefault()
100
- const range = this.quill.getSelection(true)
101
- if (isNullOrUndefined(range)) {
102
- return
103
- }
104
-
105
- // 兼容IE11浏览器
106
- if (!e.clipboardData) {
107
- e.clipboardData = {
108
- types: 'text/plain',
109
- getData: () => {
110
- return window.clipboardData.getData('Text')
111
- },
112
- }
113
- }
114
-
115
- const html = e.clipboardData.getData('text/html')
116
- const text = e.clipboardData.getData('text/plain')
117
- const files = Array.from(e.clipboardData.files || [])
118
- const msExcelCheck = /<meta.*?Microsoft Excel\s[\d].*?>/
119
-
120
- if (html.search(msExcelCheck) === -1 && files.length > 0) {
121
- this.quill.uploader.upload(range, files)
122
- }
123
- else {
124
- const msWordCheck1
125
- = /<meta\s*name="?generator"?\s*content="?microsoft\s*word\s*\d+"?\/?>/i
126
- const msWordCheck2 = /xmlns:o="urn:schemas-microsoft-com/i
127
- const result = { html, text, files, rtf: null }
128
- if (html.search(msExcelCheck) !== -1) {
129
- result.html = renderStyles(html)
130
- }
131
- if (msWordCheck1.test(html) || msWordCheck2.test(html)) {
132
- // TODO: 当word文档包含heading时text/rtf读取为空,无法获取hex图片,待修复。可参考ckeditor5/issues/2493
133
- result.rtf = e.clipboardData.getData('text/rtf')
134
- }
135
- this.onPaste(range, result)
136
- }
137
- }
138
-
139
- onPaste(range, { html, text, files: clipboardFiles, rtf }) {
140
- const hexImages = this.extractImageDataFromRtf(rtf)
141
- const rootBgColor = getComputedStyle(this.quill.root).backgroundColor
142
- const formats = this.quill.getFormat(range.index)
143
- let pastedDelta = this.convert({ text, html }, formats)
144
- pastedDelta = replaceDeltaWhiteSpace(pastedDelta, rootBgColor)
145
- const deltaLength = pastedDelta.ops.length
146
-
147
- let loadingTipsContainer
148
- if (deltaLength > BIG_DELTA_LIMIT) {
149
- loadingTipsContainer = this.quill.addContainer('ql-loading-tips')
150
- loadingTipsContainer.innerHTML = LANG_CONF.pasting
151
- }
152
-
153
- const linePos = { index: range.index, length: range.length, fix: 0 }
154
- const [line, offset] = this.quill.getLine(range.index)
155
- const isInsideTable = insideTable.call(this)
156
-
157
- const handlePasteContent = (content: any) => {
158
- let pastedContent = content
159
- // fix: 阻止粘贴代码块和引用导致表格断裂
160
- const tableBreaker = pastedContent.ops.find((op) => {
161
- return (
162
- op.attributes
163
- && (op.attributes.blockquote || op.attributes['code-block'])
164
- )
165
- })
166
- if (isInsideTable) {
167
- // fix: 阻止带有表格内容粘贴在表格里
168
- const table = line.domNode.closest('table.quill-better-table')
169
- const tableBlot = Quill.find(table)
170
- const tableIndex = this.quill.getIndex(tableBlot)
171
- const tableLength = tableBlot.length()
172
- const tableEndPos = tableIndex + tableLength
173
- const anchorNode = getSelection().anchorNode
174
- if (tableBreaker) {
175
- return
176
- }
177
- if (formats['table-col']) {
178
- // fix: 光标在表格前端的table-col处时,获取整个表格的index后以此为基准向前移动一位插入粘贴内容且不删除任何内容
179
- linePos.index = tableIndex - 1
180
- linePos.length = 0
181
- }
182
- else if (
183
- range.index === tableEndPos - 1
184
- && anchorNode instanceof HTMLDivElement
185
- && anchorNode.classList.contains('quill-better-table-wrapper')
186
- ) {
187
- const list = pastedContent.filter(
188
- op => op.attributes && op.attributes.list,
189
- )
190
- if (list && list.length) {
191
- return
192
- }
193
- // fix: 光标在表格末端时,向后移动一位插入粘贴内容且不删除任何内容
194
- // TODO
195
- // 当表格最后一格有内容时,没法区分在表格最后一格最末尾和光标在表格后这两种情况,它们的 range 是一样
196
- // 这会导致在这两处粘贴表格内容都会将该内容粘贴到表格下一行中
197
- linePos.index = tableEndPos
198
- linePos.length = 0
199
- }
200
- else {
201
- if (!formats['table-cell-line']) {
202
- return
203
- }
204
- // fix: 解决表格内粘贴问题
205
- // 缺陷描述:将表格内的换行文本复制粘贴到别的单元格,会导致表格断开
206
- // 原因是:换行的文本delta对象有问题,delta对象前面多了一个纯换行和表格控制头(table-col)
207
- // 解决方法:将多余的delta项移除
208
- pastedContent = {
209
- ops: pastedContent.filter((op, index) => {
210
- const regexp = /^[\n\r]+$/
211
- const isString = op.insert && typeof op.insert === 'string'
212
- const isLine = isString && regexp.test(op.insert)
213
- const isCellLine
214
- = isLine && op.attributes && op.attributes['table-cell-line']
215
- const isList = isLine && op.attributes && op.attributes.list
216
- const isPureLine = isLine && !isCellLine && !isList
217
- const isTableCol
218
- = isLine && op.attributes && op.attributes['table-col']
219
- const isLastCellLine = isCellLine && index === deltaLength - 1
220
- return !isPureLine && !isTableCol && !isLastCellLine
221
- }),
222
- }
223
- // fix: 解决从表格外粘贴多行文本导致表格断开的问题
224
- pastedContent = rebuildDelta(
225
- new Delta(pastedContent.ops),
226
- formats['table-cell-line'],
227
- )
228
- }
229
- }
230
-
231
- // fix: 粘贴内容末尾为List,且粘贴位置的block或table-cell-line无内容则删除该block或table-cell-line
232
- // TODO 这里的lastChild如果不存在,则可能报错
233
- const lastChild = pastedContent.ops[pastedContent.ops.length - 1]
234
- const hasList
235
- = lastChild && lastChild.attributes && lastChild.attributes.list
236
- if (
237
- hasList
238
- && offset === 0
239
- && line
240
- && line.cache.length === 1
241
- && (line.statics.blotName === 'block'
242
- || line.statics.blotName === 'table-cell-line')
243
- && (!line.next || line.next.statics.blotName !== 'table-view')
244
- ) {
245
- linePos.index = this.quill.getIndex(line)
246
- linePos.length = line.length()
247
- linePos.fix = 1
248
- }
249
-
250
- const oldDelta = new Delta().retain(linePos.index).delete(linePos.length)
251
- const delta = oldDelta.concat(pastedContent)
252
-
253
- setTimeout(() => {
254
- this.quill.updateContents(delta, Quill.sources.USER)
255
- this.quill.setSelection(
256
- delta.length() - linePos.length - linePos.fix,
257
- Quill.sources.SILENT,
258
- )
259
- this.quill.scrollIntoView()
260
- if (loadingTipsContainer) {
261
- loadingTipsContainer.remove()
262
- }
263
- })
264
- }
265
-
266
- ;(async () => {
267
- try {
268
- const [files, placeholders, originalUrls, imageIndexs] = this.flipFilesArray(
269
- await this.extractFilesFromDelta(
270
- pastedDelta,
271
- clipboardFiles,
272
- hexImages,
273
- ),
274
- )
275
-
276
- if (files.length === 0) {
277
- handlePasteContent(pastedDelta)
278
- }
279
- else {
280
- if (this.quill.options.editorPaste && this.quill.options.editorPaste.observers.length !== 0) {
281
- // 设置editorPaste回调的情况
282
- this.quill.options.editorPaste.emit({
283
- files,
284
- callback: ({ code, message, data }) => {
285
- if (code === 0) {
286
- const { imageUrls } = data
287
- pastedDelta = replaceDeltaImage(
288
- pastedDelta,
289
- imageUrls,
290
- placeholders,
291
- )
292
- handlePasteContent(pastedDelta)
293
- }
294
- else {
295
- console.error('error message:', message)
296
- }
297
- },
298
- })
299
- }
300
- else {
301
- // 没有originalUrls 也没有文件粘贴
302
- if (files[0] !== undefined || originalUrls.length === 0) {
303
- // 没有设置editorPaste回调的情况下,File格式的占位图需要手动转换成url格式,插入到编辑器中
304
- const imageUrls = await this.files2urls(
305
- files,
306
- placeholders,
307
- originalUrls,
308
- pastedDelta,
309
- imageIndexs,
310
- )
311
- pastedDelta = replaceDeltaImage(
312
- pastedDelta,
313
- imageUrls,
314
- placeholders,
315
- )
316
- }
317
- handlePasteContent(pastedDelta)
318
- }
319
- }
320
- }
321
- catch (_e) {
322
- throw new Error('Paste failed.')
323
- }
324
- })()
325
- }
326
-
327
- files2urls(files, placeholders, originalUrls, pastedDelta, imageIndexs) {
328
- return Promise.all(
329
- files.map(async (imageFile, index) => {
330
- const netImgExp = /^((http|https)\:)?\/\/([\s\S]+)$/
331
- if (
332
- !placeholders[index]
333
- && originalUrls[index]
334
- && netImgExp.test(originalUrls[index])
335
- ) {
336
- // 不是占位图的普通url图片直接返回url
337
- return new Promise((resolve) => {
338
- resolve(originalUrls[index])
339
- })
340
- }
341
- else if (this.quill.options.uploadOption.imageUploadToServer) {
342
- const range = this.getImgSelection(pastedDelta, imageIndexs[index])
343
- this.quill.uploader.upload(range, [imageFile])
344
- }
345
- else {
346
- // 占位图或者跨域图需要手动转换成url格式
347
- return imageFileToUrl(imageFile)
348
- }
349
- }),
350
- )
351
- }
352
-
353
- flipFilesArray(filesArr) {
354
- const files = []
355
- const placeholders = []
356
- const originalUrls = []
357
- const imageIndexs = []
358
- filesArr.forEach((item: any) => {
359
- if (item) {
360
- const [file, placeholder, originalUrl, imageIndex] = item
361
- files.push(file)
362
- placeholders.push(placeholder)
363
- originalUrls.push(originalUrl)
364
- if (imageIndex === 0 || imageIndex) {
365
- imageIndexs.push(imageIndex)
366
- }
367
- }
368
- })
369
- return [files, placeholders, originalUrls, imageIndexs]
370
- }
371
-
372
- // 将图片从hex转为base64
373
- convertHexToBase64(hexString) {
374
- return btoa(
375
- hexString
376
- .match(/\w{2}/g)
377
- .map((char) => {
378
- return String.fromCharCode(Number.parseInt(char, 16))
379
- })
380
- .join(''),
381
- )
382
- }
383
-
384
- // 匹配rtf中的图片,存储为{hex, type}对象数组
385
- extractImageDataFromRtf(rtfData) {
386
- if (!rtfData) {
387
- return []
388
- }
389
-
390
- const regexPictureHeader
391
- = /{\\pict[\s\S]+?\\bliptag-?\d+(\\blipupi-?\d+)?({\\\*\\blipuid\s?[\da-fA-F]+)?[\s}]*?/
392
- const regexPicture = new RegExp(
393
- `(?:(${regexPictureHeader.source}))([\\da-fA-F\\s]+)\\}`,
394
- 'g',
395
- )
396
- const images = rtfData.match(regexPicture)
397
- const result = []
398
-
399
- if (images) {
400
- for (const image of images) {
401
- let imageType = ''
402
-
403
- if (image.includes('\\pngblip')) {
404
- imageType = 'image/png'
405
- }
406
- else if (image.includes('\\jpegblip')) {
407
- imageType = 'image/jpeg'
408
- }
409
-
410
- if (imageType) {
411
- result.push({
412
- hex: image
413
- .replace(regexPictureHeader, '')
414
- .replace(/[^\da-fA-F]/g, ''),
415
- type: imageType,
416
- })
417
- }
418
- }
419
- }
420
-
421
- return result
422
- }
423
-
424
- extractFilesFromDelta(delta, clipboardFiles, hexImages?) {
425
- let index = -1
426
- return Promise.all(
427
- delta.map(async (op) => {
428
- index++
429
- const image = op.insert.image
430
- if (!image || image.hasExisted) {
431
- return
432
- }
433
-
434
- let file
435
- let isPlaceholderImage = false
436
- let imageIndex
437
- try {
438
- // hex 图片存在则为 file:/// 协议本地图片,使用 hex 图片转为 base64 读取
439
- const hexImage = hexImages.length && hexImages.shift()
440
- const newImage
441
- = hexImage
442
- && `data:${hexImage.type};base64,${this.convertHexToBase64(
443
- hexImage.hex,
444
- )}`
445
- imageIndex = index
446
- file = await imageUrlToFile(newImage || image.src || image)
447
- }
448
- catch (_err) {
449
- if (clipboardFiles.length !== 0) {
450
- // 跨域获取图片失败时从剪切板获取图片
451
- const clipboardFile = clipboardFiles[0]
452
- const imageType
453
- = clipboardFile.type?.indexOf('image') === -1
454
- ? 'image/png'
455
- : clipboardFile.type
456
- const blob = clipboardFile.slice(0, clipboardFile.size, imageType)
457
- file = new File([blob], `image-CORS-${new Date().getTime()}.png`, {
458
- type: imageType,
459
- })
460
- }
461
- else if (image.src.startsWith('http')) {
462
- // 什么都不做
463
- }
464
- else {
465
- // 剪切板中无图片,用失败占位图替换
466
- const errorImagePlaceholderJpg
467
- = LANG_CONF['img-error'] === 'Image Copy Error'
468
- ? ERROR_IMAGE_PLACEHOLDER_EN
469
- : ERROR_IMAGE_PLACEHOLDER_CN
470
- file = await imageUrlToFile(errorImagePlaceholderJpg, true)
471
- isPlaceholderImage = true
472
- }
473
- }
474
-
475
- return [file, isPlaceholderImage, image, imageIndex]
476
- }),
477
- )
478
- }
479
-
480
- getImgSelection(delta, imageIndex) {
481
- let length = 0
482
- delta.ops.every((op, index) => {
483
- if (index === imageIndex) {
484
- return false
485
- }
486
- if (typeof op.insert === 'string') {
487
- length += op.insert.length
488
- }
489
- return true
490
- })
491
- const range = {
492
- index: length,
493
- length: 0,
494
- }
495
- return range
496
- }
497
- }
498
-
499
- function rebuildDelta(delta, cellLine) {
500
- const { cell: cellId, colspan, row: rowId, rowspan } = cellLine
501
- const buildedDelta = delta.reduce((newDelta, op) => {
502
- if (op.insert && typeof op.insert === 'string') {
503
- const lines = splitWithBreak(op.insert)
504
-
505
- lines.forEach((text) => {
506
- if (text === '\n') {
507
- // 对换行增加 table-cell-line 格式,以避免表格断开
508
- newDelta.insert('\n', {
509
- ...op.attributes,
510
- 'table-cell-line': { row: rowId, cell: cellId, rowspan, colspan },
511
- })
512
- }
513
- else {
514
- text = text.endsWith('\r') ? text.slice(0, -1) : text
515
- newDelta.insert(
516
- text,
517
- omit(op.attributes, ['table', 'table-cell-line']),
518
- )
519
- }
520
- })
521
- }
522
- else {
523
- newDelta.insert(op.insert, op.attributes)
524
- }
525
-
526
- return newDelta
527
- }, new Delta())
528
-
529
- return buildedDelta
530
- }
531
-
532
- function replaceStrWhiteSpace(str) {
533
- const isWhiteSpace = value => /^(\u3000|\u0020){1}$/.test(value) // 空白字符
534
- let textWithWhiteSpace = ''
535
- let beginHasChar = false
536
- for (const char of str) {
537
- if (isWhiteSpace(char) && !beginHasChar) {
538
- textWithWhiteSpace += '\u00A0'
539
- }
540
- else {
541
- textWithWhiteSpace += char
542
- beginHasChar = true
543
- }
544
- }
545
- return textWithWhiteSpace
546
- }
547
-
548
- function replaceDeltaWhiteSpace(delta, rootBgColor?) {
549
- return delta.reduce((newDelta, op) => {
550
- // fix: 当粘贴文字颜色和编辑器背景色一致且自身无背景色的情况下移除文字颜色样式,避免误导用户粘贴无效
551
- if (
552
- rootBgColor
553
- && op.attributes
554
- && op.attributes.color
555
- && !op.attributes.background
556
- ) {
557
- const originColor = op.attributes.color
558
- const fontColor
559
- = originColor.indexOf('#') === 0 ? hexToRgbA(originColor) : originColor
560
- if (
561
- fontColor === rootBgColor
562
- || (fontColor === 'rgba(255,255,255,1)'
563
- && rootBgColor === 'rgba(0, 0, 0, 0)')
564
- ) {
565
- delete op.attributes.color
566
- }
567
- }
568
- if (op.insert && typeof op.insert === 'string') {
569
- const lines = splitWithBreak(op.insert)
570
- let insertWithWhiteSpace = ''
571
- lines.forEach((text) => {
572
- insertWithWhiteSpace += replaceStrWhiteSpace(text)
573
- })
574
- newDelta.insert(insertWithWhiteSpace, op.attributes)
575
- }
576
- else {
577
- newDelta.insert(op.insert, op.attributes)
578
- }
579
- return newDelta
580
- }, new Delta())
581
- }
582
-
583
- function renderStyles(html) {
584
- let htmlString = html
585
- // Trim unnecessary parts.
586
- htmlString = htmlString.substring(
587
- htmlString.indexOf('<html '),
588
- htmlString.length,
589
- )
590
- htmlString = htmlString.substring(
591
- 0,
592
- htmlString.lastIndexOf('</html>') + '</html>'.length,
593
- )
594
-
595
- // Add temporary iframe.
596
- const iframe = document.createElement('iframe')
597
- iframe.style.display = 'none'
598
- document.body.appendChild(iframe)
599
-
600
- const iframeDoc = iframe.contentDocument || iframe.contentWindow.document
601
- iframeDoc.open()
602
- iframeDoc.write(htmlString)
603
- iframeDoc.close()
604
-
605
- let collection
606
- let pointer
607
- const rules
608
- = iframeDoc.styleSheets[iframeDoc.styleSheets.length - 1].cssRules
609
-
610
- // Convert internal styles to inline style of respective node.
611
- for (let idx = 0; idx < rules.length; idx++) {
612
- if ((rules[idx] as CSSStyleRule).selectorText === '') {
613
- continue
614
- }
615
- collection = iframeDoc.body.querySelectorAll(
616
- (rules[idx] as CSSStyleRule).selectorText,
617
- )
618
-
619
- for (pointer = 0; pointer < collection.length; pointer++) {
620
- collection[pointer].style.cssText += (
621
- rules[idx] as CSSStyleRule
622
- ).style.cssText
623
- }
624
- }
625
-
626
- const convertedString = iframeDoc.firstChild.outerHTML
627
- // Remove temporary iframe.
628
- iframe.parentNode.removeChild(iframe)
629
-
630
- return convertedString
631
- }
632
-
633
- export default CustomClipboard