81 lines
1.8 KiB
JavaScript
81 lines
1.8 KiB
JavaScript
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()
|
|
} |