You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by rb...@apache.org on 2012/05/02 18:52:00 UTC

svn commit: r1333106 - in /shindig/trunk: content/samplecontainer/examples/embeddedexperiences/ features/src/main/javascript/features/embeddedexperiences/

Author: rbaxter85
Date: Wed May  2 16:51:59 2012
New Revision: 1333106

URL: http://svn.apache.org/viewvc?rev=1333106&view=rev
Log:
SHINDIG-1760
Add registerConextListener API for embedded experiences

Modified:
    shindig/trunk/content/samplecontainer/examples/embeddedexperiences/AlbumViewer.xml
    shindig/trunk/content/samplecontainer/examples/embeddedexperiences/PhotoList.xml
    shindig/trunk/features/src/main/javascript/features/embeddedexperiences/embedded_experiences_gadgets.js
    shindig/trunk/features/src/main/javascript/features/embeddedexperiences/feature.xml

Modified: shindig/trunk/content/samplecontainer/examples/embeddedexperiences/AlbumViewer.xml
URL: http://svn.apache.org/viewvc/shindig/trunk/content/samplecontainer/examples/embeddedexperiences/AlbumViewer.xml?rev=1333106&r1=1333105&r2=1333106&view=diff
==============================================================================
--- shindig/trunk/content/samplecontainer/examples/embeddedexperiences/AlbumViewer.xml (original)
+++ shindig/trunk/content/samplecontainer/examples/embeddedexperiences/AlbumViewer.xml Wed May  2 16:51:59 2012
@@ -20,64 +20,58 @@
 <Module>
 	<ModulePrefs title="Photo Album Viewer" description="View Photos From An Album" height="400" width="650">
 		<Require feature="embedded-experiences"></Require>
-        <Require feature="dynamic-height"></Require>
         <Require feature="open-views"></Require>
 	</ModulePrefs>
 	<Content type="html" view="embedded, default">
    <![CDATA[
-   	 <style type="text/css">
-		.photo {
-			float: left;
-			margin-left: 20px;
-			margin-right: 20px;
-			margin-bottom: 70px;
-			maring-top: 20px;
-			padding: 2px 2px 2px 2px;
-			border: 1px solid black;
-		}
-		
-		#wrapper{
-			border: 1px solid black;
-		}
-		
-		#header{
-			font-size: 120%;
-			padding: 10px 10px 10px 10px;
-			color: #0F67A1;
-		}     	
-		
-		.clear{
-			clear: both;
-		} 	
+     <style type="text/css">
+       .photo {
+         float: left;
+         margin-left: 20px;
+         margin-right: 20px;
+         margin-bottom: 70px;
+         maring-top: 20px;
+         padding: 2px 2px 2px 2px;
+         border: 1px solid black;
+       }
+
+       #wrapper {
+         border: 1px solid black;
+       }
+
+       #header {
+         font-size: 120%;
+         padding: 10px 10px 10px 10px;
+         color: #0F67A1;
+       }
+
+       .clear {
+         clear: both;
+       }
      </style>
 
 
-     <script type="text/javascript">     	
-     	function initAlbum(){
-     		opensocial.data.getDataContext().registerListener('org.opensocial.ee.context', function(key){
-     			createAlbumHTML(opensocial.data.getDataContext().getDataSet(key));
-     		});
-     	}
-     	
-     	function createAlbumHTML(context){
-     	    var photos = context.photoUrls;
-     		var result = "";
-     		for(var i = 0; i < photos.length; i++){
-     			result = result + '<div class="photo"><img src="' + photos[i] + '"/></div>';
-     		}
-     		document.getElementById('header').innerHTML = context.albumName;
-     		document.getElementById("album").innerHTML = result;
-            gadgets.views.setReturnValue("Rendered Album");
-     	}
-     	
-     	gadgets.util.registerOnLoadHandler(initAlbum);
-   	 </script>
-
-	 <div id="wrapper">
-	 	<div id="header"></div>
-	 	<div id="album"></div>
-	 	<div class="clear"/>
-	 </div>
+     <script type="text/javascript">
+       function createAlbumHTML(context){
+         var photos = context.photoUrls;
+         var result = '';
+         for(var i = 0; i < photos.length; i++){
+           result = result + '<div class="photo"><img src="' + gadgets.io.getProxyUrl(photos[i]) + '"/></div>';
+         }
+         document.getElementById('header').innerHTML = context.albumName;
+         document.getElementById('album').innerHTML = result;
+         gadgets.views.setReturnValue('Rendered Album');
+       }
+       gadgets.util.registerOnLoadHandler(function() {
+         gadgets.ee.registerContextListener(createAlbumHTML);
+       });
+     </script>
+
+     <div id="wrapper">
+       <div id="header"></div>
+       <div id="album"></div>
+       <div class="clear"/>
+     </div>
   ]]>
 	</Content>
 </Module>

Modified: shindig/trunk/content/samplecontainer/examples/embeddedexperiences/PhotoList.xml
URL: http://svn.apache.org/viewvc/shindig/trunk/content/samplecontainer/examples/embeddedexperiences/PhotoList.xml?rev=1333106&r1=1333105&r2=1333106&view=diff
==============================================================================
--- shindig/trunk/content/samplecontainer/examples/embeddedexperiences/PhotoList.xml (original)
+++ shindig/trunk/content/samplecontainer/examples/embeddedexperiences/PhotoList.xml Wed May  2 16:51:59 2012
@@ -54,15 +54,9 @@
      <script type="text/javascript">
 
          var currentSite;
-
-         function initAlbum(){
-             opensocial.data.getDataContext().registerListener('org.opensocial.ee.context', function(key){
-                 createAlbumHTML(opensocial.data.getDataContext().getDataSet(key));
-             });
-         };
          var context;
          function createAlbumHTML(context){
-             this.context=context;
+             window.context=context;
              var photos = context.photoUrls;
              var result = "";
              for(var i = 0; i < photos.length; i++){
@@ -72,8 +66,9 @@
              $('#header').html(context.albumName);
              $('#album').html(result);
          };
-
-         gadgets.util.registerOnLoadHandler(initAlbum);
+         gadgets.util.registerOnLoadHandler(function() {
+           gadgets.ee.registerContextListener(createAlbumHTML);
+         });
 
          function showPreviewPhoto(index, eeGadget) {
 

Modified: shindig/trunk/features/src/main/javascript/features/embeddedexperiences/embedded_experiences_gadgets.js
URL: http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/embeddedexperiences/embedded_experiences_gadgets.js?rev=1333106&r1=1333105&r2=1333106&view=diff
==============================================================================
--- shindig/trunk/features/src/main/javascript/features/embeddedexperiences/embedded_experiences_gadgets.js (original)
+++ shindig/trunk/features/src/main/javascript/features/embeddedexperiences/embedded_experiences_gadgets.js Wed May  2 16:51:59 2012
@@ -17,12 +17,17 @@
  * under the License.
  */
 
-gadgets['embeddedExperiences'] = gadgets['embeddedExperiences'] || {};
+gadgets['ee'] = gadgets['ee'] || {};
 
 (function() {
+
+  var contextListeners = [];
+  var isContextSet = false;
+
   /**
    * Sets the context for this embedded experience.
-   * @param {Object} context the embedded experiences context.
+   * @param {Object} context
+   *         The embedded experiences context.
    */
   function setDataContext(context) {
     opensocial.data.DataContext.putDataSet('org.opensocial.ee.context', context);
@@ -31,15 +36,42 @@ gadgets['embeddedExperiences'] = gadgets
   /**
    * Init the embedded experiences feature.  This calls an RPC handler to get
    * the embedded experiences context and puts it in the gadgets data context.
-   * @param {Object} config configuration for the feature.
+   * @param {Object} config
+   *        Configuration for the feature.
    */
   function init(config) {
     gadgets.rpc.call(null, 'ee_gadget_rendered', setDataContext, {});
     gadgets.rpc.register('ee_set_context', setDataContext);
+    opensocial.data.getDataContext().registerListener('org.opensocial.ee.context', function(key) {
+      var context = opensocial.data.getDataContext().getDataSet(key);
+      isContextSet = true;
+      var length = contextListeners.length;
+      for(var i = length;  i--;) {
+        contextListeners[i](context);
+      }
+    });
   };
 
   if (gadgets.config) {
     gadgets.config.register('embedded-experiences', null, init);
   }
 
+  /**
+   * Registers a listener for when the embedded experiences context object is set for
+   * this gadget.  This listener will be called whenever the context is set for the gadget.
+   *
+   * @param {Function} listener
+   *        A function to be called when the listener is set.
+   */
+  gadgets.ee.registerContextListener = function(listener) {
+	//Add the listener regardless
+	contextListeners.push(listener);
+
+	//It could be that the context was already set before the gadget called this function
+	//so see if we have a context object in the data context and if we do call the listener
+	//back right away
+	if(isContextSet) {
+	  listener(opensocial.data.getDataContext().getDataSet('org.opensocial.ee.context'));
+	}
+  };
 }());

Modified: shindig/trunk/features/src/main/javascript/features/embeddedexperiences/feature.xml
URL: http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/embeddedexperiences/feature.xml?rev=1333106&r1=1333105&r2=1333106&view=diff
==============================================================================
--- shindig/trunk/features/src/main/javascript/features/embeddedexperiences/feature.xml (original)
+++ shindig/trunk/features/src/main/javascript/features/embeddedexperiences/feature.xml Wed May  2 16:51:59 2012
@@ -25,6 +25,7 @@ specific language governing permissions 
     <gadget>
         <script src="embedded_experiences_gadgets.js" />
         <api>
+          <exports type="js">gadgets.ee.registerContextListener</exports>
           <exports type="rpc">ee_set_context</exports>
           <uses type="rpc">ee_gadget_rendered</uses>
         </api>