boilerplate.js
Version:
Development Tools
148 lines (125 loc) • 5.03 kB
JavaScript
// Gets Value Of A URL Parameter
/* How To Use (if current URL is https://examplesite.com/download?filetype=pdf&name=testfile)
var filetype = getParameterByName('filetype');
var filename = getParameterByName('name');
console.log(filetype); // 'pdf'
console.log(filename); // 'testfile'
--Or provide your own url--
var filetype = getParameterByName('filetype', 'https://examplesite.com/download?filetype=pdf&name=testfile');
var filename = getParameterByName('name', 'https://examplesite.com/download?filetype=pdf&name=testfile');
console.log(filetype); // 'pdf'
console.log(filename); // 'testfile'
*/
function getParameterByName(name, url) {
if (!name && !url) return queryParamsToObject();
if ( isURL(name) ) return queryParamsToObject(name);
url = url || window.location.href;
name = name.replace(/[\[\]]/g, "\\$&");
var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2]);
}
function checkParameterByName(key, value, url) {
url = url || window.location.href;
if (!value) return checkWithoutValue(key);
try {
var result = getParameterByName(key.toLowerCase(), url);
if (value.toLowerCase() === result.toLowerCase()) {
return true;
} else {
return false;
}
} catch (error) {
return false;
}
function checkWithoutValue(key) {
if (Parameter.get()[key] === null) return false;
if (Parameter.get()[key] === undefined) return false;
return true;
}
}
function removeParameterByName(key, url) {
let replace = false;
if (!url) {
url = window.location.href;
replace = true;
}
let a = document.createElement('a');
a.href = url;
let params = queryParamsToObject(a.href);
delete params[key];
a.href = objectToQueryString(params, a.href);
if (replace) window.history.replaceState({}, null, a.href);
return a.href;
}
function setParameterByName(key, value, uri) {
if (typeof key === 'object' && !value) return objectToQueryString(key);
if (typeof key === 'object' && value) return objectToQueryString(key, value);
var re = new RegExp("([?&])" + key + "=.*?(&|#|$)", "i");
let skip = true;
if (uri) skip = false;
uri = uri || location.href;
if (value === undefined) {
if (uri.match(re)) {
skip && window.history.replaceState({}, null, uri.replace(re, '$1$2'));
return uri.replace(re, '$1$2');
} else {
skip && window.history.replaceState({}, null, uri);
return uri;
}
} else {
if (uri.match(re)) {
skip && window.history.replaceState({}, null, uri.replace(re, '$1' + key + "=" + value + '$2'));
return uri.replace(re, '$1' + key + "=" + value + '$2');
} else {
var hash = '';
if (uri.indexOf('#') !== -1) {
hash = uri.replace(/.*#/, '#');
uri = uri.replace(/#.*/, '');
}
var separator = uri.indexOf('?') !== -1 ? "&" : "?";
skip && window.history.replaceState({}, null, uri + separator + key + "=" + value + hash);
return uri + separator + key + "=" + value + hash;
}
}
}
function objectToQueryString(data, url) {
if (url) {
let a = document.createElement('a');
a.href = url;
a.search = '';
url = a.href;
Object.keys(data).forEach(key => url = setParameterByName(key, data[key], url));
return encodeURI(url);
} else {
Object.keys(data).forEach(key => setParameterByName(key, data[key]));
}
}
function queryParamsToObject(url) {
let a = document.createElement('a');
a.href = url || location.href;
let search = a.search;
var list = search.slice(1).split('&'),
result = {};
list.forEach(function(keyval) {
keyval = keyval.split('=');
var key = keyval[0];
if (/\[[0-9]*\]/.test(key) === true) {
var pkey = key.split(/\[[0-9]*\]/)[0];
if (typeof result[pkey] === 'undefined') {
result[pkey] = [];
}
result[pkey].push(decodeURIComponent(keyval[1] || ''));
} else {
result[key] = decodeURIComponent(keyval[1] || '');
}
});
return JSON.parse(JSON.stringify(result));
}
window.Parameter = {};
window.Parameter.get = (name, url) => getParameterByName(name, url);
window.Parameter.set = (key, value, uri) => setParameterByName(key, value, uri);
window.Parameter.check = (key, value = null, url = null) => checkParameterByName(key, value, url);
window.Parameter.remove = (key, url) => removeParameterByName(key, url);