Skip to content

Commit a711a45

Browse files
committed
fix: fix katex support and render issues
1 parent 0f146da commit a711a45

File tree

1 file changed

+53
-27
lines changed

1 file changed

+53
-27
lines changed
Lines changed: 53 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,62 @@
11
(function initializeMarkmap() {
2-
function update_markmaps() {
3-
const markmap_transformer = new markmap.Transformer();
2+
const transformer = new markmap.Transformer();
3+
const assets = transformer.getAssets();
4+
const loading = Promise.all([
5+
assets.styles && markmap.loadCSS(assets.styles),
6+
assets.scripts && markmap.loadJS(assets.scripts),
7+
]);
8+
9+
function parseData(content) {
10+
const { root, frontmatter } = transformer.transform(content);
11+
let options = markmap.deriveOptions(frontmatter?.markmap);
12+
options = Object.assign({
13+
fitRatio: 0.85,
14+
}, options);
15+
return { root, options };
16+
}
17+
18+
function resetMarkmap(m, el) {
19+
const { minX, maxX, minY, maxY } = m.state;
20+
const height = el.clientWidth * (maxX - minX) / (maxY - minY);
21+
el.style.height = height + "px";
22+
m.fit();
23+
}
24+
25+
function renderMarkmap(el) {
26+
let svg = el.querySelector('svg');
27+
if (svg) return;
28+
const content = el.textContent;
29+
el.innerHTML = '<svg>';
30+
svg = el.firstChild;
31+
const { root, options } = parseData(content);
32+
const m = markmap.Markmap.create(svg, options, root);
33+
resetMarkmap(m, el);
34+
transformer.hooks.retransform.tap(() => {
35+
const { root, options } = parseData(content);
36+
m.setData(root, options);
37+
resetMarkmap(m, el);
38+
});
39+
}
40+
41+
function updateMarkmaps() {
442
const markmaps = document.getElementsByClassName('mkdocs-markmap');
5-
var el, content, svg, root, m;
643
for (var i = 0; i < markmaps.length; i++) {
7-
el = markmaps[i];
8-
svg = el.querySelector('svg');
9-
if (svg) continue;
10-
content = el.textContent;
11-
el.innerHTML = '<svg>';
12-
svg = el.firstChild;
13-
root = markmap_transformer.transform(content).root;
14-
m = markmap.Markmap.create(svg, null, root);
15-
16-
(function(obj, e, r) {
17-
obj.rescale(1).then(function() {
18-
e.parentElement.style.height = (e.getBBox().height + 10) + "px";
19-
requestAnimationFrame(() => { obj.fit(); })
20-
});
21-
})(m, svg, root);
44+
const el = markmaps[i];
45+
renderMarkmap(el);
2246
}
2347
}
2448

25-
var MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
26-
var observer = new MutationObserver(function(mutations) {
27-
update_markmaps();
28-
});
49+
loading.then(() => {
50+
var MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
51+
var observer = new MutationObserver(function(mutations) {
52+
updateMarkmaps();
53+
});
2954

30-
var target = document.getElementById('mkdocs-decrypted-content');
31-
if (undefined != target) {
32-
observer.observe(target, { childList: true });
33-
}
55+
var target = document.getElementById('mkdocs-decrypted-content');
56+
if (undefined != target) {
57+
observer.observe(target, { childList: true });
58+
}
3459

35-
update_markmaps();
60+
updateMarkmaps();
61+
});
3662
})();

0 commit comments

Comments
 (0)