vditor 3.8.7

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 (419) hide show
  1. package/CHANGELOG.md +1072 -0
  2. package/LICENSE +21 -0
  3. package/README.md +649 -0
  4. package/dist/css/content-theme/ant-design.css +210 -0
  5. package/dist/css/content-theme/dark.css +123 -0
  6. package/dist/css/content-theme/light.css +101 -0
  7. package/dist/css/content-theme/wechat.css +94 -0
  8. package/dist/images/.DS_Store +0 -0
  9. package/dist/images/emoji/b3log.png +0 -0
  10. package/dist/images/emoji/chainbook.png +0 -0
  11. package/dist/images/emoji/doge.png +0 -0
  12. package/dist/images/emoji/hacpai.png +0 -0
  13. package/dist/images/emoji/huaji.gif +0 -0
  14. package/dist/images/emoji/latke.png +0 -0
  15. package/dist/images/emoji/lute.png +0 -0
  16. package/dist/images/emoji/octocat.png +0 -0
  17. package/dist/images/emoji/pipe.png +0 -0
  18. package/dist/images/emoji/solo.png +0 -0
  19. package/dist/images/emoji/sym.png +0 -0
  20. package/dist/images/emoji/trollface.png +0 -0
  21. package/dist/images/emoji/vditor.png +0 -0
  22. package/dist/images/emoji/wide.png +0 -0
  23. package/dist/images/emoji/wulian.png +0 -0
  24. package/dist/images/img-loading.svg +1 -0
  25. package/dist/images/logo.png +0 -0
  26. package/dist/index.css +28 -0
  27. package/dist/index.d.ts +75 -0
  28. package/dist/index.min.js +15353 -0
  29. package/dist/js/.DS_Store +0 -0
  30. package/dist/js/abcjs/abcjs_basic.min.js +3 -0
  31. package/dist/js/echarts/echarts.min.js +23 -0
  32. package/dist/js/flowchart.js/flowchart.min.js +9 -0
  33. package/dist/js/graphviz/full.render.js +90 -0
  34. package/dist/js/graphviz/viz.js +333 -0
  35. package/dist/js/highlight.js/highlight.pack.js +1617 -0
  36. package/dist/js/highlight.js/styles/abap.css +155 -0
  37. package/dist/js/highlight.js/styles/algol.css +142 -0
  38. package/dist/js/highlight.js/styles/algol_nu.css +90 -0
  39. package/dist/js/highlight.js/styles/ant-design.css +469 -0
  40. package/dist/js/highlight.js/styles/arduino.css +155 -0
  41. package/dist/js/highlight.js/styles/autumn.css +136 -0
  42. package/dist/js/highlight.js/styles/borland.css +146 -0
  43. package/dist/js/highlight.js/styles/bw.css +149 -0
  44. package/dist/js/highlight.js/styles/colorful.css +156 -0
  45. package/dist/js/highlight.js/styles/dracula.css +139 -0
  46. package/dist/js/highlight.js/styles/emacs.css +166 -0
  47. package/dist/js/highlight.js/styles/friendly.css +182 -0
  48. package/dist/js/highlight.js/styles/fruity.css +121 -0
  49. package/dist/js/highlight.js/styles/github.css +173 -0
  50. package/dist/js/highlight.js/styles/igor.css +122 -0
  51. package/dist/js/highlight.js/styles/lovelace.css +145 -0
  52. package/dist/js/highlight.js/styles/manni.css +138 -0
  53. package/dist/js/highlight.js/styles/monokai.css +131 -0
  54. package/dist/js/highlight.js/styles/monokailight.css +179 -0
  55. package/dist/js/highlight.js/styles/murphy.css +144 -0
  56. package/dist/js/highlight.js/styles/native.css +163 -0
  57. package/dist/js/highlight.js/styles/paraiso-dark.css +136 -0
  58. package/dist/js/highlight.js/styles/paraiso-light.css +135 -0
  59. package/dist/js/highlight.js/styles/pastie.css +180 -0
  60. package/dist/js/highlight.js/styles/perldoc.css +140 -0
  61. package/dist/js/highlight.js/styles/pygments.css +158 -0
  62. package/dist/js/highlight.js/styles/rainbow_dash.css +163 -0
  63. package/dist/js/highlight.js/styles/rrt.css +158 -0
  64. package/dist/js/highlight.js/styles/solarized-dark.css +145 -0
  65. package/dist/js/highlight.js/styles/solarized-dark256.css +145 -0
  66. package/dist/js/highlight.js/styles/solarized-light.css +162 -0
  67. package/dist/js/highlight.js/styles/swapoff.css +144 -0
  68. package/dist/js/highlight.js/styles/tango.css +183 -0
  69. package/dist/js/highlight.js/styles/trac.css +166 -0
  70. package/dist/js/highlight.js/styles/vim.css +143 -0
  71. package/dist/js/highlight.js/styles/vs.css +112 -0
  72. package/dist/js/highlight.js/styles/xcode.css +173 -0
  73. package/dist/js/i18n/en_US.js +85 -0
  74. package/dist/js/i18n/ja_JP.js +85 -0
  75. package/dist/js/i18n/ko_KR.js +85 -0
  76. package/dist/js/i18n/ru_RU.js +85 -0
  77. package/dist/js/i18n/zh_CN.js +85 -0
  78. package/dist/js/i18n/zh_TW.js +85 -0
  79. package/dist/js/icons/ant.js +174 -0
  80. package/dist/js/icons/material.js +195 -0
  81. package/dist/js/katex/fonts/KaTeX_AMS-Regular.ttf +0 -0
  82. package/dist/js/katex/fonts/KaTeX_AMS-Regular.woff +0 -0
  83. package/dist/js/katex/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  84. package/dist/js/katex/fonts/KaTeX_Caligraphic-Bold.ttf +0 -0
  85. package/dist/js/katex/fonts/KaTeX_Caligraphic-Bold.woff +0 -0
  86. package/dist/js/katex/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
  87. package/dist/js/katex/fonts/KaTeX_Caligraphic-Regular.ttf +0 -0
  88. package/dist/js/katex/fonts/KaTeX_Caligraphic-Regular.woff +0 -0
  89. package/dist/js/katex/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
  90. package/dist/js/katex/fonts/KaTeX_Fraktur-Bold.ttf +0 -0
  91. package/dist/js/katex/fonts/KaTeX_Fraktur-Bold.woff +0 -0
  92. package/dist/js/katex/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
  93. package/dist/js/katex/fonts/KaTeX_Fraktur-Regular.ttf +0 -0
  94. package/dist/js/katex/fonts/KaTeX_Fraktur-Regular.woff +0 -0
  95. package/dist/js/katex/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
  96. package/dist/js/katex/fonts/KaTeX_Main-Bold.ttf +0 -0
  97. package/dist/js/katex/fonts/KaTeX_Main-Bold.woff +0 -0
  98. package/dist/js/katex/fonts/KaTeX_Main-Bold.woff2 +0 -0
  99. package/dist/js/katex/fonts/KaTeX_Main-BoldItalic.ttf +0 -0
  100. package/dist/js/katex/fonts/KaTeX_Main-BoldItalic.woff +0 -0
  101. package/dist/js/katex/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
  102. package/dist/js/katex/fonts/KaTeX_Main-Italic.ttf +0 -0
  103. package/dist/js/katex/fonts/KaTeX_Main-Italic.woff +0 -0
  104. package/dist/js/katex/fonts/KaTeX_Main-Italic.woff2 +0 -0
  105. package/dist/js/katex/fonts/KaTeX_Main-Regular.ttf +0 -0
  106. package/dist/js/katex/fonts/KaTeX_Main-Regular.woff +0 -0
  107. package/dist/js/katex/fonts/KaTeX_Main-Regular.woff2 +0 -0
  108. package/dist/js/katex/fonts/KaTeX_Math-BoldItalic.ttf +0 -0
  109. package/dist/js/katex/fonts/KaTeX_Math-BoldItalic.woff +0 -0
  110. package/dist/js/katex/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  111. package/dist/js/katex/fonts/KaTeX_Math-Italic.ttf +0 -0
  112. package/dist/js/katex/fonts/KaTeX_Math-Italic.woff +0 -0
  113. package/dist/js/katex/fonts/KaTeX_Math-Italic.woff2 +0 -0
  114. package/dist/js/katex/fonts/KaTeX_SansSerif-Bold.ttf +0 -0
  115. package/dist/js/katex/fonts/KaTeX_SansSerif-Bold.woff +0 -0
  116. package/dist/js/katex/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
  117. package/dist/js/katex/fonts/KaTeX_SansSerif-Italic.ttf +0 -0
  118. package/dist/js/katex/fonts/KaTeX_SansSerif-Italic.woff +0 -0
  119. package/dist/js/katex/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
  120. package/dist/js/katex/fonts/KaTeX_SansSerif-Regular.ttf +0 -0
  121. package/dist/js/katex/fonts/KaTeX_SansSerif-Regular.woff +0 -0
  122. package/dist/js/katex/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
  123. package/dist/js/katex/fonts/KaTeX_Script-Regular.ttf +0 -0
  124. package/dist/js/katex/fonts/KaTeX_Script-Regular.woff +0 -0
  125. package/dist/js/katex/fonts/KaTeX_Script-Regular.woff2 +0 -0
  126. package/dist/js/katex/fonts/KaTeX_Size1-Regular.ttf +0 -0
  127. package/dist/js/katex/fonts/KaTeX_Size1-Regular.woff +0 -0
  128. package/dist/js/katex/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  129. package/dist/js/katex/fonts/KaTeX_Size2-Regular.ttf +0 -0
  130. package/dist/js/katex/fonts/KaTeX_Size2-Regular.woff +0 -0
  131. package/dist/js/katex/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  132. package/dist/js/katex/fonts/KaTeX_Size3-Regular.ttf +0 -0
  133. package/dist/js/katex/fonts/KaTeX_Size3-Regular.woff +0 -0
  134. package/dist/js/katex/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  135. package/dist/js/katex/fonts/KaTeX_Size4-Regular.ttf +0 -0
  136. package/dist/js/katex/fonts/KaTeX_Size4-Regular.woff +0 -0
  137. package/dist/js/katex/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  138. package/dist/js/katex/fonts/KaTeX_Typewriter-Regular.ttf +0 -0
  139. package/dist/js/katex/fonts/KaTeX_Typewriter-Regular.woff +0 -0
  140. package/dist/js/katex/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
  141. package/dist/js/katex/katex.min.css +1 -0
  142. package/dist/js/katex/katex.min.js +2 -0
  143. package/dist/js/lute/.DS_Store +0 -0
  144. package/dist/js/lute/lute.min.js +46 -0
  145. package/dist/js/mathjax/.DS_Store +0 -0
  146. package/dist/js/mathjax/LICENSE +202 -0
  147. package/dist/js/mathjax/a11y/assistive-mml.js +1 -0
  148. package/dist/js/mathjax/a11y/complexity.js +1 -0
  149. package/dist/js/mathjax/a11y/explorer.js +1 -0
  150. package/dist/js/mathjax/a11y/semantic-enrich.js +1 -0
  151. package/dist/js/mathjax/input/asciimath.js +1 -0
  152. package/dist/js/mathjax/input/mml/entities.js +1 -0
  153. package/dist/js/mathjax/input/mml.js +1 -0
  154. package/dist/js/mathjax/input/tex/extensions/action.js +1 -0
  155. package/dist/js/mathjax/input/tex/extensions/all-packages.js +1 -0
  156. package/dist/js/mathjax/input/tex/extensions/ams.js +1 -0
  157. package/dist/js/mathjax/input/tex/extensions/amscd.js +1 -0
  158. package/dist/js/mathjax/input/tex/extensions/autoload.js +1 -0
  159. package/dist/js/mathjax/input/tex/extensions/bbox.js +1 -0
  160. package/dist/js/mathjax/input/tex/extensions/boldsymbol.js +1 -0
  161. package/dist/js/mathjax/input/tex/extensions/braket.js +1 -0
  162. package/dist/js/mathjax/input/tex/extensions/bussproofs.js +1 -0
  163. package/dist/js/mathjax/input/tex/extensions/cancel.js +1 -0
  164. package/dist/js/mathjax/input/tex/extensions/color.js +1 -0
  165. package/dist/js/mathjax/input/tex/extensions/colorV2.js +1 -0
  166. package/dist/js/mathjax/input/tex/extensions/configMacros.js +1 -0
  167. package/dist/js/mathjax/input/tex/extensions/enclose.js +1 -0
  168. package/dist/js/mathjax/input/tex/extensions/extpfeil.js +1 -0
  169. package/dist/js/mathjax/input/tex/extensions/html.js +1 -0
  170. package/dist/js/mathjax/input/tex/extensions/mhchem.js +1 -0
  171. package/dist/js/mathjax/input/tex/extensions/newcommand.js +1 -0
  172. package/dist/js/mathjax/input/tex/extensions/noerrors.js +1 -0
  173. package/dist/js/mathjax/input/tex/extensions/noundefined.js +1 -0
  174. package/dist/js/mathjax/input/tex/extensions/physics.js +1 -0
  175. package/dist/js/mathjax/input/tex/extensions/require.js +1 -0
  176. package/dist/js/mathjax/input/tex/extensions/tagFormat.js +1 -0
  177. package/dist/js/mathjax/input/tex/extensions/textmacros.js +1 -0
  178. package/dist/js/mathjax/input/tex/extensions/unicode.js +1 -0
  179. package/dist/js/mathjax/input/tex/extensions/verb.js +1 -0
  180. package/dist/js/mathjax/input/tex-base.js +1 -0
  181. package/dist/js/mathjax/input/tex-full.js +1 -0
  182. package/dist/js/mathjax/input/tex.js +1 -0
  183. package/dist/js/mathjax/sre/mathmaps/de.js +104 -0
  184. package/dist/js/mathjax/sre/mathmaps/en.js +110 -0
  185. package/dist/js/mathjax/sre/mathmaps/es.js +104 -0
  186. package/dist/js/mathjax/sre/mathmaps/fr.js +104 -0
  187. package/dist/js/mathjax/sre/mathmaps/mathmaps_ie.js +518 -0
  188. package/dist/js/mathjax/sre/mathmaps/nemeth.js +104 -0
  189. package/dist/js/mathjax/sre/sre-node.js +11 -0
  190. package/dist/js/mathjax/sre/sre_browser.js +1633 -0
  191. package/dist/js/mathjax/tex-svg-full.js +1 -0
  192. package/dist/js/mermaid/mermaid.min.js +32 -0
  193. package/dist/js/plantuml/plantuml-encoder.min.js +1 -0
  194. package/dist/method.d.ts +48 -0
  195. package/dist/method.min.js +2346 -0
  196. package/dist/ts/constants.d.ts +43 -0
  197. package/dist/ts/devtools/index.d.ts +7 -0
  198. package/dist/ts/export/index.d.ts +5 -0
  199. package/dist/ts/hint/index.d.ts +14 -0
  200. package/dist/ts/ir/expandMarker.d.ts +2 -0
  201. package/dist/ts/ir/highlightToolbarIR.d.ts +2 -0
  202. package/dist/ts/ir/index.d.ts +13 -0
  203. package/dist/ts/ir/input.d.ts +2 -0
  204. package/dist/ts/ir/process.d.ts +9 -0
  205. package/dist/ts/ir/processKeydown.d.ts +2 -0
  206. package/dist/ts/markdown/abcRender.d.ts +1 -0
  207. package/dist/ts/markdown/adapterRender.d.ts +33 -0
  208. package/dist/ts/markdown/anchorRender.d.ts +1 -0
  209. package/dist/ts/markdown/chartRender.d.ts +1 -0
  210. package/dist/ts/markdown/codeRender.d.ts +1 -0
  211. package/dist/ts/markdown/flowchartRender.d.ts +1 -0
  212. package/dist/ts/markdown/getHTML.d.ts +2 -0
  213. package/dist/ts/markdown/getMarkdown.d.ts +2 -0
  214. package/dist/ts/markdown/graphvizRender.d.ts +1 -0
  215. package/dist/ts/markdown/highlightRender.d.ts +2 -0
  216. package/dist/ts/markdown/lazyLoadImageRender.d.ts +6 -0
  217. package/dist/ts/markdown/mathRender.d.ts +10 -0
  218. package/dist/ts/markdown/mediaRender.d.ts +1 -0
  219. package/dist/ts/markdown/mermaidRender.d.ts +1 -0
  220. package/dist/ts/markdown/mindmapRender.d.ts +1 -0
  221. package/dist/ts/markdown/outlineRender.d.ts +2 -0
  222. package/dist/ts/markdown/plantumlRender.d.ts +1 -0
  223. package/dist/ts/markdown/previewRender.d.ts +3 -0
  224. package/dist/ts/markdown/setLute.d.ts +2 -0
  225. package/dist/ts/markdown/speechRender.d.ts +7 -0
  226. package/dist/ts/outline/index.d.ts +7 -0
  227. package/dist/ts/preview/image.d.ts +2 -0
  228. package/dist/ts/preview/index.d.ts +9 -0
  229. package/dist/ts/resize/index.d.ts +6 -0
  230. package/dist/ts/sv/index.d.ts +13 -0
  231. package/dist/ts/sv/inputEvent.d.ts +2 -0
  232. package/dist/ts/sv/process.d.ts +12 -0
  233. package/dist/ts/sv/processKeydown.d.ts +2 -0
  234. package/dist/ts/tip/index.d.ts +6 -0
  235. package/dist/ts/toolbar/Both.d.ts +5 -0
  236. package/dist/ts/toolbar/Br.d.ts +4 -0
  237. package/dist/ts/toolbar/CodeTheme.d.ts +6 -0
  238. package/dist/ts/toolbar/ContentTheme.d.ts +6 -0
  239. package/dist/ts/toolbar/Counter.d.ts +6 -0
  240. package/dist/ts/toolbar/Custom.d.ts +5 -0
  241. package/dist/ts/toolbar/Devtools.d.ts +5 -0
  242. package/dist/ts/toolbar/Divider.d.ts +4 -0
  243. package/dist/ts/toolbar/EditMode.d.ts +8 -0
  244. package/dist/ts/toolbar/Emoji.d.ts +7 -0
  245. package/dist/ts/toolbar/Export.d.ts +6 -0
  246. package/dist/ts/toolbar/Fullscreen.d.ts +6 -0
  247. package/dist/ts/toolbar/Headings.d.ts +7 -0
  248. package/dist/ts/toolbar/Help.d.ts +5 -0
  249. package/dist/ts/toolbar/Indent.d.ts +5 -0
  250. package/dist/ts/toolbar/Info.d.ts +5 -0
  251. package/dist/ts/toolbar/InsertAfter.d.ts +5 -0
  252. package/dist/ts/toolbar/InsertBefore.d.ts +5 -0
  253. package/dist/ts/toolbar/MenuItem.d.ts +5 -0
  254. package/dist/ts/toolbar/Outdent.d.ts +5 -0
  255. package/dist/ts/toolbar/Outline.d.ts +5 -0
  256. package/dist/ts/toolbar/Preview.d.ts +6 -0
  257. package/dist/ts/toolbar/Record.d.ts +6 -0
  258. package/dist/ts/toolbar/Redo.d.ts +5 -0
  259. package/dist/ts/toolbar/Undo.d.ts +5 -0
  260. package/dist/ts/toolbar/Upload.d.ts +6 -0
  261. package/dist/ts/toolbar/index.d.ts +9 -0
  262. package/dist/ts/toolbar/setToolbar.d.ts +21 -0
  263. package/dist/ts/ui/initUI.d.ts +9 -0
  264. package/dist/ts/ui/setCodeTheme.d.ts +1 -0
  265. package/dist/ts/ui/setContentTheme.d.ts +1 -0
  266. package/dist/ts/ui/setPreviewMode.d.ts +2 -0
  267. package/dist/ts/ui/setTheme.d.ts +2 -0
  268. package/dist/ts/undo/index.d.ts +19 -0
  269. package/dist/ts/upload/getElement.d.ts +2 -0
  270. package/dist/ts/upload/index.d.ts +9 -0
  271. package/dist/ts/upload/setHeaders.d.ts +2 -0
  272. package/dist/ts/util/Options.d.ts +8 -0
  273. package/dist/ts/util/RecordMedia.d.ts +18 -0
  274. package/dist/ts/util/addScript.d.ts +2 -0
  275. package/dist/ts/util/addStyle.d.ts +1 -0
  276. package/dist/ts/util/code160to32.d.ts +1 -0
  277. package/dist/ts/util/compatibility.d.ts +7 -0
  278. package/dist/ts/util/editorCommonEvent.d.ts +10 -0
  279. package/dist/ts/util/fixBrowserBehavior.d.ts +40 -0
  280. package/dist/ts/util/getSelectText.d.ts +1 -0
  281. package/dist/ts/util/hasClosest.d.ts +9 -0
  282. package/dist/ts/util/hasClosestByHeadings.d.ts +2 -0
  283. package/dist/ts/util/highlightToolbar.d.ts +2 -0
  284. package/dist/ts/util/hotKey.d.ts +1 -0
  285. package/dist/ts/util/log.d.ts +1 -0
  286. package/dist/ts/util/merge.d.ts +1 -0
  287. package/dist/ts/util/processCode.d.ts +3 -0
  288. package/dist/ts/util/selection.d.ts +15 -0
  289. package/dist/ts/util/toc.d.ts +6 -0
  290. package/dist/ts/wysiwyg/afterRenderEvent.d.ts +6 -0
  291. package/dist/ts/wysiwyg/highlightToolbarWYSIWYG.d.ts +5 -0
  292. package/dist/ts/wysiwyg/index.d.ts +20 -0
  293. package/dist/ts/wysiwyg/inlineTag.d.ts +11 -0
  294. package/dist/ts/wysiwyg/input.d.ts +2 -0
  295. package/dist/ts/wysiwyg/processKeydown.d.ts +3 -0
  296. package/dist/ts/wysiwyg/renderDomByMd.d.ts +6 -0
  297. package/dist/ts/wysiwyg/setHeading.d.ts +3 -0
  298. package/dist/ts/wysiwyg/showCode.d.ts +2 -0
  299. package/dist/ts/wysiwyg/toolbarEvent.d.ts +2 -0
  300. package/dist/types/index.d.ts +772 -0
  301. package/package.json +69 -0
  302. package/src/assets/.DS_Store +0 -0
  303. package/src/assets/scss/_content.scss +284 -0
  304. package/src/assets/scss/_hint.scss +67 -0
  305. package/src/assets/scss/_ir.scss +275 -0
  306. package/src/assets/scss/_panel.scss +110 -0
  307. package/src/assets/scss/_reset.scss +603 -0
  308. package/src/assets/scss/_sv.scss +133 -0
  309. package/src/assets/scss/_toolbar.scss +180 -0
  310. package/src/assets/scss/_tooltipped.scss +171 -0
  311. package/src/assets/scss/_wysiwyg.scss +195 -0
  312. package/src/assets/scss/index.scss +83 -0
  313. package/src/index.ts +502 -0
  314. package/src/method.ts +65 -0
  315. package/src/ts/.DS_Store +0 -0
  316. package/src/ts/constants.ts +64 -0
  317. package/src/ts/devtools/index.ts +83 -0
  318. package/src/ts/export/index.ts +81 -0
  319. package/src/ts/hint/index.ts +267 -0
  320. package/src/ts/ir/expandMarker.ts +79 -0
  321. package/src/ts/ir/highlightToolbarIR.ts +97 -0
  322. package/src/ts/ir/index.ts +251 -0
  323. package/src/ts/ir/input.ts +231 -0
  324. package/src/ts/ir/process.ts +220 -0
  325. package/src/ts/ir/processKeydown.ts +238 -0
  326. package/src/ts/markdown/abcRender.ts +27 -0
  327. package/src/ts/markdown/adapterRender.ts +33 -0
  328. package/src/ts/markdown/anchorRender.ts +19 -0
  329. package/src/ts/markdown/chartRender.ts +37 -0
  330. package/src/ts/markdown/codeRender.ts +50 -0
  331. package/src/ts/markdown/flowchartRender.ts +25 -0
  332. package/src/ts/markdown/getHTML.ts +11 -0
  333. package/src/ts/markdown/getMarkdown.ts +12 -0
  334. package/src/ts/markdown/graphvizRender.ts +49 -0
  335. package/src/ts/markdown/highlightRender.ts +82 -0
  336. package/src/ts/markdown/lazyLoadImageRender.ts +56 -0
  337. package/src/ts/markdown/mathRender.ts +142 -0
  338. package/src/ts/markdown/mediaRender.ts +78 -0
  339. package/src/ts/markdown/mermaidRender.ts +127 -0
  340. package/src/ts/markdown/mindmapRender.ts +74 -0
  341. package/src/ts/markdown/outlineRender.ts +106 -0
  342. package/src/ts/markdown/plantumlRender.ts +32 -0
  343. package/src/ts/markdown/previewRender.ts +143 -0
  344. package/src/ts/markdown/setLute.ts +23 -0
  345. package/src/ts/markdown/speechRender.ts +97 -0
  346. package/src/ts/outline/index.ts +47 -0
  347. package/src/ts/preview/image.ts +50 -0
  348. package/src/ts/preview/index.ts +266 -0
  349. package/src/ts/resize/index.ts +57 -0
  350. package/src/ts/sv/index.ts +119 -0
  351. package/src/ts/sv/inputEvent.ts +207 -0
  352. package/src/ts/sv/process.ts +210 -0
  353. package/src/ts/sv/processKeydown.ts +196 -0
  354. package/src/ts/tip/index.ts +31 -0
  355. package/src/ts/toolbar/Both.ts +28 -0
  356. package/src/ts/toolbar/Br.ts +8 -0
  357. package/src/ts/toolbar/CodeTheme.ts +36 -0
  358. package/src/ts/toolbar/ContentTheme.ts +35 -0
  359. package/src/ts/toolbar/Counter.ts +40 -0
  360. package/src/ts/toolbar/Custom.ts +17 -0
  361. package/src/ts/toolbar/Devtools.ts +28 -0
  362. package/src/ts/toolbar/Divider.ts +8 -0
  363. package/src/ts/toolbar/EditMode.ts +193 -0
  364. package/src/ts/toolbar/Emoji.ts +75 -0
  365. package/src/ts/toolbar/Export.ts +41 -0
  366. package/src/ts/toolbar/Fullscreen.ts +61 -0
  367. package/src/ts/toolbar/Headings.ts +69 -0
  368. package/src/ts/toolbar/Help.ts +30 -0
  369. package/src/ts/toolbar/Indent.ts +25 -0
  370. package/src/ts/toolbar/Info.ts +43 -0
  371. package/src/ts/toolbar/InsertAfter.ts +18 -0
  372. package/src/ts/toolbar/InsertBefore.ts +18 -0
  373. package/src/ts/toolbar/MenuItem.ts +54 -0
  374. package/src/ts/toolbar/Outdent.ts +24 -0
  375. package/src/ts/toolbar/Outline.ts +21 -0
  376. package/src/ts/toolbar/Preview.ts +55 -0
  377. package/src/ts/toolbar/Record.ts +60 -0
  378. package/src/ts/toolbar/Redo.ts +18 -0
  379. package/src/ts/toolbar/Undo.ts +18 -0
  380. package/src/ts/toolbar/Upload.ts +41 -0
  381. package/src/ts/toolbar/index.ts +175 -0
  382. package/src/ts/toolbar/setToolbar.ts +120 -0
  383. package/src/ts/ui/initUI.ts +164 -0
  384. package/src/ts/ui/setCodeTheme.ts +16 -0
  385. package/src/ts/ui/setContentTheme.ts +15 -0
  386. package/src/ts/ui/setPreviewMode.ts +31 -0
  387. package/src/ts/ui/setTheme.ts +7 -0
  388. package/src/ts/undo/index.ts +255 -0
  389. package/src/ts/upload/getElement.ts +10 -0
  390. package/src/ts/upload/index.ts +257 -0
  391. package/src/ts/upload/setHeaders.ts +10 -0
  392. package/src/ts/util/Options.ts +429 -0
  393. package/src/ts/util/RecordMedia.ts +170 -0
  394. package/src/ts/util/addScript.ts +40 -0
  395. package/src/ts/util/addStyle.ts +10 -0
  396. package/src/ts/util/code160to32.ts +4 -0
  397. package/src/ts/util/compatibility.ts +67 -0
  398. package/src/ts/util/editorCommonEvent.ts +254 -0
  399. package/src/ts/util/fixBrowserBehavior.ts +1459 -0
  400. package/src/ts/util/getSelectText.ts +8 -0
  401. package/src/ts/util/hasClosest.ts +154 -0
  402. package/src/ts/util/hasClosestByHeadings.ts +27 -0
  403. package/src/ts/util/highlightToolbar.ts +10 -0
  404. package/src/ts/util/hotKey.ts +54 -0
  405. package/src/ts/util/log.ts +6 -0
  406. package/src/ts/util/merge.ts +18 -0
  407. package/src/ts/util/processCode.ts +90 -0
  408. package/src/ts/util/selection.ts +275 -0
  409. package/src/ts/util/toc.ts +83 -0
  410. package/src/ts/wysiwyg/afterRenderEvent.ts +41 -0
  411. package/src/ts/wysiwyg/highlightToolbarWYSIWYG.ts +1105 -0
  412. package/src/ts/wysiwyg/index.ts +547 -0
  413. package/src/ts/wysiwyg/inlineTag.ts +129 -0
  414. package/src/ts/wysiwyg/input.ts +210 -0
  415. package/src/ts/wysiwyg/processKeydown.ts +363 -0
  416. package/src/ts/wysiwyg/renderDomByMd.ts +18 -0
  417. package/src/ts/wysiwyg/setHeading.ts +43 -0
  418. package/src/ts/wysiwyg/showCode.ts +32 -0
  419. package/src/ts/wysiwyg/toolbarEvent.ts +333 -0
@@ -0,0 +1,64 @@
1
+ declare const VDITOR_VERSION: string;
2
+
3
+ const _VDITOR_VERSION = VDITOR_VERSION;
4
+
5
+ export {_VDITOR_VERSION as VDITOR_VERSION};
6
+
7
+ export abstract class Constants {
8
+ public static readonly ZWSP: string = "\u200b";
9
+ public static readonly DROP_EDITOR: string = "application/editor";
10
+ public static readonly MOBILE_WIDTH: number = 520;
11
+ public static readonly CLASS_MENU_DISABLED: string = "vditor-menu--disabled";
12
+ public static readonly EDIT_TOOLBARS: string[] = ["emoji", "headings", "bold", "italic", "strike", "link", "list",
13
+ "ordered-list", "outdent", "indent", "check", "line", "quote", "code", "inline-code", "insert-after",
14
+ "insert-before", "upload", "record", "table"];
15
+ public static readonly CODE_THEME: string[] = ["abap", "algol", "algol_nu", "arduino", "autumn", "borland", "bw",
16
+ "colorful", "dracula", "emacs", "friendly", "fruity", "github", "igor", "lovelace", "manni", "monokai",
17
+ "monokailight", "murphy", "native", "paraiso-dark", "paraiso-light", "pastie", "perldoc", "pygments",
18
+ "rainbow_dash", "rrt", "solarized-dark", "solarized-dark256", "solarized-light", "swapoff", "tango", "trac",
19
+ "vim", "vs", "xcode", "ant-design"];
20
+ public static readonly CODE_LANGUAGES: string[] = ["mermaid", "echarts", "mindmap", "plantuml", "abc", "graphviz", "flowchart", "apache",
21
+ "js", "ts", "html",
22
+ // common
23
+ "properties", "apache", "bash", "c", "csharp", "cpp", "css", "coffeescript", "diff", "go", "xml", "http",
24
+ "json", "java", "javascript", "kotlin", "less", "lua", "makefile", "markdown", "nginx", "objectivec", "php",
25
+ "php-template", "perl", "plaintext", "python", "python-repl", "r", "ruby", "rust", "scss", "sql", "shell",
26
+ "swift", "ini", "typescript", "vbnet", "yaml",
27
+ "ada", "clojure", "dart", "erb", "fortran", "gradle", "haskell", "julia", "julia-repl", "lisp", "matlab",
28
+ "pgsql", "powershell", "sql_more", "stata", "cmake", "mathematica"];
29
+ public static readonly CDN = `https://cdn.jsdelivr.net/npm/vditor@${VDITOR_VERSION}`;
30
+ public static readonly MARKDOWN_OPTIONS = {
31
+ autoSpace: false,
32
+ codeBlockPreview: true,
33
+ fixTermTypo: false,
34
+ footnotes: true,
35
+ linkBase: "",
36
+ linkPrefix: "",
37
+ listStyle: false,
38
+ mark: false,
39
+ mathBlockPreview: true,
40
+ paragraphBeginningSpace: false,
41
+ sanitize: true,
42
+ toc: false,
43
+ };
44
+ public static readonly HLJS_OPTIONS = {
45
+ enable: true,
46
+ lineNumber: false,
47
+ style: "github",
48
+ };
49
+ public static readonly MATH_OPTIONS: IMath = {
50
+ engine: "KaTeX",
51
+ inlineDigit: false,
52
+ macros: {},
53
+ };
54
+ public static readonly THEME_OPTIONS = {
55
+ current: "light",
56
+ list: {
57
+ "ant-design": "Ant Design",
58
+ "dark": "Dark",
59
+ "light": "Light",
60
+ "wechat": "WeChat",
61
+ },
62
+ path: `${Constants.CDN}/dist/css/content-theme`,
63
+ };
64
+ }
@@ -0,0 +1,83 @@
1
+ import {getMarkdown} from "../markdown/getMarkdown";
2
+ import {addScript} from "../util/addScript";
3
+
4
+ declare const echarts: {
5
+ init(element: HTMLElement): IEChart;
6
+ };
7
+
8
+ export class DevTools {
9
+ public element: HTMLDivElement;
10
+ private ASTChart: IEChart;
11
+
12
+ constructor() {
13
+ this.element = document.createElement("div");
14
+ this.element.className = "vditor-devtools";
15
+ this.element.innerHTML = '<div class="vditor-reset--error"></div><div style="height: 100%;"></div>';
16
+ }
17
+
18
+ public renderEchart(vditor: IVditor) {
19
+ if (vditor.devtools.element.style.display !== "block") {
20
+ return;
21
+ }
22
+
23
+ addScript(`${vditor.options.cdn}/dist/js/echarts/echarts.min.js`, "vditorEchartsScript").then(() => {
24
+ if (!this.ASTChart) {
25
+ this.ASTChart = echarts.init(vditor.devtools.element.lastElementChild as HTMLDivElement);
26
+ }
27
+ try {
28
+ (this.element.lastElementChild as HTMLElement).style.display = "block";
29
+ this.element.firstElementChild.innerHTML = "";
30
+ this.ASTChart.setOption({
31
+ series: [
32
+ {
33
+ data: JSON.parse(vditor.lute.RenderEChartsJSON(getMarkdown(vditor))),
34
+ initialTreeDepth: -1,
35
+ label: {
36
+ align: "left",
37
+ backgroundColor: "rgba(68, 77, 86, .68)",
38
+ borderRadius: 3,
39
+ color: "#d1d5da",
40
+ fontSize: 12,
41
+ lineHeight: 12,
42
+ offset: [9, 12],
43
+ padding: [2, 4, 2, 4],
44
+ position: "top",
45
+ verticalAlign: "middle",
46
+ },
47
+ lineStyle: {
48
+ color: "#4285f4",
49
+ type: "curve",
50
+ width: 1,
51
+ },
52
+ orient: "vertical",
53
+ roam: true,
54
+ type: "tree",
55
+ },
56
+ ],
57
+ toolbox: {
58
+ bottom: 25,
59
+ emphasis: {
60
+ iconStyle: {
61
+ color: "#4285f4",
62
+ },
63
+ },
64
+ feature: {
65
+ restore: {
66
+ show: true,
67
+ },
68
+ saveAsImage: {
69
+ show: true,
70
+ },
71
+ },
72
+ right: 15,
73
+ show: true,
74
+ },
75
+ });
76
+ this.ASTChart.resize();
77
+ } catch (e) {
78
+ (this.element.lastElementChild as HTMLElement).style.display = "none";
79
+ this.element.firstElementChild.innerHTML = e;
80
+ }
81
+ });
82
+ }
83
+ }
@@ -0,0 +1,81 @@
1
+ import {getHTML} from "../markdown/getHTML";
2
+ import {getMarkdown} from "../markdown/getMarkdown";
3
+
4
+ export const download = (vditor: IVditor, content: string, filename: string) => {
5
+ const aElement = document.createElement("a");
6
+ if ("download" in aElement) {
7
+ aElement.download = filename;
8
+ aElement.style.display = "none";
9
+ aElement.href = URL.createObjectURL(new Blob([content]));
10
+
11
+ document.body.appendChild(aElement);
12
+ aElement.click();
13
+ aElement.remove();
14
+ } else {
15
+ vditor.tip.show(window.VditorI18n.downloadTip, 0);
16
+ }
17
+ };
18
+
19
+ export const exportMarkdown = (vditor: IVditor) => {
20
+ const content = getMarkdown(vditor);
21
+ download(vditor, content, content.substr(0, 10) + ".md");
22
+ };
23
+
24
+ export const exportPDF = (vditor: IVditor) => {
25
+ vditor.tip.show(window.VditorI18n.generate, 3800);
26
+ const iframe = document.querySelector("iframe");
27
+ iframe.contentDocument.open();
28
+ iframe.contentDocument.write(`<link rel="stylesheet" href="${vditor.options.cdn}/dist/index.css"/>
29
+ <script src="${vditor.options.cdn}/dist/method.min.js"></script>
30
+ <div id="preview"></div>
31
+ <script>
32
+ window.addEventListener("message", (e) => {
33
+ if(!e.data) {
34
+ return;
35
+ }
36
+ Vditor.preview(document.getElementById('preview'), e.data, {
37
+ markdown: {
38
+ theme: "${vditor.options.preview.theme}"
39
+ },
40
+ hljs: {
41
+ style: "${vditor.options.preview.hljs.style}"
42
+ }
43
+ });
44
+ setTimeout(() => {
45
+ window.print();
46
+ }, 3600);
47
+ }, false);
48
+ </script>`);
49
+ iframe.contentDocument.close();
50
+ setTimeout(() => {
51
+ iframe.contentWindow.postMessage(getMarkdown(vditor), "*");
52
+ }, 200);
53
+ };
54
+
55
+ export const exportHTML = (vditor: IVditor) => {
56
+ const content = getHTML(vditor);
57
+ const html = `<html><head><link rel="stylesheet" type="text/css" href="${vditor.options.cdn}/dist/index.css"/>
58
+ <script src="${vditor.options.cdn}/dist/js/i18n/${vditor.options.lang}.js"></script>
59
+ <script src="${vditor.options.cdn}/dist/method.min.js"></script></head>
60
+ <body><div class="vditor-reset" id="preview">${content}</div>
61
+ <script>
62
+ const previewElement = document.getElementById('preview')
63
+ Vditor.setContentTheme('${vditor.options.preview.theme.current}', '${vditor.options.preview.theme.path}');
64
+ Vditor.codeRender(previewElement);
65
+ Vditor.highlightRender(${JSON.stringify(vditor.options.preview.hljs)}, previewElement, '${vditor.options.cdn}');
66
+ Vditor.mathRender(previewElement, {
67
+ cdn: '${vditor.options.cdn}',
68
+ math: ${JSON.stringify(vditor.options.preview.math)},
69
+ });
70
+ Vditor.mermaidRender(previewElement, '${vditor.options.cdn}', '${vditor.options.theme}');
71
+ Vditor.flowchartRender(previewElement, '${vditor.options.cdn}');
72
+ Vditor.graphvizRender(previewElement, '${vditor.options.cdn}');
73
+ Vditor.chartRender(previewElement, '${vditor.options.cdn}', '${vditor.options.theme}');
74
+ Vditor.mindmapRender(previewElement, '${vditor.options.cdn}', '${vditor.options.theme}');
75
+ Vditor.abcRender(previewElement, '${vditor.options.cdn}');
76
+ Vditor.mediaRender(previewElement);
77
+ Vditor.speechRender(previewElement);
78
+ </script>
79
+ <script src="${vditor.options.cdn}/dist/js/icons/${vditor.options.icon}.js"></script></body></html>`;
80
+ download(vditor, html, content.substr(0, 10) + ".html");
81
+ };
@@ -0,0 +1,267 @@
1
+ import {Constants} from "../constants";
2
+ import {processAfterRender} from "../ir/process";
3
+ import {code160to32} from "../util/code160to32";
4
+ import {isCtrl} from "../util/compatibility";
5
+ import {execAfterRender} from "../util/fixBrowserBehavior";
6
+ import {hasClosestByAttribute, hasClosestByClassName} from "../util/hasClosest";
7
+ import {processCodeRender} from "../util/processCode";
8
+ import {getCursorPosition, insertHTML, setSelectionFocus} from "../util/selection";
9
+
10
+ export class Hint {
11
+ public timeId: number;
12
+ public element: HTMLDivElement;
13
+ public recentLanguage: string;
14
+ private splitChar = "";
15
+ private lastIndex = -1;
16
+
17
+ constructor(hintExtends: IHintExtend[]) {
18
+ this.timeId = -1;
19
+ this.element = document.createElement("div");
20
+ this.element.className = "vditor-hint";
21
+ this.recentLanguage = "";
22
+ hintExtends.push({key: ":"});
23
+ }
24
+
25
+ public render(vditor: IVditor) {
26
+ if (!window.getSelection().focusNode) {
27
+ return;
28
+ }
29
+ let currentLineValue: string;
30
+ const range = getSelection().getRangeAt(0);
31
+ currentLineValue = range.startContainer.textContent.substring(0, range.startOffset) || "";
32
+
33
+ const key = this.getKey(currentLineValue, vditor.options.hint.extend);
34
+
35
+ if (typeof key === "undefined") {
36
+ this.element.style.display = "none";
37
+ clearTimeout(this.timeId);
38
+ } else {
39
+ if (this.splitChar === ":") {
40
+ const emojiHint = key === "" ? vditor.options.hint.emoji : vditor.lute.GetEmojis();
41
+ const matchEmojiData: IHintData[] = [];
42
+ Object.keys(emojiHint).forEach((keyName) => {
43
+ if (keyName.indexOf(key.toLowerCase()) === 0) {
44
+ if (emojiHint[keyName].indexOf(".") > -1) {
45
+ matchEmojiData.push({
46
+ html: `<img src="${emojiHint[keyName]}" title=":${keyName}:"/> :${keyName}:`,
47
+ value: `:${keyName}:`,
48
+ });
49
+ } else {
50
+ matchEmojiData.push({
51
+ html: `<span class="vditor-hint__emoji">${emojiHint[keyName]}</span>${keyName}`,
52
+ value: emojiHint[keyName],
53
+ });
54
+ }
55
+ }
56
+ });
57
+ this.genHTML(matchEmojiData, key, vditor);
58
+ } else {
59
+ vditor.options.hint.extend.forEach((item) => {
60
+ if (item.key === this.splitChar) {
61
+ clearTimeout(this.timeId);
62
+ this.timeId = window.setTimeout(() => {
63
+ this.genHTML(item.hint(key), key, vditor);
64
+ }, vditor.options.hint.delay);
65
+ }
66
+ });
67
+ }
68
+ }
69
+ }
70
+
71
+ public genHTML(data: IHintData[], key: string, vditor: IVditor) {
72
+ if (data.length === 0) {
73
+ this.element.style.display = "none";
74
+ return;
75
+ }
76
+
77
+ const editorElement = vditor[vditor.currentMode].element;
78
+ const textareaPosition = getCursorPosition(editorElement);
79
+ const x = textareaPosition.left +
80
+ (vditor.options.outline.position === "left" ? vditor.outline.element.offsetWidth : 0);
81
+ const y = textareaPosition.top;
82
+ let hintsHTML = "";
83
+
84
+ data.forEach((hintData, i) => {
85
+ if (i > 7) {
86
+ return;
87
+ }
88
+ // process high light
89
+ let html = hintData.html;
90
+ if (key !== "") {
91
+ const lastIndex = html.lastIndexOf(">") + 1;
92
+ let replaceHtml = html.substr(lastIndex);
93
+ const replaceIndex = replaceHtml.toLowerCase().indexOf(key.toLowerCase());
94
+ if (replaceIndex > -1) {
95
+ replaceHtml = replaceHtml.substring(0, replaceIndex) + "<b>" +
96
+ replaceHtml.substring(replaceIndex, replaceIndex + key.length) + "</b>" +
97
+ replaceHtml.substring(replaceIndex + key.length);
98
+ html = html.substr(0, lastIndex) + replaceHtml;
99
+ }
100
+ }
101
+ hintsHTML += `<button data-value="${encodeURIComponent(hintData.value)} "
102
+ ${i === 0 ? "class='vditor-hint--current'" : ""}> ${html}</button>`;
103
+ });
104
+
105
+ this.element.innerHTML = hintsHTML;
106
+ const lineHeight = parseInt(document.defaultView.getComputedStyle(editorElement, null)
107
+ .getPropertyValue("line-height"), 10);
108
+ this.element.style.top = `${y + (lineHeight || 22)}px`;
109
+ this.element.style.left = `${x}px`;
110
+ this.element.style.display = "block";
111
+ this.element.style.right = "auto";
112
+
113
+ this.element.querySelectorAll("button").forEach((element) => {
114
+ element.addEventListener("click", (event) => {
115
+ this.fillEmoji(element, vditor);
116
+ event.preventDefault();
117
+ });
118
+ });
119
+ // hint 展现在上部
120
+ if (this.element.getBoundingClientRect().bottom > window.innerHeight) {
121
+ this.element.style.top = `${y - this.element.offsetHeight}px`;
122
+ }
123
+ if (this.element.getBoundingClientRect().right > window.innerWidth) {
124
+ this.element.style.left = "auto";
125
+ this.element.style.right = "0";
126
+ }
127
+ }
128
+
129
+ public fillEmoji = (element: HTMLElement, vditor: IVditor) => {
130
+ this.element.style.display = "none";
131
+
132
+ const value = decodeURIComponent(element.getAttribute("data-value"));
133
+ const range: Range = window.getSelection().getRangeAt(0);
134
+
135
+ // 代码提示
136
+ if (vditor.currentMode === "ir") {
137
+ const preBeforeElement = hasClosestByAttribute(range.startContainer, "data-type", "code-block-info");
138
+ if (preBeforeElement) {
139
+ preBeforeElement.textContent = Constants.ZWSP + value.trimRight();
140
+ range.selectNodeContents(preBeforeElement);
141
+ range.collapse(false);
142
+ processAfterRender(vditor);
143
+ preBeforeElement.parentElement.querySelectorAll("code").forEach((item) => {
144
+ item.className = "language-" + value.trimRight();
145
+ });
146
+ processCodeRender(preBeforeElement.parentElement.querySelector(".vditor-ir__preview"), vditor);
147
+ this.recentLanguage = value.trimRight();
148
+ return;
149
+ }
150
+ }
151
+ if (vditor.currentMode === "wysiwyg" && range.startContainer.nodeType !== 3 &&
152
+ (range.startContainer as HTMLElement).firstElementChild.classList.contains("vditor-input")) {
153
+ const inputElement = (range.startContainer as HTMLElement).firstElementChild as HTMLInputElement;
154
+ inputElement.value = value.trimRight();
155
+ range.selectNodeContents(inputElement);
156
+ range.collapse(false);
157
+ inputElement.dispatchEvent(new CustomEvent("input"));
158
+ this.recentLanguage = value.trimRight();
159
+ return;
160
+ }
161
+
162
+ range.setStart(range.startContainer, this.lastIndex);
163
+ range.deleteContents();
164
+
165
+ if (vditor.options.hint.parse) {
166
+ if (vditor.currentMode === "sv") {
167
+ insertHTML(vditor.lute.SpinVditorSVDOM(value), vditor);
168
+ } else if (vditor.currentMode === "wysiwyg") {
169
+ insertHTML(vditor.lute.SpinVditorDOM(value), vditor);
170
+ } else {
171
+ insertHTML(vditor.lute.SpinVditorIRDOM(value), vditor);
172
+ }
173
+ } else {
174
+ insertHTML(value, vditor);
175
+ }
176
+ if (this.splitChar === ":" && value.indexOf(":") > -1 && vditor.currentMode !== "sv") {
177
+ range.insertNode(document.createTextNode(" "));
178
+ }
179
+ range.collapse(false);
180
+ setSelectionFocus(range);
181
+
182
+ if (vditor.currentMode === "wysiwyg") {
183
+ const preElement = hasClosestByClassName(range.startContainer, "vditor-wysiwyg__block");
184
+ if (preElement && preElement.lastElementChild.classList.contains("vditor-wysiwyg__preview")) {
185
+ preElement.lastElementChild.innerHTML = preElement.firstElementChild.innerHTML;
186
+ processCodeRender(preElement.lastElementChild as HTMLElement, vditor);
187
+ }
188
+ } else if (vditor.currentMode === "ir") {
189
+ const preElement = hasClosestByClassName(range.startContainer, "vditor-ir__marker--pre");
190
+ if (preElement && preElement.nextElementSibling.classList.contains("vditor-ir__preview")) {
191
+ preElement.nextElementSibling.innerHTML = preElement.innerHTML;
192
+ processCodeRender(preElement.nextElementSibling as HTMLElement, vditor);
193
+ }
194
+ }
195
+ execAfterRender(vditor);
196
+ }
197
+
198
+ public select(event: KeyboardEvent, vditor: IVditor) {
199
+
200
+ if (this.element.querySelectorAll("button").length === 0 ||
201
+ this.element.style.display === "none") {
202
+ return false;
203
+ }
204
+
205
+ const currentHintElement: HTMLElement = this.element.querySelector(".vditor-hint--current");
206
+
207
+ if (event.key === "ArrowDown") {
208
+ event.preventDefault();
209
+ event.stopPropagation();
210
+ currentHintElement.removeAttribute("class");
211
+ if (!currentHintElement.nextElementSibling) {
212
+ this.element.children[0].className = "vditor-hint--current";
213
+ } else {
214
+ currentHintElement.nextElementSibling.className = "vditor-hint--current";
215
+ }
216
+ return true;
217
+ } else if (event.key === "ArrowUp") {
218
+ event.preventDefault();
219
+ event.stopPropagation();
220
+ currentHintElement.removeAttribute("class");
221
+ if (!currentHintElement.previousElementSibling) {
222
+ const length = this.element.children.length;
223
+ this.element.children[length - 1].className = "vditor-hint--current";
224
+ } else {
225
+ currentHintElement.previousElementSibling.className = "vditor-hint--current";
226
+ }
227
+ return true;
228
+ } else if (!isCtrl(event) && !event.shiftKey && !event.altKey && event.key === "Enter" && !event.isComposing) {
229
+ event.preventDefault();
230
+ event.stopPropagation();
231
+ this.fillEmoji(currentHintElement, vditor);
232
+ return true;
233
+ }
234
+ return false;
235
+ }
236
+
237
+ private getKey(currentLineValue: string, extend: IHintExtend[]) {
238
+ this.lastIndex = -1;
239
+ this.splitChar = "";
240
+ extend.forEach((item) => {
241
+ const currentLastIndex = currentLineValue.lastIndexOf(item.key);
242
+ if (this.lastIndex < currentLastIndex) {
243
+ this.splitChar = item.key;
244
+ this.lastIndex = currentLastIndex;
245
+ }
246
+ });
247
+
248
+ let key;
249
+ if (this.lastIndex === -1) {
250
+ return key;
251
+ }
252
+ const lineArray = currentLineValue.split(this.splitChar);
253
+ const lastItem = lineArray[lineArray.length - 1];
254
+ const maxLength = 32;
255
+ if (lineArray.length > 1 && lastItem.trim() === lastItem) {
256
+ if (lineArray.length === 2 && lineArray[0] === "" && lineArray[1].length < maxLength) {
257
+ key = lineArray[1];
258
+ } else {
259
+ const preChar = lineArray[lineArray.length - 2].slice(-1);
260
+ if (code160to32(preChar) === " " && lastItem.length < maxLength) {
261
+ key = lastItem;
262
+ }
263
+ }
264
+ }
265
+ return key;
266
+ }
267
+ }
@@ -0,0 +1,79 @@
1
+ import {hasClosestByClassName, hasTopClosestByClassName} from "../util/hasClosest";
2
+ import {setSelectionFocus} from "../util/selection";
3
+
4
+ const nextIsNode = (range: Range) => {
5
+ const startContainer = range.startContainer;
6
+ if (startContainer.nodeType === 3 && startContainer.nodeValue.length !== range.startOffset) {
7
+ return false;
8
+ }
9
+
10
+ let nextNode: HTMLElement = startContainer.nextSibling as HTMLElement;
11
+
12
+ while (nextNode && nextNode.textContent === "") {
13
+ nextNode = nextNode.nextSibling as HTMLElement;
14
+ }
15
+
16
+ if (!nextNode) {
17
+ // *em*|**string**
18
+ const markerElement = hasClosestByClassName(startContainer, "vditor-ir__marker");
19
+ if (markerElement && !markerElement.nextSibling) {
20
+ const parentNextNode = startContainer.parentElement.parentElement.nextSibling as HTMLElement;
21
+ if (parentNextNode && parentNextNode.nodeType !== 3 &&
22
+ parentNextNode.classList.contains("vditor-ir__node")) {
23
+ return parentNextNode;
24
+ }
25
+ }
26
+ return false;
27
+ } else if (nextNode && nextNode.nodeType !== 3 && nextNode.classList.contains("vditor-ir__node") &&
28
+ !nextNode.getAttribute("data-block")) {
29
+ // test|*em*
30
+ return nextNode;
31
+ }
32
+
33
+ return false;
34
+ };
35
+
36
+ const previousIsNode = (range: Range) => {
37
+ const startContainer = range.startContainer;
38
+ const previousNode = startContainer.previousSibling as HTMLElement;
39
+ if (startContainer.nodeType === 3 && range.startOffset === 0 && previousNode && previousNode.nodeType !== 3 &&
40
+ // *em*|text
41
+ previousNode.classList.contains("vditor-ir__node") && !previousNode.getAttribute("data-block")) {
42
+ return previousNode;
43
+ }
44
+ return false;
45
+ };
46
+
47
+ export const expandMarker = (range: Range, vditor: IVditor) => {
48
+ vditor.ir.element.querySelectorAll(".vditor-ir__node--expand").forEach((item) => {
49
+ item.classList.remove("vditor-ir__node--expand");
50
+ });
51
+
52
+ const nodeElement = hasTopClosestByClassName(range.startContainer, "vditor-ir__node");
53
+ const nodeElementEnd = !range.collapsed && hasTopClosestByClassName(range.endContainer, "vditor-ir__node");
54
+ // 选中文本为同一个 nodeElement 内时,需要展开
55
+ if (!range.collapsed && (!nodeElement || nodeElement !== nodeElementEnd)) {
56
+ return;
57
+ }
58
+
59
+ if (nodeElement) {
60
+ nodeElement.classList.add("vditor-ir__node--expand");
61
+ nodeElement.classList.remove("vditor-ir__node--hidden");
62
+ // https://github.com/Vanessa219/vditor/issues/615 safari中光标位置跳动
63
+ setSelectionFocus(range);
64
+ }
65
+
66
+ const nextNode = nextIsNode(range);
67
+ if (nextNode) {
68
+ nextNode.classList.add("vditor-ir__node--expand");
69
+ nextNode.classList.remove("vditor-ir__node--hidden");
70
+ return;
71
+ }
72
+
73
+ const previousNode = previousIsNode(range);
74
+ if (previousNode) {
75
+ previousNode.classList.add("vditor-ir__node--expand");
76
+ previousNode.classList.remove("vditor-ir__node--hidden");
77
+ return;
78
+ }
79
+ };
@@ -0,0 +1,97 @@
1
+ import {Constants} from "../constants";
2
+ import {disableToolbar, enableToolbar, removeCurrentToolbar, setCurrentToolbar} from "../toolbar/setToolbar";
3
+ import {hasClosestByAttribute, hasClosestByMatchTag} from "../util/hasClosest";
4
+ import {hasClosestByHeadings} from "../util/hasClosestByHeadings";
5
+ import {getEditorRange, selectIsEditor} from "../util/selection";
6
+
7
+ export const highlightToolbarIR = (vditor: IVditor) => {
8
+ clearTimeout(vditor[vditor.currentMode].hlToolbarTimeoutId);
9
+ vditor[vditor.currentMode].hlToolbarTimeoutId = window.setTimeout(() => {
10
+ if (vditor[vditor.currentMode].element.getAttribute("contenteditable") === "false") {
11
+ return;
12
+ }
13
+ if (!selectIsEditor(vditor[vditor.currentMode].element)) {
14
+ return;
15
+ }
16
+
17
+ removeCurrentToolbar(vditor.toolbar.elements, Constants.EDIT_TOOLBARS);
18
+ enableToolbar(vditor.toolbar.elements, Constants.EDIT_TOOLBARS);
19
+
20
+ const range = getEditorRange(vditor);
21
+ let typeElement = range.startContainer as HTMLElement;
22
+ if (range.startContainer.nodeType === 3) {
23
+ typeElement = range.startContainer.parentElement;
24
+ }
25
+ if (typeElement.classList.contains("vditor-reset")) {
26
+ typeElement = typeElement.childNodes[range.startOffset] as HTMLElement;
27
+ }
28
+
29
+ const headingElement = vditor.currentMode === "sv" ?
30
+ hasClosestByAttribute(typeElement, "data-type", "heading") : hasClosestByHeadings(typeElement);
31
+ if (headingElement) {
32
+ setCurrentToolbar(vditor.toolbar.elements, ["headings"]);
33
+ }
34
+
35
+ const quoteElement =
36
+ vditor.currentMode === "sv" ? hasClosestByAttribute(typeElement, "data-type", "blockquote") :
37
+ hasClosestByMatchTag(typeElement, "BLOCKQUOTE");
38
+ if (quoteElement) {
39
+ setCurrentToolbar(vditor.toolbar.elements, ["quote"]);
40
+ }
41
+
42
+ const strongElement = hasClosestByAttribute(typeElement, "data-type", "strong");
43
+ if (strongElement) {
44
+ setCurrentToolbar(vditor.toolbar.elements, ["bold"]);
45
+ }
46
+
47
+ const emElement = hasClosestByAttribute(typeElement, "data-type", "em");
48
+ if (emElement) {
49
+ setCurrentToolbar(vditor.toolbar.elements, ["italic"]);
50
+ }
51
+
52
+ const sElement = hasClosestByAttribute(typeElement, "data-type", "s");
53
+ if (sElement) {
54
+ setCurrentToolbar(vditor.toolbar.elements, ["strike"]);
55
+ }
56
+
57
+ const aElement = hasClosestByAttribute(typeElement, "data-type", "a");
58
+ if (aElement) {
59
+ setCurrentToolbar(vditor.toolbar.elements, ["link"]);
60
+ }
61
+
62
+ const liElement = hasClosestByMatchTag(typeElement, "LI");
63
+ if (liElement) {
64
+ if (liElement.classList.contains("vditor-task")) {
65
+ setCurrentToolbar(vditor.toolbar.elements, ["check"]);
66
+ } else if (liElement.parentElement.tagName === "OL") {
67
+ setCurrentToolbar(vditor.toolbar.elements, ["ordered-list"]);
68
+ } else if (liElement.parentElement.tagName === "UL") {
69
+ setCurrentToolbar(vditor.toolbar.elements, ["list"]);
70
+ }
71
+ enableToolbar(vditor.toolbar.elements, ["outdent", "indent"]);
72
+ } else {
73
+ disableToolbar(vditor.toolbar.elements, ["outdent", "indent"]);
74
+ }
75
+
76
+ const codeBlockElement = hasClosestByAttribute(typeElement, "data-type", "code-block");
77
+ if (codeBlockElement) {
78
+ disableToolbar(vditor.toolbar.elements, ["headings", "bold", "italic", "strike", "line", "quote",
79
+ "list", "ordered-list", "check", "code", "inline-code", "upload", "link", "table", "record"]);
80
+ setCurrentToolbar(vditor.toolbar.elements, ["code"]);
81
+ }
82
+
83
+ const codeElement = hasClosestByAttribute(typeElement, "data-type", "code");
84
+ if (codeElement) {
85
+ disableToolbar(vditor.toolbar.elements, ["headings", "bold", "italic", "strike", "line", "quote",
86
+ "list", "ordered-list", "check", "code", "upload", "link", "table", "record"]);
87
+ setCurrentToolbar(vditor.toolbar.elements, ["inline-code"]);
88
+ }
89
+
90
+ const tableElement = hasClosestByAttribute(typeElement, "data-type", "table");
91
+ if (tableElement) {
92
+ disableToolbar(vditor.toolbar.elements, ["headings", "list", "ordered-list", "check", "line",
93
+ "quote", "code", "table"]);
94
+ }
95
+
96
+ }, 200);
97
+ };