80 lines
1.9 KiB
JavaScript
80 lines
1.9 KiB
JavaScript
/*jshint multistr:true */
|
|
|
|
this.recline = this.recline || {};
|
|
this.recline.Util = this.recline.Util || {};
|
|
|
|
(function(my) {
|
|
// ## Miscellaneous Utilities
|
|
|
|
var urlPathRegex = /^([^?]+)(\?.*)?/;
|
|
|
|
// Parse the Hash section of a URL into path and query string
|
|
my.parseHashUrl = function(hashUrl) {
|
|
var parsed = urlPathRegex.exec(hashUrl);
|
|
if (parsed === null) {
|
|
return {};
|
|
} else {
|
|
return {
|
|
path: parsed[1],
|
|
query: parsed[2] || ''
|
|
};
|
|
}
|
|
};
|
|
|
|
// Parse a URL query string (?xyz=abc...) into a dictionary.
|
|
my.parseQueryString = function(q) {
|
|
if (!q) {
|
|
return {};
|
|
}
|
|
var urlParams = {},
|
|
e, d = function (s) {
|
|
return unescape(s.replace(/\+/g, " "));
|
|
},
|
|
r = /([^&=]+)=?([^&]*)/g;
|
|
|
|
if (q && q.length && q[0] === '?') {
|
|
q = q.slice(1);
|
|
}
|
|
while (e = r.exec(q)) {
|
|
// TODO: have values be array as query string allow repetition of keys
|
|
urlParams[d(e[1])] = d(e[2]);
|
|
}
|
|
return urlParams;
|
|
};
|
|
|
|
// Parse the query string out of the URL hash
|
|
my.parseHashQueryString = function() {
|
|
q = my.parseHashUrl(window.location.hash).query;
|
|
return my.parseQueryString(q);
|
|
};
|
|
|
|
// Compse a Query String
|
|
my.composeQueryString = function(queryParams) {
|
|
var queryString = '?';
|
|
var items = [];
|
|
$.each(queryParams, function(key, value) {
|
|
if (typeof(value) === 'object') {
|
|
value = JSON.stringify(value);
|
|
}
|
|
items.push(key + '=' + value);
|
|
});
|
|
queryString += items.join('&');
|
|
return queryString;
|
|
};
|
|
|
|
my.getNewHashForQueryString = function(queryParams) {
|
|
var queryPart = my.composeQueryString(queryParams);
|
|
if (window.location.hash) {
|
|
// slice(1) to remove # at start
|
|
return window.location.hash.split('?')[0].slice(1) + queryPart;
|
|
} else {
|
|
return queryPart;
|
|
}
|
|
};
|
|
|
|
my.setHashQueryString = function(queryParams) {
|
|
window.location.hash = my.getNewHashForQueryString(queryParams);
|
|
};
|
|
})(this.recline.Util);
|
|
|