A tiny (~3 kB) editor with no dependencies. Instead of a hidden <textarea>
over highlighted code, CodeJar makes the highlighted element itself
contenteditable, so you type directly into it. Bring your own highlighter.
npm i codejarimport { CodeJar } from 'codejar'
import Prism from 'prismjs'
const jar = CodeJar(document.querySelector('.editor'), (editor) => {
editor.innerHTML = Prism.highlight(
editor.textContent,
Prism.languages.js,
'js',
)
})Passed as the third argument:
tab— string inserted on Tab. Default'\t'.indentOn— indent the new line if the text before the caret matches. Default/[({[]$/.moveToNewLine— move the text after the caret to its own line if it matches. Default/^[)}\]]/.spellcheck— defaultfalse.catchTab— handle Tab and Shift+Tab. Defaulttrue.preserveIdent— keep indentation on a new line. Defaulttrue.addClosing— auto-close brackets and quotes. Defaulttrue.autoclose—{ open, close }pairs to auto-close. Default{ open: `([{'"`, close: `)]}'"` }.history— undo/redo. Defaulttrue.window— window to use, e.g. for iframes.
updateCode(code, callOnUpdate = true)— set the code.updateOptions(options)— change options.onUpdate(callback)— called with the code on every change.toString()— get the code.save()/restore(pos)— save and restore the caret or selection.recordHistory()— push the current state onto the undo stack.destroy()— remove event listeners.