Created
September 2, 2010 16:56
-
-
Save rbergman/562548 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// OpenAjax Hub 1.0 implementation by Robert Bergman, designed to minify to under 1k. | |
// This code may be freely distributed under an MIT-style licence. | |
OpenAjax = { | |
hub: (function () { | |
var oa = 'openajax', // Literal reuse | |
r = 'registerLibrary', // Literal reuse | |
s = 'subscribe', // Literal reuse | |
l = 'libraries', // Literal reuse | |
p = 'publish', // Literal reuse | |
ns = 'org.' + oa + '.hub.', // Local event prefix | |
xr = /([$()+.\/\[-\^{|}])|(\*\*$|[*])/g, // Regular expression specials escaping | |
xm = {'**': '.+', '*': '[^.]+'}, // Glob to regex mapping | |
ev = {}, // Event subscription state | |
h = {}; // The hub object | |
h.specVersion = '1.0'; | |
h.implVersion = '1'; | |
h.implementer = 'http://bergmania.com'; | |
h[l] = {}; | |
h[r] = function (p, n, v, d) { | |
h[p](ns + r, ( | |
h[l][p] = {prefix: p, namespaceURI: n, version: v, extraData: d} | |
)); | |
}; | |
h['un' + r] = function (p) { | |
h[p](ns + 'un' + r, h[l][p]); | |
delete h[l][p]; | |
}; | |
h[s] = function (n, c, s, d, f) { | |
var o = {n: n, c: c, s: s, d: d, f: f}; | |
(ev[n] = ev[n] || []).push(o); | |
ev[n].re = ev[n].re || new RegExp('^' + n.replace(xr, function (s, r, g) { return r ? '\\' + r : xm[g]; }) + '$'); | |
return o; | |
}; | |
h['un' + s] = function (s) { | |
var os = ev[s.n] || []; | |
for (var i = 0, l = os.length; i < l; i++) { | |
if (os[i] === s) { | |
os.splice(i, 1); | |
break; | |
} | |
} | |
}; | |
h[p] = function (n, d) { | |
var os, o; | |
function fn(f) { return (typeof f == 'string' ? (o.s || window)[f] : f).call(o.s, n, d, o.d); } | |
for (var e in ev) { | |
os = ev[e]; | |
if (os.re.test(n)) { | |
for (var i = 0, l = os.length; i < l; i++) { | |
o = os[i]; | |
if (o && (!o.f || fn(o.f))) { | |
fn(o.c); | |
} | |
} | |
} | |
} | |
}; | |
h[r]('OpenAjax', 'http://' + oa + '.org/hub', '1.0', {}); | |
return h; | |
})() | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment