fix embedding multiple ace editors fix #492

This commit is contained in:
Fabian Jakobs 2011-11-25 17:20:33 +01:00
commit d3ba5b8111
2 changed files with 29 additions and 32 deletions

View file

@ -40,11 +40,11 @@ define(function(require, exports, module) {
var event = require("./lib/event");
var RenderLoop = function(onRender, window) {
var RenderLoop = function(onRender, win) {
this.onRender = onRender;
this.pending = false;
this.changes = 0;
this.setTimeoutZero = this.setTimeoutZero.bind(window);
this.window = win || window;
};
(function() {
@ -56,40 +56,15 @@ var RenderLoop = function(onRender, window) {
if (!this.pending) {
this.pending = true;
var _self = this;
this.setTimeoutZero(function() {
event.nextTick(function() {
_self.pending = false;
var changes = _self.changes;
_self.changes = 0;
_self.onRender(changes);
});
}, this.window);
}
};
if (window.postMessage) {
this.setTimeoutZero = (function(messageName, attached, listener) {
return function setTimeoutZero(callback) {
// Set up listener if not listening already.
if (!attached) {
event.addListener(this, "message", function(e) {
if (listener && e.data == messageName) {
event.stopPropagation(e);
listener();
}
});
attached = true;
}
listener = callback;
this.postMessage(messageName, "*");
};
})("zero-timeout-message", false, null);
}
else {
this.setTimeoutZero = function(callback) {
this.setTimeout(callback, 0);
};
}
}).call(RenderLoop.prototype);
exports.RenderLoop = RenderLoop;