in deltaspike/modules/jsf/impl/src/main/resources/META-INF/resources/deltaspike/windowhandler.js [529:580]
setUrlParam : function(uri, parameterName, parameterValue) {
var a = document.createElement('a');
a.href = uri;
// set empty string as value if not defined or empty
if (!parameterValue || parameterValue.replace(/^\s+|\s+$/g, '').length === 0) {
parameterValue = '';
}
// check if value is empty
if (parameterValue.length === 0) {
// both value and query string is empty (or doesn't contain the param), don't touch the url
if (a.search.length === 0 || a.search.indexOf(parameterName + "=") === -1) {
return a.href;
}
}
// query string is empty, just append our new parameter
if (a.search.length === 0) {
a.search = '?' + encodeURIComponent(parameterName) + "=" + encodeURIComponent(parameterValue);
return a.href;
}
var oldParameters = a.search.substring(1).split('&');
var newParameters = [];
newParameters.push(parameterName + "=" + encodeURIComponent(parameterValue));
// loop old parameters, remove empty ones and remove the parameter with the same name as the new one
for (var i = 0; i < oldParameters.length; i++) {
var oldParameterPair = oldParameters[i];
if (oldParameterPair.length > 0) {
var oldParameterName = oldParameterPair.split('=')[0];
var oldParameterValue = oldParameterPair.split('=')[1];
// don't add empty parameters again
if (oldParameterValue && oldParameterValue.replace(/^\s+|\s+$/g, '').length > 0) {
// skip the the old parameter if it's the same as the new parameter
if (oldParameterName !== parameterName) {
newParameters.push(oldParameterName + "=" + oldParameterValue);
}
}
}
}
// join new parameters
a.search = '?' + newParameters.join('&');
return a.href;
},