Author: ddumont
Date: Wed May 2 13:53:49 2012
New Revision: 1333049
URL: http://svn.apache.org/viewvc?rev=1333049&view=rev
Log:
Allow site element creation to be asynchronous in open-views features
Modified:
shindig/trunk/features/src/main/javascript/features/open-views.ee/open-views-ee-container.js
shindig/trunk/features/src/main/javascript/features/open-views.gadget/open-views-gadget-container.js
shindig/trunk/features/src/main/javascript/features/open-views.url/open-views-url-container.js
Modified:
shindig/trunk/features/src/main/javascript/features/open-views.ee/open-views-ee-container.js
URL:
http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/open-views.ee/open-views-ee-container.js?rev=1333049&r1=1333048&r2=1333049&view=diff
==============================================================================
---
shindig/trunk/features/src/main/javascript/features/open-views.ee/open-views-ee-container.js
(original)
+++
shindig/trunk/features/src/main/javascript/features/open-views.ee/open-views-ee-container.js
Wed May 2 13:53:49 2012
@@ -76,37 +76,42 @@ osapi.container.Container.addMixin('view
var orig_site = container.getGadgetSiteByIframeId_(siteOwnerId),
rel = orig_site.getActiveSiteHolder().getIframeElement();
+ function callback(element) {
+ var gadgetRenderParams = {};
+ gadgetRenderParams[osapi.container.RenderParam.VIEW] =
+ osapi.container.ee.RenderParam.EMBEDDED;
+ gadgetRenderParams[osapi.container.RenderParam.WIDTH] = '100%';
+ gadgetRenderParams[osapi.container.RenderParam.HEIGHT] = '100%';
+
+ var urlRenderParams = {};
+ urlRenderParams[osapi.container.RenderParam.WIDTH] = '100%';
+ urlRenderParams[osapi.container.RenderParam.HEIGHT] = '100%';
+
+ var eeRenderParams = {};
+ eeRenderParams[osapi.container.ee.RenderParam.GADGET_RENDER_PARAMS] =
+ gadgetRenderParams;
+ eeRenderParams[osapi.container.ee.RenderParam.URL_RENDER_PARAMS] =
+ urlRenderParams;
+ eeRenderParams[osapi.container.ee.RenderParam.GADGET_VIEW_PARAMS] =
+ viewParams;
+
+ container.ee.navigate(element, dataModel, eeRenderParams,
function(site, result) {
+ site.ownerId_ = siteOwnerId;
+ if (result) {
+ self.resultCallbacks_[site.getId()] = resultCallback;
+ }
+ if (navigateCallback) {
+ navigateCallback([site.getId(), result]);
+ }
+ });
+ }
+
var element = self.createElementForEmbeddedExperience(
- rel, opt_metadata, viewTarget, coordinates, orig_site
+ rel, opt_metadata, viewTarget, coordinates, orig_site, callback
);
-
- var gadgetRenderParams = {};
- gadgetRenderParams[osapi.container.RenderParam.VIEW] =
- osapi.container.ee.RenderParam.EMBEDDED;
- gadgetRenderParams[osapi.container.RenderParam.WIDTH] = '100%';
- gadgetRenderParams[osapi.container.RenderParam.HEIGHT] = '100%';
-
- var urlRenderParams = {};
- urlRenderParams[osapi.container.RenderParam.WIDTH] = '100%';
- urlRenderParams[osapi.container.RenderParam.HEIGHT] = '100%';
-
- var eeRenderParams = {};
- eeRenderParams[osapi.container.ee.RenderParam.GADGET_RENDER_PARAMS] =
- gadgetRenderParams;
- eeRenderParams[osapi.container.ee.RenderParam.URL_RENDER_PARAMS] =
- urlRenderParams;
- eeRenderParams[osapi.container.ee.RenderParam.GADGET_VIEW_PARAMS] =
- viewParams;
-
- container.ee.navigate(element, dataModel, eeRenderParams, function(site,
result) {
- site.ownerId_ = siteOwnerId;
- if (result) {
- self.resultCallbacks_[site.getId()] = resultCallback;
- }
- if (navigateCallback) {
- navigateCallback([site.getId(), result]);
- }
- });
+ if (element) {
+ callback(element);
+ }
};
if(gadgetUrl) {
@@ -133,7 +138,8 @@ osapi.container.Container.addMixin('view
/**
* Method will be called to create the DOM element to place the embedded
- * experience in.
+ * experience in. An implementation must either return an element or call
+ * the provided callback asynchronously, but not both.
*
*@param {Element}
* rel: The element to which opt_coordinates values are
@@ -151,10 +157,12 @@ osapi.container.Container.addMixin('view
* gadget.
* @param {osapi.container.Site} parentSite
* The site opening the EE.
+ * @param {function(element)} opt_callback
+ * A callback to asynchronously provide the result of the
createElement call.
* @return {Object} The DOM element to place the embedded experience in.
*/
this.createElementForEmbeddedExperience = function(rel, opt_gadgetInfo,
opt_viewTarget,
- opt_coordinates, parentSite) {
+ opt_coordinates, parentSite, opt_callback) {
console.log('container needs to define createElementForEmbeddedExperience
function');
};
});
\ No newline at end of file
Modified:
shindig/trunk/features/src/main/javascript/features/open-views.gadget/open-views-gadget-container.js
URL:
http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/open-views.gadget/open-views-gadget-container.js?rev=1333049&r1=1333048&r2=1333049&view=diff
==============================================================================
---
shindig/trunk/features/src/main/javascript/features/open-views.gadget/open-views-gadget-container.js
(original)
+++
shindig/trunk/features/src/main/javascript/features/open-views.gadget/open-views-gadget-container.js
Wed May 2 13:53:49 2012
@@ -104,34 +104,41 @@ osapi.container.Container.addMixin('view
}
}
- var renderParams = {},
- elem = self.createElementForGadget(
- metadata, rel, view, viewTarget, coordinates, orig_site
- ),
- site = container.newGadgetSite(elem);
+ function callback(elem) {
+ var renderParams = {},
+ site = container.newGadgetSite(elem);
- site.ownerId_ = siteOwnerId;
+ site.ownerId_ = siteOwnerId;
- if ((typeof view != 'undefined') && view !== '') {
- renderParams[osapi.container.RenderParam.VIEW] = view;
+ if ((typeof view != 'undefined') && view !== '') {
+ renderParams[osapi.container.RenderParam.VIEW] = view;
+ }
+ renderParams[osapi.container.RenderParam.WIDTH] = '100%';
+ renderParams[osapi.container.RenderParam.HEIGHT] = '100%';
+
+ container.navigateGadget(site, gadgetUrl, viewParams, renderParams,
function(metadata) {
+ if (metadata) {
+ self.resultCallbacks_[site.getId()] = resultCallback;
+ }
+ if (navigateCallback) {
+ navigateCallback([site.getId(), metadata]);
+ }
+ });
}
- renderParams[osapi.container.RenderParam.WIDTH] = '100%';
- renderParams[osapi.container.RenderParam.HEIGHT] = '100%';
- container.navigateGadget(site, gadgetUrl, viewParams, renderParams,
function(metadata) {
- if (metadata) {
- self.resultCallbacks_[site.getId()] = resultCallback;
- }
- if (navigateCallback) {
- navigateCallback([site.getId(), metadata]);
- }
- });
+ var elem = self.createElementForGadget(
+ metadata, rel, view, viewTarget, coordinates, orig_site, callback
+ );
+ if (elem) {
+ callback(elem);
+ }
});
});
/**
* Method will be called to create the DOM element to place the Gadget
- * Site in.
+ * Site in. An implementation must either return an element or call
+ * the provided callback asynchronously, but not both.
*
* @param {Object}
* metadata: Gadget meta data for the gadget being opened in
@@ -152,10 +159,12 @@ osapi.container.Container.addMixin('view
* gadget.
* @param {osapi.container.Site} parentSite
* The site opening the gadget view.
+ * @param {function(element)} opt_callback
+ * A callback to asynchronously provide the result of the
createElement call.
* @return {Object} The DOM element to place the GadgetSite in.
*/
this.createElementForGadget = function(metadata, rel, opt_view,
opt_viewTarget,
- opt_coordinates, parentSite) {
+ opt_coordinates, parentSite, opt_callback) {
console.log('container needs to define createElementForGadget function');
};
});
\ No newline at end of file
Modified:
shindig/trunk/features/src/main/javascript/features/open-views.url/open-views-url-container.js
URL:
http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/open-views.url/open-views-url-container.js?rev=1333049&r1=1333048&r2=1333049&view=diff
==============================================================================
---
shindig/trunk/features/src/main/javascript/features/open-views.url/open-views-url-container.js
(original)
+++
shindig/trunk/features/src/main/javascript/features/open-views.url/open-views-url-container.js
Wed May 2 13:53:49 2012
@@ -51,24 +51,31 @@ osapi.container.Container.addMixin('view
var orig_site = container.getGadgetSiteByIframeId_(rpcArgs.f),
rel = orig_site.getActiveSiteHolder().getIframeElement();
- var content_div = self.createElementForUrl(rel, opt_viewTarget,
opt_coordinates, orig_site);
- var site = container.newUrlSite(content_div);
+ function callback(content_div) {
+ var site = container.newUrlSite(content_div);
- var renderParams = {}; // (height, width, class,userPrefsObject)
- renderParams[osapi.container.RenderParam.WIDTH] = '100%';
- renderParams[osapi.container.RenderParam.HEIGHT] = '100%';
-
- container.navigateUrl(site, url, renderParams);
-
- // record who opened this site, so that if they use the siteId to close it
later,
- // we don't inadvertently allow other gadgets to guess the id and close
the site.
- site.ownerId_ = rpcArgs.f;
- return site.getId();
+ var renderParams = {}; // (height, width, class,userPrefsObject)
+ renderParams[osapi.container.RenderParam.WIDTH] = '100%';
+ renderParams[osapi.container.RenderParam.HEIGHT] = '100%';
+
+ container.navigateUrl(site, url, renderParams);
+
+ // record who opened this site, so that if they use the siteId to close
it later,
+ // we don't inadvertently allow other gadgets to guess the id and close
the site.
+ site.ownerId_ = rpcArgs.f;
+ rpcArgs.callback([site.getId()]);
+ };
+
+ var content_div = self.createElementForUrl(rel, opt_viewTarget,
opt_coordinates, orig_site, callback);
+ if (content_div) {
+ callback(content_div);
+ }
});
/**
* Method will be called to create the DOM element to place the UrlSite
- * in.
+ * in. An implementation must either return an element or call
+ * the provided callback asynchronously, but not both.
*
* @param {Element}
* rel: The element to which opt_coordinates values are
@@ -83,9 +90,11 @@ osapi.container.Container.addMixin('view
* gadget.
* @param {osapi.container.Site} parentSite
* The site opening the url.
+ * @param {function(element)} opt_callback
+ * A callback to asynchronously provide the result of the
createElement call.
* @return {Object} The DOM element to place the UrlSite object in.
*/
- this.createElementForUrl = function(rel, opt_viewTarget, opt_coordinates,
parentSite) {
+ this.createElementForUrl = function(rel, opt_viewTarget, opt_coordinates,
parentSite, opt_callback) {
console.log('container needs to define createElementForUrl function');
};
});
\ No newline at end of file