Skip to content

Instantly share code, notes, and snippets.

@pasmat
Created October 12, 2020 14:08
Show Gist options
  • Save pasmat/45a39a9c97b73422a0eb8e855961d9ef to your computer and use it in GitHub Desktop.
Save pasmat/45a39a9c97b73422a0eb8e855961d9ef to your computer and use it in GitHub Desktop.
Functions to manage url parameters from JavaScript context
function parseUrlParameters(search) {
var queryParts = {};
var searchParts = search.split("&");
for (var i = 0; i < searchParts.length; i++) {
var searchPart = searchParts[i];
var whitespaceIndex = searchPart.indexOf("=");
if (whitespaceIndex !== -1) {
var key = searchPart.substring(0, whitespaceIndex);
var value = searchPart.substring(whitespaceIndex + 1);
queryParts[key] = value;
} else {
queryParts[searchPart] = false;
}
}
return queryParts;
}
function replaceUrlParameters(parameters) {
history.replaceState(null, window.title, setUrlParameter(location.href, parameters));
}
function setUrlParameter(url, parameters) {
if (!parameters) {
return url;
}
var parser = document.createElement("a");
parser.href = url;
url = "";
if (parser.protocol) {
url += parser.protocol + "//";
}
if (parser.host) {
url += parser.host;
}
if (parser.pathname) {
url += parser.pathname;
}
var queryParts = {};
if (parser.search) {
queryParts = parseUrlParameters(parser.search.substring(1));
}
var parameterKeys = Object.keys(parameters);
for (var i = 0; i < parameterKeys.length; i++) {
var parameterKey = parameterKeys[i];
let newValue = parameters[parameterKey];
if (newValue === null) {
delete queryParts[parameterKey];
} else {
queryParts[parameterKey] = newValue;
}
}
var queryPartKeys = Object.keys(queryParts);
var query = "";
for (var i = 0; i < queryPartKeys.length; i++) {
if (query.length === 0) {
query += "?";
}
if (query.length > 1) {
query += "&";
}
var queryPartKey = queryPartKeys[i];
query += queryPartKey;
if (queryParts[queryPartKey]) {
query += "=";
query += queryParts[queryPartKey];
}
}
url += query;
if (parser.hash) {
url += parser.hash;
}
return url;
}
function getUrlParameters() {
return parseUrlParameters(window.location.search.substring(1));
}
function getUrlParameter(key) {
return getUrlParameters()[key];
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment