1
Fork 0

Improve URL handling when clicking on a menu link while being on the search results and overall

This commit is contained in:
Guillaume Gomez 2021-01-25 13:21:12 +01:00
parent ef3127dcdf
commit 09518db73e

View file

@ -94,6 +94,11 @@ function getThemePickerElement() {
return document.getElementById("theme-picker"); return document.getElementById("theme-picker");
} }
// Returns the current URL without any query parameter or hash.
function getNakedUrl() {
return window.location.href.split("?")[0].split("#")[0];
}
// Sets the focus on the search bar at the top of the page // Sets the focus on the search bar at the top of the page
function focusSearchBar() { function focusSearchBar() {
getSearchInput().focus(); getSearchInput().focus();
@ -255,7 +260,9 @@ function defocusSearchBar() {
hideSearchResults(search); hideSearchResults(search);
var hash = ev.newURL.slice(ev.newURL.indexOf("#") + 1); var hash = ev.newURL.slice(ev.newURL.indexOf("#") + 1);
if (browserSupportsHistoryApi()) { if (browserSupportsHistoryApi()) {
history.replaceState(hash, "", "?search=#" + hash); // `window.location.search`` contains all the query parameters, not just `search`.
history.replaceState(hash, "",
getNakedUrl() + window.location.search + "#" + hash);
} }
elem = document.getElementById(hash); elem = document.getElementById(hash);
if (elem) { if (elem) {
@ -1813,10 +1820,12 @@ function defocusSearchBar() {
// Because searching is incremental by character, only the most // Because searching is incremental by character, only the most
// recent search query is added to the browser history. // recent search query is added to the browser history.
if (browserSupportsHistoryApi()) { if (browserSupportsHistoryApi()) {
var newURL = getNakedUrl() + "?search=" + encodeURIComponent(query.raw) +
window.location.hash;
if (!history.state && !params.search) { if (!history.state && !params.search) {
history.pushState(query, "", "?search=" + encodeURIComponent(query.raw)); history.pushState(query, "", newURL);
} else { } else {
history.replaceState(query, "", "?search=" + encodeURIComponent(query.raw)); history.replaceState(query, "", newURL);
} }
} }
@ -1926,7 +1935,7 @@ function defocusSearchBar() {
if (search_input.value.length === 0) { if (search_input.value.length === 0) {
if (browserSupportsHistoryApi()) { if (browserSupportsHistoryApi()) {
history.replaceState("", window.currentCrate + " - Rust", history.replaceState("", window.currentCrate + " - Rust",
window.location.href.split("?")[0]); getNakedUrl() + window.location.hash);
} }
hideSearchResults(); hideSearchResults();
} else { } else {
@ -2786,9 +2795,9 @@ function defocusSearchBar() {
if (search_input.value !== "" && hasClass(search, "hidden")) { if (search_input.value !== "" && hasClass(search, "hidden")) {
showSearchResults(search); showSearchResults(search);
if (browserSupportsHistoryApi()) { if (browserSupportsHistoryApi()) {
history.replaceState(search_input.value, var extra = "?search=" + encodeURIComponent(search_input.value);
"", history.replaceState(search_input.value, "",
"?search=" + encodeURIComponent(search_input.value)); getNakedUrl() + extra + window.location.hash);
} }
document.title = searchTitle; document.title = searchTitle;
} }