windex

jQuery-like that's safe to use in a Firefox Extension
git clone https://wehaveforgeathome.hates.computer/windex.git
Log | Files | Refs | LICENSE

commit 0bf0994209286935bf34187af4cad1a691e2c093
parent ebe92dce089d40e84c6b1ebc5abe3543536cbdd4
Author: Ryan Wolf <rwolf@borderstylo.com>
Date:   Thu, 16 Dec 2010 13:17:18 -0800

die

Diffstat:
Mwindex.js | 34++++++++++++++++++++++++++++++++++
1 file changed, 34 insertions(+), 0 deletions(-)

diff --git a/windex.js b/windex.js @@ -651,6 +651,8 @@ WindexNodes.prototype._unbindEvent = function (name, handler) { }; }); +var delegates = []; + // See: http://api.jquery.com/live WindexNodes.prototype.live = function (name, handler) { var selector = this._selector; @@ -662,9 +664,41 @@ WindexNodes.prototype.live = function (name, handler) { if (isTarget || containsTarget) { handler.apply(node, [event]); } }); }; + if (!delegates[context]) { delegates[context] = {}; } + if (!delegates[context][name]) { delegates[context][name] = []; } + delegates[context][name].push({ wrapped: delegate, handler: handler }); context.addEventListener(name, delegater, false); }; +// See: http://api.jquery.com/unbind +WindexNodes.prototype.die = function (name, handler) { + if (!name) { return this._dieAll(); } + return this._dieEvent(name, handler); +} + +WindexNodes.prototype._dieAll = function () { + var node = this._context; + for (name in delegates[node]) { + delegates[node][name].forEach(function (bridge) { + node.removeEventListener(name, bridge.wrapped, false); + }); + } + delete delegates[node]; + return this; +}; + +WindexNodes.prototype._dieEvent = function (name, handler) { + var node = this._context; + if (!delegates[node][name]) return; + delegates[node][name] = delegates[node][name].filter(function (bridge) { + if (bridge.handler !== handler) return true; + node.removeEventListener(name, bridge.wrapped, false); + return false; + }); + return this; +}; + + // See: http://api.jquery.com/attr/ WindexNodes.prototype.attr = function (name, value) { if (typeof name == "object") { return this._attrSetObj(name); }