Reviewers: rbaxter85, ddumont, dev_shindig.apache.org,

Description:
CR for SHINDIG-1787 Calling navigateGadget again after the initial one
destroys the content iframe and fails to navigate to the view

See https://issues.apache.org/jira/browse/SHINDIG-1787 for details

Please review this at http://codereview.appspot.com/6305045/

Affected files:
  features/src/main/javascript/features/container.site.gadget/gadget_site.js
  features/src/main/javascript/features/container.site/site_holder.js


Index: features/src/main/javascript/features/container.site/site_holder.js
===================================================================
--- features/src/main/javascript/features/container.site/site_holder.js (revision 1345303) +++ features/src/main/javascript/features/container.site/site_holder.js (working copy)
@@ -93,6 +93,15 @@
 };

 /**
+ * Disposes the gadget holder and performs cleanup of any holder state.
+ */
+osapi.container.SiteHolder.prototype.dispose = function() {
+  if (this.el_ && this.el_.firstChild) {
+    this.el_.removeChild(this.el_.firstChild);
+  }
+};
+
+/**
  * Creates the iframe element source for this holder's iframe element.
  * @param {string} url The src url for the iframe.
* @param {Object.<string, string>=} overrides A bag of iframe attribute overrides.
@@ -139,16 +148,6 @@
    return params;
 };

-/**
- * Disposes the gadget holder and performs cleanup of any holder state.
- * @abstract
- */
-osapi.container.SiteHolder.prototype.dispose = function() {
-  if (this.el_ && this.el_.firstChild) {
-    this.el_.removeChild(this.el_.firstChild);
-  }
-};
-
 //Abstract methods

 /**
Index: features/src/main/javascript/features/container.site.gadget/gadget_site.js
===================================================================
--- features/src/main/javascript/features/container.site.gadget/gadget_site.js (revision 1345303) +++ features/src/main/javascript/features/container.site.gadget/gadget_site.js (working copy)
@@ -36,9 +36,7 @@
 osapi.container.GadgetSite = function(container, service, args) {
   var undef;

-  osapi.container.Site.call(this, container, service,
-    args['gadgetEl']
-  ); // call super
+ osapi.container.Site.call(this, container, service, args['gadgetEl']); // call super

   /**
    * @type {string}
@@ -283,10 +281,23 @@
     return;
   }

-  // Load into the double-buffer if there is one.
-  var el = this.loadingGadgetEl_ || this.el_;
-  this.loadingGadgetHolder_ = new osapi.container.GadgetHolder(this, el,
-          this.gadgetOnLoad_);
+  // Set the loading gadget holder:
+ // 1. If the gadget site already has currentGadgetHolder_ set and no loading element passed,
+  //    simply set the current gadget holder as the loading gadget holder.
+ // 2. Else, check if caller pass the loading gadget element. If it does then use it to create new + // instance of osapi.container.GadgetHolder as the loading gadget holder.
+  if (this.currentGadgetHolder_ && !this.loadingGadgetEl_){
+    this.loadingGadgetHolder_ = this.currentGadgetHolder_;
+    this.currentGadgetHolder_ = null;
+  }
+  else {
+    var el = this.el_;
+    // Check if we are passed the loading gadget element
+    if(this.loadingGadgetEl_) {
+      el = this.loadingGadgetEl_;
+    }
+ this.loadingGadgetHolder_ = new osapi.container.GadgetHolder(this, el, this.gadgetOnLoad_);
+  }

   var localRenderParams = {};
   for (var key in renderParams) {


Reply via email to