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

Version Path
social_stream-2.2.2 base/app/assets/javascripts/social_stream/callback.js
social_stream-base-2.2.2 app/assets/javascripts/social_stream/callback.js
social_stream-2.2.1 base/app/assets/javascripts/social_stream/callback.js
social_stream-base-2.2.1 app/assets/javascripts/social_stream/callback.js
social_stream-2.2.0 base/app/assets/javascripts/social_stream/callback.js
social_stream-base-2.2.0 app/assets/javascripts/social_stream/callback.js
social_stream-2.1.1 base/app/assets/javascripts/social_stream/callback.js
social_stream-2.1.0 base/app/assets/javascripts/social_stream/callback.js
social_stream-base-2.1.0 app/assets/javascripts/social_stream/callback.js
social_stream-2.0.4 base/app/assets/javascripts/social_stream/callback.js
social_stream-base-2.0.4 app/assets/javascripts/social_stream/callback.js
social_stream-2.0.3 base/app/assets/javascripts/social_stream/callback.js
social_stream-base-2.0.3 app/assets/javascripts/social_stream/callback.js
social_stream-2.0.2 base/app/assets/javascripts/social_stream/callback.js
social_stream-base-2.0.2 app/assets/javascripts/social_stream/callback.js
social_stream-2.0.1 base/app/assets/javascripts/social_stream/callback.js
social_stream-base-2.0.1 app/assets/javascripts/social_stream/callback.js
social_stream-2.0.0 base/app/assets/javascripts/social_stream/callback.js
social_stream-base-2.0.0 app/assets/javascripts/social_stream/callback.js
social_stream-2.0.0.beta3 base/app/assets/javascripts/social_stream/callback.js