@atlaskit/editor-plugin-code-block-advanced
Version:
CodeBlockAdvanced plugin for @atlaskit/editor-core
47 lines (46 loc) • 1.42 kB
JavaScript
import _defineProperty from "@babel/runtime/helpers/defineProperty";
import { syntaxHighlighting } from '@codemirror/language';
import { languageStyling } from '../../ui/syntaxHighlightingTheme';
import { mapLanguageToCodeMirror } from './languageMap';
/**
* Manages loading the languages (for syntax highlighting, etc.)
* from CodeMirror and updating the language in the CodeMirror view
*/
export class LanguageLoader {
constructor(updateLanguageCompartment) {
_defineProperty(this, "languageName", '');
this.updateLanguageCompartment = updateLanguageCompartment;
}
async updateLanguage(languageName) {
if (languageName === this.languageName) {
return;
}
const language = mapLanguageToCodeMirror(languageName);
const configureEmpty = () => {
if (this.languageName) {
this.updateLanguageCompartment([]);
}
this.languageName = '';
};
if (!language) {
configureEmpty();
return;
}
try {
const lang = await language.load();
if (lang) {
const styling = languageStyling(lang.language);
if (styling) {
this.updateLanguageCompartment([lang, syntaxHighlighting(styling)]);
} else {
this.updateLanguageCompartment(lang);
}
this.languageName = languageName;
} else {
configureEmpty();
}
} catch (e) {
configureEmpty();
}
}
}