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

@ -183,9 +183,9 @@ exports.addMouseWheelListener = function(el, callback) {
max = Math.abs(e.wheelDeltaY) max = Math.abs(e.wheelDeltaY)
if (max > 5000) if (max > 5000)
factor = 400; var factor = 400;
else else
factor = 8; var factor = 8;
if (e.wheelDeltaX !== undefined) { if (e.wheelDeltaX !== undefined) {
e.wheelX = -e.wheelDeltaX / factor; e.wheelX = -e.wheelDeltaX / factor;
@ -259,7 +259,7 @@ function normalizeCommandKeys(callback, e, keyCode) {
break; break;
case "Shift": case "Shift":
hashId = 4; hashId = 4;
break break;
case "Ctrl": case "Ctrl":
hashId = 1; hashId = 1;
break; break;
@ -321,4 +321,26 @@ exports.addCommandKeyListener = function(el, callback) {
} }
}; };
if (window.postMessage) {
var postMessageId = 1;
this.nextTick = function(callback, win) {
win = win || window;
var messageName = "zero-timeout-message-" + postMessageId;
exports.addListener(win, "message", function listener(e) {
if (e.data == messageName) {
exports.stopPropagation(e);
exports.removeListener(win, "message", listener);
callback();
}
});
win.postMessage(messageName, "*");
};
}
else {
this.nextTick = function(callback, win) {
win = win || window;
window.setTimeout(callback, 0);
};
}
}); });

View file

@ -40,11 +40,11 @@ define(function(require, exports, module) {
var event = require("./lib/event"); var event = require("./lib/event");
var RenderLoop = function(onRender, window) { var RenderLoop = function(onRender, win) {
this.onRender = onRender; this.onRender = onRender;
this.pending = false; this.pending = false;
this.changes = 0; this.changes = 0;
this.setTimeoutZero = this.setTimeoutZero.bind(window); this.window = win || window;
}; };
(function() { (function() {
@ -56,40 +56,15 @@ var RenderLoop = function(onRender, window) {
if (!this.pending) { if (!this.pending) {
this.pending = true; this.pending = true;
var _self = this; var _self = this;
this.setTimeoutZero(function() { event.nextTick(function() {
_self.pending = false; _self.pending = false;
var changes = _self.changes; var changes = _self.changes;
_self.changes = 0; _self.changes = 0;
_self.onRender(changes); _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); }).call(RenderLoop.prototype);
exports.RenderLoop = RenderLoop; exports.RenderLoop = RenderLoop;