Return-Path: Delivered-To: apmail-incubator-shindig-issues-archive@minotaur.apache.org Received: (qmail 11677 invoked from network); 16 Dec 2009 11:46:42 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 16 Dec 2009 11:46:42 -0000 Received: (qmail 41556 invoked by uid 500); 16 Dec 2009 11:46:42 -0000 Delivered-To: apmail-incubator-shindig-issues-archive@incubator.apache.org Received: (qmail 41514 invoked by uid 500); 16 Dec 2009 11:46:41 -0000 Mailing-List: contact shindig-issues-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: shindig-dev@incubator.apache.org Delivered-To: mailing list shindig-issues@incubator.apache.org Received: (qmail 41504 invoked by uid 99); 16 Dec 2009 11:46:41 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 16 Dec 2009 11:46:41 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.140] (HELO brutus.apache.org) (140.211.11.140) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 16 Dec 2009 11:46:39 +0000 Received: from brutus (localhost [127.0.0.1]) by brutus.apache.org (Postfix) with ESMTP id 10CFA234C498 for ; Wed, 16 Dec 2009 03:46:18 -0800 (PST) Message-ID: <841297010.1260963978054.JavaMail.jira@brutus> Date: Wed, 16 Dec 2009 11:46:18 +0000 (UTC) From: "Bruce Godden (JIRA)" To: shindig-issues@incubator.apache.org Subject: [jira] Created: (SHINDIG-1248) UserPref problems in example container code: gadgets.js and cookiebaseduserprefstore.js MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 X-Virus-Checked: Checked by ClamAV on apache.org UserPref problems in example container code: gadgets.js and cookiebaseduserprefstore.js --------------------------------------------------------------------------------------- Key: SHINDIG-1248 URL: https://issues.apache.org/jira/browse/SHINDIG-1248 Project: Shindig Issue Type: Bug Components: Javascript Reporter: Bruce Godden Priority: Minor I was trying to create a simple test container which supported user preferences based on the pubsub example but I encountered a number of bugs in the example container javascript files. In gadgets.js the setUserPref function appears to be setting the preference in the GadgetService object instead of the Gadget object. Also the ways it runs the loop processing the function arguments might give an unwanted effect if no value was specified for the last name argument. The fixed function is: gadgets.IfrGadgetService.prototype.setUserPref = function(editToken, name, value) { var id = gadgets.container.gadgetService.getGadgetIdFromModuleId(this.f); var gadget = gadgets.container.getGadget(id); for (var i = 2, j = arguments.length; i < j; i += 2) { // *** run loop using the value argument to detect the end *** gadget.userPrefs[arguments[i - 1]] = arguments[i]; // *** argument accesses changed *** } gadget.saveUserPrefs(); // *** use gadget instead of this *** }; In gadgets.js the getUserPrefValue and handleSaveUserPrefs functions fail to fetch/store the value for a preference because they seem to think that it is stored as a value attribute; it isn't according to the rest of the code. The fixed functions are: gadgets.Gadget.prototype.getUserPrefValue = function(name) { var pref = this.userPrefs[name]; return typeof(pref) != 'undefined' && pref != null ? // *** .value deleted from this line twice *** pref : this.userPrefs['default']; // *** .value deleted from this line *** }; (Actually in the above is there really any point in fetching a global default value for a preference that doesn't have a value set? This probably isn't going to be the correct default value as given by the gadget specification.) gadgets.IfrGadget.prototype.handleSaveUserPrefs = function() { this.hideUserPrefsDialog(); var numFields = document.getElementById('m_' + this.id + '_numfields').value; for (var i = 0; i < numFields; i++) { var input = document.getElementById('m_' + this.id + '_' + i); var userPrefNamePrefix = 'm_' + this.id + '_up_'; var userPrefName = input.name.substring(userPrefNamePrefix.length); var userPrefValue = input.value; this.userPrefs[userPrefName] = userPrefValue; // *** .value deleted from this line *** } this.saveUserPrefs(); this.refresh(); }; The current settings of the user preferences are not loaded into the gadget during its creation. I added a comment to SHINDIG-181 about this but here is the fixed function anyway: gadgets.Container.prototype.addGadget = function(gadget) { gadget.id = this.getNextGadgetInstanceId(); this.gadgets_[this.getGadgetKey_(gadget.id)] = gadget; gadget.userPrefs = this.userPrefStore.getPrefs(gadget); // *** new line *** }; In cookiebaseduserprefstore.js the savePrefs function is trying to fetch a preference value by calling getUserPref on the gadget but the function is should be calling is getUserPrefValue. However, it would be neater to simple use the userPrefs object it fetched to find the preference names directly. The fixed function is: gadgets.CookieBasedUserPrefStore.prototype.savePrefs = function(gadget) { var pairs = []; var prefs = gadget.getUserPrefs(); // *** new line *** for (var name in prefs) { // *** use the fetched prefs *** var pair = encodeURIComponent(name) + '=' + encodeURIComponent(prefs[name]); // *** access the fetched prefs directly *** pairs.push(pair); } var cookieName = this.USER_PREFS_PREFIX + gadget.id; var cookieValue = pairs.join('&'); shindig.cookies.set(cookieName, cookieValue); }; -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.