Merge pull request #2023 from ajaxorg/edit_textarea

Do not hang the browser when ace.edit is called for textarea
This commit is contained in:
Lennart Kats 2014-07-21 14:07:47 +02:00
commit f3d4147f6b

View file

@ -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;
};