@8btc/mditor 0.0.13 → 0.0.15

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 (267) hide show
  1. package/dist/css/content-theme/dark.css +7 -2
  2. package/dist/index.css +67 -17
  3. package/dist/index.js +438 -124
  4. package/dist/index.min.js +1 -1
  5. package/dist/js/highlight.js/styles/a11y-dark.min.css +82 -2
  6. package/dist/js/highlight.js/styles/a11y-light.min.css +80 -2
  7. package/dist/js/highlight.js/styles/agate.min.css +101 -2
  8. package/dist/js/highlight.js/styles/an-old-hope.min.css +60 -2
  9. package/dist/js/highlight.js/styles/androidstudio.min.css +57 -1
  10. package/dist/js/highlight.js/styles/arduino-light.min.css +74 -1
  11. package/dist/js/highlight.js/styles/arta.min.css +63 -1
  12. package/dist/js/highlight.js/styles/ascetic.min.css +41 -1
  13. package/dist/js/highlight.js/styles/atom-one-dark-reasonable.min.css +95 -1
  14. package/dist/js/highlight.js/styles/atom-one-dark.min.css +72 -1
  15. package/dist/js/highlight.js/styles/atom-one-light.min.css +72 -1
  16. package/dist/js/highlight.js/styles/base16/3024.min.css +97 -1
  17. package/dist/js/highlight.js/styles/base16/apathy.min.css +97 -1
  18. package/dist/js/highlight.js/styles/base16/apprentice.min.css +97 -1
  19. package/dist/js/highlight.js/styles/base16/ashes.min.css +97 -1
  20. package/dist/js/highlight.js/styles/base16/atelier-cave-light.min.css +97 -1
  21. package/dist/js/highlight.js/styles/base16/atelier-cave.min.css +97 -1
  22. package/dist/js/highlight.js/styles/base16/atelier-dune-light.min.css +97 -1
  23. package/dist/js/highlight.js/styles/base16/atelier-dune.min.css +97 -1
  24. package/dist/js/highlight.js/styles/base16/atelier-estuary-light.min.css +97 -1
  25. package/dist/js/highlight.js/styles/base16/atelier-estuary.min.css +97 -1
  26. package/dist/js/highlight.js/styles/base16/atelier-forest-light.min.css +97 -1
  27. package/dist/js/highlight.js/styles/base16/atelier-forest.min.css +97 -1
  28. package/dist/js/highlight.js/styles/base16/atelier-heath-light.min.css +97 -1
  29. package/dist/js/highlight.js/styles/base16/atelier-heath.min.css +97 -1
  30. package/dist/js/highlight.js/styles/base16/atelier-lakeside-light.min.css +97 -1
  31. package/dist/js/highlight.js/styles/base16/atelier-lakeside.min.css +97 -1
  32. package/dist/js/highlight.js/styles/base16/atelier-plateau-light.min.css +97 -1
  33. package/dist/js/highlight.js/styles/base16/atelier-plateau.min.css +97 -1
  34. package/dist/js/highlight.js/styles/base16/atelier-savanna-light.min.css +97 -1
  35. package/dist/js/highlight.js/styles/base16/atelier-savanna.min.css +97 -1
  36. package/dist/js/highlight.js/styles/base16/atelier-seaside-light.min.css +97 -1
  37. package/dist/js/highlight.js/styles/base16/atelier-seaside.min.css +97 -1
  38. package/dist/js/highlight.js/styles/base16/atelier-sulphurpool-light.min.css +97 -1
  39. package/dist/js/highlight.js/styles/base16/atelier-sulphurpool.min.css +97 -1
  40. package/dist/js/highlight.js/styles/base16/atlas.min.css +97 -1
  41. package/dist/js/highlight.js/styles/base16/bespin.min.css +97 -1
  42. package/dist/js/highlight.js/styles/base16/black-metal-bathory.min.css +97 -1
  43. package/dist/js/highlight.js/styles/base16/black-metal-burzum.min.css +97 -1
  44. package/dist/js/highlight.js/styles/base16/black-metal-dark-funeral.min.css +97 -1
  45. package/dist/js/highlight.js/styles/base16/black-metal-gorgoroth.min.css +97 -1
  46. package/dist/js/highlight.js/styles/base16/black-metal-immortal.min.css +97 -1
  47. package/dist/js/highlight.js/styles/base16/black-metal-khold.min.css +97 -1
  48. package/dist/js/highlight.js/styles/base16/black-metal-marduk.min.css +97 -1
  49. package/dist/js/highlight.js/styles/base16/black-metal-mayhem.min.css +97 -1
  50. package/dist/js/highlight.js/styles/base16/black-metal-nile.min.css +97 -1
  51. package/dist/js/highlight.js/styles/base16/black-metal-venom.min.css +97 -1
  52. package/dist/js/highlight.js/styles/base16/black-metal.min.css +97 -1
  53. package/dist/js/highlight.js/styles/base16/brewer.min.css +97 -1
  54. package/dist/js/highlight.js/styles/base16/bright.min.css +97 -1
  55. package/dist/js/highlight.js/styles/base16/brogrammer.min.css +97 -1
  56. package/dist/js/highlight.js/styles/base16/brush-trees-dark.min.css +97 -1
  57. package/dist/js/highlight.js/styles/base16/brush-trees.min.css +97 -1
  58. package/dist/js/highlight.js/styles/base16/chalk.min.css +97 -1
  59. package/dist/js/highlight.js/styles/base16/circus.min.css +97 -1
  60. package/dist/js/highlight.js/styles/base16/classic-dark.min.css +97 -1
  61. package/dist/js/highlight.js/styles/base16/classic-light.min.css +97 -1
  62. package/dist/js/highlight.js/styles/base16/codeschool.min.css +97 -1
  63. package/dist/js/highlight.js/styles/base16/colors.min.css +97 -1
  64. package/dist/js/highlight.js/styles/base16/cupcake.min.css +97 -1
  65. package/dist/js/highlight.js/styles/base16/cupertino.min.css +95 -1
  66. package/dist/js/highlight.js/styles/base16/danqing.min.css +97 -1
  67. package/dist/js/highlight.js/styles/base16/darcula.min.css +97 -1
  68. package/dist/js/highlight.js/styles/base16/dark-violet.min.css +97 -1
  69. package/dist/js/highlight.js/styles/base16/darkmoss.min.css +97 -1
  70. package/dist/js/highlight.js/styles/base16/darktooth.min.css +97 -1
  71. package/dist/js/highlight.js/styles/base16/decaf.min.css +97 -1
  72. package/dist/js/highlight.js/styles/base16/default-dark.min.css +97 -1
  73. package/dist/js/highlight.js/styles/base16/default-light.min.css +97 -1
  74. package/dist/js/highlight.js/styles/base16/dirtysea.min.css +97 -1
  75. package/dist/js/highlight.js/styles/base16/dracula.min.css +97 -1
  76. package/dist/js/highlight.js/styles/base16/edge-dark.min.css +95 -1
  77. package/dist/js/highlight.js/styles/base16/edge-light.min.css +95 -1
  78. package/dist/js/highlight.js/styles/base16/eighties.min.css +97 -1
  79. package/dist/js/highlight.js/styles/base16/embers.min.css +97 -1
  80. package/dist/js/highlight.js/styles/base16/equilibrium-dark.min.css +97 -1
  81. package/dist/js/highlight.js/styles/base16/equilibrium-gray-dark.min.css +97 -1
  82. package/dist/js/highlight.js/styles/base16/equilibrium-gray-light.min.css +97 -1
  83. package/dist/js/highlight.js/styles/base16/equilibrium-light.min.css +97 -1
  84. package/dist/js/highlight.js/styles/base16/espresso.min.css +97 -1
  85. package/dist/js/highlight.js/styles/base16/eva-dim.min.css +97 -1
  86. package/dist/js/highlight.js/styles/base16/eva.min.css +97 -1
  87. package/dist/js/highlight.js/styles/base16/flat.min.css +97 -1
  88. package/dist/js/highlight.js/styles/base16/framer.min.css +97 -1
  89. package/dist/js/highlight.js/styles/base16/fruit-soda.min.css +97 -1
  90. package/dist/js/highlight.js/styles/base16/gigavolt.min.css +97 -1
  91. package/dist/js/highlight.js/styles/base16/github.min.css +95 -1
  92. package/dist/js/highlight.js/styles/base16/google-dark.min.css +95 -1
  93. package/dist/js/highlight.js/styles/base16/google-light.min.css +95 -1
  94. package/dist/js/highlight.js/styles/base16/grayscale-dark.min.css +97 -1
  95. package/dist/js/highlight.js/styles/base16/grayscale-light.min.css +97 -1
  96. package/dist/js/highlight.js/styles/base16/green-screen.min.css +97 -1
  97. package/dist/js/highlight.js/styles/base16/gruvbox-dark-hard.min.css +97 -1
  98. package/dist/js/highlight.js/styles/base16/gruvbox-dark-medium.min.css +97 -1
  99. package/dist/js/highlight.js/styles/base16/gruvbox-dark-pale.min.css +97 -1
  100. package/dist/js/highlight.js/styles/base16/gruvbox-dark-soft.min.css +97 -1
  101. package/dist/js/highlight.js/styles/base16/gruvbox-light-hard.min.css +97 -1
  102. package/dist/js/highlight.js/styles/base16/gruvbox-light-medium.min.css +97 -1
  103. package/dist/js/highlight.js/styles/base16/gruvbox-light-soft.min.css +97 -1
  104. package/dist/js/highlight.js/styles/base16/hardcore.min.css +97 -1
  105. package/dist/js/highlight.js/styles/base16/harmonic16-dark.min.css +97 -1
  106. package/dist/js/highlight.js/styles/base16/harmonic16-light.min.css +97 -1
  107. package/dist/js/highlight.js/styles/base16/heetch-dark.min.css +97 -1
  108. package/dist/js/highlight.js/styles/base16/heetch-light.min.css +97 -1
  109. package/dist/js/highlight.js/styles/base16/helios.min.css +97 -1
  110. package/dist/js/highlight.js/styles/base16/hopscotch.min.css +97 -1
  111. package/dist/js/highlight.js/styles/base16/horizon-dark.min.css +97 -1
  112. package/dist/js/highlight.js/styles/base16/horizon-light.min.css +97 -1
  113. package/dist/js/highlight.js/styles/base16/humanoid-dark.min.css +97 -1
  114. package/dist/js/highlight.js/styles/base16/humanoid-light.min.css +97 -1
  115. package/dist/js/highlight.js/styles/base16/ia-dark.min.css +97 -1
  116. package/dist/js/highlight.js/styles/base16/ia-light.min.css +97 -1
  117. package/dist/js/highlight.js/styles/base16/icy-dark.min.css +97 -1
  118. package/dist/js/highlight.js/styles/base16/ir-black.min.css +97 -1
  119. package/dist/js/highlight.js/styles/base16/isotope.min.css +97 -1
  120. package/dist/js/highlight.js/styles/base16/kimber.min.css +97 -1
  121. package/dist/js/highlight.js/styles/base16/london-tube.min.css +97 -1
  122. package/dist/js/highlight.js/styles/base16/macintosh.min.css +95 -1
  123. package/dist/js/highlight.js/styles/base16/marrakesh.min.css +97 -1
  124. package/dist/js/highlight.js/styles/base16/materia.min.css +97 -1
  125. package/dist/js/highlight.js/styles/base16/material-darker.min.css +97 -1
  126. package/dist/js/highlight.js/styles/base16/material-lighter.min.css +97 -1
  127. package/dist/js/highlight.js/styles/base16/material-palenight.min.css +97 -1
  128. package/dist/js/highlight.js/styles/base16/material-vivid.min.css +97 -1
  129. package/dist/js/highlight.js/styles/base16/material.min.css +97 -1
  130. package/dist/js/highlight.js/styles/base16/mellow-purple.min.css +97 -1
  131. package/dist/js/highlight.js/styles/base16/mexico-light.min.css +97 -1
  132. package/dist/js/highlight.js/styles/base16/mocha.min.css +97 -1
  133. package/dist/js/highlight.js/styles/base16/monokai.min.css +97 -1
  134. package/dist/js/highlight.js/styles/base16/nebula.min.css +97 -1
  135. package/dist/js/highlight.js/styles/base16/nord.min.css +97 -1
  136. package/dist/js/highlight.js/styles/base16/nova.min.css +95 -1
  137. package/dist/js/highlight.js/styles/base16/ocean.min.css +97 -1
  138. package/dist/js/highlight.js/styles/base16/oceanicnext.min.css +97 -1
  139. package/dist/js/highlight.js/styles/base16/one-light.min.css +97 -1
  140. package/dist/js/highlight.js/styles/base16/onedark.min.css +97 -1
  141. package/dist/js/highlight.js/styles/base16/outrun-dark.min.css +97 -1
  142. package/dist/js/highlight.js/styles/base16/papercolor-dark.min.css +97 -1
  143. package/dist/js/highlight.js/styles/base16/papercolor-light.min.css +95 -1
  144. package/dist/js/highlight.js/styles/base16/paraiso.min.css +97 -1
  145. package/dist/js/highlight.js/styles/base16/pasque.min.css +97 -1
  146. package/dist/js/highlight.js/styles/base16/phd.min.css +97 -1
  147. package/dist/js/highlight.js/styles/base16/pico.min.css +97 -1
  148. package/dist/js/highlight.js/styles/base16/pop.min.css +97 -1
  149. package/dist/js/highlight.js/styles/base16/porple.min.css +97 -1
  150. package/dist/js/highlight.js/styles/base16/qualia.min.css +97 -1
  151. package/dist/js/highlight.js/styles/base16/railscasts.min.css +97 -1
  152. package/dist/js/highlight.js/styles/base16/rebecca.min.css +97 -1
  153. package/dist/js/highlight.js/styles/base16/ros-pine-dawn.min.css +97 -1
  154. package/dist/js/highlight.js/styles/base16/ros-pine-moon.min.css +97 -1
  155. package/dist/js/highlight.js/styles/base16/ros-pine.min.css +97 -1
  156. package/dist/js/highlight.js/styles/base16/sagelight.min.css +97 -1
  157. package/dist/js/highlight.js/styles/base16/sandcastle.min.css +93 -1
  158. package/dist/js/highlight.js/styles/base16/seti-ui.min.css +97 -1
  159. package/dist/js/highlight.js/styles/base16/shapeshifter.min.css +97 -1
  160. package/dist/js/highlight.js/styles/base16/silk-dark.min.css +97 -1
  161. package/dist/js/highlight.js/styles/base16/silk-light.min.css +97 -1
  162. package/dist/js/highlight.js/styles/base16/snazzy.min.css +97 -1
  163. package/dist/js/highlight.js/styles/base16/solar-flare-light.min.css +97 -1
  164. package/dist/js/highlight.js/styles/base16/solar-flare.min.css +97 -1
  165. package/dist/js/highlight.js/styles/base16/solarized-dark.min.css +97 -1
  166. package/dist/js/highlight.js/styles/base16/solarized-light.min.css +97 -1
  167. package/dist/js/highlight.js/styles/base16/spacemacs.min.css +97 -1
  168. package/dist/js/highlight.js/styles/base16/summercamp.min.css +97 -1
  169. package/dist/js/highlight.js/styles/base16/summerfruit-dark.min.css +97 -1
  170. package/dist/js/highlight.js/styles/base16/summerfruit-light.min.css +97 -1
  171. package/dist/js/highlight.js/styles/base16/synth-midnight-terminal-dark.min.css +97 -1
  172. package/dist/js/highlight.js/styles/base16/synth-midnight-terminal-light.min.css +97 -1
  173. package/dist/js/highlight.js/styles/base16/tango.min.css +97 -1
  174. package/dist/js/highlight.js/styles/base16/tender.min.css +97 -1
  175. package/dist/js/highlight.js/styles/base16/tomorrow-night.min.css +97 -1
  176. package/dist/js/highlight.js/styles/base16/tomorrow.min.css +97 -1
  177. package/dist/js/highlight.js/styles/base16/twilight.min.css +97 -1
  178. package/dist/js/highlight.js/styles/base16/unikitty-dark.min.css +97 -1
  179. package/dist/js/highlight.js/styles/base16/unikitty-light.min.css +97 -1
  180. package/dist/js/highlight.js/styles/base16/vulcan.min.css +93 -1
  181. package/dist/js/highlight.js/styles/base16/windows-10-light.min.css +97 -1
  182. package/dist/js/highlight.js/styles/base16/windows-10.min.css +97 -1
  183. package/dist/js/highlight.js/styles/base16/windows-95-light.min.css +97 -1
  184. package/dist/js/highlight.js/styles/base16/windows-95.min.css +97 -1
  185. package/dist/js/highlight.js/styles/base16/windows-high-contrast-light.min.css +97 -1
  186. package/dist/js/highlight.js/styles/base16/windows-high-contrast.min.css +97 -1
  187. package/dist/js/highlight.js/styles/base16/windows-nt-light.min.css +97 -1
  188. package/dist/js/highlight.js/styles/base16/windows-nt.min.css +97 -1
  189. package/dist/js/highlight.js/styles/base16/woodland.min.css +97 -1
  190. package/dist/js/highlight.js/styles/base16/xcode-dusk.min.css +97 -1
  191. package/dist/js/highlight.js/styles/base16/zenburn.min.css +97 -1
  192. package/dist/js/highlight.js/styles/brown-paper.min.css +54 -1
  193. package/dist/js/highlight.js/styles/codepen-embed.min.css +53 -1
  194. package/dist/js/highlight.js/styles/color-brewer.min.css +56 -1
  195. package/dist/js/highlight.js/styles/dark.min.css +54 -1
  196. package/dist/js/highlight.js/styles/default.min.css +79 -1
  197. package/dist/js/highlight.js/styles/devibeans.min.css +80 -2
  198. package/dist/js/highlight.js/styles/docco.min.css +81 -1
  199. package/dist/js/highlight.js/styles/far.min.css +59 -1
  200. package/dist/js/highlight.js/styles/felipec.min.css +89 -2
  201. package/dist/js/highlight.js/styles/foundation.min.css +74 -1
  202. package/dist/js/highlight.js/styles/github-dark-dimmed.min.css +87 -2
  203. package/dist/js/highlight.js/styles/github-dark.min.css +87 -2
  204. package/dist/js/highlight.js/styles/github.min.css +87 -2
  205. package/dist/js/highlight.js/styles/gml.min.css +68 -1
  206. package/dist/js/highlight.js/styles/googlecode.min.css +75 -1
  207. package/dist/js/highlight.js/styles/gradient-dark.min.css +92 -1
  208. package/dist/js/highlight.js/styles/gradient-light.min.css +94 -1
  209. package/dist/js/highlight.js/styles/grayscale.min.css +85 -1
  210. package/dist/js/highlight.js/styles/hybrid.min.css +75 -1
  211. package/dist/js/highlight.js/styles/idea.min.css +82 -1
  212. package/dist/js/highlight.js/styles/intellij-light.min.css +91 -1
  213. package/dist/js/highlight.js/styles/ir-black.min.css +64 -1
  214. package/dist/js/highlight.js/styles/isbl-editor-dark.min.css +84 -1
  215. package/dist/js/highlight.js/styles/isbl-editor-light.min.css +84 -1
  216. package/dist/js/highlight.js/styles/kimbie-dark.min.css +58 -1
  217. package/dist/js/highlight.js/styles/kimbie-light.min.css +58 -1
  218. package/dist/js/highlight.js/styles/lightfair.min.css +73 -1
  219. package/dist/js/highlight.js/styles/lioshi.min.css +65 -1
  220. package/dist/js/highlight.js/styles/magula.min.css +59 -1
  221. package/dist/js/highlight.js/styles/mono-blue.min.css +54 -1
  222. package/dist/js/highlight.js/styles/monokai-sublime.min.css +72 -1
  223. package/dist/js/highlight.js/styles/monokai.min.css +66 -1
  224. package/dist/js/highlight.js/styles/night-owl.min.css +136 -1
  225. package/dist/js/highlight.js/styles/nnfx-dark.min.css +96 -2
  226. package/dist/js/highlight.js/styles/nnfx-light.min.css +96 -2
  227. package/dist/js/highlight.js/styles/nord.min.css +205 -1
  228. package/dist/js/highlight.js/styles/obsidian.min.css +76 -1
  229. package/dist/js/highlight.js/styles/panda-syntax-dark.min.css +88 -1
  230. package/dist/js/highlight.js/styles/panda-syntax-light.min.css +85 -1
  231. package/dist/js/highlight.js/styles/paraiso-dark.min.css +57 -1
  232. package/dist/js/highlight.js/styles/paraiso-light.min.css +57 -1
  233. package/dist/js/highlight.js/styles/pojoaque.min.css +70 -1
  234. package/dist/js/highlight.js/styles/purebasic.min.css +66 -1
  235. package/dist/js/highlight.js/styles/qtcreator-dark.min.css +71 -1
  236. package/dist/js/highlight.js/styles/qtcreator-light.min.css +69 -1
  237. package/dist/js/highlight.js/styles/rainbow.min.css +73 -1
  238. package/dist/js/highlight.js/styles/routeros.min.css +77 -1
  239. package/dist/js/highlight.js/styles/school-book.min.css +57 -1
  240. package/dist/js/highlight.js/styles/shades-of-purple.min.css +76 -1
  241. package/dist/js/highlight.js/styles/srcery.min.css +70 -1
  242. package/dist/js/highlight.js/styles/stackoverflow-dark.min.css +79 -2
  243. package/dist/js/highlight.js/styles/stackoverflow-light.min.css +79 -2
  244. package/dist/js/highlight.js/styles/sunburst.min.css +85 -1
  245. package/dist/js/highlight.js/styles/tokyo-night-dark.min.css +83 -2
  246. package/dist/js/highlight.js/styles/tokyo-night-light.min.css +83 -2
  247. package/dist/js/highlight.js/styles/tomorrow-night-blue.min.css +59 -1
  248. package/dist/js/highlight.js/styles/tomorrow-night-bright.min.css +59 -1
  249. package/dist/js/highlight.js/styles/vs.min.css +59 -1
  250. package/dist/js/highlight.js/styles/vs2015.min.css +94 -1
  251. package/dist/js/highlight.js/styles/xcode.min.css +85 -1
  252. package/dist/js/highlight.js/styles/xt256.min.css +74 -1
  253. package/dist/js/icons/material.js +8 -4
  254. package/dist/method.d.ts +4 -1
  255. package/dist/method.js +430 -121
  256. package/dist/method.min.js +1 -1
  257. package/dist/ts/markdown/codeRender.d.ts +9 -1
  258. package/dist/ts/util/attachLineNumbers.d.ts +6 -5
  259. package/dist/types/index.d.ts +8 -1
  260. package/package.json +2 -2
  261. package/src/assets/less/_line-number.less +24 -13
  262. package/src/assets/less/_reset.less +13 -7
  263. package/src/ts/markdown/codeRender.ts +152 -58
  264. package/src/ts/markdown/previewRender.ts +69 -25
  265. package/src/ts/util/attachLineNumbers.ts +382 -98
  266. package/src/ts/util/editorCommonEvent.ts +15 -8
  267. package/src/ts/wysiwyg/index.ts +6 -3
package/dist/method.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vditor v0.0.13 - A markdown editor written in TypeScript.
2
+ * Vditor v0.0.15 - A markdown editor written in TypeScript.
3
3
  *
4
4
  * MIT License
5
5
  *
@@ -45,7 +45,7 @@ return /******/ (() => { // webpackBootstrap
45
45
  /* harmony export */ "g": () => (/* binding */ Constants)
46
46
  /* harmony export */ });
47
47
  /* unused harmony export VDITOR_VERSION */
48
- var _VDITOR_VERSION = (/* unused pure expression or super */ null && ("0.0.13"));
48
+ var _VDITOR_VERSION = (/* unused pure expression or super */ null && ("0.0.15"));
49
49
 
50
50
  var Constants = /** @class */ (function () {
51
51
  function Constants() {
@@ -347,7 +347,7 @@ var Constants = /** @class */ (function () {
347
347
  "c#",
348
348
  "bat",
349
349
  ];
350
- Constants.CDN = "https://webcdn.wujieai.com/vditor@".concat("0.0.13");
350
+ Constants.CDN = "https://webcdn.wujieai.com/vditor@".concat("0.0.15");
351
351
  Constants.MARKDOWN_OPTIONS = {
352
352
  autoSpace: false,
353
353
  gfmAutoLink: true,
@@ -1700,17 +1700,28 @@ var attachEchartsContextMenu = function (el, option, chart, cdn) {
1700
1700
  /* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(145);
1701
1701
 
1702
1702
 
1703
- var codeRender = function (element, option) {
1704
- Array.from(element.querySelectorAll("pre > code")).filter(function (e, index) {
1703
+ /**
1704
+ * 为预览区域中的代码块添加辅助操作:
1705
+ * - 复制按钮:一键复制代码文本
1706
+ * - 运行按钮:当启用 runHtml 时,向外部回调当前代码块的 HTML 字符串
1707
+ */
1708
+ var codeRender = function (element, option, runHtml) {
1709
+ Array.from(element.querySelectorAll("pre > code"))
1710
+ .filter(function (e, index) {
1705
1711
  if (e.parentElement.classList.contains("vditor-wysiwyg__pre") ||
1706
1712
  e.parentElement.classList.contains("vditor-ir__marker--pre")) {
1707
1713
  return false;
1708
1714
  }
1709
- if (e.classList.contains("language-mermaid") || e.classList.contains("language-flowchart") ||
1710
- e.classList.contains("language-echarts") || e.classList.contains("language-mindmap") ||
1711
- e.classList.contains("language-plantuml") || e.classList.contains("language-markmap") ||
1712
- e.classList.contains("language-abc") || e.classList.contains("language-graphviz") ||
1713
- e.classList.contains("language-math") || e.classList.contains("language-smiles")) {
1715
+ if (e.classList.contains("language-mermaid") ||
1716
+ e.classList.contains("language-flowchart") ||
1717
+ e.classList.contains("language-echarts") ||
1718
+ e.classList.contains("language-mindmap") ||
1719
+ e.classList.contains("language-plantuml") ||
1720
+ e.classList.contains("language-markmap") ||
1721
+ e.classList.contains("language-abc") ||
1722
+ e.classList.contains("language-graphviz") ||
1723
+ e.classList.contains("language-math") ||
1724
+ e.classList.contains("language-smiles")) {
1714
1725
  return false;
1715
1726
  }
1716
1727
  if (e.style.maxHeight.indexOf("px") > -1) {
@@ -1721,12 +1732,15 @@ var codeRender = function (element, option) {
1721
1732
  return false;
1722
1733
  }
1723
1734
  return true;
1724
- }).forEach(function (e) {
1725
- var _a, _b, _c;
1735
+ })
1736
+ .forEach(function (e) {
1737
+ var _a, _b, _c, _d;
1726
1738
  var codeText = e.innerText;
1727
1739
  if (e.classList.contains("highlight-chroma")) {
1728
1740
  var codeElement = e.cloneNode(true);
1729
- codeElement.querySelectorAll(".highlight-ln").forEach(function (item) {
1741
+ codeElement
1742
+ .querySelectorAll(".highlight-ln")
1743
+ .forEach(function (item) {
1730
1744
  item.remove();
1731
1745
  });
1732
1746
  codeText = codeElement.innerText;
@@ -1736,19 +1750,55 @@ var codeRender = function (element, option) {
1736
1750
  }
1737
1751
  var iconHTML = '<svg><use xlink:href="#vditor-icon-copy"></use></svg>';
1738
1752
  if (!document.getElementById("vditorIconScript")) {
1739
- iconHTML = '<svg viewBox="0 0 32 32"><path d="M22.545-0h-17.455c-1.6 0-2.909 1.309-2.909 2.909v20.364h2.909v-20.364h17.455v-2.909zM26.909 5.818h-16c-1.6 0-2.909 1.309-2.909 2.909v20.364c0 1.6 1.309 2.909 2.909 2.909h16c1.6 0 2.909-1.309 2.909-2.909v-20.364c0-1.6-1.309-2.909-2.909-2.909zM26.909 29.091h-16v-20.364h16v20.364z"></path></svg>';
1753
+ iconHTML =
1754
+ '<svg viewBox="0 0 32 32"><path d="M22.545-0h-17.455c-1.6 0-2.909 1.309-2.909 2.909v20.364h2.909v-20.364h17.455v-2.909zM26.909 5.818h-16c-1.6 0-2.909 1.309-2.909 2.909v20.364c0 1.6 1.309 2.909 2.909 2.909h16c1.6 0 2.909-1.309 2.909-2.909v-20.364c0-1.6-1.309-2.909-2.909-2.909zM26.909 29.091h-16v-20.364h16v20.364z"></path></svg>';
1740
1755
  }
1756
+ var playIconHTML = document.getElementById("vditorIconScript")
1757
+ ? '<svg><use xlink:href="#vditor-icon-play"></use></svg>'
1758
+ : '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-play-icon lucide-circle-play"><path d="M9 9.003a1 1 0 0 1 1.517-.859l4.997 2.997a1 1 0 0 1 0 1.718l-4.997 2.997A1 1 0 0 1 9 14.996z"/><circle cx="12" cy="12" r="10"/></svg>';
1741
1759
  var divElement = document.createElement("div");
1742
1760
  divElement.className = "vditor-copy";
1743
- divElement.innerHTML = "<span aria-label=\"".concat(((_a = window.VditorI18n) === null || _a === void 0 ? void 0 : _a.copy) || "复制", "\"\nonmouseover=\"this.setAttribute('aria-label', '").concat(((_b = window.VditorI18n) === null || _b === void 0 ? void 0 : _b.copy) || "复制", "')\"\nclass=\"vditor-tooltipped vditor-tooltipped__w\"\nonclick=\"event.stopPropagation();this.previousElementSibling.select();document.execCommand('copy');this.setAttribute('aria-label', '").concat(((_c = window.VditorI18n) === null || _c === void 0 ? void 0 : _c.copied) || "已复制", "');this.previousElementSibling.blur()\">").concat(iconHTML, "</span>");
1744
1761
  var textarea = document.createElement("textarea");
1745
1762
  textarea.value = (0,_util_code160to32__WEBPACK_IMPORTED_MODULE_1__/* .code160to32 */ .X)(codeText);
1746
- divElement.insertAdjacentElement("afterbegin", textarea);
1763
+ divElement.appendChild(textarea);
1764
+ if (runHtml === null || runHtml === void 0 ? void 0 : runHtml.enable) {
1765
+ var runSpan = document.createElement("span");
1766
+ runSpan.setAttribute("aria-label", ((_a = window.VditorI18n) === null || _a === void 0 ? void 0 : _a.run) || "运行");
1767
+ runSpan.setAttribute("onmouseover", "this.setAttribute('aria-label', '".concat(((_b = window.VditorI18n) === null || _b === void 0 ? void 0 : _b.run) || "运行", "')"));
1768
+ runSpan.className =
1769
+ "vditor-copy__item vditor-tooltipped vditor-tooltipped__w";
1770
+ runSpan.innerHTML = playIconHTML;
1771
+ runSpan.addEventListener("click", function (evt) {
1772
+ evt.stopPropagation();
1773
+ if (typeof runHtml.callback === "function") {
1774
+ runHtml.callback((0,_util_code160to32__WEBPACK_IMPORTED_MODULE_1__/* .code160to32 */ .X)(codeText));
1775
+ }
1776
+ });
1777
+ divElement.appendChild(runSpan);
1778
+ }
1779
+ var copySpan = document.createElement("span");
1780
+ copySpan.setAttribute("aria-label", ((_c = window.VditorI18n) === null || _c === void 0 ? void 0 : _c.copy) || "复制");
1781
+ copySpan.setAttribute("onmouseover", "this.setAttribute('aria-label', '".concat(((_d = window.VditorI18n) === null || _d === void 0 ? void 0 : _d.copy) || "复制", "')"));
1782
+ copySpan.className =
1783
+ "vditor-copy__item vditor-tooltipped vditor-tooltipped__w";
1784
+ copySpan.addEventListener("click", function (evt) {
1785
+ var _a;
1786
+ evt.stopPropagation();
1787
+ var ta = divElement.querySelector("textarea");
1788
+ if (ta) {
1789
+ ta.select();
1790
+ document.execCommand("copy");
1791
+ copySpan.setAttribute("aria-label", ((_a = window.VditorI18n) === null || _a === void 0 ? void 0 : _a.copied) || "已复制");
1792
+ ta.blur();
1793
+ }
1794
+ });
1795
+ copySpan.innerHTML = iconHTML;
1796
+ divElement.appendChild(copySpan);
1747
1797
  if (option && option.renderMenu) {
1748
1798
  option.renderMenu(e, divElement);
1749
1799
  }
1750
1800
  e.before(divElement);
1751
- e.style.maxHeight = (window.outerHeight - 40) + "px";
1801
+ e.style.maxHeight = 300 + "px";
1752
1802
  // https://github.com/Vanessa219/vditor/issues/1356
1753
1803
  e.insertAdjacentHTML("afterend", "<span style=\"position: absolute\">".concat(_constants__WEBPACK_IMPORTED_MODULE_0__/* .Constants.ZWSP */ .g.ZWSP, "</span>"));
1754
1804
  });
@@ -3438,16 +3488,28 @@ var addStyle = function (url, id) {
3438
3488
  /* harmony export */ "g": () => (/* binding */ attachLineNumbersToBlocksThrottled)
3439
3489
  /* harmony export */ });
3440
3490
  /**
3441
- * 为编辑区域添加行号标记:
3442
- * - 为所有包含 `data-block` 的块级节点写入 `data-linenumber`
3443
- * - 额外为每个 `ul` 的直接 `li` 子元素写入 `data-linenumber`(不修改 `ul` 本身)
3444
- * 通过解析传入的 Markdown 源文本,建立内容到源文件行号的映射,
3445
- * 兼顾多行文本、嵌套列表、重复内容及空白/特殊字符,并提供基础错误保护。
3491
+ * 功能:为编辑区域批量添加行号与列表/表格标记(O(n))
3492
+ * - 块级:为所有 `data-block` 写入 `data-linenumber`
3493
+ * - 列表:为 `ul/ol > li` 写入 `data-linenumber`、`data-list-level`、`data-list-number`
3494
+ * - 表格:为 `table` 的 `tr` 写入 `data-linenumber`(不为 `th` 设置)
3495
+ * - 性能:一次解析 Markdown 建索引,批量收集并一次性更新属性,缓存避免重复计算
3496
+ * - 精度:支持嵌套列表、换行列表项、多级序号;表格跨页连续行号,容忍合并单元格
3446
3497
  */
3447
3498
  var attachLineNumbersToBlocks = function (root, sourceMarkdown) {
3499
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
3448
3500
  if (!root || !sourceMarkdown) {
3449
3501
  return;
3450
3502
  }
3503
+ var t0 = performance.now();
3504
+ var computeHash = function (s) {
3505
+ var h = 0;
3506
+ for (var i = 0; i < s.length; i++) {
3507
+ h = (h * 31 + s.charCodeAt(i)) | 0;
3508
+ }
3509
+ return "".concat(s.length, ":").concat(h);
3510
+ };
3511
+ var GLOBAL_CACHE = globalThis.__VDITOR_LINE_CACHE__ || new Map();
3512
+ globalThis.__VDITOR_LINE_CACHE__ = GLOBAL_CACHE;
3451
3513
  var ZWSP = "\u200b";
3452
3514
  var normalize = function (text) {
3453
3515
  return text
@@ -3458,7 +3520,10 @@ var attachLineNumbersToBlocks = function (root, sourceMarkdown) {
3458
3520
  .replace(/[\t\f\v ]+/g, " ");
3459
3521
  };
3460
3522
  var srcNorm = normalize(sourceMarkdown);
3461
- var srcLines = srcNorm.split("\n");
3523
+ var tNorm = performance.now();
3524
+ var hash = computeHash(srcNorm);
3525
+ var cached = GLOBAL_CACHE.get(hash);
3526
+ var srcLines = (_a = cached === null || cached === void 0 ? void 0 : cached.srcLines) !== null && _a !== void 0 ? _a : srcNorm.split("\n");
3462
3527
  var stripInlineMD = function (text) {
3463
3528
  return (text
3464
3529
  .replace(/\\([*_`~])/g, "$1")
@@ -3487,15 +3552,17 @@ var attachLineNumbersToBlocks = function (root, sourceMarkdown) {
3487
3552
  .replace(/[{}]/g, "")
3488
3553
  .trim());
3489
3554
  };
3490
- var strippedLines = srcLines.map(function (l) { return stripInlineMD(l); });
3491
- var lineLookup = new Map();
3492
- for (var i = 0; i < strippedLines.length; i++) {
3493
- var key = strippedLines[i];
3494
- if (!lineLookup.has(key)) {
3495
- lineLookup.set(key, [i + 1]);
3496
- }
3497
- else {
3498
- lineLookup.get(key).push(i + 1);
3555
+ var strippedLines = (_b = cached === null || cached === void 0 ? void 0 : cached.strippedLines) !== null && _b !== void 0 ? _b : srcLines.map(function (l) { return stripInlineMD(l); });
3556
+ var lineLookup = (_c = cached === null || cached === void 0 ? void 0 : cached.lineLookup) !== null && _c !== void 0 ? _c : new Map();
3557
+ if (!cached) {
3558
+ for (var i = 0; i < strippedLines.length; i++) {
3559
+ var key = strippedLines[i];
3560
+ if (!lineLookup.has(key)) {
3561
+ lineLookup.set(key, [i + 1]);
3562
+ }
3563
+ else {
3564
+ lineLookup.get(key).push(i + 1);
3565
+ }
3499
3566
  }
3500
3567
  }
3501
3568
  var usedLines = new Set();
@@ -3527,20 +3594,25 @@ var attachLineNumbersToBlocks = function (root, sourceMarkdown) {
3527
3594
  * 预处理:收集 Markdown 中所有无序列表(ul)行及其去除行内标记后的内容,构建快速查找结构。
3528
3595
  * 仅匹配以 `*`、`-`、`+` 开头的条目,支持任务列表如 `- [ ]`、`* [x]`。
3529
3596
  */
3530
- var unorderedListEntries = [];
3531
- var unorderedLookup = new Map();
3597
+ var unorderedListEntries = (_d = cached === null || cached === void 0 ? void 0 : cached.unorderedListEntries) !== null && _d !== void 0 ? _d : [];
3598
+ var unorderedLookup = (_e = cached === null || cached === void 0 ? void 0 : cached.unorderedLookup) !== null && _e !== void 0 ? _e : new Map();
3532
3599
  var usedUnorderedLines = new Set();
3533
- for (var i = 0; i < srcLines.length; i++) {
3534
- var raw = srcLines[i];
3535
- var m = raw.match(/^\s*[*+-]\s+(?:\[(?: |x|X)\]\s+)?(.*)$/);
3536
- if (m && typeof m[1] === "string") {
3537
- var contentStripped = stripInlineForList(m[1]);
3538
- unorderedListEntries.push({ ln: i + 1, content: contentStripped });
3539
- if (!unorderedLookup.has(contentStripped)) {
3540
- unorderedLookup.set(contentStripped, [i + 1]);
3541
- }
3542
- else {
3543
- unorderedLookup.get(contentStripped).push(i + 1);
3600
+ if (!cached) {
3601
+ for (var i = 0; i < srcLines.length; i++) {
3602
+ var raw = srcLines[i];
3603
+ var m = raw.match(/^\s*[*+-]\s+(?:\[(?: |x|X)\]\s+)?(.*)$/);
3604
+ if (m && typeof m[1] === "string") {
3605
+ var contentStripped = stripInlineForList(m[1]);
3606
+ unorderedListEntries.push({
3607
+ ln: i + 1,
3608
+ content: contentStripped,
3609
+ });
3610
+ if (!unorderedLookup.has(contentStripped)) {
3611
+ unorderedLookup.set(contentStripped, [i + 1]);
3612
+ }
3613
+ else {
3614
+ unorderedLookup.get(contentStripped).push(i + 1);
3615
+ }
3544
3616
  }
3545
3617
  }
3546
3618
  }
@@ -3581,44 +3653,48 @@ var attachLineNumbersToBlocks = function (root, sourceMarkdown) {
3581
3653
  /**
3582
3654
  * 预处理:收集 Markdown 中所有有序列表(ol)行及其内容,支持 `1.` 或 `1)` 以及任务列表前缀。
3583
3655
  */
3584
- var orderedListEntries = [];
3585
- var orderedLookup = new Map();
3656
+ var orderedListEntries = (_f = cached === null || cached === void 0 ? void 0 : cached.orderedListEntries) !== null && _f !== void 0 ? _f : [];
3657
+ var orderedLookup = (_g = cached === null || cached === void 0 ? void 0 : cached.orderedLookup) !== null && _g !== void 0 ? _g : new Map();
3586
3658
  var usedOrderedLines = new Set();
3587
3659
  var ORDERED_RE = /\s*\d+(?:[.)、.。]|[\uFF0E\uFF09\u3001])\s+(?:\[(?: |x|X)\]\s+)?(.*)/;
3588
3660
  var ORDERED_FULL = new RegExp("^".concat(ORDERED_RE.source, "$"));
3589
- for (var i = 0; i < srcLines.length; i++) {
3590
- var raw = srcLines[i];
3591
- var m = raw.match(ORDERED_FULL);
3592
- if (m && typeof m[1] === "string") {
3593
- var contentStripped = stripInlineForList(m[1]);
3594
- orderedListEntries.push({ ln: i + 1, content: contentStripped });
3595
- if (!orderedLookup.has(contentStripped)) {
3596
- orderedLookup.set(contentStripped, [i + 1]);
3597
- }
3598
- else {
3599
- orderedLookup.get(contentStripped).push(i + 1);
3661
+ if (!cached) {
3662
+ for (var i = 0; i < srcLines.length; i++) {
3663
+ var raw = srcLines[i];
3664
+ var m = raw.match(ORDERED_FULL);
3665
+ if (m && typeof m[1] === "string") {
3666
+ var contentStripped = stripInlineForList(m[1]);
3667
+ orderedListEntries.push({
3668
+ ln: i + 1,
3669
+ content: contentStripped,
3670
+ });
3671
+ if (!orderedLookup.has(contentStripped)) {
3672
+ orderedLookup.set(contentStripped, [i + 1]);
3673
+ }
3674
+ else {
3675
+ orderedLookup.get(contentStripped).push(i + 1);
3676
+ }
3600
3677
  }
3601
3678
  }
3602
3679
  }
3603
- console.debug("[LineNumber][ol:index]", {
3604
- total: orderedListEntries.length,
3605
- });
3606
- var orderedGroups = [];
3607
- for (var i = 0; i < srcLines.length;) {
3608
- var raw = srcLines[i];
3609
- if (ORDERED_FULL.test(raw)) {
3610
- var group = [];
3611
- while (i < srcLines.length && ORDERED_FULL.test(srcLines[i])) {
3612
- group.push(i + 1);
3613
- i++;
3680
+ var orderedGroups = (_h = cached === null || cached === void 0 ? void 0 : cached.orderedGroups) !== null && _h !== void 0 ? _h : [];
3681
+ if (!cached) {
3682
+ for (var i = 0; i < srcLines.length;) {
3683
+ var raw = srcLines[i];
3684
+ if (ORDERED_FULL.test(raw)) {
3685
+ var group = [];
3686
+ while (i < srcLines.length && ORDERED_FULL.test(srcLines[i])) {
3687
+ group.push(i + 1);
3688
+ i++;
3689
+ }
3690
+ if (group.length > 0) {
3691
+ orderedGroups.push(group);
3692
+ }
3614
3693
  }
3615
- if (group.length > 0) {
3616
- orderedGroups.push(group);
3694
+ else {
3695
+ i++;
3617
3696
  }
3618
3697
  }
3619
- else {
3620
- i++;
3621
- }
3622
3698
  }
3623
3699
  /**
3624
3700
  * 为给定文本在有序列表候选中选择行号,精确匹配优先,包含匹配回退。
@@ -3670,6 +3746,7 @@ var attachLineNumbersToBlocks = function (root, sourceMarkdown) {
3670
3746
  });
3671
3747
  return buf;
3672
3748
  };
3749
+ var attrUpdates = [];
3673
3750
  var blocks = root.querySelectorAll("[data-block]");
3674
3751
  blocks.forEach(function (el) {
3675
3752
  try {
@@ -3678,22 +3755,26 @@ var attachLineNumbersToBlocks = function (root, sourceMarkdown) {
3678
3755
  if (dataType === "math-block" || dataType === "code-block") {
3679
3756
  return;
3680
3757
  }
3681
- // 仅 li 需要行号:跳过并清理 ul/ol 自身及其内部嵌套的 p/div 等块
3682
3758
  var tagName = container.tagName;
3683
3759
  if (tagName === "UL" || tagName === "OL") {
3684
- container.removeAttribute("data-linenumber");
3760
+ if (container.getAttribute("data-linenumber")) {
3761
+ attrUpdates.push([container, "data-linenumber", ""]);
3762
+ }
3685
3763
  return;
3686
3764
  }
3687
3765
  var liAncestor = container.closest("li");
3688
3766
  if (liAncestor) {
3689
- container.removeAttribute("data-linenumber");
3767
+ if (container.getAttribute("data-linenumber")) {
3768
+ attrUpdates.push([container, "data-linenumber", ""]);
3769
+ }
3690
3770
  return;
3691
3771
  }
3692
3772
  var text = container.textContent || "";
3693
3773
  var normText = normalize(text);
3694
- // 跳过纯空白块
3695
3774
  if (!normText.trim()) {
3696
- container.removeAttribute("data-linenumber");
3775
+ if (container.getAttribute("data-linenumber")) {
3776
+ attrUpdates.push([container, "data-linenumber", ""]);
3777
+ }
3697
3778
  return;
3698
3779
  }
3699
3780
  var lineNumber = -1;
@@ -3720,13 +3801,18 @@ var attachLineNumbersToBlocks = function (root, sourceMarkdown) {
3720
3801
  }
3721
3802
  if (lineNumber !== -1) {
3722
3803
  usedLines.add(lineNumber);
3723
- container.setAttribute("data-linenumber", String(lineNumber));
3804
+ var cur = container.getAttribute("data-linenumber");
3805
+ var val = String(lineNumber);
3806
+ if (cur !== val) {
3807
+ attrUpdates.push([container, "data-linenumber", val]);
3808
+ }
3724
3809
  }
3725
3810
  }
3726
3811
  catch (_a) {
3727
3812
  void 0;
3728
3813
  }
3729
3814
  });
3815
+ var tBlockDone = performance.now();
3730
3816
  /**
3731
3817
  * 为所有 `ul` 下的每个直接 `li` 子元素追加 `data-linenumber`,不修改 `ul` 本身。
3732
3818
  * 支持多层嵌套与非文本起始节点(如加粗/行内代码)。
@@ -3735,60 +3821,93 @@ var attachLineNumbersToBlocks = function (root, sourceMarkdown) {
3735
3821
  ulElements.forEach(function (ul) {
3736
3822
  try {
3737
3823
  var children = Array.from(ul.children);
3738
- for (var _i = 0, children_1 = children; _i < children_1.length; _i++) {
3739
- var child = children_1[_i];
3824
+ var _loop_1 = function (child) {
3740
3825
  if (child.tagName !== "LI")
3741
- continue;
3826
+ return "continue";
3742
3827
  var li = child;
3743
3828
  var rawText = getImmediateLiText(li);
3744
3829
  var norm = normalize(rawText);
3745
3830
  var firstLine = norm.split("\n").find(function (l) { return l.trim().length > 0; }) || norm;
3746
3831
  var ln = findUnorderedListLineNumber(firstLine);
3832
+ var level = (function () {
3833
+ var depth = 0;
3834
+ var p = li;
3835
+ while (p) {
3836
+ p = p.parentElement;
3837
+ if (!p)
3838
+ break;
3839
+ var tag = p.tagName;
3840
+ if (tag === "UL" || tag === "OL")
3841
+ depth++;
3842
+ }
3843
+ return depth;
3844
+ })();
3845
+ var levelStr = String(level);
3846
+ var curLevel = li.getAttribute("data-list-level");
3847
+ if (curLevel !== levelStr) {
3848
+ attrUpdates.push([li, "data-list-level", levelStr]);
3849
+ }
3747
3850
  if (ln !== -1) {
3748
3851
  usedUnorderedLines.add(ln);
3749
- li.setAttribute("data-linenumber", String(ln));
3852
+ var curLn = li.getAttribute("data-linenumber");
3853
+ var val = String(ln);
3854
+ if (curLn !== val) {
3855
+ attrUpdates.push([li, "data-linenumber", val]);
3856
+ }
3750
3857
  }
3751
3858
  else {
3752
- li.setAttribute("data-linenumber", "");
3859
+ if (li.getAttribute("data-linenumber")) {
3860
+ attrUpdates.push([li, "data-linenumber", ""]);
3861
+ }
3753
3862
  }
3863
+ };
3864
+ for (var _i = 0, children_1 = children; _i < children_1.length; _i++) {
3865
+ var child = children_1[_i];
3866
+ _loop_1(child);
3754
3867
  }
3755
3868
  }
3756
3869
  catch (_a) {
3757
3870
  void 0;
3758
3871
  }
3759
3872
  });
3873
+ var tUlDone = performance.now();
3760
3874
  /**
3761
3875
  * 为所有 `ol` 下的每个直接 `li` 子元素追加 `data-linenumber`,不修改 `ol` 本身。
3762
3876
  */
3763
3877
  var olElements = root.querySelectorAll("ol");
3878
+ var orderedIndexMap = new WeakMap();
3764
3879
  olElements.forEach(function (ol) {
3765
3880
  try {
3766
3881
  var currentGroupIdx = -1;
3767
3882
  var lastAssigned_1 = -1;
3883
+ var startAttr = Number(ol.getAttribute("start"));
3884
+ var start = Number.isFinite(startAttr) && startAttr > 0 ? startAttr : 1;
3768
3885
  var children = Array.from(ol.children);
3886
+ var seq = start;
3769
3887
  for (var _i = 0, children_2 = children; _i < children_2.length; _i++) {
3770
3888
  var child = children_2[_i];
3771
3889
  if (child.tagName !== "LI")
3772
3890
  continue;
3891
+ orderedIndexMap.set(child, seq++);
3892
+ }
3893
+ var _loop_2 = function (child) {
3894
+ if (child.tagName !== "LI")
3895
+ return "continue";
3773
3896
  var li = child;
3774
3897
  var rawText = getImmediateLiText(li);
3775
3898
  var norm = normalize(rawText);
3776
3899
  var firstLine = norm.split("\n").find(function (l) { return l.trim().length > 0; }) || norm;
3777
3900
  var stripped0 = stripInlineForList(firstLine);
3778
3901
  var stripped = stripped0 || stripInlineMD(firstLine);
3779
- var candidates = orderedLookup.get(stripped) || [];
3780
- var available = candidates.filter(function (n) { return !usedOrderedLines.has(n); });
3902
+ orderedLookup.get(stripped);
3781
3903
  var ln = findOrderedListLineNumber(firstLine);
3782
3904
  if (ln !== -1) {
3783
3905
  usedOrderedLines.add(ln);
3784
- li.setAttribute("data-linenumber", String(ln));
3785
- // 成功映射日志
3786
- console.debug("[LineNumber][ol>li]", {
3787
- text: firstLine,
3788
- stripped: stripped,
3789
- line: ln,
3790
- });
3791
- // 记录当前组
3906
+ var cur = li.getAttribute("data-linenumber");
3907
+ var val = String(ln);
3908
+ if (cur !== val) {
3909
+ attrUpdates.push([li, "data-linenumber", val]);
3910
+ }
3792
3911
  for (var gi = 0; gi < orderedGroups.length; gi++) {
3793
3912
  if (orderedGroups[gi].includes(ln)) {
3794
3913
  currentGroupIdx = gi;
@@ -3798,13 +3917,11 @@ var attachLineNumbersToBlocks = function (root, sourceMarkdown) {
3798
3917
  lastAssigned_1 = ln;
3799
3918
  }
3800
3919
  else {
3801
- // 顺序回退:基于当前组或猜测组,按序分配下一未使用行
3802
3920
  var assigned = -1;
3803
3921
  var pickNextFromGroup = function (gi) {
3804
3922
  if (gi < 0 || gi >= orderedGroups.length)
3805
3923
  return -1;
3806
3924
  var lines = orderedGroups[gi];
3807
- // 优先从上次分配后续查找
3808
3925
  var startIdx = 0;
3809
3926
  if (lastAssigned_1 !== -1) {
3810
3927
  var idx = lines.indexOf(lastAssigned_1);
@@ -3826,7 +3943,6 @@ var attachLineNumbersToBlocks = function (root, sourceMarkdown) {
3826
3943
  assigned = pickNextFromGroup(currentGroupIdx);
3827
3944
  }
3828
3945
  if (assigned === -1) {
3829
- // 猜测组:选择拥有可用行的首个组
3830
3946
  for (var gi = 0; gi < orderedGroups.length && assigned === -1; gi++) {
3831
3947
  var cand = pickNextFromGroup(gi);
3832
3948
  if (cand !== -1) {
@@ -3837,39 +3953,229 @@ var attachLineNumbersToBlocks = function (root, sourceMarkdown) {
3837
3953
  }
3838
3954
  if (assigned !== -1) {
3839
3955
  usedOrderedLines.add(assigned);
3840
- li.setAttribute("data-linenumber", String(assigned));
3841
- console.debug("[LineNumber][ol>li][fallback-seq]", {
3842
- text: firstLine,
3843
- stripped: stripped,
3844
- line: assigned,
3845
- group: currentGroupIdx,
3846
- });
3956
+ var cur = li.getAttribute("data-linenumber");
3957
+ var val = String(assigned);
3958
+ if (cur !== val) {
3959
+ attrUpdates.push([li, "data-linenumber", val]);
3960
+ }
3847
3961
  lastAssigned_1 = assigned;
3848
3962
  }
3849
3963
  else {
3850
- li.setAttribute("data-linenumber", "");
3851
- // 失败诊断日志
3852
- console.warn("[LineNumber][ol>li][missing]", {
3853
- text: firstLine,
3854
- stripped: stripped,
3855
- candidates: candidates,
3856
- available: available,
3857
- reason: !stripped0
3858
- ? "empty-after-strip"
3859
- : candidates.length === 0
3860
- ? "no-index-candidates"
3861
- : available.length === 0
3862
- ? "all-candidates-consumed"
3863
- : "fallback-no-match",
3864
- });
3964
+ if (li.getAttribute("data-linenumber")) {
3965
+ attrUpdates.push([li, "data-linenumber", ""]);
3966
+ }
3967
+ }
3968
+ }
3969
+ var level = (function () {
3970
+ var depth = 0;
3971
+ var p = li;
3972
+ while (p) {
3973
+ p = p.parentElement;
3974
+ if (!p)
3975
+ break;
3976
+ var tag = p.tagName;
3977
+ if (tag === "UL" || tag === "OL")
3978
+ depth++;
3865
3979
  }
3980
+ return depth;
3981
+ })();
3982
+ var levelStr = String(level);
3983
+ var curLevel = li.getAttribute("data-list-level");
3984
+ if (curLevel !== levelStr) {
3985
+ attrUpdates.push([li, "data-list-level", levelStr]);
3986
+ }
3987
+ var numbering = (function () {
3988
+ var _a;
3989
+ var parts = [];
3990
+ var node = li;
3991
+ while (node) {
3992
+ var parentOl = node.closest("ol");
3993
+ if (!parentOl)
3994
+ break;
3995
+ var parentLi = ((_a = parentOl.parentElement) === null || _a === void 0 ? void 0 : _a.closest("li")) ||
3996
+ parentOl.parentElement;
3997
+ var idx = orderedIndexMap.get(node);
3998
+ if (typeof idx === "number") {
3999
+ parts.push(idx);
4000
+ }
4001
+ node = parentLi;
4002
+ }
4003
+ return parts.reverse().join(".");
4004
+ })();
4005
+ var curNum = li.getAttribute("data-list-number") || "";
4006
+ if (numbering && curNum !== numbering) {
4007
+ attrUpdates.push([li, "data-list-number", numbering]);
4008
+ }
4009
+ };
4010
+ for (var _a = 0, children_3 = children; _a < children_3.length; _a++) {
4011
+ var child = children_3[_a];
4012
+ _loop_2(child);
4013
+ }
4014
+ }
4015
+ catch (_b) {
4016
+ void 0;
4017
+ }
4018
+ });
4019
+ var tOlDone = performance.now();
4020
+ var tableRowLookup = (_j = cached === null || cached === void 0 ? void 0 : cached.tableRowLookup) !== null && _j !== void 0 ? _j : new Map();
4021
+ var tableGroups = (_k = cached === null || cached === void 0 ? void 0 : cached.tableGroups) !== null && _k !== void 0 ? _k : [];
4022
+ if (!cached) {
4023
+ var isTableRowLine = function (line) {
4024
+ return /^\s*\|.*\|\s*$/.test(line);
4025
+ };
4026
+ var isAlignLine = function (line) {
4027
+ return /^\s*\|?(?:\s*:?-{2,}:?\s*\|)+\s*:?-{2,}:?\s*\|?\s*$/.test(line);
4028
+ };
4029
+ for (var i = 0; i < srcLines.length;) {
4030
+ var header = srcLines[i];
4031
+ var align = srcLines[i + 1];
4032
+ if (isTableRowLine(header) && isAlignLine(align || "")) {
4033
+ var groupRows = [i + 1];
4034
+ var groupRowTexts = [
4035
+ stripInlineMD(header.replace(/^\s*\|?|\|?\s*$/g, "")),
4036
+ ];
4037
+ i += 2;
4038
+ while (i < srcLines.length && isTableRowLine(srcLines[i])) {
4039
+ groupRows.push(i + 1);
4040
+ groupRowTexts.push(stripInlineMD(srcLines[i].replace(/^\s*\|?|\|?\s*$/g, "")));
4041
+ i++;
4042
+ }
4043
+ tableGroups.push({
4044
+ rows: groupRows,
4045
+ rowTexts: groupRowTexts,
4046
+ });
4047
+ for (var t = 0; t < groupRowTexts.length; t++) {
4048
+ var key = groupRowTexts[t];
4049
+ var ln = groupRows[t];
4050
+ var arr = tableRowLookup.get(key);
4051
+ if (arr)
4052
+ arr.push(ln);
4053
+ else
4054
+ tableRowLookup.set(key, [ln]);
3866
4055
  }
3867
4056
  }
4057
+ else {
4058
+ i++;
4059
+ }
4060
+ }
4061
+ }
4062
+ var usedTableLines = new Set();
4063
+ var tIndexDone = performance.now();
4064
+ var tables = root.querySelectorAll("table");
4065
+ var groupPtr = 0;
4066
+ tables.forEach(function (table) {
4067
+ try {
4068
+ var trs = table.querySelectorAll("tr");
4069
+ trs.forEach(function (tr) {
4070
+ var cells = Array.from(tr.cells);
4071
+ var rowText = cells.map(function (c) { return c.textContent || ""; }).join("|");
4072
+ var normRow = stripInlineMD(normalize(rowText));
4073
+ var ln = pickFirstUnused(tableRowLookup.get(normRow));
4074
+ if (ln === -1) {
4075
+ while (groupPtr < tableGroups.length &&
4076
+ tableGroups[groupPtr].rows.every(function (r) {
4077
+ return usedTableLines.has(r);
4078
+ })) {
4079
+ groupPtr++;
4080
+ }
4081
+ if (groupPtr < tableGroups.length) {
4082
+ var g = tableGroups[groupPtr];
4083
+ var chosen = -1;
4084
+ for (var k = 0; k < g.rows.length; k++) {
4085
+ var cand = g.rows[k];
4086
+ if (!usedTableLines.has(cand)) {
4087
+ chosen = cand;
4088
+ break;
4089
+ }
4090
+ }
4091
+ ln = chosen;
4092
+ }
4093
+ }
4094
+ if (ln !== -1) {
4095
+ usedTableLines.add(ln);
4096
+ var cur = tr.getAttribute("data-linenumber");
4097
+ var val = String(ln);
4098
+ if (cur !== val) {
4099
+ attrUpdates.push([
4100
+ tr,
4101
+ "data-linenumber",
4102
+ val,
4103
+ ]);
4104
+ }
4105
+ }
4106
+ else {
4107
+ var cur = tr.getAttribute("data-linenumber");
4108
+ if (cur) {
4109
+ attrUpdates.push([
4110
+ tr,
4111
+ "data-linenumber",
4112
+ "",
4113
+ ]);
4114
+ }
4115
+ }
4116
+ var ths = tr.querySelectorAll("th");
4117
+ ths.forEach(function (th) {
4118
+ var curTh = th.getAttribute("data-linenumber");
4119
+ if (curTh) {
4120
+ attrUpdates.push([
4121
+ th,
4122
+ "data-linenumber",
4123
+ "",
4124
+ ]);
4125
+ }
4126
+ });
4127
+ });
3868
4128
  }
3869
4129
  catch (_a) {
3870
4130
  void 0;
3871
4131
  }
3872
4132
  });
4133
+ var tTableDone = performance.now();
4134
+ for (var _i = 0, attrUpdates_1 = attrUpdates; _i < attrUpdates_1.length; _i++) {
4135
+ var _l = attrUpdates_1[_i], el = _l[0], attr = _l[1], val = _l[2];
4136
+ if (val === "") {
4137
+ el.removeAttribute(attr);
4138
+ }
4139
+ else {
4140
+ el.setAttribute(attr, val);
4141
+ }
4142
+ }
4143
+ var tApplyDone = performance.now();
4144
+ if (!cached) {
4145
+ GLOBAL_CACHE.set(hash, {
4146
+ srcNorm: srcNorm,
4147
+ srcLines: srcLines,
4148
+ strippedLines: strippedLines,
4149
+ lineLookup: lineLookup,
4150
+ unorderedListEntries: unorderedListEntries,
4151
+ unorderedLookup: unorderedLookup,
4152
+ orderedListEntries: orderedListEntries,
4153
+ orderedLookup: orderedLookup,
4154
+ orderedGroups: orderedGroups,
4155
+ tableRowLookup: tableRowLookup,
4156
+ tableGroups: tableGroups,
4157
+ });
4158
+ }
4159
+ console.log("[LineNumber][perf]", {
4160
+ cached: !!cached,
4161
+ times: {
4162
+ normalize: Math.round((tNorm - t0) * 100) / 100,
4163
+ index: Math.round((tIndexDone - tNorm) * 100) / 100,
4164
+ blocks: Math.round((tBlockDone - tIndexDone) * 100) / 100,
4165
+ ul: Math.round((tUlDone - tBlockDone) * 100) / 100,
4166
+ ol: Math.round((tOlDone - tUlDone) * 100) / 100,
4167
+ table: Math.round((tTableDone - tIndexDone) * 100) / 100,
4168
+ apply: Math.round((tApplyDone - tTableDone) * 100) / 100,
4169
+ total: Math.round((tApplyDone - t0) * 100) / 100,
4170
+ },
4171
+ counts: {
4172
+ blocks: blocks.length,
4173
+ ul: ulElements.length,
4174
+ ol: olElements.length,
4175
+ tables: tables.length,
4176
+ updates: attrUpdates.length,
4177
+ },
4178
+ });
3873
4179
  };
3874
4180
  /**
3875
4181
  * 节流后的行号更新函数,避免频繁更新 data-linenumber
@@ -4837,6 +5143,9 @@ var mergeOptions = function (options) {
4837
5143
  speech: {
4838
5144
  enable: false,
4839
5145
  },
5146
+ runHtml: {
5147
+ enable: false,
5148
+ },
4840
5149
  render: {
4841
5150
  media: {
4842
5151
  enable: true,
@@ -4934,7 +5243,7 @@ var previewRender = function (previewElement, markdown, options) { return __awai
4934
5243
  if (mergedOptions.anchor === 1) {
4935
5244
  previewElement.classList.add("vditor-reset--anchor");
4936
5245
  }
4937
- (0,codeRender/* codeRender */.O)(previewElement, mergedOptions.hljs);
5246
+ (0,codeRender/* codeRender */.O)(previewElement, mergedOptions.hljs, mergedOptions.runHtml);
4938
5247
  (0,highlightRender/* highlightRender */.s)(mergedOptions.hljs, previewElement, mergedOptions.cdn);
4939
5248
  (0,mathRender/* mathRender */.H)(previewElement, {
4940
5249
  cdn: mergedOptions.cdn,