@opentiny/fluent-editor 3.25.1 → 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 (274) hide show
  1. package/README.md +105 -105
  2. package/es/attributors/line-height.es.js.map +1 -1
  3. package/es/config/base64-image.es.js.map +1 -1
  4. package/es/config/editor.config.es.js.map +1 -1
  5. package/es/config/editor.utils.es.js.map +1 -1
  6. package/es/config/i18n/en-us.es.js.map +1 -1
  7. package/es/config/i18n/zh-cn.es.js.map +1 -1
  8. package/es/config/index.es.js.map +1 -1
  9. package/es/core/fluent-editor.es.js.map +1 -1
  10. package/es/fluent-editor.es.js.map +1 -1
  11. package/es/formats/soft-break.es.js.map +1 -1
  12. package/es/formats/strike.es.js.map +1 -1
  13. package/es/formats/video.es.js.map +1 -1
  14. package/es/modules/counter.es.js.map +1 -1
  15. package/es/modules/custom-clipboard.es.js.map +1 -1
  16. package/es/modules/custom-image/BlotFormatter.es.js +28 -0
  17. package/es/modules/custom-image/BlotFormatter.es.js.map +1 -1
  18. package/es/modules/custom-image/Options.es.js.map +1 -1
  19. package/es/modules/custom-image/actions/Action.es.js.map +1 -1
  20. package/es/modules/custom-image/actions/CustomResizeAction.es.js.map +1 -1
  21. package/es/modules/custom-image/actions/DeleteAction.es.js.map +1 -1
  22. package/es/modules/custom-image/image-bar.es.js +126 -0
  23. package/es/modules/custom-image/image-bar.es.js.map +1 -0
  24. package/es/modules/custom-image/image.es.js.map +1 -1
  25. package/es/modules/custom-image/specs/BlotSpec.es.js.map +1 -1
  26. package/es/modules/custom-image/specs/CustomImageSpec.es.js.map +1 -1
  27. package/es/modules/custom-image/specs/ImageSpec.es.js.map +1 -1
  28. package/es/modules/custom-uploader.es.js.map +1 -1
  29. package/es/modules/divider.es.js.map +1 -1
  30. package/es/modules/emoji/emoji-list/people.es.js.map +1 -1
  31. package/es/modules/emoji/emoji-list.es.js.map +1 -1
  32. package/es/modules/emoji/emoji-map.es.js.map +1 -1
  33. package/es/modules/emoji/emoji-sprite.es.js.map +1 -1
  34. package/es/modules/emoji/formats/emoji-blot.es.js.map +1 -1
  35. package/es/modules/emoji/index.es.js.map +1 -1
  36. package/es/modules/emoji/modules/emoji.es.js.map +1 -1
  37. package/es/modules/emoji/modules/toolbar-emoji.es.js.map +1 -1
  38. package/es/modules/emoji/utils.es.js.map +1 -1
  39. package/es/modules/file/formats/file.es.js.map +1 -1
  40. package/es/modules/file/index.es.js.map +1 -1
  41. package/es/modules/file/modules/file-bar.es.js.map +1 -1
  42. package/es/modules/global-link/constants.es.js.map +1 -1
  43. package/es/modules/global-link/formats/customer-widget-link.es.js.map +1 -1
  44. package/es/modules/global-link/formats/doc-link.es.js.map +1 -1
  45. package/es/modules/global-link/formats/wiki-link.es.js.map +1 -1
  46. package/es/modules/global-link/formats/work-item-link.es.js.map +1 -1
  47. package/es/modules/global-link/index.es.js.map +1 -1
  48. package/es/modules/global-link/utils/createTable.es.js.map +1 -1
  49. package/es/modules/link/formats/link.es.js.map +1 -1
  50. package/es/modules/link/index.es.js.map +1 -1
  51. package/es/modules/link/modules/tooltip.es.js.map +1 -1
  52. package/es/modules/mathlive/formats.es.js.map +1 -1
  53. package/es/modules/mathlive/index.es.js.map +1 -1
  54. package/es/modules/mathlive/tooltip.es.js.map +1 -1
  55. package/es/modules/mention/Mention.es.js.map +1 -1
  56. package/es/modules/mention/MentionLink.es.js.map +1 -1
  57. package/es/modules/mention/constants.es.js.map +1 -1
  58. package/es/modules/quick-menu.es.js.map +1 -1
  59. package/es/modules/syntax.es.js.map +1 -1
  60. package/es/modules/table/better-table.es.js.map +1 -1
  61. package/es/modules/table/formats/header.es.js.map +1 -1
  62. package/es/modules/table/formats/list.es.js.map +1 -1
  63. package/es/modules/table/formats/table.es.js.map +1 -1
  64. package/es/modules/table/modules/table-column-tool.es.js.map +1 -1
  65. package/es/modules/table/modules/table-operation-menu.es.js.map +1 -1
  66. package/es/modules/table/modules/table-scroll-bar.es.js.map +1 -1
  67. package/es/modules/table/modules/table-selection.es.js.map +1 -1
  68. package/es/modules/table/modules/table-selector.es.js.map +1 -1
  69. package/es/modules/table/table-config.es.js.map +1 -1
  70. package/es/modules/table/utils/index.es.js.map +1 -1
  71. package/es/modules/table/utils/node-matchers.es.js.map +1 -1
  72. package/es/modules/toolbar/better-picker.es.js.map +1 -1
  73. package/es/modules/toolbar/index.es.js.map +1 -1
  74. package/es/themes/snow.es.js.map +1 -1
  75. package/es/tools/screenshot.es.js.map +1 -1
  76. package/es/ui/icons.config.es.js.map +1 -1
  77. package/es/ui/icons.es.js.map +1 -1
  78. package/es/utils/debounce.es.js.map +1 -1
  79. package/es/utils/method.es.js.map +1 -1
  80. package/lib/attributors/line-height.cjs.js.map +1 -1
  81. package/lib/config/base64-image.cjs.js.map +1 -1
  82. package/lib/config/editor.config.cjs.js.map +1 -1
  83. package/lib/config/editor.utils.cjs.js.map +1 -1
  84. package/lib/config/i18n/en-us.cjs.js.map +1 -1
  85. package/lib/config/i18n/zh-cn.cjs.js.map +1 -1
  86. package/lib/config/index.cjs.js.map +1 -1
  87. package/lib/core/fluent-editor.cjs.js.map +1 -1
  88. package/lib/fluent-editor.cjs.js.map +1 -1
  89. package/lib/formats/soft-break.cjs.js.map +1 -1
  90. package/lib/formats/strike.cjs.js.map +1 -1
  91. package/lib/formats/video.cjs.js.map +1 -1
  92. package/lib/modules/counter.cjs.js.map +1 -1
  93. package/lib/modules/custom-clipboard.cjs.js.map +1 -1
  94. package/lib/modules/custom-image/BlotFormatter.cjs.js +28 -0
  95. package/lib/modules/custom-image/BlotFormatter.cjs.js.map +1 -1
  96. package/lib/modules/custom-image/Options.cjs.js.map +1 -1
  97. package/lib/modules/custom-image/actions/Action.cjs.js.map +1 -1
  98. package/lib/modules/custom-image/actions/CustomResizeAction.cjs.js.map +1 -1
  99. package/lib/modules/custom-image/actions/DeleteAction.cjs.js.map +1 -1
  100. package/lib/modules/custom-image/image-bar.cjs.js +126 -0
  101. package/lib/modules/custom-image/image-bar.cjs.js.map +1 -0
  102. package/lib/modules/custom-image/image.cjs.js.map +1 -1
  103. package/lib/modules/custom-image/specs/BlotSpec.cjs.js.map +1 -1
  104. package/lib/modules/custom-image/specs/CustomImageSpec.cjs.js.map +1 -1
  105. package/lib/modules/custom-image/specs/ImageSpec.cjs.js.map +1 -1
  106. package/lib/modules/custom-uploader.cjs.js.map +1 -1
  107. package/lib/modules/divider.cjs.js.map +1 -1
  108. package/lib/modules/emoji/emoji-list/people.cjs.js.map +1 -1
  109. package/lib/modules/emoji/emoji-list.cjs.js.map +1 -1
  110. package/lib/modules/emoji/emoji-map.cjs.js.map +1 -1
  111. package/lib/modules/emoji/emoji-sprite.cjs.js.map +1 -1
  112. package/lib/modules/emoji/formats/emoji-blot.cjs.js.map +1 -1
  113. package/lib/modules/emoji/index.cjs.js.map +1 -1
  114. package/lib/modules/emoji/modules/emoji.cjs.js.map +1 -1
  115. package/lib/modules/emoji/modules/toolbar-emoji.cjs.js.map +1 -1
  116. package/lib/modules/emoji/utils.cjs.js.map +1 -1
  117. package/lib/modules/file/formats/file.cjs.js.map +1 -1
  118. package/lib/modules/file/index.cjs.js.map +1 -1
  119. package/lib/modules/file/modules/file-bar.cjs.js.map +1 -1
  120. package/lib/modules/global-link/constants.cjs.js.map +1 -1
  121. package/lib/modules/global-link/formats/customer-widget-link.cjs.js.map +1 -1
  122. package/lib/modules/global-link/formats/doc-link.cjs.js.map +1 -1
  123. package/lib/modules/global-link/formats/wiki-link.cjs.js.map +1 -1
  124. package/lib/modules/global-link/formats/work-item-link.cjs.js.map +1 -1
  125. package/lib/modules/global-link/index.cjs.js.map +1 -1
  126. package/lib/modules/global-link/utils/createTable.cjs.js.map +1 -1
  127. package/lib/modules/link/formats/link.cjs.js.map +1 -1
  128. package/lib/modules/link/index.cjs.js.map +1 -1
  129. package/lib/modules/link/modules/tooltip.cjs.js.map +1 -1
  130. package/lib/modules/mathlive/formats.cjs.js.map +1 -1
  131. package/lib/modules/mathlive/index.cjs.js.map +1 -1
  132. package/lib/modules/mathlive/tooltip.cjs.js.map +1 -1
  133. package/lib/modules/mention/Mention.cjs.js.map +1 -1
  134. package/lib/modules/mention/MentionLink.cjs.js.map +1 -1
  135. package/lib/modules/mention/constants.cjs.js.map +1 -1
  136. package/lib/modules/quick-menu.cjs.js.map +1 -1
  137. package/lib/modules/syntax.cjs.js.map +1 -1
  138. package/lib/modules/table/better-table.cjs.js.map +1 -1
  139. package/lib/modules/table/formats/header.cjs.js.map +1 -1
  140. package/lib/modules/table/formats/list.cjs.js.map +1 -1
  141. package/lib/modules/table/formats/table.cjs.js.map +1 -1
  142. package/lib/modules/table/modules/table-column-tool.cjs.js.map +1 -1
  143. package/lib/modules/table/modules/table-operation-menu.cjs.js.map +1 -1
  144. package/lib/modules/table/modules/table-scroll-bar.cjs.js.map +1 -1
  145. package/lib/modules/table/modules/table-selection.cjs.js.map +1 -1
  146. package/lib/modules/table/modules/table-selector.cjs.js.map +1 -1
  147. package/lib/modules/table/table-config.cjs.js.map +1 -1
  148. package/lib/modules/table/utils/index.cjs.js.map +1 -1
  149. package/lib/modules/table/utils/node-matchers.cjs.js.map +1 -1
  150. package/lib/modules/toolbar/better-picker.cjs.js.map +1 -1
  151. package/lib/modules/toolbar/index.cjs.js.map +1 -1
  152. package/lib/themes/snow.cjs.js.map +1 -1
  153. package/lib/tools/screenshot.cjs.js.map +1 -1
  154. package/lib/ui/icons.cjs.js.map +1 -1
  155. package/lib/ui/icons.config.cjs.js.map +1 -1
  156. package/lib/utils/debounce.cjs.js.map +1 -1
  157. package/lib/utils/method.cjs.js.map +1 -1
  158. package/package.json +56 -56
  159. package/style.css +193 -0
  160. package/types/attributors/font-size.d.ts +1 -1
  161. package/types/attributors/font-style.d.ts +1 -1
  162. package/types/attributors/index.d.ts +4 -4
  163. package/types/attributors/line-height.d.ts +1 -1
  164. package/types/attributors/text-indent.d.ts +1 -1
  165. package/types/config/base64-image.d.ts +2 -2
  166. package/types/config/editor.config.d.ts +229 -229
  167. package/types/config/editor.utils.d.ts +42 -42
  168. package/types/config/i18n/en-us.d.ts +108 -108
  169. package/types/config/i18n/zh-cn.d.ts +108 -108
  170. package/types/config/index.d.ts +6 -6
  171. package/types/config/types/additional-toolbar-item.interface.d.ts +7 -6
  172. package/types/config/types/content-change.interface.d.ts +13 -13
  173. package/types/config/types/content-save.interface.d.ts +6 -6
  174. package/types/config/types/counter-option.interface.d.ts +8 -7
  175. package/types/config/types/editor-config.interface.d.ts +34 -33
  176. package/types/config/types/editor-modules.interface.d.ts +30 -29
  177. package/types/config/types/editor-toolbar.interface.d.ts +4 -3
  178. package/types/config/types/file-operation.interface.d.ts +11 -10
  179. package/types/config/types/focus-change.interface.d.ts +4 -4
  180. package/types/config/types/fullscreen-module.interface.d.ts +4 -4
  181. package/types/config/types/help-panel-item.interface.d.ts +5 -5
  182. package/types/config/types/help-panel-option.interface.d.ts +6 -5
  183. package/types/config/types/image-module.interface.d.ts +3 -3
  184. package/types/config/types/image-upload.interface.d.ts +6 -5
  185. package/types/config/types/index.d.ts +23 -23
  186. package/types/config/types/load-on-demand-module.interface.d.ts +5 -5
  187. package/types/config/types/mention-module.interface.d.ts +8 -8
  188. package/types/config/types/paste-change.interface.d.ts +5 -4
  189. package/types/config/types/quick-menu-module.interface.d.ts +3 -3
  190. package/types/config/types/range.interface.d.ts +4 -4
  191. package/types/config/types/registry-options.interface.d.ts +5 -5
  192. package/types/config/types/selection-change.interface.d.ts +7 -6
  193. package/types/config/types/toolbar-item.interface.d.ts +13 -13
  194. package/types/config/types/type.d.ts +5 -4
  195. package/types/config/types/validate-error.interface.d.ts +13 -13
  196. package/types/core/fluent-editor.d.ts +10 -9
  197. package/types/fluent-editor.d.ts +2 -1
  198. package/types/formats/soft-break.d.ts +14 -14
  199. package/types/formats/strike.d.ts +7 -7
  200. package/types/formats/video.d.ts +15 -14
  201. package/types/index.d.ts +4 -3
  202. package/types/modules/counter.d.ts +15 -14
  203. package/types/modules/custom-clipboard.d.ts +27 -26
  204. package/types/modules/custom-image/BlotFormatter.d.ts +26 -20
  205. package/types/modules/custom-image/Options.d.ts +36 -36
  206. package/types/modules/custom-image/actions/Action.d.ts +7 -7
  207. package/types/modules/custom-image/actions/CustomResizeAction.d.ts +23 -22
  208. package/types/modules/custom-image/actions/DeleteAction.d.ts +6 -5
  209. package/types/modules/custom-image/image-bar.d.ts +15 -0
  210. package/types/modules/custom-image/image.d.ts +28 -28
  211. package/types/modules/custom-image/specs/BlotSpec.d.ts +11 -10
  212. package/types/modules/custom-image/specs/CustomImageSpec.d.ts +18 -17
  213. package/types/modules/custom-image/specs/ImageSpec.d.ts +9 -8
  214. package/types/modules/custom-uploader.d.ts +30 -29
  215. package/types/modules/divider.d.ts +7 -7
  216. package/types/modules/emoji/emoji-list/index.d.ts +1 -1
  217. package/types/modules/emoji/emoji-list/people.d.ts +1 -1
  218. package/types/modules/emoji/emoji-list.d.ts +2 -2
  219. package/types/modules/emoji/emoji-map.d.ts +2 -2
  220. package/types/modules/emoji/emoji-sprite.d.ts +1 -1
  221. package/types/modules/emoji/formats/emoji-blot.d.ts +13 -13
  222. package/types/modules/emoji/index.d.ts +7 -6
  223. package/types/modules/emoji/modules/emoji.d.ts +38 -38
  224. package/types/modules/emoji/modules/toolbar-emoji.d.ts +8 -8
  225. package/types/modules/emoji/utils.d.ts +1 -1
  226. package/types/modules/file/formats/file.d.ts +15 -15
  227. package/types/modules/file/index.d.ts +10 -9
  228. package/types/modules/file/modules/file-bar.d.ts +14 -14
  229. package/types/modules/global-link/constants.d.ts +3 -3
  230. package/types/modules/global-link/formats/customer-widget-link.d.ts +14 -14
  231. package/types/modules/global-link/formats/doc-link.d.ts +17 -17
  232. package/types/modules/global-link/formats/wiki-link.d.ts +16 -16
  233. package/types/modules/global-link/formats/work-item-link.d.ts +16 -16
  234. package/types/modules/global-link/global-link-panel.d.ts +18 -17
  235. package/types/modules/global-link/index.d.ts +18 -18
  236. package/types/modules/global-link/utils/createTable.d.ts +1 -1
  237. package/types/modules/i18n.d.ts +15 -14
  238. package/types/modules/link/formats/link.d.ts +15 -14
  239. package/types/modules/link/index.d.ts +6 -6
  240. package/types/modules/link/modules/tooltip.d.ts +32 -31
  241. package/types/modules/mathlive/formats.d.ts +21 -20
  242. package/types/modules/mathlive/index.d.ts +7 -6
  243. package/types/modules/mathlive/tooltip.d.ts +15 -14
  244. package/types/modules/mention/Mention.d.ts +54 -53
  245. package/types/modules/mention/MentionLink.d.ts +15 -14
  246. package/types/modules/mention/constants.d.ts +3 -3
  247. package/types/modules/quick-menu.d.ts +21 -20
  248. package/types/modules/syntax.d.ts +13 -12
  249. package/types/modules/table/better-table.d.ts +32 -31
  250. package/types/modules/table/formats/header.d.ts +22 -21
  251. package/types/modules/table/formats/list.d.ts +34 -34
  252. package/types/modules/table/formats/table.d.ts +146 -145
  253. package/types/modules/table/modules/table-column-tool.d.ts +23 -23
  254. package/types/modules/table/modules/table-operation-menu.d.ts +38 -38
  255. package/types/modules/table/modules/table-scroll-bar.d.ts +33 -33
  256. package/types/modules/table/modules/table-selection.d.ts +37 -37
  257. package/types/modules/table/modules/table-selector.d.ts +22 -22
  258. package/types/modules/table/table-config.d.ts +38 -38
  259. package/types/modules/table/utils/index.d.ts +17 -17
  260. package/types/modules/table/utils/node-matchers.d.ts +9 -9
  261. package/types/modules/toolbar/better-picker.d.ts +1 -1
  262. package/types/modules/toolbar/index.d.ts +8 -7
  263. package/types/modules/toolbar/toolbar-tip.d.ts +8 -7
  264. package/types/themes/snow.d.ts +3 -2
  265. package/types/tools/format-painter.d.ts +14 -13
  266. package/types/tools/fullscreen.d.ts +2 -1
  267. package/types/tools/screenshot.d.ts +18 -17
  268. package/types/ui/icons.config.d.ts +36 -36
  269. package/types/ui/icons.d.ts +6 -6
  270. package/types/utils/debounce.d.ts +6 -6
  271. package/types/utils/image.d.ts +1 -1
  272. package/types/utils/is.d.ts +4 -4
  273. package/types/utils/method.d.ts +6 -6
  274. package/types/utils/scroll-lock.d.ts +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"file-bar.cjs.js","sources":["../../../../../src/modules/file/modules/file-bar.ts"],"sourcesContent":["import Quill from 'quill'\nimport { Range } from 'quill/core/selection'\nimport { unshiftString } from '../../../utils/method'\nimport File from '../formats/file'\n\nconst Delta = Quill.imports.delta\n\nexport default class FileBar {\n quill: any\n file: any\n domNode: HTMLElement\n fileRange: any\n template: string\n\n constructor(quill, target) {\n this.quill = quill\n this.file = target\n const fileBlot = Quill.find(target)\n const index = this.quill.getIndex(fileBlot)\n const [fileItem, offset] = this.quill.scroll.descendant(File, index)\n const length = fileItem && fileItem.length()\n this.fileRange = new Range(index - offset, length)\n\n const timestamp = Number(this.file.dataset.lastModified)\n const _lastModifiedDate = this.formatDate(timestamp)\n this.template = [\n // `<a class=\"ql-last-modified-date\" href=\"${this.file.href}\" target=\"_blank\">${this.file.href}</a>`,\n // '<span class=\"ql-split\"></span>',\n // `<a class=\"ql-file-preview\"><i class=\"icon-preview\"></i></a>`,\n `<a class=\"ql-file-download\"><i class=\"icon-download\"></i></a>`,\n '<a class=\"ql-file-delete\"><i class=\"icon-delete\"></i></a>',\n ].join('')\n\n this.createFileBar()\n }\n\n createFileBar() {\n this.domNode = document.createElement('div')\n this.domNode.className = 'ql-file-bar'\n this.domNode.innerHTML = this.template\n // 查看文件\n const filePreview = this.domNode.querySelector('a.ql-file-preview')\n if (filePreview) {\n filePreview.addEventListener('click', (event) => {\n this.operateFile(event, 'view')\n })\n }\n // 下载文件\n const fileDownload = this.domNode.querySelector('a.ql-file-download')\n if (fileDownload) {\n fileDownload.addEventListener('click', (event) => {\n this.operateFile(event, 'download')\n })\n }\n // 删除文件\n const fileDelete = this.domNode.querySelector('a.ql-file-delete')\n if (fileDelete) {\n fileDelete.addEventListener('click', (event) => {\n this.operateFile(event, 'delete')\n const delta = new Delta()\n .retain(this.fileRange.index)\n .delete(this.fileRange.length)\n this.quill.updateContents(delta, Quill.sources.USER)\n this.quill.setSelection(this.fileRange.index)\n })\n }\n\n this.setPosition()\n this.quill.root.parentNode.appendChild(this.domNode)\n }\n\n destroy() {\n if (this.domNode) {\n this.domNode.remove()\n this.domNode = null\n this.file = null\n }\n }\n\n operateFile(event, operate) {\n event.preventDefault()\n const fileId = this.file.dataset.id || ''\n const fileName = this.file.dataset.title || ''\n const fileDownloadUrl = this.file.href || ''\n if (fileId) {\n this.quill.emitter.emit('file-change', {\n operation: operate,\n data: { fileId, fileDownloadUrl },\n })\n }\n if (operate === 'download') {\n const a = document.createElement('a')\n a.href = fileDownloadUrl\n a.target = '_blank'\n a.id = 'exppub'\n a.download = fileName\n document.body.appendChild(a)\n const alink = document.getElementById('exppub')\n alink.click()\n alink.parentNode.removeChild(a)\n }\n this.destroy()\n }\n\n setPosition() {\n if (this.domNode && this.file) {\n const parent = this.quill.root.parentNode\n const child = this.file.querySelector('span')\n const containerRect = parent.getBoundingClientRect()\n const fileRect = child.getBoundingClientRect()\n this.css(this.domNode, {\n left: `${fileRect.left - containerRect.left}px`,\n top: `${fileRect.top - containerRect.top + 10}px`,\n })\n }\n }\n\n css(domNode, rules) {\n if (typeof rules === 'object') {\n for (const prop in rules) {\n if (prop) {\n if (Array.isArray(rules[prop])) {\n // 兼容IE11浏览器\n rules[prop].forEach((val) => {\n domNode.style[prop] = val\n })\n }\n else {\n domNode.style[prop] = rules[prop]\n }\n }\n }\n }\n }\n\n formatDate(timestamp) {\n const date = new Date(timestamp)\n const year = date.getFullYear()\n // TODO\n const month = unshiftString(`${date.getMonth() + 1}`, 2, '0')\n const day = unshiftString(`${date.getDate()}`, 2, '0')\n const hour = unshiftString(`${date.getHours()}`, 2, '0')\n const minute = unshiftString(`${date.getMinutes()}`, 2, '0')\n return Number.isNaN(year) ? '--' : `${year}/${month}/${day} ${hour}:${minute}`\n }\n}\n"],"names":["File","Range","unshiftString"],"mappings":";;;;;;AAKA,MAAM,QAAQ,MAAM,QAAQ;AAE5B,MAAqB,QAAQ;AAAA,EAO3B,YAAY,OAAO,QAAQ;AACzB,SAAK,QAAQ;AACb,SAAK,OAAO;AACN,UAAA,WAAW,MAAM,KAAK,MAAM;AAClC,UAAM,QAAQ,KAAK,MAAM,SAAS,QAAQ;AACpC,UAAA,CAAC,UAAU,MAAM,IAAI,KAAK,MAAM,OAAO,WAAWA,KAAA,SAAM,KAAK;AAC7D,UAAA,SAAS,YAAY,SAAS,OAAO;AAC3C,SAAK,YAAY,IAAIC,UAAAA,MAAM,QAAQ,QAAQ,MAAM;AAEjD,UAAM,YAAY,OAAO,KAAK,KAAK,QAAQ,YAAY;AACjD,UAAA,oBAAoB,KAAK,WAAW,SAAS;AACnD,SAAK,WAAW;AAAA;AAAA;AAAA;AAAA,MAId;AAAA,MACA;AAAA,IAAA,EACA,KAAK,EAAE;AAET,SAAK,cAAc;AAAA,EAAA;AAAA,EAGrB,gBAAgB;AACT,SAAA,UAAU,SAAS,cAAc,KAAK;AAC3C,SAAK,QAAQ,YAAY;AACpB,SAAA,QAAQ,YAAY,KAAK;AAE9B,UAAM,cAAc,KAAK,QAAQ,cAAc,mBAAmB;AAClE,QAAI,aAAa;AACH,kBAAA,iBAAiB,SAAS,CAAC,UAAU;AAC1C,aAAA,YAAY,OAAO,MAAM;AAAA,MAAA,CAC/B;AAAA,IAAA;AAGH,UAAM,eAAe,KAAK,QAAQ,cAAc,oBAAoB;AACpE,QAAI,cAAc;AACH,mBAAA,iBAAiB,SAAS,CAAC,UAAU;AAC3C,aAAA,YAAY,OAAO,UAAU;AAAA,MAAA,CACnC;AAAA,IAAA;AAGH,UAAM,aAAa,KAAK,QAAQ,cAAc,kBAAkB;AAChE,QAAI,YAAY;AACH,iBAAA,iBAAiB,SAAS,CAAC,UAAU;AACzC,aAAA,YAAY,OAAO,QAAQ;AAChC,cAAM,QAAQ,IAAI,MAAM,EACrB,OAAO,KAAK,UAAU,KAAK,EAC3B,OAAO,KAAK,UAAU,MAAM;AAC/B,aAAK,MAAM,eAAe,OAAO,MAAM,QAAQ,IAAI;AACnD,aAAK,MAAM,aAAa,KAAK,UAAU,KAAK;AAAA,MAAA,CAC7C;AAAA,IAAA;AAGH,SAAK,YAAY;AACjB,SAAK,MAAM,KAAK,WAAW,YAAY,KAAK,OAAO;AAAA,EAAA;AAAA,EAGrD,UAAU;AACR,QAAI,KAAK,SAAS;AAChB,WAAK,QAAQ,OAAO;AACpB,WAAK,UAAU;AACf,WAAK,OAAO;AAAA,IAAA;AAAA,EACd;AAAA,EAGF,YAAY,OAAO,SAAS;AAC1B,UAAM,eAAe;AACrB,UAAM,SAAS,KAAK,KAAK,QAAQ,MAAM;AACvC,UAAM,WAAW,KAAK,KAAK,QAAQ,SAAS;AACtC,UAAA,kBAAkB,KAAK,KAAK,QAAQ;AAC1C,QAAI,QAAQ;AACL,WAAA,MAAM,QAAQ,KAAK,eAAe;AAAA,QACrC,WAAW;AAAA,QACX,MAAM,EAAE,QAAQ,gBAAgB;AAAA,MAAA,CACjC;AAAA,IAAA;AAEH,QAAI,YAAY,YAAY;AACpB,YAAA,IAAI,SAAS,cAAc,GAAG;AACpC,QAAE,OAAO;AACT,QAAE,SAAS;AACX,QAAE,KAAK;AACP,QAAE,WAAW;AACJ,eAAA,KAAK,YAAY,CAAC;AACrB,YAAA,QAAQ,SAAS,eAAe,QAAQ;AAC9C,YAAM,MAAM;AACN,YAAA,WAAW,YAAY,CAAC;AAAA,IAAA;AAEhC,SAAK,QAAQ;AAAA,EAAA;AAAA,EAGf,cAAc;AACR,QAAA,KAAK,WAAW,KAAK,MAAM;AACvB,YAAA,SAAS,KAAK,MAAM,KAAK;AAC/B,YAAM,QAAQ,KAAK,KAAK,cAAc,MAAM;AACtC,YAAA,gBAAgB,OAAO,sBAAsB;AAC7C,YAAA,WAAW,MAAM,sBAAsB;AACxC,WAAA,IAAI,KAAK,SAAS;AAAA,QACrB,MAAM,GAAG,SAAS,OAAO,cAAc,IAAI;AAAA,QAC3C,KAAK,GAAG,SAAS,MAAM,cAAc,MAAM,EAAE;AAAA,MAAA,CAC9C;AAAA,IAAA;AAAA,EACH;AAAA,EAGF,IAAI,SAAS,OAAO;AACd,QAAA,OAAO,UAAU,UAAU;AAC7B,iBAAW,QAAQ,OAAO;AACxB,YAAI,MAAM;AACR,cAAI,MAAM,QAAQ,MAAM,IAAI,CAAC,GAAG;AAE9B,kBAAM,IAAI,EAAE,QAAQ,CAAC,QAAQ;AACnB,sBAAA,MAAM,IAAI,IAAI;AAAA,YAAA,CACvB;AAAA,UAAA,OAEE;AACH,oBAAQ,MAAM,IAAI,IAAI,MAAM,IAAI;AAAA,UAAA;AAAA,QAClC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAGF,WAAW,WAAW;AACd,UAAA,OAAO,IAAI,KAAK,SAAS;AACzB,UAAA,OAAO,KAAK,YAAY;AAExB,UAAA,QAAQC,qBAAc,GAAG,KAAK,SAAa,IAAA,CAAC,IAAI,GAAG,GAAG;AACtD,UAAA,MAAMA,qBAAc,GAAG,KAAK,SAAS,IAAI,GAAG,GAAG;AAC/C,UAAA,OAAOA,qBAAc,GAAG,KAAK,UAAU,IAAI,GAAG,GAAG;AACjD,UAAA,SAASA,qBAAc,GAAG,KAAK,YAAY,IAAI,GAAG,GAAG;AAC3D,WAAO,OAAO,MAAM,IAAI,IAAI,OAAO,GAAG,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,IAAI,IAAI,MAAM;AAAA,EAAA;AAEhF;;"}
1
+ {"version":3,"file":"file-bar.cjs.js","sources":["../../../../../src/modules/file/modules/file-bar.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { Range } from 'quill/core/selection'\r\nimport { unshiftString } from '../../../utils/method'\r\nimport File from '../formats/file'\r\n\r\nconst Delta = Quill.imports.delta\r\n\r\nexport default class FileBar {\r\n quill: any\r\n file: any\r\n domNode: HTMLElement\r\n fileRange: any\r\n template: string\r\n\r\n constructor(quill, target) {\r\n this.quill = quill\r\n this.file = target\r\n const fileBlot = Quill.find(target)\r\n const index = this.quill.getIndex(fileBlot)\r\n const [fileItem, offset] = this.quill.scroll.descendant(File, index)\r\n const length = fileItem && fileItem.length()\r\n this.fileRange = new Range(index - offset, length)\r\n\r\n const timestamp = Number(this.file.dataset.lastModified)\r\n const _lastModifiedDate = this.formatDate(timestamp)\r\n this.template = [\r\n // `<a class=\"ql-last-modified-date\" href=\"${this.file.href}\" target=\"_blank\">${this.file.href}</a>`,\r\n // '<span class=\"ql-split\"></span>',\r\n // `<a class=\"ql-file-preview\"><i class=\"icon-preview\"></i></a>`,\r\n `<a class=\"ql-file-download\"><i class=\"icon-download\"></i></a>`,\r\n '<a class=\"ql-file-delete\"><i class=\"icon-delete\"></i></a>',\r\n ].join('')\r\n\r\n this.createFileBar()\r\n }\r\n\r\n createFileBar() {\r\n this.domNode = document.createElement('div')\r\n this.domNode.className = 'ql-file-bar'\r\n this.domNode.innerHTML = this.template\r\n // 查看文件\r\n const filePreview = this.domNode.querySelector('a.ql-file-preview')\r\n if (filePreview) {\r\n filePreview.addEventListener('click', (event) => {\r\n this.operateFile(event, 'view')\r\n })\r\n }\r\n // 下载文件\r\n const fileDownload = this.domNode.querySelector('a.ql-file-download')\r\n if (fileDownload) {\r\n fileDownload.addEventListener('click', (event) => {\r\n this.operateFile(event, 'download')\r\n })\r\n }\r\n // 删除文件\r\n const fileDelete = this.domNode.querySelector('a.ql-file-delete')\r\n if (fileDelete) {\r\n fileDelete.addEventListener('click', (event) => {\r\n this.operateFile(event, 'delete')\r\n const delta = new Delta()\r\n .retain(this.fileRange.index)\r\n .delete(this.fileRange.length)\r\n this.quill.updateContents(delta, Quill.sources.USER)\r\n this.quill.setSelection(this.fileRange.index)\r\n })\r\n }\r\n\r\n this.setPosition()\r\n this.quill.root.parentNode.appendChild(this.domNode)\r\n }\r\n\r\n destroy() {\r\n if (this.domNode) {\r\n this.domNode.remove()\r\n this.domNode = null\r\n this.file = null\r\n }\r\n }\r\n\r\n operateFile(event, operate) {\r\n event.preventDefault()\r\n const fileId = this.file.dataset.id || ''\r\n const fileName = this.file.dataset.title || ''\r\n const fileDownloadUrl = this.file.href || ''\r\n if (fileId) {\r\n this.quill.emitter.emit('file-change', {\r\n operation: operate,\r\n data: { fileId, fileDownloadUrl },\r\n })\r\n }\r\n if (operate === 'download') {\r\n const a = document.createElement('a')\r\n a.href = fileDownloadUrl\r\n a.target = '_blank'\r\n a.id = 'exppub'\r\n a.download = fileName\r\n document.body.appendChild(a)\r\n const alink = document.getElementById('exppub')\r\n alink.click()\r\n alink.parentNode.removeChild(a)\r\n }\r\n this.destroy()\r\n }\r\n\r\n setPosition() {\r\n if (this.domNode && this.file) {\r\n const parent = this.quill.root.parentNode\r\n const child = this.file.querySelector('span')\r\n const containerRect = parent.getBoundingClientRect()\r\n const fileRect = child.getBoundingClientRect()\r\n this.css(this.domNode, {\r\n left: `${fileRect.left - containerRect.left}px`,\r\n top: `${fileRect.top - containerRect.top + 10}px`,\r\n })\r\n }\r\n }\r\n\r\n 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 formatDate(timestamp) {\r\n const date = new Date(timestamp)\r\n const year = date.getFullYear()\r\n // TODO\r\n const month = unshiftString(`${date.getMonth() + 1}`, 2, '0')\r\n const day = unshiftString(`${date.getDate()}`, 2, '0')\r\n const hour = unshiftString(`${date.getHours()}`, 2, '0')\r\n const minute = unshiftString(`${date.getMinutes()}`, 2, '0')\r\n return Number.isNaN(year) ? '--' : `${year}/${month}/${day} ${hour}:${minute}`\r\n }\r\n}\r\n"],"names":["File","Range","unshiftString"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"constants.cjs.js","sources":["../../../../src/modules/global-link/constants.ts"],"sourcesContent":["export const ON_WIKI_LINK_REMOVE = 'wiki-link/remove'\nexport const ON_DOC_LINK_REMOVE = 'doc-link/remove'\nexport const ON_WORK_ITEM_LINK_REMOVE = 'work-item-link/remove'\n"],"names":[],"mappings":";;AAAO,MAAM,sBAAsB;AAC5B,MAAM,qBAAqB;AAC3B,MAAM,2BAA2B;;;;"}
1
+ {"version":3,"file":"constants.cjs.js","sources":["../../../../src/modules/global-link/constants.ts"],"sourcesContent":["export const ON_WIKI_LINK_REMOVE = 'wiki-link/remove'\r\nexport const ON_DOC_LINK_REMOVE = 'doc-link/remove'\r\nexport const ON_WORK_ITEM_LINK_REMOVE = 'work-item-link/remove'\r\n"],"names":[],"mappings":";;AAAO,MAAM,sBAAsB;AAC5B,MAAM,qBAAqB;AAC3B,MAAM,2BAA2B;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"customer-widget-link.cjs.js","sources":["../../../../../src/modules/global-link/formats/customer-widget-link.ts"],"sourcesContent":["import Quill from 'quill'\n\nconst BlockEmbed = Quill.imports['blots/block/embed']\n\n// @dynamic\nclass CustomerWidgetLink extends BlockEmbed {\n static blotName: string\n static tagName: string\n static className: string\n\n static create(value) {\n const node = super.create(value)\n node.setAttribute('data-widget-type', value.type)\n node.setAttribute('data-widget-id', value.id)\n node.setAttribute('src', value.value)\n return node\n }\n\n static value(domNode) {\n return {\n type: domNode.getAttribute('data-widget-type'),\n id: domNode.getAttribute('data-widget-id'),\n value: domNode.getAttribute('src'),\n }\n }\n\n constructor(scroll, domNode, data) {\n super(scroll, domNode, data)\n }\n}\n\nCustomerWidgetLink.blotName = 'customer-widget-link'\nCustomerWidgetLink.tagName = 'img'\nCustomerWidgetLink.className = 'ql-customer-widget-link'\n\nexport default CustomerWidgetLink\n"],"names":[],"mappings":";;;AAEA,MAAM,aAAa,MAAM,QAAQ,mBAAmB;AAGpD,MAAM,2BAA2B,WAAW;AAAA,EAK1C,OAAO,OAAO,OAAO;AACb,UAAA,OAAO,MAAM,OAAO,KAAK;AAC1B,SAAA,aAAa,oBAAoB,MAAM,IAAI;AAC3C,SAAA,aAAa,kBAAkB,MAAM,EAAE;AACvC,SAAA,aAAa,OAAO,MAAM,KAAK;AAC7B,WAAA;AAAA,EAAA;AAAA,EAGT,OAAO,MAAM,SAAS;AACb,WAAA;AAAA,MACL,MAAM,QAAQ,aAAa,kBAAkB;AAAA,MAC7C,IAAI,QAAQ,aAAa,gBAAgB;AAAA,MACzC,OAAO,QAAQ,aAAa,KAAK;AAAA,IACnC;AAAA,EAAA;AAAA,EAGF,YAAY,QAAQ,SAAS,MAAM;AAC3B,UAAA,QAAQ,SAAS,IAAI;AAAA,EAAA;AAE/B;AAEA,mBAAmB,WAAW;AAC9B,mBAAmB,UAAU;AAC7B,mBAAmB,YAAY;;"}
1
+ {"version":3,"file":"customer-widget-link.cjs.js","sources":["../../../../../src/modules/global-link/formats/customer-widget-link.ts"],"sourcesContent":["import Quill from 'quill'\r\n\r\nconst BlockEmbed = Quill.imports['blots/block/embed']\r\n\r\n// @dynamic\r\nclass CustomerWidgetLink extends BlockEmbed {\r\n static blotName: string\r\n static tagName: string\r\n static className: string\r\n\r\n static create(value) {\r\n const node = super.create(value)\r\n node.setAttribute('data-widget-type', value.type)\r\n node.setAttribute('data-widget-id', value.id)\r\n node.setAttribute('src', value.value)\r\n return node\r\n }\r\n\r\n static value(domNode) {\r\n return {\r\n type: domNode.getAttribute('data-widget-type'),\r\n id: domNode.getAttribute('data-widget-id'),\r\n value: domNode.getAttribute('src'),\r\n }\r\n }\r\n\r\n constructor(scroll, domNode, data) {\r\n super(scroll, domNode, data)\r\n }\r\n}\r\n\r\nCustomerWidgetLink.blotName = 'customer-widget-link'\r\nCustomerWidgetLink.tagName = 'img'\r\nCustomerWidgetLink.className = 'ql-customer-widget-link'\r\n\r\nexport default CustomerWidgetLink\r\n"],"names":[],"mappings":";;;AAEA,MAAM,aAAa,MAAM,QAAQ,mBAAmB;AAGpD,MAAM,2BAA2B,WAAW;AAAA,EAK1C,OAAO,OAAO,OAAO;AACb,UAAA,OAAO,MAAM,OAAO,KAAK;AAC1B,SAAA,aAAa,oBAAoB,MAAM,IAAI;AAC3C,SAAA,aAAa,kBAAkB,MAAM,EAAE;AACvC,SAAA,aAAa,OAAO,MAAM,KAAK;AAC7B,WAAA;AAAA,EAAA;AAAA,EAGT,OAAO,MAAM,SAAS;AACb,WAAA;AAAA,MACL,MAAM,QAAQ,aAAa,kBAAkB;AAAA,MAC7C,IAAI,QAAQ,aAAa,gBAAgB;AAAA,MACzC,OAAO,QAAQ,aAAa,KAAK;AAAA,IACnC;AAAA,EAAA;AAAA,EAGF,YAAY,QAAQ,SAAS,MAAM;AAC3B,UAAA,QAAQ,SAAS,IAAI;AAAA,EAAA;AAE/B;AAEA,mBAAmB,WAAW;AAC9B,mBAAmB,UAAU;AAC7B,mBAAmB,YAAY;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"doc-link.cjs.js","sources":["../../../../../src/modules/global-link/formats/doc-link.ts"],"sourcesContent":["import Quill from 'quill'\nimport { ON_DOC_LINK_REMOVE } from '../constants'\n\nconst Embed = Quill.imports['blots/embed']\n\n// @dynamic\nclass DocumentLink extends Embed {\n static blotName: string\n static tagName: string\n static className: string\n docData: any\n scroll: any\n\n static create(value) {\n const node = super.create(value)\n node.setAttribute('href', value.link)\n node.setAttribute('title', value.text)\n node.setAttribute('target', '_blank')\n node.setAttribute('icon-link', value.icon)\n\n const icon = document.createElement('span')\n icon.classList.add('ql-doc-link-icon')\n icon.style.background = `url(${value.icon}) no-repeat center`\n icon.style.backgroundSize = 'contain'\n\n node.insertAdjacentElement('afterbegin', icon)\n const text = document.createTextNode(value.text)\n node.appendChild(text)\n return node\n }\n\n static value(domNode) {\n return {\n link: domNode.getAttribute('href'),\n icon: domNode.getAttribute('icon-link'),\n text: domNode.textContent,\n }\n }\n\n constructor(scroll, domNode, data) {\n super(scroll, domNode, data)\n this.docData = data\n }\n\n remove() {\n this.scroll.emitter.emit(ON_DOC_LINK_REMOVE, this.docData)\n return super.remove()\n }\n}\n\nDocumentLink.blotName = 'doc-link'\nDocumentLink.tagName = 'A'\nDocumentLink.className = 'ql-doc-link'\n\nexport default DocumentLink\n"],"names":["ON_DOC_LINK_REMOVE"],"mappings":";;;;AAGA,MAAM,QAAQ,MAAM,QAAQ,aAAa;AAGzC,MAAM,qBAAqB,MAAM;AAAA,EAO/B,OAAO,OAAO,OAAO;AACb,UAAA,OAAO,MAAM,OAAO,KAAK;AAC1B,SAAA,aAAa,QAAQ,MAAM,IAAI;AAC/B,SAAA,aAAa,SAAS,MAAM,IAAI;AAChC,SAAA,aAAa,UAAU,QAAQ;AAC/B,SAAA,aAAa,aAAa,MAAM,IAAI;AAEnC,UAAA,OAAO,SAAS,cAAc,MAAM;AACrC,SAAA,UAAU,IAAI,kBAAkB;AACrC,SAAK,MAAM,aAAa,OAAO,MAAM,IAAI;AACzC,SAAK,MAAM,iBAAiB;AAEvB,SAAA,sBAAsB,cAAc,IAAI;AAC7C,UAAM,OAAO,SAAS,eAAe,MAAM,IAAI;AAC/C,SAAK,YAAY,IAAI;AACd,WAAA;AAAA,EAAA;AAAA,EAGT,OAAO,MAAM,SAAS;AACb,WAAA;AAAA,MACL,MAAM,QAAQ,aAAa,MAAM;AAAA,MACjC,MAAM,QAAQ,aAAa,WAAW;AAAA,MACtC,MAAM,QAAQ;AAAA,IAChB;AAAA,EAAA;AAAA,EAGF,YAAY,QAAQ,SAAS,MAAM;AAC3B,UAAA,QAAQ,SAAS,IAAI;AAC3B,SAAK,UAAU;AAAA,EAAA;AAAA,EAGjB,SAAS;AACP,SAAK,OAAO,QAAQ,KAAKA,UAAA,oBAAoB,KAAK,OAAO;AACzD,WAAO,MAAM,OAAO;AAAA,EAAA;AAExB;AAEA,aAAa,WAAW;AACxB,aAAa,UAAU;AACvB,aAAa,YAAY;;"}
1
+ {"version":3,"file":"doc-link.cjs.js","sources":["../../../../../src/modules/global-link/formats/doc-link.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { ON_DOC_LINK_REMOVE } from '../constants'\r\n\r\nconst Embed = Quill.imports['blots/embed']\r\n\r\n// @dynamic\r\nclass DocumentLink extends Embed {\r\n static blotName: string\r\n static tagName: string\r\n static className: string\r\n docData: any\r\n scroll: any\r\n\r\n static create(value) {\r\n const node = super.create(value)\r\n node.setAttribute('href', value.link)\r\n node.setAttribute('title', value.text)\r\n node.setAttribute('target', '_blank')\r\n node.setAttribute('icon-link', value.icon)\r\n\r\n const icon = document.createElement('span')\r\n icon.classList.add('ql-doc-link-icon')\r\n icon.style.background = `url(${value.icon}) no-repeat center`\r\n icon.style.backgroundSize = 'contain'\r\n\r\n node.insertAdjacentElement('afterbegin', icon)\r\n const text = document.createTextNode(value.text)\r\n node.appendChild(text)\r\n return node\r\n }\r\n\r\n static value(domNode) {\r\n return {\r\n link: domNode.getAttribute('href'),\r\n icon: domNode.getAttribute('icon-link'),\r\n text: domNode.textContent,\r\n }\r\n }\r\n\r\n constructor(scroll, domNode, data) {\r\n super(scroll, domNode, data)\r\n this.docData = data\r\n }\r\n\r\n remove() {\r\n this.scroll.emitter.emit(ON_DOC_LINK_REMOVE, this.docData)\r\n return super.remove()\r\n }\r\n}\r\n\r\nDocumentLink.blotName = 'doc-link'\r\nDocumentLink.tagName = 'A'\r\nDocumentLink.className = 'ql-doc-link'\r\n\r\nexport default DocumentLink\r\n"],"names":["ON_DOC_LINK_REMOVE"],"mappings":";;;;AAGA,MAAM,QAAQ,MAAM,QAAQ,aAAa;AAGzC,MAAM,qBAAqB,MAAM;AAAA,EAO/B,OAAO,OAAO,OAAO;AACb,UAAA,OAAO,MAAM,OAAO,KAAK;AAC1B,SAAA,aAAa,QAAQ,MAAM,IAAI;AAC/B,SAAA,aAAa,SAAS,MAAM,IAAI;AAChC,SAAA,aAAa,UAAU,QAAQ;AAC/B,SAAA,aAAa,aAAa,MAAM,IAAI;AAEnC,UAAA,OAAO,SAAS,cAAc,MAAM;AACrC,SAAA,UAAU,IAAI,kBAAkB;AACrC,SAAK,MAAM,aAAa,OAAO,MAAM,IAAI;AACzC,SAAK,MAAM,iBAAiB;AAEvB,SAAA,sBAAsB,cAAc,IAAI;AAC7C,UAAM,OAAO,SAAS,eAAe,MAAM,IAAI;AAC/C,SAAK,YAAY,IAAI;AACd,WAAA;AAAA,EAAA;AAAA,EAGT,OAAO,MAAM,SAAS;AACb,WAAA;AAAA,MACL,MAAM,QAAQ,aAAa,MAAM;AAAA,MACjC,MAAM,QAAQ,aAAa,WAAW;AAAA,MACtC,MAAM,QAAQ;AAAA,IAChB;AAAA,EAAA;AAAA,EAGF,YAAY,QAAQ,SAAS,MAAM;AAC3B,UAAA,QAAQ,SAAS,IAAI;AAC3B,SAAK,UAAU;AAAA,EAAA;AAAA,EAGjB,SAAS;AACP,SAAK,OAAO,QAAQ,KAAKA,UAAA,oBAAoB,KAAK,OAAO;AACzD,WAAO,MAAM,OAAO;AAAA,EAAA;AAExB;AAEA,aAAa,WAAW;AACxB,aAAa,UAAU;AACvB,aAAa,YAAY;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"wiki-link.cjs.js","sources":["../../../../../src/modules/global-link/formats/wiki-link.ts"],"sourcesContent":["import Quill from 'quill'\nimport { ON_WIKI_LINK_REMOVE } from '../constants'\n\nconst Embed = Quill.imports['blots/embed']\n\n// @dynamic\nclass WikiLink extends Embed {\n static blotName: string\n static tagName: string\n static className: string\n wikiData: any\n scroll: any\n\n static create(value) {\n const node = super.create(value)\n node.setAttribute('href', value.link)\n node.setAttribute('target', '_blank')\n node.setAttribute('title', value.text)\n node.textContent = value.text\n return node\n }\n\n static value(domNode) {\n return {\n link: domNode.getAttribute('href'),\n text: domNode.textContent,\n }\n }\n\n constructor(scroll, domNode, data) {\n super(scroll, domNode, data)\n this.wikiData = data\n }\n\n remove() {\n this.scroll.emitter.emit(ON_WIKI_LINK_REMOVE, this.wikiData)\n return super.remove()\n }\n}\n\nWikiLink.blotName = 'wiki-link'\nWikiLink.tagName = 'A'\nWikiLink.className = 'ql-wiki-link'\n\nexport default WikiLink\n"],"names":["ON_WIKI_LINK_REMOVE"],"mappings":";;;;AAGA,MAAM,QAAQ,MAAM,QAAQ,aAAa;AAGzC,MAAM,iBAAiB,MAAM;AAAA,EAO3B,OAAO,OAAO,OAAO;AACb,UAAA,OAAO,MAAM,OAAO,KAAK;AAC1B,SAAA,aAAa,QAAQ,MAAM,IAAI;AAC/B,SAAA,aAAa,UAAU,QAAQ;AAC/B,SAAA,aAAa,SAAS,MAAM,IAAI;AACrC,SAAK,cAAc,MAAM;AAClB,WAAA;AAAA,EAAA;AAAA,EAGT,OAAO,MAAM,SAAS;AACb,WAAA;AAAA,MACL,MAAM,QAAQ,aAAa,MAAM;AAAA,MACjC,MAAM,QAAQ;AAAA,IAChB;AAAA,EAAA;AAAA,EAGF,YAAY,QAAQ,SAAS,MAAM;AAC3B,UAAA,QAAQ,SAAS,IAAI;AAC3B,SAAK,WAAW;AAAA,EAAA;AAAA,EAGlB,SAAS;AACP,SAAK,OAAO,QAAQ,KAAKA,UAAA,qBAAqB,KAAK,QAAQ;AAC3D,WAAO,MAAM,OAAO;AAAA,EAAA;AAExB;AAEA,SAAS,WAAW;AACpB,SAAS,UAAU;AACnB,SAAS,YAAY;;"}
1
+ {"version":3,"file":"wiki-link.cjs.js","sources":["../../../../../src/modules/global-link/formats/wiki-link.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { ON_WIKI_LINK_REMOVE } from '../constants'\r\n\r\nconst Embed = Quill.imports['blots/embed']\r\n\r\n// @dynamic\r\nclass WikiLink extends Embed {\r\n static blotName: string\r\n static tagName: string\r\n static className: string\r\n wikiData: any\r\n scroll: any\r\n\r\n static create(value) {\r\n const node = super.create(value)\r\n node.setAttribute('href', value.link)\r\n node.setAttribute('target', '_blank')\r\n node.setAttribute('title', value.text)\r\n node.textContent = value.text\r\n return node\r\n }\r\n\r\n static value(domNode) {\r\n return {\r\n link: domNode.getAttribute('href'),\r\n text: domNode.textContent,\r\n }\r\n }\r\n\r\n constructor(scroll, domNode, data) {\r\n super(scroll, domNode, data)\r\n this.wikiData = data\r\n }\r\n\r\n remove() {\r\n this.scroll.emitter.emit(ON_WIKI_LINK_REMOVE, this.wikiData)\r\n return super.remove()\r\n }\r\n}\r\n\r\nWikiLink.blotName = 'wiki-link'\r\nWikiLink.tagName = 'A'\r\nWikiLink.className = 'ql-wiki-link'\r\n\r\nexport default WikiLink\r\n"],"names":["ON_WIKI_LINK_REMOVE"],"mappings":";;;;AAGA,MAAM,QAAQ,MAAM,QAAQ,aAAa;AAGzC,MAAM,iBAAiB,MAAM;AAAA,EAO3B,OAAO,OAAO,OAAO;AACb,UAAA,OAAO,MAAM,OAAO,KAAK;AAC1B,SAAA,aAAa,QAAQ,MAAM,IAAI;AAC/B,SAAA,aAAa,UAAU,QAAQ;AAC/B,SAAA,aAAa,SAAS,MAAM,IAAI;AACrC,SAAK,cAAc,MAAM;AAClB,WAAA;AAAA,EAAA;AAAA,EAGT,OAAO,MAAM,SAAS;AACb,WAAA;AAAA,MACL,MAAM,QAAQ,aAAa,MAAM;AAAA,MACjC,MAAM,QAAQ;AAAA,IAChB;AAAA,EAAA;AAAA,EAGF,YAAY,QAAQ,SAAS,MAAM;AAC3B,UAAA,QAAQ,SAAS,IAAI;AAC3B,SAAK,WAAW;AAAA,EAAA;AAAA,EAGlB,SAAS;AACP,SAAK,OAAO,QAAQ,KAAKA,UAAA,qBAAqB,KAAK,QAAQ;AAC3D,WAAO,MAAM,OAAO;AAAA,EAAA;AAExB;AAEA,SAAS,WAAW;AACpB,SAAS,UAAU;AACnB,SAAS,YAAY;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"work-item-link.cjs.js","sources":["../../../../../src/modules/global-link/formats/work-item-link.ts"],"sourcesContent":["import Quill from 'quill'\nimport { ON_WORK_ITEM_LINK_REMOVE } from '../constants'\nimport { createTable } from '../utils/createTable'\n\nconst BlockEmbed = Quill.imports['blots/block/embed']\n\n// @dynamic\nclass WorkItemLink extends BlockEmbed {\n static blotName: string\n static tagName: string\n static className: string\n workItemData: any\n scroll: any\n\n static create(value) {\n const node = super.create(value)\n node.setAttribute('contenteditable', 'false')\n node.setAttribute('href', value.link)\n node.setAttribute('__work_item_data__', JSON.stringify(value.data))\n const table = createTable(value.data)\n node.appendChild(table)\n return node\n }\n\n static value(domNode) {\n return {\n link: domNode.getAttribute('href'),\n data: JSON.parse(domNode.getAttribute('__work_item_data__')),\n }\n }\n\n constructor(scroll, domNode, data) {\n super(scroll, domNode, data)\n this.workItemData = data\n }\n\n remove() {\n this.scroll.emitter.emit(ON_WORK_ITEM_LINK_REMOVE, this.workItemData)\n return super.remove()\n }\n}\n\nWorkItemLink.blotName = 'work-item-link'\nWorkItemLink.tagName = 'div'\nWorkItemLink.className = 'ql-work-item-link'\n\nexport default WorkItemLink\n"],"names":["createTable","ON_WORK_ITEM_LINK_REMOVE"],"mappings":";;;;;AAIA,MAAM,aAAa,MAAM,QAAQ,mBAAmB;AAGpD,MAAM,qBAAqB,WAAW;AAAA,EAOpC,OAAO,OAAO,OAAO;AACb,UAAA,OAAO,MAAM,OAAO,KAAK;AAC1B,SAAA,aAAa,mBAAmB,OAAO;AACvC,SAAA,aAAa,QAAQ,MAAM,IAAI;AACpC,SAAK,aAAa,sBAAsB,KAAK,UAAU,MAAM,IAAI,CAAC;AAC5D,UAAA,QAAQA,YAAAA,YAAY,MAAM,IAAI;AACpC,SAAK,YAAY,KAAK;AACf,WAAA;AAAA,EAAA;AAAA,EAGT,OAAO,MAAM,SAAS;AACb,WAAA;AAAA,MACL,MAAM,QAAQ,aAAa,MAAM;AAAA,MACjC,MAAM,KAAK,MAAM,QAAQ,aAAa,oBAAoB,CAAC;AAAA,IAC7D;AAAA,EAAA;AAAA,EAGF,YAAY,QAAQ,SAAS,MAAM;AAC3B,UAAA,QAAQ,SAAS,IAAI;AAC3B,SAAK,eAAe;AAAA,EAAA;AAAA,EAGtB,SAAS;AACP,SAAK,OAAO,QAAQ,KAAKC,UAAA,0BAA0B,KAAK,YAAY;AACpE,WAAO,MAAM,OAAO;AAAA,EAAA;AAExB;AAEA,aAAa,WAAW;AACxB,aAAa,UAAU;AACvB,aAAa,YAAY;;"}
1
+ {"version":3,"file":"work-item-link.cjs.js","sources":["../../../../../src/modules/global-link/formats/work-item-link.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { ON_WORK_ITEM_LINK_REMOVE } from '../constants'\r\nimport { createTable } from '../utils/createTable'\r\n\r\nconst BlockEmbed = Quill.imports['blots/block/embed']\r\n\r\n// @dynamic\r\nclass WorkItemLink extends BlockEmbed {\r\n static blotName: string\r\n static tagName: string\r\n static className: string\r\n workItemData: any\r\n scroll: any\r\n\r\n static create(value) {\r\n const node = super.create(value)\r\n node.setAttribute('contenteditable', 'false')\r\n node.setAttribute('href', value.link)\r\n node.setAttribute('__work_item_data__', JSON.stringify(value.data))\r\n const table = createTable(value.data)\r\n node.appendChild(table)\r\n return node\r\n }\r\n\r\n static value(domNode) {\r\n return {\r\n link: domNode.getAttribute('href'),\r\n data: JSON.parse(domNode.getAttribute('__work_item_data__')),\r\n }\r\n }\r\n\r\n constructor(scroll, domNode, data) {\r\n super(scroll, domNode, data)\r\n this.workItemData = data\r\n }\r\n\r\n remove() {\r\n this.scroll.emitter.emit(ON_WORK_ITEM_LINK_REMOVE, this.workItemData)\r\n return super.remove()\r\n }\r\n}\r\n\r\nWorkItemLink.blotName = 'work-item-link'\r\nWorkItemLink.tagName = 'div'\r\nWorkItemLink.className = 'ql-work-item-link'\r\n\r\nexport default WorkItemLink\r\n"],"names":["createTable","ON_WORK_ITEM_LINK_REMOVE"],"mappings":";;;;;AAIA,MAAM,aAAa,MAAM,QAAQ,mBAAmB;AAGpD,MAAM,qBAAqB,WAAW;AAAA,EAOpC,OAAO,OAAO,OAAO;AACb,UAAA,OAAO,MAAM,OAAO,KAAK;AAC1B,SAAA,aAAa,mBAAmB,OAAO;AACvC,SAAA,aAAa,QAAQ,MAAM,IAAI;AACpC,SAAK,aAAa,sBAAsB,KAAK,UAAU,MAAM,IAAI,CAAC;AAC5D,UAAA,QAAQA,YAAAA,YAAY,MAAM,IAAI;AACpC,SAAK,YAAY,KAAK;AACf,WAAA;AAAA,EAAA;AAAA,EAGT,OAAO,MAAM,SAAS;AACb,WAAA;AAAA,MACL,MAAM,QAAQ,aAAa,MAAM;AAAA,MACjC,MAAM,KAAK,MAAM,QAAQ,aAAa,oBAAoB,CAAC;AAAA,IAC7D;AAAA,EAAA;AAAA,EAGF,YAAY,QAAQ,SAAS,MAAM;AAC3B,UAAA,QAAQ,SAAS,IAAI;AAC3B,SAAK,eAAe;AAAA,EAAA;AAAA,EAGtB,SAAS;AACP,SAAK,OAAO,QAAQ,KAAKC,UAAA,0BAA0B,KAAK,YAAY;AACpE,WAAO,MAAM,OAAO;AAAA,EAAA;AAExB;AAEA,aAAa,WAAW;AACxB,aAAa,UAAU;AACvB,aAAa,YAAY;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../../../../src/modules/global-link/index.ts"],"sourcesContent":["import Quill from 'quill'\nimport { getEventComposedPath } from '../../config/editor.utils'\nimport CustomerWidgetLink from './formats/customer-widget-link'\nimport DocumentLink from './formats/doc-link'\nimport WikiLink from './formats/wiki-link'\nimport WorkItemLink from './formats/work-item-link'\n\nconst Module = Quill.imports['core/module']\nconst Delta = Quill.imports.delta\n\n// @dynamic\nclass GlobalLink extends Module {\n open: boolean\n wrap: any\n panel: any\n quill: any\n\n static register() {\n Quill.register('formats/wiki-link', WikiLink)\n Quill.register('formats/doc-link', DocumentLink)\n Quill.register('formats/work-item-link', WorkItemLink)\n Quill.register('formats/customer-widget-link', CustomerWidgetLink)\n }\n\n constructor(quill, options) {\n super(quill, options)\n const toolbar = quill.getModule('toolbar')\n this.open = false\n this.panel = options.component\n this.wrap = options.wrap\n const globalLinkBtn = toolbar.container && toolbar.container.querySelector('.ql-global-link')\n toolbar.addHandler('global-link', this.handleGlobalLinkButtonClick.bind(this))\n quill.root.addEventListener('click', this.onEditorClick.bind(this))\n document.body.addEventListener('click', (evt) => {\n if (!this.wrap.contains(evt.target) && !(globalLinkBtn && globalLinkBtn.contains(evt.target))) {\n this.open = false\n this.wrap.classList.add('global-link-hide')\n }\n })\n this.panel.wikiLink.subscribe(this.addWikiLink.bind(this))\n this.panel.docLink.subscribe(this.addDocLink.bind(this))\n this.panel.workItemLink.subscribe(this.addWorkItemLink.bind(this))\n if (this.panel.close) {\n this.panel.close.subscribe(this.closePanel.bind(this))\n }\n }\n\n onEditorClick(evt: any) {\n if (!evt.ctrlKey) return\n const path = getEventComposedPath(evt)\n if (!path || path.length <= 0) return\n const linkNode = path.filter((node) => {\n return node.classList && (node.classList.contains(WikiLink.className)\n || node.classList.contains(DocumentLink.className)\n || node.classList.contains(WorkItemLink.className))\n })[0]\n\n if (!linkNode) return\n\n if (linkNode.classList.contains(WikiLink.className)) {\n this.handleLinkClick(linkNode)\n }\n else if (linkNode.classList.contains(DocumentLink.className)) {\n this.handleLinkClick(linkNode)\n }\n else if (linkNode.classList.contains(WorkItemLink.className)) {\n const tableRow = path.filter((node) => {\n return node.tagName && node.tagName.toUpperCase() === 'TR'\n })[0]\n\n if (tableRow) {\n this.handleLinkClick(tableRow)\n }\n }\n }\n\n handleLinkClick(linkNode) {\n const href = linkNode.getAttribute('href')\n if (href) {\n window.open(href)\n }\n }\n\n handleGlobalLinkButtonClick(_value) {\n this.open = !this.open\n this.triggerPanel()\n }\n\n triggerPanel() {\n if (this.open) {\n this.wrap.classList.remove('global-link-hide')\n }\n else {\n this.wrap.classList.add('global-link-hide')\n }\n }\n\n addWikiLink(wikiData) {\n const index = this.quill.getSelection(true).index\n const arr: { link: any, text: any } [] = []\n const delta = arr.reduce.call(wikiData, (op: any, wiki) => {\n op.insert({\n [WikiLink.blotName]: {\n link: wiki.link,\n text: wiki.text,\n },\n })\n return op\n }, new Delta().retain(index))\n\n this.quill.updateContents(delta, Quill.sources.USER)\n this.quill.setSelection(index + 1, Quill.sources.USER)\n if (this.panel.autoClose) {\n this.closePanel()\n }\n }\n\n addDocLink(docData) {\n const index = this.quill.getSelection(true).index\n const arr: { link: any, text: any, icon: any } [] = []\n const delta = arr.reduce.call(docData, (op: any, doc) => {\n op.insert({\n [DocumentLink.blotName]: {\n link: doc.link,\n text: doc.text,\n icon: doc.icon,\n },\n })\n return op\n }, new Delta().retain(index))\n\n this.quill.updateContents(delta, Quill.sources.USER)\n this.quill.setSelection(index + 1, Quill.sources.USER)\n if (this.panel.autoClose) {\n this.closePanel()\n }\n }\n\n addWorkItemLink(workItemData) {\n const index = this.quill.getSelection(true).index\n const arr: { url: any, table: any } [] = []\n const delta = arr.reduce.call(workItemData, (op: any, workItem) => {\n op.insert({\n [WorkItemLink.blotName]: {\n link: workItem.url,\n data: workItem.table,\n },\n })\n return op\n }, new Delta().retain(index))\n\n this.quill.updateContents(delta, Quill.sources.USER)\n this.quill.setSelection(index + 1, Quill.sources.USER)\n if (this.panel.autoClose) {\n this.closePanel()\n }\n }\n\n closePanel() {\n this.open = false\n this.triggerPanel()\n }\n}\n\nexport default GlobalLink\n"],"names":["WikiLink","DocumentLink","WorkItemLink","CustomerWidgetLink","getEventComposedPath"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../../../../src/modules/global-link/index.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { getEventComposedPath } from '../../config/editor.utils'\r\nimport CustomerWidgetLink from './formats/customer-widget-link'\r\nimport DocumentLink from './formats/doc-link'\r\nimport WikiLink from './formats/wiki-link'\r\nimport WorkItemLink from './formats/work-item-link'\r\n\r\nconst Module = Quill.imports['core/module']\r\nconst Delta = Quill.imports.delta\r\n\r\n// @dynamic\r\nclass GlobalLink extends Module {\r\n open: boolean\r\n wrap: any\r\n panel: any\r\n quill: any\r\n\r\n static register() {\r\n Quill.register('formats/wiki-link', WikiLink)\r\n Quill.register('formats/doc-link', DocumentLink)\r\n Quill.register('formats/work-item-link', WorkItemLink)\r\n Quill.register('formats/customer-widget-link', CustomerWidgetLink)\r\n }\r\n\r\n constructor(quill, options) {\r\n super(quill, options)\r\n const toolbar = quill.getModule('toolbar')\r\n this.open = false\r\n this.panel = options.component\r\n this.wrap = options.wrap\r\n const globalLinkBtn = toolbar.container && toolbar.container.querySelector('.ql-global-link')\r\n toolbar.addHandler('global-link', this.handleGlobalLinkButtonClick.bind(this))\r\n quill.root.addEventListener('click', this.onEditorClick.bind(this))\r\n document.body.addEventListener('click', (evt) => {\r\n if (!this.wrap.contains(evt.target) && !(globalLinkBtn && globalLinkBtn.contains(evt.target))) {\r\n this.open = false\r\n this.wrap.classList.add('global-link-hide')\r\n }\r\n })\r\n this.panel.wikiLink.subscribe(this.addWikiLink.bind(this))\r\n this.panel.docLink.subscribe(this.addDocLink.bind(this))\r\n this.panel.workItemLink.subscribe(this.addWorkItemLink.bind(this))\r\n if (this.panel.close) {\r\n this.panel.close.subscribe(this.closePanel.bind(this))\r\n }\r\n }\r\n\r\n onEditorClick(evt: any) {\r\n if (!evt.ctrlKey) return\r\n const path = getEventComposedPath(evt)\r\n if (!path || path.length <= 0) return\r\n const linkNode = path.filter((node) => {\r\n return node.classList && (node.classList.contains(WikiLink.className)\r\n || node.classList.contains(DocumentLink.className)\r\n || node.classList.contains(WorkItemLink.className))\r\n })[0]\r\n\r\n if (!linkNode) return\r\n\r\n if (linkNode.classList.contains(WikiLink.className)) {\r\n this.handleLinkClick(linkNode)\r\n }\r\n else if (linkNode.classList.contains(DocumentLink.className)) {\r\n this.handleLinkClick(linkNode)\r\n }\r\n else if (linkNode.classList.contains(WorkItemLink.className)) {\r\n const tableRow = path.filter((node) => {\r\n return node.tagName && node.tagName.toUpperCase() === 'TR'\r\n })[0]\r\n\r\n if (tableRow) {\r\n this.handleLinkClick(tableRow)\r\n }\r\n }\r\n }\r\n\r\n handleLinkClick(linkNode) {\r\n const href = linkNode.getAttribute('href')\r\n if (href) {\r\n window.open(href)\r\n }\r\n }\r\n\r\n handleGlobalLinkButtonClick(_value) {\r\n this.open = !this.open\r\n this.triggerPanel()\r\n }\r\n\r\n triggerPanel() {\r\n if (this.open) {\r\n this.wrap.classList.remove('global-link-hide')\r\n }\r\n else {\r\n this.wrap.classList.add('global-link-hide')\r\n }\r\n }\r\n\r\n addWikiLink(wikiData) {\r\n const index = this.quill.getSelection(true).index\r\n const arr: { link: any, text: any } [] = []\r\n const delta = arr.reduce.call(wikiData, (op: any, wiki) => {\r\n op.insert({\r\n [WikiLink.blotName]: {\r\n link: wiki.link,\r\n text: wiki.text,\r\n },\r\n })\r\n return op\r\n }, new Delta().retain(index))\r\n\r\n this.quill.updateContents(delta, Quill.sources.USER)\r\n this.quill.setSelection(index + 1, Quill.sources.USER)\r\n if (this.panel.autoClose) {\r\n this.closePanel()\r\n }\r\n }\r\n\r\n addDocLink(docData) {\r\n const index = this.quill.getSelection(true).index\r\n const arr: { link: any, text: any, icon: any } [] = []\r\n const delta = arr.reduce.call(docData, (op: any, doc) => {\r\n op.insert({\r\n [DocumentLink.blotName]: {\r\n link: doc.link,\r\n text: doc.text,\r\n icon: doc.icon,\r\n },\r\n })\r\n return op\r\n }, new Delta().retain(index))\r\n\r\n this.quill.updateContents(delta, Quill.sources.USER)\r\n this.quill.setSelection(index + 1, Quill.sources.USER)\r\n if (this.panel.autoClose) {\r\n this.closePanel()\r\n }\r\n }\r\n\r\n addWorkItemLink(workItemData) {\r\n const index = this.quill.getSelection(true).index\r\n const arr: { url: any, table: any } [] = []\r\n const delta = arr.reduce.call(workItemData, (op: any, workItem) => {\r\n op.insert({\r\n [WorkItemLink.blotName]: {\r\n link: workItem.url,\r\n data: workItem.table,\r\n },\r\n })\r\n return op\r\n }, new Delta().retain(index))\r\n\r\n this.quill.updateContents(delta, Quill.sources.USER)\r\n this.quill.setSelection(index + 1, Quill.sources.USER)\r\n if (this.panel.autoClose) {\r\n this.closePanel()\r\n }\r\n }\r\n\r\n closePanel() {\r\n this.open = false\r\n this.triggerPanel()\r\n }\r\n}\r\n\r\nexport default GlobalLink\r\n"],"names":["WikiLink","DocumentLink","WorkItemLink","CustomerWidgetLink","getEventComposedPath"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"createTable.cjs.js","sources":["../../../../../src/modules/global-link/utils/createTable.ts"],"sourcesContent":["const tableConfig = [\n { title: 'Number', field: 'id', width: '100' },\n { title: 'Title', field: 'subject', width: '200' },\n { title: 'Priority', field: 'priority', width: '100' },\n { title: 'Iteration', field: 'iteration', width: '100' },\n { title: 'Status', field: 'status', width: '100' },\n { title: 'Conductor', field: 'assigned_to', width: '100' },\n]\n\nexport function createTable(data: any[]) {\n const table = document.createElement<'table'>('table')\n createColGroup(table)\n createTableHead(table)\n createTableBody(table, data)\n return table\n}\n\nfunction createColGroup(table: HTMLTableElement) {\n const colGroup = document.createElement<'colgroup'>('colgroup')\n tableConfig.forEach(({ width }) => {\n const col = document.createElement<'col'>('col')\n col.setAttribute('width', width)\n colGroup.appendChild(col)\n })\n table.insertAdjacentElement('afterbegin', colGroup)\n}\n\nfunction createTableHead(table: HTMLTableElement) {\n const tHead = table.createTHead()\n const tRow = tHead.insertRow()\n tableConfig.forEach(({ title }) => {\n const tCell = tRow.insertCell()\n tCell.textContent = title\n })\n return tHead\n}\n\nfunction createTableBody(table: HTMLTableElement, data: any[]) {\n const tBody = table.createTBody();\n\n [].forEach.call(data, (d) => {\n const tRow = tBody.insertRow()\n // @ts-ignore\n tRow.setAttribute('href', d.url)\n tableConfig.forEach(({ field }) => {\n const tCell = tRow.insertCell()\n tCell.classList.add(`work-item-${field}`)\n // @ts-ignore\n tCell.textContent = d[field]\n })\n })\n\n return tBody\n}\n"],"names":[],"mappings":";;AAAA,MAAM,cAAc;AAAA,EAClB,EAAE,OAAO,UAAU,OAAO,MAAM,OAAO,MAAM;AAAA,EAC7C,EAAE,OAAO,SAAS,OAAO,WAAW,OAAO,MAAM;AAAA,EACjD,EAAE,OAAO,YAAY,OAAO,YAAY,OAAO,MAAM;AAAA,EACrD,EAAE,OAAO,aAAa,OAAO,aAAa,OAAO,MAAM;AAAA,EACvD,EAAE,OAAO,UAAU,OAAO,UAAU,OAAO,MAAM;AAAA,EACjD,EAAE,OAAO,aAAa,OAAO,eAAe,OAAO,MAAM;AAC3D;AAEO,SAAS,YAAY,MAAa;AACjC,QAAA,QAAQ,SAAS,cAAuB,OAAO;AACrD,iBAAe,KAAK;AACpB,kBAAgB,KAAK;AACrB,kBAAgB,OAAO,IAAI;AACpB,SAAA;AACT;AAEA,SAAS,eAAe,OAAyB;AACzC,QAAA,WAAW,SAAS,cAA0B,UAAU;AAC9D,cAAY,QAAQ,CAAC,EAAE,YAAY;AAC3B,UAAA,MAAM,SAAS,cAAqB,KAAK;AAC3C,QAAA,aAAa,SAAS,KAAK;AAC/B,aAAS,YAAY,GAAG;AAAA,EAAA,CACzB;AACK,QAAA,sBAAsB,cAAc,QAAQ;AACpD;AAEA,SAAS,gBAAgB,OAAyB;AAC1C,QAAA,QAAQ,MAAM,YAAY;AAC1B,QAAA,OAAO,MAAM,UAAU;AAC7B,cAAY,QAAQ,CAAC,EAAE,YAAY;AAC3B,UAAA,QAAQ,KAAK,WAAW;AAC9B,UAAM,cAAc;AAAA,EAAA,CACrB;AACM,SAAA;AACT;AAEA,SAAS,gBAAgB,OAAyB,MAAa;AACvD,QAAA,QAAQ,MAAM,YAAY;AAEhC,GAAA,EAAG,QAAQ,KAAK,MAAM,CAAC,MAAM;AACrB,UAAA,OAAO,MAAM,UAAU;AAExB,SAAA,aAAa,QAAQ,EAAE,GAAG;AAC/B,gBAAY,QAAQ,CAAC,EAAE,YAAY;AAC3B,YAAA,QAAQ,KAAK,WAAW;AAC9B,YAAM,UAAU,IAAI,aAAa,KAAK,EAAE;AAElC,YAAA,cAAc,EAAE,KAAK;AAAA,IAAA,CAC5B;AAAA,EAAA,CACF;AAEM,SAAA;AACT;;"}
1
+ {"version":3,"file":"createTable.cjs.js","sources":["../../../../../src/modules/global-link/utils/createTable.ts"],"sourcesContent":["const tableConfig = [\r\n { title: 'Number', field: 'id', width: '100' },\r\n { title: 'Title', field: 'subject', width: '200' },\r\n { title: 'Priority', field: 'priority', width: '100' },\r\n { title: 'Iteration', field: 'iteration', width: '100' },\r\n { title: 'Status', field: 'status', width: '100' },\r\n { title: 'Conductor', field: 'assigned_to', width: '100' },\r\n]\r\n\r\nexport function createTable(data: any[]) {\r\n const table = document.createElement<'table'>('table')\r\n createColGroup(table)\r\n createTableHead(table)\r\n createTableBody(table, data)\r\n return table\r\n}\r\n\r\nfunction createColGroup(table: HTMLTableElement) {\r\n const colGroup = document.createElement<'colgroup'>('colgroup')\r\n tableConfig.forEach(({ width }) => {\r\n const col = document.createElement<'col'>('col')\r\n col.setAttribute('width', width)\r\n colGroup.appendChild(col)\r\n })\r\n table.insertAdjacentElement('afterbegin', colGroup)\r\n}\r\n\r\nfunction createTableHead(table: HTMLTableElement) {\r\n const tHead = table.createTHead()\r\n const tRow = tHead.insertRow()\r\n tableConfig.forEach(({ title }) => {\r\n const tCell = tRow.insertCell()\r\n tCell.textContent = title\r\n })\r\n return tHead\r\n}\r\n\r\nfunction createTableBody(table: HTMLTableElement, data: any[]) {\r\n const tBody = table.createTBody();\r\n\r\n [].forEach.call(data, (d) => {\r\n const tRow = tBody.insertRow()\r\n // @ts-ignore\r\n tRow.setAttribute('href', d.url)\r\n tableConfig.forEach(({ field }) => {\r\n const tCell = tRow.insertCell()\r\n tCell.classList.add(`work-item-${field}`)\r\n // @ts-ignore\r\n tCell.textContent = d[field]\r\n })\r\n })\r\n\r\n return tBody\r\n}\r\n"],"names":[],"mappings":";;AAAA,MAAM,cAAc;AAAA,EAClB,EAAE,OAAO,UAAU,OAAO,MAAM,OAAO,MAAM;AAAA,EAC7C,EAAE,OAAO,SAAS,OAAO,WAAW,OAAO,MAAM;AAAA,EACjD,EAAE,OAAO,YAAY,OAAO,YAAY,OAAO,MAAM;AAAA,EACrD,EAAE,OAAO,aAAa,OAAO,aAAa,OAAO,MAAM;AAAA,EACvD,EAAE,OAAO,UAAU,OAAO,UAAU,OAAO,MAAM;AAAA,EACjD,EAAE,OAAO,aAAa,OAAO,eAAe,OAAO,MAAM;AAC3D;AAEO,SAAS,YAAY,MAAa;AACjC,QAAA,QAAQ,SAAS,cAAuB,OAAO;AACrD,iBAAe,KAAK;AACpB,kBAAgB,KAAK;AACrB,kBAAgB,OAAO,IAAI;AACpB,SAAA;AACT;AAEA,SAAS,eAAe,OAAyB;AACzC,QAAA,WAAW,SAAS,cAA0B,UAAU;AAC9D,cAAY,QAAQ,CAAC,EAAE,YAAY;AAC3B,UAAA,MAAM,SAAS,cAAqB,KAAK;AAC3C,QAAA,aAAa,SAAS,KAAK;AAC/B,aAAS,YAAY,GAAG;AAAA,EAAA,CACzB;AACK,QAAA,sBAAsB,cAAc,QAAQ;AACpD;AAEA,SAAS,gBAAgB,OAAyB;AAC1C,QAAA,QAAQ,MAAM,YAAY;AAC1B,QAAA,OAAO,MAAM,UAAU;AAC7B,cAAY,QAAQ,CAAC,EAAE,YAAY;AAC3B,UAAA,QAAQ,KAAK,WAAW;AAC9B,UAAM,cAAc;AAAA,EAAA,CACrB;AACM,SAAA;AACT;AAEA,SAAS,gBAAgB,OAAyB,MAAa;AACvD,QAAA,QAAQ,MAAM,YAAY;AAEhC,GAAA,EAAG,QAAQ,KAAK,MAAM,CAAC,MAAM;AACrB,UAAA,OAAO,MAAM,UAAU;AAExB,SAAA,aAAa,QAAQ,EAAE,GAAG;AAC/B,gBAAY,QAAQ,CAAC,EAAE,YAAY;AAC3B,YAAA,QAAQ,KAAK,WAAW;AAC9B,YAAM,UAAU,IAAI,aAAa,KAAK,EAAE;AAElC,YAAA,cAAc,EAAE,KAAK;AAAA,IAAA,CAC5B;AAAA,EAAA,CACF;AAEM,SAAA;AACT;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"link.cjs.js","sources":["../../../../../src/modules/link/formats/link.ts"],"sourcesContent":["import type TypeInline from 'quill/blots/inline'\nimport Quill from 'quill'\nimport { hadProtocol, sanitize } from '../../../config/editor.utils'\n\nconst Inline = Quill.import('blots/inline') as typeof TypeInline\n\n// @dynamic\nexport default class Link extends Inline {\n static blotName: string\n static tagName: string\n static SANITIZED_URL: string\n static PROTOCOL_WHITELIST: string[]\n static className: string\n static autoProtocol: string = ''\n static create(value) {\n const node = super.create(value)\n let href = value\n if (!hadProtocol(href) && this.autoProtocol) {\n href = `${this.autoProtocol}://${value}`\n }\n href = this.sanitize(href)\n node.setAttribute('href', href)\n node.setAttribute('target', '_blank')\n return node\n }\n\n static formats(domNode) {\n return domNode.getAttribute('href')\n }\n\n static sanitize(url) {\n return sanitize(url, this.PROTOCOL_WHITELIST) ? url : this.SANITIZED_URL\n }\n\n format(name, value) {\n if (name !== this.statics.blotName || [false, null].includes(value)) {\n super.format(name, value)\n }\n else {\n this.domNode.setAttribute('href', Link.sanitize(value))\n }\n }\n}\nLink.blotName = 'link'\nLink.tagName = 'A'\nLink.SANITIZED_URL = 'about:blank'\nLink.PROTOCOL_WHITELIST = ['http', 'https', 'mailto', 'tel']\nLink.className = 'ql-normal-link'\n"],"names":["hadProtocol","sanitize","Link"],"mappings":";;;;;AAIA,MAAM,SAAS,MAAM,OAAO,cAAc;cAG1C,mBAAkC,OAAO;AAAA,EAOvC,OAAO,OAAO,OAAO;AACb,UAAA,OAAO,MAAM,OAAO,KAAK;AAC/B,QAAI,OAAO;AACX,QAAI,CAACA,aAAAA,YAAY,IAAI,KAAK,KAAK,cAAc;AAC3C,aAAO,GAAG,KAAK,YAAY,MAAM,KAAK;AAAA,IAAA;AAEjC,WAAA,KAAK,SAAS,IAAI;AACpB,SAAA,aAAa,QAAQ,IAAI;AACzB,SAAA,aAAa,UAAU,QAAQ;AAC7B,WAAA;AAAA,EAAA;AAAA,EAGT,OAAO,QAAQ,SAAS;AACf,WAAA,QAAQ,aAAa,MAAM;AAAA,EAAA;AAAA,EAGpC,OAAO,SAAS,KAAK;AACnB,WAAOC,aAAAA,SAAS,KAAK,KAAK,kBAAkB,IAAI,MAAM,KAAK;AAAA,EAAA;AAAA,EAG7D,OAAO,MAAM,OAAO;AACd,QAAA,SAAS,KAAK,QAAQ,YAAY,CAAC,OAAO,IAAI,EAAE,SAAS,KAAK,GAAG;AAC7D,YAAA,OAAO,MAAM,KAAK;AAAA,IAAA,OAErB;AACH,WAAK,QAAQ,aAAa,QAAQ,GAAK,SAAS,KAAK,CAAC;AAAA,IAAA;AAAA,EACxD;AAEJ,GA7BE,GAAO,eAAuB,IANhC;AAoCAC,OAAK,WAAW;AAChBA,OAAK,UAAU;AACfA,OAAK,gBAAgB;AACrBA,OAAK,qBAAqB,CAAC,QAAQ,SAAS,UAAU,KAAK;AAC3DA,OAAK,YAAY;;"}
1
+ {"version":3,"file":"link.cjs.js","sources":["../../../../../src/modules/link/formats/link.ts"],"sourcesContent":["import type TypeInline from 'quill/blots/inline'\r\nimport Quill from 'quill'\r\nimport { hadProtocol, sanitize } from '../../../config/editor.utils'\r\n\r\nconst Inline = Quill.import('blots/inline') as typeof TypeInline\r\n\r\n// @dynamic\r\nexport default class Link extends Inline {\r\n static blotName: string\r\n static tagName: string\r\n static SANITIZED_URL: string\r\n static PROTOCOL_WHITELIST: string[]\r\n static className: string\r\n static autoProtocol: string = ''\r\n static create(value) {\r\n const node = super.create(value)\r\n let href = value\r\n if (!hadProtocol(href) && this.autoProtocol) {\r\n href = `${this.autoProtocol}://${value}`\r\n }\r\n href = this.sanitize(href)\r\n node.setAttribute('href', href)\r\n node.setAttribute('target', '_blank')\r\n return node\r\n }\r\n\r\n static formats(domNode) {\r\n return domNode.getAttribute('href')\r\n }\r\n\r\n static sanitize(url) {\r\n return sanitize(url, this.PROTOCOL_WHITELIST) ? url : this.SANITIZED_URL\r\n }\r\n\r\n format(name, value) {\r\n if (name !== this.statics.blotName || [false, null].includes(value)) {\r\n super.format(name, value)\r\n }\r\n else {\r\n this.domNode.setAttribute('href', Link.sanitize(value))\r\n }\r\n }\r\n}\r\nLink.blotName = 'link'\r\nLink.tagName = 'A'\r\nLink.SANITIZED_URL = 'about:blank'\r\nLink.PROTOCOL_WHITELIST = ['http', 'https', 'mailto', 'tel']\r\nLink.className = 'ql-normal-link'\r\n"],"names":["hadProtocol","sanitize","Link"],"mappings":";;;;;AAIA,MAAM,SAAS,MAAM,OAAO,cAAc;cAG1C,mBAAkC,OAAO;AAAA,EAOvC,OAAO,OAAO,OAAO;AACb,UAAA,OAAO,MAAM,OAAO,KAAK;AAC/B,QAAI,OAAO;AACX,QAAI,CAACA,aAAAA,YAAY,IAAI,KAAK,KAAK,cAAc;AAC3C,aAAO,GAAG,KAAK,YAAY,MAAM,KAAK;AAAA,IAAA;AAEjC,WAAA,KAAK,SAAS,IAAI;AACpB,SAAA,aAAa,QAAQ,IAAI;AACzB,SAAA,aAAa,UAAU,QAAQ;AAC7B,WAAA;AAAA,EAAA;AAAA,EAGT,OAAO,QAAQ,SAAS;AACf,WAAA,QAAQ,aAAa,MAAM;AAAA,EAAA;AAAA,EAGpC,OAAO,SAAS,KAAK;AACnB,WAAOC,aAAAA,SAAS,KAAK,KAAK,kBAAkB,IAAI,MAAM,KAAK;AAAA,EAAA;AAAA,EAG7D,OAAO,MAAM,OAAO;AACd,QAAA,SAAS,KAAK,QAAQ,YAAY,CAAC,OAAO,IAAI,EAAE,SAAS,KAAK,GAAG;AAC7D,YAAA,OAAO,MAAM,KAAK;AAAA,IAAA,OAErB;AACH,WAAK,QAAQ,aAAa,QAAQ,GAAK,SAAS,KAAK,CAAC;AAAA,IAAA;AAAA,EACxD;AAEJ,GA7BE,GAAO,eAAuB,IANhC;AAoCAC,OAAK,WAAW;AAChBA,OAAK,UAAU;AACfA,OAAK,gBAAgB;AACrBA,OAAK,qBAAqB,CAAC,QAAQ,SAAS,UAAU,KAAK;AAC3DA,OAAK,YAAY;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../../../../src/modules/link/index.ts"],"sourcesContent":["import Quill from 'quill'\nimport LinkBlot from './formats/link'\nimport Tooltip from './modules/tooltip'\n\nconst icons = Quill.import('ui/icons')\nconst SnowTheme = Quill.import('themes/snow')\nconst Module = Quill.import('core/module')\n\n// @dynamic\nclass Link extends Module {\n static register() {\n Quill.register('blots/link', LinkBlot, true)\n }\n\n constructor(quill, options) {\n super(quill, options)\n }\n}\n\n// @ts-expect-error\nSnowTheme.prototype.extendToolbar = function (toolbar) {\n toolbar.container.classList.add('ql-snow')\n this.buildButtons(toolbar.container.querySelectorAll('button'), icons)\n this.buildPickers(toolbar.container.querySelectorAll('select'), icons)\n this.tooltip = new Tooltip(this.quill, this.options.bounds)\n if (toolbar.container.querySelector('.ql-link')) {\n this.quill.keyboard.addBinding(\n { key: 'k', shortKey: true },\n (_range, context) => {\n toolbar.handlers.link.call(toolbar, !context.format.link)\n },\n )\n }\n}\n\nexport default Link\n"],"names":["LinkBlot","Tooltip"],"mappings":";;;;;AAIA,MAAM,QAAQ,MAAM,OAAO,UAAU;AACrC,MAAM,YAAY,MAAM,OAAO,aAAa;AAC5C,MAAM,SAAS,MAAM,OAAO,aAAa;AAGzC,MAAM,aAAa,OAAO;AAAA,EACxB,OAAO,WAAW;AACV,UAAA,SAAS,cAAcA,KAAAA,SAAU,IAAI;AAAA,EAAA;AAAA,EAG7C,YAAY,OAAO,SAAS;AAC1B,UAAM,OAAO,OAAO;AAAA,EAAA;AAExB;AAGA,UAAU,UAAU,gBAAgB,SAAU,SAAS;AAC7C,UAAA,UAAU,UAAU,IAAI,SAAS;AACzC,OAAK,aAAa,QAAQ,UAAU,iBAAiB,QAAQ,GAAG,KAAK;AACrE,OAAK,aAAa,QAAQ,UAAU,iBAAiB,QAAQ,GAAG,KAAK;AACrE,OAAK,UAAU,IAAIC,gBAAQ,KAAK,OAAO,KAAK,QAAQ,MAAM;AAC1D,MAAI,QAAQ,UAAU,cAAc,UAAU,GAAG;AAC/C,SAAK,MAAM,SAAS;AAAA,MAClB,EAAE,KAAK,KAAK,UAAU,KAAK;AAAA,MAC3B,CAAC,QAAQ,YAAY;AACnB,gBAAQ,SAAS,KAAK,KAAK,SAAS,CAAC,QAAQ,OAAO,IAAI;AAAA,MAAA;AAAA,IAE5D;AAAA,EAAA;AAEJ;;"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../../../../src/modules/link/index.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport LinkBlot from './formats/link'\r\nimport Tooltip from './modules/tooltip'\r\n\r\nconst icons = Quill.import('ui/icons')\r\nconst SnowTheme = Quill.import('themes/snow')\r\nconst Module = Quill.import('core/module')\r\n\r\n// @dynamic\r\nclass Link extends Module {\r\n static register() {\r\n Quill.register('blots/link', LinkBlot, true)\r\n }\r\n\r\n constructor(quill, options) {\r\n super(quill, options)\r\n }\r\n}\r\n\r\n// @ts-expect-error\r\nSnowTheme.prototype.extendToolbar = function (toolbar) {\r\n toolbar.container.classList.add('ql-snow')\r\n this.buildButtons(toolbar.container.querySelectorAll('button'), icons)\r\n this.buildPickers(toolbar.container.querySelectorAll('select'), icons)\r\n this.tooltip = new Tooltip(this.quill, this.options.bounds)\r\n if (toolbar.container.querySelector('.ql-link')) {\r\n this.quill.keyboard.addBinding(\r\n { key: 'k', shortKey: true },\r\n (_range, context) => {\r\n toolbar.handlers.link.call(toolbar, !context.format.link)\r\n },\r\n )\r\n }\r\n}\r\n\r\nexport default Link\r\n"],"names":["LinkBlot","Tooltip"],"mappings":";;;;;AAIA,MAAM,QAAQ,MAAM,OAAO,UAAU;AACrC,MAAM,YAAY,MAAM,OAAO,aAAa;AAC5C,MAAM,SAAS,MAAM,OAAO,aAAa;AAGzC,MAAM,aAAa,OAAO;AAAA,EACxB,OAAO,WAAW;AACV,UAAA,SAAS,cAAcA,KAAAA,SAAU,IAAI;AAAA,EAAA;AAAA,EAG7C,YAAY,OAAO,SAAS;AAC1B,UAAM,OAAO,OAAO;AAAA,EAAA;AAExB;AAGA,UAAU,UAAU,gBAAgB,SAAU,SAAS;AAC7C,UAAA,UAAU,UAAU,IAAI,SAAS;AACzC,OAAK,aAAa,QAAQ,UAAU,iBAAiB,QAAQ,GAAG,KAAK;AACrE,OAAK,aAAa,QAAQ,UAAU,iBAAiB,QAAQ,GAAG,KAAK;AACrE,OAAK,UAAU,IAAIC,gBAAQ,KAAK,OAAO,KAAK,QAAQ,MAAM;AAC1D,MAAI,QAAQ,UAAU,cAAc,UAAU,GAAG;AAC/C,SAAK,MAAM,SAAS;AAAA,MAClB,EAAE,KAAK,KAAK,UAAU,KAAK;AAAA,MAC3B,CAAC,QAAQ,YAAY;AACnB,gBAAQ,SAAS,KAAK,KAAK,SAAS,CAAC,QAAQ,OAAO,IAAI;AAAA,MAAA;AAAA,IAE5D;AAAA,EAAA;AAEJ;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"tooltip.cjs.js","sources":["../../../../../src/modules/link/modules/tooltip.ts"],"sourcesContent":["import Quill, { Range } from 'quill'\nimport Emitter from 'quill/core/emitter'\nimport { BaseTooltip } from 'quill/themes/base'\nimport { CHANGE_LANGUAGE_EVENT, LANG_CONF } from '../../../config'\nimport { hadProtocol, isNullOrUndefined } from '../../../config/editor.utils'\nimport { debounce } from '../../../utils/debounce'\nimport LinkBlot from '../formats/link'\n\n// @dynamic\nexport default class Tooltip extends BaseTooltip {\n static TEMPLATE: string = [\n `<input type=\"text\" data-formula=\"e=mc^2\" data-link=\"${LANG_CONF['en-US'].linkplaceholder}\" data-video=\"Embed URL\" style=\"width: 225px;\">`,\n '<span class=\"ql-split\"></span>',\n '<a class=\"ql-preview\"><i class=\"icon-share\"></i></a>',\n '<a class=\"ql-remove\"><i class=\"icon-delete\"></i></a>',\n ].join('')\n\n isInputFocus: boolean\n isHover: boolean\n debouncedHideToolTip: any\n debouncedShowToolTip: any\n hide: any\n linkRange: any\n quill: any\n root: any\n restoreFocus: any\n textbox: any\n boundsContainer: any\n options: { autoProtocol: string } = {\n autoProtocol: 'https',\n }\n\n constructor(quill, bounds) {\n super(quill, bounds)\n this.setTemplate()\n this.isInputFocus = false\n this.isHover = false\n\n this.resolveOptions()\n LinkBlot.autoProtocol = this.options.autoProtocol\n this.debouncedHideToolTip = debounce(this.hideToolTip, 300)\n this.debouncedShowToolTip = debounce(this.showToolTip, 300)\n this.quill.emitter.on(CHANGE_LANGUAGE_EVENT, () => {\n this.setTemplate()\n })\n }\n\n setTemplate() {\n this.root.innerHTML = [\n `<input type=\"text\" data-formula=\"e=mc^2\" data-link=\"${this.quill.getLangText('linkplaceholder')}\" data-video=\"Embed URL\" style=\"width: 225px;\">`,\n '<span class=\"ql-split\"></span>',\n '<a class=\"ql-preview\"><i class=\"icon-share\"></i></a>',\n '<a class=\"ql-remove\"><i class=\"icon-delete\"></i></a>',\n ].join('')\n this.textbox = this.root.querySelector('input[type=\"text\"]')\n this.listen()\n }\n\n resolveOptions() {\n this.options = {\n autoProtocol: 'https',\n }\n const value = this.quill.options.autoProtocol\n if (value && typeof value === 'string') {\n this.options.autoProtocol = value\n }\n else if (typeof value === 'boolean' && !value) {\n this.options.autoProtocol = ''\n }\n }\n\n shouldHide() {\n return !this.isHover && !this.isInputFocus\n }\n\n hideToolTip() {\n if (this.shouldHide()) {\n this.hide()\n }\n }\n\n showToolTip(name, value, range) {\n if (!this.shouldHide()) {\n this.edit(name, value, range)\n }\n }\n\n handleMouseLeave() {\n this.isHover = false\n this.debouncedHideToolTip()\n }\n\n handleMouseEnter(event) {\n const isTooltipShow = !this.root.classList.contains('ql-hidden')\n if (isTooltipShow) {\n return\n }\n\n if (this.isInputFocus) {\n this.save()\n }\n this.isHover = true\n const linkNode = event.target\n const preview = LinkBlot.formats(linkNode)\n if (preview.startsWith('#')) {\n return\n }\n const linkBlot = Quill.find(linkNode)\n const index = this.quill.getIndex(linkBlot)\n const [link, offset] = this.quill.scroll.descendant(\n LinkBlot,\n index,\n )\n const length = link && link.length()\n this.linkRange = new Range(index - offset, length)\n this.debouncedShowToolTip('link', preview, this.linkRange)\n }\n\n listen() {\n super.listen()\n this.root.querySelector('a.ql-remove').addEventListener('click', (event) => {\n if (!isNullOrUndefined(this.linkRange)) {\n const range = this.linkRange\n this.restoreFocus()\n this.quill.formatText(range, 'link', false, Emitter.sources.API)\n delete this.linkRange\n }\n event.preventDefault()\n this.hide()\n })\n\n this.quill.root.addEventListener(\n 'mouseover',\n (event) => {\n if (\n (event.target.tagName.toUpperCase() !== 'A'\n || !event.target.classList.contains(LinkBlot.className))\n && !event.target.closest(`a.${LinkBlot.className}`)\n ) {\n return\n }\n this.handleMouseEnter(event)\n },\n false,\n )\n\n this.quill.root.addEventListener(\n 'mouseout',\n (event) => {\n if (event.target.tagName.toUpperCase() !== 'A' && !event.target.closest(`a.${LinkBlot.className}`)) {\n return\n }\n this.handleMouseLeave()\n },\n false,\n )\n\n this.root.addEventListener(\n 'mouseenter',\n () => {\n this.isHover = true\n },\n false,\n )\n\n this.root.addEventListener('mouseleave', this.handleMouseLeave.bind(this), false)\n\n this.root.querySelector('a.ql-preview').addEventListener('click', (event) => {\n const link = LinkBlot.sanitize(this.textbox.value)\n window.open(link, '_blank')\n event.preventDefault()\n })\n this.root.querySelector('input[type=\"text\"]').addEventListener('focus', () => {\n this.isInputFocus = true\n })\n this.root.querySelector('input[type=\"text\"]').addEventListener('blur', () => {\n this.isInputFocus = false\n this.save()\n })\n this.quill.on(\n Emitter.events.SELECTION_CHANGE,\n (range, _oldRange, source) => {\n if (isNullOrUndefined(range)) return\n if (source === Emitter.sources.USER) {\n const [link, offset] = this.quill.scroll.descendant(\n LinkBlot,\n range.index,\n )\n\n if (!isNullOrUndefined(link)) {\n this.linkRange = new Range(range.index - offset, link.length())\n const preview = LinkBlot.formats(link.domNode)\n if (!preview.startsWith('#')) {\n this.edit('link', preview, this.linkRange)\n }\n return\n }\n }\n if (this.shouldHide()) {\n this.hide()\n }\n },\n )\n this.quill.on(\n Emitter.events.TEXT_CHANGE,\n () => {\n const selection = this.quill.getSelection()\n const index = selection && selection.index\n setTimeout(() => {\n const link = this.quill.scroll.descendant(\n LinkBlot,\n index,\n )[0]\n if (!link) {\n this.handleMouseLeave()\n }\n })\n },\n )\n }\n\n save() {\n let value = this.textbox.value\n if (!value) return\n this.textbox.value = ''\n switch (this.root.getAttribute('data-mode')) {\n case 'link': {\n const { scrollTop } = this.quill.root\n if (this.options.autoProtocol) {\n value = this.addHttpProtocol(value)\n }\n\n if (this.linkRange) {\n this.quill.formatText(\n this.linkRange,\n 'link',\n value,\n Emitter.sources.USER,\n )\n this.restoreFocus()\n }\n else {\n this.restoreFocus()\n this.quill.format('link', value, Emitter.sources.USER)\n }\n this.quill.root.scrollTop = scrollTop\n break\n }\n case 'formula': {\n const range = this.quill.getSelection(true)\n if (!isNullOrUndefined(range)) {\n const index = range.index + range.length\n this.quill.insertEmbed(\n index,\n this.root.getAttribute('data-mode'),\n value,\n Emitter.sources.USER,\n )\n if (this.root.getAttribute('data-mode') === 'formula') {\n this.quill.insertText(index + 1, ' ', Emitter.sources.USER)\n }\n this.quill.setSelection(index + 2, Emitter.sources.USER)\n }\n break\n }\n case 'video': {\n const range = this.quill.getSelection(true)\n this.quill.insertText(range.index, '\\n', Emitter.sources.USER)\n this.quill.insertEmbed(range.index + 1, 'video', { src: value }, Emitter.sources.USER)\n this.quill.insertText(range.index + 2, '\\n', Emitter.sources.USER)\n this.quill.setSelection(range.index + 3, Emitter.sources.SILENT)\n this.textbox.value = ''\n this.hide()\n break\n }\n default:\n }\n }\n\n position(reference) {\n const left = reference.left\n const top = reference.bottom + this.quill.root.scrollTop\n this.root.style.left = `${left}px`\n this.root.style.top = `${top}px`\n this.root.classList.remove('ql-flip')\n const containerBounds = this.boundsContainer.getBoundingClientRect()\n const rootBounds = this.root.getBoundingClientRect()\n let shift = 0\n if (rootBounds.right > containerBounds.right) {\n shift = containerBounds.right - rootBounds.right\n this.root.style.left = `${left + shift}px`\n }\n if (rootBounds.left < containerBounds.left) {\n shift = containerBounds.left - rootBounds.left\n this.root.style.left = `${left + shift}px`\n }\n if (rootBounds.bottom > containerBounds.bottom) {\n const height = rootBounds.bottom - rootBounds.top\n const verticalShift = reference.bottom - reference.top + height\n const fixedTop = top - verticalShift\n this.root.style.top = `${fixedTop < 0 ? this.quill.root.scrollTop + reference.top : fixedTop}px`\n this.root.classList.add('ql-flip')\n }\n return shift\n }\n\n // @ts-expect-error\n edit(mode: string = 'link', preview = null, range) {\n this.linkRange = range || this.quill.selection.savedRange\n this.root.classList.remove('ql-hidden')\n this.root.classList.add('ql-editing')\n if (!isNullOrUndefined(preview)) {\n this.textbox.value = preview\n }\n else if (mode !== this.root.getAttribute('data-mode')) {\n this.textbox.value = ''\n }\n this.position(this.quill.getBounds(range || this.quill.selection.savedRange))\n if (this.textbox.value === '') {\n this.textbox.focus()\n }\n this.textbox.setAttribute(\n 'placeholder',\n this.textbox.getAttribute(`data-${mode}`) || '',\n )\n this.root.setAttribute('data-mode', mode)\n }\n\n show() {\n super.show()\n this.root.removeAttribute('data-mode')\n }\n\n addHttpProtocol(url: string) {\n let result = url\n if (!url) {\n return ''\n }\n if (!hadProtocol(url)) {\n result = `${this.options.autoProtocol}://${url}`\n }\n return result\n }\n}\n"],"names":["BaseTooltip","LinkBlot","debounce","CHANGE_LANGUAGE_EVENT","link","Range","isNullOrUndefined","hadProtocol","LANG_CONF"],"mappings":"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"}
1
+ {"version":3,"file":"tooltip.cjs.js","sources":["../../../../../src/modules/link/modules/tooltip.ts"],"sourcesContent":["import Quill, { Range } from 'quill'\r\nimport Emitter from 'quill/core/emitter'\r\nimport { BaseTooltip } from 'quill/themes/base'\r\nimport { CHANGE_LANGUAGE_EVENT, LANG_CONF } from '../../../config'\r\nimport { hadProtocol, isNullOrUndefined } from '../../../config/editor.utils'\r\nimport { debounce } from '../../../utils/debounce'\r\nimport LinkBlot from '../formats/link'\r\n\r\n// @dynamic\r\nexport default class Tooltip extends BaseTooltip {\r\n static TEMPLATE: string = [\r\n `<input type=\"text\" data-formula=\"e=mc^2\" data-link=\"${LANG_CONF['en-US'].linkplaceholder}\" data-video=\"Embed URL\" style=\"width: 225px;\">`,\r\n '<span class=\"ql-split\"></span>',\r\n '<a class=\"ql-preview\"><i class=\"icon-share\"></i></a>',\r\n '<a class=\"ql-remove\"><i class=\"icon-delete\"></i></a>',\r\n ].join('')\r\n\r\n isInputFocus: boolean\r\n isHover: boolean\r\n debouncedHideToolTip: any\r\n debouncedShowToolTip: any\r\n hide: any\r\n linkRange: any\r\n quill: any\r\n root: any\r\n restoreFocus: any\r\n textbox: any\r\n boundsContainer: any\r\n options: { autoProtocol: string } = {\r\n autoProtocol: 'https',\r\n }\r\n\r\n constructor(quill, bounds) {\r\n super(quill, bounds)\r\n this.setTemplate()\r\n this.isInputFocus = false\r\n this.isHover = false\r\n\r\n this.resolveOptions()\r\n LinkBlot.autoProtocol = this.options.autoProtocol\r\n this.debouncedHideToolTip = debounce(this.hideToolTip, 300)\r\n this.debouncedShowToolTip = debounce(this.showToolTip, 300)\r\n this.quill.emitter.on(CHANGE_LANGUAGE_EVENT, () => {\r\n this.setTemplate()\r\n })\r\n }\r\n\r\n setTemplate() {\r\n this.root.innerHTML = [\r\n `<input type=\"text\" data-formula=\"e=mc^2\" data-link=\"${this.quill.getLangText('linkplaceholder')}\" data-video=\"Embed URL\" style=\"width: 225px;\">`,\r\n '<span class=\"ql-split\"></span>',\r\n '<a class=\"ql-preview\"><i class=\"icon-share\"></i></a>',\r\n '<a class=\"ql-remove\"><i class=\"icon-delete\"></i></a>',\r\n ].join('')\r\n this.textbox = this.root.querySelector('input[type=\"text\"]')\r\n this.listen()\r\n }\r\n\r\n resolveOptions() {\r\n this.options = {\r\n autoProtocol: 'https',\r\n }\r\n const value = this.quill.options.autoProtocol\r\n if (value && typeof value === 'string') {\r\n this.options.autoProtocol = value\r\n }\r\n else if (typeof value === 'boolean' && !value) {\r\n this.options.autoProtocol = ''\r\n }\r\n }\r\n\r\n shouldHide() {\r\n return !this.isHover && !this.isInputFocus\r\n }\r\n\r\n hideToolTip() {\r\n if (this.shouldHide()) {\r\n this.hide()\r\n }\r\n }\r\n\r\n showToolTip(name, value, range) {\r\n if (!this.shouldHide()) {\r\n this.edit(name, value, range)\r\n }\r\n }\r\n\r\n handleMouseLeave() {\r\n this.isHover = false\r\n this.debouncedHideToolTip()\r\n }\r\n\r\n handleMouseEnter(event) {\r\n const isTooltipShow = !this.root.classList.contains('ql-hidden')\r\n if (isTooltipShow) {\r\n return\r\n }\r\n\r\n if (this.isInputFocus) {\r\n this.save()\r\n }\r\n this.isHover = true\r\n const linkNode = event.target\r\n const preview = LinkBlot.formats(linkNode)\r\n if (preview.startsWith('#')) {\r\n return\r\n }\r\n const linkBlot = Quill.find(linkNode)\r\n const index = this.quill.getIndex(linkBlot)\r\n const [link, offset] = this.quill.scroll.descendant(\r\n LinkBlot,\r\n index,\r\n )\r\n const length = link && link.length()\r\n this.linkRange = new Range(index - offset, length)\r\n this.debouncedShowToolTip('link', preview, this.linkRange)\r\n }\r\n\r\n listen() {\r\n super.listen()\r\n this.root.querySelector('a.ql-remove').addEventListener('click', (event) => {\r\n if (!isNullOrUndefined(this.linkRange)) {\r\n const range = this.linkRange\r\n this.restoreFocus()\r\n this.quill.formatText(range, 'link', false, Emitter.sources.API)\r\n delete this.linkRange\r\n }\r\n event.preventDefault()\r\n this.hide()\r\n })\r\n\r\n this.quill.root.addEventListener(\r\n 'mouseover',\r\n (event) => {\r\n if (\r\n (event.target.tagName.toUpperCase() !== 'A'\r\n || !event.target.classList.contains(LinkBlot.className))\r\n && !event.target.closest(`a.${LinkBlot.className}`)\r\n ) {\r\n return\r\n }\r\n this.handleMouseEnter(event)\r\n },\r\n false,\r\n )\r\n\r\n this.quill.root.addEventListener(\r\n 'mouseout',\r\n (event) => {\r\n if (event.target.tagName.toUpperCase() !== 'A' && !event.target.closest(`a.${LinkBlot.className}`)) {\r\n return\r\n }\r\n this.handleMouseLeave()\r\n },\r\n false,\r\n )\r\n\r\n this.root.addEventListener(\r\n 'mouseenter',\r\n () => {\r\n this.isHover = true\r\n },\r\n false,\r\n )\r\n\r\n this.root.addEventListener('mouseleave', this.handleMouseLeave.bind(this), false)\r\n\r\n this.root.querySelector('a.ql-preview').addEventListener('click', (event) => {\r\n const link = LinkBlot.sanitize(this.textbox.value)\r\n window.open(link, '_blank')\r\n event.preventDefault()\r\n })\r\n this.root.querySelector('input[type=\"text\"]').addEventListener('focus', () => {\r\n this.isInputFocus = true\r\n })\r\n this.root.querySelector('input[type=\"text\"]').addEventListener('blur', () => {\r\n this.isInputFocus = false\r\n this.save()\r\n })\r\n this.quill.on(\r\n Emitter.events.SELECTION_CHANGE,\r\n (range, _oldRange, source) => {\r\n if (isNullOrUndefined(range)) return\r\n if (source === Emitter.sources.USER) {\r\n const [link, offset] = this.quill.scroll.descendant(\r\n LinkBlot,\r\n range.index,\r\n )\r\n\r\n if (!isNullOrUndefined(link)) {\r\n this.linkRange = new Range(range.index - offset, link.length())\r\n const preview = LinkBlot.formats(link.domNode)\r\n if (!preview.startsWith('#')) {\r\n this.edit('link', preview, this.linkRange)\r\n }\r\n return\r\n }\r\n }\r\n if (this.shouldHide()) {\r\n this.hide()\r\n }\r\n },\r\n )\r\n this.quill.on(\r\n Emitter.events.TEXT_CHANGE,\r\n () => {\r\n const selection = this.quill.getSelection()\r\n const index = selection && selection.index\r\n setTimeout(() => {\r\n const link = this.quill.scroll.descendant(\r\n LinkBlot,\r\n index,\r\n )[0]\r\n if (!link) {\r\n this.handleMouseLeave()\r\n }\r\n })\r\n },\r\n )\r\n }\r\n\r\n save() {\r\n let value = this.textbox.value\r\n if (!value) return\r\n this.textbox.value = ''\r\n switch (this.root.getAttribute('data-mode')) {\r\n case 'link': {\r\n const { scrollTop } = this.quill.root\r\n if (this.options.autoProtocol) {\r\n value = this.addHttpProtocol(value)\r\n }\r\n\r\n if (this.linkRange) {\r\n this.quill.formatText(\r\n this.linkRange,\r\n 'link',\r\n value,\r\n Emitter.sources.USER,\r\n )\r\n this.restoreFocus()\r\n }\r\n else {\r\n this.restoreFocus()\r\n this.quill.format('link', value, Emitter.sources.USER)\r\n }\r\n this.quill.root.scrollTop = scrollTop\r\n break\r\n }\r\n case 'formula': {\r\n const range = this.quill.getSelection(true)\r\n if (!isNullOrUndefined(range)) {\r\n const index = range.index + range.length\r\n this.quill.insertEmbed(\r\n index,\r\n this.root.getAttribute('data-mode'),\r\n value,\r\n Emitter.sources.USER,\r\n )\r\n if (this.root.getAttribute('data-mode') === 'formula') {\r\n this.quill.insertText(index + 1, ' ', Emitter.sources.USER)\r\n }\r\n this.quill.setSelection(index + 2, Emitter.sources.USER)\r\n }\r\n break\r\n }\r\n case 'video': {\r\n const range = this.quill.getSelection(true)\r\n this.quill.insertText(range.index, '\\n', Emitter.sources.USER)\r\n this.quill.insertEmbed(range.index + 1, 'video', { src: value }, Emitter.sources.USER)\r\n this.quill.insertText(range.index + 2, '\\n', Emitter.sources.USER)\r\n this.quill.setSelection(range.index + 3, Emitter.sources.SILENT)\r\n this.textbox.value = ''\r\n this.hide()\r\n break\r\n }\r\n default:\r\n }\r\n }\r\n\r\n position(reference) {\r\n const left = reference.left\r\n const top = reference.bottom + this.quill.root.scrollTop\r\n this.root.style.left = `${left}px`\r\n this.root.style.top = `${top}px`\r\n this.root.classList.remove('ql-flip')\r\n const containerBounds = this.boundsContainer.getBoundingClientRect()\r\n const rootBounds = this.root.getBoundingClientRect()\r\n let shift = 0\r\n if (rootBounds.right > containerBounds.right) {\r\n shift = containerBounds.right - rootBounds.right\r\n this.root.style.left = `${left + shift}px`\r\n }\r\n if (rootBounds.left < containerBounds.left) {\r\n shift = containerBounds.left - rootBounds.left\r\n this.root.style.left = `${left + shift}px`\r\n }\r\n if (rootBounds.bottom > containerBounds.bottom) {\r\n const height = rootBounds.bottom - rootBounds.top\r\n const verticalShift = reference.bottom - reference.top + height\r\n const fixedTop = top - verticalShift\r\n this.root.style.top = `${fixedTop < 0 ? this.quill.root.scrollTop + reference.top : fixedTop}px`\r\n this.root.classList.add('ql-flip')\r\n }\r\n return shift\r\n }\r\n\r\n // @ts-expect-error\r\n edit(mode: string = 'link', preview = null, range) {\r\n this.linkRange = range || this.quill.selection.savedRange\r\n this.root.classList.remove('ql-hidden')\r\n this.root.classList.add('ql-editing')\r\n if (!isNullOrUndefined(preview)) {\r\n this.textbox.value = preview\r\n }\r\n else if (mode !== this.root.getAttribute('data-mode')) {\r\n this.textbox.value = ''\r\n }\r\n this.position(this.quill.getBounds(range || this.quill.selection.savedRange))\r\n if (this.textbox.value === '') {\r\n this.textbox.focus()\r\n }\r\n this.textbox.setAttribute(\r\n 'placeholder',\r\n this.textbox.getAttribute(`data-${mode}`) || '',\r\n )\r\n this.root.setAttribute('data-mode', mode)\r\n }\r\n\r\n show() {\r\n super.show()\r\n this.root.removeAttribute('data-mode')\r\n }\r\n\r\n addHttpProtocol(url: string) {\r\n let result = url\r\n if (!url) {\r\n return ''\r\n }\r\n if (!hadProtocol(url)) {\r\n result = `${this.options.autoProtocol}://${url}`\r\n }\r\n return result\r\n }\r\n}\r\n"],"names":["BaseTooltip","LinkBlot","debounce","CHANGE_LANGUAGE_EVENT","link","Range","isNullOrUndefined","hadProtocol","LANG_CONF"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"formats.cjs.js","sources":["../../../../src/modules/mathlive/formats.ts"],"sourcesContent":["import type { MathfieldElement } from 'mathlive'\nimport type { Root } from 'parchment'\nimport Quill from 'quill'\n\nconst Parchment = Quill.import('parchment')\ntype MathliveBlotMode = 'dialog' | 'only-read'\nexport default class MathliveBlot extends Parchment.EmbedBlot {\n static blotName = 'mathlive'\n static tagName = 'math-field'\n static className = 'ql-math-field'\n mode: MathliveBlotMode\n\n static create(obj: { value: string, mode: MathliveBlotMode }) {\n const el = super.create() as MathfieldElement\n el.setAttribute('mode', obj.mode)\n el.classList.add('view')\n el.innerHTML = obj.value\n el.setValue(obj.value)\n return el\n }\n\n static value(domNode: MathfieldElement) {\n return {\n value: domNode.value,\n mode: domNode.getAttribute('mode'),\n }\n }\n\n constructor(scroll: Root, public domNode: MathfieldElement) {\n super(scroll, domNode)\n domNode.setAttribute('contenteditable', 'false')\n this.mode = (domNode.getAttribute('mode') || 'only-read') as MathliveBlotMode\n }\n\n html() {\n const formula = this.domNode.value\n return `<math-field class=\"ql-math-field view\" contenteditable=\"false\" mode=\"${this.mode}\">${formula}</math-field>`\n }\n}\n"],"names":[],"mappings":";;;AAIA,MAAM,YAAY,MAAM,OAAO,WAAW;AAErB,MAAA,gBAAA,MAAA,sBAAqB,UAAU,UAAU;AAAA,EAsB5D,YAAY,QAAqB,SAA2B;AAC1D,UAAM,QAAQ,OAAO;AADU,SAAA,UAAA;AAEvB,YAAA,aAAa,mBAAmB,OAAO;AAC/C,SAAK,OAAQ,QAAQ,aAAa,MAAM,KAAK;AAAA,EAAA;AAAA,EAnB/C,OAAO,OAAO,KAAgD;AACtD,UAAA,KAAK,MAAM,OAAO;AACrB,OAAA,aAAa,QAAQ,IAAI,IAAI;AAC7B,OAAA,UAAU,IAAI,MAAM;AACvB,OAAG,YAAY,IAAI;AAChB,OAAA,SAAS,IAAI,KAAK;AACd,WAAA;AAAA,EAAA;AAAA,EAGT,OAAO,MAAM,SAA2B;AAC/B,WAAA;AAAA,MACL,OAAO,QAAQ;AAAA,MACf,MAAM,QAAQ,aAAa,MAAM;AAAA,IACnC;AAAA,EAAA;AAAA,EASF,OAAO;AACC,UAAA,UAAU,KAAK,QAAQ;AAC7B,WAAO,wEAAwE,KAAK,IAAI,KAAK,OAAO;AAAA,EAAA;AAExG;AA/BE,cAAO,WAAW;AAClB,cAAO,UAAU;AACjB,cAAO,YAAY;AAHA,IAAA,eAAA;;"}
1
+ {"version":3,"file":"formats.cjs.js","sources":["../../../../src/modules/mathlive/formats.ts"],"sourcesContent":["import type { MathfieldElement } from 'mathlive'\r\nimport type { Root } from 'parchment'\r\nimport Quill from 'quill'\r\n\r\nconst Parchment = Quill.import('parchment')\r\ntype MathliveBlotMode = 'dialog' | 'only-read'\r\nexport default class MathliveBlot extends Parchment.EmbedBlot {\r\n static blotName = 'mathlive'\r\n static tagName = 'math-field'\r\n static className = 'ql-math-field'\r\n mode: MathliveBlotMode\r\n\r\n static create(obj: { value: string, mode: MathliveBlotMode }) {\r\n const el = super.create() as MathfieldElement\r\n el.setAttribute('mode', obj.mode)\r\n el.classList.add('view')\r\n el.innerHTML = obj.value\r\n el.setValue(obj.value)\r\n return el\r\n }\r\n\r\n static value(domNode: MathfieldElement) {\r\n return {\r\n value: domNode.value,\r\n mode: domNode.getAttribute('mode'),\r\n }\r\n }\r\n\r\n constructor(scroll: Root, public domNode: MathfieldElement) {\r\n super(scroll, domNode)\r\n domNode.setAttribute('contenteditable', 'false')\r\n this.mode = (domNode.getAttribute('mode') || 'only-read') as MathliveBlotMode\r\n }\r\n\r\n html() {\r\n const formula = this.domNode.value\r\n return `<math-field class=\"ql-math-field view\" contenteditable=\"false\" mode=\"${this.mode}\">${formula}</math-field>`\r\n }\r\n}\r\n"],"names":[],"mappings":";;;AAIA,MAAM,YAAY,MAAM,OAAO,WAAW;AAErB,MAAA,gBAAA,MAAA,sBAAqB,UAAU,UAAU;AAAA,EAsB5D,YAAY,QAAqB,SAA2B;AAC1D,UAAM,QAAQ,OAAO;AADU,SAAA,UAAA;AAEvB,YAAA,aAAa,mBAAmB,OAAO;AAC/C,SAAK,OAAQ,QAAQ,aAAa,MAAM,KAAK;AAAA,EAAA;AAAA,EAnB/C,OAAO,OAAO,KAAgD;AACtD,UAAA,KAAK,MAAM,OAAO;AACrB,OAAA,aAAa,QAAQ,IAAI,IAAI;AAC7B,OAAA,UAAU,IAAI,MAAM;AACvB,OAAG,YAAY,IAAI;AAChB,OAAA,SAAS,IAAI,KAAK;AACd,WAAA;AAAA,EAAA;AAAA,EAGT,OAAO,MAAM,SAA2B;AAC/B,WAAA;AAAA,MACL,OAAO,QAAQ;AAAA,MACf,MAAM,QAAQ,aAAa,MAAM;AAAA,IACnC;AAAA,EAAA;AAAA,EASF,OAAO;AACC,UAAA,UAAU,KAAK,QAAQ;AAC7B,WAAO,wEAAwE,KAAK,IAAI,KAAK,OAAO;AAAA,EAAA;AAExG;AA/BE,cAAO,WAAW;AAClB,cAAO,UAAU;AACjB,cAAO,YAAY;AAHA,IAAA,eAAA;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../../../../src/modules/mathlive/index.ts"],"sourcesContent":["import Quill from 'quill'\nimport MathliveBlot from './formats'\nimport MathliveTooltip from './tooltip'\n\nexport default class MathliveModule {\n tooltip: MathliveTooltip\n constructor(public quill: Quill) {\n this.tooltip = new MathliveTooltip(quill)\n\n this.quill.root.addEventListener(\n 'click',\n (e: MouseEvent) => {\n if (!this.quill.isEnabled()) return\n const path = e.composedPath() as HTMLElement[]\n if (!path || path.length <= 0) return\n\n const mathliveNode = path.find(node => node.tagName && node.tagName.toUpperCase() === MathliveBlot.tagName.toUpperCase() && node.classList.contains(MathliveBlot.className))\n const mathliveBlot = Quill.find(mathliveNode) as MathliveBlot | null\n if (mathliveBlot) {\n const { value, mode } = MathliveBlot.value(mathliveBlot.domNode)\n if (mode === 'dialog') {\n this.createDialog(value)\n }\n }\n },\n true,\n )\n }\n\n createDialog(value?: string) {\n this.tooltip.edit(value)\n }\n}\n"],"names":["MathliveTooltip","MathliveBlot"],"mappings":";;;;;AAIA,MAAqB,eAAe;AAAA,EAElC,YAAmB,OAAc;AAAd,SAAA,QAAA;AACZ,SAAA,UAAU,IAAIA,QAAA,QAAgB,KAAK;AAExC,SAAK,MAAM,KAAK;AAAA,MACd;AAAA,MACA,CAAC,MAAkB;AACjB,YAAI,CAAC,KAAK,MAAM,YAAa;AACvB,cAAA,OAAO,EAAE,aAAa;AAC5B,YAAI,CAAC,QAAQ,KAAK,UAAU,EAAG;AAE/B,cAAM,eAAe,KAAK,KAAK,UAAQ,KAAK,WAAW,KAAK,QAAQ,kBAAkBC,gBAAa,QAAQ,iBAAiB,KAAK,UAAU,SAASA,gBAAa,SAAS,CAAC;AACrK,cAAA,eAAe,MAAM,KAAK,YAAY;AAC5C,YAAI,cAAc;AAChB,gBAAM,EAAE,OAAO,SAASA,QAAa,QAAA,MAAM,aAAa,OAAO;AAC/D,cAAI,SAAS,UAAU;AACrB,iBAAK,aAAa,KAAK;AAAA,UAAA;AAAA,QACzB;AAAA,MAEJ;AAAA,MACA;AAAA,IACF;AAAA,EAAA;AAAA,EAGF,aAAa,OAAgB;AACtB,SAAA,QAAQ,KAAK,KAAK;AAAA,EAAA;AAE3B;;"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../../../../src/modules/mathlive/index.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport MathliveBlot from './formats'\r\nimport MathliveTooltip from './tooltip'\r\n\r\nexport default class MathliveModule {\r\n tooltip: MathliveTooltip\r\n constructor(public quill: Quill) {\r\n this.tooltip = new MathliveTooltip(quill)\r\n\r\n this.quill.root.addEventListener(\r\n 'click',\r\n (e: MouseEvent) => {\r\n if (!this.quill.isEnabled()) return\r\n const path = e.composedPath() as HTMLElement[]\r\n if (!path || path.length <= 0) return\r\n\r\n const mathliveNode = path.find(node => node.tagName && node.tagName.toUpperCase() === MathliveBlot.tagName.toUpperCase() && node.classList.contains(MathliveBlot.className))\r\n const mathliveBlot = Quill.find(mathliveNode) as MathliveBlot | null\r\n if (mathliveBlot) {\r\n const { value, mode } = MathliveBlot.value(mathliveBlot.domNode)\r\n if (mode === 'dialog') {\r\n this.createDialog(value)\r\n }\r\n }\r\n },\r\n true,\r\n )\r\n }\r\n\r\n createDialog(value?: string) {\r\n this.tooltip.edit(value)\r\n }\r\n}\r\n"],"names":["MathliveTooltip","MathliveBlot"],"mappings":";;;;;AAIA,MAAqB,eAAe;AAAA,EAElC,YAAmB,OAAc;AAAd,SAAA,QAAA;AACZ,SAAA,UAAU,IAAIA,QAAA,QAAgB,KAAK;AAExC,SAAK,MAAM,KAAK;AAAA,MACd;AAAA,MACA,CAAC,MAAkB;AACjB,YAAI,CAAC,KAAK,MAAM,YAAa;AACvB,cAAA,OAAO,EAAE,aAAa;AAC5B,YAAI,CAAC,QAAQ,KAAK,UAAU,EAAG;AAE/B,cAAM,eAAe,KAAK,KAAK,UAAQ,KAAK,WAAW,KAAK,QAAQ,kBAAkBC,gBAAa,QAAQ,iBAAiB,KAAK,UAAU,SAASA,gBAAa,SAAS,CAAC;AACrK,cAAA,eAAe,MAAM,KAAK,YAAY;AAC5C,YAAI,cAAc;AAChB,gBAAM,EAAE,OAAO,SAASA,QAAa,QAAA,MAAM,aAAa,OAAO;AAC/D,cAAI,SAAS,UAAU;AACrB,iBAAK,aAAa,KAAK;AAAA,UAAA;AAAA,QACzB;AAAA,MAEJ;AAAA,MACA;AAAA,IACF;AAAA,EAAA;AAAA,EAGF,aAAa,OAAgB;AACtB,SAAA,QAAQ,KAAK,KAAK;AAAA,EAAA;AAE3B;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"tooltip.cjs.js","sources":["../../../../src/modules/mathlive/tooltip.ts"],"sourcesContent":["import type { MathfieldElement } from 'mathlive'\nimport type { Bounds } from 'quill/core/selection'\nimport type TypeTooltip from 'quill/ui/tooltip'\nimport Quill from 'quill'\n\nconst Delta = Quill.import('delta')\nconst Tooltip = Quill.import('ui/tooltip') as typeof TypeTooltip\nexport default class MathliveTooltip extends Tooltip {\n static TEMPLATE = ``\n\n mathliveDom: MathfieldElement\n editValue?: string\n\n constructor(quill: Quill, boundsContainer?: HTMLElement) {\n super(quill, boundsContainer)\n this.mathliveDom = document.createElement('math-field') as MathfieldElement\n this.mathliveDom.classList.add('ql-math-field')\n this.root.appendChild(this.mathliveDom)\n this.root.classList.add('math-field-tooltip')\n this.listen()\n }\n\n listen() {\n this.mathliveDom.addEventListener('blur', (event) => {\n this.hide()\n })\n this.root.addEventListener('keydown', (event) => {\n if (event.key === 'Enter') {\n event.preventDefault()\n this.save()\n }\n else if (event.key === 'Escape') {\n event.preventDefault()\n this.cancel()\n }\n })\n }\n\n cancel() {\n this.hide()\n this.restoreFocus()\n }\n\n edit(value?: string) {\n this.editValue = value\n this.root.classList.remove('ql-hidden')\n this.root.classList.add('ql-editing')\n this.mathliveDom.setValue(value || '')\n const range = this.quill.getSelection()\n const bounds = range ? this.quill.getBounds(range) : null\n if (bounds != null) {\n this.position(bounds)\n }\n this.show()\n this.mathliveDom.focus()\n }\n\n restoreFocus() {\n this.mathliveDom.blur()\n this.quill.focus({ preventScroll: true })\n }\n\n save() {\n const range = this.quill.getSelection(true)\n const inputValue = this.mathliveDom.value\n if (!inputValue) return\n const index = range ? range.index : this.quill.getLength() - 1\n const delta = new Delta()\n .retain(index)\n .delete(this.editValue ? 1 : range?.length || 0)\n .insert({ mathlive: { value: inputValue, mode: 'dialog' } })\n this.quill.updateContents(delta, Quill.sources.USER)\n this.quill.setSelection(index + 1, Quill.sources.SILENT)\n this.hide()\n }\n\n position(reference: Bounds) {\n const adjustedReference = { ...reference }\n adjustedReference.left = reference.left + this.root.offsetWidth / 2 - reference.width / 2\n return super.position(adjustedReference)\n }\n}\n"],"names":[],"mappings":";;;AAKA,MAAM,QAAQ,MAAM,OAAO,OAAO;AAClC,MAAM,UAAU,MAAM,OAAO,YAAY;AACzC,MAAqB,mBAArB,MAAqB,yBAAwB,QAAQ;AAAA,EAMnD,YAAY,OAAc,iBAA+B;AACvD,UAAM,OAAO,eAAe;AACvB,SAAA,cAAc,SAAS,cAAc,YAAY;AACjD,SAAA,YAAY,UAAU,IAAI,eAAe;AACzC,SAAA,KAAK,YAAY,KAAK,WAAW;AACjC,SAAA,KAAK,UAAU,IAAI,oBAAoB;AAC5C,SAAK,OAAO;AAAA,EAAA;AAAA,EAGd,SAAS;AACP,SAAK,YAAY,iBAAiB,QAAQ,CAAC,UAAU;AACnD,WAAK,KAAK;AAAA,IAAA,CACX;AACD,SAAK,KAAK,iBAAiB,WAAW,CAAC,UAAU;AAC3C,UAAA,MAAM,QAAQ,SAAS;AACzB,cAAM,eAAe;AACrB,aAAK,KAAK;AAAA,MAAA,WAEH,MAAM,QAAQ,UAAU;AAC/B,cAAM,eAAe;AACrB,aAAK,OAAO;AAAA,MAAA;AAAA,IACd,CACD;AAAA,EAAA;AAAA,EAGH,SAAS;AACP,SAAK,KAAK;AACV,SAAK,aAAa;AAAA,EAAA;AAAA,EAGpB,KAAK,OAAgB;AACnB,SAAK,YAAY;AACZ,SAAA,KAAK,UAAU,OAAO,WAAW;AACjC,SAAA,KAAK,UAAU,IAAI,YAAY;AAC/B,SAAA,YAAY,SAAS,SAAS,EAAE;AAC/B,UAAA,QAAQ,KAAK,MAAM,aAAa;AACtC,UAAM,SAAS,QAAQ,KAAK,MAAM,UAAU,KAAK,IAAI;AACrD,QAAI,UAAU,MAAM;AAClB,WAAK,SAAS,MAAM;AAAA,IAAA;AAEtB,SAAK,KAAK;AACV,SAAK,YAAY,MAAM;AAAA,EAAA;AAAA,EAGzB,eAAe;AACb,SAAK,YAAY,KAAK;AACtB,SAAK,MAAM,MAAM,EAAE,eAAe,MAAM;AAAA,EAAA;AAAA,EAG1C,OAAO;AACL,UAAM,QAAQ,KAAK,MAAM,aAAa,IAAI;AACpC,UAAA,aAAa,KAAK,YAAY;AACpC,QAAI,CAAC,WAAY;AACjB,UAAM,QAAQ,QAAQ,MAAM,QAAQ,KAAK,MAAM,cAAc;AACvD,UAAA,QAAQ,IAAI,MAAA,EACf,OAAO,KAAK,EACZ,OAAO,KAAK,YAAY,KAAI,+BAAO,WAAU,CAAC,EAC9C,OAAO,EAAE,UAAU,EAAE,OAAO,YAAY,MAAM,SAAS,GAAG;AAC7D,SAAK,MAAM,eAAe,OAAO,MAAM,QAAQ,IAAI;AACnD,SAAK,MAAM,aAAa,QAAQ,GAAG,MAAM,QAAQ,MAAM;AACvD,SAAK,KAAK;AAAA,EAAA;AAAA,EAGZ,SAAS,WAAmB;AACpB,UAAA,oBAAoB,EAAE,GAAG,UAAU;AACvB,sBAAA,OAAO,UAAU,OAAO,KAAK,KAAK,cAAc,IAAI,UAAU,QAAQ;AACjF,WAAA,MAAM,SAAS,iBAAiB;AAAA,EAAA;AAE3C;AAzEE,iBAAO,WAAW;AADpB,IAAqB,kBAArB;;"}
1
+ {"version":3,"file":"tooltip.cjs.js","sources":["../../../../src/modules/mathlive/tooltip.ts"],"sourcesContent":["import type { MathfieldElement } from 'mathlive'\r\nimport type { Bounds } from 'quill/core/selection'\r\nimport type TypeTooltip from 'quill/ui/tooltip'\r\nimport Quill from 'quill'\r\n\r\nconst Delta = Quill.import('delta')\r\nconst Tooltip = Quill.import('ui/tooltip') as typeof TypeTooltip\r\nexport default class MathliveTooltip extends Tooltip {\r\n static TEMPLATE = ``\r\n\r\n mathliveDom: MathfieldElement\r\n editValue?: string\r\n\r\n constructor(quill: Quill, boundsContainer?: HTMLElement) {\r\n super(quill, boundsContainer)\r\n this.mathliveDom = document.createElement('math-field') as MathfieldElement\r\n this.mathliveDom.classList.add('ql-math-field')\r\n this.root.appendChild(this.mathliveDom)\r\n this.root.classList.add('math-field-tooltip')\r\n this.listen()\r\n }\r\n\r\n listen() {\r\n this.mathliveDom.addEventListener('blur', (event) => {\r\n this.hide()\r\n })\r\n this.root.addEventListener('keydown', (event) => {\r\n if (event.key === 'Enter') {\r\n event.preventDefault()\r\n this.save()\r\n }\r\n else if (event.key === 'Escape') {\r\n event.preventDefault()\r\n this.cancel()\r\n }\r\n })\r\n }\r\n\r\n cancel() {\r\n this.hide()\r\n this.restoreFocus()\r\n }\r\n\r\n edit(value?: string) {\r\n this.editValue = value\r\n this.root.classList.remove('ql-hidden')\r\n this.root.classList.add('ql-editing')\r\n this.mathliveDom.setValue(value || '')\r\n const range = this.quill.getSelection()\r\n const bounds = range ? this.quill.getBounds(range) : null\r\n if (bounds != null) {\r\n this.position(bounds)\r\n }\r\n this.show()\r\n this.mathliveDom.focus()\r\n }\r\n\r\n restoreFocus() {\r\n this.mathliveDom.blur()\r\n this.quill.focus({ preventScroll: true })\r\n }\r\n\r\n save() {\r\n const range = this.quill.getSelection(true)\r\n const inputValue = this.mathliveDom.value\r\n if (!inputValue) return\r\n const index = range ? range.index : this.quill.getLength() - 1\r\n const delta = new Delta()\r\n .retain(index)\r\n .delete(this.editValue ? 1 : range?.length || 0)\r\n .insert({ mathlive: { value: inputValue, mode: 'dialog' } })\r\n this.quill.updateContents(delta, Quill.sources.USER)\r\n this.quill.setSelection(index + 1, Quill.sources.SILENT)\r\n this.hide()\r\n }\r\n\r\n position(reference: Bounds) {\r\n const adjustedReference = { ...reference }\r\n adjustedReference.left = reference.left + this.root.offsetWidth / 2 - reference.width / 2\r\n return super.position(adjustedReference)\r\n }\r\n}\r\n"],"names":[],"mappings":";;;AAKA,MAAM,QAAQ,MAAM,OAAO,OAAO;AAClC,MAAM,UAAU,MAAM,OAAO,YAAY;AACzC,MAAqB,mBAArB,MAAqB,yBAAwB,QAAQ;AAAA,EAMnD,YAAY,OAAc,iBAA+B;AACvD,UAAM,OAAO,eAAe;AACvB,SAAA,cAAc,SAAS,cAAc,YAAY;AACjD,SAAA,YAAY,UAAU,IAAI,eAAe;AACzC,SAAA,KAAK,YAAY,KAAK,WAAW;AACjC,SAAA,KAAK,UAAU,IAAI,oBAAoB;AAC5C,SAAK,OAAO;AAAA,EAAA;AAAA,EAGd,SAAS;AACP,SAAK,YAAY,iBAAiB,QAAQ,CAAC,UAAU;AACnD,WAAK,KAAK;AAAA,IAAA,CACX;AACD,SAAK,KAAK,iBAAiB,WAAW,CAAC,UAAU;AAC3C,UAAA,MAAM,QAAQ,SAAS;AACzB,cAAM,eAAe;AACrB,aAAK,KAAK;AAAA,MAAA,WAEH,MAAM,QAAQ,UAAU;AAC/B,cAAM,eAAe;AACrB,aAAK,OAAO;AAAA,MAAA;AAAA,IACd,CACD;AAAA,EAAA;AAAA,EAGH,SAAS;AACP,SAAK,KAAK;AACV,SAAK,aAAa;AAAA,EAAA;AAAA,EAGpB,KAAK,OAAgB;AACnB,SAAK,YAAY;AACZ,SAAA,KAAK,UAAU,OAAO,WAAW;AACjC,SAAA,KAAK,UAAU,IAAI,YAAY;AAC/B,SAAA,YAAY,SAAS,SAAS,EAAE;AAC/B,UAAA,QAAQ,KAAK,MAAM,aAAa;AACtC,UAAM,SAAS,QAAQ,KAAK,MAAM,UAAU,KAAK,IAAI;AACrD,QAAI,UAAU,MAAM;AAClB,WAAK,SAAS,MAAM;AAAA,IAAA;AAEtB,SAAK,KAAK;AACV,SAAK,YAAY,MAAM;AAAA,EAAA;AAAA,EAGzB,eAAe;AACb,SAAK,YAAY,KAAK;AACtB,SAAK,MAAM,MAAM,EAAE,eAAe,MAAM;AAAA,EAAA;AAAA,EAG1C,OAAO;AACL,UAAM,QAAQ,KAAK,MAAM,aAAa,IAAI;AACpC,UAAA,aAAa,KAAK,YAAY;AACpC,QAAI,CAAC,WAAY;AACjB,UAAM,QAAQ,QAAQ,MAAM,QAAQ,KAAK,MAAM,cAAc;AACvD,UAAA,QAAQ,IAAI,MAAA,EACf,OAAO,KAAK,EACZ,OAAO,KAAK,YAAY,KAAI,+BAAO,WAAU,CAAC,EAC9C,OAAO,EAAE,UAAU,EAAE,OAAO,YAAY,MAAM,SAAS,GAAG;AAC7D,SAAK,MAAM,eAAe,OAAO,MAAM,QAAQ,IAAI;AACnD,SAAK,MAAM,aAAa,QAAQ,GAAG,MAAM,QAAQ,MAAM;AACvD,SAAK,KAAK;AAAA,EAAA;AAAA,EAGZ,SAAS,WAAmB;AACpB,UAAA,oBAAoB,EAAE,GAAG,UAAU;AACvB,sBAAA,OAAO,UAAU,OAAO,KAAK,KAAK,cAAc,IAAI,UAAU,QAAQ;AACjF,WAAA,MAAM,SAAS,iBAAiB;AAAA,EAAA;AAE3C;AAzEE,iBAAO,WAAW;AADpB,IAAqB,kBAArB;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Mention.cjs.js","sources":["../../../../src/modules/mention/Mention.ts"],"sourcesContent":["import Quill from 'quill'\nimport { isNullOrUndefined } from '../../config/editor.utils'\nimport { DEFAULT_MENTION_CHAR, ON_MENTION_LINK_REMOVE } from './constants'\nimport MentionLink from './MentionLink'\n\nconst Delta = Quill.import('delta')\nconst Parchment = Quill.import('parchment')\nconst { Scope } = Parchment\n\ninterface MentionOption {\n containerClass?: string\n // dataAttributes?: string[]\n defaultLink?: string\n itemActiveClass?: string\n itemKey: string\n itemClass?: string\n listClass?: string\n listHideClass?: string\n maxHeight?: number\n mentionChar?: string\n remove?: (data: any) => void\n renderMentionItem?: (data: any) => string | HTMLElement\n renderMentionText?: (data: any) => string | HTMLElement\n search?: (term: string) => Promise<any[]>\n searchKey: string\n select?: (data: any) => void\n target?: string\n}\n\n// @dynamic\nclass Mention {\n private readonly options: MentionOption\n private readonly mentionListEL: HTMLUListElement\n private activeMentionIndex = 0\n private latestMentionList: any[]\n private latestMentionCharPos: number\n private latestCaretPos: number\n private searchTerm = ''\n private needInsertBr = true\n private readonly defaultOptions: MentionOption = {\n defaultLink: '#',\n target: '_blank',\n mentionChar: DEFAULT_MENTION_CHAR,\n maxHeight: 200,\n renderMentionItem(data: any) {\n let mentionItem = data.name || data.id\n if (this.itemKey) {\n mentionItem = data[this.itemKey]\n }\n const dom = document.createElement('SPAN')\n dom.textContent = mentionItem\n return dom\n },\n renderMentionText(data: any) {\n let mentionText = data.name || data.id\n if (this.itemKey) {\n mentionText = data[this.itemKey]\n }\n return `${mentionText}`\n },\n containerClass: 'ql-mention-list-container',\n listClass: 'ql-mention-list',\n listHideClass: 'ql-mention-list--hide',\n itemClass: 'ql-mention-item',\n itemActiveClass: 'ql-mention-item--active',\n itemKey: 'name',\n searchKey: 'name',\n // dataAttributes: ['id'],\n select(_data: any) {},\n remove(_data: any) {},\n }\n\n static register() {\n Quill.register(MentionLink)\n }\n\n // @ts-ignore\n constructor(private quill: Quill, options: MentionOption) {\n if (!options.search) {\n console.warn('please provide a search function!')\n return\n }\n\n this.options = Object.assign(this.defaultOptions, options)\n const container = document.createElement('div')\n container.classList.add('ql-mention-list-container')\n if (this.options.containerClass !== 'ql-mention-list-container') {\n container.classList.add(this.options.containerClass)\n }\n this.mentionListEL = document.createElement('ul')\n this.mentionListEL.classList.add(this.options.listClass, this.options.listHideClass)\n this.mentionListEL.style.cssText += `\n max-height: ${this.options.maxHeight}px;\n `\n\n quill.on(Quill.events.TEXT_CHANGE, this.handleTextChange)\n quill.keyboard.addBinding({ key: 'ArrowUp' }, this.handleArrowUpKey)\n quill.keyboard.addBinding({ key: 'ArrowDown' }, this.handleArrowDownKey)\n quill.keyboard.addBinding({ key: 'Enter' }, this.handleEnterKey)\n quill.keyboard.addBinding({ key: 'Tab' }, this.handleEnterKey)\n quill.keyboard.addBinding({ key: 'Escape' }, this.handleEscapeKey)\n quill.keyboard.bindings.Enter.unshift(quill.keyboard.bindings.Enter.pop())\n quill.keyboard.bindings.Tab.unshift(quill.keyboard.bindings.Tab.pop())\n quill.keyboard.bindings.Escape.unshift(quill.keyboard.bindings.Escape.pop())\n\n const customKeyboardEnter = {\n key: 'Enter',\n shiftKey: null,\n handler: (range, context) => {\n const lineFormats = Object.keys(context.format).reduce(\n (formats, format) => {\n if (\n this.quill.scroll.query(format, Scope.BLOCK)\n && !Array.isArray(context.format[format])\n ) {\n formats[format] = context.format[format]\n }\n return formats\n },\n {},\n )\n\n // fix: 解决@提醒之后插入多余空行和光标位置不对的问题\n let selectionIndex = range.index - this.searchTerm.length\n let delta = new Delta()\n .retain(range.index)\n .delete(range.length)\n if (this.needInsertBr) {\n delta = delta.insert('\\n', lineFormats)\n selectionIndex = range.index + 1\n }\n\n this.quill.updateContents(delta, Quill.sources.USER)\n this.quill.setSelection(selectionIndex, Quill.sources.SILENT)\n this.quill.focus()\n\n Object.keys(context.format).forEach((name) => {\n if (!isNullOrUndefined(lineFormats[name])) return\n if (Array.isArray(context.format[name])) return\n if (name === 'code' || name === 'link') return\n this.quill.format(name, context.format[name], Quill.sources.USER)\n })\n\n this.needInsertBr = true // 标记是否是输入@提醒的Enter\n },\n }\n\n // 用自定义的Enter替换内置的Enter\n quill.keyboard.bindings.Enter = quill.keyboard.bindings.Enter.map((item) => {\n const buildinKeyboardEnter = item.format === undefined && item.shiftKey === null\n if (buildinKeyboardEnter) {\n return customKeyboardEnter\n }\n else {\n return item\n }\n })\n\n this.on('click', this.handleMouseClick)\n this.on('mouseover', this.handleMouseEnter)\n quill.emitter.on(ON_MENTION_LINK_REMOVE, async ({ mention, name }) => {\n const [result] = (mention && [mention]) || (await this.options.search(name))\n this.options.remove(result)\n })\n container.appendChild(this.mentionListEL)\n quill.container.parentElement.insertBefore(container, quill.container)\n }\n\n on(eventName, callback) {\n this.mentionListEL.addEventListener(eventName, (evt) => {\n let\n target = evt.target\n let targetItemEL\n\n while (this.mentionListEL.contains(target) && target !== this.mentionListEL) {\n if (target.classList.contains(this.options.itemClass)) {\n targetItemEL = target\n }\n target = target.parentElement\n }\n\n if (targetItemEL) {\n callback.call(this, targetItemEL, this.getMentionItemIndex(targetItemEL))\n }\n })\n }\n\n getMentionItemIndex(itemEl: Element) {\n return [].reduce.call(this.mentionListEL.children, (index, item, idx) => item === itemEl ? idx : index, -1)\n }\n\n handleTextChange = (_delta, _oldDelta, source) => {\n // defer handler to make sure that we can get correct quill selection range.\n setTimeout(() => {\n if (Quill.sources.USER === source) {\n const range = this.quill.getSelection()\n if (!range) {\n return\n }\n\n const caretPos = this.latestCaretPos = range.index\n // beforeCaretText的计算有问题,没有把图片内容和@提醒内容的非字符内容算进去\n const content = this.quill.getContents()\n const beforeCaretText = content.reduce((newText, op) => {\n if (typeof op.insert === 'string') {\n return (newText += op.insert)\n }\n else {\n return (newText += ' ') // 将图片内容和@提醒内容的非字符内容置为' ',算一个位置\n }\n }, '')\n const mentionCharPos = beforeCaretText.lastIndexOf(this.options.mentionChar)\n\n if (mentionCharPos > -1) {\n const searchTerm = beforeCaretText.substring(mentionCharPos + this.options.mentionChar.length, caretPos)\n this.searchTerm = searchTerm\n if (!''.startsWith.call(searchTerm, ' ')) {\n this.latestMentionCharPos = mentionCharPos\n this.searchMentionListByTerm(searchTerm)\n }\n else {\n this.hideMentionList()\n }\n }\n else {\n this.hideMentionList()\n }\n }\n })\n }\n\n handleMouseClick(_itemEl: HTMLLIElement, index: number) {\n this.selectMentionItem(index, true)\n this.quill.focus()\n }\n\n handleMouseEnter(_itemEl: HTMLLIElement, index: number) {\n this.activeMentionIndex = index\n this.highlightMentionItem(index)\n }\n\n handleArrowUpKey = () => {\n if (this.isOpen()) {\n this.activeMentionIndex\n = (this.activeMentionIndex + this.latestMentionList.length - 1) % this.latestMentionList.length\n this.highlightMentionItem(this.activeMentionIndex)\n return false\n }\n return true\n }\n\n handleArrowDownKey = () => {\n if (this.isOpen()) {\n this.activeMentionIndex = (this.activeMentionIndex + 1) % this.latestMentionList.length\n this.highlightMentionItem(this.activeMentionIndex)\n return false\n }\n return true\n }\n\n handleEnterKey = () => {\n if (this.isOpen()) {\n this.selectMentionItem()\n this.needInsertBr = false\n }\n return true\n }\n\n handleEscapeKey = () => {\n if (this.isOpen()) {\n this.hideMentionList()\n return false\n }\n return true\n }\n\n getActiveMentionItem() {\n return this.mentionListEL.querySelector(`.${this.options.itemActiveClass}`)\n }\n\n isOpen() {\n return !this.mentionListEL.classList.contains(this.options.listHideClass)\n }\n\n async searchMentionListByTerm(term: string) {\n const mentionList = await this.options.search(term)\n this.latestMentionList = mentionList\n if (!mentionList || mentionList.length === 0) {\n return this.hideMentionList()\n }\n\n this.showMentionList(mentionList)\n }\n\n showMentionList(mentionList: any[]) {\n if (!this.isOpen()) {\n this.mentionListEL.classList.remove(this.options.listHideClass)\n }\n this.activeMentionIndex = 0\n this.setMentionListPos()\n this.render(mentionList)\n }\n\n hideMentionList() {\n if (this.isOpen()) {\n this.activeMentionIndex = 0\n this.mentionListEL.classList.add(this.options.listHideClass)\n }\n }\n\n setMentionListPos() {\n const cursorIndex = this.quill.selection.savedRange.index\n const cursorBounds = this.quill.getBounds(cursorIndex)\n const { left, top } = cursorBounds\n const container = this.quill.container\n const hostElement = container.parentNode as HTMLDivElement\n const { left: editorLeft, top: editorTop } = container.getBoundingClientRect()\n const { left: hostElementLeft, top: hostElementTop } = hostElement.getBoundingClientRect()\n const relativeLeft = editorLeft - hostElementLeft\n const relativeTop = editorTop - hostElementTop\n const menuLeft = left + relativeLeft - 5\n const menuTop = top + relativeTop + 20\n this.mentionListEL.style.cssText += `\n left: ${menuLeft}px;\n top: ${menuTop}px;\n `\n }\n\n render(mentionList: any[]) {\n const wrapEl = document.createElement('div');\n\n [].forEach.call(mentionList, (mentionItem, index) => {\n const mentionItemEl = document.createElement('li')\n mentionItemEl.classList.add(this.options.itemClass)\n if (index === this.activeMentionIndex) {\n mentionItemEl.classList.add(this.options.itemActiveClass)\n }\n const renderResult = this.options.renderMentionItem(mentionItem)\n if (typeof renderResult === 'string') {\n mentionItemEl.insertAdjacentHTML('afterbegin', renderResult)\n }\n else {\n mentionItemEl.insertAdjacentElement('afterbegin', renderResult)\n }\n wrapEl.appendChild(mentionItemEl)\n })\n\n this.mentionListEL.innerHTML = wrapEl.innerHTML\n }\n\n highlightMentionItem(index: number) {\n const oldActiveItem = this.getActiveMentionItem()\n if (oldActiveItem) {\n oldActiveItem.classList.remove(this.options.itemActiveClass)\n }\n\n const newActiveItem = this.mentionListEL.querySelector(`.${this.options.itemClass}:nth-of-type(${index + 1})`)\n if (newActiveItem) {\n newActiveItem.classList.add(this.options.itemActiveClass)\n this.scrollIntoView(newActiveItem)\n }\n }\n\n scrollIntoView(node: Element): void {\n const nodeAsAny: any = node\n if (nodeAsAny.scrollIntoViewIfNeeded) {\n nodeAsAny.scrollIntoViewIfNeeded(false)\n return\n }\n if (node.scrollIntoView) {\n node.scrollIntoView(false)\n }\n }\n\n selectMentionItem(index = this.activeMentionIndex, isClick?: boolean) {\n const activeMentionItem = this.latestMentionList[index]\n this.insertMentionBlot(activeMentionItem, isClick)\n this.options.select(activeMentionItem)\n this.hideMentionList()\n }\n\n insertMentionBlot(activeMentionItem: any, isClick?: boolean) {\n const mention = this.options.renderMentionText(activeMentionItem)\n const delta = new Delta()\n .retain(this.latestMentionCharPos)\n .delete(this.latestCaretPos - this.latestMentionCharPos)\n .insert({\n [MentionLink.blotName]: {\n char: this.options.mentionChar,\n text: mention,\n mention: activeMentionItem,\n link: activeMentionItem.link || this.options.defaultLink,\n target: activeMentionItem.target || this.options.target,\n searchKey: this.options.searchKey,\n },\n })\n if (isClick) {\n this.quill.updateContents(delta, Quill.sources.USER)\n }\n else {\n this.quill.updateContents(delta, Quill.sources.API)\n }\n this.quill.setSelection(this.latestMentionCharPos + 1, Quill.sources.API)\n }\n}\n\nexport { Mention as default }\n"],"names":["DEFAULT_MENTION_CHAR","isNullOrUndefined","ON_MENTION_LINK_REMOVE","MentionLink"],"mappings":"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"}
1
+ {"version":3,"file":"Mention.cjs.js","sources":["../../../../src/modules/mention/Mention.ts"],"sourcesContent":["import Quill from 'quill'\r\nimport { isNullOrUndefined } from '../../config/editor.utils'\r\nimport { DEFAULT_MENTION_CHAR, ON_MENTION_LINK_REMOVE } from './constants'\r\nimport MentionLink from './MentionLink'\r\n\r\nconst Delta = Quill.import('delta')\r\nconst Parchment = Quill.import('parchment')\r\nconst { Scope } = Parchment\r\n\r\ninterface MentionOption {\r\n containerClass?: string\r\n // dataAttributes?: string[]\r\n defaultLink?: string\r\n itemActiveClass?: string\r\n itemKey: string\r\n itemClass?: string\r\n listClass?: string\r\n listHideClass?: string\r\n maxHeight?: number\r\n mentionChar?: string\r\n remove?: (data: any) => void\r\n renderMentionItem?: (data: any) => string | HTMLElement\r\n renderMentionText?: (data: any) => string | HTMLElement\r\n search?: (term: string) => Promise<any[]>\r\n searchKey: string\r\n select?: (data: any) => void\r\n target?: string\r\n}\r\n\r\n// @dynamic\r\nclass Mention {\r\n private readonly options: MentionOption\r\n private readonly mentionListEL: HTMLUListElement\r\n private activeMentionIndex = 0\r\n private latestMentionList: any[]\r\n private latestMentionCharPos: number\r\n private latestCaretPos: number\r\n private searchTerm = ''\r\n private needInsertBr = true\r\n private readonly defaultOptions: MentionOption = {\r\n defaultLink: '#',\r\n target: '_blank',\r\n mentionChar: DEFAULT_MENTION_CHAR,\r\n maxHeight: 200,\r\n renderMentionItem(data: any) {\r\n let mentionItem = data.name || data.id\r\n if (this.itemKey) {\r\n mentionItem = data[this.itemKey]\r\n }\r\n const dom = document.createElement('SPAN')\r\n dom.textContent = mentionItem\r\n return dom\r\n },\r\n renderMentionText(data: any) {\r\n let mentionText = data.name || data.id\r\n if (this.itemKey) {\r\n mentionText = data[this.itemKey]\r\n }\r\n return `${mentionText}`\r\n },\r\n containerClass: 'ql-mention-list-container',\r\n listClass: 'ql-mention-list',\r\n listHideClass: 'ql-mention-list--hide',\r\n itemClass: 'ql-mention-item',\r\n itemActiveClass: 'ql-mention-item--active',\r\n itemKey: 'name',\r\n searchKey: 'name',\r\n // dataAttributes: ['id'],\r\n select(_data: any) {},\r\n remove(_data: any) {},\r\n }\r\n\r\n static register() {\r\n Quill.register(MentionLink)\r\n }\r\n\r\n // @ts-ignore\r\n constructor(private quill: Quill, options: MentionOption) {\r\n if (!options.search) {\r\n console.warn('please provide a search function!')\r\n return\r\n }\r\n\r\n this.options = Object.assign(this.defaultOptions, options)\r\n const container = document.createElement('div')\r\n container.classList.add('ql-mention-list-container')\r\n if (this.options.containerClass !== 'ql-mention-list-container') {\r\n container.classList.add(this.options.containerClass)\r\n }\r\n this.mentionListEL = document.createElement('ul')\r\n this.mentionListEL.classList.add(this.options.listClass, this.options.listHideClass)\r\n this.mentionListEL.style.cssText += `\r\n max-height: ${this.options.maxHeight}px;\r\n `\r\n\r\n quill.on(Quill.events.TEXT_CHANGE, this.handleTextChange)\r\n quill.keyboard.addBinding({ key: 'ArrowUp' }, this.handleArrowUpKey)\r\n quill.keyboard.addBinding({ key: 'ArrowDown' }, this.handleArrowDownKey)\r\n quill.keyboard.addBinding({ key: 'Enter' }, this.handleEnterKey)\r\n quill.keyboard.addBinding({ key: 'Tab' }, this.handleEnterKey)\r\n quill.keyboard.addBinding({ key: 'Escape' }, this.handleEscapeKey)\r\n quill.keyboard.bindings.Enter.unshift(quill.keyboard.bindings.Enter.pop())\r\n quill.keyboard.bindings.Tab.unshift(quill.keyboard.bindings.Tab.pop())\r\n quill.keyboard.bindings.Escape.unshift(quill.keyboard.bindings.Escape.pop())\r\n\r\n const customKeyboardEnter = {\r\n key: 'Enter',\r\n shiftKey: null,\r\n handler: (range, context) => {\r\n const lineFormats = Object.keys(context.format).reduce(\r\n (formats, format) => {\r\n if (\r\n this.quill.scroll.query(format, Scope.BLOCK)\r\n && !Array.isArray(context.format[format])\r\n ) {\r\n formats[format] = context.format[format]\r\n }\r\n return formats\r\n },\r\n {},\r\n )\r\n\r\n // fix: 解决@提醒之后插入多余空行和光标位置不对的问题\r\n let selectionIndex = range.index - this.searchTerm.length\r\n let delta = new Delta()\r\n .retain(range.index)\r\n .delete(range.length)\r\n if (this.needInsertBr) {\r\n delta = delta.insert('\\n', lineFormats)\r\n selectionIndex = range.index + 1\r\n }\r\n\r\n this.quill.updateContents(delta, Quill.sources.USER)\r\n this.quill.setSelection(selectionIndex, Quill.sources.SILENT)\r\n this.quill.focus()\r\n\r\n Object.keys(context.format).forEach((name) => {\r\n if (!isNullOrUndefined(lineFormats[name])) return\r\n if (Array.isArray(context.format[name])) return\r\n if (name === 'code' || name === 'link') return\r\n this.quill.format(name, context.format[name], Quill.sources.USER)\r\n })\r\n\r\n this.needInsertBr = true // 标记是否是输入@提醒的Enter\r\n },\r\n }\r\n\r\n // 用自定义的Enter替换内置的Enter\r\n quill.keyboard.bindings.Enter = quill.keyboard.bindings.Enter.map((item) => {\r\n const buildinKeyboardEnter = item.format === undefined && item.shiftKey === null\r\n if (buildinKeyboardEnter) {\r\n return customKeyboardEnter\r\n }\r\n else {\r\n return item\r\n }\r\n })\r\n\r\n this.on('click', this.handleMouseClick)\r\n this.on('mouseover', this.handleMouseEnter)\r\n quill.emitter.on(ON_MENTION_LINK_REMOVE, async ({ mention, name }) => {\r\n const [result] = (mention && [mention]) || (await this.options.search(name))\r\n this.options.remove(result)\r\n })\r\n container.appendChild(this.mentionListEL)\r\n quill.container.parentElement.insertBefore(container, quill.container)\r\n }\r\n\r\n on(eventName, callback) {\r\n this.mentionListEL.addEventListener(eventName, (evt) => {\r\n let\r\n target = evt.target\r\n let targetItemEL\r\n\r\n while (this.mentionListEL.contains(target) && target !== this.mentionListEL) {\r\n if (target.classList.contains(this.options.itemClass)) {\r\n targetItemEL = target\r\n }\r\n target = target.parentElement\r\n }\r\n\r\n if (targetItemEL) {\r\n callback.call(this, targetItemEL, this.getMentionItemIndex(targetItemEL))\r\n }\r\n })\r\n }\r\n\r\n getMentionItemIndex(itemEl: Element) {\r\n return [].reduce.call(this.mentionListEL.children, (index, item, idx) => item === itemEl ? idx : index, -1)\r\n }\r\n\r\n handleTextChange = (_delta, _oldDelta, source) => {\r\n // defer handler to make sure that we can get correct quill selection range.\r\n setTimeout(() => {\r\n if (Quill.sources.USER === source) {\r\n const range = this.quill.getSelection()\r\n if (!range) {\r\n return\r\n }\r\n\r\n const caretPos = this.latestCaretPos = range.index\r\n // beforeCaretText的计算有问题,没有把图片内容和@提醒内容的非字符内容算进去\r\n const content = this.quill.getContents()\r\n const beforeCaretText = content.reduce((newText, op) => {\r\n if (typeof op.insert === 'string') {\r\n return (newText += op.insert)\r\n }\r\n else {\r\n return (newText += ' ') // 将图片内容和@提醒内容的非字符内容置为' ',算一个位置\r\n }\r\n }, '')\r\n const mentionCharPos = beforeCaretText.lastIndexOf(this.options.mentionChar)\r\n\r\n if (mentionCharPos > -1) {\r\n const searchTerm = beforeCaretText.substring(mentionCharPos + this.options.mentionChar.length, caretPos)\r\n this.searchTerm = searchTerm\r\n if (!''.startsWith.call(searchTerm, ' ')) {\r\n this.latestMentionCharPos = mentionCharPos\r\n this.searchMentionListByTerm(searchTerm)\r\n }\r\n else {\r\n this.hideMentionList()\r\n }\r\n }\r\n else {\r\n this.hideMentionList()\r\n }\r\n }\r\n })\r\n }\r\n\r\n handleMouseClick(_itemEl: HTMLLIElement, index: number) {\r\n this.selectMentionItem(index, true)\r\n this.quill.focus()\r\n }\r\n\r\n handleMouseEnter(_itemEl: HTMLLIElement, index: number) {\r\n this.activeMentionIndex = index\r\n this.highlightMentionItem(index)\r\n }\r\n\r\n handleArrowUpKey = () => {\r\n if (this.isOpen()) {\r\n this.activeMentionIndex\r\n = (this.activeMentionIndex + this.latestMentionList.length - 1) % this.latestMentionList.length\r\n this.highlightMentionItem(this.activeMentionIndex)\r\n return false\r\n }\r\n return true\r\n }\r\n\r\n handleArrowDownKey = () => {\r\n if (this.isOpen()) {\r\n this.activeMentionIndex = (this.activeMentionIndex + 1) % this.latestMentionList.length\r\n this.highlightMentionItem(this.activeMentionIndex)\r\n return false\r\n }\r\n return true\r\n }\r\n\r\n handleEnterKey = () => {\r\n if (this.isOpen()) {\r\n this.selectMentionItem()\r\n this.needInsertBr = false\r\n }\r\n return true\r\n }\r\n\r\n handleEscapeKey = () => {\r\n if (this.isOpen()) {\r\n this.hideMentionList()\r\n return false\r\n }\r\n return true\r\n }\r\n\r\n getActiveMentionItem() {\r\n return this.mentionListEL.querySelector(`.${this.options.itemActiveClass}`)\r\n }\r\n\r\n isOpen() {\r\n return !this.mentionListEL.classList.contains(this.options.listHideClass)\r\n }\r\n\r\n async searchMentionListByTerm(term: string) {\r\n const mentionList = await this.options.search(term)\r\n this.latestMentionList = mentionList\r\n if (!mentionList || mentionList.length === 0) {\r\n return this.hideMentionList()\r\n }\r\n\r\n this.showMentionList(mentionList)\r\n }\r\n\r\n showMentionList(mentionList: any[]) {\r\n if (!this.isOpen()) {\r\n this.mentionListEL.classList.remove(this.options.listHideClass)\r\n }\r\n this.activeMentionIndex = 0\r\n this.setMentionListPos()\r\n this.render(mentionList)\r\n }\r\n\r\n hideMentionList() {\r\n if (this.isOpen()) {\r\n this.activeMentionIndex = 0\r\n this.mentionListEL.classList.add(this.options.listHideClass)\r\n }\r\n }\r\n\r\n setMentionListPos() {\r\n const cursorIndex = this.quill.selection.savedRange.index\r\n const cursorBounds = this.quill.getBounds(cursorIndex)\r\n const { left, top } = cursorBounds\r\n const container = this.quill.container\r\n const hostElement = container.parentNode as HTMLDivElement\r\n const { left: editorLeft, top: editorTop } = container.getBoundingClientRect()\r\n const { left: hostElementLeft, top: hostElementTop } = hostElement.getBoundingClientRect()\r\n const relativeLeft = editorLeft - hostElementLeft\r\n const relativeTop = editorTop - hostElementTop\r\n const menuLeft = left + relativeLeft - 5\r\n const menuTop = top + relativeTop + 20\r\n this.mentionListEL.style.cssText += `\r\n left: ${menuLeft}px;\r\n top: ${menuTop}px;\r\n `\r\n }\r\n\r\n render(mentionList: any[]) {\r\n const wrapEl = document.createElement('div');\r\n\r\n [].forEach.call(mentionList, (mentionItem, index) => {\r\n const mentionItemEl = document.createElement('li')\r\n mentionItemEl.classList.add(this.options.itemClass)\r\n if (index === this.activeMentionIndex) {\r\n mentionItemEl.classList.add(this.options.itemActiveClass)\r\n }\r\n const renderResult = this.options.renderMentionItem(mentionItem)\r\n if (typeof renderResult === 'string') {\r\n mentionItemEl.insertAdjacentHTML('afterbegin', renderResult)\r\n }\r\n else {\r\n mentionItemEl.insertAdjacentElement('afterbegin', renderResult)\r\n }\r\n wrapEl.appendChild(mentionItemEl)\r\n })\r\n\r\n this.mentionListEL.innerHTML = wrapEl.innerHTML\r\n }\r\n\r\n highlightMentionItem(index: number) {\r\n const oldActiveItem = this.getActiveMentionItem()\r\n if (oldActiveItem) {\r\n oldActiveItem.classList.remove(this.options.itemActiveClass)\r\n }\r\n\r\n const newActiveItem = this.mentionListEL.querySelector(`.${this.options.itemClass}:nth-of-type(${index + 1})`)\r\n if (newActiveItem) {\r\n newActiveItem.classList.add(this.options.itemActiveClass)\r\n this.scrollIntoView(newActiveItem)\r\n }\r\n }\r\n\r\n scrollIntoView(node: Element): void {\r\n const nodeAsAny: any = node\r\n if (nodeAsAny.scrollIntoViewIfNeeded) {\r\n nodeAsAny.scrollIntoViewIfNeeded(false)\r\n return\r\n }\r\n if (node.scrollIntoView) {\r\n node.scrollIntoView(false)\r\n }\r\n }\r\n\r\n selectMentionItem(index = this.activeMentionIndex, isClick?: boolean) {\r\n const activeMentionItem = this.latestMentionList[index]\r\n this.insertMentionBlot(activeMentionItem, isClick)\r\n this.options.select(activeMentionItem)\r\n this.hideMentionList()\r\n }\r\n\r\n insertMentionBlot(activeMentionItem: any, isClick?: boolean) {\r\n const mention = this.options.renderMentionText(activeMentionItem)\r\n const delta = new Delta()\r\n .retain(this.latestMentionCharPos)\r\n .delete(this.latestCaretPos - this.latestMentionCharPos)\r\n .insert({\r\n [MentionLink.blotName]: {\r\n char: this.options.mentionChar,\r\n text: mention,\r\n mention: activeMentionItem,\r\n link: activeMentionItem.link || this.options.defaultLink,\r\n target: activeMentionItem.target || this.options.target,\r\n searchKey: this.options.searchKey,\r\n },\r\n })\r\n if (isClick) {\r\n this.quill.updateContents(delta, Quill.sources.USER)\r\n }\r\n else {\r\n this.quill.updateContents(delta, Quill.sources.API)\r\n }\r\n this.quill.setSelection(this.latestMentionCharPos + 1, Quill.sources.API)\r\n }\r\n}\r\n\r\nexport { Mention as default }\r\n"],"names":["DEFAULT_MENTION_CHAR","isNullOrUndefined","ON_MENTION_LINK_REMOVE","MentionLink"],"mappings":";;;;;;AAKA,MAAM,QAAQ,MAAM,OAAO,OAAO;AAClC,MAAM,YAAY,MAAM,OAAO,WAAW;AAC1C,MAAM,EAAE,MAAU,IAAA;AAuBlB,MAAM,QAAQ;AAAA;AAAA,EA+CZ,YAAoB,OAAc,SAAwB;AAAtC,SAAA,QAAA;AA5CpB,SAAQ,qBAAqB;AAI7B,SAAQ,aAAa;AACrB,SAAQ,eAAe;AACvB,SAAiB,iBAAgC;AAAA,MAC/C,aAAa;AAAA,MACb,QAAQ;AAAA,MACR,aAAaA,UAAA;AAAA,MACb,WAAW;AAAA,MACX,kBAAkB,MAAW;AACvB,YAAA,cAAc,KAAK,QAAQ,KAAK;AACpC,YAAI,KAAK,SAAS;AACF,wBAAA,KAAK,KAAK,OAAO;AAAA,QAAA;AAE3B,cAAA,MAAM,SAAS,cAAc,MAAM;AACzC,YAAI,cAAc;AACX,eAAA;AAAA,MACT;AAAA,MACA,kBAAkB,MAAW;AACvB,YAAA,cAAc,KAAK,QAAQ,KAAK;AACpC,YAAI,KAAK,SAAS;AACF,wBAAA,KAAK,KAAK,OAAO;AAAA,QAAA;AAEjC,eAAO,GAAG,WAAW;AAAA,MACvB;AAAA,MACA,gBAAgB;AAAA,MAChB,WAAW;AAAA,MACX,eAAe;AAAA,MACf,WAAW;AAAA,MACX,iBAAiB;AAAA,MACjB,SAAS;AAAA,MACT,WAAW;AAAA;AAAA,MAEX,OAAO,OAAY;AAAA,MAAC;AAAA,MACpB,OAAO,OAAY;AAAA,MAAA;AAAA,IACrB;AAyHmB,SAAA,mBAAA,CAAC,QAAQ,WAAW,WAAW;AAEhD,iBAAW,MAAM;AACX,YAAA,MAAM,QAAQ,SAAS,QAAQ;AAC3B,gBAAA,QAAQ,KAAK,MAAM,aAAa;AACtC,cAAI,CAAC,OAAO;AACV;AAAA,UAAA;AAGI,gBAAA,WAAW,KAAK,iBAAiB,MAAM;AAEvC,gBAAA,UAAU,KAAK,MAAM,YAAY;AACvC,gBAAM,kBAAkB,QAAQ,OAAO,CAAC,SAAS,OAAO;AAClD,gBAAA,OAAO,GAAG,WAAW,UAAU;AACjC,qBAAQ,WAAW,GAAG;AAAA,YAAA,OAEnB;AACH,qBAAQ,WAAW;AAAA,YAAA;AAAA,aAEpB,EAAE;AACL,gBAAM,iBAAiB,gBAAgB,YAAY,KAAK,QAAQ,WAAW;AAE3E,cAAI,iBAAiB,IAAI;AACjB,kBAAA,aAAa,gBAAgB,UAAU,iBAAiB,KAAK,QAAQ,YAAY,QAAQ,QAAQ;AACvG,iBAAK,aAAa;AAClB,gBAAI,CAAC,GAAG,WAAW,KAAK,YAAY,GAAG,GAAG;AACxC,mBAAK,uBAAuB;AAC5B,mBAAK,wBAAwB,UAAU;AAAA,YAAA,OAEpC;AACH,mBAAK,gBAAgB;AAAA,YAAA;AAAA,UACvB,OAEG;AACH,iBAAK,gBAAgB;AAAA,UAAA;AAAA,QACvB;AAAA,MACF,CACD;AAAA,IACH;AAYA,SAAA,mBAAmB,MAAM;AACnB,UAAA,KAAK,UAAU;AACZ,aAAA,sBACA,KAAK,qBAAqB,KAAK,kBAAkB,SAAS,KAAK,KAAK,kBAAkB;AACtF,aAAA,qBAAqB,KAAK,kBAAkB;AAC1C,eAAA;AAAA,MAAA;AAEF,aAAA;AAAA,IACT;AAEA,SAAA,qBAAqB,MAAM;AACrB,UAAA,KAAK,UAAU;AACjB,aAAK,sBAAsB,KAAK,qBAAqB,KAAK,KAAK,kBAAkB;AAC5E,aAAA,qBAAqB,KAAK,kBAAkB;AAC1C,eAAA;AAAA,MAAA;AAEF,aAAA;AAAA,IACT;AAEA,SAAA,iBAAiB,MAAM;AACjB,UAAA,KAAK,UAAU;AACjB,aAAK,kBAAkB;AACvB,aAAK,eAAe;AAAA,MAAA;AAEf,aAAA;AAAA,IACT;AAEA,SAAA,kBAAkB,MAAM;AAClB,UAAA,KAAK,UAAU;AACjB,aAAK,gBAAgB;AACd,eAAA;AAAA,MAAA;AAEF,aAAA;AAAA,IACT;AApMM,QAAA,CAAC,QAAQ,QAAQ;AACnB,cAAQ,KAAK,mCAAmC;AAChD;AAAA,IAAA;AAGF,SAAK,UAAU,OAAO,OAAO,KAAK,gBAAgB,OAAO;AACnD,UAAA,YAAY,SAAS,cAAc,KAAK;AACpC,cAAA,UAAU,IAAI,2BAA2B;AAC/C,QAAA,KAAK,QAAQ,mBAAmB,6BAA6B;AAC/D,gBAAU,UAAU,IAAI,KAAK,QAAQ,cAAc;AAAA,IAAA;AAEhD,SAAA,gBAAgB,SAAS,cAAc,IAAI;AAC3C,SAAA,cAAc,UAAU,IAAI,KAAK,QAAQ,WAAW,KAAK,QAAQ,aAAa;AAC9E,SAAA,cAAc,MAAM,WAAW;AAAA,oBACpB,KAAK,QAAQ,SAAS;AAAA;AAGtC,UAAM,GAAG,MAAM,OAAO,aAAa,KAAK,gBAAgB;AACxD,UAAM,SAAS,WAAW,EAAE,KAAK,UAAU,GAAG,KAAK,gBAAgB;AACnE,UAAM,SAAS,WAAW,EAAE,KAAK,YAAY,GAAG,KAAK,kBAAkB;AACvE,UAAM,SAAS,WAAW,EAAE,KAAK,QAAQ,GAAG,KAAK,cAAc;AAC/D,UAAM,SAAS,WAAW,EAAE,KAAK,MAAM,GAAG,KAAK,cAAc;AAC7D,UAAM,SAAS,WAAW,EAAE,KAAK,SAAS,GAAG,KAAK,eAAe;AAC3D,UAAA,SAAS,SAAS,MAAM,QAAQ,MAAM,SAAS,SAAS,MAAM,KAAK;AACnE,UAAA,SAAS,SAAS,IAAI,QAAQ,MAAM,SAAS,SAAS,IAAI,KAAK;AAC/D,UAAA,SAAS,SAAS,OAAO,QAAQ,MAAM,SAAS,SAAS,OAAO,KAAK;AAE3E,UAAM,sBAAsB;AAAA,MAC1B,KAAK;AAAA,MACL,UAAU;AAAA,MACV,SAAS,CAAC,OAAO,YAAY;AAC3B,cAAM,cAAc,OAAO,KAAK,QAAQ,MAAM,EAAE;AAAA,UAC9C,CAAC,SAAS,WAAW;AACnB,gBACE,KAAK,MAAM,OAAO,MAAM,QAAQ,MAAM,KAAK,KACxC,CAAC,MAAM,QAAQ,QAAQ,OAAO,MAAM,CAAC,GACxC;AACA,sBAAQ,MAAM,IAAI,QAAQ,OAAO,MAAM;AAAA,YAAA;AAElC,mBAAA;AAAA,UACT;AAAA,UACA,CAAA;AAAA,QACF;AAGA,YAAI,iBAAiB,MAAM,QAAQ,KAAK,WAAW;AAC/C,YAAA,QAAQ,IAAI,MAAA,EACb,OAAO,MAAM,KAAK,EAClB,OAAO,MAAM,MAAM;AACtB,YAAI,KAAK,cAAc;AACb,kBAAA,MAAM,OAAO,MAAM,WAAW;AACtC,2BAAiB,MAAM,QAAQ;AAAA,QAAA;AAGjC,aAAK,MAAM,eAAe,OAAO,MAAM,QAAQ,IAAI;AACnD,aAAK,MAAM,aAAa,gBAAgB,MAAM,QAAQ,MAAM;AAC5D,aAAK,MAAM,MAAM;AAEjB,eAAO,KAAK,QAAQ,MAAM,EAAE,QAAQ,CAAC,SAAS;AAC5C,cAAI,CAACC,aAAA,kBAAkB,YAAY,IAAI,CAAC,EAAG;AAC3C,cAAI,MAAM,QAAQ,QAAQ,OAAO,IAAI,CAAC,EAAG;AACrC,cAAA,SAAS,UAAU,SAAS,OAAQ;AACnC,eAAA,MAAM,OAAO,MAAM,QAAQ,OAAO,IAAI,GAAG,MAAM,QAAQ,IAAI;AAAA,QAAA,CACjE;AAED,aAAK,eAAe;AAAA,MAAA;AAAA,IAExB;AAGM,UAAA,SAAS,SAAS,QAAQ,MAAM,SAAS,SAAS,MAAM,IAAI,CAAC,SAAS;AAC1E,YAAM,uBAAuB,KAAK,WAAW,UAAa,KAAK,aAAa;AAC5E,UAAI,sBAAsB;AACjB,eAAA;AAAA,MAAA,OAEJ;AACI,eAAA;AAAA,MAAA;AAAA,IACT,CACD;AAEI,SAAA,GAAG,SAAS,KAAK,gBAAgB;AACjC,SAAA,GAAG,aAAa,KAAK,gBAAgB;AAC1C,UAAM,QAAQ,GAAGC,UAAAA,wBAAwB,OAAO,EAAE,SAAS,WAAW;AAC9D,YAAA,CAAC,MAAM,IAAK,WAAW,CAAC,OAAO,KAAO,MAAM,KAAK,QAAQ,OAAO,IAAI;AACrE,WAAA,QAAQ,OAAO,MAAM;AAAA,IAAA,CAC3B;AACS,cAAA,YAAY,KAAK,aAAa;AACxC,UAAM,UAAU,cAAc,aAAa,WAAW,MAAM,SAAS;AAAA,EAAA;AAAA,EA7FvE,OAAO,WAAW;AAChB,UAAM,SAASC,mBAAW;AAAA,EAAA;AAAA,EA+F5B,GAAG,WAAW,UAAU;AACtB,SAAK,cAAc,iBAAiB,WAAW,CAAC,QAAQ;AACtD,UACE,SAAS,IAAI;AACX,UAAA;AAEJ,aAAO,KAAK,cAAc,SAAS,MAAM,KAAK,WAAW,KAAK,eAAe;AAC3E,YAAI,OAAO,UAAU,SAAS,KAAK,QAAQ,SAAS,GAAG;AACtC,yBAAA;AAAA,QAAA;AAEjB,iBAAS,OAAO;AAAA,MAAA;AAGlB,UAAI,cAAc;AAChB,iBAAS,KAAK,MAAM,cAAc,KAAK,oBAAoB,YAAY,CAAC;AAAA,MAAA;AAAA,IAC1E,CACD;AAAA,EAAA;AAAA,EAGH,oBAAoB,QAAiB;AACnC,WAAO,CAAA,EAAG,OAAO,KAAK,KAAK,cAAc,UAAU,CAAC,OAAO,MAAM,QAAQ,SAAS,SAAS,MAAM,OAAO,EAAE;AAAA,EAAA;AAAA,EA2C5G,iBAAiB,SAAwB,OAAe;AACjD,SAAA,kBAAkB,OAAO,IAAI;AAClC,SAAK,MAAM,MAAM;AAAA,EAAA;AAAA,EAGnB,iBAAiB,SAAwB,OAAe;AACtD,SAAK,qBAAqB;AAC1B,SAAK,qBAAqB,KAAK;AAAA,EAAA;AAAA,EAsCjC,uBAAuB;AACrB,WAAO,KAAK,cAAc,cAAc,IAAI,KAAK,QAAQ,eAAe,EAAE;AAAA,EAAA;AAAA,EAG5E,SAAS;AACP,WAAO,CAAC,KAAK,cAAc,UAAU,SAAS,KAAK,QAAQ,aAAa;AAAA,EAAA;AAAA,EAG1E,MAAM,wBAAwB,MAAc;AAC1C,UAAM,cAAc,MAAM,KAAK,QAAQ,OAAO,IAAI;AAClD,SAAK,oBAAoB;AACzB,QAAI,CAAC,eAAe,YAAY,WAAW,GAAG;AAC5C,aAAO,KAAK,gBAAgB;AAAA,IAAA;AAG9B,SAAK,gBAAgB,WAAW;AAAA,EAAA;AAAA,EAGlC,gBAAgB,aAAoB;AAC9B,QAAA,CAAC,KAAK,UAAU;AAClB,WAAK,cAAc,UAAU,OAAO,KAAK,QAAQ,aAAa;AAAA,IAAA;AAEhE,SAAK,qBAAqB;AAC1B,SAAK,kBAAkB;AACvB,SAAK,OAAO,WAAW;AAAA,EAAA;AAAA,EAGzB,kBAAkB;AACZ,QAAA,KAAK,UAAU;AACjB,WAAK,qBAAqB;AAC1B,WAAK,cAAc,UAAU,IAAI,KAAK,QAAQ,aAAa;AAAA,IAAA;AAAA,EAC7D;AAAA,EAGF,oBAAoB;AAClB,UAAM,cAAc,KAAK,MAAM,UAAU,WAAW;AACpD,UAAM,eAAe,KAAK,MAAM,UAAU,WAAW;AAC/C,UAAA,EAAE,MAAM,IAAA,IAAQ;AAChB,UAAA,YAAY,KAAK,MAAM;AAC7B,UAAM,cAAc,UAAU;AAC9B,UAAM,EAAE,MAAM,YAAY,KAAK,UAAU,IAAI,UAAU,sBAAsB;AAC7E,UAAM,EAAE,MAAM,iBAAiB,KAAK,eAAe,IAAI,YAAY,sBAAsB;AACzF,UAAM,eAAe,aAAa;AAClC,UAAM,cAAc,YAAY;AAC1B,UAAA,WAAW,OAAO,eAAe;AACjC,UAAA,UAAU,MAAM,cAAc;AAC/B,SAAA,cAAc,MAAM,WAAW;AAAA,cAC1B,QAAQ;AAAA,aACT,OAAO;AAAA;AAAA,EAAA;AAAA,EAIlB,OAAO,aAAoB;AACnB,UAAA,SAAS,SAAS,cAAc,KAAK;AAE3C,OAAG,QAAQ,KAAK,aAAa,CAAC,aAAa,UAAU;AAC7C,YAAA,gBAAgB,SAAS,cAAc,IAAI;AACjD,oBAAc,UAAU,IAAI,KAAK,QAAQ,SAAS;AAC9C,UAAA,UAAU,KAAK,oBAAoB;AACrC,sBAAc,UAAU,IAAI,KAAK,QAAQ,eAAe;AAAA,MAAA;AAE1D,YAAM,eAAe,KAAK,QAAQ,kBAAkB,WAAW;AAC3D,UAAA,OAAO,iBAAiB,UAAU;AACtB,sBAAA,mBAAmB,cAAc,YAAY;AAAA,MAAA,OAExD;AACW,sBAAA,sBAAsB,cAAc,YAAY;AAAA,MAAA;AAEhE,aAAO,YAAY,aAAa;AAAA,IAAA,CACjC;AAEI,SAAA,cAAc,YAAY,OAAO;AAAA,EAAA;AAAA,EAGxC,qBAAqB,OAAe;AAC5B,UAAA,gBAAgB,KAAK,qBAAqB;AAChD,QAAI,eAAe;AACjB,oBAAc,UAAU,OAAO,KAAK,QAAQ,eAAe;AAAA,IAAA;AAGvD,UAAA,gBAAgB,KAAK,cAAc,cAAc,IAAI,KAAK,QAAQ,SAAS,gBAAgB,QAAQ,CAAC,GAAG;AAC7G,QAAI,eAAe;AACjB,oBAAc,UAAU,IAAI,KAAK,QAAQ,eAAe;AACxD,WAAK,eAAe,aAAa;AAAA,IAAA;AAAA,EACnC;AAAA,EAGF,eAAe,MAAqB;AAClC,UAAM,YAAiB;AACvB,QAAI,UAAU,wBAAwB;AACpC,gBAAU,uBAAuB,KAAK;AACtC;AAAA,IAAA;AAEF,QAAI,KAAK,gBAAgB;AACvB,WAAK,eAAe,KAAK;AAAA,IAAA;AAAA,EAC3B;AAAA,EAGF,kBAAkB,QAAQ,KAAK,oBAAoB,SAAmB;AAC9D,UAAA,oBAAoB,KAAK,kBAAkB,KAAK;AACjD,SAAA,kBAAkB,mBAAmB,OAAO;AAC5C,SAAA,QAAQ,OAAO,iBAAiB;AACrC,SAAK,gBAAgB;AAAA,EAAA;AAAA,EAGvB,kBAAkB,mBAAwB,SAAmB;AAC3D,UAAM,UAAU,KAAK,QAAQ,kBAAkB,iBAAiB;AAChE,UAAM,QAAQ,IAAI,MAAM,EACrB,OAAO,KAAK,oBAAoB,EAChC,OAAO,KAAK,iBAAiB,KAAK,oBAAoB,EACtD,OAAO;AAAA,MACN,CAACA,YAAAA,QAAY,QAAQ,GAAG;AAAA,QACtB,MAAM,KAAK,QAAQ;AAAA,QACnB,MAAM;AAAA,QACN,SAAS;AAAA,QACT,MAAM,kBAAkB,QAAQ,KAAK,QAAQ;AAAA,QAC7C,QAAQ,kBAAkB,UAAU,KAAK,QAAQ;AAAA,QACjD,WAAW,KAAK,QAAQ;AAAA,MAAA;AAAA,IAC1B,CACD;AACH,QAAI,SAAS;AACX,WAAK,MAAM,eAAe,OAAO,MAAM,QAAQ,IAAI;AAAA,IAAA,OAEhD;AACH,WAAK,MAAM,eAAe,OAAO,MAAM,QAAQ,GAAG;AAAA,IAAA;AAEpD,SAAK,MAAM,aAAa,KAAK,uBAAuB,GAAG,MAAM,QAAQ,GAAG;AAAA,EAAA;AAE5E;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"MentionLink.cjs.js","sources":["../../../../src/modules/mention/MentionLink.ts"],"sourcesContent":["import type TypeEmbed from 'quill/blots/embed'\nimport Quill from 'quill'\nimport { DEFAULT_MENTION_CHAR, MENTION_CHAR, ON_MENTION_LINK_REMOVE } from './constants'\n\nconst Embed = Quill.import('blots/embed') as typeof TypeEmbed\n\n// @dynamic\nclass MentionLink extends Embed {\n static blotName: string\n static tagName: string\n static className: string\n scroll: any\n mentionData: any\n\n static create(data) {\n let node: HTMLElement\n if (data.link) {\n node = document.createElement('a')\n node.setAttribute('href', data.link)\n node.setAttribute('target', data.target)\n }\n else {\n node = document.createElement(this.tagName)\n }\n node.classList.add(this.className)\n node.dataset.mentionId = data.name || (data.mention && data.mention[data.searchKey || 'name']) || ''\n node.setAttribute('title', data.text)\n node.setAttribute(MENTION_CHAR, data.char)\n node.textContent = data.char + data.text\n return node\n }\n\n static value(domNode: HTMLElement) {\n const value: Record<string, any> = {\n char: domNode.getAttribute(MENTION_CHAR) || DEFAULT_MENTION_CHAR,\n text: domNode.getAttribute('title'),\n name: domNode.dataset.mentionId,\n }\n if (domNode.tagName.toLowerCase() === 'a' && domNode.hasAttribute('href')) {\n value.link = domNode.getAttribute('href')\n value.target = domNode.getAttribute('target')\n }\n return value\n }\n\n constructor(scroll, domNode, data) {\n super(scroll, domNode)\n this.mentionData = data\n }\n\n value() {\n // fix: 将@提醒内容加入到 Delta 里,以解决输入空格,@提醒内容被删除的问题\n // return ' ';\n return super.value()\n }\n\n remove() {\n this.scroll.emitter.emit(ON_MENTION_LINK_REMOVE, this.mentionData)\n return super.remove()\n }\n}\n\nMentionLink.blotName = 'mention'\nMentionLink.tagName = 'span'\nMentionLink.className = 'ql-mention-link'\nexport { MentionLink as default }\n"],"names":["MENTION_CHAR","DEFAULT_MENTION_CHAR","ON_MENTION_LINK_REMOVE"],"mappings":";;;;AAIA,MAAM,QAAQ,MAAM,OAAO,aAAa;AAGxC,MAAM,oBAAoB,MAAM;AAAA,EAO9B,OAAO,OAAO,MAAM;AACd,QAAA;AACJ,QAAI,KAAK,MAAM;AACN,aAAA,SAAS,cAAc,GAAG;AAC5B,WAAA,aAAa,QAAQ,KAAK,IAAI;AAC9B,WAAA,aAAa,UAAU,KAAK,MAAM;AAAA,IAAA,OAEpC;AACI,aAAA,SAAS,cAAc,KAAK,OAAO;AAAA,IAAA;AAEvC,SAAA,UAAU,IAAI,KAAK,SAAS;AAC5B,SAAA,QAAQ,YAAY,KAAK,QAAS,KAAK,WAAW,KAAK,QAAQ,KAAK,aAAa,MAAM,KAAM;AAC7F,SAAA,aAAa,SAAS,KAAK,IAAI;AAC/B,SAAA,aAAaA,wBAAc,KAAK,IAAI;AACpC,SAAA,cAAc,KAAK,OAAO,KAAK;AAC7B,WAAA;AAAA,EAAA;AAAA,EAGT,OAAO,MAAM,SAAsB;AACjC,UAAM,QAA6B;AAAA,MACjC,MAAM,QAAQ,aAAaA,UAAAA,YAAY,KAAKC,UAAA;AAAA,MAC5C,MAAM,QAAQ,aAAa,OAAO;AAAA,MAClC,MAAM,QAAQ,QAAQ;AAAA,IACxB;AACI,QAAA,QAAQ,QAAQ,YAAY,MAAM,OAAO,QAAQ,aAAa,MAAM,GAAG;AACnE,YAAA,OAAO,QAAQ,aAAa,MAAM;AAClC,YAAA,SAAS,QAAQ,aAAa,QAAQ;AAAA,IAAA;AAEvC,WAAA;AAAA,EAAA;AAAA,EAGT,YAAY,QAAQ,SAAS,MAAM;AACjC,UAAM,QAAQ,OAAO;AACrB,SAAK,cAAc;AAAA,EAAA;AAAA,EAGrB,QAAQ;AAGN,WAAO,MAAM,MAAM;AAAA,EAAA;AAAA,EAGrB,SAAS;AACP,SAAK,OAAO,QAAQ,KAAKC,UAAA,wBAAwB,KAAK,WAAW;AACjE,WAAO,MAAM,OAAO;AAAA,EAAA;AAExB;AAEA,YAAY,WAAW;AACvB,YAAY,UAAU;AACtB,YAAY,YAAY;;"}
1
+ {"version":3,"file":"MentionLink.cjs.js","sources":["../../../../src/modules/mention/MentionLink.ts"],"sourcesContent":["import type TypeEmbed from 'quill/blots/embed'\r\nimport Quill from 'quill'\r\nimport { DEFAULT_MENTION_CHAR, MENTION_CHAR, ON_MENTION_LINK_REMOVE } from './constants'\r\n\r\nconst Embed = Quill.import('blots/embed') as typeof TypeEmbed\r\n\r\n// @dynamic\r\nclass MentionLink extends Embed {\r\n static blotName: string\r\n static tagName: string\r\n static className: string\r\n scroll: any\r\n mentionData: any\r\n\r\n static create(data) {\r\n let node: HTMLElement\r\n if (data.link) {\r\n node = document.createElement('a')\r\n node.setAttribute('href', data.link)\r\n node.setAttribute('target', data.target)\r\n }\r\n else {\r\n node = document.createElement(this.tagName)\r\n }\r\n node.classList.add(this.className)\r\n node.dataset.mentionId = data.name || (data.mention && data.mention[data.searchKey || 'name']) || ''\r\n node.setAttribute('title', data.text)\r\n node.setAttribute(MENTION_CHAR, data.char)\r\n node.textContent = data.char + data.text\r\n return node\r\n }\r\n\r\n static value(domNode: HTMLElement) {\r\n const value: Record<string, any> = {\r\n char: domNode.getAttribute(MENTION_CHAR) || DEFAULT_MENTION_CHAR,\r\n text: domNode.getAttribute('title'),\r\n name: domNode.dataset.mentionId,\r\n }\r\n if (domNode.tagName.toLowerCase() === 'a' && domNode.hasAttribute('href')) {\r\n value.link = domNode.getAttribute('href')\r\n value.target = domNode.getAttribute('target')\r\n }\r\n return value\r\n }\r\n\r\n constructor(scroll, domNode, data) {\r\n super(scroll, domNode)\r\n this.mentionData = data\r\n }\r\n\r\n value() {\r\n // fix: 将@提醒内容加入到 Delta 里,以解决输入空格,@提醒内容被删除的问题\r\n // return ' ';\r\n return super.value()\r\n }\r\n\r\n remove() {\r\n this.scroll.emitter.emit(ON_MENTION_LINK_REMOVE, this.mentionData)\r\n return super.remove()\r\n }\r\n}\r\n\r\nMentionLink.blotName = 'mention'\r\nMentionLink.tagName = 'span'\r\nMentionLink.className = 'ql-mention-link'\r\nexport { MentionLink as default }\r\n"],"names":["MENTION_CHAR","DEFAULT_MENTION_CHAR","ON_MENTION_LINK_REMOVE"],"mappings":";;;;AAIA,MAAM,QAAQ,MAAM,OAAO,aAAa;AAGxC,MAAM,oBAAoB,MAAM;AAAA,EAO9B,OAAO,OAAO,MAAM;AACd,QAAA;AACJ,QAAI,KAAK,MAAM;AACN,aAAA,SAAS,cAAc,GAAG;AAC5B,WAAA,aAAa,QAAQ,KAAK,IAAI;AAC9B,WAAA,aAAa,UAAU,KAAK,MAAM;AAAA,IAAA,OAEpC;AACI,aAAA,SAAS,cAAc,KAAK,OAAO;AAAA,IAAA;AAEvC,SAAA,UAAU,IAAI,KAAK,SAAS;AAC5B,SAAA,QAAQ,YAAY,KAAK,QAAS,KAAK,WAAW,KAAK,QAAQ,KAAK,aAAa,MAAM,KAAM;AAC7F,SAAA,aAAa,SAAS,KAAK,IAAI;AAC/B,SAAA,aAAaA,wBAAc,KAAK,IAAI;AACpC,SAAA,cAAc,KAAK,OAAO,KAAK;AAC7B,WAAA;AAAA,EAAA;AAAA,EAGT,OAAO,MAAM,SAAsB;AACjC,UAAM,QAA6B;AAAA,MACjC,MAAM,QAAQ,aAAaA,UAAAA,YAAY,KAAKC,UAAA;AAAA,MAC5C,MAAM,QAAQ,aAAa,OAAO;AAAA,MAClC,MAAM,QAAQ,QAAQ;AAAA,IACxB;AACI,QAAA,QAAQ,QAAQ,YAAY,MAAM,OAAO,QAAQ,aAAa,MAAM,GAAG;AACnE,YAAA,OAAO,QAAQ,aAAa,MAAM;AAClC,YAAA,SAAS,QAAQ,aAAa,QAAQ;AAAA,IAAA;AAEvC,WAAA;AAAA,EAAA;AAAA,EAGT,YAAY,QAAQ,SAAS,MAAM;AACjC,UAAM,QAAQ,OAAO;AACrB,SAAK,cAAc;AAAA,EAAA;AAAA,EAGrB,QAAQ;AAGN,WAAO,MAAM,MAAM;AAAA,EAAA;AAAA,EAGrB,SAAS;AACP,SAAK,OAAO,QAAQ,KAAKC,UAAA,wBAAwB,KAAK,WAAW;AACjE,WAAO,MAAM,OAAO;AAAA,EAAA;AAExB;AAEA,YAAY,WAAW;AACvB,YAAY,UAAU;AACtB,YAAY,YAAY;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"constants.cjs.js","sources":["../../../../src/modules/mention/constants.ts"],"sourcesContent":["export const ON_MENTION_LINK_REMOVE = 'mention-link/remove'\nexport const MENTION_CHAR = 'mentionChar'\nexport const DEFAULT_MENTION_CHAR = '@'\n"],"names":[],"mappings":";;AAAO,MAAM,yBAAyB;AAC/B,MAAM,eAAe;AACrB,MAAM,uBAAuB;;;;"}
1
+ {"version":3,"file":"constants.cjs.js","sources":["../../../../src/modules/mention/constants.ts"],"sourcesContent":["export const ON_MENTION_LINK_REMOVE = 'mention-link/remove'\r\nexport const MENTION_CHAR = 'mentionChar'\r\nexport const DEFAULT_MENTION_CHAR = '@'\r\n"],"names":[],"mappings":";;AAAO,MAAM,yBAAyB;AAC/B,MAAM,eAAe;AACrB,MAAM,uBAAuB;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"quick-menu.cjs.js","sources":["../../../src/modules/quick-menu.ts"],"sourcesContent":["import type Quill from 'quill'\n\ninterface QuickMenuOptions {\n container: string\n component: any\n}\n\nclass QuickMenu {\n private container: HTMLDivElement\n private hostElement: HTMLDivElement\n private quickMenu: HTMLDivElement\n private quickMenuContainer: HTMLDivElement\n\n // @ts-ignore\n constructor(private quill: Quill, private options: QuickMenuOptions) {\n this.quill = quill\n this.options = options\n this.container = this.quill.container\n this.hostElement = this.container.parentNode as HTMLDivElement\n this.quickMenu = this.hostElement.querySelector('.quick-menu')\n this.quickMenuContainer = this.quickMenu.querySelector('.quick-menu-container')\n quill.keyboard.addBinding({ key: '/' }, this.handleSlashKeyDown)\n quill.keyboard.addBinding({ key: 'ArrowUp' }, this.handleArrowUpKey)\n quill.keyboard.addBinding({ key: 'ArrowDown' }, this.handleArrowDownKey)\n quill.keyboard.addBinding({ key: 'Enter' }, this.handleEnterKey)\n quill.keyboard.bindings.Enter.unshift(quill.keyboard.bindings.Enter.pop())\n document.body.addEventListener('click', this.hideQuickMenu.bind(this))\n }\n\n handleSlashKeyDown = (_range, context) => {\n const index = this.quill.selection.savedRange.index\n this.quill.insertText(index, '/')\n\n // 一行的第一个字符为 '/',且没有格式化,则触发快捷菜单\n const shouldTriggerQuickMenu = context.prefix === '' && Object.keys(context.format).length === 0\n if (shouldTriggerQuickMenu) {\n const cursorIndex = this.quill.selection.savedRange.index\n const cursorBounds = this.quill.getBounds(cursorIndex)\n const { left, top } = cursorBounds\n const { left: editorLeft, top: editorTop } = this.container.getBoundingClientRect()\n const { left: hostElementLeft, top: hostElementTop } = this.hostElement.getBoundingClientRect()\n const relativeLeft = editorLeft - hostElementLeft\n const relativeTop = editorTop - hostElementTop\n const menuLeft = left + relativeLeft - 5\n const menuTop = top + relativeTop + 20\n\n this.quickMenu.style.display = 'block'\n const zIndex = this.quill.options.modules.quickmenu.zIndex\n let style = `left:${menuLeft}px;top:${menuTop}px;`\n if (zIndex || zIndex === 0) {\n style += `z-index:${zIndex}`\n }\n this.quickMenuContainer.setAttribute('style', style)\n this.options.component.activeIndex = 0\n }\n else {\n this.quickMenu.style.display = 'none'\n }\n }\n\n private isOpen() {\n return this.quickMenuContainer.style.display !== 'none' && this.quickMenu.style.display === 'block'\n }\n\n hideQuickMenu = (event) => {\n if (this.quickMenuContainer && !this.quickMenuContainer.contains(event.target)) {\n this.quickMenuContainer.style.display = 'none'\n }\n }\n\n handleArrowUpKey = (_range, _context) => {\n if (this.isOpen()) {\n const index = this.options.component.activeIndex\n const total = this.options.component.quickMenus.length\n this.options.component.activeIndex = (index + total - 1) % total\n return false\n }\n return true\n }\n\n handleArrowDownKey = (_range, _context) => {\n if (this.isOpen()) {\n const index = this.options.component.activeIndex\n const total = this.options.component.quickMenus.length\n this.options.component.activeIndex = (index + 1) % total\n return false\n }\n return true\n }\n\n handleEnterKey = (_range, _context) => {\n if (this.isOpen()) {\n this.options.component.onEnter()\n return false\n }\n return true\n }\n}\n\nexport default QuickMenu\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"quick-menu.cjs.js","sources":["../../../src/modules/quick-menu.ts"],"sourcesContent":["import type Quill from 'quill'\r\n\r\ninterface QuickMenuOptions {\r\n container: string\r\n component: any\r\n}\r\n\r\nclass QuickMenu {\r\n private container: HTMLDivElement\r\n private hostElement: HTMLDivElement\r\n private quickMenu: HTMLDivElement\r\n private quickMenuContainer: HTMLDivElement\r\n\r\n // @ts-ignore\r\n constructor(private quill: Quill, private options: QuickMenuOptions) {\r\n this.quill = quill\r\n this.options = options\r\n this.container = this.quill.container\r\n this.hostElement = this.container.parentNode as HTMLDivElement\r\n this.quickMenu = this.hostElement.querySelector('.quick-menu')\r\n this.quickMenuContainer = this.quickMenu.querySelector('.quick-menu-container')\r\n quill.keyboard.addBinding({ key: '/' }, this.handleSlashKeyDown)\r\n quill.keyboard.addBinding({ key: 'ArrowUp' }, this.handleArrowUpKey)\r\n quill.keyboard.addBinding({ key: 'ArrowDown' }, this.handleArrowDownKey)\r\n quill.keyboard.addBinding({ key: 'Enter' }, this.handleEnterKey)\r\n quill.keyboard.bindings.Enter.unshift(quill.keyboard.bindings.Enter.pop())\r\n document.body.addEventListener('click', this.hideQuickMenu.bind(this))\r\n }\r\n\r\n handleSlashKeyDown = (_range, context) => {\r\n const index = this.quill.selection.savedRange.index\r\n this.quill.insertText(index, '/')\r\n\r\n // 一行的第一个字符为 '/',且没有格式化,则触发快捷菜单\r\n const shouldTriggerQuickMenu = context.prefix === '' && Object.keys(context.format).length === 0\r\n if (shouldTriggerQuickMenu) {\r\n const cursorIndex = this.quill.selection.savedRange.index\r\n const cursorBounds = this.quill.getBounds(cursorIndex)\r\n const { left, top } = cursorBounds\r\n const { left: editorLeft, top: editorTop } = this.container.getBoundingClientRect()\r\n const { left: hostElementLeft, top: hostElementTop } = this.hostElement.getBoundingClientRect()\r\n const relativeLeft = editorLeft - hostElementLeft\r\n const relativeTop = editorTop - hostElementTop\r\n const menuLeft = left + relativeLeft - 5\r\n const menuTop = top + relativeTop + 20\r\n\r\n this.quickMenu.style.display = 'block'\r\n const zIndex = this.quill.options.modules.quickmenu.zIndex\r\n let style = `left:${menuLeft}px;top:${menuTop}px;`\r\n if (zIndex || zIndex === 0) {\r\n style += `z-index:${zIndex}`\r\n }\r\n this.quickMenuContainer.setAttribute('style', style)\r\n this.options.component.activeIndex = 0\r\n }\r\n else {\r\n this.quickMenu.style.display = 'none'\r\n }\r\n }\r\n\r\n private isOpen() {\r\n return this.quickMenuContainer.style.display !== 'none' && this.quickMenu.style.display === 'block'\r\n }\r\n\r\n hideQuickMenu = (event) => {\r\n if (this.quickMenuContainer && !this.quickMenuContainer.contains(event.target)) {\r\n this.quickMenuContainer.style.display = 'none'\r\n }\r\n }\r\n\r\n handleArrowUpKey = (_range, _context) => {\r\n if (this.isOpen()) {\r\n const index = this.options.component.activeIndex\r\n const total = this.options.component.quickMenus.length\r\n this.options.component.activeIndex = (index + total - 1) % total\r\n return false\r\n }\r\n return true\r\n }\r\n\r\n handleArrowDownKey = (_range, _context) => {\r\n if (this.isOpen()) {\r\n const index = this.options.component.activeIndex\r\n const total = this.options.component.quickMenus.length\r\n this.options.component.activeIndex = (index + 1) % total\r\n return false\r\n }\r\n return true\r\n }\r\n\r\n handleEnterKey = (_range, _context) => {\r\n if (this.isOpen()) {\r\n this.options.component.onEnter()\r\n return false\r\n }\r\n return true\r\n }\r\n}\r\n\r\nexport default QuickMenu\r\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"syntax.cjs.js","sources":["../../../src/modules/syntax.ts"],"sourcesContent":["import type TypeSyntax from 'quill/modules/syntax'\nimport Quill from 'quill'\n\nconst Syntax = Quill.import('modules/syntax') as typeof TypeSyntax\n\n// @dynamic\nclass CustomSyntax extends Syntax {\n static DEFAULTS: { hljs: any, interval: number, languages: { key: string, label: string }[] }\n}\n\nCustomSyntax.DEFAULTS = {\n hljs: (() => {\n // @ts-ignore\n return window.hljs\n })(),\n interval: 1000,\n languages: [\n { key: 'plain', label: 'Plain' },\n { key: 'bash', label: 'Bash' },\n { key: 'cpp', label: 'C++' },\n { key: 'cs', label: 'C#' },\n { key: 'css', label: 'CSS' },\n { key: 'diff', label: 'Diff' },\n { key: 'xml', label: 'HTML/XML' },\n { key: 'java', label: 'Java' },\n { key: 'javascript', label: 'Javascript' },\n { key: 'markdown', label: 'Markdown' },\n { key: 'php', label: 'PHP' },\n { key: 'python', label: 'Python' },\n { key: 'ruby', label: 'Ruby' },\n { key: 'sql', label: 'SQL' },\n ],\n}\n\nexport default CustomSyntax\n"],"names":[],"mappings":";;;AAGA,MAAM,SAAS,MAAM,OAAO,gBAAgB;AAG5C,MAAM,qBAAqB,OAAO;AAElC;AAEA,aAAa,WAAW;AAAA,EACtB,OAAO,MAAM;AAEX,WAAO,OAAO;AAAA,EAAA,GACb;AAAA,EACH,UAAU;AAAA,EACV,WAAW;AAAA,IACT,EAAE,KAAK,SAAS,OAAO,QAAQ;AAAA,IAC/B,EAAE,KAAK,QAAQ,OAAO,OAAO;AAAA,IAC7B,EAAE,KAAK,OAAO,OAAO,MAAM;AAAA,IAC3B,EAAE,KAAK,MAAM,OAAO,KAAK;AAAA,IACzB,EAAE,KAAK,OAAO,OAAO,MAAM;AAAA,IAC3B,EAAE,KAAK,QAAQ,OAAO,OAAO;AAAA,IAC7B,EAAE,KAAK,OAAO,OAAO,WAAW;AAAA,IAChC,EAAE,KAAK,QAAQ,OAAO,OAAO;AAAA,IAC7B,EAAE,KAAK,cAAc,OAAO,aAAa;AAAA,IACzC,EAAE,KAAK,YAAY,OAAO,WAAW;AAAA,IACrC,EAAE,KAAK,OAAO,OAAO,MAAM;AAAA,IAC3B,EAAE,KAAK,UAAU,OAAO,SAAS;AAAA,IACjC,EAAE,KAAK,QAAQ,OAAO,OAAO;AAAA,IAC7B,EAAE,KAAK,OAAO,OAAO,MAAM;AAAA,EAAA;AAE/B;;"}
1
+ {"version":3,"file":"syntax.cjs.js","sources":["../../../src/modules/syntax.ts"],"sourcesContent":["import type TypeSyntax from 'quill/modules/syntax'\r\nimport Quill from 'quill'\r\n\r\nconst Syntax = Quill.import('modules/syntax') as typeof TypeSyntax\r\n\r\n// @dynamic\r\nclass CustomSyntax extends Syntax {\r\n static DEFAULTS: { hljs: any, interval: number, languages: { key: string, label: string }[] }\r\n}\r\n\r\nCustomSyntax.DEFAULTS = {\r\n hljs: (() => {\r\n // @ts-ignore\r\n return window.hljs\r\n })(),\r\n interval: 1000,\r\n languages: [\r\n { key: 'plain', label: 'Plain' },\r\n { key: 'bash', label: 'Bash' },\r\n { key: 'cpp', label: 'C++' },\r\n { key: 'cs', label: 'C#' },\r\n { key: 'css', label: 'CSS' },\r\n { key: 'diff', label: 'Diff' },\r\n { key: 'xml', label: 'HTML/XML' },\r\n { key: 'java', label: 'Java' },\r\n { key: 'javascript', label: 'Javascript' },\r\n { key: 'markdown', label: 'Markdown' },\r\n { key: 'php', label: 'PHP' },\r\n { key: 'python', label: 'Python' },\r\n { key: 'ruby', label: 'Ruby' },\r\n { key: 'sql', label: 'SQL' },\r\n ],\r\n}\r\n\r\nexport default CustomSyntax\r\n"],"names":[],"mappings":";;;AAGA,MAAM,SAAS,MAAM,OAAO,gBAAgB;AAG5C,MAAM,qBAAqB,OAAO;AAElC;AAEA,aAAa,WAAW;AAAA,EACtB,OAAO,MAAM;AAEX,WAAO,OAAO;AAAA,EAAA,GACb;AAAA,EACH,UAAU;AAAA,EACV,WAAW;AAAA,IACT,EAAE,KAAK,SAAS,OAAO,QAAQ;AAAA,IAC/B,EAAE,KAAK,QAAQ,OAAO,OAAO;AAAA,IAC7B,EAAE,KAAK,OAAO,OAAO,MAAM;AAAA,IAC3B,EAAE,KAAK,MAAM,OAAO,KAAK;AAAA,IACzB,EAAE,KAAK,OAAO,OAAO,MAAM;AAAA,IAC3B,EAAE,KAAK,QAAQ,OAAO,OAAO;AAAA,IAC7B,EAAE,KAAK,OAAO,OAAO,WAAW;AAAA,IAChC,EAAE,KAAK,QAAQ,OAAO,OAAO;AAAA,IAC7B,EAAE,KAAK,cAAc,OAAO,aAAa;AAAA,IACzC,EAAE,KAAK,YAAY,OAAO,WAAW;AAAA,IACrC,EAAE,KAAK,OAAO,OAAO,MAAM;AAAA,IAC3B,EAAE,KAAK,UAAU,OAAO,SAAS;AAAA,IACjC,EAAE,KAAK,QAAQ,OAAO,OAAO;AAAA,IAC7B,EAAE,KAAK,OAAO,OAAO,MAAM;AAAA,EAAA;AAE/B;;"}