Author: rbaxter85
Date: Wed Feb 29 23:31:00 2012
New Revision: 1295336

URL: http://svn.apache.org/viewvc?rev=1295336&view=rev
Log:
SHINDIG-1712
Cleanup open view APIs

Modified:
    shindig/trunk/content/samplecontainer/examples/commoncontainer/cconviews.js
    
shindig/trunk/content/samplecontainer/examples/embeddedexperiences/EEContainer.js
    
shindig/trunk/content/samplecontainer/examples/embeddedexperiences/PhotoList.xml
    
shindig/trunk/content/samplecontainer/examples/embeddedexperiences/index.html
    
shindig/trunk/content/samplecontainer/examples/media-openGadgets/MediaUIOpenGadgets.js
    
shindig/trunk/features/src/main/javascript/features/open-views/viewenhancements-container.js

Modified: 
shindig/trunk/content/samplecontainer/examples/commoncontainer/cconviews.js
URL: 
http://svn.apache.org/viewvc/shindig/trunk/content/samplecontainer/examples/commoncontainer/cconviews.js?rev=1295336&r1=1295335&r2=1295336&view=diff
==============================================================================
--- shindig/trunk/content/samplecontainer/examples/commoncontainer/cconviews.js 
(original)
+++ shindig/trunk/content/samplecontainer/examples/commoncontainer/cconviews.js 
Wed Feb 29 23:31:00 2012
@@ -24,22 +24,30 @@
 CommonContainer['views'] = CommonContainer['views'] || {};
 
 /**
- * Method will be called to create the DOM element to place the Gadget Site in.
+ * Method will be called to create the DOM element to place the Gadget
+ * Site in.
  *
- * @param {object} gadgetMetadata
- *          gadget meta data for the gadget being opened in
+ * @param {Object}
+ *          metadata: Gadget meta data for the gadget being opened in
  *          this GadgetSite.
- * @param {string=} opt_view
- *          Optional parameter, the view that indicates the type of
- *          GadgetSite.
- * @param {string=} opt_viewTarget
- *          Optional parameter, the view target indicates where
- *          to open the gadget.
- * @return {object} The DOM element to place the GadgetSite in.
+ * @param {Element}
+ *          rel: The element to which opt_coordinates values are
+ *          relative.
+ * @param {string=}
+ *          opt_view: Optional parameter, the view that indicates the
+ *          type of GadgetSite.
+ * @param {string=}
+ *          opt_viewTarget: Optional parameter, the view target indicates
+ *          where to open the gadget.
+ * @param {Object=}
+ *          opt_coordinates: Object containing the desired absolute
+ *          positioning css parameters (top|bottom|left|right) with
+ *          appropriate values. All values are relative to the calling
+ *          gadget.
+ * @return {Object} The DOM element to place the GadgetSite in.
  */
-
-CommonContainer.views.createElementForGadget = function(gadgetMetadata,
-        opt_view, opt_viewTarget) {
+CommonContainer.views.createElementForGadget = function(metadata, rel, 
opt_view, opt_viewTarget,
+        opt_coordinates) {
 
   var surfaceView = 'default';
   var viewTarget = 'default';
@@ -53,30 +61,39 @@ CommonContainer.views.createElementForGa
 
   switch (viewTarget) {
     case 'tab':
-      return openInNewTab(gadgetMetadata);
+      return openInNewTab(metadata);
       break;
     case 'dialog':
-      return openInDialog(false, surfaceView, true, gadgetMetadata);
+      return openInDialog(false, surfaceView, true, metadata);
       break;
     case 'modalDialog':
-      return openInDialog(true, surfaceView, true, gadgetMetadata);
+      return openInDialog(true, surfaceView, true, metadata);
       break;
     default:
-      return openInDialog(false, surfaceView, true, gadgetMetadata);
+      return openInDialog(false, surfaceView, true, metadata);
   }
 };
 
 
 
 /**
- * Method will be called to create the DOM element to place the UrlSite in.
+ * Method will be called to create the DOM element to place the UrlSite
+ * in.
  *
- * @param {string=} opt_viewTarget
- *          Optional parameter, the view target to open. If not
+ * @param {Element}
+ *          rel: The element to which opt_coordinates values are
+ *          relative.
+ * @param {string=}
+ *          opt_view: Optional parameter, the view to open. If not
  *          included the container should use its default view.
+ * @param {Object=}
+ *          opt_coordinates: Object containing the desired absolute
+ *          positioning css parameters (top|bottom|left|right) with
+ *          appropriate values. All values are relative to the calling
+ *          gadget.
  * @return {Object} The DOM element to place the UrlSite object in.
  */
-CommonContainer.views.createElementForUrl = function(opt_viewTarget) {
+CommonContainer.views.createElementForUrl = function(rel, opt_viewTarget, 
opt_coordinates) {
   var viewTarget = 'dialog';
 
   if (typeof opt_viewTarget != 'undefined') {
@@ -147,17 +164,21 @@ function openInDialog(modaldialog, view,
 
   document.getElementById('content').appendChild(dialog);
   if (isGadget) {
+    var id = 'dialog_' + dialog_counter;
     // use jquery to create the dialog
-    $('#dialog_' + dialog_counter).dialog({
+    $('#' + id).dialog({
       resizable: false,
       width: dialog_width, // height will be auto
       modal: modaldialog, // set modal: true or false
-      close: function(ev, ui) {
-        var iframeid = document.getElementById('dialog_' + dialog_counter).
-            getElementsByTagName('iframe')[0].id;
-        var site = CommonContainer.getGadgetSiteByIframeId_(iframeid);
-        CommonContainer.closeGadget(site);
-        $(this).remove();
+      beforeClose: function(ev, ui) {
+        var dialogDiv = $('#' + id + ' iframe');
+        if(dialogDiv.length) {
+          //Means the user most likely clicked the 'x' in the dialog chrome
+          //If they clicked the OK or Cancel buttons in the dialog than the 
gadget
+          //iFrame would have already been removed from the DOM
+          var site = CommonContainer.getGadgetSiteByIframeId_(dialogDiv[0].id);
+          CommonContainer.closeGadget(site);
+        }
       }
     });
     return dialog;

Modified: 
shindig/trunk/content/samplecontainer/examples/embeddedexperiences/EEContainer.js
URL: 
http://svn.apache.org/viewvc/shindig/trunk/content/samplecontainer/examples/embeddedexperiences/EEContainer.js?rev=1295336&r1=1295335&r2=1295336&view=diff
==============================================================================
--- 
shindig/trunk/content/samplecontainer/examples/embeddedexperiences/EEContainer.js
 (original)
+++ 
shindig/trunk/content/samplecontainer/examples/embeddedexperiences/EEContainer.js
 Wed Feb 29 23:31:00 2012
@@ -26,32 +26,44 @@ $(document).ready(function() {
 
 
 //Initiate the common container code and register any RPC listeners for 
embedded experiences
-var CommonContainer = new osapi.container.Container({});
+var config = {};
+config[osapi.container.ContainerConfig.RENDER_DEBUG] = '1';
+var CommonContainer = new osapi.container.Container(config);
 CommonContainer.init = new function() {
 
-  CommonContainer.views.createElementForEmbeddedExperience = 
function(opt_viewTarget, opt_coordinates, opt_rel) {
-    if(opt_viewTarget == 'FLOAT' && opt_coordinates && opt_rel) {
-      var offset = $(opt_rel).offset();
-
+  CommonContainer.views.createElementForEmbeddedExperience = function(rel, 
opt_gadgetInfo,
+          opt_viewTarget, opt_coordinates){
+    if(opt_gadgetInfo && !opt_gadgetInfo.error) {
+      var title = opt_gadgetInfo.modulePrefs.title;
+      if(title) {
+        $('#title').html(opt_gadgetInfo.modulePrefs.title);
+      }
+    }
+    var top = $(rel).offset().top,
+      left =  $(rel).offset().left;
+    if(opt_viewTarget == 'FLOAT' && opt_coordinates) {
       $('#preview').css({
-        top: (offset.top + opt_coordinates.top) +'px',
-        left: (offset.left + opt_coordinates.left) + 'px',
+        top: (top + opt_coordinates.top) + 'px',
+        left: (left + opt_coordinates.left) + 'px',
+        'margin-top': '0px',
         position: 'absolute'
       });
     }
     else {
       $('#preview').css({
+        'margin-top': top +'px',
         top: 'auto',
         left: 'auto',
         position: 'static'
       });
     }
 
-    return $('#preview').get(0);
+    return $('#previewSite').get(0);
   };
 
   CommonContainer.views.destroyElement = function(site) {
     CommonContainer.ee.close(site);
+    $('#title').html('');
   };
 }
 
@@ -81,14 +93,15 @@ function closeCurrentGadget() {
   if (currentEESite)
     CommonContainer.ee.close(currentEESite);
 
-  var preview = $('#preview').get(0);
-  var previewChildren = preview.childNodes;
+  var previewSite = $('#previewSite').get(0);
+  var previewChildren = previewSite.childNodes;
   if (previewChildren.length > 0) {
     var iframe = previewChildren[0];
     var iframeId = iframe.getAttribute('id');
     var site = CommonContainer.getGadgetSiteByIframeId_(iframeId);
     CommonContainer.ee.close(site);
   }
+  $('#title').html('');
 }
 
 /**

Modified: 
shindig/trunk/content/samplecontainer/examples/embeddedexperiences/PhotoList.xml
URL: 
http://svn.apache.org/viewvc/shindig/trunk/content/samplecontainer/examples/embeddedexperiences/PhotoList.xml?rev=1295336&r1=1295335&r2=1295336&view=diff
==============================================================================
--- 
shindig/trunk/content/samplecontainer/examples/embeddedexperiences/PhotoList.xml
 (original)
+++ 
shindig/trunk/content/samplecontainer/examples/embeddedexperiences/PhotoList.xml
 Wed Feb 29 23:31:00 2012
@@ -99,8 +99,13 @@
             var coordinates = $('#photo' + index).offset();
             coordinates.left = coordinates.left + $('#photo' + index).width();
 
-            var navigateCallback = function(site, metadata){currentSite = 
site; console.log("Nagivate callback");};
-            var returnCallback = function(returnValue){console.log("Return 
Value: " + returnValue);};
+            var navigateCallback = function(site, metadata){
+              currentSite = site;
+              console.log("Nagivate callback");
+            };
+            var returnCallback = function(returnValue){
+              console.log("Return Value: " + returnValue);
+            };
             gadgets.views.openEmbeddedExperience(returnCallback, 
navigateCallback, eeDataModel, {
               'viewTarget' : index == 0 ? 'preview' : 'FLOAT',
               'coordinates' : coordinates

Modified: 
shindig/trunk/content/samplecontainer/examples/embeddedexperiences/index.html
URL: 
http://svn.apache.org/viewvc/shindig/trunk/content/samplecontainer/examples/embeddedexperiences/index.html?rev=1295336&r1=1295335&r2=1295336&view=diff
==============================================================================
--- 
shindig/trunk/content/samplecontainer/examples/embeddedexperiences/index.html 
(original)
+++ 
shindig/trunk/content/samplecontainer/examples/embeddedexperiences/index.html 
Wed Feb 29 23:31:00 2012
@@ -38,6 +38,10 @@
                                margin-left: 10px;
                        }
 
+                       #previewSite {
+                               height: 100%;
+                       }
+
                        #accordion {
                                width: 50%;
                                float: left;
@@ -52,7 +56,10 @@
       <div id="content">
         <div id="accordion">
         </div>
-        <div id="preview"></div>
+        <div id="preview">
+          <div id="title"></div>
+          <div id="previewSite"></div>
+        </div>
         <div style="clear: both;"/>
       </div>
     </body>

Modified: 
shindig/trunk/content/samplecontainer/examples/media-openGadgets/MediaUIOpenGadgets.js
URL: 
http://svn.apache.org/viewvc/shindig/trunk/content/samplecontainer/examples/media-openGadgets/MediaUIOpenGadgets.js?rev=1295336&r1=1295335&r2=1295336&view=diff
==============================================================================
--- 
shindig/trunk/content/samplecontainer/examples/media-openGadgets/MediaUIOpenGadgets.js
 (original)
+++ 
shindig/trunk/content/samplecontainer/examples/media-openGadgets/MediaUIOpenGadgets.js
 Wed Feb 29 23:31:00 2012
@@ -305,7 +305,7 @@ function MediaUI(social) {
     var viewTarget = 'dialog';
 
     function navigateCallback(site) {
-      console.log('navigateCallback ');
+      gadgets.log('navigateCallback ');
     }
     gadgets.views.openUrl(url, navigateCallback, viewTarget);
 
@@ -342,7 +342,7 @@ function MediaUI(social) {
     }
 
     function navigateCallback(site, metadata) {
-      console.log('navigateCallback');
+      gadgets.log('navigateCallback');
     }
 
     var viewParams = {'data': album};
@@ -362,8 +362,8 @@ function MediaUI(social) {
 
     function resultCallback(result) {
       if (result != null) {
-        console.log('container width = ' + result.width);
-        console.log('container height = ' + result.height);
+        gadgets.log('container width = ' + result.width);
+        gadgets.log('container height = ' + result.height);
       }
     }
     // Just an example to show how to use the getContainerDimensions API,
@@ -372,20 +372,19 @@ function MediaUI(social) {
     gadgets.window.getContainerDimensions(resultCallback);
 
     function callback(newMediaItem) {
-      var albumId = mediaItem == null ? album.id : mediaItem.albumId;
-
-      social.updateMediaItem(viewer.id, albumId, mediaItem.id, newMediaItem,
+      if(newMediaItem) {
+        var albumId = mediaItem == null ? album.id : mediaItem.albumId;
+        social.updateMediaItem(viewer.id, albumId, mediaItem.id, newMediaItem,
           function(response) {
-            // publish("org.apache.shindig.mediaItem.updated", newMediaItem);
-            social.getMediaItemsByAlbum(viewer.id, album.id,
-                function(response) {
-                  renderMediaItems(album, response.list);
-                });
-          });
+            social.getMediaItemsByAlbum(viewer.id, album.id, 
function(response) {
+              renderMediaItems(album, response.list);
+            });
+        });
+      }
     }
 
     function navigateCallback(site, metadata) {
-      console.log('navigateCallback');
+      gadgets.log('navigateCallback');
     }
 
     var viewParams = {'data': {'album': album, 'mediaItem': mediaItem}};
@@ -405,7 +404,7 @@ function MediaUI(social) {
     if (confirm("Delete '" + album.title + "'?")) {
       social.deleteAlbum(viewer.id, album.id, function(response) {
         publish('org.apache.shindig.album.deleted', album);
-        console.log('delete album response: ' + JSON.stringify(response));
+        gadgets.log('delete album response: ' + JSON.stringify(response));
         renderAlbumsByUser(viewer.id);
       });
     }
@@ -420,7 +419,7 @@ function MediaUI(social) {
       social.deleteMediaItem(viewer.id, albumId, mediaItem.id,
           function(response) {
             publish('org.apache.shindig.mediaItem.deleted', mediaItem);
-            console.log('delete mediaItem response: ' +
+            gadgets.log('delete mediaItem response: ' +
                     JSON.stringify(response));
             social.getMediaItemsByAlbum(viewer.id, albumId, function(response) 
{
               renderMediaItems(album, response.list);

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=1295336&r1=1295335&r2=1295336&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
 Wed Feb 29 23:31:00 2012
@@ -56,7 +56,9 @@
           returnValue = returnValueMap[id],
           resultCallback = resultCallbackMap[id];
 
-      if (resultCallback) {
+      //Checking the truthiness of resultCallback is bad because 0 is a value 
value
+      //check whether it is undefined
+      if (typeof resultCallback !== 'undefined') {
         if (site.ownerId_) {
           gadgets.rpc.call(site.ownerId_, 'gadgets.views.deliverResult', null,
             resultCallback, returnValue
@@ -104,10 +106,10 @@
    */
   function openGadget(rpcArgs, resultCallback, opt_params) {
 
-    var navigateCallback = this.callback,
-        siteOwnerId = this.f,
+    var navigateCallback = rpcArgs.callback,
+        siteOwnerId = rpcArgs.f,
         gadgetUrl = '',
-        orig_site = context.getGadgetSiteByIframeId_(this.f);
+        orig_site = context.getGadgetSiteByIframeId_(rpcArgs.f);
 
     if ((typeof orig_site != 'undefined') &&
             (typeof orig_site.getActiveSiteHolder() != 'undefined')) {
@@ -118,8 +120,7 @@
     var view = '',
         viewTarget = '',
         viewParams = {},
-        coordinates,
-        rel;
+        coordinates;
     if (opt_params) {
       if (opt_params.view)
         view = opt_params.view;
@@ -129,10 +130,10 @@
         viewParams = opt_params.viewParams;
       if(opt_params.coordinates) {
         coordinates = opt_params.coordinates;
-        rel = context.getGadgetSiteByIframeId_(this.f).getActiveSiteHolder()
-          .getIframeElement();
       }
     }
+    var rel = context.getGadgetSiteByIframeId_(rpcArgs.f).getActiveSiteHolder()
+    .getIframeElement();
     context.preloadGadget(gadgetUrl, function(result) {
       /*
        * result[gadgetUrl] : metadata
@@ -153,7 +154,7 @@
       var renderParams = {},
            site = context.newGadgetSite(
             context.views.createElementForGadget(
-               metadata, view, viewTarget, coordinates, rel
+               metadata, rel, view, viewTarget, coordinates
              )
            );
 
@@ -209,14 +210,13 @@
    *              discretion.
    */
   function openEE(rpcArgs, resultCallback, dataModel, opt_params) {
-    var navigateCallback = this.callback,
-        siteOwnerId = this.f,
+    var navigateCallback = rpcArgs.callback,
+        siteOwnerId = rpcArgs.f,
         gadgetUrl = dataModel.gadget;
-    var navigateEE = function() {
+    var navigateEE = function(opt_metadata) {
       var viewTarget = '',
           viewParams = {},
-          coordinates,
-          rel;
+          coordinates;
       if (opt_params) {
         if (opt_params.viewTarget)
                viewTarget = opt_params.viewTarget;
@@ -224,13 +224,13 @@
           viewParams = opt_params.viewParams;
         if (opt_params.coordinates) {
           coordinates = opt_params.coordinates;
-          rel = 
context.getGadgetSiteByIframeId_(siteOwnerId).getActiveSiteHolder()
-            .getIframeElement();
         }
       }
+      var rel = 
context.getGadgetSiteByIframeId_(siteOwnerId).getActiveSiteHolder()
+      .getIframeElement();
 
       var element = context.views.createElementForEmbeddedExperience(
-        viewTarget, coordinates, rel
+        rel, opt_metadata, viewTarget, coordinates
       );
 
       var gadgetRenderParams = {};
@@ -276,7 +276,7 @@
             return;
           }
         }
-        navigateEE();
+        navigateEE(result[gadgetUrl]);
       });
     } else {
       navigateEE();
@@ -309,13 +309,10 @@
    * @returns {string} The ID of the site created, if a callback was 
registered.
    */
   function openUrl(rpcArgs, url, opt_viewTarget, opt_coordinates) {
-    var rel;
-    if (opt_coordinates) {
-      rel = context.getGadgetSiteByIframeId_(this.f).getActiveSiteHolder()
+    var rel = context.getGadgetSiteByIframeId_(rpcArgs.f).getActiveSiteHolder()
         .getIframeElement();
-    }
     var content_div = context.views.createElementForUrl(
-      opt_viewTarget, opt_coordinates, rel
+      rel, opt_viewTarget, opt_coordinates
     );
 
     var site = context.newUrlSite(content_div);
@@ -328,7 +325,7 @@
 
     // 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_ = this.f;
+    site.ownerId_ = rpcArgs.f;
     return site.getId();
   }
 
@@ -342,7 +339,7 @@
    */
   function close(rpcArgs, opt_site) {
     // opt_site may be 0, do not do a truthy test on the value.
-    var orig_site = context.getGadgetSiteByIframeId_(this.f),
+    var orig_site = context.getGadgetSiteByIframeId_(rpcArgs.f),
         site = typeof(opt_site) != 'undefined' && opt_site != null ?
           context.getSiteById(opt_site) : orig_site;
 
@@ -350,7 +347,7 @@
       return;
     }
 
-    if (site == orig_site || site.ownerId_ == this.f) {
+    if (site == orig_site || site.ownerId_ == rpcArgs.f) {
       // The provided method must ultimately call container.closeGadget(site);
       context.views.destroyElement(site);
     }
@@ -366,7 +363,7 @@
    */
   function setReturnValue(rpcArgs, returnValue) {
     var site;
-    if (site = context.getGadgetSiteByIframeId_(this.f)) {
+    if (site = context.getGadgetSiteByIframeId_(rpcArgs.f)) {
       returnValueMap[site.getId()] = returnValue;
     }
   }
@@ -394,6 +391,9 @@
        * @param {Object}
        *          metadata: Gadget meta data for the gadget being opened in
        *          this GadgetSite.
+       * @param {Element}
+       *          rel: The element to which opt_coordinates values are
+       *          relative.
        * @param {string=}
        *          opt_view: Optional parameter, the view that indicates the
        *          type of GadgetSite.
@@ -405,13 +405,10 @@
        *          positioning css parameters (top|bottom|left|right) with
        *          appropriate values. All values are relative to the calling
        *          gadget.
-       * @param {Element=}
-       *          opt_rel: The element to which opt_coordinates values are
-       *          relative.
        * @return {Object} The DOM element to place the GadgetSite in.
        */
-      'createElementForGadget' : function(metadata, opt_view, opt_viewTarget,
-          opt_coordinates, opt_rel) {
+      'createElementForGadget' : function(metadata, rel, opt_view, 
opt_viewTarget,
+          opt_coordinates) {
         console.log('container need to define createElementForGadget 
function');
       },
 
@@ -419,23 +416,25 @@
        * Method will be called to create the DOM element to place the embedded
        * experience in.
        *
+       *@param {Element}
+       *          rel: The element to which opt_coordinates values are
+       *          relative.
+       * @param {Object}
+       *          opt_gadgetInfo: Info for the gadget embedded experience,
+       *          if the data model contains a gadget URL.
        * @param {string=}
        *          opt_viewTarget:  Optional parameter, the view target 
indicates
        *          where to open.
-       *
        * @param {Object=}
        *          opt_coordinates: Object containing the desired absolute
        *          positioning css parameters (top|bottom|left|right) with
        *          appropriate values. All values are relative to the calling
        *          gadget.
-       * @param {Element=}
-       *          opt_rel: The element to which opt_coordinates values are
-       *          relative.
        * @return {Object} The DOM element to place the embedded experience in.
        */
 
-      'createElementForEmbeddedExperience' : function(opt_viewTarget,
-          opt_coordinates, opt_rel) {
+      'createElementForEmbeddedExperience' : function(rel, opt_gadgetInfo, 
opt_viewTarget,
+          opt_coordinates) {
         console.log('container need to define ' +
             'createElementForEmbeddedExperience function');
       },
@@ -444,6 +443,9 @@
        * Method will be called to create the DOM element to place the UrlSite
        * in.
        *
+       * @param {Element}
+       *          rel: The element to which opt_coordinates values are
+       *          relative.
        * @param {string=}
        *          opt_view: Optional parameter, the view to open. If not
        *          included the container should use its default view.
@@ -452,14 +454,10 @@
        *          positioning css parameters (top|bottom|left|right) with
        *          appropriate values. All values are relative to the calling
        *          gadget.
-       * @param {Element=}
-       *          opt_rel: The element to which opt_coordinates values are
-       *          relative.
        * @return {Object} The DOM element to place the UrlSite object in.
        */
 
-      'createElementForUrl' : function(opt_viewTarget, opt_coordinates,
-          opt_rel) {
+      'createElementForUrl' : function(rel, opt_viewTarget, opt_coordinates) {
         console.log('container need to define createElementForUrl function');
       },
 


Reply via email to