@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.
- package/dist/css/content-theme/dark.css +7 -2
- package/dist/index.css +67 -17
- package/dist/index.js +438 -124
- package/dist/index.min.js +1 -1
- package/dist/js/highlight.js/styles/a11y-dark.min.css +82 -2
- package/dist/js/highlight.js/styles/a11y-light.min.css +80 -2
- package/dist/js/highlight.js/styles/agate.min.css +101 -2
- package/dist/js/highlight.js/styles/an-old-hope.min.css +60 -2
- package/dist/js/highlight.js/styles/androidstudio.min.css +57 -1
- package/dist/js/highlight.js/styles/arduino-light.min.css +74 -1
- package/dist/js/highlight.js/styles/arta.min.css +63 -1
- package/dist/js/highlight.js/styles/ascetic.min.css +41 -1
- package/dist/js/highlight.js/styles/atom-one-dark-reasonable.min.css +95 -1
- package/dist/js/highlight.js/styles/atom-one-dark.min.css +72 -1
- package/dist/js/highlight.js/styles/atom-one-light.min.css +72 -1
- package/dist/js/highlight.js/styles/base16/3024.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/apathy.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/apprentice.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/ashes.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/atelier-cave-light.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/atelier-cave.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/atelier-dune-light.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/atelier-dune.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/atelier-estuary-light.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/atelier-estuary.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/atelier-forest-light.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/atelier-forest.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/atelier-heath-light.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/atelier-heath.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/atelier-lakeside-light.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/atelier-lakeside.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/atelier-plateau-light.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/atelier-plateau.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/atelier-savanna-light.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/atelier-savanna.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/atelier-seaside-light.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/atelier-seaside.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/atelier-sulphurpool-light.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/atelier-sulphurpool.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/atlas.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/bespin.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/black-metal-bathory.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/black-metal-burzum.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/black-metal-dark-funeral.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/black-metal-gorgoroth.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/black-metal-immortal.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/black-metal-khold.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/black-metal-marduk.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/black-metal-mayhem.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/black-metal-nile.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/black-metal-venom.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/black-metal.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/brewer.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/bright.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/brogrammer.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/brush-trees-dark.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/brush-trees.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/chalk.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/circus.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/classic-dark.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/classic-light.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/codeschool.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/colors.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/cupcake.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/cupertino.min.css +95 -1
- package/dist/js/highlight.js/styles/base16/danqing.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/darcula.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/dark-violet.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/darkmoss.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/darktooth.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/decaf.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/default-dark.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/default-light.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/dirtysea.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/dracula.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/edge-dark.min.css +95 -1
- package/dist/js/highlight.js/styles/base16/edge-light.min.css +95 -1
- package/dist/js/highlight.js/styles/base16/eighties.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/embers.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/equilibrium-dark.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/equilibrium-gray-dark.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/equilibrium-gray-light.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/equilibrium-light.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/espresso.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/eva-dim.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/eva.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/flat.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/framer.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/fruit-soda.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/gigavolt.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/github.min.css +95 -1
- package/dist/js/highlight.js/styles/base16/google-dark.min.css +95 -1
- package/dist/js/highlight.js/styles/base16/google-light.min.css +95 -1
- package/dist/js/highlight.js/styles/base16/grayscale-dark.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/grayscale-light.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/green-screen.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/gruvbox-dark-hard.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/gruvbox-dark-medium.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/gruvbox-dark-pale.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/gruvbox-dark-soft.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/gruvbox-light-hard.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/gruvbox-light-medium.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/gruvbox-light-soft.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/hardcore.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/harmonic16-dark.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/harmonic16-light.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/heetch-dark.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/heetch-light.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/helios.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/hopscotch.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/horizon-dark.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/horizon-light.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/humanoid-dark.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/humanoid-light.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/ia-dark.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/ia-light.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/icy-dark.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/ir-black.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/isotope.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/kimber.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/london-tube.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/macintosh.min.css +95 -1
- package/dist/js/highlight.js/styles/base16/marrakesh.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/materia.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/material-darker.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/material-lighter.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/material-palenight.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/material-vivid.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/material.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/mellow-purple.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/mexico-light.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/mocha.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/monokai.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/nebula.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/nord.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/nova.min.css +95 -1
- package/dist/js/highlight.js/styles/base16/ocean.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/oceanicnext.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/one-light.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/onedark.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/outrun-dark.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/papercolor-dark.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/papercolor-light.min.css +95 -1
- package/dist/js/highlight.js/styles/base16/paraiso.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/pasque.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/phd.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/pico.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/pop.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/porple.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/qualia.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/railscasts.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/rebecca.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/ros-pine-dawn.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/ros-pine-moon.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/ros-pine.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/sagelight.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/sandcastle.min.css +93 -1
- package/dist/js/highlight.js/styles/base16/seti-ui.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/shapeshifter.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/silk-dark.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/silk-light.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/snazzy.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/solar-flare-light.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/solar-flare.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/solarized-dark.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/solarized-light.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/spacemacs.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/summercamp.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/summerfruit-dark.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/summerfruit-light.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/synth-midnight-terminal-dark.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/synth-midnight-terminal-light.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/tango.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/tender.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/tomorrow-night.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/tomorrow.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/twilight.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/unikitty-dark.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/unikitty-light.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/vulcan.min.css +93 -1
- package/dist/js/highlight.js/styles/base16/windows-10-light.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/windows-10.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/windows-95-light.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/windows-95.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/windows-high-contrast-light.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/windows-high-contrast.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/windows-nt-light.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/windows-nt.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/woodland.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/xcode-dusk.min.css +97 -1
- package/dist/js/highlight.js/styles/base16/zenburn.min.css +97 -1
- package/dist/js/highlight.js/styles/brown-paper.min.css +54 -1
- package/dist/js/highlight.js/styles/codepen-embed.min.css +53 -1
- package/dist/js/highlight.js/styles/color-brewer.min.css +56 -1
- package/dist/js/highlight.js/styles/dark.min.css +54 -1
- package/dist/js/highlight.js/styles/default.min.css +79 -1
- package/dist/js/highlight.js/styles/devibeans.min.css +80 -2
- package/dist/js/highlight.js/styles/docco.min.css +81 -1
- package/dist/js/highlight.js/styles/far.min.css +59 -1
- package/dist/js/highlight.js/styles/felipec.min.css +89 -2
- package/dist/js/highlight.js/styles/foundation.min.css +74 -1
- package/dist/js/highlight.js/styles/github-dark-dimmed.min.css +87 -2
- package/dist/js/highlight.js/styles/github-dark.min.css +87 -2
- package/dist/js/highlight.js/styles/github.min.css +87 -2
- package/dist/js/highlight.js/styles/gml.min.css +68 -1
- package/dist/js/highlight.js/styles/googlecode.min.css +75 -1
- package/dist/js/highlight.js/styles/gradient-dark.min.css +92 -1
- package/dist/js/highlight.js/styles/gradient-light.min.css +94 -1
- package/dist/js/highlight.js/styles/grayscale.min.css +85 -1
- package/dist/js/highlight.js/styles/hybrid.min.css +75 -1
- package/dist/js/highlight.js/styles/idea.min.css +82 -1
- package/dist/js/highlight.js/styles/intellij-light.min.css +91 -1
- package/dist/js/highlight.js/styles/ir-black.min.css +64 -1
- package/dist/js/highlight.js/styles/isbl-editor-dark.min.css +84 -1
- package/dist/js/highlight.js/styles/isbl-editor-light.min.css +84 -1
- package/dist/js/highlight.js/styles/kimbie-dark.min.css +58 -1
- package/dist/js/highlight.js/styles/kimbie-light.min.css +58 -1
- package/dist/js/highlight.js/styles/lightfair.min.css +73 -1
- package/dist/js/highlight.js/styles/lioshi.min.css +65 -1
- package/dist/js/highlight.js/styles/magula.min.css +59 -1
- package/dist/js/highlight.js/styles/mono-blue.min.css +54 -1
- package/dist/js/highlight.js/styles/monokai-sublime.min.css +72 -1
- package/dist/js/highlight.js/styles/monokai.min.css +66 -1
- package/dist/js/highlight.js/styles/night-owl.min.css +136 -1
- package/dist/js/highlight.js/styles/nnfx-dark.min.css +96 -2
- package/dist/js/highlight.js/styles/nnfx-light.min.css +96 -2
- package/dist/js/highlight.js/styles/nord.min.css +205 -1
- package/dist/js/highlight.js/styles/obsidian.min.css +76 -1
- package/dist/js/highlight.js/styles/panda-syntax-dark.min.css +88 -1
- package/dist/js/highlight.js/styles/panda-syntax-light.min.css +85 -1
- package/dist/js/highlight.js/styles/paraiso-dark.min.css +57 -1
- package/dist/js/highlight.js/styles/paraiso-light.min.css +57 -1
- package/dist/js/highlight.js/styles/pojoaque.min.css +70 -1
- package/dist/js/highlight.js/styles/purebasic.min.css +66 -1
- package/dist/js/highlight.js/styles/qtcreator-dark.min.css +71 -1
- package/dist/js/highlight.js/styles/qtcreator-light.min.css +69 -1
- package/dist/js/highlight.js/styles/rainbow.min.css +73 -1
- package/dist/js/highlight.js/styles/routeros.min.css +77 -1
- package/dist/js/highlight.js/styles/school-book.min.css +57 -1
- package/dist/js/highlight.js/styles/shades-of-purple.min.css +76 -1
- package/dist/js/highlight.js/styles/srcery.min.css +70 -1
- package/dist/js/highlight.js/styles/stackoverflow-dark.min.css +79 -2
- package/dist/js/highlight.js/styles/stackoverflow-light.min.css +79 -2
- package/dist/js/highlight.js/styles/sunburst.min.css +85 -1
- package/dist/js/highlight.js/styles/tokyo-night-dark.min.css +83 -2
- package/dist/js/highlight.js/styles/tokyo-night-light.min.css +83 -2
- package/dist/js/highlight.js/styles/tomorrow-night-blue.min.css +59 -1
- package/dist/js/highlight.js/styles/tomorrow-night-bright.min.css +59 -1
- package/dist/js/highlight.js/styles/vs.min.css +59 -1
- package/dist/js/highlight.js/styles/vs2015.min.css +94 -1
- package/dist/js/highlight.js/styles/xcode.min.css +85 -1
- package/dist/js/highlight.js/styles/xt256.min.css +74 -1
- package/dist/js/icons/material.js +8 -4
- package/dist/method.d.ts +4 -1
- package/dist/method.js +430 -121
- package/dist/method.min.js +1 -1
- package/dist/ts/markdown/codeRender.d.ts +9 -1
- package/dist/ts/util/attachLineNumbers.d.ts +6 -5
- package/dist/types/index.d.ts +8 -1
- package/package.json +2 -2
- package/src/assets/less/_line-number.less +24 -13
- package/src/assets/less/_reset.less +13 -7
- package/src/ts/markdown/codeRender.ts +152 -58
- package/src/ts/markdown/previewRender.ts +69 -25
- package/src/ts/util/attachLineNumbers.ts +382 -98
- package/src/ts/util/editorCommonEvent.ts +15 -8
- package/src/ts/wysiwyg/index.ts +6 -3
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Vditor v0.0.
|
|
2
|
+
* Vditor v0.0.15 - A markdown editor written in TypeScript.
|
|
3
3
|
*
|
|
4
4
|
* MIT License
|
|
5
5
|
*
|
|
@@ -2564,6 +2564,9 @@ var mergeOptions = function (options) {
|
|
|
2564
2564
|
speech: {
|
|
2565
2565
|
enable: false,
|
|
2566
2566
|
},
|
|
2567
|
+
runHtml: {
|
|
2568
|
+
enable: false,
|
|
2569
|
+
},
|
|
2567
2570
|
render: {
|
|
2568
2571
|
media: {
|
|
2569
2572
|
enable: true,
|
|
@@ -2661,7 +2664,7 @@ var previewRender = function (previewElement, markdown, options) { return __awai
|
|
|
2661
2664
|
if (mergedOptions.anchor === 1) {
|
|
2662
2665
|
previewElement.classList.add("vditor-reset--anchor");
|
|
2663
2666
|
}
|
|
2664
|
-
(0,codeRender/* codeRender */.O)(previewElement, mergedOptions.hljs);
|
|
2667
|
+
(0,codeRender/* codeRender */.O)(previewElement, mergedOptions.hljs, mergedOptions.runHtml);
|
|
2665
2668
|
(0,highlightRender/* highlightRender */.s)(mergedOptions.hljs, previewElement, mergedOptions.cdn);
|
|
2666
2669
|
(0,mathRender/* mathRender */.H)(previewElement, {
|
|
2667
2670
|
cdn: mergedOptions.cdn,
|
|
@@ -2825,7 +2828,7 @@ var Vditor = /** @class */ (function () {
|
|
|
2825
2828
|
/* harmony export */ "H": () => (/* binding */ _VDITOR_VERSION),
|
|
2826
2829
|
/* harmony export */ "g": () => (/* binding */ Constants)
|
|
2827
2830
|
/* harmony export */ });
|
|
2828
|
-
var _VDITOR_VERSION = "0.0.
|
|
2831
|
+
var _VDITOR_VERSION = "0.0.15";
|
|
2829
2832
|
|
|
2830
2833
|
var Constants = /** @class */ (function () {
|
|
2831
2834
|
function Constants() {
|
|
@@ -3127,7 +3130,7 @@ var Constants = /** @class */ (function () {
|
|
|
3127
3130
|
"c#",
|
|
3128
3131
|
"bat",
|
|
3129
3132
|
];
|
|
3130
|
-
Constants.CDN = "https://webcdn.wujieai.com/vditor@".concat("0.0.
|
|
3133
|
+
Constants.CDN = "https://webcdn.wujieai.com/vditor@".concat("0.0.15");
|
|
3131
3134
|
Constants.MARKDOWN_OPTIONS = {
|
|
3132
3135
|
autoSpace: false,
|
|
3133
3136
|
gfmAutoLink: true,
|
|
@@ -4485,17 +4488,28 @@ var attachEchartsContextMenu = function (el, option, chart, cdn) {
|
|
|
4485
4488
|
/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(145);
|
|
4486
4489
|
|
|
4487
4490
|
|
|
4488
|
-
|
|
4489
|
-
|
|
4491
|
+
/**
|
|
4492
|
+
* 为预览区域中的代码块添加辅助操作:
|
|
4493
|
+
* - 复制按钮:一键复制代码文本
|
|
4494
|
+
* - 运行按钮:当启用 runHtml 时,向外部回调当前代码块的 HTML 字符串
|
|
4495
|
+
*/
|
|
4496
|
+
var codeRender = function (element, option, runHtml) {
|
|
4497
|
+
Array.from(element.querySelectorAll("pre > code"))
|
|
4498
|
+
.filter(function (e, index) {
|
|
4490
4499
|
if (e.parentElement.classList.contains("vditor-wysiwyg__pre") ||
|
|
4491
4500
|
e.parentElement.classList.contains("vditor-ir__marker--pre")) {
|
|
4492
4501
|
return false;
|
|
4493
4502
|
}
|
|
4494
|
-
if (e.classList.contains("language-mermaid") ||
|
|
4495
|
-
e.classList.contains("language-
|
|
4496
|
-
e.classList.contains("language-
|
|
4497
|
-
e.classList.contains("language-
|
|
4498
|
-
e.classList.contains("language-
|
|
4503
|
+
if (e.classList.contains("language-mermaid") ||
|
|
4504
|
+
e.classList.contains("language-flowchart") ||
|
|
4505
|
+
e.classList.contains("language-echarts") ||
|
|
4506
|
+
e.classList.contains("language-mindmap") ||
|
|
4507
|
+
e.classList.contains("language-plantuml") ||
|
|
4508
|
+
e.classList.contains("language-markmap") ||
|
|
4509
|
+
e.classList.contains("language-abc") ||
|
|
4510
|
+
e.classList.contains("language-graphviz") ||
|
|
4511
|
+
e.classList.contains("language-math") ||
|
|
4512
|
+
e.classList.contains("language-smiles")) {
|
|
4499
4513
|
return false;
|
|
4500
4514
|
}
|
|
4501
4515
|
if (e.style.maxHeight.indexOf("px") > -1) {
|
|
@@ -4506,12 +4520,15 @@ var codeRender = function (element, option) {
|
|
|
4506
4520
|
return false;
|
|
4507
4521
|
}
|
|
4508
4522
|
return true;
|
|
4509
|
-
})
|
|
4510
|
-
|
|
4523
|
+
})
|
|
4524
|
+
.forEach(function (e) {
|
|
4525
|
+
var _a, _b, _c, _d;
|
|
4511
4526
|
var codeText = e.innerText;
|
|
4512
4527
|
if (e.classList.contains("highlight-chroma")) {
|
|
4513
4528
|
var codeElement = e.cloneNode(true);
|
|
4514
|
-
codeElement
|
|
4529
|
+
codeElement
|
|
4530
|
+
.querySelectorAll(".highlight-ln")
|
|
4531
|
+
.forEach(function (item) {
|
|
4515
4532
|
item.remove();
|
|
4516
4533
|
});
|
|
4517
4534
|
codeText = codeElement.innerText;
|
|
@@ -4521,19 +4538,55 @@ var codeRender = function (element, option) {
|
|
|
4521
4538
|
}
|
|
4522
4539
|
var iconHTML = '<svg><use xlink:href="#vditor-icon-copy"></use></svg>';
|
|
4523
4540
|
if (!document.getElementById("vditorIconScript")) {
|
|
4524
|
-
iconHTML =
|
|
4541
|
+
iconHTML =
|
|
4542
|
+
'<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>';
|
|
4525
4543
|
}
|
|
4544
|
+
var playIconHTML = document.getElementById("vditorIconScript")
|
|
4545
|
+
? '<svg><use xlink:href="#vditor-icon-play"></use></svg>'
|
|
4546
|
+
: '<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>';
|
|
4526
4547
|
var divElement = document.createElement("div");
|
|
4527
4548
|
divElement.className = "vditor-copy";
|
|
4528
|
-
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>");
|
|
4529
4549
|
var textarea = document.createElement("textarea");
|
|
4530
4550
|
textarea.value = (0,_util_code160to32__WEBPACK_IMPORTED_MODULE_1__/* .code160to32 */ .X)(codeText);
|
|
4531
|
-
divElement.
|
|
4551
|
+
divElement.appendChild(textarea);
|
|
4552
|
+
if (runHtml === null || runHtml === void 0 ? void 0 : runHtml.enable) {
|
|
4553
|
+
var runSpan = document.createElement("span");
|
|
4554
|
+
runSpan.setAttribute("aria-label", ((_a = window.VditorI18n) === null || _a === void 0 ? void 0 : _a.run) || "运行");
|
|
4555
|
+
runSpan.setAttribute("onmouseover", "this.setAttribute('aria-label', '".concat(((_b = window.VditorI18n) === null || _b === void 0 ? void 0 : _b.run) || "运行", "')"));
|
|
4556
|
+
runSpan.className =
|
|
4557
|
+
"vditor-copy__item vditor-tooltipped vditor-tooltipped__w";
|
|
4558
|
+
runSpan.innerHTML = playIconHTML;
|
|
4559
|
+
runSpan.addEventListener("click", function (evt) {
|
|
4560
|
+
evt.stopPropagation();
|
|
4561
|
+
if (typeof runHtml.callback === "function") {
|
|
4562
|
+
runHtml.callback((0,_util_code160to32__WEBPACK_IMPORTED_MODULE_1__/* .code160to32 */ .X)(codeText));
|
|
4563
|
+
}
|
|
4564
|
+
});
|
|
4565
|
+
divElement.appendChild(runSpan);
|
|
4566
|
+
}
|
|
4567
|
+
var copySpan = document.createElement("span");
|
|
4568
|
+
copySpan.setAttribute("aria-label", ((_c = window.VditorI18n) === null || _c === void 0 ? void 0 : _c.copy) || "复制");
|
|
4569
|
+
copySpan.setAttribute("onmouseover", "this.setAttribute('aria-label', '".concat(((_d = window.VditorI18n) === null || _d === void 0 ? void 0 : _d.copy) || "复制", "')"));
|
|
4570
|
+
copySpan.className =
|
|
4571
|
+
"vditor-copy__item vditor-tooltipped vditor-tooltipped__w";
|
|
4572
|
+
copySpan.addEventListener("click", function (evt) {
|
|
4573
|
+
var _a;
|
|
4574
|
+
evt.stopPropagation();
|
|
4575
|
+
var ta = divElement.querySelector("textarea");
|
|
4576
|
+
if (ta) {
|
|
4577
|
+
ta.select();
|
|
4578
|
+
document.execCommand("copy");
|
|
4579
|
+
copySpan.setAttribute("aria-label", ((_a = window.VditorI18n) === null || _a === void 0 ? void 0 : _a.copied) || "已复制");
|
|
4580
|
+
ta.blur();
|
|
4581
|
+
}
|
|
4582
|
+
});
|
|
4583
|
+
copySpan.innerHTML = iconHTML;
|
|
4584
|
+
divElement.appendChild(copySpan);
|
|
4532
4585
|
if (option && option.renderMenu) {
|
|
4533
4586
|
option.renderMenu(e, divElement);
|
|
4534
4587
|
}
|
|
4535
4588
|
e.before(divElement);
|
|
4536
|
-
e.style.maxHeight =
|
|
4589
|
+
e.style.maxHeight = 300 + "px";
|
|
4537
4590
|
// https://github.com/Vanessa219/vditor/issues/1356
|
|
4538
4591
|
e.insertAdjacentHTML("afterend", "<span style=\"position: absolute\">".concat(_constants__WEBPACK_IMPORTED_MODULE_0__/* .Constants.ZWSP */ .g.ZWSP, "</span>"));
|
|
4539
4592
|
});
|
|
@@ -6244,16 +6297,28 @@ var addStyle = function (url, id) {
|
|
|
6244
6297
|
/* harmony export */ "g": () => (/* binding */ attachLineNumbersToBlocksThrottled)
|
|
6245
6298
|
/* harmony export */ });
|
|
6246
6299
|
/**
|
|
6247
|
-
*
|
|
6248
|
-
* -
|
|
6249
|
-
* -
|
|
6250
|
-
*
|
|
6251
|
-
*
|
|
6300
|
+
* 功能:为编辑区域批量添加行号与列表/表格标记(O(n))
|
|
6301
|
+
* - 块级:为所有 `data-block` 写入 `data-linenumber`
|
|
6302
|
+
* - 列表:为 `ul/ol > li` 写入 `data-linenumber`、`data-list-level`、`data-list-number`
|
|
6303
|
+
* - 表格:为 `table` 的 `tr` 写入 `data-linenumber`(不为 `th` 设置)
|
|
6304
|
+
* - 性能:一次解析 Markdown 建索引,批量收集并一次性更新属性,缓存避免重复计算
|
|
6305
|
+
* - 精度:支持嵌套列表、换行列表项、多级序号;表格跨页连续行号,容忍合并单元格
|
|
6252
6306
|
*/
|
|
6253
6307
|
var attachLineNumbersToBlocks = function (root, sourceMarkdown) {
|
|
6308
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
6254
6309
|
if (!root || !sourceMarkdown) {
|
|
6255
6310
|
return;
|
|
6256
6311
|
}
|
|
6312
|
+
var t0 = performance.now();
|
|
6313
|
+
var computeHash = function (s) {
|
|
6314
|
+
var h = 0;
|
|
6315
|
+
for (var i = 0; i < s.length; i++) {
|
|
6316
|
+
h = (h * 31 + s.charCodeAt(i)) | 0;
|
|
6317
|
+
}
|
|
6318
|
+
return "".concat(s.length, ":").concat(h);
|
|
6319
|
+
};
|
|
6320
|
+
var GLOBAL_CACHE = globalThis.__VDITOR_LINE_CACHE__ || new Map();
|
|
6321
|
+
globalThis.__VDITOR_LINE_CACHE__ = GLOBAL_CACHE;
|
|
6257
6322
|
var ZWSP = "\u200b";
|
|
6258
6323
|
var normalize = function (text) {
|
|
6259
6324
|
return text
|
|
@@ -6264,7 +6329,10 @@ var attachLineNumbersToBlocks = function (root, sourceMarkdown) {
|
|
|
6264
6329
|
.replace(/[\t\f\v ]+/g, " ");
|
|
6265
6330
|
};
|
|
6266
6331
|
var srcNorm = normalize(sourceMarkdown);
|
|
6267
|
-
var
|
|
6332
|
+
var tNorm = performance.now();
|
|
6333
|
+
var hash = computeHash(srcNorm);
|
|
6334
|
+
var cached = GLOBAL_CACHE.get(hash);
|
|
6335
|
+
var srcLines = (_a = cached === null || cached === void 0 ? void 0 : cached.srcLines) !== null && _a !== void 0 ? _a : srcNorm.split("\n");
|
|
6268
6336
|
var stripInlineMD = function (text) {
|
|
6269
6337
|
return (text
|
|
6270
6338
|
.replace(/\\([*_`~])/g, "$1")
|
|
@@ -6293,15 +6361,17 @@ var attachLineNumbersToBlocks = function (root, sourceMarkdown) {
|
|
|
6293
6361
|
.replace(/[{}]/g, "")
|
|
6294
6362
|
.trim());
|
|
6295
6363
|
};
|
|
6296
|
-
var strippedLines = srcLines.map(function (l) { return stripInlineMD(l); });
|
|
6297
|
-
var lineLookup = new Map();
|
|
6298
|
-
|
|
6299
|
-
var
|
|
6300
|
-
|
|
6301
|
-
lineLookup.
|
|
6302
|
-
|
|
6303
|
-
|
|
6304
|
-
|
|
6364
|
+
var strippedLines = (_b = cached === null || cached === void 0 ? void 0 : cached.strippedLines) !== null && _b !== void 0 ? _b : srcLines.map(function (l) { return stripInlineMD(l); });
|
|
6365
|
+
var lineLookup = (_c = cached === null || cached === void 0 ? void 0 : cached.lineLookup) !== null && _c !== void 0 ? _c : new Map();
|
|
6366
|
+
if (!cached) {
|
|
6367
|
+
for (var i = 0; i < strippedLines.length; i++) {
|
|
6368
|
+
var key = strippedLines[i];
|
|
6369
|
+
if (!lineLookup.has(key)) {
|
|
6370
|
+
lineLookup.set(key, [i + 1]);
|
|
6371
|
+
}
|
|
6372
|
+
else {
|
|
6373
|
+
lineLookup.get(key).push(i + 1);
|
|
6374
|
+
}
|
|
6305
6375
|
}
|
|
6306
6376
|
}
|
|
6307
6377
|
var usedLines = new Set();
|
|
@@ -6333,20 +6403,25 @@ var attachLineNumbersToBlocks = function (root, sourceMarkdown) {
|
|
|
6333
6403
|
* 预处理:收集 Markdown 中所有无序列表(ul)行及其去除行内标记后的内容,构建快速查找结构。
|
|
6334
6404
|
* 仅匹配以 `*`、`-`、`+` 开头的条目,支持任务列表如 `- [ ]`、`* [x]`。
|
|
6335
6405
|
*/
|
|
6336
|
-
var unorderedListEntries = [];
|
|
6337
|
-
var unorderedLookup = new Map();
|
|
6406
|
+
var unorderedListEntries = (_d = cached === null || cached === void 0 ? void 0 : cached.unorderedListEntries) !== null && _d !== void 0 ? _d : [];
|
|
6407
|
+
var unorderedLookup = (_e = cached === null || cached === void 0 ? void 0 : cached.unorderedLookup) !== null && _e !== void 0 ? _e : new Map();
|
|
6338
6408
|
var usedUnorderedLines = new Set();
|
|
6339
|
-
|
|
6340
|
-
var
|
|
6341
|
-
|
|
6342
|
-
|
|
6343
|
-
|
|
6344
|
-
|
|
6345
|
-
|
|
6346
|
-
|
|
6347
|
-
|
|
6348
|
-
|
|
6349
|
-
unorderedLookup.
|
|
6409
|
+
if (!cached) {
|
|
6410
|
+
for (var i = 0; i < srcLines.length; i++) {
|
|
6411
|
+
var raw = srcLines[i];
|
|
6412
|
+
var m = raw.match(/^\s*[*+-]\s+(?:\[(?: |x|X)\]\s+)?(.*)$/);
|
|
6413
|
+
if (m && typeof m[1] === "string") {
|
|
6414
|
+
var contentStripped = stripInlineForList(m[1]);
|
|
6415
|
+
unorderedListEntries.push({
|
|
6416
|
+
ln: i + 1,
|
|
6417
|
+
content: contentStripped,
|
|
6418
|
+
});
|
|
6419
|
+
if (!unorderedLookup.has(contentStripped)) {
|
|
6420
|
+
unorderedLookup.set(contentStripped, [i + 1]);
|
|
6421
|
+
}
|
|
6422
|
+
else {
|
|
6423
|
+
unorderedLookup.get(contentStripped).push(i + 1);
|
|
6424
|
+
}
|
|
6350
6425
|
}
|
|
6351
6426
|
}
|
|
6352
6427
|
}
|
|
@@ -6387,44 +6462,48 @@ var attachLineNumbersToBlocks = function (root, sourceMarkdown) {
|
|
|
6387
6462
|
/**
|
|
6388
6463
|
* 预处理:收集 Markdown 中所有有序列表(ol)行及其内容,支持 `1.` 或 `1)` 以及任务列表前缀。
|
|
6389
6464
|
*/
|
|
6390
|
-
var orderedListEntries = [];
|
|
6391
|
-
var orderedLookup = new Map();
|
|
6465
|
+
var orderedListEntries = (_f = cached === null || cached === void 0 ? void 0 : cached.orderedListEntries) !== null && _f !== void 0 ? _f : [];
|
|
6466
|
+
var orderedLookup = (_g = cached === null || cached === void 0 ? void 0 : cached.orderedLookup) !== null && _g !== void 0 ? _g : new Map();
|
|
6392
6467
|
var usedOrderedLines = new Set();
|
|
6393
6468
|
var ORDERED_RE = /\s*\d+(?:[.)、.。]|[\uFF0E\uFF09\u3001])\s+(?:\[(?: |x|X)\]\s+)?(.*)/;
|
|
6394
6469
|
var ORDERED_FULL = new RegExp("^".concat(ORDERED_RE.source, "$"));
|
|
6395
|
-
|
|
6396
|
-
var
|
|
6397
|
-
|
|
6398
|
-
|
|
6399
|
-
|
|
6400
|
-
|
|
6401
|
-
|
|
6402
|
-
|
|
6403
|
-
|
|
6404
|
-
|
|
6405
|
-
orderedLookup.
|
|
6470
|
+
if (!cached) {
|
|
6471
|
+
for (var i = 0; i < srcLines.length; i++) {
|
|
6472
|
+
var raw = srcLines[i];
|
|
6473
|
+
var m = raw.match(ORDERED_FULL);
|
|
6474
|
+
if (m && typeof m[1] === "string") {
|
|
6475
|
+
var contentStripped = stripInlineForList(m[1]);
|
|
6476
|
+
orderedListEntries.push({
|
|
6477
|
+
ln: i + 1,
|
|
6478
|
+
content: contentStripped,
|
|
6479
|
+
});
|
|
6480
|
+
if (!orderedLookup.has(contentStripped)) {
|
|
6481
|
+
orderedLookup.set(contentStripped, [i + 1]);
|
|
6482
|
+
}
|
|
6483
|
+
else {
|
|
6484
|
+
orderedLookup.get(contentStripped).push(i + 1);
|
|
6485
|
+
}
|
|
6406
6486
|
}
|
|
6407
6487
|
}
|
|
6408
6488
|
}
|
|
6409
|
-
|
|
6410
|
-
|
|
6411
|
-
|
|
6412
|
-
|
|
6413
|
-
|
|
6414
|
-
|
|
6415
|
-
|
|
6416
|
-
|
|
6417
|
-
|
|
6418
|
-
|
|
6419
|
-
|
|
6489
|
+
var orderedGroups = (_h = cached === null || cached === void 0 ? void 0 : cached.orderedGroups) !== null && _h !== void 0 ? _h : [];
|
|
6490
|
+
if (!cached) {
|
|
6491
|
+
for (var i = 0; i < srcLines.length;) {
|
|
6492
|
+
var raw = srcLines[i];
|
|
6493
|
+
if (ORDERED_FULL.test(raw)) {
|
|
6494
|
+
var group = [];
|
|
6495
|
+
while (i < srcLines.length && ORDERED_FULL.test(srcLines[i])) {
|
|
6496
|
+
group.push(i + 1);
|
|
6497
|
+
i++;
|
|
6498
|
+
}
|
|
6499
|
+
if (group.length > 0) {
|
|
6500
|
+
orderedGroups.push(group);
|
|
6501
|
+
}
|
|
6420
6502
|
}
|
|
6421
|
-
|
|
6422
|
-
|
|
6503
|
+
else {
|
|
6504
|
+
i++;
|
|
6423
6505
|
}
|
|
6424
6506
|
}
|
|
6425
|
-
else {
|
|
6426
|
-
i++;
|
|
6427
|
-
}
|
|
6428
6507
|
}
|
|
6429
6508
|
/**
|
|
6430
6509
|
* 为给定文本在有序列表候选中选择行号,精确匹配优先,包含匹配回退。
|
|
@@ -6476,6 +6555,7 @@ var attachLineNumbersToBlocks = function (root, sourceMarkdown) {
|
|
|
6476
6555
|
});
|
|
6477
6556
|
return buf;
|
|
6478
6557
|
};
|
|
6558
|
+
var attrUpdates = [];
|
|
6479
6559
|
var blocks = root.querySelectorAll("[data-block]");
|
|
6480
6560
|
blocks.forEach(function (el) {
|
|
6481
6561
|
try {
|
|
@@ -6484,22 +6564,26 @@ var attachLineNumbersToBlocks = function (root, sourceMarkdown) {
|
|
|
6484
6564
|
if (dataType === "math-block" || dataType === "code-block") {
|
|
6485
6565
|
return;
|
|
6486
6566
|
}
|
|
6487
|
-
// 仅 li 需要行号:跳过并清理 ul/ol 自身及其内部嵌套的 p/div 等块
|
|
6488
6567
|
var tagName = container.tagName;
|
|
6489
6568
|
if (tagName === "UL" || tagName === "OL") {
|
|
6490
|
-
container.
|
|
6569
|
+
if (container.getAttribute("data-linenumber")) {
|
|
6570
|
+
attrUpdates.push([container, "data-linenumber", ""]);
|
|
6571
|
+
}
|
|
6491
6572
|
return;
|
|
6492
6573
|
}
|
|
6493
6574
|
var liAncestor = container.closest("li");
|
|
6494
6575
|
if (liAncestor) {
|
|
6495
|
-
container.
|
|
6576
|
+
if (container.getAttribute("data-linenumber")) {
|
|
6577
|
+
attrUpdates.push([container, "data-linenumber", ""]);
|
|
6578
|
+
}
|
|
6496
6579
|
return;
|
|
6497
6580
|
}
|
|
6498
6581
|
var text = container.textContent || "";
|
|
6499
6582
|
var normText = normalize(text);
|
|
6500
|
-
// 跳过纯空白块
|
|
6501
6583
|
if (!normText.trim()) {
|
|
6502
|
-
container.
|
|
6584
|
+
if (container.getAttribute("data-linenumber")) {
|
|
6585
|
+
attrUpdates.push([container, "data-linenumber", ""]);
|
|
6586
|
+
}
|
|
6503
6587
|
return;
|
|
6504
6588
|
}
|
|
6505
6589
|
var lineNumber = -1;
|
|
@@ -6526,13 +6610,18 @@ var attachLineNumbersToBlocks = function (root, sourceMarkdown) {
|
|
|
6526
6610
|
}
|
|
6527
6611
|
if (lineNumber !== -1) {
|
|
6528
6612
|
usedLines.add(lineNumber);
|
|
6529
|
-
container.
|
|
6613
|
+
var cur = container.getAttribute("data-linenumber");
|
|
6614
|
+
var val = String(lineNumber);
|
|
6615
|
+
if (cur !== val) {
|
|
6616
|
+
attrUpdates.push([container, "data-linenumber", val]);
|
|
6617
|
+
}
|
|
6530
6618
|
}
|
|
6531
6619
|
}
|
|
6532
6620
|
catch (_a) {
|
|
6533
6621
|
void 0;
|
|
6534
6622
|
}
|
|
6535
6623
|
});
|
|
6624
|
+
var tBlockDone = performance.now();
|
|
6536
6625
|
/**
|
|
6537
6626
|
* 为所有 `ul` 下的每个直接 `li` 子元素追加 `data-linenumber`,不修改 `ul` 本身。
|
|
6538
6627
|
* 支持多层嵌套与非文本起始节点(如加粗/行内代码)。
|
|
@@ -6541,60 +6630,93 @@ var attachLineNumbersToBlocks = function (root, sourceMarkdown) {
|
|
|
6541
6630
|
ulElements.forEach(function (ul) {
|
|
6542
6631
|
try {
|
|
6543
6632
|
var children = Array.from(ul.children);
|
|
6544
|
-
|
|
6545
|
-
var child = children_1[_i];
|
|
6633
|
+
var _loop_1 = function (child) {
|
|
6546
6634
|
if (child.tagName !== "LI")
|
|
6547
|
-
continue;
|
|
6635
|
+
return "continue";
|
|
6548
6636
|
var li = child;
|
|
6549
6637
|
var rawText = getImmediateLiText(li);
|
|
6550
6638
|
var norm = normalize(rawText);
|
|
6551
6639
|
var firstLine = norm.split("\n").find(function (l) { return l.trim().length > 0; }) || norm;
|
|
6552
6640
|
var ln = findUnorderedListLineNumber(firstLine);
|
|
6641
|
+
var level = (function () {
|
|
6642
|
+
var depth = 0;
|
|
6643
|
+
var p = li;
|
|
6644
|
+
while (p) {
|
|
6645
|
+
p = p.parentElement;
|
|
6646
|
+
if (!p)
|
|
6647
|
+
break;
|
|
6648
|
+
var tag = p.tagName;
|
|
6649
|
+
if (tag === "UL" || tag === "OL")
|
|
6650
|
+
depth++;
|
|
6651
|
+
}
|
|
6652
|
+
return depth;
|
|
6653
|
+
})();
|
|
6654
|
+
var levelStr = String(level);
|
|
6655
|
+
var curLevel = li.getAttribute("data-list-level");
|
|
6656
|
+
if (curLevel !== levelStr) {
|
|
6657
|
+
attrUpdates.push([li, "data-list-level", levelStr]);
|
|
6658
|
+
}
|
|
6553
6659
|
if (ln !== -1) {
|
|
6554
6660
|
usedUnorderedLines.add(ln);
|
|
6555
|
-
li.
|
|
6661
|
+
var curLn = li.getAttribute("data-linenumber");
|
|
6662
|
+
var val = String(ln);
|
|
6663
|
+
if (curLn !== val) {
|
|
6664
|
+
attrUpdates.push([li, "data-linenumber", val]);
|
|
6665
|
+
}
|
|
6556
6666
|
}
|
|
6557
6667
|
else {
|
|
6558
|
-
li.
|
|
6668
|
+
if (li.getAttribute("data-linenumber")) {
|
|
6669
|
+
attrUpdates.push([li, "data-linenumber", ""]);
|
|
6670
|
+
}
|
|
6559
6671
|
}
|
|
6672
|
+
};
|
|
6673
|
+
for (var _i = 0, children_1 = children; _i < children_1.length; _i++) {
|
|
6674
|
+
var child = children_1[_i];
|
|
6675
|
+
_loop_1(child);
|
|
6560
6676
|
}
|
|
6561
6677
|
}
|
|
6562
6678
|
catch (_a) {
|
|
6563
6679
|
void 0;
|
|
6564
6680
|
}
|
|
6565
6681
|
});
|
|
6682
|
+
var tUlDone = performance.now();
|
|
6566
6683
|
/**
|
|
6567
6684
|
* 为所有 `ol` 下的每个直接 `li` 子元素追加 `data-linenumber`,不修改 `ol` 本身。
|
|
6568
6685
|
*/
|
|
6569
6686
|
var olElements = root.querySelectorAll("ol");
|
|
6687
|
+
var orderedIndexMap = new WeakMap();
|
|
6570
6688
|
olElements.forEach(function (ol) {
|
|
6571
6689
|
try {
|
|
6572
6690
|
var currentGroupIdx = -1;
|
|
6573
6691
|
var lastAssigned_1 = -1;
|
|
6692
|
+
var startAttr = Number(ol.getAttribute("start"));
|
|
6693
|
+
var start = Number.isFinite(startAttr) && startAttr > 0 ? startAttr : 1;
|
|
6574
6694
|
var children = Array.from(ol.children);
|
|
6695
|
+
var seq = start;
|
|
6575
6696
|
for (var _i = 0, children_2 = children; _i < children_2.length; _i++) {
|
|
6576
6697
|
var child = children_2[_i];
|
|
6577
6698
|
if (child.tagName !== "LI")
|
|
6578
6699
|
continue;
|
|
6700
|
+
orderedIndexMap.set(child, seq++);
|
|
6701
|
+
}
|
|
6702
|
+
var _loop_2 = function (child) {
|
|
6703
|
+
if (child.tagName !== "LI")
|
|
6704
|
+
return "continue";
|
|
6579
6705
|
var li = child;
|
|
6580
6706
|
var rawText = getImmediateLiText(li);
|
|
6581
6707
|
var norm = normalize(rawText);
|
|
6582
6708
|
var firstLine = norm.split("\n").find(function (l) { return l.trim().length > 0; }) || norm;
|
|
6583
6709
|
var stripped0 = stripInlineForList(firstLine);
|
|
6584
6710
|
var stripped = stripped0 || stripInlineMD(firstLine);
|
|
6585
|
-
|
|
6586
|
-
var available = candidates.filter(function (n) { return !usedOrderedLines.has(n); });
|
|
6711
|
+
orderedLookup.get(stripped);
|
|
6587
6712
|
var ln = findOrderedListLineNumber(firstLine);
|
|
6588
6713
|
if (ln !== -1) {
|
|
6589
6714
|
usedOrderedLines.add(ln);
|
|
6590
|
-
li.
|
|
6591
|
-
|
|
6592
|
-
|
|
6593
|
-
|
|
6594
|
-
|
|
6595
|
-
line: ln,
|
|
6596
|
-
});
|
|
6597
|
-
// 记录当前组
|
|
6715
|
+
var cur = li.getAttribute("data-linenumber");
|
|
6716
|
+
var val = String(ln);
|
|
6717
|
+
if (cur !== val) {
|
|
6718
|
+
attrUpdates.push([li, "data-linenumber", val]);
|
|
6719
|
+
}
|
|
6598
6720
|
for (var gi = 0; gi < orderedGroups.length; gi++) {
|
|
6599
6721
|
if (orderedGroups[gi].includes(ln)) {
|
|
6600
6722
|
currentGroupIdx = gi;
|
|
@@ -6604,13 +6726,11 @@ var attachLineNumbersToBlocks = function (root, sourceMarkdown) {
|
|
|
6604
6726
|
lastAssigned_1 = ln;
|
|
6605
6727
|
}
|
|
6606
6728
|
else {
|
|
6607
|
-
// 顺序回退:基于当前组或猜测组,按序分配下一未使用行
|
|
6608
6729
|
var assigned = -1;
|
|
6609
6730
|
var pickNextFromGroup = function (gi) {
|
|
6610
6731
|
if (gi < 0 || gi >= orderedGroups.length)
|
|
6611
6732
|
return -1;
|
|
6612
6733
|
var lines = orderedGroups[gi];
|
|
6613
|
-
// 优先从上次分配后续查找
|
|
6614
6734
|
var startIdx = 0;
|
|
6615
6735
|
if (lastAssigned_1 !== -1) {
|
|
6616
6736
|
var idx = lines.indexOf(lastAssigned_1);
|
|
@@ -6632,7 +6752,6 @@ var attachLineNumbersToBlocks = function (root, sourceMarkdown) {
|
|
|
6632
6752
|
assigned = pickNextFromGroup(currentGroupIdx);
|
|
6633
6753
|
}
|
|
6634
6754
|
if (assigned === -1) {
|
|
6635
|
-
// 猜测组:选择拥有可用行的首个组
|
|
6636
6755
|
for (var gi = 0; gi < orderedGroups.length && assigned === -1; gi++) {
|
|
6637
6756
|
var cand = pickNextFromGroup(gi);
|
|
6638
6757
|
if (cand !== -1) {
|
|
@@ -6643,39 +6762,229 @@ var attachLineNumbersToBlocks = function (root, sourceMarkdown) {
|
|
|
6643
6762
|
}
|
|
6644
6763
|
if (assigned !== -1) {
|
|
6645
6764
|
usedOrderedLines.add(assigned);
|
|
6646
|
-
li.
|
|
6647
|
-
|
|
6648
|
-
|
|
6649
|
-
|
|
6650
|
-
|
|
6651
|
-
group: currentGroupIdx,
|
|
6652
|
-
});
|
|
6765
|
+
var cur = li.getAttribute("data-linenumber");
|
|
6766
|
+
var val = String(assigned);
|
|
6767
|
+
if (cur !== val) {
|
|
6768
|
+
attrUpdates.push([li, "data-linenumber", val]);
|
|
6769
|
+
}
|
|
6653
6770
|
lastAssigned_1 = assigned;
|
|
6654
6771
|
}
|
|
6655
6772
|
else {
|
|
6656
|
-
li.
|
|
6657
|
-
|
|
6658
|
-
|
|
6659
|
-
text: firstLine,
|
|
6660
|
-
stripped: stripped,
|
|
6661
|
-
candidates: candidates,
|
|
6662
|
-
available: available,
|
|
6663
|
-
reason: !stripped0
|
|
6664
|
-
? "empty-after-strip"
|
|
6665
|
-
: candidates.length === 0
|
|
6666
|
-
? "no-index-candidates"
|
|
6667
|
-
: available.length === 0
|
|
6668
|
-
? "all-candidates-consumed"
|
|
6669
|
-
: "fallback-no-match",
|
|
6670
|
-
});
|
|
6773
|
+
if (li.getAttribute("data-linenumber")) {
|
|
6774
|
+
attrUpdates.push([li, "data-linenumber", ""]);
|
|
6775
|
+
}
|
|
6671
6776
|
}
|
|
6672
6777
|
}
|
|
6778
|
+
var level = (function () {
|
|
6779
|
+
var depth = 0;
|
|
6780
|
+
var p = li;
|
|
6781
|
+
while (p) {
|
|
6782
|
+
p = p.parentElement;
|
|
6783
|
+
if (!p)
|
|
6784
|
+
break;
|
|
6785
|
+
var tag = p.tagName;
|
|
6786
|
+
if (tag === "UL" || tag === "OL")
|
|
6787
|
+
depth++;
|
|
6788
|
+
}
|
|
6789
|
+
return depth;
|
|
6790
|
+
})();
|
|
6791
|
+
var levelStr = String(level);
|
|
6792
|
+
var curLevel = li.getAttribute("data-list-level");
|
|
6793
|
+
if (curLevel !== levelStr) {
|
|
6794
|
+
attrUpdates.push([li, "data-list-level", levelStr]);
|
|
6795
|
+
}
|
|
6796
|
+
var numbering = (function () {
|
|
6797
|
+
var _a;
|
|
6798
|
+
var parts = [];
|
|
6799
|
+
var node = li;
|
|
6800
|
+
while (node) {
|
|
6801
|
+
var parentOl = node.closest("ol");
|
|
6802
|
+
if (!parentOl)
|
|
6803
|
+
break;
|
|
6804
|
+
var parentLi = ((_a = parentOl.parentElement) === null || _a === void 0 ? void 0 : _a.closest("li")) ||
|
|
6805
|
+
parentOl.parentElement;
|
|
6806
|
+
var idx = orderedIndexMap.get(node);
|
|
6807
|
+
if (typeof idx === "number") {
|
|
6808
|
+
parts.push(idx);
|
|
6809
|
+
}
|
|
6810
|
+
node = parentLi;
|
|
6811
|
+
}
|
|
6812
|
+
return parts.reverse().join(".");
|
|
6813
|
+
})();
|
|
6814
|
+
var curNum = li.getAttribute("data-list-number") || "";
|
|
6815
|
+
if (numbering && curNum !== numbering) {
|
|
6816
|
+
attrUpdates.push([li, "data-list-number", numbering]);
|
|
6817
|
+
}
|
|
6818
|
+
};
|
|
6819
|
+
for (var _a = 0, children_3 = children; _a < children_3.length; _a++) {
|
|
6820
|
+
var child = children_3[_a];
|
|
6821
|
+
_loop_2(child);
|
|
6822
|
+
}
|
|
6823
|
+
}
|
|
6824
|
+
catch (_b) {
|
|
6825
|
+
void 0;
|
|
6826
|
+
}
|
|
6827
|
+
});
|
|
6828
|
+
var tOlDone = performance.now();
|
|
6829
|
+
var tableRowLookup = (_j = cached === null || cached === void 0 ? void 0 : cached.tableRowLookup) !== null && _j !== void 0 ? _j : new Map();
|
|
6830
|
+
var tableGroups = (_k = cached === null || cached === void 0 ? void 0 : cached.tableGroups) !== null && _k !== void 0 ? _k : [];
|
|
6831
|
+
if (!cached) {
|
|
6832
|
+
var isTableRowLine = function (line) {
|
|
6833
|
+
return /^\s*\|.*\|\s*$/.test(line);
|
|
6834
|
+
};
|
|
6835
|
+
var isAlignLine = function (line) {
|
|
6836
|
+
return /^\s*\|?(?:\s*:?-{2,}:?\s*\|)+\s*:?-{2,}:?\s*\|?\s*$/.test(line);
|
|
6837
|
+
};
|
|
6838
|
+
for (var i = 0; i < srcLines.length;) {
|
|
6839
|
+
var header = srcLines[i];
|
|
6840
|
+
var align = srcLines[i + 1];
|
|
6841
|
+
if (isTableRowLine(header) && isAlignLine(align || "")) {
|
|
6842
|
+
var groupRows = [i + 1];
|
|
6843
|
+
var groupRowTexts = [
|
|
6844
|
+
stripInlineMD(header.replace(/^\s*\|?|\|?\s*$/g, "")),
|
|
6845
|
+
];
|
|
6846
|
+
i += 2;
|
|
6847
|
+
while (i < srcLines.length && isTableRowLine(srcLines[i])) {
|
|
6848
|
+
groupRows.push(i + 1);
|
|
6849
|
+
groupRowTexts.push(stripInlineMD(srcLines[i].replace(/^\s*\|?|\|?\s*$/g, "")));
|
|
6850
|
+
i++;
|
|
6851
|
+
}
|
|
6852
|
+
tableGroups.push({
|
|
6853
|
+
rows: groupRows,
|
|
6854
|
+
rowTexts: groupRowTexts,
|
|
6855
|
+
});
|
|
6856
|
+
for (var t = 0; t < groupRowTexts.length; t++) {
|
|
6857
|
+
var key = groupRowTexts[t];
|
|
6858
|
+
var ln = groupRows[t];
|
|
6859
|
+
var arr = tableRowLookup.get(key);
|
|
6860
|
+
if (arr)
|
|
6861
|
+
arr.push(ln);
|
|
6862
|
+
else
|
|
6863
|
+
tableRowLookup.set(key, [ln]);
|
|
6864
|
+
}
|
|
6865
|
+
}
|
|
6866
|
+
else {
|
|
6867
|
+
i++;
|
|
6673
6868
|
}
|
|
6674
6869
|
}
|
|
6870
|
+
}
|
|
6871
|
+
var usedTableLines = new Set();
|
|
6872
|
+
var tIndexDone = performance.now();
|
|
6873
|
+
var tables = root.querySelectorAll("table");
|
|
6874
|
+
var groupPtr = 0;
|
|
6875
|
+
tables.forEach(function (table) {
|
|
6876
|
+
try {
|
|
6877
|
+
var trs = table.querySelectorAll("tr");
|
|
6878
|
+
trs.forEach(function (tr) {
|
|
6879
|
+
var cells = Array.from(tr.cells);
|
|
6880
|
+
var rowText = cells.map(function (c) { return c.textContent || ""; }).join("|");
|
|
6881
|
+
var normRow = stripInlineMD(normalize(rowText));
|
|
6882
|
+
var ln = pickFirstUnused(tableRowLookup.get(normRow));
|
|
6883
|
+
if (ln === -1) {
|
|
6884
|
+
while (groupPtr < tableGroups.length &&
|
|
6885
|
+
tableGroups[groupPtr].rows.every(function (r) {
|
|
6886
|
+
return usedTableLines.has(r);
|
|
6887
|
+
})) {
|
|
6888
|
+
groupPtr++;
|
|
6889
|
+
}
|
|
6890
|
+
if (groupPtr < tableGroups.length) {
|
|
6891
|
+
var g = tableGroups[groupPtr];
|
|
6892
|
+
var chosen = -1;
|
|
6893
|
+
for (var k = 0; k < g.rows.length; k++) {
|
|
6894
|
+
var cand = g.rows[k];
|
|
6895
|
+
if (!usedTableLines.has(cand)) {
|
|
6896
|
+
chosen = cand;
|
|
6897
|
+
break;
|
|
6898
|
+
}
|
|
6899
|
+
}
|
|
6900
|
+
ln = chosen;
|
|
6901
|
+
}
|
|
6902
|
+
}
|
|
6903
|
+
if (ln !== -1) {
|
|
6904
|
+
usedTableLines.add(ln);
|
|
6905
|
+
var cur = tr.getAttribute("data-linenumber");
|
|
6906
|
+
var val = String(ln);
|
|
6907
|
+
if (cur !== val) {
|
|
6908
|
+
attrUpdates.push([
|
|
6909
|
+
tr,
|
|
6910
|
+
"data-linenumber",
|
|
6911
|
+
val,
|
|
6912
|
+
]);
|
|
6913
|
+
}
|
|
6914
|
+
}
|
|
6915
|
+
else {
|
|
6916
|
+
var cur = tr.getAttribute("data-linenumber");
|
|
6917
|
+
if (cur) {
|
|
6918
|
+
attrUpdates.push([
|
|
6919
|
+
tr,
|
|
6920
|
+
"data-linenumber",
|
|
6921
|
+
"",
|
|
6922
|
+
]);
|
|
6923
|
+
}
|
|
6924
|
+
}
|
|
6925
|
+
var ths = tr.querySelectorAll("th");
|
|
6926
|
+
ths.forEach(function (th) {
|
|
6927
|
+
var curTh = th.getAttribute("data-linenumber");
|
|
6928
|
+
if (curTh) {
|
|
6929
|
+
attrUpdates.push([
|
|
6930
|
+
th,
|
|
6931
|
+
"data-linenumber",
|
|
6932
|
+
"",
|
|
6933
|
+
]);
|
|
6934
|
+
}
|
|
6935
|
+
});
|
|
6936
|
+
});
|
|
6937
|
+
}
|
|
6675
6938
|
catch (_a) {
|
|
6676
6939
|
void 0;
|
|
6677
6940
|
}
|
|
6678
6941
|
});
|
|
6942
|
+
var tTableDone = performance.now();
|
|
6943
|
+
for (var _i = 0, attrUpdates_1 = attrUpdates; _i < attrUpdates_1.length; _i++) {
|
|
6944
|
+
var _l = attrUpdates_1[_i], el = _l[0], attr = _l[1], val = _l[2];
|
|
6945
|
+
if (val === "") {
|
|
6946
|
+
el.removeAttribute(attr);
|
|
6947
|
+
}
|
|
6948
|
+
else {
|
|
6949
|
+
el.setAttribute(attr, val);
|
|
6950
|
+
}
|
|
6951
|
+
}
|
|
6952
|
+
var tApplyDone = performance.now();
|
|
6953
|
+
if (!cached) {
|
|
6954
|
+
GLOBAL_CACHE.set(hash, {
|
|
6955
|
+
srcNorm: srcNorm,
|
|
6956
|
+
srcLines: srcLines,
|
|
6957
|
+
strippedLines: strippedLines,
|
|
6958
|
+
lineLookup: lineLookup,
|
|
6959
|
+
unorderedListEntries: unorderedListEntries,
|
|
6960
|
+
unorderedLookup: unorderedLookup,
|
|
6961
|
+
orderedListEntries: orderedListEntries,
|
|
6962
|
+
orderedLookup: orderedLookup,
|
|
6963
|
+
orderedGroups: orderedGroups,
|
|
6964
|
+
tableRowLookup: tableRowLookup,
|
|
6965
|
+
tableGroups: tableGroups,
|
|
6966
|
+
});
|
|
6967
|
+
}
|
|
6968
|
+
console.log("[LineNumber][perf]", {
|
|
6969
|
+
cached: !!cached,
|
|
6970
|
+
times: {
|
|
6971
|
+
normalize: Math.round((tNorm - t0) * 100) / 100,
|
|
6972
|
+
index: Math.round((tIndexDone - tNorm) * 100) / 100,
|
|
6973
|
+
blocks: Math.round((tBlockDone - tIndexDone) * 100) / 100,
|
|
6974
|
+
ul: Math.round((tUlDone - tBlockDone) * 100) / 100,
|
|
6975
|
+
ol: Math.round((tOlDone - tUlDone) * 100) / 100,
|
|
6976
|
+
table: Math.round((tTableDone - tIndexDone) * 100) / 100,
|
|
6977
|
+
apply: Math.round((tApplyDone - tTableDone) * 100) / 100,
|
|
6978
|
+
total: Math.round((tApplyDone - t0) * 100) / 100,
|
|
6979
|
+
},
|
|
6980
|
+
counts: {
|
|
6981
|
+
blocks: blocks.length,
|
|
6982
|
+
ul: ulElements.length,
|
|
6983
|
+
ol: olElements.length,
|
|
6984
|
+
tables: tables.length,
|
|
6985
|
+
updates: attrUpdates.length,
|
|
6986
|
+
},
|
|
6987
|
+
});
|
|
6679
6988
|
};
|
|
6680
6989
|
/**
|
|
6681
6990
|
* 节流后的行号更新函数,避免频繁更新 data-linenumber
|
|
@@ -11855,10 +12164,14 @@ var selectEvent = function (vditor, editorElement) {
|
|
|
11855
12164
|
editorElement.onmouseup = handleSelection;
|
|
11856
12165
|
});
|
|
11857
12166
|
editorElement.addEventListener("keyup", function (event) {
|
|
11858
|
-
if (event.shiftKey &&
|
|
12167
|
+
if (event.shiftKey &&
|
|
12168
|
+
(event.key.startsWith("Arrow") ||
|
|
12169
|
+
event.key === "Home" ||
|
|
12170
|
+
event.key === "End")) {
|
|
11859
12171
|
handleSelection();
|
|
11860
12172
|
}
|
|
11861
|
-
else if (!event.shiftKey &&
|
|
12173
|
+
else if (!event.shiftKey &&
|
|
12174
|
+
(event.key.startsWith("Arrow") || event.key === "Escape")) {
|
|
11862
12175
|
// Cancel selection or move cursor without selection
|
|
11863
12176
|
handleSelection();
|
|
11864
12177
|
}
|
|
@@ -18001,7 +18314,8 @@ var WYSIWYG = /** @class */ (function () {
|
|
|
18001
18314
|
this.selectPopover.addEventListener("mousedown", function (event) {
|
|
18002
18315
|
var target = event.target;
|
|
18003
18316
|
// 如果点击的是 textarea 或 button,允许默认行为
|
|
18004
|
-
if (target.tagName === "TEXTAREA" ||
|
|
18317
|
+
if (target.tagName === "TEXTAREA" ||
|
|
18318
|
+
target.tagName === "BUTTON") {
|
|
18005
18319
|
return;
|
|
18006
18320
|
}
|
|
18007
18321
|
// 其他情况阻止默认行为,防止编辑器失去焦点
|