Diffstat (limited to 'frontend/gamma/js/MochiKit/Signal.js') (more/less context) (ignore whitespace changes)
-rw-r--r-- | frontend/gamma/js/MochiKit/Signal.js | 47 |
1 files changed, 30 insertions, 17 deletions
diff --git a/frontend/gamma/js/MochiKit/Signal.js b/frontend/gamma/js/MochiKit/Signal.js index 7df5619..11590c1 100644 --- a/frontend/gamma/js/MochiKit/Signal.js +++ b/frontend/gamma/js/MochiKit/Signal.js @@ -9,5 +9,5 @@ See <http://mochikit.com/> for documentation, downloads, license, etc. ***/ -MochiKit.Base._module('Signal', '1.5', ['Base', 'DOM', 'Style']); +MochiKit.Base.module(MochiKit, 'Signal', '1.5', ['Base', 'DOM']); MochiKit.Signal._observers = []; @@ -267,8 +267,9 @@ MochiKit.Base.update(MochiKit.Signal.Event.prototype, { if (this.type() && ( this.type().indexOf('mouse') === 0 || + this.type().indexOf('drag') === 0 || this.type().indexOf('click') != -1 || this.type() == 'contextmenu')) { - m.client = new MochiKit.Style.Coordinates(0, 0); + m.client = { x: 0, y: 0 }; if (e.clientX || e.clientY) { m.client.x = (!e.clientX || e.clientX < 0) ? 0 : e.clientX; @@ -276,5 +277,5 @@ MochiKit.Base.update(MochiKit.Signal.Event.prototype, { } - m.page = new MochiKit.Style.Coordinates(0, 0); + m.page = { x: 0, y: 0 }; if (e.pageX || e.pageY) { m.page.x = (!e.pageX || e.pageX < 0) ? 0 : e.pageX; @@ -338,5 +339,5 @@ MochiKit.Base.update(MochiKit.Signal.Event.prototype, { } if (this.type() == 'mousewheel') { - m.wheel = new MochiKit.Style.Coordinates(0, 0); + m.wheel = { x: 0, y: 0 }; if (e.wheelDeltaX || e.wheelDeltaY) { m.wheel.x = e.wheelDeltaX / -40 || 0; @@ -673,4 +674,16 @@ MochiKit.Base.update(MochiKit.Signal, { }, + /** @id MochiKit.Signal.connectOnce */ + connectOnce: function (src, sig, objOrFunc/* optional */, funcOrStr) { + var self = MochiKit.Signal; + var ident1 = self.connect(src, sig, objOrFunc, funcOrStr); + var ident2; + ident2 = self.connect(src, sig, function() { + self.disconnect(ident1); + self.disconnect(ident2); + }); + return ident1; + }, + _disconnect: function (ident) { // already disconnected @@ -716,5 +729,5 @@ MochiKit.Base.update(MochiKit.Signal, { if (o.source === src && o.signal === sig && o.objOrFunc === obj && o.funcOrStr === func) { self._disconnect(o); - if (!self._lock) { + if (self._lock === 0) { observers.splice(i, 1); } else { @@ -728,5 +741,5 @@ MochiKit.Base.update(MochiKit.Signal, { if (idx >= 0) { self._disconnect(ident); - if (!self._lock) { + if (self._lock === 0) { observers.splice(idx, 1); } else { @@ -744,5 +757,5 @@ MochiKit.Base.update(MochiKit.Signal, { var observers = self._observers; var disconnect = self._disconnect; - var locked = self._lock; + var lock = self._lock; var dirty = self._dirty; if (typeof(funcOrStr) === 'undefined') { @@ -754,8 +767,8 @@ MochiKit.Base.update(MochiKit.Signal, { (funcOrStr === null || ident.funcOrStr === funcOrStr)) { disconnect(ident); - if (locked) { - dirty = true; - } else { + if (lock === 0) { observers.splice(i, 1); + } else { + dirty = true; } } @@ -775,5 +788,5 @@ MochiKit.Base.update(MochiKit.Signal, { var observers = self._observers; var i, ident; - var locked = self._lock; + var lock = self._lock; var dirty = self._dirty; if (signals.length === 0) { @@ -783,5 +796,5 @@ MochiKit.Base.update(MochiKit.Signal, { if (ident.source === src) { disconnect(ident); - if (!locked) { + if (lock === 0) { observers.splice(i, 1); } else { @@ -799,5 +812,5 @@ MochiKit.Base.update(MochiKit.Signal, { if (ident.source === src && ident.signal in sigs) { disconnect(ident); - if (!locked) { + if (lock === 0) { observers.splice(i, 1); } else { @@ -819,5 +832,5 @@ MochiKit.Base.update(MochiKit.Signal, { var args = MochiKit.Base.extend(null, arguments, 2); var errors = []; - self._lock = true; + self._lock++; for (var i = 0; i < observers.length; i++) { var ident = observers[i]; @@ -838,6 +851,6 @@ MochiKit.Base.update(MochiKit.Signal, { } } - self._lock = false; - if (self._dirty) { + self._lock--; + if (self._lock === 0 && self._dirty) { self._dirty = false; for (var i = observers.length - 1; i >= 0; i--) { @@ -862,5 +875,5 @@ MochiKit.Signal.__new__ = function (win) { this._document = document; this._window = win; - this._lock = false; + this._lock = 0; this._dirty = false; |