extensions: viewer(),
});
setMode(ev, langName, content);
+ window.cm = ev;
elem.remove();
* @returns {*|string}
*/
function getTheme() {
+ // TODO - Remove
const darkMode = document.documentElement.classList.contains('dark-mode');
return window.codeTheme || (darkMode ? 'darcula' : 'default');
}
-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"
return [
lineNumbers(),
highlightActiveLineGutter(),
- highlightSpecialChars(),
- history(),
drawSelection(),
dropCursor(),
- syntaxHighlighting(defaultLight, {fallback: true}),
+ // syntaxHighlighting(defaultLight, {fallback: false}),
bracketMatching(),
rectangularSelection(),
highlightActiveLine(),
keymap.of([
...defaultKeymap,
- ...historyKeymap,
]),
EditorState.readOnly.of(true),
];
return [
lineNumbers(),
highlightActiveLineGutter(),
- highlightSpecialChars(),
history(),
drawSelection(),
dropCursor(),
import {getLanguageExtension} from "./languages"
+import {HighlightStyle, syntaxHighlighting} from "@codemirror/language";
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();
/**
* 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');
+ let viewTheme = darkMode ? oneDarkTheme : [];
+ let highlightStyle = darkMode ? oneDarkHighlightStyle : null;
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);
- return eventData.theme || (darkMode ? oneDark : []);
+ return [viewTheme, highlightStyle ? syntaxHighlighting(highlightStyle) : []];
}
/**
/**
* Custom BookStack overrides
*/
-.cm-editor {
- @include lightDark(background-color, #FFF, #000);
-}
-
// TODO - All below are old
.CodeMirror, .CodeMirror pre {
font-size: 12px;