Author: scottbw
Date: Fri Aug 3 09:54:43 2012
New Revision: 1368858
URL: http://svn.apache.org/viewvc?rev=1368858&view=rev
Log:
added a renderNewWidget() method to rave.js; when called as the successCallback
from rave.api.rpc.addWidgetToPage() it adds the widget to the page immediately
with no refresh required (see RAVE-743). Note that initWidgets() now filters
its init actions to avoid re-initializing existing widgets, or trying to init
widgets previously deleted in the same session.
Modified:
rave/trunk/rave-portal-resources/src/main/webapp/static/script/rave.js
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=1368858&r1=1368857&r2=1368858&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 Fri
Aug 3 09:54:43 2012
@@ -946,6 +946,24 @@ var rave = rave || (function () {
function resetOpenAjaxHubInstance() {
openAjaxHub = null;
}
+
+ function renderNewWidget(regionWidgetId){
+ // When run as the callback argument supplied to
rave.api.rpc.addWidgetToPage
+ // this method will render the widget in the current page.
+
+ // load widget into a placeholder element
+ var placeholder = document.createElement("div");
+
$(placeholder).load(rave.getContext()+"/api/rest/regionwidget/"+regionWidgetId,
function(){
+ // prepend to first region
+ var region = $("#region-1-id");
+ region.prepend(placeholder);
+ // remove the placeholder around the widget-wrapper
+ region.children(":first").children(":first").unwrap();
+ // initialize
+ initializeWidgets();
+ }
+ );
+ }
function initializeWidgets() {
//We get the widget objects in a map keyed by region ID. The code
below converts that map into a flat array
@@ -1003,6 +1021,18 @@ var rave = rave || (function () {
}
function initializeWidget(widget) {
+
+ // Widget has been deleted on the page but not removed from list
+ var widgetBody = $(["#widget-", widget.regionWidgetId,
"-body"].join(""));
+ if(widgetBody.length === 0){
+ return;
+ } else {
+ // Widget has already been initialized
+ if(typeof widgetBody.children !== "undefined" &&
widgetBody.children().length !== 0){
+ return;
+ }
+ }
+
if (widget.type == "DISABLED") {
renderDisabledWidget(widget.regionWidgetId,
unescape(widget.disabledMessage));
return;
@@ -1162,6 +1192,12 @@ var rave = rave || (function () {
registerWidget:registerWidget,
/**
+ * Render a newly-added widget in the page
+ * @param regionWidgetId the regionWidgetId of the widget to render
+ */
+ renderNewWidget:renderNewWidget,
+
+ /**
* Initialize all of the registered providers
*/
initProviders:initializeProviders,