Created
November 11, 2021 16:24
-
-
Save wolfadex/ce4288590f531dbe0be4a9e5d78159a0 to your computer and use it in GitHub Desktop.
Basic codemirror custom element wrapper
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { basicSetup, EditorView } from "@codemirror/basic-setup"; | |
import { EditorState, Compartment, StateField } from "@codemirror/state"; | |
import { markdown } from "@codemirror/lang-markdown"; | |
customElements.define( | |
"markdown-editor", | |
class extends HTMLElement { | |
constructor() { | |
super(); | |
} | |
connectedCallback() { | |
const editorElement = document.createElement("div"); | |
this.appendChild(editorElement); | |
const language = new Compartment(); | |
const tabSize = new Compartment(); | |
const forwardUpdate = StateField.define({ | |
create: (state) => state, | |
update: (state, transaction) => { | |
console.log(transaction.newDoc.text); | |
this.emitUpdate(transaction.newDoc.text); | |
return state; | |
}, | |
}); | |
const state = EditorState.create({ | |
extensions: [ | |
basicSetup, | |
language.of(markdown()), | |
tabSize.of(EditorState.tabSize.of(8)), | |
forwardUpdate, | |
], | |
}); | |
const view = new EditorView({ | |
state, | |
parent: editorElement, | |
}); | |
} | |
emitUpdate(text) { | |
this.dispatchEvent( | |
new CustomEvent("change", { detail: text.join("\n") }) | |
); | |
} | |
disconnectedCallback() {} | |
adoptedCallback() {} | |
} | |
); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment