lib/gollum/public/gollum/livepreview/js/ace/lib/ace/ace.js in gollum-3.1.2 vs lib/gollum/public/gollum/livepreview/js/ace/lib/ace/ace.js in gollum-3.1.3

- old
+ new

@@ -44,17 +44,20 @@ var Editor = require("./editor").Editor; var EditSession = require("./edit_session").EditSession; var UndoManager = require("./undomanager").UndoManager; var Renderer = require("./virtual_renderer").VirtualRenderer; -var MultiSelect = require("./multi_select").MultiSelect; // The following require()s are for inclusion in the built ace file require("./worker/worker_client"); require("./keyboard/hash_handler"); require("./placeholder"); +require("./multi_select"); require("./mode/folding/fold_mode"); +require("./theme/textmate"); +require("./ext/error_marker"); + exports.config = require("./config"); /** * Provides access to require in packed noconflict mode * @param {String} moduleName @@ -69,37 +72,56 @@ * **/ exports.edit = function(el) { if (typeof(el) == "string") { var _id = el; - var el = document.getElementById(_id); + el = document.getElementById(_id); if (!el) - throw "ace.edit can't find div #" + _id; + 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)); - new MultiSelect(editor); editor.setSession(doc); var env = { document: doc, editor: editor, - onResize: editor.resize.bind(editor) + onResize: editor.resize.bind(editor, null) }; + if (oldNode) env.textarea = oldNode; event.addListener(window, "resize", env.onResize); - el.env = editor.env = env; + editor.on("destroy", function() { + event.removeListener(window, "resize", env.onResize); + env.editor.container.env = null; // prevent memory leak on old ie + }); + editor.container.env = editor.env = env; return editor; }; - +/** + * Creates a new [[EditSession]], and returns the associated [[Document]]. + * @param {Document | String} text {:textParam} + * @param {TextMode} mode {:modeParam} + * + **/ exports.createEditSession = function(text, mode) { - var doc = new EditSession(text, doc); + var doc = new EditSession(text, mode); doc.setUndoManager(new UndoManager()); return doc; } exports.EditSession = EditSession; exports.UndoManager = UndoManager;