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();
});
});