@affanhamid/markdown-renderer 2.3.4 → 2.3.6
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/index.cjs +27 -5
- package/dist/index.js +27 -5
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -227,6 +227,7 @@ function hasMatchingDelimiter(text, startIndex, delimiter) {
|
|
|
227
227
|
return false;
|
|
228
228
|
}
|
|
229
229
|
var IMG_PLACEHOLDER = "IMG";
|
|
230
|
+
var LINK_PLACEHOLDER = "LNK";
|
|
230
231
|
var format = (text) => {
|
|
231
232
|
const images = [];
|
|
232
233
|
text = text.replace(/!\[([^\]]*)\]\(([^)]+)\)/g, (_, alt, url) => {
|
|
@@ -236,6 +237,14 @@ var format = (text) => {
|
|
|
236
237
|
);
|
|
237
238
|
return `${IMG_PLACEHOLDER}${idx}`;
|
|
238
239
|
});
|
|
240
|
+
const links = [];
|
|
241
|
+
text = text.replace(/(?<!!)\[([^\]]*)\]\(([^)]+)\)/g, (_, linkText, url) => {
|
|
242
|
+
const idx = links.length;
|
|
243
|
+
links.push(
|
|
244
|
+
`<a href="${escapeHtml(url)}">${format(linkText)}</a>`
|
|
245
|
+
);
|
|
246
|
+
return `${LINK_PLACEHOLDER}${idx}`;
|
|
247
|
+
});
|
|
239
248
|
let inLatex = false;
|
|
240
249
|
let inBoldItalics = false;
|
|
241
250
|
let inBold = false;
|
|
@@ -545,6 +554,12 @@ var format = (text) => {
|
|
|
545
554
|
images[idx]
|
|
546
555
|
);
|
|
547
556
|
}
|
|
557
|
+
for (let idx = 0; idx < links.length; idx++) {
|
|
558
|
+
result = result.replace(
|
|
559
|
+
escapeHtml(`${LINK_PLACEHOLDER}${idx}`),
|
|
560
|
+
links[idx]
|
|
561
|
+
);
|
|
562
|
+
}
|
|
548
563
|
return result;
|
|
549
564
|
};
|
|
550
565
|
var getIndentLevel = (line) => {
|
|
@@ -1073,8 +1088,7 @@ var MarkdownRenderer = ({
|
|
|
1073
1088
|
const container = containerRef.current;
|
|
1074
1089
|
if (!container) return;
|
|
1075
1090
|
let alive = true;
|
|
1076
|
-
|
|
1077
|
-
const renderMermaid = async () => {
|
|
1091
|
+
const renderBlocks = async () => {
|
|
1078
1092
|
const blocks = container.querySelectorAll(".md-mermaid");
|
|
1079
1093
|
if (blocks.length === 0 || !alive) return;
|
|
1080
1094
|
try {
|
|
@@ -1109,12 +1123,20 @@ var MarkdownRenderer = ({
|
|
|
1109
1123
|
} catch {
|
|
1110
1124
|
}
|
|
1111
1125
|
};
|
|
1112
|
-
|
|
1126
|
+
void renderBlocks();
|
|
1127
|
+
const observer = new MutationObserver(() => {
|
|
1128
|
+
if (!alive) return;
|
|
1129
|
+
const blocks = container.querySelectorAll(".md-mermaid:not(:has(svg))");
|
|
1130
|
+
if (blocks.length > 0) {
|
|
1131
|
+
void renderBlocks();
|
|
1132
|
+
}
|
|
1133
|
+
});
|
|
1134
|
+
observer.observe(container, { childList: true, subtree: true });
|
|
1113
1135
|
return () => {
|
|
1114
1136
|
alive = false;
|
|
1115
|
-
|
|
1137
|
+
observer.disconnect();
|
|
1116
1138
|
};
|
|
1117
|
-
}, [
|
|
1139
|
+
}, []);
|
|
1118
1140
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ref: containerRef, className, dangerouslySetInnerHTML: { __html: html } });
|
|
1119
1141
|
};
|
|
1120
1142
|
var markdown_renderer_default = MarkdownRenderer;
|
package/dist/index.js
CHANGED
|
@@ -188,6 +188,7 @@ function hasMatchingDelimiter(text, startIndex, delimiter) {
|
|
|
188
188
|
return false;
|
|
189
189
|
}
|
|
190
190
|
var IMG_PLACEHOLDER = "IMG";
|
|
191
|
+
var LINK_PLACEHOLDER = "LNK";
|
|
191
192
|
var format = (text) => {
|
|
192
193
|
const images = [];
|
|
193
194
|
text = text.replace(/!\[([^\]]*)\]\(([^)]+)\)/g, (_, alt, url) => {
|
|
@@ -197,6 +198,14 @@ var format = (text) => {
|
|
|
197
198
|
);
|
|
198
199
|
return `${IMG_PLACEHOLDER}${idx}`;
|
|
199
200
|
});
|
|
201
|
+
const links = [];
|
|
202
|
+
text = text.replace(/(?<!!)\[([^\]]*)\]\(([^)]+)\)/g, (_, linkText, url) => {
|
|
203
|
+
const idx = links.length;
|
|
204
|
+
links.push(
|
|
205
|
+
`<a href="${escapeHtml(url)}">${format(linkText)}</a>`
|
|
206
|
+
);
|
|
207
|
+
return `${LINK_PLACEHOLDER}${idx}`;
|
|
208
|
+
});
|
|
200
209
|
let inLatex = false;
|
|
201
210
|
let inBoldItalics = false;
|
|
202
211
|
let inBold = false;
|
|
@@ -506,6 +515,12 @@ var format = (text) => {
|
|
|
506
515
|
images[idx]
|
|
507
516
|
);
|
|
508
517
|
}
|
|
518
|
+
for (let idx = 0; idx < links.length; idx++) {
|
|
519
|
+
result = result.replace(
|
|
520
|
+
escapeHtml(`${LINK_PLACEHOLDER}${idx}`),
|
|
521
|
+
links[idx]
|
|
522
|
+
);
|
|
523
|
+
}
|
|
509
524
|
return result;
|
|
510
525
|
};
|
|
511
526
|
var getIndentLevel = (line) => {
|
|
@@ -1034,8 +1049,7 @@ var MarkdownRenderer = ({
|
|
|
1034
1049
|
const container = containerRef.current;
|
|
1035
1050
|
if (!container) return;
|
|
1036
1051
|
let alive = true;
|
|
1037
|
-
|
|
1038
|
-
const renderMermaid = async () => {
|
|
1052
|
+
const renderBlocks = async () => {
|
|
1039
1053
|
const blocks = container.querySelectorAll(".md-mermaid");
|
|
1040
1054
|
if (blocks.length === 0 || !alive) return;
|
|
1041
1055
|
try {
|
|
@@ -1070,12 +1084,20 @@ var MarkdownRenderer = ({
|
|
|
1070
1084
|
} catch {
|
|
1071
1085
|
}
|
|
1072
1086
|
};
|
|
1073
|
-
|
|
1087
|
+
void renderBlocks();
|
|
1088
|
+
const observer = new MutationObserver(() => {
|
|
1089
|
+
if (!alive) return;
|
|
1090
|
+
const blocks = container.querySelectorAll(".md-mermaid:not(:has(svg))");
|
|
1091
|
+
if (blocks.length > 0) {
|
|
1092
|
+
void renderBlocks();
|
|
1093
|
+
}
|
|
1094
|
+
});
|
|
1095
|
+
observer.observe(container, { childList: true, subtree: true });
|
|
1074
1096
|
return () => {
|
|
1075
1097
|
alive = false;
|
|
1076
|
-
|
|
1098
|
+
observer.disconnect();
|
|
1077
1099
|
};
|
|
1078
|
-
}, [
|
|
1100
|
+
}, []);
|
|
1079
1101
|
return /* @__PURE__ */ jsx("div", { ref: containerRef, className, dangerouslySetInnerHTML: { __html: html } });
|
|
1080
1102
|
};
|
|
1081
1103
|
var markdown_renderer_default = MarkdownRenderer;
|