import { CodeMirror } from "./CodeMirror.js" import { activeElt } from "../util/dom.js" import { off, on } from "../util/event.js" import { copyObj } from "../util/misc.js" export function fromTextArea(textarea, options) { options = options ? copyObj(options) : {} options.value = textarea.value if (!options.tabindex && textarea.tabIndex) options.tabindex = textarea.tabIndex if (!options.placeholder && textarea.placeholder) options.placeholder = textarea.placeholder // Set autofocus to true if this textarea is focused, or if it has // autofocus and no other element is focused. if (options.autofocus == null) { let hasFocus = activeElt() options.autofocus = hasFocus == textarea || textarea.getAttribute("autofocus") != null && hasFocus == document.body } function save() {textarea.value = cm.getValue()} let realSubmit if (textarea.form) { on(textarea.form, "submit", save) // Deplorable hack to make the submit method do the right thing. if (!options.leaveSubmitMethodAlone) { let form = textarea.form realSubmit = form.submit try { let wrappedSubmit = form.submit = () => { save() form.submit = realSubmit form.submit() form.submit = wrappedSubmit } } catch(e) {} } } options.finishInit = cm => { cm.save = save cm.getTextArea = () => textarea cm.toTextArea = () => { cm.toTextArea = isNaN // Prevent this from being ran twice save() textarea.parentNode.removeChild(cm.getWrapperElement()) textarea.style.display = "" if (textarea.form) { off(textarea.form, "submit", save) if (typeof textarea.form.submit == "function") textarea.form.submit = realSubmit } } } textarea.style.display = "none" let cm = CodeMirror(node => textarea.parentNode.insertBefore(node, textarea.nextSibling), options) return cm }