You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by jo...@apache.org on 2010/07/30 02:50:21 UTC
svn commit: r980622 - in /shindig/trunk/features/src:
main/javascript/features/container/ main/javascript/features/shindig.uri/
test/javascript/features/shindig.uri/
Author: johnh
Date: Fri Jul 30 00:50:21 2010
New Revision: 980622
URL: http://svn.apache.org/viewvc?rev=980622&view=rev
Log:
Correct common container gadgets.rpc.setRelayUrl(), and use shindig.uri in common container code.
Lastly, adds method setExistingP to shindig.uri.
Patch provided by Michael Hermanto.
Modified:
shindig/trunk/features/src/main/javascript/features/container/feature.xml
shindig/trunk/features/src/main/javascript/features/container/gadget_holder.js
shindig/trunk/features/src/main/javascript/features/container/init.js
shindig/trunk/features/src/main/javascript/features/container/util.js
shindig/trunk/features/src/main/javascript/features/shindig.uri/uri.js
shindig/trunk/features/src/test/javascript/features/shindig.uri/uritest.js
Modified: shindig/trunk/features/src/main/javascript/features/container/feature.xml
URL: http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/container/feature.xml?rev=980622&r1=980621&r2=980622&view=diff
==============================================================================
--- shindig/trunk/features/src/main/javascript/features/container/feature.xml (original)
+++ shindig/trunk/features/src/main/javascript/features/container/feature.xml Fri Jul 30 00:50:21 2010
@@ -22,6 +22,7 @@ under the License.
<dependency>globals</dependency>
<dependency>core.log</dependency>
<dependency>shindig.auth</dependency>
+ <dependency>shindig.uri</dependency>
<dependency>core.util</dependency>
<dependency>osapi</dependency>
<dependency>rpc</dependency>
Modified: shindig/trunk/features/src/main/javascript/features/container/gadget_holder.js
URL: http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/container/gadget_holder.js?rev=980622&r1=980621&r2=980622&view=diff
==============================================================================
--- shindig/trunk/features/src/main/javascript/features/container/gadget_holder.js (original)
+++ shindig/trunk/features/src/main/javascript/features/container/gadget_holder.js Fri Jul 30 00:50:21 2010
@@ -29,7 +29,7 @@
*/
shindig.container.GadgetHolder = function(siteId, el) {
/**
- * Unique numeric gadget ID. Should be the same as siteId.
+ * Unique numeric gadget ID.
* @type {number}
* @private
*/
@@ -198,10 +198,13 @@ shindig.container.GadgetHolder.prototype
// Set up RPC channel. RPC relay url is on gmodules, relative to base of the
// container. Assumes container has set up forwarding to gmodules at /gadgets.
- gadgets.rpc.setRelayUrl(this.iframeId_, this.gadgetInfo_['iframeHost'] +
- '/gadgets/files/container/rpc_relay.html');
- // Pull RPC token from gadget URI
- gadgets.rpc.setAuthToken(this.iframeId_, this.getRpcToken_());
+ var iframeUri = shindig.uri(this.gadgetInfo_['iframeUrl']);
+ var relayUri = shindig.uri()
+ .setSchema(iframeUri.getSchema())
+ .setAuthority(iframeUri.getAuthority())
+ .setPath('/gadgets/files/container/rpc_relay.html');
+ gadgets.rpc.setRelayUrl(this.iframeId_, relayUri.toString());
+ gadgets.rpc.setAuthToken(this.iframeId_, iframeUri.getFP('rpctoken'));
};
@@ -262,51 +265,31 @@ shindig.container.GadgetHolder.prototype
* @private
*/
shindig.container.GadgetHolder.prototype.getIframeUrl_ = function() {
- var uri = this.gadgetInfo_['iframeUrl'];
- uri = shindig.container.util.updateQueryParam(uri, 'view', this.view_);
- uri = this.updateBooleanQueryParam_(uri, 'debug');
- uri = this.updateBooleanQueryParam_(uri, 'nocache');
- uri = this.updateBooleanQueryParam_(uri, 'testmode');
- uri = this.updateUserPrefParams_(uri);
+ var uri = shindig.uri(this.gadgetInfo_['iframeUrl']);
+ uri.setQP('debug', this.renderParams_['debug'] ? '1' : '0');
+ uri.setQP('nocache', this.renderParams_['nocache'] ? '1' : '0');
+ uri.setQP('testmode', this.renderParams_['testmode'] ? '1' : '0');
+ uri.setQP('view', this.view_);
+ this.updateUserPrefParams_(uri);
// TODO: Share this base container logic
// TODO: Two SD base URIs - one for container, one for gadgets
// Need to add parent at end of query due to gadgets parsing bug
- var parent = shindig.container.util.parseOrigin(document.location.href);
- uri = shindig.container.util.addQueryParam(uri, 'parent', parent);
+ uri.setQP('parent', window.__CONTAINER_HOST);
// Remove existing social token if we have a new one
if (this.securityToken_) {
- var securityTokenMatch = uri.match(/([&#?])(st=[^&#]*)/);
- if (securityTokenMatch) {
- uri = uri.replace(securityTokenMatch[0], securityTokenMatch[1] +
- 'st=' + encodeURIComponent(this.securityToken_));
- }
+ uri.setExistingP('st', this.securityToken_);
}
-
- uri = shindig.container.util.addFragmentParam(uri, 'mid',
- String(this.siteId_));
+
+ uri.setFP('mid', String(this.siteId_));
if (this.hasGadgetParams_) {
var gadgetParamText = gadgets.json.stringify(this.gadgetParams_);
- uri = shindig.container.util.addFragmentParam(uri, 'view-params',
- gadgetParamText);
+ uri.setFP('view-params', gadgetParamText);
}
- return uri;
-};
-
-/**
- * Updates query params of interest.
- * @param {string} uri The URL to append query param to.
- * @param {string} param The query param to update uri with.
- * @return {string} The URL with param append to.
- * @private
- */
-shindig.container.GadgetHolder.prototype.updateBooleanQueryParam_
- = function(uri, param) {
- var value = this.renderParams_[param] ? "1" : "0";
- return shindig.container.util.updateQueryParam(uri, param, value);
+ return uri.toString();
};
@@ -314,8 +297,8 @@ shindig.container.GadgetHolder.prototype
* Replace user prefs specified in url with only those specified. This will
* maintain each user prefs existence (or lack of), order (from left to right)
* and its appearance (in query params or fragment).
- * @param {string} uri The URL possibly containing user preferences parameters
- * prefixed by up_.
+ * @param {shindig.uri} uri The URL possibly containing user preferences
+ * parameters prefixed by up_.
* @return {string} The URL with up_ replaced by those specified in userPrefs.
* @private
*/
@@ -323,29 +306,12 @@ shindig.container.GadgetHolder.prototype
var userPrefs = this.renderParams_['userPrefs'];
if (userPrefs) {
for (var up in userPrefs) {
- // Maybe more efficient to have a pre-compiled regex that looks for
- // up_ANY_TEXT and match all instances.
- var re = new RegExp('([&#?])up_' + up + '[^&#]*');
- if (re) {
- var key = encodeURIComponent('up_' + up);
- var val = userPrefs[up];
- if (val instanceof Array) {
- val = val.join('|');
- }
- val = encodeURIComponent(val);
- uri = uri.replace(re, '$1' + key + '=' + val);
+ var upKey = 'up_' + up;
+ var upValue = userPrefs[up];
+ if (upValue instanceof Array) {
+ upValue = upValue.join('|');
}
+ uri.setExistingP(upKey, upValue);
}
}
- return uri;
-};
-
-
-/**
- * @return {string} The current RPC token.
- * @private
- */
-shindig.container.GadgetHolder.prototype.getRpcToken_ = function() {
- return shindig.container.util.getParamValue(
- this.gadgetInfo_['iframeUrl'], 'rpctoken');
};
Modified: shindig/trunk/features/src/main/javascript/features/container/init.js
URL: http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/container/init.js?rev=980622&r1=980621&r2=980622&view=diff
==============================================================================
--- shindig/trunk/features/src/main/javascript/features/container/init.js (original)
+++ shindig/trunk/features/src/main/javascript/features/container/init.js Fri Jul 30 00:50:21 2010
@@ -40,20 +40,18 @@
}
function initializeGlobalVars() {
- var scriptSrc = getLastScriptSrc();
- if (scriptSrc) {
- window.__API_HOST = shindig.container.util.parseOrigin(scriptSrc);
- window.__CONTAINER = shindig.container.util.getParamValue(
- scriptSrc, 'container');
- window.__CONTAINER_HOST = shindig.container.util.parseOrigin(
- document.location.href);
+ var scriptUri = getLastScriptUri();
+ if (scriptUri) {
+ window.__API_HOST = scriptUri.getOrigin();
+ window.__CONTAINER = scriptUri.getQP('container');
}
+ window.__CONTAINER_HOST = shindig.uri(document.location.href).getOrigin();
}
- function getLastScriptSrc() {
+ function getLastScriptUri() {
var scriptEls = document.getElementsByTagName('script');
return (scriptEls.length > 0)
- ? scriptEls[scriptEls.length - 1].src
+ ? shindig.uri(scriptEls[scriptEls.length - 1].src)
: null;
}
Modified: shindig/trunk/features/src/main/javascript/features/container/util.js
URL: http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/container/util.js?rev=980622&r1=980621&r2=980622&view=diff
==============================================================================
--- shindig/trunk/features/src/main/javascript/features/container/util.js (original)
+++ shindig/trunk/features/src/main/javascript/features/container/util.js Fri Jul 30 00:50:21 2010
@@ -35,42 +35,6 @@ shindig.container.util = {};
/**
- * Extract protocol and domain of container page. Valid values:
- * http://www.cnn.com, chrome-extension://www.cnn.com
- * @param {string} uri The URL to extract protocol and domain from.
- * @return {string} The protocol and domain of container page.
- */
-shindig.container.util.parseOrigin = function(uri) {
- var indexAtStartOfAuthority = uri.indexOf('//') + 2;
- var indexAtEndOfAuthority = uri.indexOf('/', indexAtStartOfAuthority);
- return uri.substring(0, indexAtEndOfAuthority);
-};
-
-
-/**
- * Extract path of a URL.
- * @param {string} uri The URL to extract path from.
- * @return {string} The path in URL.
- */
-shindig.container.util.parsePath = function(uri) {
- var match = uri.match(new RegExp("//[^/]+(/[^?#]*)"));
- return match ? match[1] : null;
-};
-
-
-/**
- * Extract the parameter value in path with name paramName.
- * @param {string} path The path to extract parameter from.
- * @param {string} paramName The name of parameter to exact value from.
- * @return {string} The value of the parameter. Null otherwise.
- */
-shindig.container.util.getParamValue = function(path, paramName) {
- var match = path.match(new RegExp("[?&]" + paramName + "=([^&#]+)"));
- return match ? match[1] : null;
-};
-
-
-/**
* Return value of json at key, if valid. Otherwise, return defaultValue.
* @param {Object} json The JSON to look up key param from.
* @param {string} key Key in config.
@@ -84,63 +48,6 @@ shindig.container.util.getSafeJsonValue
/**
- * Return URI with its query/fragment parameter either:
- * - if exist, added with name=value.
- * - otherwise, replaced with name=value.
- * @param {string} uri URL to work with.
- * @param {string} name of parameter to add/replace.
- * @param {string} value of parameter to add/replace.
- * @return {string}
- */
-shindig.container.util.updateQueryParam = function(uri, name, value) {
- var fragmentString = '';
- var fragmentIndex = uri.indexOf('#');
- if (fragmentIndex >= 0) {
- fragmentString = uri.substring(fragmentIndex);
- uri = uri.substring(0, fragmentIndex);
- }
-
- var re = new RegExp('([&?])' + name + '[^&]*');
- if (uri.match(re)) {
- uri = uri.replace(re, '$1' + encodeURIComponent(name) + '=' +
- encodeURIComponent(value));
- } else {
- uri = shindig.container.util.addQueryParam(uri, name, value);
- }
- return uri + fragmentString;
-};
-
-
-/**
- * Adds a hash parameter to a URI.
- * @param {string} uri The URI.
- * @param {string} key The param key.
- * @param {string} value The param value.
- * @return {string} The new URI.
- */
-shindig.container.util.addFragmentParam = function(uri, key, value) {
- return uri + ((uri.indexOf('#') == -1) ? '#' : '&')
- + encodeURIComponent(key) + '=' + encodeURIComponent(value);
-};
-
-
-/**
- * Adds a query parameter to a URI.
- * @param {string} uri The URI.
- * @param {string} key The param key.
- * @param {string} value The param value.
- * @return {string} The new URI.
- */
-shindig.container.util.addQueryParam = function(uri, key, value) {
- var hasQuery = uri.indexOf('?') != -1;
- var insertPos = (uri.indexOf('#') != -1) ? uri.indexOf('#') : uri.length;
- return uri.substring(0, insertPos) + (hasQuery ? '&' : '?') +
- encodeURIComponent(key) + '=' + encodeURIComponent(value) +
- uri.substring(insertPos);
-};
-
-
-/**
* Merge two JSON together. Keys in json2 will replace than in json1.
* @param {Object} json1 JSON to start merge with.
* @param {Object} json2 JSON to append/replace json1.
Modified: shindig/trunk/features/src/main/javascript/features/shindig.uri/uri.js
URL: http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/shindig.uri/uri.js?rev=980622&r1=980621&r2=980622&view=diff
==============================================================================
--- shindig/trunk/features/src/main/javascript/features/shindig.uri/uri.js (original)
+++ shindig/trunk/features/src/main/javascript/features/shindig.uri/uri.js Fri Jul 30 00:50:21 2010
@@ -100,6 +100,35 @@ shindig.uri = (function() {
return fragment_;
}
+ function getQP(key) {
+ qparms_ = qparms_ || parseParams(query_);
+ return getParam(qparms_, key);
+ }
+
+ function getFP(key) {
+ fparms_ = fparms_ || parseParams(fragment_);
+ return getParam(fparms_, key);
+ }
+
+ function setQP(argOne, argTwo) {
+ qparms_ = setParams(qparms_ || parseParams(query_), argOne, argTwo);
+ return bundle;
+ }
+
+ function setFP(argOne, argTwo) {
+ fparms_ = setParams(fparms_ || parseParams(fragment_), argOne, argTwo);
+ return bundle;
+ }
+
+ function getOrigin() {
+ return [
+ schema_,
+ schema_ !== "" ? ":" : "",
+ authority_ !== "" ? "//" : "",
+ authority_
+ ].join("");
+ }
+
/**
* Returns a readable representation of the URL.
*
@@ -109,10 +138,7 @@ shindig.uri = (function() {
var query = getQuery();
var fragment = getFragment();
return [
- schema_,
- schema_ !== "" ? ":" : "",
- authority_ !== "" ? "//" : "",
- authority_,
+ getOrigin(),
path_,
query !== "" ? "?" : "",
query,
@@ -191,17 +217,12 @@ shindig.uri = (function() {
// Getters
getSchema: function() { return schema_; },
getAuthority: function() { return authority_; },
+ getOrigin: getOrigin,
getPath: function() { return path_; },
getQuery: getQuery,
getFragment: getFragment,
- getQP: function(key) {
- qparms_ = qparms_ || parseParams(query_);
- return getParam(qparms_, key);
- },
- getFP: function(key) {
- fparms_ = fparms_ || parseParams(fragment_);
- return getParam(fparms_, key);
- },
+ getQP: getQP,
+ getFP: getFP,
// Setters
setSchema: function(schema) { schema_ = schema; return bundle; },
@@ -209,12 +230,15 @@ shindig.uri = (function() {
setPath: function(path) { path_ = (path[0] === "/" ? "" : "/") + path; return bundle; },
setQuery: function(query) { qparms_ = null; query_ = stripPrefix(query, '?'); return bundle; },
setFragment: function(fragment) { fparms_ = null; fragment_ = stripPrefix(fragment, '#'); return bundle; },
- setQP: function(argOne, argTwo) {
- qparms_ = setParams(qparms_ || parseParams(query_), argOne, argTwo);
- return bundle;
- },
- setFP: function(argOne, argTwo) {
- fparms_ = setParams(fparms_ || parseParams(fragment_), argOne, argTwo);
+ setQP: setQP,
+ setFP: setFP,
+ setExistingP: function(key, val) {
+ if (getQP(key, val) !== undefined) {
+ setQP(key, val);
+ }
+ if (getFP(key, val) !== undefined) {
+ setFP(key, val);
+ }
return bundle;
},
Modified: shindig/trunk/features/src/test/javascript/features/shindig.uri/uritest.js
URL: http://svn.apache.org/viewvc/shindig/trunk/features/src/test/javascript/features/shindig.uri/uritest.js?rev=980622&r1=980621&r2=980622&view=diff
==============================================================================
--- shindig/trunk/features/src/test/javascript/features/shindig.uri/uritest.js (original)
+++ shindig/trunk/features/src/test/javascript/features/shindig.uri/uritest.js Fri Jul 30 00:50:21 2010
@@ -35,6 +35,7 @@ ShindigUriTest.prototype.testParseFullUr
this.assertEquals("http", uri.getSchema());
this.assertEquals("www.example.com", uri.getAuthority());
+ this.assertEquals("http://www.example.com", uri.getOrigin());
this.assertEquals("/my/path", uri.getPath());
this.assertEquals("qk1=qv1&qk2=qv2", uri.getQuery());
this.assertEquals("fk1=fv1&fk2=fv2", uri.getFragment());
@@ -57,6 +58,7 @@ ShindigUriTest.prototype.testParseQueryl
this.assertEquals("http", uri.getSchema());
this.assertEquals("www.example.com", uri.getAuthority());
+ this.assertEquals("http://www.example.com", uri.getOrigin());
this.assertEquals("/my/path", uri.getPath());
this.assertEquals("fk1=fv1&fk2=fv2", uri.getFragment());
this.assertEquals("fv1", uri.getFP("fk1"));
@@ -75,6 +77,7 @@ ShindigUriTest.prototype.testParseFragme
this.assertEquals("http", uri.getSchema());
this.assertEquals("www.example.com", uri.getAuthority());
+ this.assertEquals("http://www.example.com", uri.getOrigin());
this.assertEquals("/my/path", uri.getPath());
this.assertEquals("qk1=qv1&qk2=qv2", uri.getQuery());
this.assertEquals("qv1", uri.getQP("qk1"));
@@ -93,6 +96,7 @@ ShindigUriTest.prototype.testParseSchema
this.assertEquals("", uri.getSchema());
this.assertEquals("www.example.com", uri.getAuthority());
+ this.assertEquals("//www.example.com", uri.getOrigin());
this.assertEquals("/my/path", uri.getPath());
this.assertEquals("qk1=qv1&qk2=qv2", uri.getQuery());
this.assertEquals("fk1=fv1&fk2=fv2", uri.getFragment());
@@ -115,6 +119,7 @@ ShindigUriTest.prototype.testParseAuthor
this.assertEquals("", uri.getSchema());
this.assertEquals("", uri.getAuthority());
+ this.assertEquals("", uri.getOrigin());
this.assertEquals("/my/path", uri.getPath());
this.assertEquals("qk1=qv1&qk2=qv2", uri.getQuery());
this.assertEquals("fk1=fv1&fk2=fv2", uri.getFragment());
@@ -137,6 +142,7 @@ ShindigUriTest.prototype.testParsePathle
this.assertEquals("http", uri.getSchema());
this.assertEquals("www.example.com", uri.getAuthority());
+ this.assertEquals("http://www.example.com", uri.getOrigin());
this.assertEquals("qk1=qv1&qk2=qv2", uri.getQuery());
this.assertEquals("fk1=fv1&fk2=fv2", uri.getFragment());
this.assertEquals("qv1", uri.getQP("qk1"));
@@ -158,6 +164,7 @@ ShindigUriTest.prototype.testParsePathOn
this.assertEquals("", uri.getSchema());
this.assertEquals("", uri.getAuthority());
+ this.assertEquals("", uri.getOrigin());
this.assertEquals("/my/path", uri.getPath());
this.assertEquals(str, uri.toString());
@@ -316,6 +323,15 @@ ShindigUriTest.prototype.testBuildFragme
this.assertEquals("#one=one&three=three&two", uri.toString());
};
+ShindigUriTest.prototype.testReplaceExistingQuery = function() {
+ var uri = shindig.uri().setQuery("one=two")
+ .setFragment("three=four")
+ .setExistingP("one", "111")
+ .setExistingP("three", "333")
+ .setExistingP("xxx", "yyy");
+ this.assertEquals("?one=111#three=333", uri.toString());
+};
+
ShindigUriTest.prototype.testBuildWithOverrides = function() {
var uri =
shindig.uri("http://www.example.com/my/path?one=two&baz#three=four")