mirror of
https://github.com/writefreely/writefreely
synced 2024-11-28 11:30:18 +00:00
51 lines
1.7 KiB
JavaScript
51 lines
1.7 KiB
JavaScript
// class MarkdownView {
|
|
// constructor(target, content) {
|
|
// this.textarea = target.appendChild(document.createElement("textarea"))
|
|
// this.textarea.value = content
|
|
// }
|
|
|
|
// get content() { return this.textarea.value }
|
|
// focus() { this.textarea.focus() }
|
|
// destroy() { this.textarea.remove() }
|
|
// }
|
|
|
|
import {EditorView} from "prosemirror-view"
|
|
import {EditorState} from "prosemirror-state"
|
|
import {schema, defaultMarkdownParser, defaultMarkdownSerializer} from "prosemirror-markdown"
|
|
import {exampleSetup} from "prosemirror-example-setup"
|
|
|
|
class ProseMirrorView {
|
|
constructor(target, content) {
|
|
this.view = new EditorView(target, {
|
|
state: EditorState.create({
|
|
doc: defaultMarkdownParser.parse(content),
|
|
plugins: exampleSetup({schema})
|
|
}), dispatchTransaction(transaction) {
|
|
document.querySelector('#content').value = defaultMarkdownSerializer.serialize(transaction.doc)
|
|
let newState = this.state.apply(transaction)
|
|
this.updateState(newState)
|
|
}
|
|
})
|
|
}
|
|
|
|
get content() {
|
|
return defaultMarkdownSerializer.serialize(this.view.state.doc)
|
|
}
|
|
focus() { this.view.focus() }
|
|
destroy() { this.view.destroy() }
|
|
}
|
|
|
|
let place = document.querySelector("#editor")
|
|
let view = new ProseMirrorView(place, document.querySelector('#content').value)
|
|
|
|
// document.querySelectorAll("input[type=radio]").forEach(button => {
|
|
// button.addEventListener("change", () => {
|
|
// if (!button.checked) return
|
|
// let View = button.value == "markdown" ? MarkdownView : ProseMirrorView
|
|
// if (view instanceof View) return
|
|
// let content = view.content
|
|
// view.destroy()
|
|
// view = new View(place, content)
|
|
// view.focus()
|
|
// })
|
|
// })
|