]> BookStack Code Mirror - bookstack/blobdiff - resources/js/code/views.js
Queries: Update API to align data with previous versions
[bookstack] / resources / js / code / views.js
index 12148ca0936f9331f8fbebddd5314ff58a4c5a25..5599c35ddbe6751b9c9d70181a042bfe95c630fb 100644 (file)
@@ -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;
 }