]> BookStack Code Mirror - bookstack/blob - resources/js/code/views.js
CM6: Further fixes/improvements after testing
[bookstack] / resources / js / code / views.js
1 import {Compartment} from "@codemirror/state";
2 import {EditorView} from "@codemirror/view";
3 import {getLanguageExtension} from "./languages";
4
5 const viewLangCompartments = new WeakMap();
6
7 /**
8  * Create a new editor view.
9  *
10  * @param {{parent: Element, doc: String, extensions: Array}} config
11  * @returns {EditorView}
12  */
13 export function createView(config) {
14     const langCompartment = new Compartment();
15     config.extensions.push(langCompartment.of([]));
16
17     const ev = new EditorView(config);
18
19     viewLangCompartments.set(ev, langCompartment);
20
21     return ev;
22 }
23
24 /**
25  * Set the language mode of an EditorView.
26  *
27  * @param {EditorView} ev
28  * @param {string} modeSuggestion
29  * @param {string} content
30  */
31 export async function updateViewLanguage(ev, modeSuggestion, content) {
32     const compartment = viewLangCompartments.get(ev);
33     const language = await getLanguageExtension(modeSuggestion, content);
34
35     ev.dispatch({
36         effects: compartment.reconfigure(language ? language : [])
37     });
38 }