]> BookStack Code Mirror - bookstack/commitdiff
Added dark theme handling
authorDan Brown <redacted>
Thu, 4 Aug 2022 13:19:04 +0000 (14:19 +0100)
committerDan Brown <redacted>
Thu, 4 Aug 2022 13:19:04 +0000 (14:19 +0100)
package-lock.json
package.json
resources/js/code/views.js

index a29be33240acd560c0c09cf5b2fcb55d2945c5c0..8327421b33a4d7d6bc8c8ac9dfee5e3d2ce08d34 100644 (file)
@@ -21,6 +21,7 @@
         "@codemirror/language": "^6.2.1",
         "@codemirror/legacy-modes": "^6.1.0",
         "@codemirror/state": "^6.1.0",
+        "@codemirror/theme-one-dark": "^6.0.0",
         "@codemirror/view": "^6.1.2",
         "clipboard": "^2.0.11",
         "codemirror": "^6.0.1",
       "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.1.0.tgz",
       "integrity": "sha512-qbUr94DZTe6/V1VS7LDLz11rM/1t/nJxR1El4I6UaxDEdc0aZZvq6JCLJWiRmUf95NRAnDH6fhXn+PWp9wGCIg=="
     },
+    "node_modules/@codemirror/theme-one-dark": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/@codemirror/theme-one-dark/-/theme-one-dark-6.0.0.tgz",
+      "integrity": "sha512-jTCfi1I8QT++3m21Ui6sU8qwu3F/hLv161KLxfvkV1cYWSBwyUanmQFs89ChobQjBHi2x7s2k71wF9WYvE8fdw==",
+      "dependencies": {
+        "@codemirror/language": "^6.0.0",
+        "@codemirror/state": "^6.0.0",
+        "@codemirror/view": "^6.0.0",
+        "@lezer/highlight": "^1.0.0"
+      }
+    },
     "node_modules/@codemirror/view": {
       "version": "6.1.2",
       "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.1.2.tgz",
       "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.1.0.tgz",
       "integrity": "sha512-qbUr94DZTe6/V1VS7LDLz11rM/1t/nJxR1El4I6UaxDEdc0aZZvq6JCLJWiRmUf95NRAnDH6fhXn+PWp9wGCIg=="
     },
+    "@codemirror/theme-one-dark": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/@codemirror/theme-one-dark/-/theme-one-dark-6.0.0.tgz",
+      "integrity": "sha512-jTCfi1I8QT++3m21Ui6sU8qwu3F/hLv161KLxfvkV1cYWSBwyUanmQFs89ChobQjBHi2x7s2k71wF9WYvE8fdw==",
+      "requires": {
+        "@codemirror/language": "^6.0.0",
+        "@codemirror/state": "^6.0.0",
+        "@codemirror/view": "^6.0.0",
+        "@lezer/highlight": "^1.0.0"
+      }
+    },
     "@codemirror/view": {
       "version": "6.1.2",
       "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.1.2.tgz",
index 11e69962eaac3455947c2b1bf1f1045b51940ed3..3a655c87a3636c949136b3ae5bf1fec0a3479920 100644 (file)
@@ -39,6 +39,7 @@
     "@codemirror/language": "^6.2.1",
     "@codemirror/legacy-modes": "^6.1.0",
     "@codemirror/state": "^6.1.0",
+    "@codemirror/theme-one-dark": "^6.0.0",
     "@codemirror/view": "^6.1.2",
     "clipboard": "^2.0.11",
     "codemirror": "^6.0.1",
index e877189399ce091275e92e9559727c4988e248f2..cada9a1d69e2f673264ee67ffcec9a258aa83e1b 100644 (file)
@@ -1,18 +1,20 @@
-import {getLanguageExtension} from "./languages";
+import {getLanguageExtension} from "./languages"
 import {Compartment} from "@codemirror/state"
 import {EditorView} from "@codemirror/view"
+import {oneDark} from "@codemirror/theme-one-dark"
 
 const viewLangCompartments = new WeakMap();
 
 /**
  * Create a new editor view.
  *
- * @param {Object} config
+ * @param {{parent: Element, doc: String, extensions: Array}} config
  * @returns {EditorView}
  */
 export function createView(config) {
     const langCompartment = new Compartment();
     config.extensions.push(langCompartment.of([]));
+    config.extensions.push(getTheme(config.parent));
 
     const ev = new EditorView(config);
 
@@ -21,6 +23,23 @@ export function createView(config) {
     return ev;
 }
 
+/**
+ * Ge the theme extension to use for editor view instance.
+ * @returns {Extension}
+ */
+function getTheme(viewParentEl) {
+    const darkMode = document.documentElement.classList.contains('dark-mode');
+
+    const eventData = {
+        darkMode: darkMode,
+        theme: null,
+    };
+
+    window.$events.emitPublic(viewParentEl, 'library-cm6::configure-theme', eventData);
+
+    return eventData.theme || (darkMode ? oneDark : []);
+}
+
 /**
  * Set the language mode of an EditorView.
  *