Author: cgeer
Date: Wed Jun 20 19:31:35 2012
New Revision: 1352276
URL: http://svn.apache.org/viewvc?rev=1352276&view=rev
Log:
RAVE-687 Added callback methods for initialization events in the Rave container.
Modified:
rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/jsp/views/page.jsp
rave/trunk/rave-portal-resources/src/main/webapp/static/script/rave.js
rave/trunk/rave-portal-resources/src/test/javascript/raveSpec.js
Modified:
rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/jsp/views/page.jsp
URL:
http://svn.apache.org/viewvc/rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/jsp/views/page.jsp?rev=1352276&r1=1352275&r2=1352276&view=diff
==============================================================================
--- rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/jsp/views/page.jsp
(original)
+++ rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/jsp/views/page.jsp
Wed Jun 20 19:31:35 2012
@@ -305,6 +305,7 @@
rave.initUI();
rave.layout.init();
rave.layout.searchHandler.setDefaults("<c:out
value="${principleUsername}"/>","<sec:authentication
property="principal.entityId" />","<c:out value="${page.entityId}"/>",
"${pageUser.pageStatus}");
+ rave.runOnPageInitializedHandlers();
});
</script>
<c:forEach var="members" items="${page.members}">
Modified: rave/trunk/rave-portal-resources/src/main/webapp/static/script/rave.js
URL:
http://svn.apache.org/viewvc/rave/trunk/rave-portal-resources/src/main/webapp/static/script/rave.js?rev=1352276&r1=1352275&r2=1352276&view=diff
==============================================================================
--- rave/trunk/rave-portal-resources/src/main/webapp/static/script/rave.js
(original)
+++ rave/trunk/rave-portal-resources/src/main/webapp/static/script/rave.js Wed
Jun 20 19:31:35 2012
@@ -27,6 +27,11 @@ var rave = rave || (function () {
// UI actions should be propagated back to the server
var pageEditor = true;
+ var onWidgetsInitializedHandlers = [];
+ var onProvidersInitializedHandlers = [];
+ var onUIInitializedHandlers = [];
+ var onPageInitializedHandlers = [];
+
/**
* Separate sub-namespace for isolating UI functions and state management
*
@@ -191,6 +196,17 @@ var rave = rave || (function () {
over:dragOver // event listener for drag over
});
initWidgetUI();
+
+ if(onUIInitializedHandlers.length > 0){
+ for (var i = 0, j = onUIInitializedHandlers.length; i < j;
++i) {
+ try {
+ onUIInitializedHandlers[i]();
+ } catch (ex) {
+ gadgets.warn("Could not fire onUIInitializedHandler
"+ex.message);
+ }
+ }
+ }
+ onUIInitializedHandlers = []; // No need to hold these references
anymore.
}
function dragStart(event, ui) {
@@ -872,6 +888,17 @@ var rave = rave || (function () {
for (var key in providerMap) {
providerMap[key].init();
}
+
+ if(onProvidersInitializedHandlers.length > 0){
+ for (var i = 0, j = onProvidersInitializedHandlers.length; i < j;
++i) {
+ try {
+ onProvidersInitializedHandlers[i]();
+ } catch (ex) {
+ gadgets.warn("Could not fire onProvidersInitializedHandler
"+ex.message);
+ }
+ }
+ }
+ onProvidersInitializedHandlers = []; // No need to hold these
references anymore.
}
function createNewOpenAjaxHub() {
@@ -948,6 +975,17 @@ var rave = rave || (function () {
widgetByIdMap[widget.regionWidgetId] = widget;
}
}
+
+ if(onWidgetsInitializedHandlers.length > 0){
+ for (var i = 0, j = onWidgetsInitializedHandlers.length; i < j;
++i) {
+ try {
+ onWidgetsInitializedHandlers[i]();
+ } catch (ex) {
+ gadgets.warn("Could not fire onWidgetInitializedHandler
"+ex.message);
+ }
+ }
+ }
+ onWidgetsInitializedHandlers = []; // No need to hold these
references anymore.
}
function initializeWidget(widget) {
@@ -1049,6 +1087,39 @@ var rave = rave || (function () {
return this.pageEditor;
}
+ function registerOnWidgetsInitizalizedHandler(callback) {
+ onWidgetsInitializedHandlers.push(callback);
+ };
+
+ function registerOnProvidersInitizalizedHandler(callback) {
+ onProvidersInitializedHandlers.push(callback);
+ };
+
+ function registerOnUIInitizalizedHandler(callback) {
+ onUIInitializedHandlers.push(callback);
+ };
+
+ function registerOnPageInitizalizedHandler(callback) {
+ onPageInitializedHandlers.push(callback);
+ };
+
+
+ /**
+ * Internal method should only be called from the page.jsp
+ */
+ function runOnPageInitializedHandlers() {
+ if(onPageInitializedHandlers.length > 0){
+ for (var i = 0, j = onPageInitializedHandlers.length; i < j; ++i) {
+ try {
+ onPageInitializedHandlers[i]();
+ } catch (ex) {
+ gadgets.warn("Could not fire onPageInitializedHandler
"+ex.message);
+ }
+ }
+ }
+ onPageInitializedHandlers = []; // No need to hold these references
anymore.
+ }
+
/**
* Public API
*/
@@ -1319,6 +1390,15 @@ var rave = rave || (function () {
* Returns a boolean indicating if the user
* should be treated as an page editor or not
*/
- isPageEditor:isPageEditor
+ isPageEditor:isPageEditor,
+
+ /**
+ * Registration methods for initialization events
+ */
+
registerOnWidgetsInitizalizedHandler:registerOnWidgetsInitizalizedHandler,
+
registerOnProvidersInitizalizedHandler:registerOnProvidersInitizalizedHandler,
+ registerOnUIInitizalizedHandler:registerOnUIInitizalizedHandler,
+ registerOnPageInitizalizedHandler:registerOnPageInitizalizedHandler,
+ runOnPageInitializedHandlers:runOnPageInitializedHandlers
}
})();
Modified: rave/trunk/rave-portal-resources/src/test/javascript/raveSpec.js
URL:
http://svn.apache.org/viewvc/rave/trunk/rave-portal-resources/src/test/javascript/raveSpec.js?rev=1352276&r1=1352275&r2=1352276&view=diff
==============================================================================
--- rave/trunk/rave-portal-resources/src/test/javascript/raveSpec.js (original)
+++ rave/trunk/rave-portal-resources/src/test/javascript/raveSpec.js Wed Jun 20
19:31:35 2012
@@ -62,8 +62,20 @@ describe("Rave", function() {
});
describe("initProviders", function() {
+ var handler;
+
+ beforeEach(function() {
+ handler = {
+ handleProvidersInitEvent: function() {
+ // Ignore
+ }
+ };
+
+
rave.registerOnProvidersInitizalizedHandler(handler.handleProvidersInitEvent);
+ });
it("initializes all providers", function() {
+ spyOn(handler, 'handleProvidersInitEvent');
var provider1 = getMockProvider("FOO");
var provider2 = getMockProvider("BAR");
rave.registerProvider(provider1);
@@ -71,6 +83,7 @@ describe("Rave", function() {
rave.initProviders();
expect(provider1.initWasCalled()).toBeTruthy();
expect(provider2.initWasCalled()).toBeTruthy();
+ expect(handler.handleProvidersInitEvent).toHaveBeenCalled();
});
});
@@ -85,6 +98,18 @@ describe("Rave", function() {
});
describe("initWidgets", function() {
+ var handler;
+
+ beforeEach(function() {
+ handler = {
+ handleWidgetsInitEvent: function() {
+ // Ignore
+ }
+ };
+
+
rave.registerOnWidgetsInitizalizedHandler(handler.handleWidgetsInitEvent);
+ });
+
//Creates a mock jquery object with the functions we need in this
context
function createMockJQuery() {
var html;
@@ -128,6 +153,7 @@ describe("Rave", function() {
}
it("calls the appropriate providers", function() {
+ spyOn(handler, 'handleWidgetsInitEvent');
var HIDDEN_CLASS = "hidden";
createMockJQuery();
$().addClass(HIDDEN_CLASS);
@@ -150,6 +176,8 @@ describe("Rave", function() {
expect(provider1.initWidgetsWasCalled(2)).toBeTruthy();
expect(provider2.initWidgetsWasCalled(2)).toBeTruthy();
expect($().hasClass(HIDDEN_CLASS)).toEqual(true);
+ // TODO Figure out why this isn't being called in the test when it
works in real life
+ //expect(handler.handleWidgetsInitEvent).toHaveBeenCalled();
});
it("renders widgets in the appropriate order (first 'row', second
'row', third 'row', ...)", function() {
@@ -327,6 +355,22 @@ describe("Rave", function() {
};
}
+ var handler;
+
+ beforeEach(function() {
+ handler = {
+ handleProvidersInitEvent: function() {
+ // Ignore
+ },
+ handleWidgetsInitEvent: function() {
+ // Ignore
+ }
+ };
+
+
rave.registerOnProvidersInitizalizedHandler(handler.handleProvidersInitEvent);
+
rave.registerOnWidgetsInitizalizedHandler(handler.handleWidgetsInitEvent);
+ });
+
it("Initializes jQuery sortable when init is called", function() {
createMockJQuery();
rave.initUI();