markdown-it-any-block 3.2.10-beta5 → 3.2.11

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.
@@ -22,106 +22,6 @@ async function jsdom_init() {
22
22
  dom.window.scrollTo = () => {
23
23
  };
24
24
  }
25
- function container_plugin(md, name2, options) {
26
- function validateDefault(params) {
27
- return params.trim().split(" ", 2)[0] === name2;
28
- }
29
- function renderDefault(tokens, idx, _options, env, slf) {
30
- if (tokens[idx].nesting === 1) {
31
- tokens[idx].attrJoin("class", name2);
32
- }
33
- return slf.renderToken(tokens, idx, _options, env, slf);
34
- }
35
- options = options || {};
36
- const min_markers = 3;
37
- const marker_str = options.marker || ":";
38
- const marker_char = marker_str.charCodeAt(0);
39
- const marker_len = marker_str.length;
40
- const validate = options.validate || validateDefault;
41
- const render2 = options.render || renderDefault;
42
- function container(state, startLine, endLine, silent) {
43
- let pos;
44
- let auto_closed = false;
45
- let start = state.bMarks[startLine] + state.tShift[startLine];
46
- let max = state.eMarks[startLine];
47
- if (marker_char !== state.src.charCodeAt(start)) {
48
- return false;
49
- }
50
- for (pos = start + 1; pos <= max; pos++) {
51
- if (marker_str[(pos - start) % marker_len] !== state.src[pos]) {
52
- break;
53
- }
54
- }
55
- const marker_count = Math.floor((pos - start) / marker_len);
56
- if (marker_count < min_markers) {
57
- return false;
58
- }
59
- pos -= (pos - start) % marker_len;
60
- const markup = state.src.slice(start, pos);
61
- const params = state.src.slice(pos, max);
62
- if (!validate(params, markup)) {
63
- return false;
64
- }
65
- if (silent) {
66
- return true;
67
- }
68
- let nextLine = startLine;
69
- for (; ; ) {
70
- nextLine++;
71
- if (nextLine >= endLine) {
72
- break;
73
- }
74
- start = state.bMarks[nextLine] + state.tShift[nextLine];
75
- max = state.eMarks[nextLine];
76
- if (start < max && state.sCount[nextLine] < state.blkIndent) {
77
- break;
78
- }
79
- if (marker_char !== state.src.charCodeAt(start)) {
80
- continue;
81
- }
82
- if (state.sCount[nextLine] - state.blkIndent >= 4) {
83
- continue;
84
- }
85
- for (pos = start + 1; pos <= max; pos++) {
86
- if (marker_str[(pos - start) % marker_len] !== state.src[pos]) {
87
- break;
88
- }
89
- }
90
- if (Math.floor((pos - start) / marker_len) < marker_count) {
91
- continue;
92
- }
93
- pos -= (pos - start) % marker_len;
94
- pos = state.skipSpaces(pos);
95
- if (pos < max) {
96
- continue;
97
- }
98
- auto_closed = true;
99
- break;
100
- }
101
- const old_parent = state.parentType;
102
- const old_line_max = state.lineMax;
103
- state.parentType = "container";
104
- state.lineMax = nextLine;
105
- const token_o = state.push("container_" + name2 + "_open", "div", 1);
106
- token_o.markup = markup;
107
- token_o.block = true;
108
- token_o.info = params;
109
- token_o.map = [startLine, nextLine];
110
- state.md.block.tokenize(state, startLine + 1, nextLine);
111
- const token_c = state.push("container_" + name2 + "_close", "div", -1);
112
- token_c.markup = state.src.slice(start, pos);
113
- token_c.block = true;
114
- state.parentType = old_parent;
115
- state.lineMax = old_line_max;
116
- state.line = nextLine + (auto_closed ? 1 : 0);
117
- return true;
118
- }
119
- md.block.ruler.before("fence", "container_" + name2, container, {
120
- alt: ["paragraph", "reference", "blockquote", "list"]
121
- });
122
- md.renderer.rules["container_" + name2 + "_open"] = render2;
123
- md.renderer.rules["container_" + name2 + "_close"] = render2;
124
- }
125
25
  var ABConvert_IOEnum = /* @__PURE__ */ ((ABConvert_IOEnum2) => {
126
26
  ABConvert_IOEnum2["text"] = "string";
127
27
  ABConvert_IOEnum2["el"] = "HTMLElement";
@@ -2009,13 +1909,16 @@ class DirProcess {
2009
1909
  * 第一列等级为0、没有分叉
2010
1910
  */
2011
1911
  static dtdata2dt(list_tableInfo, div, modeT, is_folder = false) {
1912
+ const div2 = document.createElement("div");
1913
+ div.appendChild(div2);
1914
+ div2.classList.add("ab-list-table-parent");
1915
+ let table, thead, tbody;
2012
1916
  {
2013
- const table = document.createElement("table");
2014
- div.appendChild(table);
1917
+ table = document.createElement("table");
1918
+ div2.appendChild(table);
2015
1919
  table.classList.add("ab-table", "ab-list-table");
2016
1920
  if (is_folder) table.classList.add("ab-table-folder");
2017
1921
  if (modeT) table.setAttribute("modeT", "true");
2018
- let thead, tbody;
2019
1922
  {
2020
1923
  if (list_tableInfo[0].content.indexOf("< ") == 0) {
2021
1924
  thead = document.createElement("thead");
@@ -2071,10 +1974,12 @@ class DirProcess {
2071
1974
  td_cell.classList.add("ab-list-table-witharrow");
2072
1975
  ABConvertManager.getInstance().m_renderMarkdownFn(cell_item.content, td_cell);
2073
1976
  }
1977
+ }
1978
+ {
2074
1979
  const l_tr = tbody.querySelectorAll("tr");
2075
1980
  for (let i = 0; i < l_tr.length; i++) {
2076
- let targetEl = l_tr[i];
2077
- targetEl = targetEl.querySelector(":scope>td:first-child") ?? targetEl;
1981
+ const tr = l_tr[i];
1982
+ const targetEl = tr.querySelector(":scope>td:first-child") ?? tr;
2078
1983
  if (ABCSetting.env == "obsidian" || ABCSetting.env == "obsidian-min") {
2079
1984
  targetEl.onclick = () => {
2080
1985
  const tr_level = Number(tr.getAttribute("tr_level"));
@@ -2093,57 +1998,106 @@ class DirProcess {
2093
1998
  if (flag_do_fold) tr.setAttribute("is_fold", tr_isfold == "true" ? "false" : "true");
2094
1999
  };
2095
2000
  } else {
2096
- targetEl.setAttribute("onclick", `
2097
- const tr = (this.tagName == "TD") ? this.parentNode : this
2098
- const l_tr = tr.parentNode.querySelectorAll("tr")
2099
- const i = ${i}
2100
- const tr_level = Number(tr.getAttribute("tr_level"))
2101
- if (isNaN(tr_level)) return
2102
- const tr_isfold = tr.getAttribute("is_fold")
2103
- if (!tr_isfold) return
2104
- let flag_do_fold = false // 防止折叠最小层
2105
- for (let j=i+1; j<l_tr.length; j++){
2106
- const tr2 = l_tr[j]
2107
- const tr_level2 = Number(tr2.getAttribute("tr_level"))
2108
- if (isNaN(tr_level2)) break
2109
- if (tr_level2<=tr_level) break
2110
- (tr_isfold == "true") ? tr2.style.display = "" : tr2.style.display = "none"
2111
- flag_do_fold = true
2112
- }
2113
- if (flag_do_fold) tr.setAttribute("is_fold", tr_isfold=="true"?"false":"true")
2001
+ targetEl.setAttribute("onclick", ` const tr = (this.tagName == "TD") ? this.parentNode : this
2002
+ const l_tr = tr.parentNode.querySelectorAll("tr")
2003
+ const i = ${i}
2004
+
2005
+ const tr_level = Number(tr.getAttribute("tr_level"))
2006
+ if (isNaN(tr_level)) return
2007
+ const tr_isfold = tr.getAttribute("is_fold")
2008
+ if (!tr_isfold) return
2009
+ let flag_do_fold = false // 防止折叠最小层
2010
+ for (let j=i+1; j<l_tr.length; j++){
2011
+ const tr2 = l_tr[j]
2012
+ const tr_level2 = Number(tr2.getAttribute("tr_level"))
2013
+ if (isNaN(tr_level2)) break
2014
+ if (tr_level2<=tr_level) break
2015
+ (tr_isfold == "true") ? tr2.style.display = "" : tr2.style.display = "none"
2016
+ flag_do_fold = true
2017
+ }
2018
+ if (flag_do_fold) tr.setAttribute("is_fold", tr_isfold=="true"?"false":"true")
2114
2019
  `);
2115
2020
  }
2116
2021
  }
2022
+ }
2023
+ {
2117
2024
  const btn = document.createElement("button");
2118
- table.appendChild(btn);
2025
+ div2.appendChild(btn);
2119
2026
  btn.classList.add("ab-table-fold");
2120
- btn.textContent = "全部折叠/展开";
2027
+ const svgStr_fold = `<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-fold-vertical-icon lucide-fold-vertical"><path d="M12 22v-6"/><path d="M12 8V2"/><path d="M4 12H2"/><path d="M10 12H8"/><path d="M16 12h-2"/><path d="M22 12h-2"/><path d="m15 19-3-3-3 3"/><path d="m15 5-3 3-3-3"/></svg>`;
2028
+ const svgStr_unfold = `<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-unfold-vertical-icon lucide-unfold-vertical"><path d="M12 22v-6"/><path d="M12 8V2"/><path d="M4 12H2"/><path d="M10 12H8"/><path d="M16 12h-2"/><path d="M22 12h-2"/><path d="m15 19-3 3-3-3"/><path d="m15 5-3-3-3 3"/></svg>`;
2121
2029
  btn.setAttribute("is_fold", "false");
2122
- btn.onclick = () => {
2123
- const l_tr2 = table.querySelectorAll("tr");
2124
- for (let i = 0; i < l_tr2.length; i++) {
2125
- const tr2 = l_tr2[i];
2126
- (() => {
2127
- const tr_level = Number(tr2.getAttribute("tr_level"));
2128
- if (isNaN(tr_level)) return;
2129
- const tr_isfold = btn.getAttribute("is_fold");
2130
- if (!tr_isfold) return;
2131
- let flag_do_fold = false;
2132
- for (let j = i + 1; j < l_tr2.length; j++) {
2133
- const tr22 = l_tr2[j];
2134
- const tr_level2 = Number(tr22.getAttribute("tr_level"));
2135
- if (isNaN(tr_level2)) break;
2136
- if (tr_level2 <= tr_level) break;
2137
- tr_isfold == "true" ? tr22.style.display = "" : tr22.style.display = "none";
2138
- flag_do_fold = true;
2139
- }
2140
- if (flag_do_fold) tr2.setAttribute("is_fold", tr_isfold == "true" ? "false" : "true");
2141
- })();
2142
- }
2143
- if (btn.getAttribute("is_fold")) {
2144
- btn.setAttribute("is_fold", btn.getAttribute("is_fold") == "true" ? "false" : "true");
2145
- }
2146
- };
2030
+ btn.innerHTML = svgStr_fold;
2031
+ if (ABCSetting.env == "obsidian" || ABCSetting.env == "obsidian-min") {
2032
+ btn.onclick = () => {
2033
+ const l_tr = table.querySelectorAll("tr");
2034
+ for (let i = 0; i < l_tr.length; i++) {
2035
+ const tr = l_tr[i];
2036
+ (() => {
2037
+ const tr_level = Number(tr.getAttribute("tr_level"));
2038
+ if (isNaN(tr_level)) return;
2039
+ const tr_isfold = btn.getAttribute("is_fold");
2040
+ if (!tr_isfold) return;
2041
+ let flag_do_fold = false;
2042
+ for (let j = i + 1; j < l_tr.length; j++) {
2043
+ const tr2 = l_tr[j];
2044
+ const tr_level2 = Number(tr2.getAttribute("tr_level"));
2045
+ if (isNaN(tr_level2)) break;
2046
+ if (tr_level2 <= tr_level) break;
2047
+ tr_isfold == "true" ? tr2.style.display = "" : tr2.style.display = "none";
2048
+ flag_do_fold = true;
2049
+ }
2050
+ if (flag_do_fold) tr.setAttribute("is_fold", tr_isfold == "true" ? "false" : "true");
2051
+ })();
2052
+ }
2053
+ const is_all_fold = btn.getAttribute("is_fold");
2054
+ if (is_all_fold == "true") {
2055
+ btn.setAttribute("is_fold", "false");
2056
+ btn.innerHTML = svgStr_fold;
2057
+ } else {
2058
+ btn.setAttribute("is_fold", "true");
2059
+ btn.innerHTML = svgStr_unfold;
2060
+ }
2061
+ };
2062
+ } else {
2063
+ btn.setAttribute(
2064
+ "onclick",
2065
+ ` const btn = this;
2066
+ const svgStr_fold = \`${svgStr_fold}\`;
2067
+ const svgStr_unfold = \`${svgStr_unfold}\`;
2068
+ const table = btn.parentNode?.querySelector("table");
2069
+ if (!table) return;
2070
+
2071
+ const l_tr = table.querySelectorAll("tr");
2072
+ for (let i=0; i<l_tr.length; i++) {
2073
+ const tr = l_tr[i]
2074
+ ;(()=>{
2075
+ const tr_level = Number(tr.getAttribute("tr_level"))
2076
+ if (isNaN(tr_level)) return
2077
+ const tr_isfold = btn.getAttribute("is_fold"); // [!code] tr->btn
2078
+ if (!tr_isfold) return
2079
+ let flag_do_fold = false // 防止折叠最小层
2080
+ for (let j=i+1; j<l_tr.length; j++){
2081
+ const tr2 = l_tr[j]
2082
+ const tr_level2 = Number(tr2.getAttribute("tr_level"))
2083
+ if (isNaN(tr_level2)) break
2084
+ if (tr_level2<=tr_level) break
2085
+ (tr_isfold == "true") ? tr2.style.display = "" : tr2.style.display = "none"
2086
+ flag_do_fold = true
2087
+ }
2088
+ if (flag_do_fold) tr.setAttribute("is_fold", tr_isfold=="true"?"false":"true")
2089
+ })()
2090
+ }
2091
+ const is_all_fold = btn.getAttribute("is_fold")
2092
+ if (is_all_fold=="true") {
2093
+ btn.setAttribute("is_fold", "false"); btn.innerHTML = svgStr_fold;
2094
+ }
2095
+ else {
2096
+ btn.setAttribute("is_fold", "true"); btn.innerHTML = svgStr_unfold;
2097
+ }
2098
+ `
2099
+ );
2100
+ }
2147
2101
  }
2148
2102
  return div;
2149
2103
  }
@@ -2414,36 +2368,32 @@ ABConvert.factory({
2414
2368
  const args = matchs[1].split(",").map(
2415
2369
  (arg) => /^\d*\.?\d+$/.test(arg.trim()) ? `${arg.trim()}%` : arg.trim()
2416
2370
  );
2417
- switch (true) {
2418
- case content.children[0].classList.contains("ab-col"): {
2419
- const sub_els = content.children[0].children;
2420
- if (sub_els.length == 0) return content;
2421
- for (let i = 0; i < Math.min(sub_els.length, args.length); i++) {
2422
- const sub_el = sub_els[i];
2423
- if (args[i].endsWith("%")) sub_el.style.flex = `0 1 ${args[i]}`;
2424
- else {
2425
- sub_el.style.width = args[i];
2426
- sub_el.style.flex = `0 0 auto`;
2427
- }
2371
+ if (content.children[0].classList.contains("ab-col")) {
2372
+ const sub_els = content.children[0].children;
2373
+ if (sub_els.length == 0) return content;
2374
+ for (let i = 0; i < Math.min(sub_els.length, args.length); i++) {
2375
+ const sub_el = sub_els[i];
2376
+ if (args[i].endsWith("%")) sub_el.style.flex = `0 1 ${args[i]}`;
2377
+ else {
2378
+ sub_el.style.width = args[i];
2379
+ sub_el.style.flex = `0 0 auto`;
2428
2380
  }
2429
- return content;
2430
- }
2431
- case content.children[0].querySelector("table") !== null: {
2432
- const table = content.children[0].querySelector("table");
2433
- if (!table) return content;
2434
- table.style.tableLayout = "fixed";
2435
- table.style.width = args.some((arg) => arg.endsWith("%")) ? "100%" : "fit-content";
2436
- table.querySelectorAll("tr").forEach((row) => {
2437
- for (let i = 0; i < Math.min(row.children.length, args.length); i++) {
2438
- const cell = row.children[i];
2439
- cell.style.width = cell.style.minWidth = cell.style.maxWidth = args[i];
2440
- }
2441
- });
2442
- return content;
2443
2381
  }
2444
- default:
2445
- return content;
2382
+ return content;
2446
2383
  }
2384
+ const table = content.children[0].querySelector("table");
2385
+ if (table !== null) {
2386
+ table.style.tableLayout = "fixed";
2387
+ table.style.width = args.some((arg) => arg.endsWith("%")) ? "100%" : "fit-content";
2388
+ table.querySelectorAll("tr").forEach((row) => {
2389
+ for (let i = 0; i < Math.min(row.children.length, args.length); i++) {
2390
+ const cell = row.children[i];
2391
+ cell.style.width = cell.style.minWidth = cell.style.maxWidth = args[i];
2392
+ }
2393
+ });
2394
+ return content;
2395
+ }
2396
+ return content;
2447
2397
  }
2448
2398
  });
2449
2399
  ABConvert.factory({
@@ -2575,9 +2525,7 @@ ABConvert.factory({
2575
2525
  const origi_rowCount = origi_rows.length;
2576
2526
  const origi_colCount = origi_rows[0].cells.length;
2577
2527
  const trans_table = document.createElement("table");
2578
- content.appendChild(trans_table);
2579
- origi_table.classList.add("ab-transposition");
2580
- origi_table.classList.add("ab-table");
2528
+ origi_table.classList.add("ab-transposition", "ab-table");
2581
2529
  origi_table.classList.forEach((className) => {
2582
2530
  trans_table.classList.add(className);
2583
2531
  });
@@ -2592,7 +2540,7 @@ ABConvert.factory({
2592
2540
  newCell.innerHTML = oldCell.innerHTML;
2593
2541
  }
2594
2542
  }
2595
- origi_table.remove();
2543
+ origi_table.innerHTML = trans_table.innerHTML;
2596
2544
  return content;
2597
2545
  }
2598
2546
  });
@@ -2682,9 +2630,7 @@ ABConvert.factory({
2682
2630
  }
2683
2631
  }
2684
2632
  const trans_table = document.createElement("table");
2685
- content.appendChild(trans_table);
2686
- origi_table.classList.add("ab-transposition");
2687
- origi_table.classList.add("ab-table");
2633
+ origi_table.classList.add("ab-transposition", "ab-table");
2688
2634
  origi_table.classList.forEach((className) => {
2689
2635
  trans_table.classList.add(className);
2690
2636
  });
@@ -2704,7 +2650,7 @@ ABConvert.factory({
2704
2650
  newCell.setAttribute("colIndex", String(cell.colIndex));
2705
2651
  }
2706
2652
  }
2707
- origi_table.remove();
2653
+ origi_table.innerHTML = trans_table.innerHTML;
2708
2654
  return content;
2709
2655
  }
2710
2656
  });
@@ -2800,9 +2746,7 @@ ABConvert.factory({
2800
2746
  }
2801
2747
  const map_table2 = map_table;
2802
2748
  const trans_table = document.createElement("table");
2803
- content.appendChild(trans_table);
2804
- origi_table.classList.add("ab-transposition");
2805
- origi_table.classList.add("ab-table");
2749
+ origi_table.classList.add("ab-transposition", "ab-table");
2806
2750
  origi_table.classList.forEach((className) => {
2807
2751
  trans_table.classList.add(className);
2808
2752
  });
@@ -2822,7 +2766,7 @@ ABConvert.factory({
2822
2766
  newCell.setAttribute("colIndex", String(cell.colIndex));
2823
2767
  }
2824
2768
  }
2825
- origi_table.remove();
2769
+ origi_table.innerHTML = trans_table.innerHTML;
2826
2770
  return content;
2827
2771
  }
2828
2772
  });
@@ -42552,19 +42496,63 @@ function abSelector_squareInline(md, options) {
42552
42496
  }
42553
42497
  });
42554
42498
  }
42555
- function abSelector_container_vuepress(md, options) {
42556
- md.use(container_plugin, "AnyBlockContainer", {
42557
- validate: function(params) {
42558
- return params.trim().toLowerCase().match(/^anyblock(.*)$/);
42559
- },
42560
- render: function(tokens, idx) {
42561
- var m = tokens[idx].info.trim().toLowerCase().match(/^anyblock(.*)$/);
42562
- if (tokens[idx].nesting === 1) {
42563
- return '<details class="any-block-debug"><summary>' + md.utils.escapeHtml(m[1]).trimStart() + "</summary>\n";
42564
- } else {
42565
- return "</details>\n";
42499
+ function abSelector_container(md, options) {
42500
+ md.block.ruler.before("fence", "AnyBlockMditContainer", (state, startLine, endLine, silent) => {
42501
+ const typeNames = ["mditABDemo"];
42502
+ let start = state.bMarks[startLine];
42503
+ let max = state.eMarks[startLine];
42504
+ if (state.src[start] !== ":") return false;
42505
+ let pos = start + 1;
42506
+ while (pos <= max) {
42507
+ if (state.src[pos] !== ":") break;
42508
+ pos++;
42509
+ }
42510
+ const markerCount = pos - start;
42511
+ if (markerCount < 3) return false;
42512
+ const markup = state.src.slice(start, pos);
42513
+ const ab_mdit_header = state.src.slice(pos, max);
42514
+ if (!typeNames.includes(ab_mdit_header.split("|")[0].trim())) return false;
42515
+ if (silent) return true;
42516
+ const ab_startLine = startLine;
42517
+ let nextLine = startLine;
42518
+ let autoClosed = false;
42519
+ let ab_content = "";
42520
+ while (
42521
+ // unclosed block should be auto closed by end of document.
42522
+ // also block seems to be auto closed by end of parent
42523
+ nextLine < endLine
42524
+ ) {
42525
+ nextLine++;
42526
+ start = state.bMarks[nextLine];
42527
+ max = state.eMarks[nextLine];
42528
+ if (start < max && state.sCount[nextLine] < state.blkIndent)
42529
+ break;
42530
+ if (
42531
+ // match start
42532
+ state.src[start] === ":" && // closing fence should be indented less than 4 spaces
42533
+ state.sCount[nextLine] - state.blkIndent < 4
42534
+ ) {
42535
+ for (pos = start + 1; pos <= max; pos++)
42536
+ if (state.src[pos] !== ":") break;
42537
+ if (pos - start >= markerCount) {
42538
+ pos = state.skipSpaces(pos);
42539
+ if (pos >= max) {
42540
+ autoClosed = true;
42541
+ break;
42542
+ }
42543
+ }
42566
42544
  }
42545
+ ab_content += "\n" + state.src.substring(start, max);
42567
42546
  }
42547
+ state.line = nextLine + (autoClosed ? 1 : 0);
42548
+ const token = state.push("fence", "code", 0);
42549
+ token.info = "AnyBlock";
42550
+ token.content = `[${ab_mdit_header}]
42551
+ ${ab_content}`;
42552
+ token.map = [ab_startLine, nextLine];
42553
+ token.markup = markup;
42554
+ token.nesting = 0;
42555
+ return true;
42568
42556
  });
42569
42557
  }
42570
42558
  function abRender_fence(md, options) {
@@ -42628,7 +42616,7 @@ function ab_mdit(md, options) {
42628
42616
  });
42629
42617
  ABCSetting.env = "vuepress";
42630
42618
  md.use(abSelector_squareInline);
42631
- md.use(abSelector_container_vuepress);
42619
+ md.use(abSelector_container);
42632
42620
  md.use(abRender_fence);
42633
42621
  }
42634
42622
  export {