@8btc/mditor 0.0.5 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/src/method.ts CHANGED
@@ -1,27 +1,31 @@
1
- import {abcRender} from "./ts/markdown/abcRender";
1
+ import { abcRender } from "./ts/markdown/abcRender";
2
2
  import * as adapterRender from "./ts/markdown/adapterRender";
3
- import {chartRender} from "./ts/markdown/chartRender";
4
- import {codeRender} from "./ts/markdown/codeRender";
5
- import {flowchartRender} from "./ts/markdown/flowchartRender";
6
- import {graphvizRender} from "./ts/markdown/graphvizRender";
7
- import {highlightRender} from "./ts/markdown/highlightRender";
8
- import {lazyLoadImageRender} from "./ts/markdown/lazyLoadImageRender";
9
- import {mathRender} from "./ts/markdown/mathRender";
10
- import {mediaRender} from "./ts/markdown/mediaRender";
11
- import {mermaidRender} from "./ts/markdown/mermaidRender";
12
- import {SMILESRender} from "./ts/markdown/SMILESRender";
13
- import {markmapRender} from "./ts/markdown/markmapRender";
14
- import {mindmapRender} from "./ts/markdown/mindmapRender";
15
- import {outlineRender} from "./ts/markdown/outlineRender";
16
- import {plantumlRender} from "./ts/markdown/plantumlRender";
17
- import {md2html, previewRender} from "./ts/markdown/previewRender";
18
- import {speechRender} from "./ts/markdown/speechRender";
19
- import {previewImage} from "./ts/preview/image";
20
- import {setCodeTheme} from "./ts/ui/setCodeTheme";
21
- import {setContentTheme} from "./ts/ui/setContentTheme";
3
+ import { chartRender } from "./ts/markdown/chartRender";
4
+ import { codeRender } from "./ts/markdown/codeRender";
5
+ import { flowchartRender } from "./ts/markdown/flowchartRender";
6
+ import { graphvizRender } from "./ts/markdown/graphvizRender";
7
+ import { highlightRender } from "./ts/markdown/highlightRender";
8
+ import { lazyLoadImageRender } from "./ts/markdown/lazyLoadImageRender";
9
+ import { mathRender } from "./ts/markdown/mathRender";
10
+ import { mediaRender } from "./ts/markdown/mediaRender";
11
+ import { mermaidRender } from "./ts/markdown/mermaidRender";
12
+ import { SMILESRender } from "./ts/markdown/SMILESRender";
13
+ import { markmapRender } from "./ts/markdown/markmapRender";
14
+ import { mindmapRender } from "./ts/markdown/mindmapRender";
15
+ import { outlineRender } from "./ts/markdown/outlineRender";
16
+ import { plantumlRender } from "./ts/markdown/plantumlRender";
17
+ import { md2html, previewRender } from "./ts/markdown/previewRender";
18
+ import { speechRender } from "./ts/markdown/speechRender";
19
+ import { previewImage } from "./ts/preview/image";
20
+ import { setCodeTheme } from "./ts/ui/setCodeTheme";
21
+ import { setContentTheme } from "./ts/ui/setContentTheme";
22
+ import { getMarkdown } from "./ts/markdown/getMarkdown";
23
+ import {
24
+ attachLineNumbersToBlocks,
25
+ attachLineNumbersToBlocksThrottled,
26
+ } from "./ts/util/attachLineNumbers";
22
27
 
23
28
  class Vditor {
24
-
25
29
  /** 点击图片放大 */
26
30
  public static adapterRender = adapterRender;
27
31
  /** 点击图片放大 */
@@ -66,6 +70,23 @@ class Vditor {
66
70
  public static setCodeTheme = setCodeTheme;
67
71
  /** 设置内容主题 */
68
72
  public static setContentTheme = setContentTheme;
73
+
74
+ /**
75
+ * 外部更新行号:传入实例并根据配置进行同步/节流更新
76
+ */
77
+ public static updateLineNumbers(instance: any, immediate = false) {
78
+ try {
79
+ const v = instance?.vditor ?? instance;
80
+ if (!v?.options?.lineNumber) return;
81
+ const text = getMarkdown(v);
82
+ const root = v[v.currentMode].element as HTMLElement;
83
+ if (immediate) {
84
+ attachLineNumbersToBlocks(root, text);
85
+ } else {
86
+ attachLineNumbersToBlocksThrottled(root, text);
87
+ }
88
+ } catch {}
89
+ }
69
90
  }
70
91
 
71
92
  export default Vditor;
@@ -241,21 +241,32 @@ export const attachLineNumbersToBlocks = (
241
241
  const container = el as HTMLElement;
242
242
  const dataType = container.getAttribute("data-type") || "";
243
243
  if (dataType === "math-block" || dataType === "code-block") {
244
- // container.setAttribute("data-linenumber", "");
245
244
  return;
246
245
  }
246
+
247
+ // 仅 li 需要行号:跳过并清理 ul/ol 自身及其内部嵌套的 p/div 等块
248
+ const tagName = container.tagName;
249
+ if (tagName === "UL" || tagName === "OL") {
250
+ container.removeAttribute("data-linenumber");
251
+ return;
252
+ }
253
+ const liAncestor = container.closest("li");
254
+ if (liAncestor) {
255
+ container.removeAttribute("data-linenumber");
256
+ return;
257
+ }
258
+
247
259
  const text = container.textContent || "";
248
260
  const normText = normalize(text);
249
261
  // 跳过纯空白块
250
262
  if (!normText.trim()) {
251
- // container.setAttribute("data-linenumber", "");
263
+ container.removeAttribute("data-linenumber");
252
264
  return;
253
265
  }
254
266
 
255
267
  let lineNumber = -1;
256
268
 
257
- const tag = container.tagName;
258
- if (tag === "BLOCKQUOTE") {
269
+ if (tagName === "BLOCKQUOTE") {
259
270
  const firstLine =
260
271
  normText.split("\n").find((l) => l.trim().length > 0) ||
261
272
  normText;