]> BookStack Code Mirror - bookstack/blobdiff - resources/js/code/setups.js
Drawings: Added class to extract drawio data from png files
[bookstack] / resources / js / code / setups.js
index 842917285656d9ff5f8e2f39d6e5e91857d61c08..270d58274347d27a18475a3f97c56c43719e573e 100644 (file)
@@ -1,9 +1,13 @@
-import {EditorView, keymap, drawSelection, highlightActiveLine, dropCursor,
-    rectangularSelection, lineNumbers, highlightActiveLineGutter} from "@codemirror/view"
-import {bracketMatching} from "@codemirror/language"
-import {defaultKeymap, history, historyKeymap} from "@codemirror/commands"
-import {EditorState} from "@codemirror/state"
-import {getTheme} from "./themes";
+import {
+    EditorView, keymap, drawSelection, highlightActiveLine, dropCursor,
+    rectangularSelection, lineNumbers, highlightActiveLineGutter,
+} from '@codemirror/view';
+import {bracketMatching} from '@codemirror/language';
+import {
+    defaultKeymap, history, historyKeymap, indentWithTab,
+} from '@codemirror/commands';
+import {Compartment, EditorState} from '@codemirror/state';
+import {getTheme} from './themes';
 
 /**
  * @param {Element} parentEl
@@ -13,12 +17,37 @@ function common(parentEl) {
     return [
         getTheme(parentEl),
         lineNumbers(),
-        highlightActiveLineGutter(),
         drawSelection(),
         dropCursor(),
         bracketMatching(),
         rectangularSelection(),
-        highlightActiveLine(),
+    ];
+}
+
+/**
+ * @returns {({extension: Extension}|readonly Extension[])[]}
+ */
+function getDynamicActiveLineHighlighter() {
+    const highlightingCompartment = new Compartment();
+    const domEvents = {
+        focus(event, view) {
+            view.dispatch({
+                effects: highlightingCompartment.reconfigure([
+                    highlightActiveLineGutter(),
+                    highlightActiveLine(),
+                ]),
+            });
+        },
+        blur(event, view) {
+            view.dispatch({
+                effects: highlightingCompartment.reconfigure([]),
+            });
+        },
+    };
+
+    return [
+        highlightingCompartment.of([]),
+        EditorView.domEventHandlers(domEvents),
     ];
 }
 
@@ -26,9 +55,10 @@ function common(parentEl) {
  * @param {Element} parentEl
  * @return {*[]}
  */
-export function viewer(parentEl) {
+export function viewerExtensions(parentEl) {
     return [
         ...common(parentEl),
+        getDynamicActiveLineHighlighter(),
         keymap.of([
             ...defaultKeymap,
         ]),
@@ -40,14 +70,17 @@ export function viewer(parentEl) {
  * @param {Element} parentEl
  * @return {*[]}
  */
-export function editor(parentEl) {
+export function editorExtensions(parentEl) {
     return [
         ...common(parentEl),
+        highlightActiveLineGutter(),
+        highlightActiveLine(),
         history(),
         keymap.of([
             ...defaultKeymap,
             ...historyKeymap,
+            indentWithTab,
         ]),
         EditorView.lineWrapping,
     ];
-}
\ No newline at end of file
+}