Author: erinnp
Date: Tue Mar 26 18:43:05 2013
New Revision: 1461263

URL: http://svn.apache.org/r1461263
Log:
RAVE-925. Added widget filtering. 


Modified:
    
rave/trunk/rave-portal-resources/src/main/webapp/static/script/core/rave_core.js
    
rave/trunk/rave-portal-resources/src/main/webapp/static/script/core/rave_widget.js
    rave/trunk/rave-portal-resources/src/test/javascript/rave_core_spec.js

Modified: 
rave/trunk/rave-portal-resources/src/main/webapp/static/script/core/rave_core.js
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-portal-resources/src/main/webapp/static/script/core/rave_core.js?rev=1461263&r1=1461262&r2=1461263&view=diff
==============================================================================
--- 
rave/trunk/rave-portal-resources/src/main/webapp/static/script/core/rave_core.js
 (original)
+++ 
rave/trunk/rave-portal-resources/src/main/webapp/static/script/core/rave_core.js
 Tue Mar 26 18:43:05 2013
@@ -51,6 +51,9 @@ rave = (function () {
         //make regionId optional
         if (!definition) {
             definition = regionId;
+        } else {
+            //TODO: until api can be updated, attach regionid as an attribute 
on the widget so that we can filter on this
+            definition.regionId = regionId;
         }
         regionWidgets[definition.regionWidgetId] = definition;
         if (INITIALIZED) {
@@ -71,16 +74,17 @@ rave = (function () {
         return regionWidgets[regionWidgetId];
     }
 
-    //TODO: add some sort of filtering?
-    exports.getWidgets = function () {
-        return regionWidgets;
+    exports.getWidgets = function (filter) {
+        var widgets = _.toArray(regionWidgets);
+        if(filter) {
+            widgets = _.where(widgets, filter);
+        }
+        return widgets;
     }
 
     /*
      key: view name
      view: any object that manages and renders a view. At minimum must have 
render and destroy methods. render should return 'this'
-     TODO: any view that will be used for gadget injection (popups, widget 
chrome) should also have a function
-     getWidgetSite that returns a dom element where the widget is injected.
      */
     exports.registerView = function (key, view) {
         registeredViews[key.toLowerCase()] = view;

Modified: 
rave/trunk/rave-portal-resources/src/main/webapp/static/script/core/rave_widget.js
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-portal-resources/src/main/webapp/static/script/core/rave_widget.js?rev=1461263&r1=1461262&r2=1461263&view=diff
==============================================================================
--- 
rave/trunk/rave-portal-resources/src/main/webapp/static/script/core/rave_widget.js
 (original)
+++ 
rave/trunk/rave-portal-resources/src/main/webapp/static/script/core/rave_widget.js
 Tue Mar 26 18:43:05 2013
@@ -61,6 +61,7 @@ rave.RegionWidget = (function () {
             return;
         }
         if (_.isString(el)) {
+            //TODO: potential memory leak - rendering a widget into new views 
does not force cleanup of current view
             var view = rave.renderView(el, this);
             el = view.getWidgetSite();
             this._view = view;

Modified: rave/trunk/rave-portal-resources/src/test/javascript/rave_core_spec.js
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-portal-resources/src/test/javascript/rave_core_spec.js?rev=1461263&r1=1461262&r2=1461263&view=diff
==============================================================================
--- rave/trunk/rave-portal-resources/src/test/javascript/rave_core_spec.js 
(original)
+++ rave/trunk/rave-portal-resources/src/test/javascript/rave_core_spec.js Tue 
Mar 26 18:43:05 2013
@@ -21,7 +21,8 @@ describe('rave', function () {
     var providerName = 'opensocial',
         viewName = 'modal',
         provider,
-        widget,
+        widget1,
+        widget2,
         viewObject,
         testScope = {};
 
@@ -77,9 +78,9 @@ describe('rave', function () {
             return this;
         });
 
-        widget = {
+        widget1 = {
             "type": "OpenSocial",
-            "regionWidgetId": "5",
+            "regionWidgetId": "1",
             "widgetUrl": 
"http://widgets.nytimes.com/packages/html/igoogle/topstories.xml";,
             "metadata": {
                 "userPrefs": {
@@ -97,7 +98,32 @@ describe('rave', function () {
             },
             "userPrefs": { "headlineCount": "9", "summaryCount": "1"},
             "collapsed": false,
-            "widgetId": "3"
+            "widgetId": "3",
+            "regionId": "1"
+        };
+
+        widget2 = {
+            "type": "OpenSocial",
+            "regionWidgetId": "2",
+            "widgetUrl": 
"http://widgets.nytimes.com/packages/html/igoogle/topstories.xml";,
+            "metadata": {
+                "userPrefs": {
+                },
+                "hasPrefsToEdit": true,
+                "views": {
+                    "home": {
+                        "preferredHeight": 0, "quirks": true, 
"preferredWidth": 0},
+                    "default": {
+                        "preferredHeight": 0, "quirks": true, 
"preferredWidth": 0},
+                    "canvas": {
+                        "preferredHeight": 0, "quirks": true, 
"preferredWidth": 0}},
+                "modulePrefs": {
+                }
+            },
+            "userPrefs": { "headlineCount": "9", "summaryCount": "1"},
+            "collapsed": false,
+            "widgetId": "3",
+            "regionId": "2"
         };
     });
 
@@ -137,8 +163,16 @@ describe('rave', function () {
 
     describe('registerWidget', function () {
 
+        it('accepts one or two arguments', function(){
+            var registeredWidget1 = rave.registerWidget(widget1);
+            var registeredWidget2 = rave.registerWidget(2, widget2);
+
+            expect(registeredWidget1).toEqual(widget1);
+            expect(registeredWidget2).toEqual(widget2);
+        });
+
         it('does not call RegionWidget constructor until rave.init is called', 
function () {
-            rave.registerWidget(widget);
+            rave.registerWidget(widget1);
             expect(rave.RegionWidget).not.toHaveBeenCalled();
             rave.init();
             expect(rave.RegionWidget).toHaveBeenCalled();
@@ -147,7 +181,7 @@ describe('rave', function () {
         it('instatiates a new RegionWidget immediately if rave.init was 
already called', function () {
             expect(rave.RegionWidget).not.toHaveBeenCalled();
             rave.init();
-            rave.registerWidget(widget);
+            rave.registerWidget(widget1);
             expect(rave.RegionWidget).toHaveBeenCalled();
         });
 
@@ -155,38 +189,43 @@ describe('rave', function () {
 
     describe('getWidget', function () {
         it('can retrieve a registed widget by regionWidgetId', function () {
-            expect(rave.getWidget(widget.regionWidgetId)).toBeUndefined();
-            rave.registerWidget(widget);
-            expect(rave.getWidget(widget.regionWidgetId)).toBe(widget);
+            expect(rave.getWidget(widget1.regionWidgetId)).toBeUndefined();
+            rave.registerWidget(widget1);
+            expect(rave.getWidget(widget1.regionWidgetId)).toBe(widget1);
         });
     });
 
     describe('getWidgets', function () {
         it('returns the set of all registered widgets', function () {
-            var expectedOutput = {};
-            expectedOutput[widget.regionWidgetId] = widget;
+            expect(rave.getWidgets()).toEqual([]);
+            rave.registerWidget(widget1);
+            expect(rave.getWidgets()).toEqual([widget1]);
+        });
+
+        it('filters widgets', function(){
+            rave.registerWidget(widget1);
+            rave.registerWidget(widget2);
 
-            expect(rave.getWidgets()).toEqual({});
-            rave.registerWidget(widget);
-            expect(rave.getWidgets()).toEqual(expectedOutput);
+            expect(rave.getWidgets({regionId: "1"})).toEqual([widget1]);
+            expect(rave.getWidgets({widgetId: "3"})).toEqual([widget1, 
widget2]);
         });
     });
 
     describe('unregisterWidget', function () {
         it('unregisters a widget by regionWidgetId', function () {
-            expect(rave.getWidget(widget.regionWidgetId)).toBeUndefined();
-            rave.registerWidget(widget);
-            expect(rave.getWidget(widget.regionWidgetId)).toBe(widget);
-            rave.unregisterWidget(widget.regionWidgetId);
-            expect(rave.getWidget(widget.regionWidgetId)).toBeUndefined();
+            expect(rave.getWidget(widget1.regionWidgetId)).toBeUndefined();
+            rave.registerWidget(widget1);
+            expect(rave.getWidget(widget1.regionWidgetId)).toBe(widget1);
+            rave.unregisterWidget(widget1.regionWidgetId);
+            expect(rave.getWidget(widget1.regionWidgetId)).toBeUndefined();
         });
 
         it('unregisters a widget by object', function () {
-            expect(rave.getWidget(widget.regionWidgetId)).toBeUndefined();
-            rave.registerWidget(widget);
-            expect(rave.getWidget(widget.regionWidgetId)).toBe(widget);
-            rave.unregisterWidget(widget);
-            expect(rave.getWidget(widget.regionWidgetId)).toBeUndefined();
+            expect(rave.getWidget(widget1.regionWidgetId)).toBeUndefined();
+            rave.registerWidget(widget1);
+            expect(rave.getWidget(widget1.regionWidgetId)).toBe(widget1);
+            rave.unregisterWidget(widget1);
+            expect(rave.getWidget(widget1.regionWidgetId)).toBeUndefined();
         });
     });
 


Reply via email to