From c9ffb6f734567ecb2a368d0d8786e9d1365f42b8 Mon Sep 17 00:00:00 2001 From: Hannu Hartikainen Date: Fri, 2 Apr 2021 23:59:04 +0300 Subject: [PATCH] std docs: enhance search browser history UX MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Before this change every keypress in the search field causes a browser history entry, which makes navigating back annoying. On first keypress in the search field, a new history entry is created. On subsequent keypresses, the most recent history entry is replaced. Therefore a typical history after searching and navigating to an entry might look like 1. documentation root 2. search page "print" 3. docs for `std.debug.print` Co-authored-by: Žiga Željko --- lib/std/special/docs/main.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/std/special/docs/main.js b/lib/std/special/docs/main.js index b95a93d5dd..7305add9e3 100644 --- a/lib/std/special/docs/main.js +++ b/lib/std/special/docs/main.js @@ -1844,7 +1844,13 @@ var oldHash = location.hash; var parts = oldHash.split("?"); var newPart2 = (domSearch.value === "") ? "" : ("?" + domSearch.value); - location.hash = (parts.length === 1) ? (oldHash + newPart2) : (parts[0] + newPart2); + var newHash = (oldHash === "" ? "#" : parts[0]) + newPart2; + // create a history entry only once per search + if (parts.length === 1) { + location.assign(newHash); + } else { + location.replace(newHash); + } } function getSearchTerms() { var list = curNavSearch.trim().split(/[ \r\n\t]+/);