Sha256: fc437ae386d7bce1b1685e1adb8b22828254f7b7a7f63386bba1ac92a71551bd
Contents?: true
Size: 1.48 KB
Versions: 25
Compression:
Stored size: 1.48 KB
Contents
/* API: * * SS.Foo = (function(SS) { * var callback = new SS.Callback(); * * var bar = function(options) { * }; * * callback.register('index', bar); * * return callback.extend({}); * })(); * * SS.Foo.callbackRegister('show', function() {}); */ SocialStream.Callback = function() { this.registry = {}; this.handlers = {}; }; SocialStream.Callback.prototype = (function(SS, $, undefined) { var register = function() { var callback = this, funcs = Array.prototype.slice.call(arguments), name = funcs.shift(); if (this.registry[name] === undefined) { this.registry[name] = []; this.handlers[name] = function(options) { $.each(callback.registry[name], function(i, f) { f(options); }); }; } this.registry[name].push.apply(this.registry[name], funcs); }; var extend = function(obj) { var callback = this; // Create current handlers for (var c in callback.handlers) { if (callback.handlers.hasOwnProperty(c)) { obj[c] = callback.handlers[c]; } } obj.callbackRegister = function() { var args = Array.prototype.slice.call(arguments), name = args.shift(); callback.register.apply(callback, arguments); // Add future handlers if (this[name] === undefined) { this[name] = callback.handlers[name]; } }; return obj; }; return { extend: extend, register: register }; })(SocialStream, jQuery);
Version data entries
25 entries across 25 versions & 2 rubygems