function removeHash() { var scrollV, scrollH, loc = window.location; if ("pushState" in history) history.pushState("", document.title, loc.pathname + loc.search); else { // Prevent scrolling by storing the page's current scroll offset scrollV = document.body.scrollTop; scrollH = document.body.scrollLeft; loc.hash = ""; // Restore the scroll offset, should be flicker free document.body.scrollTop = scrollV; document.body.scrollLeft = scrollH; } } function urlHash() { var hashIndex = document.URL.indexOf("#"); if(hashIndex > 0) return document.URL.substr(document.URL.indexOf('#')+1); return ""; }; function getHashParams() { var hashUrl = urlHash(); if(hashUrl == '') { return {}; } var pieces = hashUrl.split("&"), data = {}, i, parts; // process each query pair for (i = 0; i < pieces.length; i++) { parts = pieces[i].split("="); if (parts.length < 2) { parts.push(""); } data[decodeURIComponent(parts[0])] = decodeURIComponent(parts[1]); } return data; } function setHashParams(data) { var hashUrl = ''; Object.keys(data).forEach(function(key, index) { if(index > 0) { hashUrl = hashUrl + "&"; } hashUrl = hashUrl + key.toString() + "=" + data[key].toString(); }, data); if (hashUrl.length > 0) window.location.hash = hashUrl; else removeHash(); } function ChangeUrlHashParam(paramName, value) { var params = getHashParams(); params[paramName] = value; setHashParams(params); } function GetUrlHashParam(paramName) { var params = getHashParams(); return params[paramName]; } function DeleteUrlHashParam(paramName) { var params = getHashParams(); if(!params[paramName]) return; delete params[paramName]; setHashParams(params); } function RemoveAllUrlHashes() { var uri = window.location.toString(); if (uri.indexOf("#") > 0) { var cleanUri = uri.substring(0, uri.indexOf("#")); window.history.replaceState({}, document.title, cleanUri); } }