const app = window.app import cm from '/lib/codemirror.js' import * as view from './view.js' import * as note from './note.js' export function Init() { app.editor = new cm.EditorView({ state: createState(), parent: app.main // parent: view.editorContainer }) app.editor.dom.tabindex = 0 } function extensions() { return [ cm.markdownLanguage.extension, cm.syntaxHighlighting(cm.defaultHighlightStyle, { fallback: true }), cm.history(), cm.dropCursor(), cm.EditorView.lineWrapping, cm.ViewPlugin.fromClass(class { update(event) { if(event.focusChanged && !app.editor.hasFocus) { app.editor.focus() } if(event.docChanged) { SaveTimeout() } } }), cm.keymap.of(keymap()) ] } function keymap() { return [ ...cm.closeBracketsKeymap, ...cm.defaultKeymap, ...cm.searchKeymap, ...cm.foldKeymap, ...cm.lintKeymap, ...cm.historyKeymap, { key: "Tab", run: cm.indentMore, shift: cm.indentLess }, { key: "Ctrl-h", run: note.Prev }, { key: "Ctrl-j", run: note.Prev }, { key: "Ctrl-k", run: note.Next }, { key: "Ctrl-l", run: note.Next }, ] } function SaveTimeout() { if(app.saveTimeout != null) { return } app.saveTimeout = setTimeout(async () => { await note.Save() app.saveTimeout = null }, 1000) } export function Load() { app.editor.setState(createState()) app.editor.focus() } function createState() { return cm.EditorState.create({ extensions: extensions(), doc: app.disk }) } export function Content() { return app.editor.state.doc.toString() }