You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by dd...@apache.org on 2012/02/14 16:53:47 UTC

svn commit: r1244008 - in /shindig/trunk/features/src/main/javascript/features/open-views: feature.xml viewenhancements-container.js

Author: ddumont
Date: Tue Feb 14 15:53:46 2012
New Revision: 1244008

URL: http://svn.apache.org/viewvc?rev=1244008&view=rev
Log:
SHINDIG-1703 Open-Views feature: views opened by gadgets do not always have their resultCallback called.

Modified:
    shindig/trunk/features/src/main/javascript/features/open-views/feature.xml
    shindig/trunk/features/src/main/javascript/features/open-views/viewenhancements-container.js

Modified: shindig/trunk/features/src/main/javascript/features/open-views/feature.xml
URL: http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/open-views/feature.xml?rev=1244008&r1=1244007&r2=1244008&view=diff
==============================================================================
--- shindig/trunk/features/src/main/javascript/features/open-views/feature.xml (original)
+++ shindig/trunk/features/src/main/javascript/features/open-views/feature.xml Tue Feb 14 15:53:46 2012
@@ -26,6 +26,7 @@ A map of view names to view attributes. 
   <name>open-views</name>
   <dependency>globals</dependency>
   <dependency>rpc</dependency>
+  <dependency>container</dependency>
   <dependency>container.site.url</dependency>
   <dependency>container.site.gadget</dependency>
   <dependency>views</dependency>

Modified: shindig/trunk/features/src/main/javascript/features/open-views/viewenhancements-container.js
URL: http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/open-views/viewenhancements-container.js?rev=1244008&r1=1244007&r2=1244008&view=diff
==============================================================================
--- shindig/trunk/features/src/main/javascript/features/open-views/viewenhancements-container.js (original)
+++ shindig/trunk/features/src/main/javascript/features/open-views/viewenhancements-container.js Tue Feb 14 15:53:46 2012
@@ -49,6 +49,25 @@
     resultCallbackMap = {};
 
     returnValueMap = {};
+
+    var lifecyclecb = {};
+    lifecyclecb[osapi.container.CallbackType.ON_BEFORE_CLOSE] = function(site) {
+      var id = site.getId(),
+          returnValue = returnValueMap[id],
+          resultCallback = resultCallbackMap[id];
+
+      if (resultCallback) {
+        if (site.ownerId_) {
+          gadgets.rpc.call(site.ownerId_, 'gadgets.views.deliverResult', null,
+            resultCallback, returnValue
+          );
+        }
+      }
+
+      delete returnValueMap[id];
+      delete resultCallbackMap[id];
+    };
+    context.addGadgetLifecycleCallback("open-views", lifecyclecb);
   };
   /**
    * Opens a gadget in the container UI. The location of the gadget site in the
@@ -324,34 +343,17 @@
   function close(opt_site) {
     // opt_site may be 0, do not do a truthy test on the value.
     var orig_site = context.getGadgetSiteByIframeId_(this.f),
-        site = typeof(opt_site) != 'undefined' && opt_site != null ? 
+        site = typeof(opt_site) != 'undefined' && opt_site != null ?
           context.getSiteById(opt_site) : orig_site;
 
     if (!site) {
       return;
     }
 
-    // A side effect of this check is that if a gadget tries to close a site it did not
-    // create, the gadget itself will be closed.  That's the price to pay for trying to
-    // be evil, I guess :)
-    var siteId = site.getId(),
-        allowed = site == orig_site || site.ownerId_ == this.f;
-
-    if (typeof(siteId) != 'undefined' && allowed) {
-      var returnValue = returnValueMap[siteId],
-          resultCallback = resultCallbackMap[siteId];
-
-      if (typeof(resultCallback) != 'undefined') { // may be 0
-        if (typeof(returnValue) != 'undefined' && site.ownerId_) {
-          gadgets.rpc.call(site.ownerId_, 'gadgets.views.deliverResult', null,
-            resultCallback, returnValue
-          );
-        }
-        delete resultCallbackMap[siteId];
-      }
+    if (site == orig_site || site.ownerId_ == this.f) {
+      // The provided method must ultimately call container.closeGadget(site);
+      context.views.destroyElement(site);
     }
-
-    context.views.destroyElement(site);
   }
 
   /**