From 0b85600e0a2bdca2c976b3d2eed153d5d92a5f0c Mon Sep 17 00:00:00 2001 From: Dan Hansen Date: Fri, 15 Apr 2011 17:31:19 -0500 Subject: [PATCH] diaspora.js cleanup; don't pollute global namespace in spec --- public/javascripts/diaspora.js | 44 ++++++++++++++++++------------- spec/javascripts/diaspora-spec.js | 42 +++++++++++++++-------------- 2 files changed, 48 insertions(+), 38 deletions(-) diff --git a/public/javascripts/diaspora.js b/public/javascripts/diaspora.js index a896631cc..0eda9ec6f 100644 --- a/public/javascripts/diaspora.js +++ b/public/javascripts/diaspora.js @@ -3,33 +3,41 @@ * the COPYRIGHT file. */ -var Diaspora = Diaspora || {}; +(function() { + if(typeof window.Diaspora !== "undefined") { + return; + } -Diaspora.widgetCollection = function() { - this.initialized = false; - this.collection = {}; -}; + var Diaspora = { }; -Diaspora.widgetCollection.prototype.add = function(widgetId, widget) { + Diaspora.WidgetCollection = function() { + this.initialized = false; + this.collection = { }; + }; + + Diaspora.WidgetCollection.prototype.add = function(widgetId, widget) { this[widgetId] = this.collection[widgetId] = new widget(); if(this.initialized) { this.collection[widgetId].start(); } }; -Diaspora.widgetCollection.prototype.remove = function(widgetId) { + Diaspora.WidgetCollection.prototype.remove = function(widgetId) { delete this.collection[widgetId]; -}; + }; -Diaspora.widgetCollection.prototype.init = function() { - this.initialized = true; - for(var widgetId in this.collection) { - this.collection[widgetId].start(); - } -} + Diaspora.WidgetCollection.prototype.init = function() { + this.initialized = true; + for(var widgetId in this.collection) { + this.collection[widgetId].start(); + } + }; -Diaspora.widgets = Diaspora.widgets || new Diaspora.widgetCollection(); + Diaspora.widgets = new Diaspora.WidgetCollection(); + + window.Diaspora = Diaspora; +})(); + + +$(document).ready(Diaspora.widgets.init); -$(document).ready(function() { - Diaspora.widgets.init(); -}); diff --git a/spec/javascripts/diaspora-spec.js b/spec/javascripts/diaspora-spec.js index d4f4978ea..a3fdd7cd7 100644 --- a/spec/javascripts/diaspora-spec.js +++ b/spec/javascripts/diaspora-spec.js @@ -4,49 +4,51 @@ */ describe("Diaspora", function() { - describe("widgetCollection", function() { + describe("WidgetCollection", function() { describe("prototype", function() { + var widgets; beforeEach(function() { - window.widgets = new Diaspora.widgetCollection(); + widgets = new Diaspora.WidgetCollection(); }); describe("add", function() { it("adds a widget to the collection", function() { - expect(window.widgets.collection["nameOfWidget"]).not.toBeDefined(); - window.widgets.add("nameOfWidget", function() { }); - expect(window.widgets.collection["nameOfWidget"]).toBeDefined(); + expect(widgets.collection["nameOfWidget"]).not.toBeDefined(); + widgets.add("nameOfWidget", function() { }); + expect(widgets.collection["nameOfWidget"]).toBeDefined(); }); it("sets a shortcut by referencing the object on Diaspora.widgetCollection", function() { - expect(window.widgets.sup).toBeFalsy(); - window.widgets.add("sup", function() { }); - expect(window.widgets.sup).toEqual(window.widgets.collection.sup); + expect(widgets.sup).toBeFalsy(); + widgets.add("sup", function() { }); + expect(widgets.sup).toEqual(widgets.collection.sup); }); }); describe("remove", function() { it("removes a widget from the collection", function() { - window.widgets.add("nameOfWidget", function() { }); - expect(window.widgets.collection["nameOfWidget"]).toBeDefined(); - window.widgets.remove("nameOfWidget"); - expect(window.widgets.collection["nameOfWidget"]).not.toBeDefined(); + widgets.add("nameOfWidget", function() { }); + expect(widgets.collection["nameOfWidget"]).toBeDefined(); + widgets.remove("nameOfWidget"); + expect(widgets.collection["nameOfWidget"]).not.toBeDefined(); }); }); describe("init", function() { it("calls the start method on all of the widgets present", function() { - window.widgets.add("nameOfWidget", function() { + widgets.add("nameOfWidget", function() { this.start = function() { } }); - spyOn(window.widgets.collection["nameOfWidget"], "start"); - window.widgets.init(); - expect(window.widgets.collection["nameOfWidget"].start).toHaveBeenCalled(); + spyOn(widgets.collection["nameOfWidget"], "start"); + widgets.init(); + expect(widgets.collection["nameOfWidget"].start).toHaveBeenCalled(); }); - it("changes the ready property to true", function() { - expect(window.widgets.initialized).toBeFalsy(); - window.widgets.init(); - expect(window.widgets.initialized).toBeTruthy(); + + it("changes the initialized property to true", function() { + expect(widgets.initialized).toBeFalsy(); + widgets.init(); + expect(widgets.initialized).toBeTruthy(); }); }); });