You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by li...@apache.org on 2009/10/27 23:19:42 UTC

svn commit: r830372 - in /incubator/shindig/trunk/javascript: container/gadgets.js samplecontainer/samplecontainer.js

Author: lindner
Date: Tue Oct 27 22:19:41 2009
New Revision: 830372

URL: http://svn.apache.org/viewvc?rev=830372&view=rev
Log:
SHINDIG-1211 | Patch from Benjamin McCann | Only show settings menu in sample gadget if there are user editable prefs

Modified:
    incubator/shindig/trunk/javascript/container/gadgets.js
    incubator/shindig/trunk/javascript/samplecontainer/samplecontainer.js

Modified: incubator/shindig/trunk/javascript/container/gadgets.js
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/javascript/container/gadgets.js?rev=830372&r1=830371&r2=830372&view=diff
==============================================================================
--- incubator/shindig/trunk/javascript/container/gadgets.js (original)
+++ incubator/shindig/trunk/javascript/container/gadgets.js Tue Oct 27 22:19:41 2009
@@ -206,11 +206,10 @@
     value) {
   var id = gadgets.container.gadgetService.getGadgetIdFromModuleId(this.f);
   var gadget = gadgets.container.getGadget(id);
-  var prefs = gadget.getUserPrefs() || {};
   for (var i = 1, j = arguments.length; i < j; i += 2) {
-    prefs[arguments[i]] = arguments[i + 1];
+    this.userPrefs[arguments[i]].value = arguments[i + 1];
   }
-  gadget.setUserPrefs(prefs);
+  gadget.saveUserPrefs();
 };
 
 /**
@@ -373,6 +372,8 @@
  *    "private": Whether gadget spec is accessible only privately, which means
  *        browser can load it but not gadget server
  *    "spec": Gadget Specification in XML
+ *    "userPrefs": a javascript object containing attribute value pairs of user
+ *        preferences for this gadget with the value being a preference object
  *    "viewParams": a javascript object containing attribute value pairs
  *        for this gadgets
  *    "secureToken": an encoded token that is passed on the URL hash
@@ -386,7 +387,7 @@
  *        javascript
  */
 gadgets.Gadget = function(params) {
-  this.userPrefs_ = {};
+  this.userPrefs = {};
 
   if (params) {
     for (var name in params)  if (params.hasOwnProperty(name)) {
@@ -401,21 +402,17 @@
 };
 
 gadgets.Gadget.prototype.getUserPrefs = function() {
-  return this.userPrefs_;
+  return this.userPrefs;
 };
 
-gadgets.Gadget.prototype.setUserPrefs = function(userPrefs) {
-  this.userPrefs_ = userPrefs;
+gadgets.Gadget.prototype.saveUserPrefs = function() {
   gadgets.container.userPrefStore.savePrefs(this);
 };
 
-gadgets.Gadget.prototype.getUserPref = function(name) {
-  return this.userPrefs_[name];
-};
-
-gadgets.Gadget.prototype.setUserPref = function(name, value) {
-  this.userPrefs_[name] = value;
-  gadgets.container.userPrefStore.savePrefs(this);
+gadgets.Gadget.prototype.getUserPrefValue = function(name) {
+  var pref = this.userPrefs[name];
+  return typeof(pref.value) != 'undefined' && pref.value != null ?
+      pref.value : pref['default'];
 };
 
 gadgets.Gadget.prototype.render = function(chrome) {
@@ -423,7 +420,7 @@
     var gadget = this;
     this.getContent(function(content) {
       chrome.innerHTML = content;
-      window.frames[gadget.getIframeId()].location = gadget.getIframeUrl(); 
+      window.frames[gadget.getIframeId()].location = gadget.getIframeUrl();
     });
   }
 };
@@ -501,15 +498,18 @@
 gadgets.IfrGadget.prototype.rpcRelay = 'files/container/rpc_relay.html';
 
 gadgets.IfrGadget.prototype.getTitleBarContent = function(continuation) {
+  var settingsButton = this.hasViewablePrefs_() ?
+      '<a href="#" onclick="gadgets.container.getGadget(' + this.id +
+          ').handleOpenUserPrefsDialog();return false;" class="' + this.cssClassTitleButton +
+          '">settings</a> '
+      : '';
   continuation('<div id="' + this.cssClassTitleBar + '-' + this.id +
       '" class="' + this.cssClassTitleBar + '"><span id="' +
       this.getIframeId() + '_title" class="' +
       this.cssClassTitle + '">' + (this.title ? this.title : 'Title') + '</span> | <span class="' +
-      this.cssClassTitleButtonBar +
-      '"><a href="#" onclick="gadgets.container.getGadget(' + this.id +
-      ').handleOpenUserPrefsDialog();return false;" class="' + this.cssClassTitleButton +
-      '">settings</a> <a href="#" onclick="gadgets.container.getGadget(' +
-      this.id + ').handleToggle();return false;" class="' + this.cssClassTitleButton +
+      this.cssClassTitleButtonBar + '">' + settingsButton +
+      '<a href="#" onclick="gadgets.container.getGadget(' + this.id +
+      ').handleToggle();return false;" class="' + this.cssClassTitleButton +
       '">toggle</a></span></div>');
 };
 
@@ -570,12 +570,9 @@
 
 gadgets.IfrGadget.prototype.getUserPrefsParams = function() {
   var params = '';
-  if (this.getUserPrefs()) {
-    for(var name in this.getUserPrefs()) {
-      var value = this.getUserPref(name);
-      params += '&up_' + encodeURIComponent(name) + '=' +
-          encodeURIComponent(value);
-    }
+  for(var name in this.getUserPrefs()) {
+    params += '&up_' + encodeURIComponent(name) + '=' +
+        encodeURIComponent(this.getUserPrefValue(name));
   }
   return params;
 };
@@ -589,6 +586,18 @@
   }
 };
 
+
+gadgets.IfrGadget.prototype.hasViewablePrefs_ = function() {
+  for(var name in this.getUserPrefs()) {
+    var pref = this.userPrefs[name];
+    if (pref.type != 'hidden') {
+      return true;
+    }
+  }
+  return false;
+};
+
+
 gadgets.IfrGadget.prototype.handleOpenUserPrefsDialog = function() {
   if (this.userPrefsDialogContentLoaded) {
     this.showUserPrefsDialog();
@@ -631,20 +640,19 @@
 gadgets.IfrGadget.prototype.handleSaveUserPrefs = function() {
   this.hideUserPrefsDialog();
 
-  var prefs = {};
   var numFields = document.getElementById('m_' + this.id +
       '_numfields').value;
   for (var i = 0; i < numFields; i++) {
     var input = document.getElementById('m_' + this.id + '_' + i);
-    if (input.type == 'hidden') {
+    if (input.type != 'hidden') {
       var userPrefNamePrefix = 'm_' + this.id + '_up_';
       var userPrefName = input.name.substring(userPrefNamePrefix.length);
       var userPrefValue = input.value;
-      prefs[userPrefName] = userPrefValue;
+      this.userPrefs[userPrefName].value = userPrefValue;
     }
   }
 
-  this.setUserPrefs(prefs);
+  this.saveUserPrefs();
   this.refresh();
 };
 
@@ -734,7 +742,6 @@
 
 gadgets.Container.prototype.addGadget = function(gadget) {
   gadget.id = this.getNextGadgetInstanceId();
-  gadget.setUserPrefs(this.userPrefStore.getPrefs(gadget));
   this.gadgets_[this.getGadgetKey_(gadget.id)] = gadget;
 };
 

Modified: incubator/shindig/trunk/javascript/samplecontainer/samplecontainer.js
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/javascript/samplecontainer/samplecontainer.js?rev=830372&r1=830371&r2=830372&view=diff
==============================================================================
--- incubator/shindig/trunk/javascript/samplecontainer/samplecontainer.js (original)
+++ incubator/shindig/trunk/javascript/samplecontainer/samplecontainer.js Tue Oct 27 22:19:41 2009
@@ -149,8 +149,8 @@
     gadgets.container.view_ = current_view;
     gadgets.container.gadgets_ = {};
     for (var i = 0; i < metadata.gadgets.length; i++) {
-      gadget = gadgets.container.createGadget(
-          {'specUrl': metadata.gadgets[i].url, 'title': metadata.gadgets[i].title});
+      gadget = gadgets.container.createGadget({'specUrl': metadata.gadgets[i].url,
+          'title': metadata.gadgets[i].title, 'userPrefs': metadata.gadgets[i].userPrefs});
       // Shindigs rpc code uses direct javascript calls when running on the same domain
       // to simulate cross-domain when running sample container we replace 
       // 'localhost' with '127.0.0.1' 
@@ -170,10 +170,10 @@
   function refreshGadgets(metadata) {
     // TODO: The gadget.js file should really have a getGadgets method
     for (var gadget in gadgets.container.gadgets_) {
-      var newtitle = metadata.gadgets[0].title;
-      var specUrl = metadata.gadgets[0].url;
-      gadgets.container.gadgets_[gadget].title = newtitle;
-      gadgets.container.gadgets_[gadget].specUrl = specUrl;
+      var gadgetMetadata = metadata.gadgets[0];
+      gadgets.container.gadgets_[gadget].title = gadgetMetadata.title;
+      gadgets.container.gadgets_[gadget].specUrl = gadgetMetadata.url;
+      gadgets.container.gadgets_[gadget].userPrefs = gadgetMetadata.userPrefs;
       gadgets.container.gadgets_[gadget].secureToken = escape(generateSecureToken());
     }
     reloadStateFile(function() {