diff --git a/lib/ace/ace.js b/lib/ace/ace.js index d7da2fb7..500b458f 100644 --- a/lib/ace/ace.js +++ b/lib/ace/ace.js @@ -79,11 +79,21 @@ exports.edit = function(el) { throw new Error("ace.edit can't find div #" + _id); } - if (el.env && el.env.editor instanceof Editor) + if (el && el.env && el.env.editor instanceof Editor) return el.env.editor; - var doc = exports.createEditSession(dom.getInnerText(el)); - el.innerHTML = ''; + var value = ""; + if (el && /input|textarea/i.test(el.tagName)) { + var oldNode = el; + value = oldNode.value; + el = dom.createElement("pre"); + oldNode.parentNode.replaceChild(el, oldNode); + } else { + value = dom.getInnerText(el); + el.innerHTML = ''; + } + + var doc = exports.createEditSession(value); var editor = new Editor(new Renderer(el)); editor.setSession(doc); @@ -93,11 +103,12 @@ exports.edit = function(el) { editor: editor, onResize: editor.resize.bind(editor, null) }; + if (oldNode) env.textarea = oldNode; event.addListener(window, "resize", env.onResize); editor.on("destroy", function() { event.removeListener(window, "resize", env.onResize); }); - el.env = editor.env = env; + editor.container.env = editor.env = env; return editor; };