@opentiny/fluent-editor 3.25.4 → 4.0.0-alpha.1

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 (247) hide show
  1. package/es/attributors/font-style.es.js +1 -1
  2. package/es/attributors/font-style.es.js.map +1 -1
  3. package/es/attributors/line-height.es.js +1 -1
  4. package/es/attributors/line-height.es.js.map +1 -1
  5. package/es/config/editor.config.es.js +0 -7
  6. package/es/config/editor.config.es.js.map +1 -1
  7. package/es/config/editor.utils.es.js +0 -9
  8. package/es/config/editor.utils.es.js.map +1 -1
  9. package/es/config/i18n/en-us.es.js +33 -17
  10. package/es/config/i18n/en-us.es.js.map +1 -1
  11. package/es/config/i18n/zh-cn.es.js +33 -17
  12. package/es/config/i18n/zh-cn.es.js.map +1 -1
  13. package/es/config/index.es.js +7 -13
  14. package/es/config/index.es.js.map +1 -1
  15. package/es/core/fluent-editor.es.js +6 -4
  16. package/es/core/fluent-editor.es.js.map +1 -1
  17. package/es/fluent-editor.es.js +24 -12
  18. package/es/fluent-editor.es.js.map +1 -1
  19. package/es/formats/video.es.js +2 -2
  20. package/es/formats/video.es.js.map +1 -1
  21. package/es/index.es.js +8 -4
  22. package/es/index.es.js.map +1 -1
  23. package/es/modules/custom-clipboard.es.js +3 -61
  24. package/es/modules/custom-clipboard.es.js.map +1 -1
  25. package/es/modules/custom-image/BlotFormatter.es.js +1 -2
  26. package/es/modules/custom-image/BlotFormatter.es.js.map +1 -1
  27. package/es/modules/custom-image/image.es.js +4 -16
  28. package/es/modules/custom-image/image.es.js.map +1 -1
  29. package/es/modules/custom-uploader.es.js +60 -193
  30. package/es/modules/custom-uploader.es.js.map +1 -1
  31. package/es/modules/file/formats/file.es.js +12 -14
  32. package/es/modules/file/formats/file.es.js.map +1 -1
  33. package/es/modules/file/index.es.js +6 -7
  34. package/es/modules/file/index.es.js.map +1 -1
  35. package/es/modules/i18n.es.js +32 -12
  36. package/es/modules/i18n.es.js.map +1 -1
  37. package/es/modules/link/index.es.js +0 -17
  38. package/es/modules/link/index.es.js.map +1 -1
  39. package/es/modules/link/modules/tooltip.es.js +3 -2
  40. package/es/modules/link/modules/tooltip.es.js.map +1 -1
  41. package/es/modules/shortcut-key/index.es.js +229 -0
  42. package/es/modules/shortcut-key/index.es.js.map +1 -0
  43. package/es/modules/table-up/index.es.js +64 -0
  44. package/es/modules/table-up/index.es.js.map +1 -0
  45. package/es/modules/toolbar/better-picker.es.js +21 -269
  46. package/es/modules/toolbar/better-picker.es.js.map +1 -1
  47. package/es/modules/toolbar/index.es.js +0 -1
  48. package/es/modules/toolbar/index.es.js.map +1 -1
  49. package/es/modules/toolbar/toolbar-tip.es.js +44 -9
  50. package/es/modules/toolbar/toolbar-tip.es.js.map +1 -1
  51. package/es/themes/snow.es.js +198 -50
  52. package/es/themes/snow.es.js.map +1 -1
  53. package/es/ui/icons.config.es.js +6 -5
  54. package/es/ui/icons.config.es.js.map +1 -1
  55. package/es/ui/icons.es.js +3 -12
  56. package/es/ui/icons.es.js.map +1 -1
  57. package/es/utils/is.es.js +4 -0
  58. package/es/utils/is.es.js.map +1 -1
  59. package/lib/attributors/font-style.cjs.js +1 -1
  60. package/lib/attributors/font-style.cjs.js.map +1 -1
  61. package/lib/attributors/line-height.cjs.js +1 -1
  62. package/lib/attributors/line-height.cjs.js.map +1 -1
  63. package/lib/config/editor.config.cjs.js +0 -7
  64. package/lib/config/editor.config.cjs.js.map +1 -1
  65. package/lib/config/editor.utils.cjs.js +0 -9
  66. package/lib/config/editor.utils.cjs.js.map +1 -1
  67. package/lib/config/i18n/en-us.cjs.js +33 -17
  68. package/lib/config/i18n/en-us.cjs.js.map +1 -1
  69. package/lib/config/i18n/zh-cn.cjs.js +33 -17
  70. package/lib/config/i18n/zh-cn.cjs.js.map +1 -1
  71. package/lib/config/index.cjs.js +5 -11
  72. package/lib/config/index.cjs.js.map +1 -1
  73. package/lib/core/fluent-editor.cjs.js +5 -3
  74. package/lib/core/fluent-editor.cjs.js.map +1 -1
  75. package/lib/fluent-editor.cjs.js +23 -11
  76. package/lib/fluent-editor.cjs.js.map +1 -1
  77. package/lib/formats/video.cjs.js +2 -2
  78. package/lib/formats/video.cjs.js.map +1 -1
  79. package/lib/index.cjs.js +9 -2
  80. package/lib/index.cjs.js.map +1 -1
  81. package/lib/modules/custom-clipboard.cjs.js +2 -60
  82. package/lib/modules/custom-clipboard.cjs.js.map +1 -1
  83. package/lib/modules/custom-image/BlotFormatter.cjs.js +0 -1
  84. package/lib/modules/custom-image/BlotFormatter.cjs.js.map +1 -1
  85. package/lib/modules/custom-image/image.cjs.js +4 -16
  86. package/lib/modules/custom-image/image.cjs.js.map +1 -1
  87. package/lib/modules/custom-uploader.cjs.js +61 -194
  88. package/lib/modules/custom-uploader.cjs.js.map +1 -1
  89. package/lib/modules/file/formats/file.cjs.js +12 -14
  90. package/lib/modules/file/formats/file.cjs.js.map +1 -1
  91. package/lib/modules/file/index.cjs.js +6 -7
  92. package/lib/modules/file/index.cjs.js.map +1 -1
  93. package/lib/modules/i18n.cjs.js +31 -11
  94. package/lib/modules/i18n.cjs.js.map +1 -1
  95. package/lib/modules/link/index.cjs.js +0 -17
  96. package/lib/modules/link/index.cjs.js.map +1 -1
  97. package/lib/modules/link/modules/tooltip.cjs.js +2 -1
  98. package/lib/modules/link/modules/tooltip.cjs.js.map +1 -1
  99. package/lib/modules/shortcut-key/index.cjs.js +229 -0
  100. package/lib/modules/shortcut-key/index.cjs.js.map +1 -0
  101. package/lib/modules/table-up/index.cjs.js +64 -0
  102. package/lib/modules/table-up/index.cjs.js.map +1 -0
  103. package/lib/modules/toolbar/better-picker.cjs.js +21 -270
  104. package/lib/modules/toolbar/better-picker.cjs.js.map +1 -1
  105. package/lib/modules/toolbar/index.cjs.js +0 -1
  106. package/lib/modules/toolbar/index.cjs.js.map +1 -1
  107. package/lib/modules/toolbar/toolbar-tip.cjs.js +44 -9
  108. package/lib/modules/toolbar/toolbar-tip.cjs.js.map +1 -1
  109. package/lib/themes/snow.cjs.js +200 -52
  110. package/lib/themes/snow.cjs.js.map +1 -1
  111. package/lib/ui/icons.cjs.js +2 -11
  112. package/lib/ui/icons.cjs.js.map +1 -1
  113. package/lib/ui/icons.config.cjs.js +6 -5
  114. package/lib/ui/icons.config.cjs.js.map +1 -1
  115. package/lib/utils/is.cjs.js +4 -0
  116. package/lib/utils/is.cjs.js.map +1 -1
  117. package/package.json +4 -2
  118. package/style.css +316 -2149
  119. package/types/attributors/font-style.d.ts +1 -1
  120. package/types/config/editor.config.d.ts +0 -218
  121. package/types/config/editor.utils.d.ts +0 -1
  122. package/types/config/i18n/en-us.d.ts +31 -16
  123. package/types/config/i18n/zh-cn.d.ts +31 -16
  124. package/types/config/index.d.ts +1 -1
  125. package/types/config/types/editor-config.interface.d.ts +0 -19
  126. package/types/config/types/editor-modules.interface.d.ts +2 -0
  127. package/types/config/types/toolbar-item.interface.d.ts +11 -11
  128. package/types/core/fluent-editor.d.ts +4 -1
  129. package/types/index.d.ts +3 -0
  130. package/types/modules/counter.d.ts +1 -1
  131. package/types/modules/custom-clipboard.d.ts +1 -1
  132. package/types/modules/custom-image/image.d.ts +8 -11
  133. package/types/modules/file/formats/file.d.ts +12 -8
  134. package/types/modules/file/index.d.ts +5 -5
  135. package/types/modules/i18n.d.ts +4 -4
  136. package/types/modules/shortcut-key/index.d.ts +68 -0
  137. package/types/modules/table-up/index.d.ts +66 -0
  138. package/types/modules/toolbar/better-picker.d.ts +15 -0
  139. package/types/themes/snow.d.ts +10 -2
  140. package/types/ui/icons.config.d.ts +2 -2
  141. package/types/utils/is.d.ts +2 -0
  142. package/es/modules/global-link/constants.es.js +0 -9
  143. package/es/modules/global-link/constants.es.js.map +0 -1
  144. package/es/modules/global-link/formats/customer-widget-link.es.js +0 -28
  145. package/es/modules/global-link/formats/customer-widget-link.es.js.map +0 -1
  146. package/es/modules/global-link/formats/doc-link.es.js +0 -42
  147. package/es/modules/global-link/formats/doc-link.es.js.map +0 -1
  148. package/es/modules/global-link/formats/wiki-link.es.js +0 -34
  149. package/es/modules/global-link/formats/wiki-link.es.js.map +0 -1
  150. package/es/modules/global-link/formats/work-item-link.es.js +0 -36
  151. package/es/modules/global-link/formats/work-item-link.es.js.map +0 -1
  152. package/es/modules/global-link/global-link-panel.es.js +0 -2
  153. package/es/modules/global-link/global-link-panel.es.js.map +0 -1
  154. package/es/modules/global-link/index.es.js +0 -139
  155. package/es/modules/global-link/index.es.js.map +0 -1
  156. package/es/modules/global-link/utils/createTable.es.js +0 -50
  157. package/es/modules/global-link/utils/createTable.es.js.map +0 -1
  158. package/es/modules/quick-menu.es.js +0 -82
  159. package/es/modules/quick-menu.es.js.map +0 -1
  160. package/es/modules/table/better-table.es.js +0 -485
  161. package/es/modules/table/better-table.es.js.map +0 -1
  162. package/es/modules/table/formats/header.es.js +0 -94
  163. package/es/modules/table/formats/header.es.js.map +0 -1
  164. package/es/modules/table/formats/list.es.js +0 -163
  165. package/es/modules/table/formats/list.es.js.map +0 -1
  166. package/es/modules/table/formats/table.es.js +0 -969
  167. package/es/modules/table/formats/table.es.js.map +0 -1
  168. package/es/modules/table/modules/table-column-tool.es.js +0 -400
  169. package/es/modules/table/modules/table-column-tool.es.js.map +0 -1
  170. package/es/modules/table/modules/table-operation-menu.es.js +0 -475
  171. package/es/modules/table/modules/table-operation-menu.es.js.map +0 -1
  172. package/es/modules/table/modules/table-scroll-bar.es.js +0 -190
  173. package/es/modules/table/modules/table-scroll-bar.es.js.map +0 -1
  174. package/es/modules/table/modules/table-selection.es.js +0 -305
  175. package/es/modules/table/modules/table-selection.es.js.map +0 -1
  176. package/es/modules/table/modules/table-selector.es.js +0 -158
  177. package/es/modules/table/modules/table-selector.es.js.map +0 -1
  178. package/es/modules/table/table-config.es.js +0 -74
  179. package/es/modules/table/table-config.es.js.map +0 -1
  180. package/es/modules/table/utils/index.es.js +0 -54
  181. package/es/modules/table/utils/index.es.js.map +0 -1
  182. package/es/modules/table/utils/node-matchers.es.js +0 -292
  183. package/es/modules/table/utils/node-matchers.es.js.map +0 -1
  184. package/lib/modules/global-link/constants.cjs.js +0 -9
  185. package/lib/modules/global-link/constants.cjs.js.map +0 -1
  186. package/lib/modules/global-link/formats/customer-widget-link.cjs.js +0 -28
  187. package/lib/modules/global-link/formats/customer-widget-link.cjs.js.map +0 -1
  188. package/lib/modules/global-link/formats/doc-link.cjs.js +0 -42
  189. package/lib/modules/global-link/formats/doc-link.cjs.js.map +0 -1
  190. package/lib/modules/global-link/formats/wiki-link.cjs.js +0 -34
  191. package/lib/modules/global-link/formats/wiki-link.cjs.js.map +0 -1
  192. package/lib/modules/global-link/formats/work-item-link.cjs.js +0 -36
  193. package/lib/modules/global-link/formats/work-item-link.cjs.js.map +0 -1
  194. package/lib/modules/global-link/global-link-panel.cjs.js +0 -2
  195. package/lib/modules/global-link/global-link-panel.cjs.js.map +0 -1
  196. package/lib/modules/global-link/index.cjs.js +0 -139
  197. package/lib/modules/global-link/index.cjs.js.map +0 -1
  198. package/lib/modules/global-link/utils/createTable.cjs.js +0 -50
  199. package/lib/modules/global-link/utils/createTable.cjs.js.map +0 -1
  200. package/lib/modules/quick-menu.cjs.js +0 -82
  201. package/lib/modules/quick-menu.cjs.js.map +0 -1
  202. package/lib/modules/table/better-table.cjs.js +0 -485
  203. package/lib/modules/table/better-table.cjs.js.map +0 -1
  204. package/lib/modules/table/formats/header.cjs.js +0 -94
  205. package/lib/modules/table/formats/header.cjs.js.map +0 -1
  206. package/lib/modules/table/formats/list.cjs.js +0 -163
  207. package/lib/modules/table/formats/list.cjs.js.map +0 -1
  208. package/lib/modules/table/formats/table.cjs.js +0 -969
  209. package/lib/modules/table/formats/table.cjs.js.map +0 -1
  210. package/lib/modules/table/modules/table-column-tool.cjs.js +0 -400
  211. package/lib/modules/table/modules/table-column-tool.cjs.js.map +0 -1
  212. package/lib/modules/table/modules/table-operation-menu.cjs.js +0 -475
  213. package/lib/modules/table/modules/table-operation-menu.cjs.js.map +0 -1
  214. package/lib/modules/table/modules/table-scroll-bar.cjs.js +0 -190
  215. package/lib/modules/table/modules/table-scroll-bar.cjs.js.map +0 -1
  216. package/lib/modules/table/modules/table-selection.cjs.js +0 -305
  217. package/lib/modules/table/modules/table-selection.cjs.js.map +0 -1
  218. package/lib/modules/table/modules/table-selector.cjs.js +0 -158
  219. package/lib/modules/table/modules/table-selector.cjs.js.map +0 -1
  220. package/lib/modules/table/table-config.cjs.js +0 -74
  221. package/lib/modules/table/table-config.cjs.js.map +0 -1
  222. package/lib/modules/table/utils/index.cjs.js +0 -54
  223. package/lib/modules/table/utils/index.cjs.js.map +0 -1
  224. package/lib/modules/table/utils/node-matchers.cjs.js +0 -292
  225. package/lib/modules/table/utils/node-matchers.cjs.js.map +0 -1
  226. package/types/modules/custom-uploader.d.ts +0 -31
  227. package/types/modules/global-link/constants.d.ts +0 -3
  228. package/types/modules/global-link/formats/customer-widget-link.d.ts +0 -14
  229. package/types/modules/global-link/formats/doc-link.d.ts +0 -17
  230. package/types/modules/global-link/formats/wiki-link.d.ts +0 -16
  231. package/types/modules/global-link/formats/work-item-link.d.ts +0 -16
  232. package/types/modules/global-link/global-link-panel.d.ts +0 -19
  233. package/types/modules/global-link/index.d.ts +0 -18
  234. package/types/modules/global-link/utils/createTable.d.ts +0 -1
  235. package/types/modules/quick-menu.d.ts +0 -22
  236. package/types/modules/table/better-table.d.ts +0 -35
  237. package/types/modules/table/formats/header.d.ts +0 -23
  238. package/types/modules/table/formats/list.d.ts +0 -34
  239. package/types/modules/table/formats/table.d.ts +0 -147
  240. package/types/modules/table/modules/table-column-tool.d.ts +0 -23
  241. package/types/modules/table/modules/table-operation-menu.d.ts +0 -38
  242. package/types/modules/table/modules/table-scroll-bar.d.ts +0 -33
  243. package/types/modules/table/modules/table-selection.d.ts +0 -37
  244. package/types/modules/table/modules/table-selector.d.ts +0 -22
  245. package/types/modules/table/table-config.d.ts +0 -38
  246. package/types/modules/table/utils/index.d.ts +0 -17
  247. package/types/modules/table/utils/node-matchers.d.ts +0 -9
@@ -1 +1 @@
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":";;;;;;;;;;AASA,MAAqB,WAArB,MAAqB,iBAAgBA,KAAAA,YAAY;AAAA,EAuB/C,YAAY,OAAO,QAAQ;AACzB,UAAM,OAAO,MAAM;AALe,SAAA,UAAA;AAAA,MAClC,cAAc;AAAA,IAChB;AAIE,SAAK,YAAY;AACjB,SAAK,eAAe;AACpB,SAAK,UAAU;AAEf,SAAK,eAAe;AACXC,SAAAA,QAAA,eAAe,KAAK,QAAQ;AACrC,SAAK,uBAAuBC,SAAAA,SAAS,KAAK,aAAa,GAAG;AAC1D,SAAK,uBAAuBA,SAAAA,SAAS,KAAK,aAAa,GAAG;AAC1D,SAAK,MAAM,QAAQ,GAAGC,cAAA,uBAAuB,MAAM;AACjD,WAAK,YAAY;AAAA,IAAA,CAClB;AAAA,EAAA;AAAA,EAGH,cAAc;AACZ,SAAK,KAAK,YAAY;AAAA,MACpB,uDAAuD,KAAK,MAAM,YAAY,iBAAiB,CAAC;AAAA,MAChG;AAAA,MACA;AAAA,MACA;AAAA,IAAA,EACA,KAAK,EAAE;AACT,SAAK,UAAU,KAAK,KAAK,cAAc,oBAAoB;AAC3D,SAAK,OAAO;AAAA,EAAA;AAAA,EAGd,iBAAiB;AACf,SAAK,UAAU;AAAA,MACb,cAAc;AAAA,IAChB;AACM,UAAA,QAAQ,KAAK,MAAM,QAAQ;AAC7B,QAAA,SAAS,OAAO,UAAU,UAAU;AACtC,WAAK,QAAQ,eAAe;AAAA,IAErB,WAAA,OAAO,UAAU,aAAa,CAAC,OAAO;AAC7C,WAAK,QAAQ,eAAe;AAAA,IAAA;AAAA,EAC9B;AAAA,EAGF,aAAa;AACX,WAAO,CAAC,KAAK,WAAW,CAAC,KAAK;AAAA,EAAA;AAAA,EAGhC,cAAc;AACR,QAAA,KAAK,cAAc;AACrB,WAAK,KAAK;AAAA,IAAA;AAAA,EACZ;AAAA,EAGF,YAAY,MAAM,OAAO,OAAO;AAC1B,QAAA,CAAC,KAAK,cAAc;AACjB,WAAA,KAAK,MAAM,OAAO,KAAK;AAAA,IAAA;AAAA,EAC9B;AAAA,EAGF,mBAAmB;AACjB,SAAK,UAAU;AACf,SAAK,qBAAqB;AAAA,EAAA;AAAA,EAG5B,iBAAiB,OAAO;AACtB,UAAM,gBAAgB,CAAC,KAAK,KAAK,UAAU,SAAS,WAAW;AAC/D,QAAI,eAAe;AACjB;AAAA,IAAA;AAGF,QAAI,KAAK,cAAc;AACrB,WAAK,KAAK;AAAA,IAAA;AAEZ,SAAK,UAAU;AACf,UAAM,WAAW,MAAM;AACjB,UAAA,UAAUF,KAAAA,QAAS,QAAQ,QAAQ;AACrC,QAAA,QAAQ,WAAW,GAAG,GAAG;AAC3B;AAAA,IAAA;AAEI,UAAA,WAAW,MAAM,KAAK,QAAQ;AACpC,UAAM,QAAQ,KAAK,MAAM,SAAS,QAAQ;AAC1C,UAAM,CAACG,QAAM,MAAM,IAAI,KAAK,MAAM,OAAO;AAAA,MACvCH,KAAA;AAAA,MACA;AAAA,IACF;AACM,UAAA,SAASG,UAAQA,OAAK,OAAO;AACnC,SAAK,YAAY,IAAIC,MAAAA,MAAM,QAAQ,QAAQ,MAAM;AACjD,SAAK,qBAAqB,QAAQ,SAAS,KAAK,SAAS;AAAA,EAAA;AAAA,EAG3D,SAAS;AACP,UAAM,OAAO;AACb,SAAK,KAAK,cAAc,aAAa,EAAE,iBAAiB,SAAS,CAAC,UAAU;AAC1E,UAAI,CAACC,aAAA,kBAAkB,KAAK,SAAS,GAAG;AACtC,cAAM,QAAQ,KAAK;AACnB,aAAK,aAAa;AAClB,aAAK,MAAM,WAAW,OAAO,QAAQ,OAAO,QAAQ,QAAQ,GAAG;AAC/D,eAAO,KAAK;AAAA,MAAA;AAEd,YAAM,eAAe;AACrB,WAAK,KAAK;AAAA,IAAA,CACX;AAED,SAAK,MAAM,KAAK;AAAA,MACd;AAAA,MACA,CAAC,UAAU;AAEN,aAAA,MAAM,OAAO,QAAQ,kBAAkB,OACnC,CAAC,MAAM,OAAO,UAAU,SAASL,aAAS,SAAS,MACrD,CAAC,MAAM,OAAO,QAAQ,KAAKA,KAAA,QAAS,SAAS,EAAE,GAClD;AACA;AAAA,QAAA;AAEF,aAAK,iBAAiB,KAAK;AAAA,MAC7B;AAAA,MACA;AAAA,IACF;AAEA,SAAK,MAAM,KAAK;AAAA,MACd;AAAA,MACA,CAAC,UAAU;AACT,YAAI,MAAM,OAAO,QAAQ,kBAAkB,OAAO,CAAC,MAAM,OAAO,QAAQ,KAAKA,KAAS,QAAA,SAAS,EAAE,GAAG;AAClG;AAAA,QAAA;AAEF,aAAK,iBAAiB;AAAA,MACxB;AAAA,MACA;AAAA,IACF;AAEA,SAAK,KAAK;AAAA,MACR;AAAA,MACA,MAAM;AACJ,aAAK,UAAU;AAAA,MACjB;AAAA,MACA;AAAA,IACF;AAEK,SAAA,KAAK,iBAAiB,cAAc,KAAK,iBAAiB,KAAK,IAAI,GAAG,KAAK;AAEhF,SAAK,KAAK,cAAc,cAAc,EAAE,iBAAiB,SAAS,CAAC,UAAU;AAC3E,YAAMG,SAAOH,KAAAA,QAAS,SAAS,KAAK,QAAQ,KAAK;AAC1C,aAAA,KAAKG,QAAM,QAAQ;AAC1B,YAAM,eAAe;AAAA,IAAA,CACtB;AACD,SAAK,KAAK,cAAc,oBAAoB,EAAE,iBAAiB,SAAS,MAAM;AAC5E,WAAK,eAAe;AAAA,IAAA,CACrB;AACD,SAAK,KAAK,cAAc,oBAAoB,EAAE,iBAAiB,QAAQ,MAAM;AAC3E,WAAK,eAAe;AACpB,WAAK,KAAK;AAAA,IAAA,CACX;AACD,SAAK,MAAM;AAAA,MACT,QAAQ,OAAO;AAAA,MACf,CAAC,OAAO,WAAW,WAAW;AACxB,YAAAE,aAAAA,kBAAkB,KAAK,EAAG;AAC1B,YAAA,WAAW,QAAQ,QAAQ,MAAM;AACnC,gBAAM,CAACF,QAAM,MAAM,IAAI,KAAK,MAAM,OAAO;AAAA,YACvCH,KAAA;AAAA,YACA,MAAM;AAAA,UACR;AAEI,cAAA,CAACK,aAAAA,kBAAkBF,MAAI,GAAG;AACvB,iBAAA,YAAY,IAAIC,YAAM,MAAM,QAAQ,QAAQD,OAAK,QAAQ;AAC9D,kBAAM,UAAUH,KAAA,QAAS,QAAQG,OAAK,OAAO;AAC7C,gBAAI,CAAC,QAAQ,WAAW,GAAG,GAAG;AAC5B,mBAAK,KAAK,QAAQ,SAAS,KAAK,SAAS;AAAA,YAAA;AAE3C;AAAA,UAAA;AAAA,QACF;AAEE,YAAA,KAAK,cAAc;AACrB,eAAK,KAAK;AAAA,QAAA;AAAA,MACZ;AAAA,IAEJ;AACA,SAAK,MAAM;AAAA,MACT,QAAQ,OAAO;AAAA,MACf,MAAM;AACE,cAAA,YAAY,KAAK,MAAM,aAAa;AACpC,cAAA,QAAQ,aAAa,UAAU;AACrC,mBAAW,MAAM;AACT,gBAAAA,SAAO,KAAK,MAAM,OAAO;AAAA,YAC7BH,KAAA;AAAA,YACA;AAAA,YACA,CAAC;AACH,cAAI,CAACG,QAAM;AACT,iBAAK,iBAAiB;AAAA,UAAA;AAAA,QACxB,CACD;AAAA,MAAA;AAAA,IAEL;AAAA,EAAA;AAAA,EAGF,OAAO;AACD,QAAA,QAAQ,KAAK,QAAQ;AACzB,QAAI,CAAC,MAAO;AACZ,SAAK,QAAQ,QAAQ;AACrB,YAAQ,KAAK,KAAK,aAAa,WAAW,GAAG;AAAA,MAC3C,KAAK,QAAQ;AACX,cAAM,EAAE,UAAA,IAAc,KAAK,MAAM;AAC7B,YAAA,KAAK,QAAQ,cAAc;AACrB,kBAAA,KAAK,gBAAgB,KAAK;AAAA,QAAA;AAGpC,YAAI,KAAK,WAAW;AAClB,eAAK,MAAM;AAAA,YACT,KAAK;AAAA,YACL;AAAA,YACA;AAAA,YACA,QAAQ,QAAQ;AAAA,UAClB;AACA,eAAK,aAAa;AAAA,QAAA,OAEf;AACH,eAAK,aAAa;AAClB,eAAK,MAAM,OAAO,QAAQ,OAAO,QAAQ,QAAQ,IAAI;AAAA,QAAA;AAElD,aAAA,MAAM,KAAK,YAAY;AAC5B;AAAA,MAAA;AAAA,MAEF,KAAK,WAAW;AACd,cAAM,QAAQ,KAAK,MAAM,aAAa,IAAI;AACtC,YAAA,CAACE,aAAAA,kBAAkB,KAAK,GAAG;AACvB,gBAAA,QAAQ,MAAM,QAAQ,MAAM;AAClC,eAAK,MAAM;AAAA,YACT;AAAA,YACA,KAAK,KAAK,aAAa,WAAW;AAAA,YAClC;AAAA,YACA,QAAQ,QAAQ;AAAA,UAClB;AACA,cAAI,KAAK,KAAK,aAAa,WAAW,MAAM,WAAW;AACrD,iBAAK,MAAM,WAAW,QAAQ,GAAG,KAAK,QAAQ,QAAQ,IAAI;AAAA,UAAA;AAE5D,eAAK,MAAM,aAAa,QAAQ,GAAG,QAAQ,QAAQ,IAAI;AAAA,QAAA;AAEzD;AAAA,MAAA;AAAA,MAEF,KAAK,SAAS;AACZ,cAAM,QAAQ,KAAK,MAAM,aAAa,IAAI;AAC1C,aAAK,MAAM,WAAW,MAAM,OAAO,MAAM,QAAQ,QAAQ,IAAI;AAC7D,aAAK,MAAM,YAAY,MAAM,QAAQ,GAAG,SAAS,EAAE,KAAK,MAAM,GAAG,QAAQ,QAAQ,IAAI;AAChF,aAAA,MAAM,WAAW,MAAM,QAAQ,GAAG,MAAM,QAAQ,QAAQ,IAAI;AACjE,aAAK,MAAM,aAAa,MAAM,QAAQ,GAAG,QAAQ,QAAQ,MAAM;AAC/D,aAAK,QAAQ,QAAQ;AACrB,aAAK,KAAK;AACV;AAAA,MAAA;AAAA,MAEF;AAAA,IAAA;AAAA,EACF;AAAA,EAGF,SAAS,WAAW;AAClB,UAAM,OAAO,UAAU;AACvB,UAAM,MAAM,UAAU,SAAS,KAAK,MAAM,KAAK;AAC/C,SAAK,KAAK,MAAM,OAAO,GAAG,IAAI;AAC9B,SAAK,KAAK,MAAM,MAAM,GAAG,GAAG;AACvB,SAAA,KAAK,UAAU,OAAO,SAAS;AAC9B,UAAA,kBAAkB,KAAK,gBAAgB,sBAAsB;AAC7D,UAAA,aAAa,KAAK,KAAK,sBAAsB;AACnD,QAAI,QAAQ;AACR,QAAA,WAAW,QAAQ,gBAAgB,OAAO;AACpC,cAAA,gBAAgB,QAAQ,WAAW;AAC3C,WAAK,KAAK,MAAM,OAAO,GAAG,OAAO,KAAK;AAAA,IAAA;AAEpC,QAAA,WAAW,OAAO,gBAAgB,MAAM;AAClC,cAAA,gBAAgB,OAAO,WAAW;AAC1C,WAAK,KAAK,MAAM,OAAO,GAAG,OAAO,KAAK;AAAA,IAAA;AAEpC,QAAA,WAAW,SAAS,gBAAgB,QAAQ;AACxC,YAAA,SAAS,WAAW,SAAS,WAAW;AAC9C,YAAM,gBAAgB,UAAU,SAAS,UAAU,MAAM;AACzD,YAAM,WAAW,MAAM;AACvB,WAAK,KAAK,MAAM,MAAM,GAAG,WAAW,IAAI,KAAK,MAAM,KAAK,YAAY,UAAU,MAAM,QAAQ;AACvF,WAAA,KAAK,UAAU,IAAI,SAAS;AAAA,IAAA;AAE5B,WAAA;AAAA,EAAA;AAAA;AAAA,EAIT,KAAK,OAAe,QAAQ,UAAU,MAAM,OAAO;AACjD,SAAK,YAAY,SAAS,KAAK,MAAM,UAAU;AAC1C,SAAA,KAAK,UAAU,OAAO,WAAW;AACjC,SAAA,KAAK,UAAU,IAAI,YAAY;AAChC,QAAA,CAACA,aAAAA,kBAAkB,OAAO,GAAG;AAC/B,WAAK,QAAQ,QAAQ;AAAA,IAAA,WAEd,SAAS,KAAK,KAAK,aAAa,WAAW,GAAG;AACrD,WAAK,QAAQ,QAAQ;AAAA,IAAA;AAElB,SAAA,SAAS,KAAK,MAAM,UAAU,SAAS,KAAK,MAAM,UAAU,UAAU,CAAC;AACxE,QAAA,KAAK,QAAQ,UAAU,IAAI;AAC7B,WAAK,QAAQ,MAAM;AAAA,IAAA;AAErB,SAAK,QAAQ;AAAA,MACX;AAAA,MACA,KAAK,QAAQ,aAAa,QAAQ,IAAI,EAAE,KAAK;AAAA,IAC/C;AACK,SAAA,KAAK,aAAa,aAAa,IAAI;AAAA,EAAA;AAAA,EAG1C,OAAO;AACL,UAAM,KAAK;AACN,SAAA,KAAK,gBAAgB,WAAW;AAAA,EAAA;AAAA,EAGvC,gBAAgB,KAAa;AAC3B,QAAI,SAAS;AACb,QAAI,CAAC,KAAK;AACD,aAAA;AAAA,IAAA;AAEL,QAAA,CAACC,aAAAA,YAAY,GAAG,GAAG;AACrB,eAAS,GAAG,KAAK,QAAQ,YAAY,MAAM,GAAG;AAAA,IAAA;AAEzC,WAAA;AAAA,EAAA;AAEX;AA7UE,SAAO,WAAmB;AAAA,EACxB,uDAAuDC,cAAA,UAAU,OAAO,EAAE,eAAe;AAAA,EACzF;AAAA,EACA;AAAA,EACA;AAAA,EACA,KAAK,EAAE;AANX,IAAqB,UAArB;;"}
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 } from '../../../config'\r\nimport { hadProtocol, isNullOrUndefined } from '../../../config/editor.utils'\r\nimport { EN_US } from '../../../config/i18n/en-us'\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=\"${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","EN_US"],"mappings":"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"}
@@ -0,0 +1,229 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const Quill = require("quill");
4
+ const QuillShortcutKey = require("quill-shortcut-key");
5
+ require("../../config/index.cjs.js");
6
+ const editor_config = require("../../config/editor.config.cjs.js");
7
+ class ShortCutKey extends QuillShortcutKey {
8
+ constructor(quill, options) {
9
+ super(quill, options);
10
+ this.quill = quill;
11
+ this.quill.emitter.on(editor_config.CHANGE_LANGUAGE_EVENT, () => {
12
+ this.destroyMenuList();
13
+ this.options = this.resolveOptions(options);
14
+ this.menuSorter = QuillShortcutKey.searchAndSort.bind(this, this.getAllMenuItems());
15
+ this.placeholderTip.remove();
16
+ this.placeholderTip = this.initPlaceholder();
17
+ this.placeholderUpdate();
18
+ });
19
+ }
20
+ resolveOptions(options) {
21
+ const defaultMenuItems = this.defaultMenuList();
22
+ const value = Object.assign({
23
+ placeholder: this.quill.getLangText("input-recall-menu-placeholder"),
24
+ menuItems: defaultMenuItems,
25
+ isMenuItemsAdd: false,
26
+ menuKeyboardControls: () => false
27
+ }, options);
28
+ if (value.isMenuItemsAdd) {
29
+ value.menuItems = [...defaultMenuItems, ...value.menuItems];
30
+ }
31
+ const deepCopyMenuItems = (items) => {
32
+ return items.map((item) => {
33
+ const value2 = {
34
+ ...item
35
+ };
36
+ if (item.title) {
37
+ value2.title = this.quill.getLangText(item.title);
38
+ }
39
+ if (item.type === "group") {
40
+ value2.children = deepCopyMenuItems(item.children);
41
+ }
42
+ return value2;
43
+ });
44
+ };
45
+ value.menuItems = deepCopyMenuItems(value.menuItems);
46
+ return value;
47
+ }
48
+ defaultMenuList() {
49
+ const icons = Quill.import("ui/icons");
50
+ const toolbarHandler = (format) => {
51
+ return function(range) {
52
+ if (!range) return;
53
+ const toolbarModule = this.getModule("toolbar");
54
+ if (!toolbarModule) return;
55
+ toolbarModule.handlers[format].call(toolbarModule, true);
56
+ };
57
+ };
58
+ const formatHandler = (format, value) => {
59
+ return function(range) {
60
+ if (!range) return;
61
+ this.formatLine(range.index, 0, format, value, Quill.sources.USER);
62
+ };
63
+ };
64
+ return [
65
+ ...new Array(6).fill(0).map((_, i) => ({
66
+ type: "item",
67
+ name: `h${i + 1}`,
68
+ alias: ["header", `head${i + 1}`],
69
+ icon: icons.header[i + 1],
70
+ title: this.quill.getLangText(`header-${i + 1}`),
71
+ onClick: formatHandler("header", i + 1)
72
+ })),
73
+ {
74
+ type: "item",
75
+ name: "yy",
76
+ alias: ["blockquote"],
77
+ icon: icons.blockquote,
78
+ title: this.quill.getLangText("blockquote"),
79
+ onClick: formatHandler("blockquote", true)
80
+ },
81
+ {
82
+ type: "item",
83
+ name: "dm",
84
+ alias: ["code", "codeblock"],
85
+ icon: icons["code-block"],
86
+ title: this.quill.getLangText("code-block"),
87
+ onClick: formatHandler("code-block", true)
88
+ },
89
+ {
90
+ type: "item",
91
+ name: "lj",
92
+ alias: ["link"],
93
+ icon: icons.link,
94
+ title: this.quill.getLangText("link"),
95
+ onClick(range, _) {
96
+ if (!range) return;
97
+ const title = "link";
98
+ const link = prompt("Enter link URL");
99
+ if (!link) return;
100
+ this.insertText(range.index, title, Quill.sources.USER);
101
+ this.formatText(range.index, range.length + title.length, "link", link, Quill.sources.USER);
102
+ this.setSelection({ index: range.index, length: range.index + title.length });
103
+ }
104
+ },
105
+ {
106
+ type: "group",
107
+ name: "lb",
108
+ alias: [],
109
+ hideSearch: true,
110
+ icon: icons.list.bullet,
111
+ title: this.quill.getLangText("list"),
112
+ children: [
113
+ {
114
+ type: "item",
115
+ name: "wxlb",
116
+ alias: ["list", "bullet"],
117
+ icon: icons.list.bullet,
118
+ title: this.quill.getLangText("list-bullet"),
119
+ onClick: formatHandler("list", "bullet")
120
+ },
121
+ {
122
+ type: "item",
123
+ name: "yxlb",
124
+ alias: ["list", "ordered"],
125
+ icon: icons.list.ordered,
126
+ title: this.quill.getLangText("list-ordered"),
127
+ onClick: formatHandler("list", "ordered")
128
+ },
129
+ {
130
+ type: "item",
131
+ name: "rwlb",
132
+ alias: ["list", "check"],
133
+ icon: icons.list.check,
134
+ title: this.quill.getLangText("list-check"),
135
+ onClick: formatHandler("list", "unchecked")
136
+ }
137
+ ]
138
+ },
139
+ {
140
+ type: "item",
141
+ name: "bq",
142
+ alias: ["emoji"],
143
+ icon: icons.emoji,
144
+ title: this.quill.getLangText("emoji"),
145
+ onClick(range, _) {
146
+ if (!range) return;
147
+ const toolbarModule = this.getModule("toolbar");
148
+ if (!toolbarModule) return;
149
+ toolbarModule.handlers.emoji.call(toolbarModule, true);
150
+ }
151
+ },
152
+ {
153
+ type: "item",
154
+ name: "jp",
155
+ alias: ["screenshot"],
156
+ icon: icons.screenshot,
157
+ title: this.quill.getLangText("screenshot"),
158
+ onClick: toolbarHandler("screenshot")
159
+ },
160
+ {
161
+ type: "item",
162
+ name: "gs",
163
+ alias: ["formula"],
164
+ icon: icons.formula,
165
+ title: this.quill.getLangText("formula"),
166
+ onClick: toolbarHandler("formula")
167
+ },
168
+ {
169
+ type: "item",
170
+ name: "tp",
171
+ alias: ["image", "pic", "picture"],
172
+ icon: icons.image,
173
+ title: this.quill.getLangText("image"),
174
+ onClick: toolbarHandler("image")
175
+ },
176
+ {
177
+ type: "item",
178
+ name: "sp",
179
+ alias: ["video"],
180
+ icon: icons.video,
181
+ title: this.quill.getLangText("video"),
182
+ onClick: toolbarHandler("video")
183
+ },
184
+ {
185
+ type: "item",
186
+ name: "wj",
187
+ alias: ["file"],
188
+ icon: icons.file,
189
+ title: this.quill.getLangText("file"),
190
+ onClick: toolbarHandler("file")
191
+ }
192
+ ];
193
+ }
194
+ }
195
+ const shortKey = {
196
+ ...QuillShortcutKey.defaultShortKey,
197
+ link: {
198
+ key: "k",
199
+ shortKey: true,
200
+ handler(_, context) {
201
+ const toolbar = this.quill.getModule("toolbar");
202
+ if (!toolbar) return;
203
+ toolbar.handlers.link.call(toolbar, !context.format.link);
204
+ }
205
+ },
206
+ color: {
207
+ key: "c",
208
+ altKey: true,
209
+ shortKey: true,
210
+ handler() {
211
+ var _a;
212
+ const selected = this.quill.getModule("toolbar").container.querySelector(".ql-color.ql-color-picker .ql-picker-options .ql-selected");
213
+ this.quill.format("color", ((_a = selected == null ? void 0 : selected.dataset) == null ? void 0 : _a.value) || false, Quill.sources.USER);
214
+ }
215
+ },
216
+ background: {
217
+ key: "b",
218
+ altKey: true,
219
+ shortKey: true,
220
+ handler() {
221
+ var _a;
222
+ const selected = this.quill.getModule("toolbar").container.querySelector(".ql-background.ql-color-picker .ql-picker-options .ql-selected");
223
+ this.quill.format("background", ((_a = selected == null ? void 0 : selected.dataset) == null ? void 0 : _a.value) || false, Quill.sources.USER);
224
+ }
225
+ }
226
+ };
227
+ exports.ShortCutKey = ShortCutKey;
228
+ exports.shortKey = shortKey;
229
+ //# sourceMappingURL=index.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs.js","sources":["../../../../src/modules/shortcut-key/index.ts"],"sourcesContent":["import type { Range } from 'quill'\r\nimport type { Menu, MenuItemsGroup, QuillShortcutKeyInputOptions, QuillShortcutKeyOptions } from 'quill-shortcut-key'\r\nimport type { Context } from 'quill/modules/keyboard'\r\nimport type TypeToolbar from 'quill/modules/toolbar'\r\nimport type FluentEditor from '../../fluent-editor'\r\nimport Quill from 'quill'\r\nimport QuillShortcutKey, { defaultShortKey, searchAndSort } from 'quill-shortcut-key'\r\nimport { CHANGE_LANGUAGE_EVENT } from '../../config'\r\n\r\ninterface ShortCutKeyCustomOptions { isMenuItemsAdd: boolean }\r\ntype ShortCutKeyInputOptions = QuillShortcutKeyInputOptions & ShortCutKeyCustomOptions\r\ntype ShortCutKeyOptions = QuillShortcutKeyOptions & ShortCutKeyCustomOptions\r\n\r\nexport class ShortCutKey extends QuillShortcutKey {\r\n options: ShortCutKeyOptions\r\n constructor(public quill: FluentEditor, options: Partial<ShortCutKeyInputOptions>) {\r\n super(quill, options)\r\n\r\n this.quill.emitter.on(CHANGE_LANGUAGE_EVENT, () => {\r\n this.destroyMenuList()\r\n this.options = this.resolveOptions(options)\r\n this.menuSorter = searchAndSort.bind(this, this.getAllMenuItems()) as (searchText: string) => Menu\r\n this.placeholderTip.remove()\r\n this.placeholderTip = this.initPlaceholder()\r\n this.placeholderUpdate()\r\n })\r\n }\r\n\r\n resolveOptions(options: Partial<ShortCutKeyInputOptions>) {\r\n const defaultMenuItems = this.defaultMenuList()\r\n const value: ShortCutKeyOptions = Object.assign({\r\n placeholder: this.quill.getLangText('input-recall-menu-placeholder'),\r\n menuItems: defaultMenuItems,\r\n isMenuItemsAdd: false,\r\n menuKeyboardControls: () => false,\r\n }, options)\r\n if (value.isMenuItemsAdd) {\r\n value.menuItems = [...defaultMenuItems, ...value.menuItems]\r\n }\r\n\r\n const deepCopyMenuItems = (items: Menu): Menu => {\r\n return items.map((item) => {\r\n const value = {\r\n ...item,\r\n }\r\n if (item.title) {\r\n value.title = this.quill.getLangText(item.title)\r\n }\r\n if (item.type === 'group') {\r\n (value as MenuItemsGroup).children = deepCopyMenuItems(item.children)\r\n }\r\n return value\r\n })\r\n }\r\n value.menuItems = deepCopyMenuItems(value.menuItems)\r\n return value\r\n }\r\n\r\n defaultMenuList() {\r\n const icons = Quill.import('ui/icons') as Record<string, any>\r\n const toolbarHandler = (format: string) => {\r\n return function (range: Range | null) {\r\n if (!range) return\r\n const toolbarModule = this.getModule('toolbar') as TypeToolbar\r\n if (!toolbarModule) return\r\n toolbarModule.handlers[format].call(toolbarModule, true)\r\n }\r\n }\r\n const formatHandler = (format: string, value: any) => {\r\n return function (this: Quill, range: Range | null) {\r\n if (!range) return\r\n this.formatLine(range.index, 0, format, value, Quill.sources.USER)\r\n }\r\n }\r\n\r\n return [\r\n ...new Array(6).fill(0).map((_, i) => ({\r\n type: 'item' as const,\r\n name: `h${i + 1}`,\r\n alias: ['header', `head${i + 1}`],\r\n icon: icons.header[i + 1],\r\n title: this.quill.getLangText(`header-${i + 1}`),\r\n onClick: formatHandler('header', i + 1),\r\n })),\r\n {\r\n type: 'item' as const,\r\n name: 'yy',\r\n alias: ['blockquote'],\r\n icon: icons.blockquote,\r\n title: this.quill.getLangText('blockquote'),\r\n onClick: formatHandler('blockquote', true),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'dm',\r\n alias: ['code', 'codeblock'],\r\n icon: icons['code-block'],\r\n title: this.quill.getLangText('code-block'),\r\n onClick: formatHandler('code-block', true),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'lj',\r\n alias: ['link'],\r\n icon: icons.link,\r\n title: this.quill.getLangText('link'),\r\n onClick(this: Quill, range: Range | null, _: any) {\r\n if (!range) return\r\n const title = 'link'\r\n const link = prompt('Enter link URL')\r\n if (!link) return\r\n this.insertText(range.index, title, Quill.sources.USER)\r\n this.formatText(range.index, range.length + title.length, 'link', link, Quill.sources.USER)\r\n this.setSelection({ index: range.index, length: range.index + title.length })\r\n },\r\n },\r\n {\r\n type: 'group' as const,\r\n name: 'lb',\r\n alias: [],\r\n hideSearch: true,\r\n icon: icons.list.bullet,\r\n title: this.quill.getLangText('list'),\r\n children: [\r\n {\r\n type: 'item' as const,\r\n name: 'wxlb',\r\n alias: ['list', 'bullet'],\r\n icon: icons.list.bullet,\r\n title: this.quill.getLangText('list-bullet'),\r\n onClick: formatHandler('list', 'bullet'),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'yxlb',\r\n alias: ['list', 'ordered'],\r\n icon: icons.list.ordered,\r\n title: this.quill.getLangText('list-ordered'),\r\n onClick: formatHandler('list', 'ordered'),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'rwlb',\r\n alias: ['list', 'check'],\r\n icon: icons.list.check,\r\n title: this.quill.getLangText('list-check'),\r\n onClick: formatHandler('list', 'unchecked'),\r\n },\r\n ],\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'bq',\r\n alias: ['emoji'],\r\n icon: icons.emoji,\r\n title: this.quill.getLangText('emoji'),\r\n onClick(this: Quill, range: Range | null, _: any) {\r\n if (!range) return\r\n const toolbarModule = this.getModule('toolbar') as TypeToolbar\r\n if (!toolbarModule) return\r\n // TODO: keyboard handler emoji select(in emoji module)\r\n toolbarModule.handlers.emoji.call(toolbarModule, true)\r\n },\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'jp',\r\n alias: ['screenshot'],\r\n icon: icons.screenshot,\r\n title: this.quill.getLangText('screenshot'),\r\n onClick: toolbarHandler('screenshot'),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'gs',\r\n alias: ['formula'],\r\n icon: icons.formula,\r\n title: this.quill.getLangText('formula'),\r\n onClick: toolbarHandler('formula'),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'tp',\r\n alias: ['image', 'pic', 'picture'],\r\n icon: icons.image,\r\n title: this.quill.getLangText('image'),\r\n onClick: toolbarHandler('image'),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'sp',\r\n alias: ['video'],\r\n icon: icons.video,\r\n title: this.quill.getLangText('video'),\r\n onClick: toolbarHandler('video'),\r\n },\r\n {\r\n type: 'item' as const,\r\n name: 'wj',\r\n alias: ['file'],\r\n icon: icons.file,\r\n title: this.quill.getLangText('file'),\r\n onClick: toolbarHandler('file'),\r\n },\r\n ]\r\n }\r\n}\r\n\r\nexport const shortKey = {\r\n ...defaultShortKey,\r\n link: {\r\n key: 'k',\r\n shortKey: true,\r\n handler(_, context: Context) {\r\n const toolbar = this.quill.getModule('toolbar') as TypeToolbar\r\n if (!toolbar) return\r\n toolbar.handlers.link.call(toolbar, !context.format.link)\r\n },\r\n },\r\n color: {\r\n key: 'c',\r\n altKey: true,\r\n shortKey: true,\r\n handler() {\r\n const selected = this.quill.getModule('toolbar').container.querySelector('.ql-color.ql-color-picker .ql-picker-options .ql-selected')\r\n this.quill.format('color', selected?.dataset?.value || false, Quill.sources.USER)\r\n },\r\n },\r\n background: {\r\n key: 'b',\r\n altKey: true,\r\n shortKey: true,\r\n handler() {\r\n const selected = this.quill.getModule('toolbar').container.querySelector('.ql-background.ql-color-picker .ql-picker-options .ql-selected')\r\n this.quill.format('background', selected?.dataset?.value || false, Quill.sources.USER)\r\n },\r\n },\r\n}\r\n"],"names":["CHANGE_LANGUAGE_EVENT","searchAndSort","value","defaultShortKey"],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ require("../../config/index.cjs.js");
4
+ const editor_config = require("../../config/editor.config.cjs.js");
5
+ function generateTableUp(QuillTableUp) {
6
+ return class extends QuillTableUp {
7
+ constructor(quill, options) {
8
+ super(quill, options);
9
+ this.quill = quill;
10
+ this.quill.emitter.on(editor_config.CHANGE_LANGUAGE_EVENT, () => {
11
+ this.options.texts = this.resolveTexts(options.texts);
12
+ const toolbar = this.quill.getModule("toolbar");
13
+ if (toolbar && this.quill.theme.pickers) {
14
+ const [, select] = (toolbar.controls || []).find(([name]) => name === this.statics.toolName) || [];
15
+ if (select && select.tagName.toLocaleLowerCase() === "select") {
16
+ const picker = this.quill.theme.pickers.find((picker2) => picker2.select === select);
17
+ if (picker) {
18
+ this.buildCustomSelect(this.options.customSelect, picker);
19
+ }
20
+ }
21
+ }
22
+ if (this.tableSelection) {
23
+ this.tableSelection.destroy();
24
+ }
25
+ if (this.options.selection) {
26
+ this.tableSelection = new this.options.selection(this, this.quill, this.options.selectionOptions);
27
+ }
28
+ });
29
+ }
30
+ resolveTexts(options = {}) {
31
+ return Object.assign({
32
+ fullCheckboxText: this.quill.getLangText("fullCheckboxText"),
33
+ customBtnText: this.quill.getLangText("customBtnText"),
34
+ confirmText: this.quill.getLangText("confirmText"),
35
+ cancelText: this.quill.getLangText("cancelText"),
36
+ rowText: this.quill.getLangText("rowText"),
37
+ colText: this.quill.getLangText("colText"),
38
+ notPositiveNumberError: this.quill.getLangText("notPositiveNumberError"),
39
+ custom: this.quill.getLangText("custom"),
40
+ clear: this.quill.getLangText("clear"),
41
+ transparent: this.quill.getLangText("transparent"),
42
+ perWidthInsufficient: this.quill.getLangText("perWidthInsufficient"),
43
+ CopyCell: this.quill.getLangText("CopyCell"),
44
+ CutCell: this.quill.getLangText("CutCell"),
45
+ InsertTop: this.quill.getLangText("InsertTop"),
46
+ InsertRight: this.quill.getLangText("InsertRight"),
47
+ InsertBottom: this.quill.getLangText("InsertBottom"),
48
+ InsertLeft: this.quill.getLangText("InsertLeft"),
49
+ MergeCell: this.quill.getLangText("MergeCell"),
50
+ SplitCell: this.quill.getLangText("SplitCell"),
51
+ DeleteRow: this.quill.getLangText("DeleteRow"),
52
+ DeleteColumn: this.quill.getLangText("DeleteColumn"),
53
+ DeleteTable: this.quill.getLangText("DeleteTable"),
54
+ BackgroundColor: this.quill.getLangText("BackgroundColor"),
55
+ BorderColor: this.quill.getLangText("BorderColor")
56
+ }, Object.entries(options).reduce((pre, [key, value]) => {
57
+ pre[key] = this.quill.getLangText(value);
58
+ return pre;
59
+ }, {}));
60
+ }
61
+ };
62
+ }
63
+ exports.generateTableUp = generateTableUp;
64
+ //# sourceMappingURL=index.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs.js","sources":["../../../../src/modules/table-up/index.ts"],"sourcesContent":["import type { Parchment } from 'quill'\r\nimport type Toolbar from 'quill/modules/toolbar'\r\nimport type BaseTheme from 'quill/themes/base'\r\nimport type Picker from 'quill/ui/picker'\r\nimport type { Constructor } from '../../config/types'\r\nimport type FluentEditor from '../../core/fluent-editor'\r\nimport { CHANGE_LANGUAGE_EVENT } from '../../config'\r\n\r\ninterface QuillTheme extends BaseTheme {\r\n pickers: QuillThemePicker[]\r\n}\r\ntype QuillThemePicker = (Picker & { options: HTMLElement })\r\ninterface InternalModule {\r\n show: () => void\r\n hide: () => void\r\n update: () => void\r\n destroy: () => void\r\n}\r\ninterface InternalTableSelectionModule extends InternalModule {\r\n dragging: boolean\r\n boundary: {\r\n x: number\r\n y: number\r\n x1: number\r\n y1: number\r\n width: number\r\n height: number\r\n } | null\r\n selectedTds: Parchment.Blot[]\r\n cellSelect: HTMLElement\r\n tableMenu?: InternalModule\r\n computeSelectedTds: (\r\n startPoint: {\r\n x: number\r\n y: number\r\n },\r\n endPoint: {\r\n x: number\r\n y: number\r\n }\r\n ) => Parchment.Blot[]\r\n updateWithSelectedTds: () => void\r\n}\r\nexport function generateTableUp(QuillTableUp: Constructor) {\r\n return class extends QuillTableUp {\r\n tableSelection?: InternalTableSelectionModule\r\n constructor(public quill: FluentEditor, options: Partial<any>) {\r\n super(quill, options)\r\n\r\n this.quill.emitter.on(CHANGE_LANGUAGE_EVENT, () => {\r\n this.options.texts = this.resolveTexts(options.texts)\r\n const toolbar = this.quill.getModule('toolbar') as Toolbar\r\n if (toolbar && (this.quill.theme as QuillTheme).pickers) {\r\n const [, select] = (toolbar.controls as [string, HTMLElement][] || []).find(([name]) => name === this.statics.toolName) || []\r\n if (select && select.tagName.toLocaleLowerCase() === 'select') {\r\n const picker = (this.quill.theme as QuillTheme).pickers.find(picker => picker.select === select)\r\n if (picker) {\r\n this.buildCustomSelect(this.options.customSelect, picker)\r\n }\r\n }\r\n }\r\n if (this.tableSelection) {\r\n this.tableSelection.destroy()\r\n }\r\n if (this.options.selection) {\r\n // eslint-disable-next-line new-cap\r\n this.tableSelection = new this.options.selection(this, this.quill, this.options.selectionOptions)\r\n }\r\n })\r\n }\r\n\r\n resolveTexts(options: Partial<Record<string, string>> = {}) {\r\n return Object.assign({\r\n fullCheckboxText: this.quill.getLangText('fullCheckboxText'),\r\n customBtnText: this.quill.getLangText('customBtnText'),\r\n confirmText: this.quill.getLangText('confirmText'),\r\n cancelText: this.quill.getLangText('cancelText'),\r\n rowText: this.quill.getLangText('rowText'),\r\n colText: this.quill.getLangText('colText'),\r\n notPositiveNumberError: this.quill.getLangText('notPositiveNumberError'),\r\n custom: this.quill.getLangText('custom'),\r\n clear: this.quill.getLangText('clear'),\r\n transparent: this.quill.getLangText('transparent'),\r\n perWidthInsufficient: this.quill.getLangText('perWidthInsufficient'),\r\n CopyCell: this.quill.getLangText('CopyCell'),\r\n CutCell: this.quill.getLangText('CutCell'),\r\n InsertTop: this.quill.getLangText('InsertTop'),\r\n InsertRight: this.quill.getLangText('InsertRight'),\r\n InsertBottom: this.quill.getLangText('InsertBottom'),\r\n InsertLeft: this.quill.getLangText('InsertLeft'),\r\n MergeCell: this.quill.getLangText('MergeCell'),\r\n SplitCell: this.quill.getLangText('SplitCell'),\r\n DeleteRow: this.quill.getLangText('DeleteRow'),\r\n DeleteColumn: this.quill.getLangText('DeleteColumn'),\r\n DeleteTable: this.quill.getLangText('DeleteTable'),\r\n BackgroundColor: this.quill.getLangText('BackgroundColor'),\r\n BorderColor: this.quill.getLangText('BorderColor'),\r\n }, Object.entries(options).reduce((pre, [key, value]) => {\r\n pre[key] = this.quill.getLangText(value)\r\n return pre\r\n }, {}))\r\n }\r\n }\r\n}\r\n"],"names":["CHANGE_LANGUAGE_EVENT","picker"],"mappings":";;;;AA2CO,SAAS,gBAAgB,cAA2B;AACzD,SAAO,cAAc,aAAa;AAAA,IAEhC,YAAmB,OAAqB,SAAuB;AAC7D,YAAM,OAAO,OAAO;AADH,WAAA,QAAA;AAGjB,WAAK,MAAM,QAAQ,GAAGA,cAAA,uBAAuB,MAAM;AACjD,aAAK,QAAQ,QAAQ,KAAK,aAAa,QAAQ,KAAK;AACpD,cAAM,UAAU,KAAK,MAAM,UAAU,SAAS;AAC9C,YAAI,WAAY,KAAK,MAAM,MAAqB,SAAS;AACvD,gBAAM,CAAA,EAAG,MAAM,KAAK,QAAQ,YAAuC,CAAI,GAAA,KAAK,CAAC,CAAC,IAAI,MAAM,SAAS,KAAK,QAAQ,QAAQ,KAAK,CAAC;AAC5H,cAAI,UAAU,OAAO,QAAQ,kBAAA,MAAwB,UAAU;AACvD,kBAAA,SAAU,KAAK,MAAM,MAAqB,QAAQ,KAAK,CAAAC,YAAUA,QAAO,WAAW,MAAM;AAC/F,gBAAI,QAAQ;AACV,mBAAK,kBAAkB,KAAK,QAAQ,cAAc,MAAM;AAAA,YAAA;AAAA,UAC1D;AAAA,QACF;AAEF,YAAI,KAAK,gBAAgB;AACvB,eAAK,eAAe,QAAQ;AAAA,QAAA;AAE1B,YAAA,KAAK,QAAQ,WAAW;AAErB,eAAA,iBAAiB,IAAI,KAAK,QAAQ,UAAU,MAAM,KAAK,OAAO,KAAK,QAAQ,gBAAgB;AAAA,QAAA;AAAA,MAClG,CACD;AAAA,IAAA;AAAA,IAGH,aAAa,UAA2C,IAAI;AAC1D,aAAO,OAAO,OAAO;AAAA,QACnB,kBAAkB,KAAK,MAAM,YAAY,kBAAkB;AAAA,QAC3D,eAAe,KAAK,MAAM,YAAY,eAAe;AAAA,QACrD,aAAa,KAAK,MAAM,YAAY,aAAa;AAAA,QACjD,YAAY,KAAK,MAAM,YAAY,YAAY;AAAA,QAC/C,SAAS,KAAK,MAAM,YAAY,SAAS;AAAA,QACzC,SAAS,KAAK,MAAM,YAAY,SAAS;AAAA,QACzC,wBAAwB,KAAK,MAAM,YAAY,wBAAwB;AAAA,QACvE,QAAQ,KAAK,MAAM,YAAY,QAAQ;AAAA,QACvC,OAAO,KAAK,MAAM,YAAY,OAAO;AAAA,QACrC,aAAa,KAAK,MAAM,YAAY,aAAa;AAAA,QACjD,sBAAsB,KAAK,MAAM,YAAY,sBAAsB;AAAA,QACnE,UAAU,KAAK,MAAM,YAAY,UAAU;AAAA,QAC3C,SAAS,KAAK,MAAM,YAAY,SAAS;AAAA,QACzC,WAAW,KAAK,MAAM,YAAY,WAAW;AAAA,QAC7C,aAAa,KAAK,MAAM,YAAY,aAAa;AAAA,QACjD,cAAc,KAAK,MAAM,YAAY,cAAc;AAAA,QACnD,YAAY,KAAK,MAAM,YAAY,YAAY;AAAA,QAC/C,WAAW,KAAK,MAAM,YAAY,WAAW;AAAA,QAC7C,WAAW,KAAK,MAAM,YAAY,WAAW;AAAA,QAC7C,WAAW,KAAK,MAAM,YAAY,WAAW;AAAA,QAC7C,cAAc,KAAK,MAAM,YAAY,cAAc;AAAA,QACnD,aAAa,KAAK,MAAM,YAAY,aAAa;AAAA,QACjD,iBAAiB,KAAK,MAAM,YAAY,iBAAiB;AAAA,QACzD,aAAa,KAAK,MAAM,YAAY,aAAa;AAAA,MAAA,GAChD,OAAO,QAAQ,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM;AACvD,YAAI,GAAG,IAAI,KAAK,MAAM,YAAY,KAAK;AAChC,eAAA;AAAA,MACT,GAAG,CAAE,CAAA,CAAC;AAAA,IAAA;AAAA,EAEV;AACF;;"}