From 339bf10335c08c9711e210852f902b0d82ed41ed Mon Sep 17 00:00:00 2001 From: nightwing Date: Sun, 24 Mar 2013 12:15:14 +0400 Subject: [PATCH 1/4] fix infinite loop when editor height is 0 fixes #1322 --- lib/ace/virtual_renderer.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/ace/virtual_renderer.js b/lib/ace/virtual_renderer.js index 775d16e6..7ef2f106 100644 --- a/lib/ace/virtual_renderer.js +++ b/lib/ace/virtual_renderer.js @@ -326,6 +326,9 @@ var VirtualRenderer = function(container, theme) { changes = changes | this.CHANGE_FULL; } + if (!this.$size.scrollerHeight) + return; + if (force) this.$renderChanges(changes, true); else @@ -493,7 +496,7 @@ var VirtualRenderer = function(container, theme) { var style = this.$printMarginEl.style; style.left = ((this.characterWidth * this.$printMarginColumn) + this.$padding) + "px"; style.visibility = this.$showPrintMargin ? "visible" : "hidden"; - + if (this.session && this.session.$wrap == -1) this.adjustWrapLimit(); }; @@ -1364,7 +1367,7 @@ config.defineOptions(VirtualRenderer.prototype, "renderer", { this.$updatePrintMargin(); }, get: function() { - return this.$showPrintMargin && this.$printMarginColumn; + return this.$showPrintMargin && this.$printMarginColumn; } }, showGutter: { From 9cc74437c2f8b6eab80e5226e9c971333317c78e Mon Sep 17 00:00:00 2001 From: nightwing Date: Sun, 24 Mar 2013 12:24:40 +0400 Subject: [PATCH 2/4] fix theme==undefined in cloud9 splitview --- lib/ace/config.js | 19 +++++++++++++++++-- lib/ace/virtual_renderer.js | 6 ++++-- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/lib/ace/config.js b/lib/ace/config.js index 4a7dc286..97a18954 100644 --- a/lib/ace/config.js +++ b/lib/ace/config.js @@ -93,22 +93,37 @@ exports.setModuleUrl = function(name, subst) { return options.$moduleUrls[name] = subst; }; +exports.$loading = {}; exports.loadModule = function(moduleName, onLoad) { var module, moduleType; if (Array.isArray(moduleName)) { moduleType = moduleName[0]; moduleName = moduleName[1]; } + try { module = require(moduleName); } catch (e) {}; - if (module) + // require(moduleName) can return empty object if called after require([moduleName], callback) + if (module && !exports.$loading[moduleName]) return onLoad && onLoad(module); + if (!exports.$loading[moduleName]) + exports.$loading[moduleName] = []; + + exports.$loading[moduleName].push(onLoad); + + if (exports.$loading[moduleName].length > 1) + return; + var afterLoad = function() { require([moduleName], function(module) { exports._emit("load.module", {name: moduleName, module: module}); - onLoad && onLoad(module); + var listeners = exports.$loading[moduleName]; + exports.$loading[moduleName] = null; + listeners.forEach(function(onLoad) { + onLoad && onLoad(module); + }); }); }; diff --git a/lib/ace/virtual_renderer.js b/lib/ace/virtual_renderer.js index 7ef2f106..a76ec222 100644 --- a/lib/ace/virtual_renderer.js +++ b/lib/ace/virtual_renderer.js @@ -496,7 +496,7 @@ var VirtualRenderer = function(container, theme) { var style = this.$printMarginEl.style; style.left = ((this.characterWidth * this.$printMarginColumn) + this.$padding) + "px"; style.visibility = this.$showPrintMargin ? "visible" : "hidden"; - + if (this.session && this.session.$wrap == -1) this.adjustWrapLimit(); }; @@ -1268,6 +1268,8 @@ var VirtualRenderer = function(container, theme) { } function afterLoad(theme) { + if (!theme.cssClass) + return; dom.importCssString( theme.cssText, theme.cssClass, @@ -1367,7 +1369,7 @@ config.defineOptions(VirtualRenderer.prototype, "renderer", { this.$updatePrintMargin(); }, get: function() { - return this.$showPrintMargin && this.$printMarginColumn; + return this.$showPrintMargin && this.$printMarginColumn; } }, showGutter: { From 2d90f50491f9485507c51dccb41fa9896786e0df Mon Sep 17 00:00:00 2001 From: nightwing Date: Sun, 24 Mar 2013 16:01:57 +0400 Subject: [PATCH 3/4] properly cleanup multiselect when changing session --- lib/ace/multi_select.js | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/lib/ace/multi_select.js b/lib/ace/multi_select.js index ee41f98a..fc07bd76 100644 --- a/lib/ace/multi_select.js +++ b/lib/ace/multi_select.js @@ -831,14 +831,10 @@ exports.onSessionChange = function(e) { var oldSession = e.oldSession; if (oldSession) { - // todo use events - if (oldSession.multiSelect && oldSession.multiSelect.editor == this) - oldSession.multiSelect.editor = null; - - session.multiSelect.removeEventListener("addRange", this.$onAddRange); - session.multiSelect.removeEventListener("removeRange", this.$onRemoveRange); - session.multiSelect.removeEventListener("multiSelect", this.$onMultiSelect); - session.multiSelect.removeEventListener("singleSelect", this.$onSingleSelect); + oldSession.multiSelect.removeEventListener("addRange", this.$onAddRange); + oldSession.multiSelect.removeEventListener("removeRange", this.$onRemoveRange); + oldSession.multiSelect.removeEventListener("multiSelect", this.$onMultiSelect); + oldSession.multiSelect.removeEventListener("singleSelect", this.$onSingleSelect); } session.multiSelect.on("addRange", this.$onAddRange); From 5d97f70a4e6310aa87bd1dbd5ec18241e37bf8d1 Mon Sep 17 00:00:00 2001 From: nightwing Date: Sun, 24 Mar 2013 17:11:55 +0400 Subject: [PATCH 4/4] properly remove old selectionMarkers --- lib/ace/lib/event_emitter.js | 9 ++++----- lib/ace/mouse/mouse_handler.js | 1 + lib/ace/mouse/multi_select_handler.js | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/ace/lib/event_emitter.js b/lib/ace/lib/event_emitter.js index a359a9a7..5e4f6ec1 100644 --- a/lib/ace/lib/event_emitter.js +++ b/lib/ace/lib/event_emitter.js @@ -79,11 +79,10 @@ EventEmitter._signal = function(eventName, e) { EventEmitter.once = function(eventName, callback) { var _self = this; - var newCallback = function() { - fun && fun.apply(null, arguments); - _self.removeEventListener(event, newCallback); - }; - this.addEventListener(event, newCallback); + callback && this.addEventListener(eventName, function newCallback() { + _self.removeEventListener(eventName, newCallback); + callback.apply(null, arguments); + }); }; diff --git a/lib/ace/mouse/mouse_handler.js b/lib/ace/mouse/mouse_handler.js index 74fc4872..4ff31b2f 100644 --- a/lib/ace/mouse/mouse_handler.js +++ b/lib/ace/mouse/mouse_handler.js @@ -121,6 +121,7 @@ var MouseHandler = function(editor) { renderer.$moveTextAreaToCursor(); } self.isMousePressed = false; + self.onMouseEvent("mouseup", e) }; var onCaptureInterval = function() { diff --git a/lib/ace/mouse/multi_select_handler.js b/lib/ace/mouse/multi_select_handler.js index 8a6e2a11..2e0cda7b 100644 --- a/lib/ace/mouse/multi_select_handler.js +++ b/lib/ace/mouse/multi_select_handler.js @@ -106,7 +106,7 @@ function onMouseDown(e) { var oldRange = selection.rangeList.rangeAtPoint(pos); - event.capture(editor.container, function(){}, function() { + editor.once("mouseup", function() { var tmpSel = selection.toOrientedRange(); if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor))