/** * Accepts either a URL or querystring and returns an object associating * each querystring parameter to its value. * * Returns an empty object if no querystring parameters found. */ function getUrlParams(urlOrQueryString) { if ((i = urlOrQueryString.indexOf('?')) >= 0) { const queryString = urlOrQueryString.substring(i+1); if (queryString) { return _mapUrlParams(queryString); } } return {}; } /** * Helper function for `getUrlParams()` * Builds the querystring parameter to value object map. * * @param queryString {string} - The full querystring, without the leading '?'. */ function _mapUrlParams(queryString) { return queryString .split('&') .reduce(function(urlParams, urlParam) { urlParam = urlParam.split('='); if (Number.isInteger(parseInt(urlParam[1])) && parseInt(urlParam[1]) == urlParam[1]) { urlParams[urlParam[0]] = parseInt(urlParam[1]); } else { urlParams[urlParam[0]] = decodeURI(urlParam[1]); } return urlParams; }, {}); }