dequoter/frontend/src/main.js

50 lines
1.5 KiB
JavaScript
Raw Normal View History

import './style.css';
import './app.css';
2026-03-14 10:10:11 +00:00
import {basicSetup} from "codemirror";
import {EditorView, keymap} from "@codemirror/view";
2026-05-03 01:31:55 +00:00
import {Compartment} from "@codemirror/state";
import {oneDark} from "@codemirror/theme-one-dark";
import {Application} from "@hotwired/stimulus";
import {textProcessor} from "./services.js";
import {multiCursorKeymap, commandPalette} from "./cmplugins.js";
2026-03-14 10:10:11 +00:00
import {indentWithTab} from "@codemirror/commands";
2026-05-03 01:31:55 +00:00
const darkMode = window.matchMedia("(prefers-color-scheme: dark)");
const themeCompartment = new Compartment();
import {StatusController} from "./controllers/status_controller.js";
2025-09-06 01:26:54 +00:00
import {CommandsController} from "./controllers/commands_controller.js";
2026-03-14 10:52:13 +00:00
import {PromptController} from "./controllers/prompt_controller.js";
const view = new EditorView({
parent: document.querySelector("#app .editor-mountpoint"),
doc: "",
extensions: [
basicSetup,
2026-03-14 10:10:11 +00:00
keymap.of([indentWithTab]),
EditorView.lineWrapping,
multiCursorKeymap,
commandPalette,
2026-05-03 01:31:55 +00:00
themeCompartment.of(darkMode.matches ? oneDark : []),
]
})
2026-05-03 01:31:55 +00:00
darkMode.addEventListener("change", (e) => {
view.dispatch({
effects: themeCompartment.reconfigure(e.matches ? oneDark : []),
});
});
window.Stimulus = Application.start()
Stimulus.register("commands", CommandsController);
2026-03-14 10:52:13 +00:00
Stimulus.register("prompt", PromptController);
Stimulus.register("status", StatusController);
2025-09-06 01:26:54 +00:00
textProcessor.setCodeMirrorEditor(view);
2026-01-25 22:31:14 +00:00
textProcessor.loadCurrentBuffer().then(() => textProcessor.startAutoSaver());
2025-09-06 01:26:54 +00:00
view.focus();