@wangeditor-next/plugin-attachment 6.4.2 → 6.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (442) hide show
  1. package/dist/index.d.ts +33 -0
  2. package/dist/index.js +2 -2
  3. package/dist/index.js.map +1 -1
  4. package/dist/index.mjs +2 -2
  5. package/dist/index.mjs.map +1 -1
  6. package/package.json +10 -12
  7. package/dist/basic-modules/src/constants/icon-svg.d.ts +0 -49
  8. package/dist/basic-modules/src/index.d.ts +0 -9
  9. package/dist/basic-modules/src/locale/en.d.ts +0 -107
  10. package/dist/basic-modules/src/locale/index.d.ts +0 -5
  11. package/dist/basic-modules/src/locale/zh-CN.d.ts +0 -107
  12. package/dist/basic-modules/src/modules/blockquote/custom-types.d.ts +0 -9
  13. package/dist/basic-modules/src/modules/blockquote/elem-to-html.d.ts +0 -11
  14. package/dist/basic-modules/src/modules/blockquote/index.d.ts +0 -7
  15. package/dist/basic-modules/src/modules/blockquote/menu/BlockquoteMenu.d.ts +0 -20
  16. package/dist/basic-modules/src/modules/blockquote/menu/index.d.ts +0 -9
  17. package/dist/basic-modules/src/modules/blockquote/parse-elem-html.d.ts +0 -14
  18. package/dist/basic-modules/src/modules/blockquote/plugin.d.ts +0 -7
  19. package/dist/basic-modules/src/modules/blockquote/render-elem.d.ts +0 -20
  20. package/dist/basic-modules/src/modules/code-block/custom-types.d.ts +0 -17
  21. package/dist/basic-modules/src/modules/code-block/elem-to-html.d.ts +0 -16
  22. package/dist/basic-modules/src/modules/code-block/index.d.ts +0 -7
  23. package/dist/basic-modules/src/modules/code-block/menu/CodeBlockMenu.d.ts +0 -23
  24. package/dist/basic-modules/src/modules/code-block/menu/index.d.ts +0 -12
  25. package/dist/basic-modules/src/modules/code-block/parse-elem-html.d.ts +0 -19
  26. package/dist/basic-modules/src/modules/code-block/plugin.d.ts +0 -7
  27. package/dist/basic-modules/src/modules/code-block/pre-parse-html.d.ts +0 -15
  28. package/dist/basic-modules/src/modules/code-block/render-elem.d.ts +0 -18
  29. package/dist/basic-modules/src/modules/color/custom-types.d.ts +0 -9
  30. package/dist/basic-modules/src/modules/color/index.d.ts +0 -7
  31. package/dist/basic-modules/src/modules/color/menu/BaseMenu.d.ts +0 -20
  32. package/dist/basic-modules/src/modules/color/menu/BgColorMenu.d.ts +0 -11
  33. package/dist/basic-modules/src/modules/color/menu/ColorMenu.d.ts +0 -11
  34. package/dist/basic-modules/src/modules/color/menu/config.d.ts +0 -6
  35. package/dist/basic-modules/src/modules/color/menu/index.d.ts +0 -20
  36. package/dist/basic-modules/src/modules/color/parse-style-html.d.ts +0 -8
  37. package/dist/basic-modules/src/modules/color/pre-parse-html.d.ts +0 -15
  38. package/dist/basic-modules/src/modules/color/render-style.d.ts +0 -15
  39. package/dist/basic-modules/src/modules/color/style-to-html.d.ts +0 -14
  40. package/dist/basic-modules/src/modules/common/index.d.ts +0 -7
  41. package/dist/basic-modules/src/modules/common/menu/EnterMenu.d.ts +0 -15
  42. package/dist/basic-modules/src/modules/common/menu/index.d.ts +0 -9
  43. package/dist/basic-modules/src/modules/divider/custom-types.d.ts +0 -12
  44. package/dist/basic-modules/src/modules/divider/elem-to-html.d.ts +0 -11
  45. package/dist/basic-modules/src/modules/divider/index.d.ts +0 -7
  46. package/dist/basic-modules/src/modules/divider/menu/InsertDividerMenu.d.ts +0 -15
  47. package/dist/basic-modules/src/modules/divider/menu/index.d.ts +0 -9
  48. package/dist/basic-modules/src/modules/divider/parse-elem-html.d.ts +0 -14
  49. package/dist/basic-modules/src/modules/divider/plugin.d.ts +0 -7
  50. package/dist/basic-modules/src/modules/divider/render-elem.d.ts +0 -13
  51. package/dist/basic-modules/src/modules/emotion/index.d.ts +0 -7
  52. package/dist/basic-modules/src/modules/emotion/menu/EmotionMenu.d.ts +0 -19
  53. package/dist/basic-modules/src/modules/emotion/menu/config.d.ts +0 -5
  54. package/dist/basic-modules/src/modules/emotion/menu/index.d.ts +0 -12
  55. package/dist/basic-modules/src/modules/font-size-family/custom-types.d.ts +0 -9
  56. package/dist/basic-modules/src/modules/font-size-family/index.d.ts +0 -7
  57. package/dist/basic-modules/src/modules/font-size-family/menu/BaseMenu.d.ts +0 -18
  58. package/dist/basic-modules/src/modules/font-size-family/menu/FontFamilyMenu.d.ts +0 -14
  59. package/dist/basic-modules/src/modules/font-size-family/menu/FontSizeMenu.d.ts +0 -13
  60. package/dist/basic-modules/src/modules/font-size-family/menu/config.d.ts +0 -12
  61. package/dist/basic-modules/src/modules/font-size-family/menu/index.d.ts +0 -26
  62. package/dist/basic-modules/src/modules/font-size-family/parse-style-html.d.ts +0 -8
  63. package/dist/basic-modules/src/modules/font-size-family/pre-parse-html.d.ts +0 -15
  64. package/dist/basic-modules/src/modules/font-size-family/render-style.d.ts +0 -15
  65. package/dist/basic-modules/src/modules/font-size-family/style-to-html.d.ts +0 -14
  66. package/dist/basic-modules/src/modules/format-painter/helper.d.ts +0 -3
  67. package/dist/basic-modules/src/modules/format-painter/index.d.ts +0 -7
  68. package/dist/basic-modules/src/modules/format-painter/menu/FormatPainter.d.ts +0 -37
  69. package/dist/basic-modules/src/modules/format-painter/menu/index.d.ts +0 -9
  70. package/dist/basic-modules/src/modules/format-painter/plugin.d.ts +0 -7
  71. package/dist/basic-modules/src/modules/full-screen/index.d.ts +0 -7
  72. package/dist/basic-modules/src/modules/full-screen/menu/FullScreen.d.ts +0 -18
  73. package/dist/basic-modules/src/modules/full-screen/menu/index.d.ts +0 -9
  74. package/dist/basic-modules/src/modules/header/custom-types.d.ts +0 -29
  75. package/dist/basic-modules/src/modules/header/elem-to-html.d.ts +0 -29
  76. package/dist/basic-modules/src/modules/header/helper.d.ts +0 -14
  77. package/dist/basic-modules/src/modules/header/index.d.ts +0 -7
  78. package/dist/basic-modules/src/modules/header/menu/Header1ButtonMenu.d.ts +0 -10
  79. package/dist/basic-modules/src/modules/header/menu/Header2ButtonMenu.d.ts +0 -10
  80. package/dist/basic-modules/src/modules/header/menu/Header3ButtonMenu.d.ts +0 -10
  81. package/dist/basic-modules/src/modules/header/menu/Header4ButtonMenu.d.ts +0 -10
  82. package/dist/basic-modules/src/modules/header/menu/Header5ButtonMenu.d.ts +0 -10
  83. package/dist/basic-modules/src/modules/header/menu/Header6ButtonMenu.d.ts +0 -10
  84. package/dist/basic-modules/src/modules/header/menu/HeaderButtonMenuBase.d.ts +0 -19
  85. package/dist/basic-modules/src/modules/header/menu/HeaderSelectMenu.d.ts +0 -26
  86. package/dist/basic-modules/src/modules/header/menu/index.d.ts +0 -39
  87. package/dist/basic-modules/src/modules/header/parse-elem-html.d.ts +0 -32
  88. package/dist/basic-modules/src/modules/header/plugin.d.ts +0 -7
  89. package/dist/basic-modules/src/modules/header/render-elem.d.ts +0 -32
  90. package/dist/basic-modules/src/modules/image/custom-types.d.ts +0 -22
  91. package/dist/basic-modules/src/modules/image/elem-to-html.d.ts +0 -12
  92. package/dist/basic-modules/src/modules/image/helper.d.ts +0 -13
  93. package/dist/basic-modules/src/modules/image/index.d.ts +0 -7
  94. package/dist/basic-modules/src/modules/image/menu/DeleteImage.d.ts +0 -15
  95. package/dist/basic-modules/src/modules/image/menu/EditImage.d.ts +0 -28
  96. package/dist/basic-modules/src/modules/image/menu/EditImageSizeMenu.d.ts +0 -25
  97. package/dist/basic-modules/src/modules/image/menu/InsertImage.d.ts +0 -27
  98. package/dist/basic-modules/src/modules/image/menu/PreviewImage.d.ts +0 -14
  99. package/dist/basic-modules/src/modules/image/menu/ViewImageLink.d.ts +0 -15
  100. package/dist/basic-modules/src/modules/image/menu/Width100.d.ts +0 -10
  101. package/dist/basic-modules/src/modules/image/menu/Width30.d.ts +0 -10
  102. package/dist/basic-modules/src/modules/image/menu/Width50.d.ts +0 -10
  103. package/dist/basic-modules/src/modules/image/menu/WidthBase.d.ts +0 -17
  104. package/dist/basic-modules/src/modules/image/menu/config.d.ts +0 -30
  105. package/dist/basic-modules/src/modules/image/menu/index.d.ts +0 -61
  106. package/dist/basic-modules/src/modules/image/parse-elem-html.d.ts +0 -14
  107. package/dist/basic-modules/src/modules/image/plugin.d.ts +0 -7
  108. package/dist/basic-modules/src/modules/image/render-elem.d.ts +0 -13
  109. package/dist/basic-modules/src/modules/image/resize.d.ts +0 -14
  110. package/dist/basic-modules/src/modules/indent/custom-types.d.ts +0 -10
  111. package/dist/basic-modules/src/modules/indent/index.d.ts +0 -7
  112. package/dist/basic-modules/src/modules/indent/is-indent-target.d.ts +0 -4
  113. package/dist/basic-modules/src/modules/indent/menu/BaseMenu.d.ts +0 -25
  114. package/dist/basic-modules/src/modules/indent/menu/DecreaseIndentMenu.d.ts +0 -13
  115. package/dist/basic-modules/src/modules/indent/menu/IncreaseIndentMenu.d.ts +0 -15
  116. package/dist/basic-modules/src/modules/indent/menu/index.d.ts +0 -14
  117. package/dist/basic-modules/src/modules/indent/parse-style-html.d.ts +0 -8
  118. package/dist/basic-modules/src/modules/indent/pre-parse-html.d.ts +0 -15
  119. package/dist/basic-modules/src/modules/indent/render-style.d.ts +0 -15
  120. package/dist/basic-modules/src/modules/indent/style-to-html.d.ts +0 -7
  121. package/dist/basic-modules/src/modules/justify/custom-types.d.ts +0 -10
  122. package/dist/basic-modules/src/modules/justify/index.d.ts +0 -7
  123. package/dist/basic-modules/src/modules/justify/menu/BaseMenu.d.ts +0 -15
  124. package/dist/basic-modules/src/modules/justify/menu/JustifyCenterMenu.d.ts +0 -12
  125. package/dist/basic-modules/src/modules/justify/menu/JustifyJustifyMenu.d.ts +0 -12
  126. package/dist/basic-modules/src/modules/justify/menu/JustifyLeftMenu.d.ts +0 -12
  127. package/dist/basic-modules/src/modules/justify/menu/JustifyRightMenu.d.ts +0 -12
  128. package/dist/basic-modules/src/modules/justify/menu/index.d.ts +0 -24
  129. package/dist/basic-modules/src/modules/justify/parse-style-html.d.ts +0 -8
  130. package/dist/basic-modules/src/modules/justify/render-style.d.ts +0 -15
  131. package/dist/basic-modules/src/modules/justify/style-to-html.d.ts +0 -7
  132. package/dist/basic-modules/src/modules/line-height/custom-types.d.ts +0 -10
  133. package/dist/basic-modules/src/modules/line-height/index.d.ts +0 -7
  134. package/dist/basic-modules/src/modules/line-height/menu/LineHeightMenu.d.ts +0 -26
  135. package/dist/basic-modules/src/modules/line-height/menu/config.d.ts +0 -5
  136. package/dist/basic-modules/src/modules/line-height/menu/index.d.ts +0 -12
  137. package/dist/basic-modules/src/modules/line-height/parse-style-html.d.ts +0 -8
  138. package/dist/basic-modules/src/modules/line-height/render-style.d.ts +0 -15
  139. package/dist/basic-modules/src/modules/line-height/style-to-html.d.ts +0 -7
  140. package/dist/basic-modules/src/modules/link/custom-types.d.ts +0 -11
  141. package/dist/basic-modules/src/modules/link/elem-to-html.d.ts +0 -11
  142. package/dist/basic-modules/src/modules/link/helper.d.ts +0 -20
  143. package/dist/basic-modules/src/modules/link/index.d.ts +0 -7
  144. package/dist/basic-modules/src/modules/link/menu/EditLink.d.ts +0 -30
  145. package/dist/basic-modules/src/modules/link/menu/InsertLink.d.ts +0 -25
  146. package/dist/basic-modules/src/modules/link/menu/UnLink.d.ts +0 -15
  147. package/dist/basic-modules/src/modules/link/menu/ViewLink.d.ts +0 -16
  148. package/dist/basic-modules/src/modules/link/menu/config.d.ts +0 -18
  149. package/dist/basic-modules/src/modules/link/menu/index.d.ts +0 -33
  150. package/dist/basic-modules/src/modules/link/parse-elem-html.d.ts +0 -15
  151. package/dist/basic-modules/src/modules/link/plugin.d.ts +0 -7
  152. package/dist/basic-modules/src/modules/link/render-elem.d.ts +0 -20
  153. package/dist/basic-modules/src/modules/link/url.d.ts +0 -10
  154. package/dist/basic-modules/src/modules/paragraph/custom-types.d.ts +0 -9
  155. package/dist/basic-modules/src/modules/paragraph/elem-to-html.d.ts +0 -11
  156. package/dist/basic-modules/src/modules/paragraph/index.d.ts +0 -7
  157. package/dist/basic-modules/src/modules/paragraph/parse-elem-html.d.ts +0 -14
  158. package/dist/basic-modules/src/modules/paragraph/plugin.d.ts +0 -7
  159. package/dist/basic-modules/src/modules/paragraph/render-elem.d.ts +0 -20
  160. package/dist/basic-modules/src/modules/text-style/custom-types.d.ts +0 -16
  161. package/dist/basic-modules/src/modules/text-style/helper.d.ts +0 -8
  162. package/dist/basic-modules/src/modules/text-style/index.d.ts +0 -7
  163. package/dist/basic-modules/src/modules/text-style/menu/BaseMenu.d.ts +0 -27
  164. package/dist/basic-modules/src/modules/text-style/menu/BoldMenu.d.ts +0 -12
  165. package/dist/basic-modules/src/modules/text-style/menu/ClearStyleMenu.d.ts +0 -20
  166. package/dist/basic-modules/src/modules/text-style/menu/CodeMenu.d.ts +0 -12
  167. package/dist/basic-modules/src/modules/text-style/menu/EmphasisDotMenu.d.ts +0 -11
  168. package/dist/basic-modules/src/modules/text-style/menu/ItalicMenu.d.ts +0 -12
  169. package/dist/basic-modules/src/modules/text-style/menu/SubMenu.d.ts +0 -13
  170. package/dist/basic-modules/src/modules/text-style/menu/SupMenu.d.ts +0 -13
  171. package/dist/basic-modules/src/modules/text-style/menu/ThroughMenu.d.ts +0 -12
  172. package/dist/basic-modules/src/modules/text-style/menu/UnderlineMenu.d.ts +0 -12
  173. package/dist/basic-modules/src/modules/text-style/menu/WavyUnderlineMenu.d.ts +0 -11
  174. package/dist/basic-modules/src/modules/text-style/menu/index.d.ts +0 -54
  175. package/dist/basic-modules/src/modules/text-style/parse-style-html.d.ts +0 -8
  176. package/dist/basic-modules/src/modules/text-style/render-style.d.ts +0 -14
  177. package/dist/basic-modules/src/modules/text-style/style-constants.d.ts +0 -35
  178. package/dist/basic-modules/src/modules/text-style/style-to-html.d.ts +0 -13
  179. package/dist/basic-modules/src/modules/todo/custom-types.d.ts +0 -10
  180. package/dist/basic-modules/src/modules/todo/elem-to-html.d.ts +0 -11
  181. package/dist/basic-modules/src/modules/todo/index.d.ts +0 -7
  182. package/dist/basic-modules/src/modules/todo/menu/Todo.d.ts +0 -15
  183. package/dist/basic-modules/src/modules/todo/menu/index.d.ts +0 -9
  184. package/dist/basic-modules/src/modules/todo/parse-elem-html.d.ts +0 -14
  185. package/dist/basic-modules/src/modules/todo/plugin.d.ts +0 -7
  186. package/dist/basic-modules/src/modules/todo/pre-parse-html.d.ts +0 -15
  187. package/dist/basic-modules/src/modules/todo/render-elem.d.ts +0 -20
  188. package/dist/basic-modules/src/modules/undo-redo/index.d.ts +0 -7
  189. package/dist/basic-modules/src/modules/undo-redo/menu/RedoMenu.d.ts +0 -15
  190. package/dist/basic-modules/src/modules/undo-redo/menu/UndoMenu.d.ts +0 -15
  191. package/dist/basic-modules/src/modules/undo-redo/menu/index.d.ts +0 -14
  192. package/dist/basic-modules/src/utils/dom.d.ts +0 -36
  193. package/dist/basic-modules/src/utils/style-class.d.ts +0 -14
  194. package/dist/basic-modules/src/utils/util.d.ts +0 -11
  195. package/dist/basic-modules/src/utils/vdom.d.ts +0 -25
  196. package/dist/code-highlight/src/constants/svg.d.ts +0 -10
  197. package/dist/code-highlight/src/custom-types.d.ts +0 -17
  198. package/dist/code-highlight/src/decorate/index.d.ts +0 -7
  199. package/dist/code-highlight/src/index.d.ts +0 -9
  200. package/dist/code-highlight/src/locale/en.d.ts +0 -10
  201. package/dist/code-highlight/src/locale/index.d.ts +0 -5
  202. package/dist/code-highlight/src/locale/zh-CN.d.ts +0 -10
  203. package/dist/code-highlight/src/module/elem-to-html.d.ts +0 -11
  204. package/dist/code-highlight/src/module/index.d.ts +0 -7
  205. package/dist/code-highlight/src/module/menu/SelectLangMenu.d.ts +0 -24
  206. package/dist/code-highlight/src/module/menu/config.d.ts +0 -8
  207. package/dist/code-highlight/src/module/menu/index.d.ts +0 -15
  208. package/dist/code-highlight/src/module/parse-style-html.d.ts +0 -8
  209. package/dist/code-highlight/src/module/render-style.d.ts +0 -13
  210. package/dist/code-highlight/src/utils/dom.d.ts +0 -15
  211. package/dist/code-highlight/src/utils/vdom.d.ts +0 -11
  212. package/dist/code-highlight/src/vendor/prism.d.ts +0 -37
  213. package/dist/core/src/config/index.d.ts +0 -13
  214. package/dist/core/src/config/interface.d.ts +0 -339
  215. package/dist/core/src/config/register.d.ts +0 -12
  216. package/dist/core/src/config/style-mode.d.ts +0 -8
  217. package/dist/core/src/constants/index.d.ts +0 -1
  218. package/dist/core/src/constants/svg.d.ts +0 -12
  219. package/dist/core/src/create/bind-node-relation.d.ts +0 -15
  220. package/dist/core/src/create/create-editor.d.ts +0 -10
  221. package/dist/core/src/create/create-toolbar.d.ts +0 -14
  222. package/dist/core/src/create/helper.d.ts +0 -37
  223. package/dist/core/src/create/index.d.ts +0 -8
  224. package/dist/core/src/editor/dom-editor.d.ts +0 -154
  225. package/dist/core/src/editor/interface.d.ts +0 -90
  226. package/dist/core/src/editor/plugins/with-config.d.ts +0 -7
  227. package/dist/core/src/editor/plugins/with-content.d.ts +0 -7
  228. package/dist/core/src/editor/plugins/with-dom.d.ts +0 -10
  229. package/dist/core/src/editor/plugins/with-emitter.d.ts +0 -7
  230. package/dist/core/src/editor/plugins/with-event-data.d.ts +0 -7
  231. package/dist/core/src/editor/plugins/with-history.d.ts +0 -7
  232. package/dist/core/src/editor/plugins/with-max-length.d.ts +0 -7
  233. package/dist/core/src/editor/plugins/with-selection.d.ts +0 -7
  234. package/dist/core/src/i18n/index.d.ts +0 -32
  235. package/dist/core/src/index.d.ts +0 -45
  236. package/dist/core/src/menus/bar/HoverBar.d.ts +0 -48
  237. package/dist/core/src/menus/bar/Toolbar.d.ts +0 -38
  238. package/dist/core/src/menus/bar-item/BaseButton.d.ts +0 -26
  239. package/dist/core/src/menus/bar-item/DropPanelButton.d.ts +0 -14
  240. package/dist/core/src/menus/bar-item/GroupButton.d.ts +0 -17
  241. package/dist/core/src/menus/bar-item/ModalButton.d.ts +0 -25
  242. package/dist/core/src/menus/bar-item/Select.d.ts +0 -22
  243. package/dist/core/src/menus/bar-item/SimpleButton.d.ts +0 -11
  244. package/dist/core/src/menus/bar-item/index.d.ts +0 -24
  245. package/dist/core/src/menus/bar-item/tooltip.d.ts +0 -6
  246. package/dist/core/src/menus/helpers/helpers.d.ts +0 -18
  247. package/dist/core/src/menus/helpers/position.d.ts +0 -36
  248. package/dist/core/src/menus/index.d.ts +0 -9
  249. package/dist/core/src/menus/interface.d.ts +0 -65
  250. package/dist/core/src/menus/panel-and-modal/BaseClass.d.ts +0 -26
  251. package/dist/core/src/menus/panel-and-modal/DropPanel.d.ts +0 -12
  252. package/dist/core/src/menus/panel-and-modal/Modal.d.ts +0 -44
  253. package/dist/core/src/menus/panel-and-modal/SelectList.d.ts +0 -20
  254. package/dist/core/src/menus/register.d.ts +0 -15
  255. package/dist/core/src/parse-html/helper.d.ts +0 -10
  256. package/dist/core/src/parse-html/index.d.ts +0 -35
  257. package/dist/core/src/parse-html/parse-common-elem-html.d.ts +0 -15
  258. package/dist/core/src/parse-html/parse-elem-html.d.ts +0 -15
  259. package/dist/core/src/parse-html/parse-text-elem-html.d.ts +0 -16
  260. package/dist/core/src/render/element/getRenderElem.d.ts +0 -11
  261. package/dist/core/src/render/element/renderElement.d.ts +0 -9
  262. package/dist/core/src/render/element/renderStyle.d.ts +0 -15
  263. package/dist/core/src/render/helper.d.ts +0 -6
  264. package/dist/core/src/render/index.d.ts +0 -27
  265. package/dist/core/src/render/node2Vnode.d.ts +0 -15
  266. package/dist/core/src/render/text/genVnode.d.ts +0 -9
  267. package/dist/core/src/render/text/renderStyle.d.ts +0 -15
  268. package/dist/core/src/render/text/renderText.d.ts +0 -9
  269. package/dist/core/src/text-area/TextArea.d.ts +0 -52
  270. package/dist/core/src/text-area/event-handlers/beforeInput.d.ts +0 -8
  271. package/dist/core/src/text-area/event-handlers/blur.d.ts +0 -8
  272. package/dist/core/src/text-area/event-handlers/click.d.ts +0 -8
  273. package/dist/core/src/text-area/event-handlers/composition.d.ts +0 -27
  274. package/dist/core/src/text-area/event-handlers/copy.d.ts +0 -8
  275. package/dist/core/src/text-area/event-handlers/cut.d.ts +0 -8
  276. package/dist/core/src/text-area/event-handlers/drag.d.ts +0 -9
  277. package/dist/core/src/text-area/event-handlers/drop.d.ts +0 -8
  278. package/dist/core/src/text-area/event-handlers/focus.d.ts +0 -8
  279. package/dist/core/src/text-area/event-handlers/index.d.ts +0 -35
  280. package/dist/core/src/text-area/event-handlers/keydown.d.ts +0 -8
  281. package/dist/core/src/text-area/event-handlers/keypress.d.ts +0 -8
  282. package/dist/core/src/text-area/event-handlers/paste.d.ts +0 -8
  283. package/dist/core/src/text-area/helpers.d.ts +0 -30
  284. package/dist/core/src/text-area/place-holder.d.ts +0 -18
  285. package/dist/core/src/text-area/syncSelection.d.ts +0 -19
  286. package/dist/core/src/text-area/update-view.d.ts +0 -13
  287. package/dist/core/src/to-html/elem2html.d.ts +0 -9
  288. package/dist/core/src/to-html/index.d.ts +0 -44
  289. package/dist/core/src/to-html/node2html.d.ts +0 -12
  290. package/dist/core/src/to-html/text2html.d.ts +0 -9
  291. package/dist/core/src/upload/createUploader.d.ts +0 -14
  292. package/dist/core/src/upload/createUppyUploader.d.ts +0 -7
  293. package/dist/core/src/upload/index.d.ts +0 -9
  294. package/dist/core/src/upload/interface.d.ts +0 -72
  295. package/dist/core/src/upload.d.ts +0 -5
  296. package/dist/core/src/utils/dom.d.ts +0 -103
  297. package/dist/core/src/utils/hotkeys.d.ts +0 -35
  298. package/dist/core/src/utils/key.d.ts +0 -11
  299. package/dist/core/src/utils/line.d.ts +0 -14
  300. package/dist/core/src/utils/sanitize-html.d.ts +0 -5
  301. package/dist/core/src/utils/ua.d.ts +0 -14
  302. package/dist/core/src/utils/util.d.ts +0 -28
  303. package/dist/core/src/utils/vdom.d.ts +0 -34
  304. package/dist/core/src/utils/weak-maps.d.ts +0 -60
  305. package/dist/editor/src/Boot.d.ts +0 -31
  306. package/dist/editor/src/constants/svg.d.ts +0 -14
  307. package/dist/editor/src/create.d.ts +0 -29
  308. package/dist/editor/src/index.d.ts +0 -27
  309. package/dist/editor/src/init-default-config/config/hoverbar.d.ts +0 -47
  310. package/dist/editor/src/init-default-config/config/index.d.ts +0 -67
  311. package/dist/editor/src/init-default-config/config/toolbar.d.ts +0 -16
  312. package/dist/editor/src/init-default-config/index.d.ts +0 -5
  313. package/dist/editor/src/locale/en.d.ts +0 -14
  314. package/dist/editor/src/locale/index.d.ts +0 -5
  315. package/dist/editor/src/locale/zh-CN.d.ts +0 -14
  316. package/dist/editor/src/register-builtin-modules/index.d.ts +0 -5
  317. package/dist/editor/src/register-builtin-modules/register.d.ts +0 -7
  318. package/dist/editor/src/utils/browser-polyfill.d.ts +0 -6
  319. package/dist/editor/src/utils/dom.d.ts +0 -6
  320. package/dist/editor/src/utils/node-polyfill.d.ts +0 -4
  321. package/dist/list-module/src/constants/svg.d.ts +0 -11
  322. package/dist/list-module/src/index.d.ts +0 -8
  323. package/dist/list-module/src/locale/en.d.ts +0 -15
  324. package/dist/list-module/src/locale/index.d.ts +0 -5
  325. package/dist/list-module/src/locale/zh-CN.d.ts +0 -15
  326. package/dist/list-module/src/module/custom-types.d.ts +0 -27
  327. package/dist/list-module/src/module/elem-to-html.d.ts +0 -16
  328. package/dist/list-module/src/module/helpers.d.ts +0 -26
  329. package/dist/list-module/src/module/html-transform.d.ts +0 -10
  330. package/dist/list-module/src/module/index.d.ts +0 -7
  331. package/dist/list-module/src/module/menu/BaseMenu.d.ts +0 -20
  332. package/dist/list-module/src/module/menu/BulletedListMenu.d.ts +0 -11
  333. package/dist/list-module/src/module/menu/LowerAlphaListMenu.d.ts +0 -13
  334. package/dist/list-module/src/module/menu/NumberedListMenu.d.ts +0 -11
  335. package/dist/list-module/src/module/menu/index.d.ts +0 -19
  336. package/dist/list-module/src/module/outline-actions.d.ts +0 -9
  337. package/dist/list-module/src/module/parse-elem-html.d.ts +0 -18
  338. package/dist/list-module/src/module/plugin.d.ts +0 -7
  339. package/dist/list-module/src/module/render-elem.d.ts +0 -13
  340. package/dist/list-module/src/module/style-class.d.ts +0 -6
  341. package/dist/list-module/src/utils/dom.d.ts +0 -19
  342. package/dist/list-module/src/utils/maps.d.ts +0 -7
  343. package/dist/list-module/src/utils/util.d.ts +0 -6
  344. package/dist/plugin-attachment/src/constants/icon-svg.d.ts +0 -6
  345. package/dist/plugin-attachment/src/index.d.ts +0 -8
  346. package/dist/plugin-attachment/src/module/custom-types.d.ts +0 -14
  347. package/dist/plugin-attachment/src/module/elem-to-html.d.ts +0 -11
  348. package/dist/plugin-attachment/src/module/index.d.ts +0 -8
  349. package/dist/plugin-attachment/src/module/local.d.ts +0 -5
  350. package/dist/plugin-attachment/src/module/menu/DownloadAttachment.d.ts +0 -17
  351. package/dist/plugin-attachment/src/module/menu/UploadAttachment.d.ts +0 -16
  352. package/dist/plugin-attachment/src/module/menu/config.d.ts +0 -15
  353. package/dist/plugin-attachment/src/module/menu/helper.d.ts +0 -17
  354. package/dist/plugin-attachment/src/module/menu/index.d.ts +0 -15
  355. package/dist/plugin-attachment/src/module/parse-elem-html.d.ts +0 -12
  356. package/dist/plugin-attachment/src/module/plugin.d.ts +0 -7
  357. package/dist/plugin-attachment/src/module/render-elem.d.ts +0 -12
  358. package/dist/plugin-attachment/src/utils/dom.d.ts +0 -15
  359. package/dist/table-module/src/constants/svg.d.ts +0 -26
  360. package/dist/table-module/src/index.d.ts +0 -8
  361. package/dist/table-module/src/locale/en.d.ts +0 -56
  362. package/dist/table-module/src/locale/index.d.ts +0 -5
  363. package/dist/table-module/src/locale/zh-CN.d.ts +0 -56
  364. package/dist/table-module/src/module/cell-selection.d.ts +0 -11
  365. package/dist/table-module/src/module/column-resize.d.ts +0 -20
  366. package/dist/table-module/src/module/custom-types.d.ts +0 -48
  367. package/dist/table-module/src/module/elem-to-html.d.ts +0 -22
  368. package/dist/table-module/src/module/helpers.d.ts +0 -37
  369. package/dist/table-module/src/module/index.d.ts +0 -7
  370. package/dist/table-module/src/module/menu/CellProperty.d.ts +0 -14
  371. package/dist/table-module/src/module/menu/DeleteCol.d.ts +0 -15
  372. package/dist/table-module/src/module/menu/DeleteRow.d.ts +0 -15
  373. package/dist/table-module/src/module/menu/DeleteTable.d.ts +0 -15
  374. package/dist/table-module/src/module/menu/FullWidth.d.ts +0 -15
  375. package/dist/table-module/src/module/menu/InsertCol.d.ts +0 -15
  376. package/dist/table-module/src/module/menu/InsertRow.d.ts +0 -15
  377. package/dist/table-module/src/module/menu/InsertTable.d.ts +0 -24
  378. package/dist/table-module/src/module/menu/MergeCell.d.ts +0 -24
  379. package/dist/table-module/src/module/menu/SplitCell.d.ts +0 -24
  380. package/dist/table-module/src/module/menu/TableHeader.d.ts +0 -15
  381. package/dist/table-module/src/module/menu/TableProperty.d.ts +0 -49
  382. package/dist/table-module/src/module/menu/index.d.ts +0 -77
  383. package/dist/table-module/src/module/parse-elem-html.d.ts +0 -24
  384. package/dist/table-module/src/module/parse-style-html.d.ts +0 -8
  385. package/dist/table-module/src/module/plugin.d.ts +0 -7
  386. package/dist/table-module/src/module/pre-parse-html.d.ts +0 -15
  387. package/dist/table-module/src/module/render-elem/index.d.ts +0 -19
  388. package/dist/table-module/src/module/render-elem/render-cell.d.ts +0 -9
  389. package/dist/table-module/src/module/render-elem/render-row.d.ts +0 -9
  390. package/dist/table-module/src/module/render-elem/render-table.d.ts +0 -9
  391. package/dist/table-module/src/module/render-elem/selection-overlay.d.ts +0 -21
  392. package/dist/table-module/src/module/render-style.d.ts +0 -9
  393. package/dist/table-module/src/module/row-resize.d.ts +0 -15
  394. package/dist/table-module/src/module/style-to-html.d.ts +0 -6
  395. package/dist/table-module/src/module/table-cursor.d.ts +0 -20
  396. package/dist/table-module/src/module/weak-maps.d.ts +0 -6
  397. package/dist/table-module/src/module/with-selection.d.ts +0 -2
  398. package/dist/table-module/src/utils/dom.d.ts +0 -31
  399. package/dist/table-module/src/utils/has-common.d.ts +0 -7
  400. package/dist/table-module/src/utils/index.d.ts +0 -5
  401. package/dist/table-module/src/utils/is-of-type.d.ts +0 -6
  402. package/dist/table-module/src/utils/matrices.d.ts +0 -9
  403. package/dist/table-module/src/utils/options.d.ts +0 -16
  404. package/dist/table-module/src/utils/point.d.ts +0 -7
  405. package/dist/table-module/src/utils/types.d.ts +0 -19
  406. package/dist/table-module/src/utils/vdom.d.ts +0 -11
  407. package/dist/upload-image-module/src/constants/svg.d.ts +0 -10
  408. package/dist/upload-image-module/src/index.d.ts +0 -8
  409. package/dist/upload-image-module/src/locale/en.d.ts +0 -11
  410. package/dist/upload-image-module/src/locale/index.d.ts +0 -5
  411. package/dist/upload-image-module/src/locale/zh-CN.d.ts +0 -11
  412. package/dist/upload-image-module/src/module/index.d.ts +0 -7
  413. package/dist/upload-image-module/src/module/menu/UploadImageMenu.d.ts +0 -16
  414. package/dist/upload-image-module/src/module/menu/config.d.ts +0 -6
  415. package/dist/upload-image-module/src/module/menu/index.d.ts +0 -10
  416. package/dist/upload-image-module/src/module/plugin.d.ts +0 -7
  417. package/dist/upload-image-module/src/module/upload-images.d.ts +0 -11
  418. package/dist/upload-image-module/src/utils/dom.d.ts +0 -7
  419. package/dist/video-module/src/constants/svg.d.ts +0 -15
  420. package/dist/video-module/src/index.d.ts +0 -8
  421. package/dist/video-module/src/locale/en.d.ts +0 -24
  422. package/dist/video-module/src/locale/index.d.ts +0 -5
  423. package/dist/video-module/src/locale/zh-CN.d.ts +0 -24
  424. package/dist/video-module/src/module/alignment.d.ts +0 -10
  425. package/dist/video-module/src/module/custom-types.d.ts +0 -24
  426. package/dist/video-module/src/module/elem-to-html.d.ts +0 -12
  427. package/dist/video-module/src/module/helper/insert-video.d.ts +0 -12
  428. package/dist/video-module/src/module/helper/upload-videos.d.ts +0 -6
  429. package/dist/video-module/src/module/index.d.ts +0 -7
  430. package/dist/video-module/src/module/menu/EditVideoSizeMenu.d.ts +0 -25
  431. package/dist/video-module/src/module/menu/EditVideoSrcMenu.d.ts +0 -26
  432. package/dist/video-module/src/module/menu/InsertVideoMenu.d.ts +0 -25
  433. package/dist/video-module/src/module/menu/UploadVideoMenu.d.ts +0 -16
  434. package/dist/video-module/src/module/menu/VideoAlignMenu.d.ts +0 -18
  435. package/dist/video-module/src/module/menu/config.d.ts +0 -25
  436. package/dist/video-module/src/module/menu/index.d.ts +0 -43
  437. package/dist/video-module/src/module/parse-elem-html.d.ts +0 -14
  438. package/dist/video-module/src/module/plugin.d.ts +0 -7
  439. package/dist/video-module/src/module/pre-parse-html.d.ts +0 -15
  440. package/dist/video-module/src/module/render-elem.d.ts +0 -13
  441. package/dist/video-module/src/utils/dom.d.ts +0 -29
  442. package/dist/video-module/src/utils/util.d.ts +0 -12
@@ -0,0 +1,33 @@
1
+ import { IDomEditor, IModuleConf, IUploadConfig } from "@wangeditor-next/editor";
2
+
3
+ //#region src/module/index.d.ts
4
+
5
+ declare const module: Partial<IModuleConf>;
6
+ //#endregion
7
+ //#region src/module/custom-types.d.ts
8
+ /**
9
+ * @description attachment element
10
+ * @author wangfupeng
11
+ */
12
+ type EmptyText = {
13
+ text: '';
14
+ };
15
+ type AttachmentElement = {
16
+ type: 'attachment';
17
+ fileName: string;
18
+ link: string;
19
+ children: EmptyText[];
20
+ };
21
+ //#endregion
22
+ //#region src/module/menu/config.d.ts
23
+ type InsertFn = (fileName: string, link: string) => void;
24
+ type IUploadConfigForAttachment = Omit<IUploadConfig, 'customInsert' | 'customUpload' | 'customBrowseAndUpload'> & {
25
+ customInsert?: (res: any, file: any, insertFn: InsertFn) => void;
26
+ customUpload?: (file: File, insertFn: InsertFn, editor: IDomEditor) => void | Promise<void>;
27
+ customBrowseAndUpload?: (insertFn: InsertFn) => void;
28
+ onInsertedAttachment?: (elem: AttachmentElement) => void;
29
+ };
30
+ declare function genUploadAttachmentMenuConfig(): IUploadConfigForAttachment;
31
+ //#endregion
32
+ export { AttachmentElement, IUploadConfigForAttachment, module as default, genUploadAttachmentMenuConfig };
33
+ //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@wangeditor-next/editor"),require("dom7"),require("snabbdom")):"function"==typeof define&&define.amd?define(["exports","@wangeditor-next/editor","dom7","snabbdom"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).WangEditorAttachmentPlugin={},e.wangEditor,e.$,e.snabbdom)}(this,function(e,t,n,r){"use strict";t.i18nAddResources("en",{attachment:{upload:"Upload Attachment",download:"Download Attachment"}}),t.i18nAddResources("zh-CN",{attachment:{upload:"上传附件",download:"下载附件"}});var o={type:"attachment",elemToHtml:function(e,t){var n=e,r=n.link,o=void 0===r?"":r,i=n.fileName,a=void 0===i?"":i;return'<a data-w-e-type="attachment" data-w-e-is-void data-w-e-is-inline href="'.concat(o,'" download="').concat(a,'">').concat(a,"</a>")}};function i(){return{server:"",fieldName:"wangeditor-uploaded-attachment",maxFileSize:10485760,maxNumberOfFiles:5,allowedFileTypes:["*"],meta:{},metaWithUrl:!1,withCredentials:!1,timeout:3e4,onBeforeUpload:function(e){return e},onProgress:function(e){},onSuccess:function(e,t){},onFailed:function(e,t){},onError:function(e,t,n){},onInsertedAttachment:function(e){}}}var a=function(){function e(){this.title=t.t("attachment.download"),this.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M736 448l-256 256-256-256h160V64h192v384z m-256 256H0v256h960v-256H480z m416 128h-128v-64h128v64z"></path></svg>',this.tag="button",this.alwaysEnable=!0}return e.prototype.getValue=function(e){var t=this.getSelectedElem(e);return null==t?"":t.link},e.prototype.isActive=function(e){return!1},e.prototype.exec=function(e,t){t&&"string"==typeof t&&window.open(t,"_blank")},e.prototype.isDisabled=function(e){var n=e.selection;return null==n||(!!t.SlateRange.isExpanded(n)||null==this.getSelectedElem(e))},e.prototype.getSelectedElem=function(e){var n=t.DomEditor.getSelectedNodeByType(e,"attachment");return null==n?null:n},e}();n.hide&&(n.fn.hide=n.hide),n.append&&(n.fn.append=n.append),n.click&&(n.fn.click=n.click),n.on&&(n.fn.on=n.on);var c=function(){return c=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},c.apply(this,arguments)};function u(e,t,n,r){return new(n||(n=Promise))(function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function c(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(a,c)}u((r=r.apply(e,t||[])).next())})}function l(e,t){var n,r,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=c(0),a.throw=c(1),a.return=c(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function c(c){return function(u){return function(c){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,c[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return i.label++,{value:c[1],done:!1};case 5:i.label++,r=c[1],c=[0];continue;case 7:c=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==c[0]&&2!==c[0])){i=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){i.label=c[1];break}if(6===c[0]&&i.label<o[1]){i.label=o[1],o=c;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(c);break}o[2]&&i.ops.pop(),i.trys.pop();continue}c=t.call(e,i)}catch(e){c=[6,e],r=0}finally{n=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}([c,u])}}}function s(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function d(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t,n=e[Symbol.asyncIterator];return n?n.call(e):(e=s(e),t={},r("next"),r("throw"),r("return"),t[Symbol.asyncIterator]=function(){return this},t);function r(n){t[n]=e[n]&&function(t){return new Promise(function(r,o){(function(e,t,n,r){Promise.resolve(r).then(function(t){e({value:t,done:n})},t)})(r,o,(t=e[n](t)).done,t.value)})}}}function f(e){var t={server:"",fieldName:"wangeditor-uploaded-attachment",maxFileSize:10485760,maxNumberOfFiles:5,allowedFileTypes:["*"],meta:{},metaWithUrl:!1,withCredentials:!1,timeout:3e4,onBeforeUpload:function(e){return e},onProgress:function(e){},onSuccess:function(e,t){},onFailed:function(e,t){},onError:function(e,t,n){},onInsertedAttachment:function(e){}},n=e.getMenuConfig("uploadAttachment");return c(c({},t),n||{})}function p(e,t,n){if(t&&n){e.restoreSelection();var r={type:"attachment",fileName:t,link:n,children:[{text:""}]};e.insertNode(r),e.move(1);var o=f(e).onInsertedAttachment;o&&o(r)}}"function"==typeof SuppressedError&&SuppressedError;var m=new WeakMap;function h(e){var n=m.get(e);if(null!=n)return n;var r=f(e),o=r.customInsert,i=r.onError,a=r.onFailed,u=r.onProgress,l=r.onSuccess;return n=t.createUploader(c(c({},r),{onProgress:function(t){e.showProgressBar(t),u&&u(t)},onSuccess:function(t,n){if(o)return o(n,t,function(t,n){return p(e,t,n)}),void l(t,n);var r=n||{},i=r.errno,c=void 0===i?1:i,u=r.data;if(0===c){var s=(void 0===u?{}:u).url,d=void 0===s?"":s;p(e,(null==t?void 0:t.name)||"",d),l(t,n)}else a(t,n)},onError:function(e,t,n){i(e,t,n)}}),e),m.set(e,n),n}function y(e,t){return u(this,void 0,void 0,function(){var n,r;return l(this,function(o){switch(o.label){case 0:return n=h(e),r=t.map(function(e){return{name:e.name,type:e.type,size:e.size,data:e}}),n.addFiles(r),[4,n.upload()];case 1:return o.sent(),[2]}})})}var v=function(){function e(){this.title=t.t("attachment.upload"),this.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M665.821116 327.053068l-64.958782-64.926783-324.79391 324.729911c-53.822991 53.790991-53.822991 141.053355 0 194.844347s141.053355 53.790991 194.876346 0l389.752692-389.688693a229.531696 229.531696 0 0 0 0-324.729912 229.627694 229.627694 0 0 0-324.761911 0L126.727224 476.458266l-0.863984 0.831985c-125.085655 125.085655-125.085655 327.833853 0 452.887508 125.053655 125.053655 327.865853 125.053655 452.983507 0l0.831984-0.863984 0.031999 0.032 279.322763-279.290764-64.990781-64.926782-279.322763 279.258764-0.831984 0.831984a228.731711 228.731711 0 0 1-323.065943 0 228.603714 228.603714 0 0 1 0-322.969944l0.895983-0.831985-0.031999-0.063998L600.958332 132.208721c53.694993-53.726993 141.149353-53.726993 194.876346 0s53.694993 141.149353 0 194.844347L406.081986 716.741761c-17.919664 17.919664-47.039118 17.919664-64.958782 0a45.983138 45.983138 0 0 1 0-64.926783L665.917114 327.053068z"></path></svg>',this.tag="button"}return e.prototype.getValue=function(e){return""},e.prototype.isActive=function(e){return!1},e.prototype.exec=function(e,t){var r=this.getMenuConfig(e),o=r.allowedFileTypes,i=void 0===o?[]:o,a=r.customBrowseAndUpload;if(a)a(function(t,n){return p(e,t,n)});else{var c="";i.length>0&&(c='accept="'.concat(i.join(", "),'"'));var s=n("body"),m=n('<input type="file" '.concat(c," multiple/>"));m.hide(),s.append(m),m.click(),m.on("change",function(){var t=m[0].files;!function(e,t){u(this,void 0,void 0,function(){var n,r,o,i,a,c,u,s,m,h,v,g;return l(this,function(l){switch(l.label){case 0:if(null==t)return[2];n=Array.prototype.slice.call(t),r=f(e).customUpload,o=[],l.label=1;case 1:l.trys.push([1,8,9,14]),i=!0,a=d(n),l.label=2;case 2:return[4,a.next()];case 3:return c=l.sent(),(m=c.done)?[3,7]:(g=c.value,i=!1,u=g,r?[4,r(u,function(t,n){return p(e,t,n)},e)]:[3,5]);case 4:return l.sent(),[3,6];case 5:o.push(u),l.label=6;case 6:return i=!0,[3,2];case 7:return[3,14];case 8:return s=l.sent(),h={error:s},[3,14];case 9:return l.trys.push([9,,12,13]),i||m||!(v=a.return)?[3,11]:[4,v.call(a)];case 10:l.sent(),l.label=11;case 11:return[3,13];case 12:if(h)throw h.error;return[7];case 13:return[7];case 14:return o.length>0?[4,y(e,o)]:[3,16];case 15:l.sent(),l.label=16;case 16:return[2]}})})}(e,t)})}},e.prototype.isDisabled=function(e){var n=e.selection;if(null==n)return!0;if(t.SlateRange.isExpanded(n))return!0;var r=t.DomEditor.getSelectedElems(e);return!!r.some(function(t){return e.isVoid(t)})||!!r.some(function(e){return"pre"===t.DomEditor.getNodeType(e)})},e.prototype.getMenuConfig=function(e){return e.getMenuConfig("uploadAttachment")},e}();var g={editorPlugin:function(e){var n=e.isInline,r=e.isVoid,o=e;return o.isInline=function(e){return"attachment"===t.DomEditor.getNodeType(e)||n(e)},o.isVoid=function(e){return"attachment"===t.DomEditor.getNodeType(e)||r(e)},o},renderElems:[{type:"attachment",renderElem:function(e,n,o){var i=o.isDisabled(),a=t.DomEditor.isNodeSelected(o,e),c=e,u=c.fileName,l=void 0===u?"":u,s=c.link,d=void 0===s?"":s;return r.h("span",{props:{contentEditable:!1},style:{display:"inline-block",marginLeft:"3px",marginRight:"3px",border:a&&!i?"2px solid var(--w-e-textarea-selected-border-color)":"2px solid transparent",borderRadius:"3px",padding:"0 3px",backgroundColor:"var(--w-e-textarea-slight-bg-color)",cursor:i?"pointer":"inherit"},on:{click:function(){i&&d&&window.open(d,"_blank")}}},[r.h("span",{style:{marginRight:"0.2em",opacity:"0.7"}},"file"),l])}}],elemsToHtml:[o],parseElemsHtml:[{selector:'a[data-w-e-type="attachment"]',parseElemHtml:function(e,t,n){return{type:"attachment",link:e.getAttribute("href")||"",fileName:e.getAttribute("download")||"",children:[{text:""}]}}}],menus:[{key:"uploadAttachment",factory:function(){return new v},config:{server:"",fieldName:"wangeditor-uploaded-attachment",maxFileSize:10485760,maxNumberOfFiles:5,allowedFileTypes:["*"],meta:{},metaWithUrl:!1,withCredentials:!1,timeout:3e4,onBeforeUpload:function(e){return e},onProgress:function(e){},onSuccess:function(e,t){},onFailed:function(e,t){},onError:function(e,t,n){},onInsertedAttachment:function(e){}}},{key:"downloadAttachment",factory:function(){return new a}}]};e.default=g,e.genUploadAttachmentMenuConfig=i,Object.defineProperty(e,"__esModule",{value:!0})});
2
- //# sourceMappingURL=index.js.map
1
+ (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require(`@wangeditor-next/editor`),require(`dom7`),require(`snabbdom`)):typeof define==`function`&&define.amd?define([`exports`,`@wangeditor-next/editor`,`dom7`,`snabbdom`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.WangEditorAttachmentPlugin={},e.wangEditor,e.$,e.snabbdom))})(this,function(e,t,n,r){Object.defineProperty(e,`__esModule`,{value:!0});var i=Object.create,a=Object.defineProperty,o=Object.getOwnPropertyDescriptor,s=Object.getOwnPropertyNames,c=Object.getPrototypeOf,l=Object.prototype.hasOwnProperty,u=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=s(t),c=0,u=i.length,d;c<u;c++)d=i[c],!l.call(e,d)&&d!==n&&a(e,d,{get:(e=>t[e]).bind(null,d),enumerable:!(r=o(t,d))||r.enumerable});return e};n=((e,t,n)=>(n=e==null?{}:i(c(e)),u(t||!e||!e.__esModule?a(n,`default`,{value:e,enumerable:!0}):n,e)))(n),(0,t.i18nAddResources)(`en`,{attachment:{upload:`Upload Attachment`,download:`Download Attachment`}}),(0,t.i18nAddResources)(`zh-CN`,{attachment:{upload:`上传附件`,download:`下载附件`}});function d(e,t){let{link:n=``,fileName:r=``}=e;return`<a data-w-e-type="attachment" data-w-e-is-void data-w-e-is-inline href="${n}" download="${r}">${r}</a>`}var f={type:`attachment`,elemToHtml:d};function p(){return{server:``,fieldName:`wangeditor-uploaded-attachment`,maxFileSize:10*1024*1024,maxNumberOfFiles:5,allowedFileTypes:[`*`],meta:{},metaWithUrl:!1,withCredentials:!1,timeout:30*1e3,onBeforeUpload:e=>e,onProgress:e=>{},onSuccess:(e,t)=>{},onFailed:(e,t)=>{},onError:(e,t,n)=>{},onInsertedAttachment(e){}}}var m=class{constructor(){this.title=(0,t.t)(`attachment.download`),this.iconSvg=`<svg viewBox="0 0 1024 1024"><path d="M736 448l-256 256-256-256h160V64h192v384z m-256 256H0v256h960v-256H480z m416 128h-128v-64h128v64z"></path></svg>`,this.tag=`button`,this.alwaysEnable=!0}getValue(e){let t=this.getSelectedElem(e);return t==null?``:t.link}isActive(e){return!1}exec(e,t){t&&typeof t==`string`&&window.open(t,`_blank`)}isDisabled(e){let{selection:n}=e;return!!(n==null||t.SlateRange.isExpanded(n)||this.getSelectedElem(e)==null)}getSelectedElem(e){let n=t.DomEditor.getSelectedNodeByType(e,`attachment`);return n==null?null:n}};n.hide&&(n.default.fn.hide=n.hide),n.append&&(n.default.fn.append=n.append),n.click&&(n.default.fn.click=n.click),n.on&&(n.default.fn.on=n.on);var h=n.default;globalThis.Node,globalThis.Comment,globalThis.Element,globalThis.Text,globalThis.Range,globalThis.Selection,globalThis.StaticRange;function g(e){"@babel/helpers - typeof";return g=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},g(e)}function _(e,t){if(g(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(g(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function v(e){var t=_(e,`string`);return g(t)==`symbol`?t:t+``}function y(e,t,n){return(t=v(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function b(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function x(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?b(Object(n),!0).forEach(function(t){y(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):b(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function S(e,t,n,r,i,a,o){try{var s=e[a](o),c=s.value}catch(e){n(e);return}s.done?t(c):Promise.resolve(c).then(r,i)}function C(e){return function(){var t=this,n=arguments;return new Promise(function(r,i){var a=e.apply(t,n);function o(e){S(a,r,i,o,s,`next`,e)}function s(e){S(a,r,i,o,s,`throw`,e)}o(void 0)})}}function w(e){var t,n,r,i=2;for(typeof Symbol<`u`&&(n=Symbol.asyncIterator,r=Symbol.iterator);i--;){if(n&&(t=e[n])!=null)return t.call(e);if(r&&(t=e[r])!=null)return new T(t.call(e));n=`@@asyncIterator`,r=`@@iterator`}throw TypeError(`Object is not async iterable`)}function T(e){function t(e){if(Object(e)!==e)return Promise.reject(TypeError(e+` is not an object.`));var t=e.done;return Promise.resolve(e.value).then(function(e){return{value:e,done:t}})}return T=function(e){this.s=e,this.n=e.next},T.prototype={s:null,n:null,next:function(){return t(this.n.apply(this.s,arguments))},return:function(e){var n=this.s.return;return n===void 0?Promise.resolve({value:e,done:!0}):t(n.apply(this.s,arguments))},throw:function(e){var n=this.s.return;return n===void 0?Promise.reject(e):t(n.apply(this.s,arguments))}},new T(e)}function E(e){let t=p(),n=e.getMenuConfig(`uploadAttachment`);return x(x({},t),n||{})}function D(e,t,n){if(!t||!n)return;e.restoreSelection();let r={type:`attachment`,fileName:t,link:n,children:[{text:``}]};e.insertNode(r),e.move(1);let{onInsertedAttachment:i}=E(e);i&&i(r)}let O=new WeakMap;function k(e){let n=O.get(e);if(n!=null)return n;let r=E(e),{customInsert:i,onError:a,onFailed:o,onProgress:s,onSuccess:c}=r;return n=(0,t.createUploader)(x(x({},r),{},{onProgress:t=>{e.showProgressBar(t),s&&s(t)},onSuccess:(t,n)=>{if(i){i(n,t,(t,n)=>D(e,t,n)),c(t,n);return}let{errno:r=1,data:a={}}=n||{};if(r!==0){o(t,n);return}let{url:s=``}=a;D(e,(t==null?void 0:t.name)||``,s),c(t,n)},onError:(e,t,n)=>{a(e,t,n)}}),e),O.set(e,n),n}function A(e,t){return j.apply(this,arguments)}function j(){return j=C(function*(e,t){let n=k(e),r=t.map(e=>({name:e.name,type:e.type,size:e.size,data:e}));n.addFiles(r),yield n.upload()}),j.apply(this,arguments)}function M(e,t){return N.apply(this,arguments)}function N(){return N=C(function*(e,t){if(t==null)return;let n=Array.prototype.slice.call(t),{customUpload:r}=E(e),i=[];var a=!1,o=!1,s;try{for(var c=w(n),l;a=!(l=yield c.next()).done;a=!1){let t=l.value;r?yield r(t,(t,n)=>D(e,t,n),e):i.push(t)}}catch(e){o=!0,s=e}finally{try{a&&c.return!=null&&(yield c.return())}finally{if(o)throw s}}i.length>0&&(yield A(e,i))}),N.apply(this,arguments)}var P=class{constructor(){this.title=(0,t.t)(`attachment.upload`),this.iconSvg=`<svg viewBox="0 0 1024 1024"><path d="M665.821116 327.053068l-64.958782-64.926783-324.79391 324.729911c-53.822991 53.790991-53.822991 141.053355 0 194.844347s141.053355 53.790991 194.876346 0l389.752692-389.688693a229.531696 229.531696 0 0 0 0-324.729912 229.627694 229.627694 0 0 0-324.761911 0L126.727224 476.458266l-0.863984 0.831985c-125.085655 125.085655-125.085655 327.833853 0 452.887508 125.053655 125.053655 327.865853 125.053655 452.983507 0l0.831984-0.863984 0.031999 0.032 279.322763-279.290764-64.990781-64.926782-279.322763 279.258764-0.831984 0.831984a228.731711 228.731711 0 0 1-323.065943 0 228.603714 228.603714 0 0 1 0-322.969944l0.895983-0.831985-0.031999-0.063998L600.958332 132.208721c53.694993-53.726993 141.149353-53.726993 194.876346 0s53.694993 141.149353 0 194.844347L406.081986 716.741761c-17.919664 17.919664-47.039118 17.919664-64.958782 0a45.983138 45.983138 0 0 1 0-64.926783L665.917114 327.053068z"></path></svg>`,this.tag=`button`}getValue(e){return``}isActive(e){return!1}exec(e,t){let{allowedFileTypes:n=[],customBrowseAndUpload:r}=this.getMenuConfig(e);if(r){r((t,n)=>D(e,t,n));return}let i=``;n.length>0&&(i=`accept="${n.join(`, `)}"`);let a=h(`body`),o=h(`<input type="file" ${i} multiple/>`);o.hide(),a.append(o),o.click(),o.on(`change`,()=>{let t=o[0].files;M(e,t)})}isDisabled(e){let{selection:n}=e;if(n==null||t.SlateRange.isExpanded(n))return!0;let r=t.DomEditor.getSelectedElems(e);return!!(r.some(t=>e.isVoid(t))||r.some(e=>t.DomEditor.getNodeType(e)===`pre`))}getMenuConfig(e){return e.getMenuConfig(`uploadAttachment`)}};let F={key:`uploadAttachment`,factory(){return new P},config:p()},I={key:`downloadAttachment`,factory(){return new m}};function L(e,t,n){return{type:`attachment`,link:e.getAttribute(`href`)||``,fileName:e.getAttribute(`download`)||``,children:[{text:``}]}}var R={selector:`a[data-w-e-type="attachment"]`,parseElemHtml:L};function z(e){let{isInline:n,isVoid:r}=e,i=e;return i.isInline=e=>t.DomEditor.getNodeType(e)===`attachment`?!0:n(e),i.isVoid=e=>t.DomEditor.getNodeType(e)===`attachment`?!0:r(e),i}var B=z;function V(e,n,i){let a=i.isDisabled(),o=t.DomEditor.isNodeSelected(i,e),{fileName:s=``,link:c=``}=e;return(0,r.h)(`span`,{props:{contentEditable:!1},style:{display:`inline-block`,marginLeft:`3px`,marginRight:`3px`,border:o&&!a?`2px solid var(--w-e-textarea-selected-border-color)`:`2px solid transparent`,borderRadius:`3px`,padding:`0 3px`,backgroundColor:`var(--w-e-textarea-slight-bg-color)`,cursor:a?`pointer`:`inherit`},on:{click(){a&&c&&window.open(c,`_blank`)}}},[(0,r.h)(`span`,{style:{marginRight:`0.2em`,opacity:`0.7`}},`file`),s])}e.default={editorPlugin:B,renderElems:[{type:`attachment`,renderElem:V}],elemsToHtml:[f],parseElemsHtml:[R],menus:[F,I]},e.genUploadAttachmentMenuConfig=p});
2
+ //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/module/local.ts","../src/module/elem-to-html.ts","../src/module/menu/config.ts","../src/constants/icon-svg.ts","../src/module/menu/DownloadAttachment.ts","../src/utils/dom.ts","../src/module/menu/helper.ts","../src/module/menu/UploadAttachment.ts","../src/module/render-elem.ts","../src/module/index.ts","../src/module/plugin.ts","../src/module/parse-elem-html.ts","../src/module/menu/index.ts"],"sourcesContent":["/**\n * @description 多语言\n * @author wangfupeng\n */\n\nimport { i18nAddResources } from '@wangeditor-next/editor'\n\ni18nAddResources('en', {\n attachment: {\n upload: 'Upload Attachment',\n download: 'Download Attachment',\n },\n})\n\ni18nAddResources('zh-CN', {\n attachment: {\n upload: '上传附件',\n download: '下载附件',\n },\n})\n","/**\n * @description elem to html\n * @author wangfupeng\n */\n\nimport { SlateElement } from '@wangeditor-next/editor'\n\nimport { AttachmentElement } from './custom-types'\n\n// 生成 html 的函数\nfunction attachmentToHtml(elem: SlateElement, _childrenHtml: string): string {\n const { link = '', fileName = '' } = elem as AttachmentElement\n\n return `<a data-w-e-type=\"attachment\" data-w-e-is-void data-w-e-is-inline href=\"${link}\" download=\"${fileName}\">${fileName}</a>`\n}\n\n// 配置\nconst conf = {\n type: 'attachment', // 节点 type ,重要!!!\n elemToHtml: attachmentToHtml,\n}\n\nexport default conf\n","/**\n * @description menu config\n * @author wangfupeng\n */\n\nimport { IDomEditor, IUploadConfig } from '@wangeditor-next/editor'\n\nimport { AttachmentElement } from '../custom-types'\n\ntype InsertFn = (fileName: string, link: string) => void\n\n// 在通用 uploadConfig 上,扩展 attachment 相关配置\nexport type IUploadConfigForAttachment = Omit<\n IUploadConfig,\n 'customInsert' | 'customUpload' | 'customBrowseAndUpload'\n> & {\n // 用户自定义插入附件\n customInsert?: (res: any, file: any, insertFn: InsertFn) => void\n // 用户自定义上传附件\n customUpload?: (file: File, insertFn: InsertFn, editor: IDomEditor) => void | Promise<void>\n // 自定义选择附件,如图床\n customBrowseAndUpload?: (insertFn: InsertFn) => void\n // 插入之后的回调\n onInsertedAttachment?: (elem: AttachmentElement) => void\n}\n\nexport function genUploadAttachmentMenuConfig(): IUploadConfigForAttachment {\n return {\n server: '',\n fieldName: 'wangeditor-uploaded-attachment',\n maxFileSize: 10 * 1024 * 1024,\n maxNumberOfFiles: 5,\n allowedFileTypes: ['*'],\n meta: {},\n metaWithUrl: false,\n withCredentials: false,\n timeout: 30 * 1000,\n\n onBeforeUpload: (files: any) => files,\n onProgress: (_progress: number) => {\n /* on progress */\n },\n onSuccess: (_file: any, _res: any) => {\n /* on success */\n },\n onFailed: (_file: any, _res: any) => {\n /* on failed */\n },\n onError: (_file: any, _err: any, _res: any) => {\n /* on error */\n /* on timeout */\n },\n\n onInsertedAttachment(_elem: AttachmentElement) {\n // 插入文件之后的 callback\n },\n }\n}\n","/**\n * @description icon svg\n * @author wangfupeng\n */\n\n// 附件\nexport const ATTACHMENT_SVG = '<svg viewBox=\"0 0 1024 1024\"><path d=\"M665.821116 327.053068l-64.958782-64.926783-324.79391 324.729911c-53.822991 53.790991-53.822991 141.053355 0 194.844347s141.053355 53.790991 194.876346 0l389.752692-389.688693a229.531696 229.531696 0 0 0 0-324.729912 229.627694 229.627694 0 0 0-324.761911 0L126.727224 476.458266l-0.863984 0.831985c-125.085655 125.085655-125.085655 327.833853 0 452.887508 125.053655 125.053655 327.865853 125.053655 452.983507 0l0.831984-0.863984 0.031999 0.032 279.322763-279.290764-64.990781-64.926782-279.322763 279.258764-0.831984 0.831984a228.731711 228.731711 0 0 1-323.065943 0 228.603714 228.603714 0 0 1 0-322.969944l0.895983-0.831985-0.031999-0.063998L600.958332 132.208721c53.694993-53.726993 141.149353-53.726993 194.876346 0s53.694993 141.149353 0 194.844347L406.081986 716.741761c-17.919664 17.919664-47.039118 17.919664-64.958782 0a45.983138 45.983138 0 0 1 0-64.926783L665.917114 327.053068z\"></path></svg>'\n\n// 下载\nexport const DOWNLOAD_SVG = '<svg viewBox=\"0 0 1024 1024\"><path d=\"M736 448l-256 256-256-256h160V64h192v384z m-256 256H0v256h960v-256H480z m416 128h-128v-64h128v64z\"></path></svg>'\n","/**\n * @description download attachment menu\n * @author wangfupeng\n */\n\nimport {\n DomEditor,\n IButtonMenu,\n IDomEditor,\n SlateRange,\n t,\n} from '@wangeditor-next/editor'\n\nimport { DOWNLOAD_SVG } from '../../constants/icon-svg'\nimport { AttachmentElement } from '../custom-types'\n\nclass DownloadAttachmentMenu implements IButtonMenu {\n readonly title = t('attachment.download')\n\n readonly iconSvg = DOWNLOAD_SVG\n\n readonly tag = 'button'\n\n readonly alwaysEnable = true\n\n getValue(editor: IDomEditor): string | boolean {\n const attachmentElem = this.getSelectedElem(editor)\n\n if (attachmentElem == null) { return '' }\n return attachmentElem.link\n }\n\n isActive(_editor: IDomEditor): boolean {\n // 任何时候,都不用激活 menu\n return false\n }\n\n exec(_editor: IDomEditor, value: string | boolean) {\n if (!value) { return }\n if (typeof value !== 'string') { return }\n window.open(value, '_blank')\n }\n\n isDisabled(editor: IDomEditor): boolean {\n const { selection } = editor\n\n if (selection == null) { return true }\n if (SlateRange.isExpanded(selection)) { return true }\n\n // 未匹配到 attachment node 则禁用\n const attachmentElem = this.getSelectedElem(editor)\n\n if (attachmentElem == null) { return true }\n\n return false\n }\n\n private getSelectedElem(editor: IDomEditor): AttachmentElement | null {\n const node = DomEditor.getSelectedNodeByType(editor, 'attachment')\n\n if (node == null) { return null }\n return node as AttachmentElement\n }\n}\n\nexport default DownloadAttachmentMenu\n","/**\n * @description DOM 操作\n * @author wangfupeng\n */\n\nimport $, {\n append, click, hide, on,\n} from 'dom7'\n\nif (hide) { $.fn.hide = hide }\nif (append) { $.fn.append = append }\nif (click) { $.fn.click = click }\nif (on) { $.fn.on = on }\n\nexport type { Dom7Array } from 'dom7'\nexport default $\n\n// COMPAT: This is required to prevent TypeScript aliases from doing some very\n// weird things for Slate's types with the same name as globals. (2019/11/27)\n// https://github.com/microsoft/TypeScript/issues/35002\nimport DOMNode = globalThis.Node\nimport DOMComment = globalThis.Comment\nimport DOMElement = globalThis.Element\nimport DOMText = globalThis.Text\nimport DOMRange = globalThis.Range\nimport DOMSelection = globalThis.Selection\nimport DOMStaticRange = globalThis.StaticRange\n\nexport {\n DOMComment,\n DOMElement,\n DOMNode,\n DOMRange,\n DOMSelection,\n DOMStaticRange,\n DOMText,\n}\n","/**\n * @description helper fns\n * @author wangfupeng\n */\n\nimport { createUploader, IDomEditor } from '@wangeditor-next/editor'\n\nimport { AttachmentElement } from '../custom-types'\nimport {\n genUploadAttachmentMenuConfig,\n IUploadConfigForAttachment,\n} from './config'\n\nfunction getUploadAttachmentMenuConfig(editor: IDomEditor): IUploadConfigForAttachment {\n const defaultConfig = genUploadAttachmentMenuConfig()\n const menuConfig = editor.getMenuConfig('uploadAttachment') as Partial<IUploadConfigForAttachment>\n\n return {\n ...defaultConfig,\n ...(menuConfig || {}),\n }\n}\n\n/**\n * 插入 attachment 节点\n * @param fileName fileName\n * @param link link\n */\nexport function insertAttachment(editor: IDomEditor, fileName: string, link: string) {\n if (!fileName || !link) { return }\n\n // 还原选区\n editor.restoreSelection()\n\n // 插入节点\n const attachmentElem: AttachmentElement = {\n type: 'attachment',\n fileName,\n link,\n children: [{ text: '' }],\n }\n\n editor.insertNode(attachmentElem)\n editor.move(1)\n\n // 回调\n const { onInsertedAttachment } = getUploadAttachmentMenuConfig(editor)\n\n if (onInsertedAttachment) { onInsertedAttachment(attachmentElem) }\n}\n\n// 存储 editor uploader 的关系 - 缓存 uploader ,不重复创建\nconst EDITOR_TO_UPLOADER_MAP = new WeakMap<IDomEditor, any>()\n\n/**\n * 获取 uploader 实例(并通过 editor 缓存)\n * @param editor editor\n */\nfunction getUploader(editor: IDomEditor) {\n let uploader = EDITOR_TO_UPLOADER_MAP.get(editor)\n\n if (uploader != null) { return uploader }\n\n const menuConfig = getUploadAttachmentMenuConfig(editor)\n const {\n customInsert,\n onError,\n onFailed,\n onProgress,\n onSuccess,\n } = menuConfig\n\n // 上传完成之后\n const successHandler = (file: any, res: any) => {\n // 预期 res 格式:\n // 成功:{ errno: 0, data: { url } }\n // 失败:{ errno: !0, message: '失败信息' }\n if (customInsert) {\n customInsert(res, file, (fileName: string, link: string) => insertAttachment(editor, fileName, link))\n onSuccess(file, res)\n return\n }\n\n const { errno = 1, data = {} } = res || {}\n\n if (errno !== 0) {\n onFailed(file, res)\n return\n }\n\n const { url = '' } = data as { url?: string }\n\n insertAttachment(editor, file?.name || '', url)\n onSuccess(file, res)\n }\n\n // progress 显示进度条\n const progressHandler = (progress: number) => {\n editor.showProgressBar(progress)\n\n if (onProgress) { onProgress(progress) }\n }\n\n // onError 提示错误\n const errorHandler = (file: any, err: any, res: any) => {\n onError(file, err, res)\n }\n\n uploader = createUploader(\n {\n ...menuConfig,\n onProgress: progressHandler,\n onSuccess: successHandler,\n onError: errorHandler,\n } as any,\n editor,\n )\n\n EDITOR_TO_UPLOADER_MAP.set(editor, uploader)\n\n return uploader\n}\n\n/**\n * 上传文件\n * @param editor editor\n * @param files files\n */\nasync function uploadFile(editor: IDomEditor, files: File[]) {\n const uploader = getUploader(editor)\n const uploadList = files.map(file => ({\n name: file.name,\n type: file.type,\n size: file.size,\n data: file,\n }))\n\n uploader.addFiles(uploadList)\n await uploader.upload()\n}\n\n/**\n * 上传附件文件\n * @param editor editor\n * @param files files\n */\nexport async function uploadAttachments(\n editor: IDomEditor,\n files: FileList | File[] | null,\n) {\n if (files == null) { return }\n const fileList = Array.prototype.slice.call(files) as File[]\n\n // 获取菜单配置\n const { customUpload } = getUploadAttachmentMenuConfig(editor)\n const uploadFileList: File[] = []\n\n // 按顺序上传\n for await (const file of fileList) {\n if (customUpload) {\n // 自定义上传\n await customUpload(\n file,\n (fileName: string, link: string) => insertAttachment(editor, fileName, link),\n editor,\n )\n } else {\n // 默认上传\n uploadFileList.push(file)\n }\n }\n\n if (uploadFileList.length > 0) {\n await uploadFile(editor, uploadFileList)\n }\n}\n","/**\n * @description upload attachment menu\n * @author wangfupeng\n */\n\nimport {\n DomEditor,\n IButtonMenu,\n IDomEditor,\n SlateRange,\n t,\n} from '@wangeditor-next/editor'\n\nimport { ATTACHMENT_SVG } from '../../constants/icon-svg'\nimport $ from '../../utils/dom'\nimport { IUploadConfigForAttachment } from './config'\nimport { insertAttachment, uploadAttachments } from './helper'\n\nclass UploadAttachmentMenu implements IButtonMenu {\n readonly title = t('attachment.upload')\n\n readonly iconSvg = ATTACHMENT_SVG\n\n readonly tag = 'button'\n\n getValue(_editor: IDomEditor): string | boolean {\n // 无需获取 val\n return ''\n }\n\n isActive(_editor: IDomEditor): boolean {\n // 任何时候,都不用激活 menu\n return false\n }\n\n exec(editor: IDomEditor, _value: string | boolean) {\n const {\n allowedFileTypes = [],\n customBrowseAndUpload,\n } = this.getMenuConfig(editor)\n\n // 自定义选择文件、并上传,如图床\n if (customBrowseAndUpload) {\n customBrowseAndUpload((fileName: string, link: string) => insertAttachment(editor, fileName, link))\n return\n }\n\n // 设置选择文件的类型\n let acceptAttr = ''\n\n if (allowedFileTypes.length > 0) {\n acceptAttr = `accept=\"${allowedFileTypes.join(', ')}\"`\n }\n\n // 添加 file input(每次重新创建 input)\n const $body = $('body')\n const $inputFile = $(`<input type=\"file\" ${acceptAttr} multiple/>`)\n\n $inputFile.hide()\n $body.append($inputFile)\n $inputFile.click()\n // 选中文件\n $inputFile.on('change', () => {\n const files = ($inputFile[0] as HTMLInputElement).files\n\n uploadAttachments(editor, files)\n })\n }\n\n isDisabled(editor: IDomEditor): boolean {\n const { selection } = editor\n\n if (selection == null) { return true }\n if (SlateRange.isExpanded(selection)) { return true }\n\n const selectedElems = DomEditor.getSelectedElems(editor)\n const hasVoidElem = selectedElems.some(elem => editor.isVoid(elem))\n\n if (hasVoidElem) { return true }\n\n const hasPreElem = selectedElems.some(elem => DomEditor.getNodeType(elem) === 'pre')\n\n if (hasPreElem) { return true }\n\n return false\n }\n\n private getMenuConfig(editor: IDomEditor): IUploadConfigForAttachment {\n return editor.getMenuConfig('uploadAttachment') as IUploadConfigForAttachment\n }\n}\n\nexport default UploadAttachmentMenu\n","/**\n * @description render elem\n * @author wangfupeng\n */\n\nimport { DomEditor, IDomEditor, SlateElement } from '@wangeditor-next/editor'\nimport { h, VNode } from 'snabbdom'\n\nimport { AttachmentElement } from './custom-types'\n\nfunction renderAttachment(elem: SlateElement, _children: VNode[] | null, editor: IDomEditor): VNode {\n const isDisabled = editor.isDisabled()\n const selected = DomEditor.isNodeSelected(editor, elem)\n const { fileName = '', link = '' } = elem as AttachmentElement\n\n const vnode = h(\n 'span',\n {\n props: {\n contentEditable: false,\n },\n style: {\n display: 'inline-block',\n marginLeft: '3px',\n marginRight: '3px',\n border: selected && !isDisabled\n ? '2px solid var(--w-e-textarea-selected-border-color)'\n : '2px solid transparent',\n borderRadius: '3px',\n padding: '0 3px',\n backgroundColor: 'var(--w-e-textarea-slight-bg-color)',\n cursor: isDisabled ? 'pointer' : 'inherit',\n },\n on: {\n // disable 时,点击下载附件\n click() {\n if (!isDisabled) { return }\n if (link) {\n window.open(link, '_blank')\n }\n },\n },\n },\n [\n h('span', {\n style: {\n marginRight: '0.2em',\n opacity: '0.7',\n },\n }, 'file'),\n fileName,\n ],\n )\n\n return vnode\n}\n\nconst conf = {\n type: 'attachment',\n renderElem: renderAttachment,\n}\n\nexport default conf\n","/**\n * @description attachment module entry\n * @author wangfupeng\n */\n\nimport './local'\n\nimport { IModuleConf } from '@wangeditor-next/editor'\n\nimport elemToHtmlConf from './elem-to-html'\nimport {\n downloadAttachmentMenuConf,\n uploadAttachmentMenuConf,\n} from './menu/index'\nimport parseHtmlConf from './parse-elem-html'\nimport withAttachment from './plugin'\nimport renderElemConf from './render-elem'\n\nconst module: Partial<IModuleConf> = {\n editorPlugin: withAttachment,\n renderElems: [renderElemConf],\n elemsToHtml: [elemToHtmlConf],\n parseElemsHtml: [parseHtmlConf],\n menus: [uploadAttachmentMenuConf, downloadAttachmentMenuConf],\n}\n\nexport default module\n","/**\n * @description attachment plugin\n * @author wangfupeng\n */\n\nimport { DomEditor, IDomEditor } from '@wangeditor-next/editor'\n\nfunction withAttachment<T extends IDomEditor>(editor: T) {\n const { isInline, isVoid } = editor\n const newEditor = editor\n\n // 重写 isInline\n newEditor.isInline = elem => {\n const type = DomEditor.getNodeType(elem)\n\n if (type === 'attachment') {\n return true\n }\n\n return isInline(elem)\n }\n\n // 重写 isVoid\n newEditor.isVoid = elem => {\n const type = DomEditor.getNodeType(elem)\n\n if (type === 'attachment') {\n return true\n }\n\n return isVoid(elem)\n }\n\n return newEditor\n}\n\nexport default withAttachment\n","/**\n * @description parse elem html\n * @author wangfupeng\n */\n\nimport { IDomEditor, SlateDescendant, SlateElement } from '@wangeditor-next/editor'\n\nimport { DOMElement } from '../utils/dom'\nimport { AttachmentElement } from './custom-types'\n\nfunction parseHtml(\n elem: DOMElement,\n _children: SlateDescendant[],\n _editor: IDomEditor,\n): SlateElement {\n const link = elem.getAttribute('href') || ''\n const fileName = elem.getAttribute('download') || ''\n\n return {\n type: 'attachment',\n link,\n fileName,\n children: [{ text: '' }], // void node 必须有一个空白 text\n } as AttachmentElement\n}\n\nconst parseHtmlConf = {\n selector: 'a[data-w-e-type=\"attachment\"]',\n parseElemHtml: parseHtml,\n}\n\nexport default parseHtmlConf\n","/**\n * @description menu entry\n * @author wangfupeng\n */\n\nimport { genUploadAttachmentMenuConfig } from './config'\nimport DownloadAttachmentMenu from './DownloadAttachment'\nimport UploadAttachmentMenu from './UploadAttachment'\n\nexport const uploadAttachmentMenuConf = {\n key: 'uploadAttachment',\n factory() {\n return new UploadAttachmentMenu()\n },\n\n // 默认菜单配置,将存储在 editorConfig.MENU_CONF[key] 中\n // 创建编辑器时,可通过 editorConfig.MENU_CONF[key] = {...} 来修改\n config: genUploadAttachmentMenuConfig(),\n}\n\nexport const downloadAttachmentMenuConf = {\n key: 'downloadAttachment',\n factory() {\n return new DownloadAttachmentMenu()\n },\n}\n"],"names":["i18nAddResources","attachment","upload","download","conf","type","elemToHtml","elem","_childrenHtml","_a","_b","link","_c","fileName","concat","genUploadAttachmentMenuConfig","server","fieldName","maxFileSize","maxNumberOfFiles","allowedFileTypes","meta","metaWithUrl","withCredentials","timeout","onBeforeUpload","files","onProgress","_progress","onSuccess","_file","_res","onFailed","onError","_err","onInsertedAttachment","_elem","DownloadAttachmentMenu","this","title","t","iconSvg","tag","alwaysEnable","prototype","getValue","editor","attachmentElem","getSelectedElem","isActive","_editor","exec","value","window","open","isDisabled","selection","SlateRange","isExpanded","node","DomEditor","getSelectedNodeByType","hide","$","fn","append","click","on","getUploadAttachmentMenuConfig","defaultConfig","menuConfig","getMenuConfig","__assign","insertAttachment","restoreSelection","children","text","insertNode","move","EDITOR_TO_UPLOADER_MAP","WeakMap","getUploader","uploader","get","customInsert","createUploader","progress","showProgressBar","file","res","errno","data","_d","url","name","err","set","uploadFile","uploadList","map","size","addFiles","sent","UploadAttachmentMenu","_value","customBrowseAndUpload","acceptAttr","length","join","$body","$inputFile","fileList","Array","slice","call","customUpload","uploadFileList","fileList_1","__asyncValues","fileList_1_1","_e","push","uploadAttachments","selectedElems","getSelectedElems","some","isVoid","getNodeType","module","editorPlugin","isInline","newEditor","renderElems","renderElem","_children","selected","isNodeSelected","h","props","contentEditable","style","display","marginLeft","marginRight","border","borderRadius","padding","backgroundColor","cursor","opacity","elemsToHtml","elemToHtmlConf","parseElemsHtml","selector","parseElemHtml","getAttribute","menus","key","factory","config"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["i18nAddResources","attachment","upload","download","attachmentToHtml","elem","_childrenHtml","link","fileName","conf","type","elemToHtml","genUploadAttachmentMenuConfig","server","fieldName","maxFileSize","maxNumberOfFiles","allowedFileTypes","meta","metaWithUrl","withCredentials","timeout","onBeforeUpload","files","onProgress","_progress","onSuccess","_file","_res","onFailed","onError","_err","onInsertedAttachment","_elem","ATTACHMENT_SVG","DOWNLOAD_SVG","DomEditor","SlateRange","t","DOWNLOAD_SVG","DownloadAttachmentMenu","title","iconSvg","tag","alwaysEnable","getValue","editor","attachmentElem","getSelectedElem","link","isActive","_editor","exec","value","window","open","isDisabled","selection","isExpanded","node","getSelectedNodeByType","$","append","click","hide","on","fn","DOMNode","globalThis","Node","DOMComment","Comment","DOMElement","Element","DOMText","Text","DOMRange","Range","DOMSelection","Selection","DOMStaticRange","StaticRange","createUploader","genUploadAttachmentMenuConfig","getUploadAttachmentMenuConfig","editor","defaultConfig","menuConfig","getMenuConfig","insertAttachment","fileName","link","restoreSelection","attachmentElem","type","children","text","insertNode","move","onInsertedAttachment","EDITOR_TO_UPLOADER_MAP","WeakMap","getUploader","uploader","get","customInsert","onError","onFailed","onProgress","onSuccess","successHandler","file","res","errno","data","url","name","progressHandler","progress","showProgressBar","errorHandler","err","set","uploadFile","files","uploadList","map","size","addFiles","upload","uploadAttachments","fileList","Array","prototype","slice","call","customUpload","uploadFileList","push","length","DomEditor","SlateRange","t","ATTACHMENT_SVG","$","insertAttachment","uploadAttachments","UploadAttachmentMenu","title","iconSvg","tag","getValue","_editor","isActive","exec","editor","_value","allowedFileTypes","customBrowseAndUpload","getMenuConfig","fileName","link","acceptAttr","length","join","$body","$inputFile","hide","append","click","on","files","isDisabled","selection","isExpanded","selectedElems","getSelectedElems","hasVoidElem","some","elem","isVoid","hasPreElem","getNodeType","genUploadAttachmentMenuConfig","DownloadAttachmentMenu","UploadAttachmentMenu","uploadAttachmentMenuConf","key","factory","config","downloadAttachmentMenuConf","parseHtml","elem","_children","_editor","link","getAttribute","fileName","type","children","text","parseHtmlConf","selector","parseElemHtml","DomEditor","withAttachment","editor","isInline","isVoid","newEditor","elem","type","getNodeType","DomEditor","h","renderAttachment","elem","_children","editor","isDisabled","selected","isNodeSelected","fileName","link","vnode","props","contentEditable","style","display","marginLeft","marginRight","border","borderRadius","padding","backgroundColor","cursor","on","click","window","open","opacity","conf","type","renderElem","elemToHtmlConf","downloadAttachmentMenuConf","uploadAttachmentMenuConf","parseHtmlConf","withAttachment","renderElemConf","module","editorPlugin","renderElems","elemsToHtml","parseElemsHtml","menus","module"],"sources":["../src/module/local.ts","../src/module/elem-to-html.ts","../src/module/menu/config.ts","../src/constants/icon-svg.ts","../src/module/menu/DownloadAttachment.ts","../src/utils/dom.ts","../src/module/menu/helper.ts","../src/module/menu/UploadAttachment.ts","../src/module/menu/index.ts","../src/module/parse-elem-html.ts","../src/module/plugin.ts","../src/module/render-elem.ts","../src/module/index.ts","../src/index.ts"],"sourcesContent":["/**\n * @description 多语言\n * @author wangfupeng\n */\n\nimport { i18nAddResources } from '@wangeditor-next/editor'\n\ni18nAddResources('en', {\n attachment: {\n upload: 'Upload Attachment',\n download: 'Download Attachment',\n },\n})\n\ni18nAddResources('zh-CN', {\n attachment: {\n upload: '上传附件',\n download: '下载附件',\n },\n})\n","/**\n * @description elem to html\n * @author wangfupeng\n */\n\nimport { SlateElement } from '@wangeditor-next/editor'\n\nimport { AttachmentElement } from './custom-types'\n\n// 生成 html 的函数\nfunction attachmentToHtml(elem: SlateElement, _childrenHtml: string): string {\n const { link = '', fileName = '' } = elem as AttachmentElement\n\n return `<a data-w-e-type=\"attachment\" data-w-e-is-void data-w-e-is-inline href=\"${link}\" download=\"${fileName}\">${fileName}</a>`\n}\n\n// 配置\nconst conf = {\n type: 'attachment', // 节点 type ,重要!!!\n elemToHtml: attachmentToHtml,\n}\n\nexport default conf\n","/**\n * @description menu config\n * @author wangfupeng\n */\n\nimport { IDomEditor, IUploadConfig } from '@wangeditor-next/editor'\n\nimport { AttachmentElement } from '../custom-types'\n\ntype InsertFn = (fileName: string, link: string) => void\n\n// 在通用 uploadConfig 上,扩展 attachment 相关配置\nexport type IUploadConfigForAttachment = Omit<\n IUploadConfig,\n 'customInsert' | 'customUpload' | 'customBrowseAndUpload'\n> & {\n // 用户自定义插入附件\n customInsert?: (res: any, file: any, insertFn: InsertFn) => void\n // 用户自定义上传附件\n customUpload?: (file: File, insertFn: InsertFn, editor: IDomEditor) => void | Promise<void>\n // 自定义选择附件,如图床\n customBrowseAndUpload?: (insertFn: InsertFn) => void\n // 插入之后的回调\n onInsertedAttachment?: (elem: AttachmentElement) => void\n}\n\nexport function genUploadAttachmentMenuConfig(): IUploadConfigForAttachment {\n return {\n server: '',\n fieldName: 'wangeditor-uploaded-attachment',\n maxFileSize: 10 * 1024 * 1024,\n maxNumberOfFiles: 5,\n allowedFileTypes: ['*'],\n meta: {},\n metaWithUrl: false,\n withCredentials: false,\n timeout: 30 * 1000,\n\n onBeforeUpload: (files: any) => files,\n onProgress: (_progress: number) => {\n /* on progress */\n },\n onSuccess: (_file: any, _res: any) => {\n /* on success */\n },\n onFailed: (_file: any, _res: any) => {\n /* on failed */\n },\n onError: (_file: any, _err: any, _res: any) => {\n /* on error */\n /* on timeout */\n },\n\n onInsertedAttachment(_elem: AttachmentElement) {\n // 插入文件之后的 callback\n },\n }\n}\n","/**\n * @description icon svg\n * @author wangfupeng\n */\n\n// 附件\nexport const ATTACHMENT_SVG = '<svg viewBox=\"0 0 1024 1024\"><path d=\"M665.821116 327.053068l-64.958782-64.926783-324.79391 324.729911c-53.822991 53.790991-53.822991 141.053355 0 194.844347s141.053355 53.790991 194.876346 0l389.752692-389.688693a229.531696 229.531696 0 0 0 0-324.729912 229.627694 229.627694 0 0 0-324.761911 0L126.727224 476.458266l-0.863984 0.831985c-125.085655 125.085655-125.085655 327.833853 0 452.887508 125.053655 125.053655 327.865853 125.053655 452.983507 0l0.831984-0.863984 0.031999 0.032 279.322763-279.290764-64.990781-64.926782-279.322763 279.258764-0.831984 0.831984a228.731711 228.731711 0 0 1-323.065943 0 228.603714 228.603714 0 0 1 0-322.969944l0.895983-0.831985-0.031999-0.063998L600.958332 132.208721c53.694993-53.726993 141.149353-53.726993 194.876346 0s53.694993 141.149353 0 194.844347L406.081986 716.741761c-17.919664 17.919664-47.039118 17.919664-64.958782 0a45.983138 45.983138 0 0 1 0-64.926783L665.917114 327.053068z\"></path></svg>'\n\n// 下载\nexport const DOWNLOAD_SVG = '<svg viewBox=\"0 0 1024 1024\"><path d=\"M736 448l-256 256-256-256h160V64h192v384z m-256 256H0v256h960v-256H480z m416 128h-128v-64h128v64z\"></path></svg>'\n","/**\n * @description download attachment menu\n * @author wangfupeng\n */\n\nimport {\n DomEditor,\n IButtonMenu,\n IDomEditor,\n SlateRange,\n t,\n} from '@wangeditor-next/editor'\n\nimport { DOWNLOAD_SVG } from '../../constants/icon-svg'\nimport { AttachmentElement } from '../custom-types'\n\nclass DownloadAttachmentMenu implements IButtonMenu {\n readonly title = t('attachment.download')\n\n readonly iconSvg = DOWNLOAD_SVG\n\n readonly tag = 'button'\n\n readonly alwaysEnable = true\n\n getValue(editor: IDomEditor): string | boolean {\n const attachmentElem = this.getSelectedElem(editor)\n\n if (attachmentElem == null) { return '' }\n return attachmentElem.link\n }\n\n isActive(_editor: IDomEditor): boolean {\n // 任何时候,都不用激活 menu\n return false\n }\n\n exec(_editor: IDomEditor, value: string | boolean) {\n if (!value) { return }\n if (typeof value !== 'string') { return }\n window.open(value, '_blank')\n }\n\n isDisabled(editor: IDomEditor): boolean {\n const { selection } = editor\n\n if (selection == null) { return true }\n if (SlateRange.isExpanded(selection)) { return true }\n\n // 未匹配到 attachment node 则禁用\n const attachmentElem = this.getSelectedElem(editor)\n\n if (attachmentElem == null) { return true }\n\n return false\n }\n\n private getSelectedElem(editor: IDomEditor): AttachmentElement | null {\n const node = DomEditor.getSelectedNodeByType(editor, 'attachment')\n\n if (node == null) { return null }\n return node as AttachmentElement\n }\n}\n\nexport default DownloadAttachmentMenu\n","/**\n * @description DOM 操作\n * @author wangfupeng\n */\n\nimport $, {\n append, click, hide, on,\n} from 'dom7'\n\nif (hide) { $.fn.hide = hide }\nif (append) { $.fn.append = append }\nif (click) { $.fn.click = click }\nif (on) { $.fn.on = on }\n\nexport type { Dom7Array } from 'dom7'\nexport default $\n\n// COMPAT: This is required to prevent TypeScript aliases from doing some very\n// weird things for Slate's types with the same name as globals. (2019/11/27)\n// https://github.com/microsoft/TypeScript/issues/35002\nimport DOMNode = globalThis.Node\nimport DOMComment = globalThis.Comment\nimport DOMElement = globalThis.Element\nimport DOMText = globalThis.Text\nimport DOMRange = globalThis.Range\nimport DOMSelection = globalThis.Selection\nimport DOMStaticRange = globalThis.StaticRange\n\nexport {\n DOMComment,\n DOMElement,\n DOMNode,\n DOMRange,\n DOMSelection,\n DOMStaticRange,\n DOMText,\n}\n","/**\n * @description helper fns\n * @author wangfupeng\n */\n\nimport { createUploader, IDomEditor } from '@wangeditor-next/editor'\n\nimport { AttachmentElement } from '../custom-types'\nimport {\n genUploadAttachmentMenuConfig,\n IUploadConfigForAttachment,\n} from './config'\n\nfunction getUploadAttachmentMenuConfig(editor: IDomEditor): IUploadConfigForAttachment {\n const defaultConfig = genUploadAttachmentMenuConfig()\n const menuConfig = editor.getMenuConfig('uploadAttachment') as Partial<IUploadConfigForAttachment>\n\n return {\n ...defaultConfig,\n ...(menuConfig || {}),\n }\n}\n\n/**\n * 插入 attachment 节点\n * @param fileName fileName\n * @param link link\n */\nexport function insertAttachment(editor: IDomEditor, fileName: string, link: string) {\n if (!fileName || !link) { return }\n\n // 还原选区\n editor.restoreSelection()\n\n // 插入节点\n const attachmentElem: AttachmentElement = {\n type: 'attachment',\n fileName,\n link,\n children: [{ text: '' }],\n }\n\n editor.insertNode(attachmentElem)\n editor.move(1)\n\n // 回调\n const { onInsertedAttachment } = getUploadAttachmentMenuConfig(editor)\n\n if (onInsertedAttachment) { onInsertedAttachment(attachmentElem) }\n}\n\n// 存储 editor uploader 的关系 - 缓存 uploader ,不重复创建\nconst EDITOR_TO_UPLOADER_MAP = new WeakMap<IDomEditor, any>()\n\n/**\n * 获取 uploader 实例(并通过 editor 缓存)\n * @param editor editor\n */\nfunction getUploader(editor: IDomEditor) {\n let uploader = EDITOR_TO_UPLOADER_MAP.get(editor)\n\n if (uploader != null) { return uploader }\n\n const menuConfig = getUploadAttachmentMenuConfig(editor)\n const {\n customInsert,\n onError,\n onFailed,\n onProgress,\n onSuccess,\n } = menuConfig\n\n // 上传完成之后\n const successHandler = (file: any, res: any) => {\n // 预期 res 格式:\n // 成功:{ errno: 0, data: { url } }\n // 失败:{ errno: !0, message: '失败信息' }\n if (customInsert) {\n customInsert(res, file, (fileName: string, link: string) => insertAttachment(editor, fileName, link))\n onSuccess(file, res)\n return\n }\n\n const { errno = 1, data = {} } = res || {}\n\n if (errno !== 0) {\n onFailed(file, res)\n return\n }\n\n const { url = '' } = data as { url?: string }\n\n insertAttachment(editor, file?.name || '', url)\n onSuccess(file, res)\n }\n\n // progress 显示进度条\n const progressHandler = (progress: number) => {\n editor.showProgressBar(progress)\n\n if (onProgress) { onProgress(progress) }\n }\n\n // onError 提示错误\n const errorHandler = (file: any, err: any, res: any) => {\n onError(file, err, res)\n }\n\n uploader = createUploader(\n {\n ...menuConfig,\n onProgress: progressHandler,\n onSuccess: successHandler,\n onError: errorHandler,\n } as any,\n editor,\n )\n\n EDITOR_TO_UPLOADER_MAP.set(editor, uploader)\n\n return uploader\n}\n\n/**\n * 上传文件\n * @param editor editor\n * @param files files\n */\nasync function uploadFile(editor: IDomEditor, files: File[]) {\n const uploader = getUploader(editor)\n const uploadList = files.map(file => ({\n name: file.name,\n type: file.type,\n size: file.size,\n data: file,\n }))\n\n uploader.addFiles(uploadList)\n await uploader.upload()\n}\n\n/**\n * 上传附件文件\n * @param editor editor\n * @param files files\n */\nexport async function uploadAttachments(\n editor: IDomEditor,\n files: FileList | File[] | null,\n) {\n if (files == null) { return }\n const fileList = Array.prototype.slice.call(files) as File[]\n\n // 获取菜单配置\n const { customUpload } = getUploadAttachmentMenuConfig(editor)\n const uploadFileList: File[] = []\n\n // 按顺序上传\n for await (const file of fileList) {\n if (customUpload) {\n // 自定义上传\n await customUpload(\n file,\n (fileName: string, link: string) => insertAttachment(editor, fileName, link),\n editor,\n )\n } else {\n // 默认上传\n uploadFileList.push(file)\n }\n }\n\n if (uploadFileList.length > 0) {\n await uploadFile(editor, uploadFileList)\n }\n}\n","/**\n * @description upload attachment menu\n * @author wangfupeng\n */\n\nimport {\n DomEditor,\n IButtonMenu,\n IDomEditor,\n SlateRange,\n t,\n} from '@wangeditor-next/editor'\n\nimport { ATTACHMENT_SVG } from '../../constants/icon-svg'\nimport $ from '../../utils/dom'\nimport { IUploadConfigForAttachment } from './config'\nimport { insertAttachment, uploadAttachments } from './helper'\n\nclass UploadAttachmentMenu implements IButtonMenu {\n readonly title = t('attachment.upload')\n\n readonly iconSvg = ATTACHMENT_SVG\n\n readonly tag = 'button'\n\n getValue(_editor: IDomEditor): string | boolean {\n // 无需获取 val\n return ''\n }\n\n isActive(_editor: IDomEditor): boolean {\n // 任何时候,都不用激活 menu\n return false\n }\n\n exec(editor: IDomEditor, _value: string | boolean) {\n const {\n allowedFileTypes = [],\n customBrowseAndUpload,\n } = this.getMenuConfig(editor)\n\n // 自定义选择文件、并上传,如图床\n if (customBrowseAndUpload) {\n customBrowseAndUpload((fileName: string, link: string) => insertAttachment(editor, fileName, link))\n return\n }\n\n // 设置选择文件的类型\n let acceptAttr = ''\n\n if (allowedFileTypes.length > 0) {\n acceptAttr = `accept=\"${allowedFileTypes.join(', ')}\"`\n }\n\n // 添加 file input(每次重新创建 input)\n const $body = $('body')\n const $inputFile = $(`<input type=\"file\" ${acceptAttr} multiple/>`)\n\n $inputFile.hide()\n $body.append($inputFile)\n $inputFile.click()\n // 选中文件\n $inputFile.on('change', () => {\n const files = ($inputFile[0] as HTMLInputElement).files\n\n uploadAttachments(editor, files)\n })\n }\n\n isDisabled(editor: IDomEditor): boolean {\n const { selection } = editor\n\n if (selection == null) { return true }\n if (SlateRange.isExpanded(selection)) { return true }\n\n const selectedElems = DomEditor.getSelectedElems(editor)\n const hasVoidElem = selectedElems.some(elem => editor.isVoid(elem))\n\n if (hasVoidElem) { return true }\n\n const hasPreElem = selectedElems.some(elem => DomEditor.getNodeType(elem) === 'pre')\n\n if (hasPreElem) { return true }\n\n return false\n }\n\n private getMenuConfig(editor: IDomEditor): IUploadConfigForAttachment {\n return editor.getMenuConfig('uploadAttachment') as IUploadConfigForAttachment\n }\n}\n\nexport default UploadAttachmentMenu\n","/**\n * @description menu entry\n * @author wangfupeng\n */\n\nimport { genUploadAttachmentMenuConfig } from './config'\nimport DownloadAttachmentMenu from './DownloadAttachment'\nimport UploadAttachmentMenu from './UploadAttachment'\n\nexport const uploadAttachmentMenuConf = {\n key: 'uploadAttachment',\n factory() {\n return new UploadAttachmentMenu()\n },\n\n // 默认菜单配置,将存储在 editorConfig.MENU_CONF[key] 中\n // 创建编辑器时,可通过 editorConfig.MENU_CONF[key] = {...} 来修改\n config: genUploadAttachmentMenuConfig(),\n}\n\nexport const downloadAttachmentMenuConf = {\n key: 'downloadAttachment',\n factory() {\n return new DownloadAttachmentMenu()\n },\n}\n","/**\n * @description parse elem html\n * @author wangfupeng\n */\n\nimport { IDomEditor, SlateDescendant, SlateElement } from '@wangeditor-next/editor'\n\nimport { DOMElement } from '../utils/dom'\nimport { AttachmentElement } from './custom-types'\n\nfunction parseHtml(\n elem: DOMElement,\n _children: SlateDescendant[],\n _editor: IDomEditor,\n): SlateElement {\n const link = elem.getAttribute('href') || ''\n const fileName = elem.getAttribute('download') || ''\n\n return {\n type: 'attachment',\n link,\n fileName,\n children: [{ text: '' }], // void node 必须有一个空白 text\n } as AttachmentElement\n}\n\nconst parseHtmlConf = {\n selector: 'a[data-w-e-type=\"attachment\"]',\n parseElemHtml: parseHtml,\n}\n\nexport default parseHtmlConf\n","/**\n * @description attachment plugin\n * @author wangfupeng\n */\n\nimport { DomEditor, IDomEditor } from '@wangeditor-next/editor'\n\nfunction withAttachment<T extends IDomEditor>(editor: T) {\n const { isInline, isVoid } = editor\n const newEditor = editor\n\n // 重写 isInline\n newEditor.isInline = elem => {\n const type = DomEditor.getNodeType(elem)\n\n if (type === 'attachment') {\n return true\n }\n\n return isInline(elem)\n }\n\n // 重写 isVoid\n newEditor.isVoid = elem => {\n const type = DomEditor.getNodeType(elem)\n\n if (type === 'attachment') {\n return true\n }\n\n return isVoid(elem)\n }\n\n return newEditor\n}\n\nexport default withAttachment\n","/**\n * @description render elem\n * @author wangfupeng\n */\n\nimport { DomEditor, IDomEditor, SlateElement } from '@wangeditor-next/editor'\nimport { h, VNode } from 'snabbdom'\n\nimport { AttachmentElement } from './custom-types'\n\nfunction renderAttachment(elem: SlateElement, _children: VNode[] | null, editor: IDomEditor): VNode {\n const isDisabled = editor.isDisabled()\n const selected = DomEditor.isNodeSelected(editor, elem)\n const { fileName = '', link = '' } = elem as AttachmentElement\n\n const vnode = h(\n 'span',\n {\n props: {\n contentEditable: false,\n },\n style: {\n display: 'inline-block',\n marginLeft: '3px',\n marginRight: '3px',\n border: selected && !isDisabled\n ? '2px solid var(--w-e-textarea-selected-border-color)'\n : '2px solid transparent',\n borderRadius: '3px',\n padding: '0 3px',\n backgroundColor: 'var(--w-e-textarea-slight-bg-color)',\n cursor: isDisabled ? 'pointer' : 'inherit',\n },\n on: {\n // disable 时,点击下载附件\n click() {\n if (!isDisabled) { return }\n if (link) {\n window.open(link, '_blank')\n }\n },\n },\n },\n [\n h('span', {\n style: {\n marginRight: '0.2em',\n opacity: '0.7',\n },\n }, 'file'),\n fileName,\n ],\n )\n\n return vnode\n}\n\nconst conf = {\n type: 'attachment',\n renderElem: renderAttachment,\n}\n\nexport default conf\n","/**\n * @description attachment module entry\n * @author wangfupeng\n */\n\nimport './local'\n\nimport { IModuleConf } from '@wangeditor-next/editor'\n\nimport elemToHtmlConf from './elem-to-html'\nimport {\n downloadAttachmentMenuConf,\n uploadAttachmentMenuConf,\n} from './menu/index'\nimport parseHtmlConf from './parse-elem-html'\nimport withAttachment from './plugin'\nimport renderElemConf from './render-elem'\n\nconst module: Partial<IModuleConf> = {\n editorPlugin: withAttachment,\n renderElems: [renderElemConf],\n elemsToHtml: [elemToHtmlConf],\n parseElemsHtml: [parseHtmlConf],\n menus: [uploadAttachmentMenuConf, downloadAttachmentMenuConf],\n}\n\nexport default module\n","/**\n * @description src entry\n * @author wangfupeng\n */\n\nimport module from './module/index'\n\nexport * from './module/custom-types'\nexport * from './module/menu/config'\n\nexport default module\n"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import{i18nAddResources as e,t,SlateRange as n,DomEditor as r,createUploader as o}from"@wangeditor-next/editor";import a,{hide as i,append as c,click as u,on as l}from"dom7";import{h as s}from"snabbdom";e("en",{attachment:{upload:"Upload Attachment",download:"Download Attachment"}}),e("zh-CN",{attachment:{upload:"上传附件",download:"下载附件"}});var f={type:"attachment",elemToHtml:function(e,t){var n=e,r=n.link,o=void 0===r?"":r,a=n.fileName,i=void 0===a?"":a;return'<a data-w-e-type="attachment" data-w-e-is-void data-w-e-is-inline href="'.concat(o,'" download="').concat(i,'">').concat(i,"</a>")}};function d(){return{server:"",fieldName:"wangeditor-uploaded-attachment",maxFileSize:10485760,maxNumberOfFiles:5,allowedFileTypes:["*"],meta:{},metaWithUrl:!1,withCredentials:!1,timeout:3e4,onBeforeUpload:function(e){return e},onProgress:function(e){},onSuccess:function(e,t){},onFailed:function(e,t){},onError:function(e,t,n){},onInsertedAttachment:function(e){}}}var p=function(){function e(){this.title=t("attachment.download"),this.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M736 448l-256 256-256-256h160V64h192v384z m-256 256H0v256h960v-256H480z m416 128h-128v-64h128v64z"></path></svg>',this.tag="button",this.alwaysEnable=!0}return e.prototype.getValue=function(e){var t=this.getSelectedElem(e);return null==t?"":t.link},e.prototype.isActive=function(e){return!1},e.prototype.exec=function(e,t){t&&"string"==typeof t&&window.open(t,"_blank")},e.prototype.isDisabled=function(e){var t=e.selection;return null==t||(!!n.isExpanded(t)||null==this.getSelectedElem(e))},e.prototype.getSelectedElem=function(e){var t=r.getSelectedNodeByType(e,"attachment");return null==t?null:t},e}();i&&(a.fn.hide=i),c&&(a.fn.append=c),u&&(a.fn.click=u),l&&(a.fn.on=l);var m=function(){return m=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},m.apply(this,arguments)};function h(e,t,n,r){return new(n||(n=Promise))(function(o,a){function i(e){try{u(r.next(e))}catch(e){a(e)}}function c(e){try{u(r.throw(e))}catch(e){a(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(i,c)}u((r=r.apply(e,t||[])).next())})}function v(e,t){var n,r,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return i.next=c(0),i.throw=c(1),i.return=c(2),"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function c(c){return function(u){return function(c){if(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,c[0]&&(a=0)),a;)try{if(n=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return a.label++,{value:c[1],done:!1};case 5:a.label++,r=c[1],c=[0];continue;case 7:c=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==c[0]&&2!==c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=t.call(e,a)}catch(e){c=[6,e],r=0}finally{n=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}([c,u])}}}function y(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function g(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t,n=e[Symbol.asyncIterator];return n?n.call(e):(e=y(e),t={},r("next"),r("throw"),r("return"),t[Symbol.asyncIterator]=function(){return this},t);function r(n){t[n]=e[n]&&function(t){return new Promise(function(r,o){(function(e,t,n,r){Promise.resolve(r).then(function(t){e({value:t,done:n})},t)})(r,o,(t=e[n](t)).done,t.value)})}}}function b(e){var t={server:"",fieldName:"wangeditor-uploaded-attachment",maxFileSize:10485760,maxNumberOfFiles:5,allowedFileTypes:["*"],meta:{},metaWithUrl:!1,withCredentials:!1,timeout:3e4,onBeforeUpload:function(e){return e},onProgress:function(e){},onSuccess:function(e,t){},onFailed:function(e,t){},onError:function(e,t,n){},onInsertedAttachment:function(e){}},n=e.getMenuConfig("uploadAttachment");return m(m({},t),n||{})}function w(e,t,n){if(t&&n){e.restoreSelection();var r={type:"attachment",fileName:t,link:n,children:[{text:""}]};e.insertNode(r),e.move(1);var o=b(e).onInsertedAttachment;o&&o(r)}}"function"==typeof SuppressedError&&SuppressedError;var x=new WeakMap;function S(e,t){return h(this,void 0,void 0,function(){var n,r;return v(this,function(a){switch(a.label){case 0:return n=function(e){var t=x.get(e);if(null!=t)return t;var n=b(e),r=n.customInsert,a=n.onError,i=n.onFailed,c=n.onProgress,u=n.onSuccess;return t=o(m(m({},n),{onProgress:function(t){e.showProgressBar(t),c&&c(t)},onSuccess:function(t,n){if(r)return r(n,t,function(t,n){return w(e,t,n)}),void u(t,n);var o=n||{},a=o.errno,c=void 0===a?1:a,l=o.data;if(0===c){var s=(void 0===l?{}:l).url,f=void 0===s?"":s;w(e,(null==t?void 0:t.name)||"",f),u(t,n)}else i(t,n)},onError:function(e,t,n){a(e,t,n)}}),e),x.set(e,t),t}(e),r=t.map(function(e){return{name:e.name,type:e.type,size:e.size,data:e}}),n.addFiles(r),[4,n.upload()];case 1:return a.sent(),[2]}})})}var E=function(){function e(){this.title=t("attachment.upload"),this.iconSvg='<svg viewBox="0 0 1024 1024"><path d="M665.821116 327.053068l-64.958782-64.926783-324.79391 324.729911c-53.822991 53.790991-53.822991 141.053355 0 194.844347s141.053355 53.790991 194.876346 0l389.752692-389.688693a229.531696 229.531696 0 0 0 0-324.729912 229.627694 229.627694 0 0 0-324.761911 0L126.727224 476.458266l-0.863984 0.831985c-125.085655 125.085655-125.085655 327.833853 0 452.887508 125.053655 125.053655 327.865853 125.053655 452.983507 0l0.831984-0.863984 0.031999 0.032 279.322763-279.290764-64.990781-64.926782-279.322763 279.258764-0.831984 0.831984a228.731711 228.731711 0 0 1-323.065943 0 228.603714 228.603714 0 0 1 0-322.969944l0.895983-0.831985-0.031999-0.063998L600.958332 132.208721c53.694993-53.726993 141.149353-53.726993 194.876346 0s53.694993 141.149353 0 194.844347L406.081986 716.741761c-17.919664 17.919664-47.039118 17.919664-64.958782 0a45.983138 45.983138 0 0 1 0-64.926783L665.917114 327.053068z"></path></svg>',this.tag="button"}return e.prototype.getValue=function(e){return""},e.prototype.isActive=function(e){return!1},e.prototype.exec=function(e,t){var n=this.getMenuConfig(e),r=n.allowedFileTypes,o=void 0===r?[]:r,i=n.customBrowseAndUpload;if(i)i(function(t,n){return w(e,t,n)});else{var c="";o.length>0&&(c='accept="'.concat(o.join(", "),'"'));var u=a("body"),l=a('<input type="file" '.concat(c," multiple/>"));l.hide(),u.append(l),l.click(),l.on("change",function(){var t=l[0].files;!function(e,t){h(this,void 0,void 0,function(){var n,r,o,a,i,c,u,l,s,f,d,p;return v(this,function(m){switch(m.label){case 0:if(null==t)return[2];n=Array.prototype.slice.call(t),r=b(e).customUpload,o=[],m.label=1;case 1:m.trys.push([1,8,9,14]),a=!0,i=g(n),m.label=2;case 2:return[4,i.next()];case 3:return c=m.sent(),(s=c.done)?[3,7]:(p=c.value,a=!1,u=p,r?[4,r(u,function(t,n){return w(e,t,n)},e)]:[3,5]);case 4:return m.sent(),[3,6];case 5:o.push(u),m.label=6;case 6:return a=!0,[3,2];case 7:return[3,14];case 8:return l=m.sent(),f={error:l},[3,14];case 9:return m.trys.push([9,,12,13]),a||s||!(d=i.return)?[3,11]:[4,d.call(i)];case 10:m.sent(),m.label=11;case 11:return[3,13];case 12:if(f)throw f.error;return[7];case 13:return[7];case 14:return o.length>0?[4,S(e,o)]:[3,16];case 15:m.sent(),m.label=16;case 16:return[2]}})})}(e,t)})}},e.prototype.isDisabled=function(e){var t=e.selection;if(null==t)return!0;if(n.isExpanded(t))return!0;var o=r.getSelectedElems(e);return!!o.some(function(t){return e.isVoid(t)})||!!o.some(function(e){return"pre"===r.getNodeType(e)})},e.prototype.getMenuConfig=function(e){return e.getMenuConfig("uploadAttachment")},e}();var k={editorPlugin:function(e){var t=e.isInline,n=e.isVoid,o=e;return o.isInline=function(e){return"attachment"===r.getNodeType(e)||t(e)},o.isVoid=function(e){return"attachment"===r.getNodeType(e)||n(e)},o},renderElems:[{type:"attachment",renderElem:function(e,t,n){var o=n.isDisabled(),a=r.isNodeSelected(n,e),i=e,c=i.fileName,u=void 0===c?"":c,l=i.link,f=void 0===l?"":l;return s("span",{props:{contentEditable:!1},style:{display:"inline-block",marginLeft:"3px",marginRight:"3px",border:a&&!o?"2px solid var(--w-e-textarea-selected-border-color)":"2px solid transparent",borderRadius:"3px",padding:"0 3px",backgroundColor:"var(--w-e-textarea-slight-bg-color)",cursor:o?"pointer":"inherit"},on:{click:function(){o&&f&&window.open(f,"_blank")}}},[s("span",{style:{marginRight:"0.2em",opacity:"0.7"}},"file"),u])}}],elemsToHtml:[f],parseElemsHtml:[{selector:'a[data-w-e-type="attachment"]',parseElemHtml:function(e,t,n){return{type:"attachment",link:e.getAttribute("href")||"",fileName:e.getAttribute("download")||"",children:[{text:""}]}}}],menus:[{key:"uploadAttachment",factory:function(){return new E},config:{server:"",fieldName:"wangeditor-uploaded-attachment",maxFileSize:10485760,maxNumberOfFiles:5,allowedFileTypes:["*"],meta:{},metaWithUrl:!1,withCredentials:!1,timeout:3e4,onBeforeUpload:function(e){return e},onProgress:function(e){},onSuccess:function(e,t){},onFailed:function(e,t){},onError:function(e,t,n){},onInsertedAttachment:function(e){}}},{key:"downloadAttachment",factory:function(){return new p}}]};export{k as default,d as genUploadAttachmentMenuConfig};
2
- //# sourceMappingURL=index.mjs.map
1
+ import{DomEditor as e,SlateRange as t,createUploader as n,i18nAddResources as r,t as i}from"@wangeditor-next/editor";import a,{append as o,click as s,hide as c,on as l}from"dom7";import{h as u}from"snabbdom";r(`en`,{attachment:{upload:`Upload Attachment`,download:`Download Attachment`}}),r(`zh-CN`,{attachment:{upload:`上传附件`,download:`下载附件`}});function d(e,t){let{link:n=``,fileName:r=``}=e;return`<a data-w-e-type="attachment" data-w-e-is-void data-w-e-is-inline href="${n}" download="${r}">${r}</a>`}var f={type:`attachment`,elemToHtml:d};function p(){return{server:``,fieldName:`wangeditor-uploaded-attachment`,maxFileSize:10*1024*1024,maxNumberOfFiles:5,allowedFileTypes:[`*`],meta:{},metaWithUrl:!1,withCredentials:!1,timeout:30*1e3,onBeforeUpload:e=>e,onProgress:e=>{},onSuccess:(e,t)=>{},onFailed:(e,t)=>{},onError:(e,t,n)=>{},onInsertedAttachment(e){}}}var m=class{constructor(){this.title=i(`attachment.download`),this.iconSvg=`<svg viewBox="0 0 1024 1024"><path d="M736 448l-256 256-256-256h160V64h192v384z m-256 256H0v256h960v-256H480z m416 128h-128v-64h128v64z"></path></svg>`,this.tag=`button`,this.alwaysEnable=!0}getValue(e){let t=this.getSelectedElem(e);return t==null?``:t.link}isActive(e){return!1}exec(e,t){t&&typeof t==`string`&&window.open(t,`_blank`)}isDisabled(e){let{selection:n}=e;return!!(n==null||t.isExpanded(n)||this.getSelectedElem(e)==null)}getSelectedElem(t){let n=e.getSelectedNodeByType(t,`attachment`);return n==null?null:n}};c&&(a.fn.hide=c),o&&(a.fn.append=o),s&&(a.fn.click=s),l&&(a.fn.on=l);var h=a;globalThis.Node,globalThis.Comment,globalThis.Element,globalThis.Text,globalThis.Range,globalThis.Selection,globalThis.StaticRange;function g(e){"@babel/helpers - typeof";return g=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},g(e)}function _(e,t){if(g(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(g(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function v(e){var t=_(e,`string`);return g(t)==`symbol`?t:t+``}function y(e,t,n){return(t=v(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function b(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function x(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?b(Object(n),!0).forEach(function(t){y(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):b(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function S(e,t,n,r,i,a,o){try{var s=e[a](o),c=s.value}catch(e){n(e);return}s.done?t(c):Promise.resolve(c).then(r,i)}function C(e){return function(){var t=this,n=arguments;return new Promise(function(r,i){var a=e.apply(t,n);function o(e){S(a,r,i,o,s,`next`,e)}function s(e){S(a,r,i,o,s,`throw`,e)}o(void 0)})}}function w(e){var t,n,r,i=2;for(typeof Symbol<`u`&&(n=Symbol.asyncIterator,r=Symbol.iterator);i--;){if(n&&(t=e[n])!=null)return t.call(e);if(r&&(t=e[r])!=null)return new T(t.call(e));n=`@@asyncIterator`,r=`@@iterator`}throw TypeError(`Object is not async iterable`)}function T(e){function t(e){if(Object(e)!==e)return Promise.reject(TypeError(e+` is not an object.`));var t=e.done;return Promise.resolve(e.value).then(function(e){return{value:e,done:t}})}return T=function(e){this.s=e,this.n=e.next},T.prototype={s:null,n:null,next:function(){return t(this.n.apply(this.s,arguments))},return:function(e){var n=this.s.return;return n===void 0?Promise.resolve({value:e,done:!0}):t(n.apply(this.s,arguments))},throw:function(e){var n=this.s.return;return n===void 0?Promise.reject(e):t(n.apply(this.s,arguments))}},new T(e)}function E(e){let t=p(),n=e.getMenuConfig(`uploadAttachment`);return x(x({},t),n||{})}function D(e,t,n){if(!t||!n)return;e.restoreSelection();let r={type:`attachment`,fileName:t,link:n,children:[{text:``}]};e.insertNode(r),e.move(1);let{onInsertedAttachment:i}=E(e);i&&i(r)}const O=new WeakMap;function k(e){let t=O.get(e);if(t!=null)return t;let r=E(e),{customInsert:i,onError:a,onFailed:o,onProgress:s,onSuccess:c}=r;return t=n(x(x({},r),{},{onProgress:t=>{e.showProgressBar(t),s&&s(t)},onSuccess:(t,n)=>{if(i){i(n,t,(t,n)=>D(e,t,n)),c(t,n);return}let{errno:r=1,data:a={}}=n||{};if(r!==0){o(t,n);return}let{url:s=``}=a;D(e,(t==null?void 0:t.name)||``,s),c(t,n)},onError:(e,t,n)=>{a(e,t,n)}}),e),O.set(e,t),t}function A(e,t){return j.apply(this,arguments)}function j(){return j=C(function*(e,t){let n=k(e),r=t.map(e=>({name:e.name,type:e.type,size:e.size,data:e}));n.addFiles(r),yield n.upload()}),j.apply(this,arguments)}function M(e,t){return N.apply(this,arguments)}function N(){return N=C(function*(e,t){if(t==null)return;let n=Array.prototype.slice.call(t),{customUpload:r}=E(e),i=[];var a=!1,o=!1,s;try{for(var c=w(n),l;a=!(l=yield c.next()).done;a=!1){let t=l.value;r?yield r(t,(t,n)=>D(e,t,n),e):i.push(t)}}catch(e){o=!0,s=e}finally{try{a&&c.return!=null&&(yield c.return())}finally{if(o)throw s}}i.length>0&&(yield A(e,i))}),N.apply(this,arguments)}var P=class{constructor(){this.title=i(`attachment.upload`),this.iconSvg=`<svg viewBox="0 0 1024 1024"><path d="M665.821116 327.053068l-64.958782-64.926783-324.79391 324.729911c-53.822991 53.790991-53.822991 141.053355 0 194.844347s141.053355 53.790991 194.876346 0l389.752692-389.688693a229.531696 229.531696 0 0 0 0-324.729912 229.627694 229.627694 0 0 0-324.761911 0L126.727224 476.458266l-0.863984 0.831985c-125.085655 125.085655-125.085655 327.833853 0 452.887508 125.053655 125.053655 327.865853 125.053655 452.983507 0l0.831984-0.863984 0.031999 0.032 279.322763-279.290764-64.990781-64.926782-279.322763 279.258764-0.831984 0.831984a228.731711 228.731711 0 0 1-323.065943 0 228.603714 228.603714 0 0 1 0-322.969944l0.895983-0.831985-0.031999-0.063998L600.958332 132.208721c53.694993-53.726993 141.149353-53.726993 194.876346 0s53.694993 141.149353 0 194.844347L406.081986 716.741761c-17.919664 17.919664-47.039118 17.919664-64.958782 0a45.983138 45.983138 0 0 1 0-64.926783L665.917114 327.053068z"></path></svg>`,this.tag=`button`}getValue(e){return``}isActive(e){return!1}exec(e,t){let{allowedFileTypes:n=[],customBrowseAndUpload:r}=this.getMenuConfig(e);if(r){r((t,n)=>D(e,t,n));return}let i=``;n.length>0&&(i=`accept="${n.join(`, `)}"`);let a=h(`body`),o=h(`<input type="file" ${i} multiple/>`);o.hide(),a.append(o),o.click(),o.on(`change`,()=>{let t=o[0].files;M(e,t)})}isDisabled(n){let{selection:r}=n;if(r==null||t.isExpanded(r))return!0;let i=e.getSelectedElems(n);return!!(i.some(e=>n.isVoid(e))||i.some(t=>e.getNodeType(t)===`pre`))}getMenuConfig(e){return e.getMenuConfig(`uploadAttachment`)}};const F={key:`uploadAttachment`,factory(){return new P},config:p()},I={key:`downloadAttachment`,factory(){return new m}};function L(e,t,n){return{type:`attachment`,link:e.getAttribute(`href`)||``,fileName:e.getAttribute(`download`)||``,children:[{text:``}]}}var R={selector:`a[data-w-e-type="attachment"]`,parseElemHtml:L};function z(t){let{isInline:n,isVoid:r}=t,i=t;return i.isInline=t=>e.getNodeType(t)===`attachment`?!0:n(t),i.isVoid=t=>e.getNodeType(t)===`attachment`?!0:r(t),i}var B=z;function V(t,n,r){let i=r.isDisabled(),a=e.isNodeSelected(r,t),{fileName:o=``,link:s=``}=t;return u(`span`,{props:{contentEditable:!1},style:{display:`inline-block`,marginLeft:`3px`,marginRight:`3px`,border:a&&!i?`2px solid var(--w-e-textarea-selected-border-color)`:`2px solid transparent`,borderRadius:`3px`,padding:`0 3px`,backgroundColor:`var(--w-e-textarea-slight-bg-color)`,cursor:i?`pointer`:`inherit`},on:{click(){i&&s&&window.open(s,`_blank`)}}},[u(`span`,{style:{marginRight:`0.2em`,opacity:`0.7`}},`file`),o])}var H={editorPlugin:B,renderElems:[{type:`attachment`,renderElem:V}],elemsToHtml:[f],parseElemsHtml:[R],menus:[F,I]};export{H as default,p as genUploadAttachmentMenuConfig};
2
+ //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/module/local.ts","../src/module/elem-to-html.ts","../src/module/menu/config.ts","../src/constants/icon-svg.ts","../src/module/menu/DownloadAttachment.ts","../src/utils/dom.ts","../src/module/menu/helper.ts","../src/module/menu/UploadAttachment.ts","../src/module/render-elem.ts","../src/module/index.ts","../src/module/plugin.ts","../src/module/parse-elem-html.ts","../src/module/menu/index.ts"],"sourcesContent":["/**\n * @description 多语言\n * @author wangfupeng\n */\n\nimport { i18nAddResources } from '@wangeditor-next/editor'\n\ni18nAddResources('en', {\n attachment: {\n upload: 'Upload Attachment',\n download: 'Download Attachment',\n },\n})\n\ni18nAddResources('zh-CN', {\n attachment: {\n upload: '上传附件',\n download: '下载附件',\n },\n})\n","/**\n * @description elem to html\n * @author wangfupeng\n */\n\nimport { SlateElement } from '@wangeditor-next/editor'\n\nimport { AttachmentElement } from './custom-types'\n\n// 生成 html 的函数\nfunction attachmentToHtml(elem: SlateElement, _childrenHtml: string): string {\n const { link = '', fileName = '' } = elem as AttachmentElement\n\n return `<a data-w-e-type=\"attachment\" data-w-e-is-void data-w-e-is-inline href=\"${link}\" download=\"${fileName}\">${fileName}</a>`\n}\n\n// 配置\nconst conf = {\n type: 'attachment', // 节点 type ,重要!!!\n elemToHtml: attachmentToHtml,\n}\n\nexport default conf\n","/**\n * @description menu config\n * @author wangfupeng\n */\n\nimport { IDomEditor, IUploadConfig } from '@wangeditor-next/editor'\n\nimport { AttachmentElement } from '../custom-types'\n\ntype InsertFn = (fileName: string, link: string) => void\n\n// 在通用 uploadConfig 上,扩展 attachment 相关配置\nexport type IUploadConfigForAttachment = Omit<\n IUploadConfig,\n 'customInsert' | 'customUpload' | 'customBrowseAndUpload'\n> & {\n // 用户自定义插入附件\n customInsert?: (res: any, file: any, insertFn: InsertFn) => void\n // 用户自定义上传附件\n customUpload?: (file: File, insertFn: InsertFn, editor: IDomEditor) => void | Promise<void>\n // 自定义选择附件,如图床\n customBrowseAndUpload?: (insertFn: InsertFn) => void\n // 插入之后的回调\n onInsertedAttachment?: (elem: AttachmentElement) => void\n}\n\nexport function genUploadAttachmentMenuConfig(): IUploadConfigForAttachment {\n return {\n server: '',\n fieldName: 'wangeditor-uploaded-attachment',\n maxFileSize: 10 * 1024 * 1024,\n maxNumberOfFiles: 5,\n allowedFileTypes: ['*'],\n meta: {},\n metaWithUrl: false,\n withCredentials: false,\n timeout: 30 * 1000,\n\n onBeforeUpload: (files: any) => files,\n onProgress: (_progress: number) => {\n /* on progress */\n },\n onSuccess: (_file: any, _res: any) => {\n /* on success */\n },\n onFailed: (_file: any, _res: any) => {\n /* on failed */\n },\n onError: (_file: any, _err: any, _res: any) => {\n /* on error */\n /* on timeout */\n },\n\n onInsertedAttachment(_elem: AttachmentElement) {\n // 插入文件之后的 callback\n },\n }\n}\n","/**\n * @description icon svg\n * @author wangfupeng\n */\n\n// 附件\nexport const ATTACHMENT_SVG = '<svg viewBox=\"0 0 1024 1024\"><path d=\"M665.821116 327.053068l-64.958782-64.926783-324.79391 324.729911c-53.822991 53.790991-53.822991 141.053355 0 194.844347s141.053355 53.790991 194.876346 0l389.752692-389.688693a229.531696 229.531696 0 0 0 0-324.729912 229.627694 229.627694 0 0 0-324.761911 0L126.727224 476.458266l-0.863984 0.831985c-125.085655 125.085655-125.085655 327.833853 0 452.887508 125.053655 125.053655 327.865853 125.053655 452.983507 0l0.831984-0.863984 0.031999 0.032 279.322763-279.290764-64.990781-64.926782-279.322763 279.258764-0.831984 0.831984a228.731711 228.731711 0 0 1-323.065943 0 228.603714 228.603714 0 0 1 0-322.969944l0.895983-0.831985-0.031999-0.063998L600.958332 132.208721c53.694993-53.726993 141.149353-53.726993 194.876346 0s53.694993 141.149353 0 194.844347L406.081986 716.741761c-17.919664 17.919664-47.039118 17.919664-64.958782 0a45.983138 45.983138 0 0 1 0-64.926783L665.917114 327.053068z\"></path></svg>'\n\n// 下载\nexport const DOWNLOAD_SVG = '<svg viewBox=\"0 0 1024 1024\"><path d=\"M736 448l-256 256-256-256h160V64h192v384z m-256 256H0v256h960v-256H480z m416 128h-128v-64h128v64z\"></path></svg>'\n","/**\n * @description download attachment menu\n * @author wangfupeng\n */\n\nimport {\n DomEditor,\n IButtonMenu,\n IDomEditor,\n SlateRange,\n t,\n} from '@wangeditor-next/editor'\n\nimport { DOWNLOAD_SVG } from '../../constants/icon-svg'\nimport { AttachmentElement } from '../custom-types'\n\nclass DownloadAttachmentMenu implements IButtonMenu {\n readonly title = t('attachment.download')\n\n readonly iconSvg = DOWNLOAD_SVG\n\n readonly tag = 'button'\n\n readonly alwaysEnable = true\n\n getValue(editor: IDomEditor): string | boolean {\n const attachmentElem = this.getSelectedElem(editor)\n\n if (attachmentElem == null) { return '' }\n return attachmentElem.link\n }\n\n isActive(_editor: IDomEditor): boolean {\n // 任何时候,都不用激活 menu\n return false\n }\n\n exec(_editor: IDomEditor, value: string | boolean) {\n if (!value) { return }\n if (typeof value !== 'string') { return }\n window.open(value, '_blank')\n }\n\n isDisabled(editor: IDomEditor): boolean {\n const { selection } = editor\n\n if (selection == null) { return true }\n if (SlateRange.isExpanded(selection)) { return true }\n\n // 未匹配到 attachment node 则禁用\n const attachmentElem = this.getSelectedElem(editor)\n\n if (attachmentElem == null) { return true }\n\n return false\n }\n\n private getSelectedElem(editor: IDomEditor): AttachmentElement | null {\n const node = DomEditor.getSelectedNodeByType(editor, 'attachment')\n\n if (node == null) { return null }\n return node as AttachmentElement\n }\n}\n\nexport default DownloadAttachmentMenu\n","/**\n * @description DOM 操作\n * @author wangfupeng\n */\n\nimport $, {\n append, click, hide, on,\n} from 'dom7'\n\nif (hide) { $.fn.hide = hide }\nif (append) { $.fn.append = append }\nif (click) { $.fn.click = click }\nif (on) { $.fn.on = on }\n\nexport type { Dom7Array } from 'dom7'\nexport default $\n\n// COMPAT: This is required to prevent TypeScript aliases from doing some very\n// weird things for Slate's types with the same name as globals. (2019/11/27)\n// https://github.com/microsoft/TypeScript/issues/35002\nimport DOMNode = globalThis.Node\nimport DOMComment = globalThis.Comment\nimport DOMElement = globalThis.Element\nimport DOMText = globalThis.Text\nimport DOMRange = globalThis.Range\nimport DOMSelection = globalThis.Selection\nimport DOMStaticRange = globalThis.StaticRange\n\nexport {\n DOMComment,\n DOMElement,\n DOMNode,\n DOMRange,\n DOMSelection,\n DOMStaticRange,\n DOMText,\n}\n","/**\n * @description helper fns\n * @author wangfupeng\n */\n\nimport { createUploader, IDomEditor } from '@wangeditor-next/editor'\n\nimport { AttachmentElement } from '../custom-types'\nimport {\n genUploadAttachmentMenuConfig,\n IUploadConfigForAttachment,\n} from './config'\n\nfunction getUploadAttachmentMenuConfig(editor: IDomEditor): IUploadConfigForAttachment {\n const defaultConfig = genUploadAttachmentMenuConfig()\n const menuConfig = editor.getMenuConfig('uploadAttachment') as Partial<IUploadConfigForAttachment>\n\n return {\n ...defaultConfig,\n ...(menuConfig || {}),\n }\n}\n\n/**\n * 插入 attachment 节点\n * @param fileName fileName\n * @param link link\n */\nexport function insertAttachment(editor: IDomEditor, fileName: string, link: string) {\n if (!fileName || !link) { return }\n\n // 还原选区\n editor.restoreSelection()\n\n // 插入节点\n const attachmentElem: AttachmentElement = {\n type: 'attachment',\n fileName,\n link,\n children: [{ text: '' }],\n }\n\n editor.insertNode(attachmentElem)\n editor.move(1)\n\n // 回调\n const { onInsertedAttachment } = getUploadAttachmentMenuConfig(editor)\n\n if (onInsertedAttachment) { onInsertedAttachment(attachmentElem) }\n}\n\n// 存储 editor uploader 的关系 - 缓存 uploader ,不重复创建\nconst EDITOR_TO_UPLOADER_MAP = new WeakMap<IDomEditor, any>()\n\n/**\n * 获取 uploader 实例(并通过 editor 缓存)\n * @param editor editor\n */\nfunction getUploader(editor: IDomEditor) {\n let uploader = EDITOR_TO_UPLOADER_MAP.get(editor)\n\n if (uploader != null) { return uploader }\n\n const menuConfig = getUploadAttachmentMenuConfig(editor)\n const {\n customInsert,\n onError,\n onFailed,\n onProgress,\n onSuccess,\n } = menuConfig\n\n // 上传完成之后\n const successHandler = (file: any, res: any) => {\n // 预期 res 格式:\n // 成功:{ errno: 0, data: { url } }\n // 失败:{ errno: !0, message: '失败信息' }\n if (customInsert) {\n customInsert(res, file, (fileName: string, link: string) => insertAttachment(editor, fileName, link))\n onSuccess(file, res)\n return\n }\n\n const { errno = 1, data = {} } = res || {}\n\n if (errno !== 0) {\n onFailed(file, res)\n return\n }\n\n const { url = '' } = data as { url?: string }\n\n insertAttachment(editor, file?.name || '', url)\n onSuccess(file, res)\n }\n\n // progress 显示进度条\n const progressHandler = (progress: number) => {\n editor.showProgressBar(progress)\n\n if (onProgress) { onProgress(progress) }\n }\n\n // onError 提示错误\n const errorHandler = (file: any, err: any, res: any) => {\n onError(file, err, res)\n }\n\n uploader = createUploader(\n {\n ...menuConfig,\n onProgress: progressHandler,\n onSuccess: successHandler,\n onError: errorHandler,\n } as any,\n editor,\n )\n\n EDITOR_TO_UPLOADER_MAP.set(editor, uploader)\n\n return uploader\n}\n\n/**\n * 上传文件\n * @param editor editor\n * @param files files\n */\nasync function uploadFile(editor: IDomEditor, files: File[]) {\n const uploader = getUploader(editor)\n const uploadList = files.map(file => ({\n name: file.name,\n type: file.type,\n size: file.size,\n data: file,\n }))\n\n uploader.addFiles(uploadList)\n await uploader.upload()\n}\n\n/**\n * 上传附件文件\n * @param editor editor\n * @param files files\n */\nexport async function uploadAttachments(\n editor: IDomEditor,\n files: FileList | File[] | null,\n) {\n if (files == null) { return }\n const fileList = Array.prototype.slice.call(files) as File[]\n\n // 获取菜单配置\n const { customUpload } = getUploadAttachmentMenuConfig(editor)\n const uploadFileList: File[] = []\n\n // 按顺序上传\n for await (const file of fileList) {\n if (customUpload) {\n // 自定义上传\n await customUpload(\n file,\n (fileName: string, link: string) => insertAttachment(editor, fileName, link),\n editor,\n )\n } else {\n // 默认上传\n uploadFileList.push(file)\n }\n }\n\n if (uploadFileList.length > 0) {\n await uploadFile(editor, uploadFileList)\n }\n}\n","/**\n * @description upload attachment menu\n * @author wangfupeng\n */\n\nimport {\n DomEditor,\n IButtonMenu,\n IDomEditor,\n SlateRange,\n t,\n} from '@wangeditor-next/editor'\n\nimport { ATTACHMENT_SVG } from '../../constants/icon-svg'\nimport $ from '../../utils/dom'\nimport { IUploadConfigForAttachment } from './config'\nimport { insertAttachment, uploadAttachments } from './helper'\n\nclass UploadAttachmentMenu implements IButtonMenu {\n readonly title = t('attachment.upload')\n\n readonly iconSvg = ATTACHMENT_SVG\n\n readonly tag = 'button'\n\n getValue(_editor: IDomEditor): string | boolean {\n // 无需获取 val\n return ''\n }\n\n isActive(_editor: IDomEditor): boolean {\n // 任何时候,都不用激活 menu\n return false\n }\n\n exec(editor: IDomEditor, _value: string | boolean) {\n const {\n allowedFileTypes = [],\n customBrowseAndUpload,\n } = this.getMenuConfig(editor)\n\n // 自定义选择文件、并上传,如图床\n if (customBrowseAndUpload) {\n customBrowseAndUpload((fileName: string, link: string) => insertAttachment(editor, fileName, link))\n return\n }\n\n // 设置选择文件的类型\n let acceptAttr = ''\n\n if (allowedFileTypes.length > 0) {\n acceptAttr = `accept=\"${allowedFileTypes.join(', ')}\"`\n }\n\n // 添加 file input(每次重新创建 input)\n const $body = $('body')\n const $inputFile = $(`<input type=\"file\" ${acceptAttr} multiple/>`)\n\n $inputFile.hide()\n $body.append($inputFile)\n $inputFile.click()\n // 选中文件\n $inputFile.on('change', () => {\n const files = ($inputFile[0] as HTMLInputElement).files\n\n uploadAttachments(editor, files)\n })\n }\n\n isDisabled(editor: IDomEditor): boolean {\n const { selection } = editor\n\n if (selection == null) { return true }\n if (SlateRange.isExpanded(selection)) { return true }\n\n const selectedElems = DomEditor.getSelectedElems(editor)\n const hasVoidElem = selectedElems.some(elem => editor.isVoid(elem))\n\n if (hasVoidElem) { return true }\n\n const hasPreElem = selectedElems.some(elem => DomEditor.getNodeType(elem) === 'pre')\n\n if (hasPreElem) { return true }\n\n return false\n }\n\n private getMenuConfig(editor: IDomEditor): IUploadConfigForAttachment {\n return editor.getMenuConfig('uploadAttachment') as IUploadConfigForAttachment\n }\n}\n\nexport default UploadAttachmentMenu\n","/**\n * @description render elem\n * @author wangfupeng\n */\n\nimport { DomEditor, IDomEditor, SlateElement } from '@wangeditor-next/editor'\nimport { h, VNode } from 'snabbdom'\n\nimport { AttachmentElement } from './custom-types'\n\nfunction renderAttachment(elem: SlateElement, _children: VNode[] | null, editor: IDomEditor): VNode {\n const isDisabled = editor.isDisabled()\n const selected = DomEditor.isNodeSelected(editor, elem)\n const { fileName = '', link = '' } = elem as AttachmentElement\n\n const vnode = h(\n 'span',\n {\n props: {\n contentEditable: false,\n },\n style: {\n display: 'inline-block',\n marginLeft: '3px',\n marginRight: '3px',\n border: selected && !isDisabled\n ? '2px solid var(--w-e-textarea-selected-border-color)'\n : '2px solid transparent',\n borderRadius: '3px',\n padding: '0 3px',\n backgroundColor: 'var(--w-e-textarea-slight-bg-color)',\n cursor: isDisabled ? 'pointer' : 'inherit',\n },\n on: {\n // disable 时,点击下载附件\n click() {\n if (!isDisabled) { return }\n if (link) {\n window.open(link, '_blank')\n }\n },\n },\n },\n [\n h('span', {\n style: {\n marginRight: '0.2em',\n opacity: '0.7',\n },\n }, 'file'),\n fileName,\n ],\n )\n\n return vnode\n}\n\nconst conf = {\n type: 'attachment',\n renderElem: renderAttachment,\n}\n\nexport default conf\n","/**\n * @description attachment module entry\n * @author wangfupeng\n */\n\nimport './local'\n\nimport { IModuleConf } from '@wangeditor-next/editor'\n\nimport elemToHtmlConf from './elem-to-html'\nimport {\n downloadAttachmentMenuConf,\n uploadAttachmentMenuConf,\n} from './menu/index'\nimport parseHtmlConf from './parse-elem-html'\nimport withAttachment from './plugin'\nimport renderElemConf from './render-elem'\n\nconst module: Partial<IModuleConf> = {\n editorPlugin: withAttachment,\n renderElems: [renderElemConf],\n elemsToHtml: [elemToHtmlConf],\n parseElemsHtml: [parseHtmlConf],\n menus: [uploadAttachmentMenuConf, downloadAttachmentMenuConf],\n}\n\nexport default module\n","/**\n * @description attachment plugin\n * @author wangfupeng\n */\n\nimport { DomEditor, IDomEditor } from '@wangeditor-next/editor'\n\nfunction withAttachment<T extends IDomEditor>(editor: T) {\n const { isInline, isVoid } = editor\n const newEditor = editor\n\n // 重写 isInline\n newEditor.isInline = elem => {\n const type = DomEditor.getNodeType(elem)\n\n if (type === 'attachment') {\n return true\n }\n\n return isInline(elem)\n }\n\n // 重写 isVoid\n newEditor.isVoid = elem => {\n const type = DomEditor.getNodeType(elem)\n\n if (type === 'attachment') {\n return true\n }\n\n return isVoid(elem)\n }\n\n return newEditor\n}\n\nexport default withAttachment\n","/**\n * @description parse elem html\n * @author wangfupeng\n */\n\nimport { IDomEditor, SlateDescendant, SlateElement } from '@wangeditor-next/editor'\n\nimport { DOMElement } from '../utils/dom'\nimport { AttachmentElement } from './custom-types'\n\nfunction parseHtml(\n elem: DOMElement,\n _children: SlateDescendant[],\n _editor: IDomEditor,\n): SlateElement {\n const link = elem.getAttribute('href') || ''\n const fileName = elem.getAttribute('download') || ''\n\n return {\n type: 'attachment',\n link,\n fileName,\n children: [{ text: '' }], // void node 必须有一个空白 text\n } as AttachmentElement\n}\n\nconst parseHtmlConf = {\n selector: 'a[data-w-e-type=\"attachment\"]',\n parseElemHtml: parseHtml,\n}\n\nexport default parseHtmlConf\n","/**\n * @description menu entry\n * @author wangfupeng\n */\n\nimport { genUploadAttachmentMenuConfig } from './config'\nimport DownloadAttachmentMenu from './DownloadAttachment'\nimport UploadAttachmentMenu from './UploadAttachment'\n\nexport const uploadAttachmentMenuConf = {\n key: 'uploadAttachment',\n factory() {\n return new UploadAttachmentMenu()\n },\n\n // 默认菜单配置,将存储在 editorConfig.MENU_CONF[key] 中\n // 创建编辑器时,可通过 editorConfig.MENU_CONF[key] = {...} 来修改\n config: genUploadAttachmentMenuConfig(),\n}\n\nexport const downloadAttachmentMenuConf = {\n key: 'downloadAttachment',\n factory() {\n return new DownloadAttachmentMenu()\n },\n}\n"],"names":["i18nAddResources","attachment","upload","download","conf","type","elemToHtml","elem","_childrenHtml","_a","_b","link","_c","fileName","concat","genUploadAttachmentMenuConfig","server","fieldName","maxFileSize","maxNumberOfFiles","allowedFileTypes","meta","metaWithUrl","withCredentials","timeout","onBeforeUpload","files","onProgress","_progress","onSuccess","_file","_res","onFailed","onError","_err","onInsertedAttachment","_elem","DownloadAttachmentMenu","this","title","t","iconSvg","tag","alwaysEnable","prototype","getValue","editor","attachmentElem","getSelectedElem","isActive","_editor","exec","value","window","open","isDisabled","selection","SlateRange","isExpanded","node","DomEditor","getSelectedNodeByType","hide","$","fn","append","click","on","getUploadAttachmentMenuConfig","defaultConfig","menuConfig","getMenuConfig","__assign","insertAttachment","restoreSelection","children","text","insertNode","move","EDITOR_TO_UPLOADER_MAP","WeakMap","uploadFile","uploader","get","customInsert","createUploader","progress","showProgressBar","file","res","errno","data","_d","url","name","err","set","getUploader","uploadList","map","size","addFiles","sent","UploadAttachmentMenu","_value","customBrowseAndUpload","acceptAttr","length","join","$body","$inputFile","fileList","Array","slice","call","customUpload","uploadFileList","fileList_1","__asyncValues","fileList_1_1","_e","push","uploadAttachments","selectedElems","getSelectedElems","some","isVoid","getNodeType","module","editorPlugin","isInline","newEditor","renderElems","renderElem","_children","selected","isNodeSelected","h","props","contentEditable","style","display","marginLeft","marginRight","border","borderRadius","padding","backgroundColor","cursor","opacity","elemsToHtml","elemToHtmlConf","parseElemsHtml","selector","parseElemHtml","getAttribute","menus","key","factory","config"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["i18nAddResources","attachment","upload","download","attachmentToHtml","elem","_childrenHtml","link","fileName","conf","type","elemToHtml","genUploadAttachmentMenuConfig","server","fieldName","maxFileSize","maxNumberOfFiles","allowedFileTypes","meta","metaWithUrl","withCredentials","timeout","onBeforeUpload","files","onProgress","_progress","onSuccess","_file","_res","onFailed","onError","_err","onInsertedAttachment","_elem","ATTACHMENT_SVG","DOWNLOAD_SVG","DomEditor","SlateRange","t","DOWNLOAD_SVG","DownloadAttachmentMenu","title","iconSvg","tag","alwaysEnable","getValue","editor","attachmentElem","getSelectedElem","link","isActive","_editor","exec","value","window","open","isDisabled","selection","isExpanded","node","getSelectedNodeByType","$","append","click","hide","on","fn","DOMNode","globalThis","Node","DOMComment","Comment","DOMElement","Element","DOMText","Text","DOMRange","Range","DOMSelection","Selection","DOMStaticRange","StaticRange","createUploader","genUploadAttachmentMenuConfig","getUploadAttachmentMenuConfig","editor","defaultConfig","menuConfig","getMenuConfig","insertAttachment","fileName","link","restoreSelection","attachmentElem","type","children","text","insertNode","move","onInsertedAttachment","EDITOR_TO_UPLOADER_MAP","WeakMap","getUploader","uploader","get","customInsert","onError","onFailed","onProgress","onSuccess","successHandler","file","res","errno","data","url","name","progressHandler","progress","showProgressBar","errorHandler","err","set","uploadFile","files","uploadList","map","size","addFiles","upload","uploadAttachments","fileList","Array","prototype","slice","call","customUpload","uploadFileList","push","length","DomEditor","SlateRange","t","ATTACHMENT_SVG","$","insertAttachment","uploadAttachments","UploadAttachmentMenu","title","iconSvg","tag","getValue","_editor","isActive","exec","editor","_value","allowedFileTypes","customBrowseAndUpload","getMenuConfig","fileName","link","acceptAttr","length","join","$body","$inputFile","hide","append","click","on","files","isDisabled","selection","isExpanded","selectedElems","getSelectedElems","hasVoidElem","some","elem","isVoid","hasPreElem","getNodeType","genUploadAttachmentMenuConfig","DownloadAttachmentMenu","UploadAttachmentMenu","uploadAttachmentMenuConf","key","factory","config","downloadAttachmentMenuConf","parseHtml","elem","_children","_editor","link","getAttribute","fileName","type","children","text","parseHtmlConf","selector","parseElemHtml","DomEditor","withAttachment","editor","isInline","isVoid","newEditor","elem","type","getNodeType","DomEditor","h","renderAttachment","elem","_children","editor","isDisabled","selected","isNodeSelected","fileName","link","vnode","props","contentEditable","style","display","marginLeft","marginRight","border","borderRadius","padding","backgroundColor","cursor","on","click","window","open","opacity","conf","type","renderElem","elemToHtmlConf","downloadAttachmentMenuConf","uploadAttachmentMenuConf","parseHtmlConf","withAttachment","renderElemConf","module","editorPlugin","renderElems","elemsToHtml","parseElemsHtml","menus","module"],"sources":["../src/module/local.ts","../src/module/elem-to-html.ts","../src/module/menu/config.ts","../src/constants/icon-svg.ts","../src/module/menu/DownloadAttachment.ts","../src/utils/dom.ts","../src/module/menu/helper.ts","../src/module/menu/UploadAttachment.ts","../src/module/menu/index.ts","../src/module/parse-elem-html.ts","../src/module/plugin.ts","../src/module/render-elem.ts","../src/module/index.ts","../src/index.ts"],"sourcesContent":["/**\n * @description 多语言\n * @author wangfupeng\n */\n\nimport { i18nAddResources } from '@wangeditor-next/editor'\n\ni18nAddResources('en', {\n attachment: {\n upload: 'Upload Attachment',\n download: 'Download Attachment',\n },\n})\n\ni18nAddResources('zh-CN', {\n attachment: {\n upload: '上传附件',\n download: '下载附件',\n },\n})\n","/**\n * @description elem to html\n * @author wangfupeng\n */\n\nimport { SlateElement } from '@wangeditor-next/editor'\n\nimport { AttachmentElement } from './custom-types'\n\n// 生成 html 的函数\nfunction attachmentToHtml(elem: SlateElement, _childrenHtml: string): string {\n const { link = '', fileName = '' } = elem as AttachmentElement\n\n return `<a data-w-e-type=\"attachment\" data-w-e-is-void data-w-e-is-inline href=\"${link}\" download=\"${fileName}\">${fileName}</a>`\n}\n\n// 配置\nconst conf = {\n type: 'attachment', // 节点 type ,重要!!!\n elemToHtml: attachmentToHtml,\n}\n\nexport default conf\n","/**\n * @description menu config\n * @author wangfupeng\n */\n\nimport { IDomEditor, IUploadConfig } from '@wangeditor-next/editor'\n\nimport { AttachmentElement } from '../custom-types'\n\ntype InsertFn = (fileName: string, link: string) => void\n\n// 在通用 uploadConfig 上,扩展 attachment 相关配置\nexport type IUploadConfigForAttachment = Omit<\n IUploadConfig,\n 'customInsert' | 'customUpload' | 'customBrowseAndUpload'\n> & {\n // 用户自定义插入附件\n customInsert?: (res: any, file: any, insertFn: InsertFn) => void\n // 用户自定义上传附件\n customUpload?: (file: File, insertFn: InsertFn, editor: IDomEditor) => void | Promise<void>\n // 自定义选择附件,如图床\n customBrowseAndUpload?: (insertFn: InsertFn) => void\n // 插入之后的回调\n onInsertedAttachment?: (elem: AttachmentElement) => void\n}\n\nexport function genUploadAttachmentMenuConfig(): IUploadConfigForAttachment {\n return {\n server: '',\n fieldName: 'wangeditor-uploaded-attachment',\n maxFileSize: 10 * 1024 * 1024,\n maxNumberOfFiles: 5,\n allowedFileTypes: ['*'],\n meta: {},\n metaWithUrl: false,\n withCredentials: false,\n timeout: 30 * 1000,\n\n onBeforeUpload: (files: any) => files,\n onProgress: (_progress: number) => {\n /* on progress */\n },\n onSuccess: (_file: any, _res: any) => {\n /* on success */\n },\n onFailed: (_file: any, _res: any) => {\n /* on failed */\n },\n onError: (_file: any, _err: any, _res: any) => {\n /* on error */\n /* on timeout */\n },\n\n onInsertedAttachment(_elem: AttachmentElement) {\n // 插入文件之后的 callback\n },\n }\n}\n","/**\n * @description icon svg\n * @author wangfupeng\n */\n\n// 附件\nexport const ATTACHMENT_SVG = '<svg viewBox=\"0 0 1024 1024\"><path d=\"M665.821116 327.053068l-64.958782-64.926783-324.79391 324.729911c-53.822991 53.790991-53.822991 141.053355 0 194.844347s141.053355 53.790991 194.876346 0l389.752692-389.688693a229.531696 229.531696 0 0 0 0-324.729912 229.627694 229.627694 0 0 0-324.761911 0L126.727224 476.458266l-0.863984 0.831985c-125.085655 125.085655-125.085655 327.833853 0 452.887508 125.053655 125.053655 327.865853 125.053655 452.983507 0l0.831984-0.863984 0.031999 0.032 279.322763-279.290764-64.990781-64.926782-279.322763 279.258764-0.831984 0.831984a228.731711 228.731711 0 0 1-323.065943 0 228.603714 228.603714 0 0 1 0-322.969944l0.895983-0.831985-0.031999-0.063998L600.958332 132.208721c53.694993-53.726993 141.149353-53.726993 194.876346 0s53.694993 141.149353 0 194.844347L406.081986 716.741761c-17.919664 17.919664-47.039118 17.919664-64.958782 0a45.983138 45.983138 0 0 1 0-64.926783L665.917114 327.053068z\"></path></svg>'\n\n// 下载\nexport const DOWNLOAD_SVG = '<svg viewBox=\"0 0 1024 1024\"><path d=\"M736 448l-256 256-256-256h160V64h192v384z m-256 256H0v256h960v-256H480z m416 128h-128v-64h128v64z\"></path></svg>'\n","/**\n * @description download attachment menu\n * @author wangfupeng\n */\n\nimport {\n DomEditor,\n IButtonMenu,\n IDomEditor,\n SlateRange,\n t,\n} from '@wangeditor-next/editor'\n\nimport { DOWNLOAD_SVG } from '../../constants/icon-svg'\nimport { AttachmentElement } from '../custom-types'\n\nclass DownloadAttachmentMenu implements IButtonMenu {\n readonly title = t('attachment.download')\n\n readonly iconSvg = DOWNLOAD_SVG\n\n readonly tag = 'button'\n\n readonly alwaysEnable = true\n\n getValue(editor: IDomEditor): string | boolean {\n const attachmentElem = this.getSelectedElem(editor)\n\n if (attachmentElem == null) { return '' }\n return attachmentElem.link\n }\n\n isActive(_editor: IDomEditor): boolean {\n // 任何时候,都不用激活 menu\n return false\n }\n\n exec(_editor: IDomEditor, value: string | boolean) {\n if (!value) { return }\n if (typeof value !== 'string') { return }\n window.open(value, '_blank')\n }\n\n isDisabled(editor: IDomEditor): boolean {\n const { selection } = editor\n\n if (selection == null) { return true }\n if (SlateRange.isExpanded(selection)) { return true }\n\n // 未匹配到 attachment node 则禁用\n const attachmentElem = this.getSelectedElem(editor)\n\n if (attachmentElem == null) { return true }\n\n return false\n }\n\n private getSelectedElem(editor: IDomEditor): AttachmentElement | null {\n const node = DomEditor.getSelectedNodeByType(editor, 'attachment')\n\n if (node == null) { return null }\n return node as AttachmentElement\n }\n}\n\nexport default DownloadAttachmentMenu\n","/**\n * @description DOM 操作\n * @author wangfupeng\n */\n\nimport $, {\n append, click, hide, on,\n} from 'dom7'\n\nif (hide) { $.fn.hide = hide }\nif (append) { $.fn.append = append }\nif (click) { $.fn.click = click }\nif (on) { $.fn.on = on }\n\nexport type { Dom7Array } from 'dom7'\nexport default $\n\n// COMPAT: This is required to prevent TypeScript aliases from doing some very\n// weird things for Slate's types with the same name as globals. (2019/11/27)\n// https://github.com/microsoft/TypeScript/issues/35002\nimport DOMNode = globalThis.Node\nimport DOMComment = globalThis.Comment\nimport DOMElement = globalThis.Element\nimport DOMText = globalThis.Text\nimport DOMRange = globalThis.Range\nimport DOMSelection = globalThis.Selection\nimport DOMStaticRange = globalThis.StaticRange\n\nexport {\n DOMComment,\n DOMElement,\n DOMNode,\n DOMRange,\n DOMSelection,\n DOMStaticRange,\n DOMText,\n}\n","/**\n * @description helper fns\n * @author wangfupeng\n */\n\nimport { createUploader, IDomEditor } from '@wangeditor-next/editor'\n\nimport { AttachmentElement } from '../custom-types'\nimport {\n genUploadAttachmentMenuConfig,\n IUploadConfigForAttachment,\n} from './config'\n\nfunction getUploadAttachmentMenuConfig(editor: IDomEditor): IUploadConfigForAttachment {\n const defaultConfig = genUploadAttachmentMenuConfig()\n const menuConfig = editor.getMenuConfig('uploadAttachment') as Partial<IUploadConfigForAttachment>\n\n return {\n ...defaultConfig,\n ...(menuConfig || {}),\n }\n}\n\n/**\n * 插入 attachment 节点\n * @param fileName fileName\n * @param link link\n */\nexport function insertAttachment(editor: IDomEditor, fileName: string, link: string) {\n if (!fileName || !link) { return }\n\n // 还原选区\n editor.restoreSelection()\n\n // 插入节点\n const attachmentElem: AttachmentElement = {\n type: 'attachment',\n fileName,\n link,\n children: [{ text: '' }],\n }\n\n editor.insertNode(attachmentElem)\n editor.move(1)\n\n // 回调\n const { onInsertedAttachment } = getUploadAttachmentMenuConfig(editor)\n\n if (onInsertedAttachment) { onInsertedAttachment(attachmentElem) }\n}\n\n// 存储 editor uploader 的关系 - 缓存 uploader ,不重复创建\nconst EDITOR_TO_UPLOADER_MAP = new WeakMap<IDomEditor, any>()\n\n/**\n * 获取 uploader 实例(并通过 editor 缓存)\n * @param editor editor\n */\nfunction getUploader(editor: IDomEditor) {\n let uploader = EDITOR_TO_UPLOADER_MAP.get(editor)\n\n if (uploader != null) { return uploader }\n\n const menuConfig = getUploadAttachmentMenuConfig(editor)\n const {\n customInsert,\n onError,\n onFailed,\n onProgress,\n onSuccess,\n } = menuConfig\n\n // 上传完成之后\n const successHandler = (file: any, res: any) => {\n // 预期 res 格式:\n // 成功:{ errno: 0, data: { url } }\n // 失败:{ errno: !0, message: '失败信息' }\n if (customInsert) {\n customInsert(res, file, (fileName: string, link: string) => insertAttachment(editor, fileName, link))\n onSuccess(file, res)\n return\n }\n\n const { errno = 1, data = {} } = res || {}\n\n if (errno !== 0) {\n onFailed(file, res)\n return\n }\n\n const { url = '' } = data as { url?: string }\n\n insertAttachment(editor, file?.name || '', url)\n onSuccess(file, res)\n }\n\n // progress 显示进度条\n const progressHandler = (progress: number) => {\n editor.showProgressBar(progress)\n\n if (onProgress) { onProgress(progress) }\n }\n\n // onError 提示错误\n const errorHandler = (file: any, err: any, res: any) => {\n onError(file, err, res)\n }\n\n uploader = createUploader(\n {\n ...menuConfig,\n onProgress: progressHandler,\n onSuccess: successHandler,\n onError: errorHandler,\n } as any,\n editor,\n )\n\n EDITOR_TO_UPLOADER_MAP.set(editor, uploader)\n\n return uploader\n}\n\n/**\n * 上传文件\n * @param editor editor\n * @param files files\n */\nasync function uploadFile(editor: IDomEditor, files: File[]) {\n const uploader = getUploader(editor)\n const uploadList = files.map(file => ({\n name: file.name,\n type: file.type,\n size: file.size,\n data: file,\n }))\n\n uploader.addFiles(uploadList)\n await uploader.upload()\n}\n\n/**\n * 上传附件文件\n * @param editor editor\n * @param files files\n */\nexport async function uploadAttachments(\n editor: IDomEditor,\n files: FileList | File[] | null,\n) {\n if (files == null) { return }\n const fileList = Array.prototype.slice.call(files) as File[]\n\n // 获取菜单配置\n const { customUpload } = getUploadAttachmentMenuConfig(editor)\n const uploadFileList: File[] = []\n\n // 按顺序上传\n for await (const file of fileList) {\n if (customUpload) {\n // 自定义上传\n await customUpload(\n file,\n (fileName: string, link: string) => insertAttachment(editor, fileName, link),\n editor,\n )\n } else {\n // 默认上传\n uploadFileList.push(file)\n }\n }\n\n if (uploadFileList.length > 0) {\n await uploadFile(editor, uploadFileList)\n }\n}\n","/**\n * @description upload attachment menu\n * @author wangfupeng\n */\n\nimport {\n DomEditor,\n IButtonMenu,\n IDomEditor,\n SlateRange,\n t,\n} from '@wangeditor-next/editor'\n\nimport { ATTACHMENT_SVG } from '../../constants/icon-svg'\nimport $ from '../../utils/dom'\nimport { IUploadConfigForAttachment } from './config'\nimport { insertAttachment, uploadAttachments } from './helper'\n\nclass UploadAttachmentMenu implements IButtonMenu {\n readonly title = t('attachment.upload')\n\n readonly iconSvg = ATTACHMENT_SVG\n\n readonly tag = 'button'\n\n getValue(_editor: IDomEditor): string | boolean {\n // 无需获取 val\n return ''\n }\n\n isActive(_editor: IDomEditor): boolean {\n // 任何时候,都不用激活 menu\n return false\n }\n\n exec(editor: IDomEditor, _value: string | boolean) {\n const {\n allowedFileTypes = [],\n customBrowseAndUpload,\n } = this.getMenuConfig(editor)\n\n // 自定义选择文件、并上传,如图床\n if (customBrowseAndUpload) {\n customBrowseAndUpload((fileName: string, link: string) => insertAttachment(editor, fileName, link))\n return\n }\n\n // 设置选择文件的类型\n let acceptAttr = ''\n\n if (allowedFileTypes.length > 0) {\n acceptAttr = `accept=\"${allowedFileTypes.join(', ')}\"`\n }\n\n // 添加 file input(每次重新创建 input)\n const $body = $('body')\n const $inputFile = $(`<input type=\"file\" ${acceptAttr} multiple/>`)\n\n $inputFile.hide()\n $body.append($inputFile)\n $inputFile.click()\n // 选中文件\n $inputFile.on('change', () => {\n const files = ($inputFile[0] as HTMLInputElement).files\n\n uploadAttachments(editor, files)\n })\n }\n\n isDisabled(editor: IDomEditor): boolean {\n const { selection } = editor\n\n if (selection == null) { return true }\n if (SlateRange.isExpanded(selection)) { return true }\n\n const selectedElems = DomEditor.getSelectedElems(editor)\n const hasVoidElem = selectedElems.some(elem => editor.isVoid(elem))\n\n if (hasVoidElem) { return true }\n\n const hasPreElem = selectedElems.some(elem => DomEditor.getNodeType(elem) === 'pre')\n\n if (hasPreElem) { return true }\n\n return false\n }\n\n private getMenuConfig(editor: IDomEditor): IUploadConfigForAttachment {\n return editor.getMenuConfig('uploadAttachment') as IUploadConfigForAttachment\n }\n}\n\nexport default UploadAttachmentMenu\n","/**\n * @description menu entry\n * @author wangfupeng\n */\n\nimport { genUploadAttachmentMenuConfig } from './config'\nimport DownloadAttachmentMenu from './DownloadAttachment'\nimport UploadAttachmentMenu from './UploadAttachment'\n\nexport const uploadAttachmentMenuConf = {\n key: 'uploadAttachment',\n factory() {\n return new UploadAttachmentMenu()\n },\n\n // 默认菜单配置,将存储在 editorConfig.MENU_CONF[key] 中\n // 创建编辑器时,可通过 editorConfig.MENU_CONF[key] = {...} 来修改\n config: genUploadAttachmentMenuConfig(),\n}\n\nexport const downloadAttachmentMenuConf = {\n key: 'downloadAttachment',\n factory() {\n return new DownloadAttachmentMenu()\n },\n}\n","/**\n * @description parse elem html\n * @author wangfupeng\n */\n\nimport { IDomEditor, SlateDescendant, SlateElement } from '@wangeditor-next/editor'\n\nimport { DOMElement } from '../utils/dom'\nimport { AttachmentElement } from './custom-types'\n\nfunction parseHtml(\n elem: DOMElement,\n _children: SlateDescendant[],\n _editor: IDomEditor,\n): SlateElement {\n const link = elem.getAttribute('href') || ''\n const fileName = elem.getAttribute('download') || ''\n\n return {\n type: 'attachment',\n link,\n fileName,\n children: [{ text: '' }], // void node 必须有一个空白 text\n } as AttachmentElement\n}\n\nconst parseHtmlConf = {\n selector: 'a[data-w-e-type=\"attachment\"]',\n parseElemHtml: parseHtml,\n}\n\nexport default parseHtmlConf\n","/**\n * @description attachment plugin\n * @author wangfupeng\n */\n\nimport { DomEditor, IDomEditor } from '@wangeditor-next/editor'\n\nfunction withAttachment<T extends IDomEditor>(editor: T) {\n const { isInline, isVoid } = editor\n const newEditor = editor\n\n // 重写 isInline\n newEditor.isInline = elem => {\n const type = DomEditor.getNodeType(elem)\n\n if (type === 'attachment') {\n return true\n }\n\n return isInline(elem)\n }\n\n // 重写 isVoid\n newEditor.isVoid = elem => {\n const type = DomEditor.getNodeType(elem)\n\n if (type === 'attachment') {\n return true\n }\n\n return isVoid(elem)\n }\n\n return newEditor\n}\n\nexport default withAttachment\n","/**\n * @description render elem\n * @author wangfupeng\n */\n\nimport { DomEditor, IDomEditor, SlateElement } from '@wangeditor-next/editor'\nimport { h, VNode } from 'snabbdom'\n\nimport { AttachmentElement } from './custom-types'\n\nfunction renderAttachment(elem: SlateElement, _children: VNode[] | null, editor: IDomEditor): VNode {\n const isDisabled = editor.isDisabled()\n const selected = DomEditor.isNodeSelected(editor, elem)\n const { fileName = '', link = '' } = elem as AttachmentElement\n\n const vnode = h(\n 'span',\n {\n props: {\n contentEditable: false,\n },\n style: {\n display: 'inline-block',\n marginLeft: '3px',\n marginRight: '3px',\n border: selected && !isDisabled\n ? '2px solid var(--w-e-textarea-selected-border-color)'\n : '2px solid transparent',\n borderRadius: '3px',\n padding: '0 3px',\n backgroundColor: 'var(--w-e-textarea-slight-bg-color)',\n cursor: isDisabled ? 'pointer' : 'inherit',\n },\n on: {\n // disable 时,点击下载附件\n click() {\n if (!isDisabled) { return }\n if (link) {\n window.open(link, '_blank')\n }\n },\n },\n },\n [\n h('span', {\n style: {\n marginRight: '0.2em',\n opacity: '0.7',\n },\n }, 'file'),\n fileName,\n ],\n )\n\n return vnode\n}\n\nconst conf = {\n type: 'attachment',\n renderElem: renderAttachment,\n}\n\nexport default conf\n","/**\n * @description attachment module entry\n * @author wangfupeng\n */\n\nimport './local'\n\nimport { IModuleConf } from '@wangeditor-next/editor'\n\nimport elemToHtmlConf from './elem-to-html'\nimport {\n downloadAttachmentMenuConf,\n uploadAttachmentMenuConf,\n} from './menu/index'\nimport parseHtmlConf from './parse-elem-html'\nimport withAttachment from './plugin'\nimport renderElemConf from './render-elem'\n\nconst module: Partial<IModuleConf> = {\n editorPlugin: withAttachment,\n renderElems: [renderElemConf],\n elemsToHtml: [elemToHtmlConf],\n parseElemsHtml: [parseHtmlConf],\n menus: [uploadAttachmentMenuConf, downloadAttachmentMenuConf],\n}\n\nexport default module\n","/**\n * @description src entry\n * @author wangfupeng\n */\n\nimport module from './module/index'\n\nexport * from './module/custom-types'\nexport * from './module/menu/config'\n\nexport default module\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "name": "@wangeditor-next/plugin-attachment",
3
- "version": "6.4.2",
3
+ "version": "6.5.0",
4
4
  "description": "wangEditor attachment plugin",
5
5
  "author": "cycleccc <2991205548@qq.com>",
6
6
  "type": "module",
7
7
  "homepage": "https://github.com/wangeditor-next/wangEditor-next#readme",
8
8
  "license": "MIT",
9
- "types": "dist/plugin-attachment/src/index.d.ts",
9
+ "types": "dist/index.d.ts",
10
10
  "main": "dist/index.js",
11
11
  "module": "dist/index.mjs",
12
12
  "exports": {
13
13
  ".": {
14
- "types": "./dist/plugin-attachment/src/index.d.ts",
14
+ "types": "./dist/index.d.ts",
15
15
  "import": "./dist/index.mjs",
16
16
  "require": "./dist/index.js"
17
17
  }
@@ -35,16 +35,14 @@
35
35
  "peerDependencies": {
36
36
  "dom7": "^3.0.0 || ^4.0.0",
37
37
  "snabbdom": "^3.6.0",
38
- "@wangeditor-next/editor": "^6.4.2"
39
- },
40
- "devDependencies": {
41
- "@wangeditor-next-shared/rollup-config": "^0.0.2"
38
+ "@wangeditor-next/editor": "^6.5.0"
42
39
  },
40
+ "devDependencies": {},
43
41
  "scripts": {
44
- "dev": "cross-env NODE_ENV=development rollup -c rollup.config.js",
45
- "dev-watch": "cross-env NODE_ENV=development rollup -c rollup.config.js -w",
46
- "build": "cross-env NODE_ENV=production rollup -c rollup.config.js",
47
- "dev-size-stats": "cross-env NODE_ENV=development:size_stats rollup -c rollup.config.js",
48
- "size-stats": "cross-env NODE_ENV=production:size_stats rollup -c rollup.config.js"
42
+ "dev": "cross-env NODE_ENV=development tsdown -c tsdown.config.js",
43
+ "dev-watch": "cross-env NODE_ENV=development tsdown -c tsdown.config.js -w",
44
+ "build": "cross-env NODE_ENV=production tsdown -c tsdown.config.js",
45
+ "dev-size-stats": "cross-env NODE_ENV=development:size_stats tsdown -c tsdown.config.js --report",
46
+ "size-stats": "cross-env NODE_ENV=production:size_stats tsdown -c tsdown.config.js --report"
49
47
  }
50
48
  }