sajari-website
Version:
Website extensions for the Sajari API. Automatically index site content, add user profiles, render search and recommendations, etc.
118 lines (106 loc) • 3.43 kB
JavaScript
var url = {
/**
* Convert a query string in to an object
*/
decodeUriArgs : function(queryStr) {
var args = {};
var a = queryStr.split('&');
for (var i in a) {
if (a.hasOwnProperty(i)) {
var b = a[i].split('=');
args[decodeURIComponent(b[0])] = decodeURIComponent(b[1]);
}
}
return args;
},
/**
* Convert an arguments object in to a query string
*/
encodeUriArgs : function(args) {
var queryParts = [];
for (var i in args) {
queryParts.push(encodeURIComponent(i)+'='+encodeURIComponent(args[i]));
}
return queryParts.join('&');
},
/**
* Merges query strings or objects into a single query string. Accepts a variable number of query string/objects
* to merge. The latter overrides the former.
*/
mergeQueryStr : function(queryStr1) {
var args = (typeof queryStr1 === 'string' ? this.decodeUriArgs(queryStr1) : queryStr1);
for (var i = 1; i < arguments.length; i++) {
if (arguments[i] !== undefined) {
var nextArgs = (typeof arguments[i] === 'string' ? this.decodeUriArgs(arguments[i]) : arguments[i]);
for (var a in nextArgs) {
args[a] = nextArgs[a];
}
}
}
return this.encodeUriArgs(args);
},
/**
* Takes an existing URL and merges additional data into the query string
*/
augmentUri : function(uri, args) {
var m = /^([^\?]+)\?(.+)+$/.exec(uri);
if (m) {
return m[1]+'?'+this.mergeQueryStr(m[2], args);
} else {
return uri+'?'+this.encodeUriArgs(args);
}
},
/**
* Append a query parameter to an existing URL string.
* Optionally put it at the start with "atStart"
*/
/*
addParameter : function(url, parameterName, parameterValue, atStart){
var replaceDuplicates = true;
var urlhash = '';
if(url.indexOf('#') > 0){
var cl = url.indexOf('#');
urlhash = url.substring(url.indexOf('#'),url.length);
} else {
urlhash = '';
var cl = url.length;
}
var sourceUrl = url.substring(0,cl);
var urlParts = sourceUrl.split("?");
var newQueryString = "";
if (urlParts.length > 1)
{
var parameters = urlParts[1].split("&");
for (var i=0; (i < parameters.length); i++)
{
var parameterParts = parameters[i].split("=");
if (!(replaceDuplicates && parameterParts[0] == parameterName))
{
if (newQueryString == "")
newQueryString = "?";
else
newQueryString += "&";
newQueryString += parameterParts[0] + "=" + (parameterParts[1]?parameterParts[1]:'');
}
}
}
if (newQueryString == "")
newQueryString = "?";
if(atStart){
newQueryString = '?'+ parameterName + "=" + parameterValue + (newQueryString.length>1?'&'+newQueryString.substring(1):'');
} else {
if (newQueryString !== "" && newQueryString != '?')
newQueryString += "&";
newQueryString += parameterName + "=" + (parameterValue?parameterValue:'');
}
return urlParts[0] + newQueryString + urlhash;
},
*/
/**
* Get a parameter from the URL
*/
getURLParameter : function(name) {
return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search)||[,""])[1].replace(/\+/g, '%20'))||null;
}
}
module.exports = url;