Skip to content

Instantly share code, notes, and snippets.

@rbergman
Created September 2, 2010 16:56
Show Gist options
  • Save rbergman/562548 to your computer and use it in GitHub Desktop.
Save rbergman/562548 to your computer and use it in GitHub Desktop.
// 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