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);
}
/**