From 109923873ad91ad590a59662c9c4f513db974aec Mon Sep 17 00:00:00 2001 From: nightwing Date: Fri, 11 Oct 2013 16:30:02 +0400 Subject: [PATCH] do not hang the browser when edit is called for textarea --- lib/ace/ace.js | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) 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; };