diff --git a/package.json b/package.json index 77990b7b..4e2af5a6 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,7 @@ "minizlib": "^2.1.1", "plist": "^3.0.4", "popper.js": "^1.16.1", - "prismjs": "^1.25.0", + "prismjs": "^1.26.0", "snabbdom": "^0.7.4", "snabbdom-to-html": "^6.0.0", "source-map-support": "^0.5.21", diff --git a/src/muya/lib/prism/loadLanguage.js b/src/muya/lib/prism/loadLanguage.js index f068561a..3843aec0 100644 --- a/src/muya/lib/prism/loadLanguage.js +++ b/src/muya/lib/prism/loadLanguage.js @@ -33,6 +33,7 @@ export const transfromAliasToOrigin = langs => { } } } + return result } @@ -40,9 +41,7 @@ function initLoadLanguage (Prism) { return async function loadLanguages (langs) { // If no argument is passed, load all components if (!langs) { - langs = Object.keys(languages).filter(function (lang) { - return lang !== 'meta' - }) + langs = Object.keys(languages).filter(lang => lang !== 'meta') } if (langs && !langs.length) { @@ -54,8 +53,8 @@ function initLoadLanguage (Prism) { } const promises = [] - // the user might have loaded languages via some other way or used `prism.js` which already includes some - // we don't need to validate the ids because `getLoader` will ignore invalid ones + // The user might have loaded languages via some other way or used `prism.js` which already includes some + // We don't need to validate the ids because `getLoader` will ignore invalid ones const loaded = [...loadedLanguages, ...Object.keys(Prism.languages)] getLoader(components, langs, loaded).load(async lang => { @@ -66,17 +65,20 @@ function initLoadLanguage (Prism) { lang, status: 'noexist' }) - return + } else if (loadedLanguages.has(lang)) { + defer.resolve({ + lang, + status: 'cached' + }) + } else { + delete Prism.languages[lang] + await import('prismjs/components/prism-' + lang) + defer.resolve({ + lang, + status: 'loaded' + }) + loadedLanguages.add(lang) } - - delete Prism.languages[lang] - - await import('prismjs/components/prism-' + lang) - defer.resolve({ - lang, - status: loadedLanguages.has(lang) ? 'cached' : 'loaded' - }) - loadedLanguages.add(lang) }) return Promise.all(promises) diff --git a/src/muya/lib/utils/importMarkdown.js b/src/muya/lib/utils/importMarkdown.js index 2678b7af..5f367804 100644 --- a/src/muya/lib/utils/importMarkdown.js +++ b/src/muya/lib/utils/importMarkdown.js @@ -14,6 +14,8 @@ import { loadLanguage } from '../prism/index' // To be disabled rules when parse markdown, Because content state don't need to parse inline rules import { CURSOR_ANCHOR_DNA, CURSOR_FOCUS_DNA } from '../config' +const languageLoaded = new Set() + // Just because turndown change `\n`(soft line break) to space, So we add `span.ag-soft-line-break` to workaround. const turnSoftBreakToSpan = html => { const parser = new DOMParser() @@ -95,7 +97,6 @@ const importRegister = ContentState => { let block let value const parentList = [rootState] - const languageLoaded = new Set() while ((token = tokens.shift())) { switch (token.type) { @@ -420,7 +421,7 @@ const importRegister = ContentState => { break } } - languageLoaded.clear() + return rootState.children.length ? rootState.children : [this.createBlockP()] } diff --git a/yarn.lock b/yarn.lock index 9d8b30af..7c487e77 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10144,10 +10144,10 @@ pretty-format@^27.2.5, pretty-format@^27.4.2: ansi-styles "^5.0.0" react-is "^17.0.1" -prismjs@^1.25.0: - version "1.25.0" - resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.25.0.tgz#6f822df1bdad965734b310b315a23315cf999756" - integrity sha512-WCjJHl1KEWbnkQom1+SzftbtXMKQoezOCYs5rECqMN+jP+apI7ftoflyqigqzopSO3hMhTEb0mFClA8lkolgEg== +prismjs@^1.26.0: + version "1.26.0" + resolved "https://registry.npmjs.org/prismjs/-/prismjs-1.26.0.tgz#16881b594828bb6b45296083a8cbab46b0accd47" + integrity sha512-HUoH9C5Z3jKkl3UunCyiD5jwk0+Hz0fIgQ2nbwU2Oo/ceuTAQAg+pPVnfdt2TJWRVLcxKh9iuoYDUSc8clb5UQ== private@^0.1.8, private@~0.1.5: version "0.1.8"