X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/58cadce052f5cc3c9ce2bc12f88a93cac310699a..refs/heads/release:/resources/js/code/views.js diff --git a/resources/js/code/views.js b/resources/js/code/views.js index 12148ca09..5599c35dd 100644 --- a/resources/js/code/views.js +++ b/resources/js/code/views.js @@ -1,4 +1,4 @@ -import {Compartment} from '@codemirror/state'; +import {Compartment, EditorState} from '@codemirror/state'; import {EditorView} from '@codemirror/view'; import {getLanguageExtension} from './languages'; @@ -7,17 +7,31 @@ const viewLangCompartments = new WeakMap(); /** * Create a new editor view. * + * @param {String} usageType * @param {{parent: Element, doc: String, extensions: Array}} config * @returns {EditorView} */ -export function createView(config) { +export function createView(usageType, config) { const langCompartment = new Compartment(); config.extensions.push(langCompartment.of([])); - const ev = new EditorView(config); + const commonEventData = { + usage: usageType, + editorViewConfig: config, + libEditorView: EditorView, + libEditorState: EditorState, + libCompartment: Compartment, + }; + + // Emit a pre-init public event so the user can tweak the config before instance creation + window.$events.emitPublic(config.parent, 'library-cm6::pre-init', commonEventData); + const ev = new EditorView(config); viewLangCompartments.set(ev, langCompartment); + // Emit a post-init public event so the user can gain a reference to the EditorView + window.$events.emitPublic(config.parent, 'library-cm6::post-init', {editorView: ev, ...commonEventData}); + return ev; }