Skip to content

Instantly share code, notes, and snippets.

@miketaylr
Created February 11, 2014 17:26
Show Gist options
  • Save miketaylr/8939631 to your computer and use it in GitHub Desktop.
Save miketaylr/8939631 to your computer and use it in GitHub Desktop.
(function() {
function b(a, c, d) {
if ("_root" == c) return d;
if (a !== d) {
var e;
m || (a.matches && (m = a.matches), a.webkitMatchesSelector && (m = a.webkitMatchesSelector),
a.mozMatchesSelector && (m = a.mozMatchesSelector), a.msMatchesSelector && (m = a.msMatchesSelector),
a.oMatchesSelector && (m = a.oMatchesSelector), m || (m = k.matchesSelector));
e = m;
if (e.call(a, c)) return a;
if (a.parentNode) return s++, b(a.parentNode, c, d);
}
}
function a(a, b, c, d) {
q[a.id] || (q[a.id] = {});
q[a.id][b] || (q[a.id][b] = {});
q[a.id][b][c] || (q[a.id][b][c] = []);
q[a.id][b][c].push(d);
}
function c(a, b, d, e) {
if (q[a.id]) if (!b) for (var f in q[a.id]) q[a.id].hasOwnProperty(f) && (q[a.id][f] = {}); else if (!e && !d) q[a.id][b] = {}; else if (!e) delete q[a.id][b][d]; else if (q[a.id][b][d]) for (f = 0; f < q[a.id][b][d].length; f++) if (q[a.id][b][d][f] === e) {
q[a.id][b][d].splice(f, 1);
break;
}
}
function e(a, c, d) {
if (q[a][d]) {
var e = c.target || c.srcElement, f, g, z = {}, m = g = 0;
s = 0;
for (f in q[a][d]) q[a][d].hasOwnProperty(f) && (g = b(e, f, y[a].element)) && k.matchesEvent(d, y[a].element, g, "_root" == f, c) && (s++,
q[a][d][f].match = g, z[s] = q[a][d][f]);
c.stopPropagation = function() {
c.cancelBubble = !0;
};
for (g = 0; g <= s; g++) if (z[g]) for (m = 0; m < z[g].length; m++) {
if (!1 === z[g][m].call(z[g].match, c)) {
k.cancel(c);
return;
}
if (c.cancelBubble) return;
}
}
}
function f(b, f, m, s) {
function y(a) {
return function(b) {
e(g, b, a);
};
}
if (this.element) {
b instanceof Array || (b = [ b ]);
m || "function" != typeof f || (m = f, f = "_root");
var g = this.id, z;
for (z = 0; z < b.length; z++) s ? c(this, b[z], f, m) : (q[g] && q[g][b[z]] || k.addEvent(this, b[z], y(b[z])),
a(this, b[z], f, m));
return this;
}
}
function k(a, b) {
if (!(this instanceof k)) {
for (var c in y) if (y[c].element === a) return y[c];
u++;
y[u] = new k(a, u);
return y[u];
}
this.element = a;
this.id = b;
}
var m, s = 0, u = 0, q = {}, y = {};
k.prototype.on = function(a, b, c) {
return f.call(this, a, b, c);
};
k.prototype.off = function(a, b, c) {
return f.call(this, a, b, c, !0);
};
k.matchesSelector = function() {};
k.cancel = function(a) {
a.preventDefault();
a.stopPropagation();
};
k.addEvent = function(a, b, c) {
a.element.addEventListener(b, c, "blur" == b || "focus" == b);
};
k.matchesEvent = function() {
return !0;
};
p.Gator = k;
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment