From 257d6f414aea6b2876be96fae4038be177cd41df Mon Sep 17 00:00:00 2001
From: Dan Hansen & Sarah Mei <pair+ohaibbq+sarah@joindiaspora.com>
Date: Thu, 25 Nov 2010 22:24:25 -0800
Subject: [PATCH] Top-level Diaspora object for js widget management

---
 public/javascripts/diaspora.js       | 18 ++++++++++++++++++
 spec/javascripts/diaspora-spec.js    | 28 ++++++++++++++++++++++++++++
 spec/javascripts/support/jasmine.yml |  1 +
 3 files changed, 47 insertions(+)
 create mode 100644 public/javascripts/diaspora.js
 create mode 100644 spec/javascripts/diaspora-spec.js

diff --git a/public/javascripts/diaspora.js b/public/javascripts/diaspora.js
new file mode 100644
index 0000000000..4543959fe0
--- /dev/null
+++ b/public/javascripts/diaspora.js
@@ -0,0 +1,18 @@
+var Diaspora = Diaspora || {};
+Diaspora.widgets = Diaspora.widgets || {
+  pageWidgets: {},
+  
+  add: function(widgetId, widget) {
+    this.pageWidgets[widgetId] = widget;
+  },
+
+  remove: function(widgetId) {
+    delete this.pageWidgets[widgetId];
+  },
+
+  init: function() {
+    for (var widgetId in this.pageWidgets) {
+      this.pageWidgets[widgetId].start();
+    }
+  }
+};
\ No newline at end of file
diff --git a/spec/javascripts/diaspora-spec.js b/spec/javascripts/diaspora-spec.js
new file mode 100644
index 0000000000..259d1288d0
--- /dev/null
+++ b/spec/javascripts/diaspora-spec.js
@@ -0,0 +1,28 @@
+describe("Diaspora", function() {
+  describe("widgets", function() {
+    beforeEach(function() {
+      Diaspora.widgets.pageWidgets = {};
+    });
+    describe("add", function() {
+      it("adds a widget to the list of pageWidgets", function() {
+        expect(Diaspora.widgets.pageWidgets["nameOfWidget"]).not.toBeDefined();
+        Diaspora.widgets.add("nameOfWidget", {});
+        expect(Diaspora.widgets.pageWidgets["nameOfWidget"]).toBeDefined();
+      });
+    });
+    describe("remove", function() {
+      it("removes a widget from the list of pageWidgets", function() {
+        Diaspora.widgets.add("nameOfWidget", {});
+        expect(Diaspora.widgets.pageWidgets["nameOfWidget"]).toBeDefined();
+        Diaspora.widgets.remove("nameOfWidget");
+        expect(Diaspora.widgets.pageWidgets["nameOfWidget"]).not.toBeDefined();
+      });
+    });
+    describe("init", function() {
+      Diaspora.widgets.add("nameOfWidget", {start:$.noop});
+      spyOn(Diaspora.widgets.pageWidgets["nameOfWidget"], "start");
+      Diaspora.widgets.init();
+      expect(Diaspora.widgets.pageWidgets["nameOfWidget"].start).toHaveBeenCalled();
+    });
+  });
+});
diff --git a/spec/javascripts/support/jasmine.yml b/spec/javascripts/support/jasmine.yml
index 0b49568755..7f1788cae2 100644
--- a/spec/javascripts/support/jasmine.yml
+++ b/spec/javascripts/support/jasmine.yml
@@ -14,6 +14,7 @@ src_files:
   - public/javascripts/vendor/jquery144.js
   - public/javascripts/vendor/jquery-ui-1.8.6.custom.min.js
   - public/javascripts/vendor/jquery.tipsy.js
+  - public/javascripts/diaspora.js
   - public/javascripts/mobile.js
   - public/javascripts/aspect-edit.js
   - public/javascripts/web-socket-receiver.js
-- 
GitLab