]> BookStack Code Mirror - bookstack/commitdiff
Updated cm6 theme handling to allow extension via API
authorDan Brown <redacted>
Sat, 15 Apr 2023 14:35:41 +0000 (15:35 +0100)
committerDan Brown <redacted>
Sat, 15 Apr 2023 14:35:41 +0000 (15:35 +0100)
Uses our custom event system, uses methods that take callables so that
internal dependancies can be passed.

resources/js/code/index.mjs
resources/js/code/setups.js
resources/js/code/views.js
resources/sass/_codemirror.scss

index 1a3429d588c8f6062eaff97b141ad02f3311b4c8..2b1aa9e74cf9502f41f185d1b6ec4a2ef7743000 100644 (file)
@@ -49,6 +49,7 @@ function highlightElem(elem) {
         extensions: viewer(),
     });
     setMode(ev, langName, content);
         extensions: viewer(),
     });
     setMode(ev, langName, content);
+    window.cm = ev;
 
     elem.remove();
 
 
     elem.remove();
 
@@ -81,6 +82,7 @@ function addCopyIcon(editorView) {
  * @returns {*|string}
  */
 function getTheme() {
  * @returns {*|string}
  */
 function getTheme() {
+    // TODO - Remove
     const darkMode = document.documentElement.classList.contains('dark-mode');
     return window.codeTheme || (darkMode ? 'darcula' : 'default');
 }
     const darkMode = document.documentElement.classList.contains('dark-mode');
     return window.codeTheme || (darkMode ? 'darcula' : 'default');
 }
index cd56261d3b845603421c7febeb545bf65b2a8828..19f8c6c2e42faf27458d42c4ebf8f0dbd80f6945 100644 (file)
@@ -1,5 +1,5 @@
 
 
-import {EditorView, keymap, highlightSpecialChars, drawSelection, highlightActiveLine, dropCursor,
+import {EditorView, keymap, drawSelection, highlightActiveLine, dropCursor,
     rectangularSelection, lineNumbers, highlightActiveLineGutter} from "@codemirror/view"
 import {syntaxHighlighting, bracketMatching} from "@codemirror/language"
 import {defaultKeymap, history, historyKeymap} from "@codemirror/commands"
     rectangularSelection, lineNumbers, highlightActiveLineGutter} from "@codemirror/view"
 import {syntaxHighlighting, bracketMatching} from "@codemirror/language"
 import {defaultKeymap, history, historyKeymap} from "@codemirror/commands"
@@ -11,17 +11,14 @@ export function viewer() {
     return [
         lineNumbers(),
         highlightActiveLineGutter(),
     return [
         lineNumbers(),
         highlightActiveLineGutter(),
-        highlightSpecialChars(),
-        history(),
         drawSelection(),
         dropCursor(),
         drawSelection(),
         dropCursor(),
-        syntaxHighlighting(defaultLight, {fallback: true}),
+        // syntaxHighlighting(defaultLight, {fallback: false}),
         bracketMatching(),
         rectangularSelection(),
         highlightActiveLine(),
         keymap.of([
             ...defaultKeymap,
         bracketMatching(),
         rectangularSelection(),
         highlightActiveLine(),
         keymap.of([
             ...defaultKeymap,
-            ...historyKeymap,
         ]),
         EditorState.readOnly.of(true),
     ];
         ]),
         EditorState.readOnly.of(true),
     ];
@@ -31,7 +28,6 @@ export function editor(language) {
     return [
         lineNumbers(),
         highlightActiveLineGutter(),
     return [
         lineNumbers(),
         highlightActiveLineGutter(),
-        highlightSpecialChars(),
         history(),
         drawSelection(),
         dropCursor(),
         history(),
         drawSelection(),
         dropCursor(),
index 54f30fe6c0bf835dc34fbe632a39eb4834ae9230..54490bc29f3d892af78ad2cc67777fc90ebf2af6 100644 (file)
@@ -1,7 +1,9 @@
 import {getLanguageExtension} from "./languages"
 import {getLanguageExtension} from "./languages"
+import {HighlightStyle, syntaxHighlighting} from "@codemirror/language";
 import {Compartment} from "@codemirror/state"
 import {EditorView} from "@codemirror/view"
 import {Compartment} from "@codemirror/state"
 import {EditorView} from "@codemirror/view"
-import {oneDark} from "@codemirror/theme-one-dark"
+import {oneDarkTheme, oneDarkHighlightStyle} from "@codemirror/theme-one-dark"
+import {tags} from "@lezer/highlight"
 
 const viewLangCompartments = new WeakMap();
 
 
 const viewLangCompartments = new WeakMap();
 
@@ -25,19 +27,33 @@ export function createView(config) {
 
 /**
  * Get the theme extension to use for editor view instance.
 
 /**
  * Get the theme extension to use for editor view instance.
- * @returns {Extension}
+ * @returns {Extension[]}
  */
 function getTheme(viewParentEl) {
     const darkMode = document.documentElement.classList.contains('dark-mode');
  */
 function getTheme(viewParentEl) {
     const darkMode = document.documentElement.classList.contains('dark-mode');
+    let viewTheme = darkMode ? oneDarkTheme : [];
+    let highlightStyle = darkMode ? oneDarkHighlightStyle : null;
 
     const eventData = {
 
     const eventData = {
-        darkMode: darkMode,
-        theme: null,
+        darkModeActive: darkMode,
+        registerViewTheme(builder) {
+            const spec = builder();
+            if (spec) {
+                viewTheme = EditorView.theme(spec);
+            }
+        },
+        registerHighlightStyle(builder) {
+            const tagStyles = builder(tags) || [];
+            console.log('called', tagStyles);
+            if (tagStyles.length) {
+                highlightStyle = HighlightStyle.define(tagStyles);
+            }
+        }
     };
 
     window.$events.emitPublic(viewParentEl, 'library-cm6::configure-theme', eventData);
 
     };
 
     window.$events.emitPublic(viewParentEl, 'library-cm6::configure-theme', eventData);
 
-    return eventData.theme || (darkMode ? oneDark : []);
+    return [viewTheme, highlightStyle ? syntaxHighlighting(highlightStyle) : []];
 }
 
 /**
 }
 
 /**
index aa3729606073967d27f93ed74f7e279c7cbece3e..b26e236a876dc7c8df3f99426214e396a63854f2 100644 (file)
@@ -412,10 +412,6 @@ span.CodeMirror-selectedtext { background: none; }
 /**
  * Custom BookStack overrides
  */
 /**
  * Custom BookStack overrides
  */
-.cm-editor {
-  @include lightDark(background-color, #FFF, #000);
-}
-
 // TODO - All below are old
 .CodeMirror, .CodeMirror pre {
   font-size: 12px;
 // TODO - All below are old
 .CodeMirror, .CodeMirror pre {
   font-size: 12px;