diff --git a/public/javascripts/diaspora.js b/public/javascripts/diaspora.js index 7b24ce93e..9b8080dd7 100644 --- a/public/javascripts/diaspora.js +++ b/public/javascripts/diaspora.js @@ -13,6 +13,7 @@ Diaspora.WidgetCollection = function() { this.initialized = false; this.collection = { }; + this.eventsContainer = $({}); }; Diaspora.WidgetCollection.prototype.add = function(widgetId, widget) { @@ -36,8 +37,16 @@ } }; - Diaspora.widgets = new Diaspora.WidgetCollection(); + Diaspora.WidgetCollection.prototype.subscribe = function(id, callback) { + this.eventsContainer.bind(id, callback); + }; + Diaspora.WidgetCollection.prototype.publish = function(id) { + this.eventsContainer.trigger(id); + }; + + Diaspora.widgets = new Diaspora.WidgetCollection(); + window.Diaspora = Diaspora; })(); diff --git a/spec/javascripts/diaspora-spec.js b/spec/javascripts/diaspora-spec.js index a3fdd7cd7..daff88ca0 100644 --- a/spec/javascripts/diaspora-spec.js +++ b/spec/javascripts/diaspora-spec.js @@ -51,6 +51,28 @@ describe("Diaspora", function() { expect(widgets.initialized).toBeTruthy(); }); }); + + describe("subscribe", function() { + it("subscribes to an event specified by an id", function() { + expect(widgets.eventsContainer.data("events")).not.toBeDefined(); + widgets.subscribe("testing/event", function() { }); + expect(widgets.eventsContainer.data("events")["testing/event"]).toBeDefined(); + }); + }); + + describe("publish", function() { + it("triggers events that are related to the specified id", function() { + var called = false; + + widgets.subscribe("testing/event", function() { + called = true; + }); + + widgets.publish("testing/event"); + + expect(called).toBeTruthy(); + }); + }); }); }); });