Skip to content

Commit 25f651c

Browse files
committed
fix(prism): ignore prismjs error
1 parent 28ecf78 commit 25f651c

File tree

1 file changed

+19
-7
lines changed

1 file changed

+19
-7
lines changed

src/plugins/prism.ts

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import { JSItem, CSSItem, IMarkmap, IMarkmapPlugin } from '../types';
22
import { arrayFrom, flatMap } from '../util';
3+
import { Markmap } from '../view';
4+
5+
const errors = {};
36

47
const styles: CSSItem[] = [
58
{
@@ -41,20 +44,29 @@ function initialize(Markmap: IMarkmap, options): void {
4144
const lang = code.className.match(/(?:^|\s)language-(\S+)|$/)[1];
4245
if (Prism.languages[lang]) {
4346
Prism.highlightElement(code);
44-
} else {
47+
} else if (!errors[lang]) {
4548
return lang;
4649
}
4750
})
4851
.filter(Boolean);
49-
if (langs.length) {
50-
Prism.plugins.autoloader.loadLanguages(langs, () => {
51-
mm.setData();
52-
mm.fit();
53-
});
54-
}
52+
loadLanguagesAndRender(mm, langs);
5553
});
5654
}
5755

56+
async function loadLanguagesAndRender(mm: Markmap, langs: string[]): Promise<void> {
57+
if (!langs.length) return;
58+
const { Prism } = window as any;
59+
try {
60+
await new Promise((resolve, reject) => {
61+
Prism.plugins.autoloader.loadLanguages(langs, resolve, reject);
62+
});
63+
} catch (err) {
64+
errors[err] = true;
65+
}
66+
mm.setData();
67+
mm.fit();
68+
}
69+
5870
export const plugin: IMarkmapPlugin = {
5971
styles,
6072
scripts,

0 commit comments

Comments
 (0)