all repos — searchix @ 76ddc166b2e4739e197b84f8072716a8359df13f

Search engine for NixOS, nix-darwin, home-manager and NUR users

feat: Special handler for middle/ctrl click

Kaya
commit

76ddc166b2e4739e197b84f8072716a8359df13f

parent

6b98722a6098b85d3f913a95e3bf7b0cee29eb7b

1 file changed, 22 insertions(+), 4 deletions(-)

changed files
M frontend/static/search.jsfrontend/static/search.js
@@ -88,6 +88,7 @@ */
function addOpenDialogListeners(results) { results.querySelectorAll("a.open-dialog").forEach(function (element) { element.addEventListener("click", handleDialogOpen); + element.addEventListener("auxclick", handleDialogNewTab); }); results.querySelectorAll("a.open-sibling-dialog").forEach(function (element) { element.addEventListener("click", openSiblingDialog);
@@ -235,9 +236,7 @@ pageHistory.state.results = "";
pageHistory.push(ev.target.href); ev.preventDefault(); nav.querySelectorAll("a:not(.current)").forEach(function (node) { - const u = new URL(node.href); - u.search = ""; - node.href = u.toString(); + node.href = detailURL(node.href).toString(); }); queryInput.value = ""; });
@@ -299,11 +298,30 @@ renderDetails(new Text(error.message));
} } +function detailURL(href) { + const url = new URL(href); + url.search = ""; + return url; +} + +/** + * @param {MouseEvent} ev + */ +function handleDialogNewTab(ev) { + if (ev.button === 1) { + ev.preventDefault(); + window.open(detailURL(ev.target.href), "_blank"); + } +} + /** * @param {MouseEvent} ev */ function handleDialogOpen(ev) { - if (!(ev.ctrlKey || ev.metaKey || ev.shiftKey || ev.altKey)) { + if (ev.ctrlKey || ev.metaKey) { + ev.preventDefault(); + window.open(detailURL(ev.target.href), "_blank"); + } else if (!(ev.shiftKey || ev.altKey)) { pageHistory.pushDetail(ev.target.href); getDetail(new URL(ev.target.href)); ev.preventDefault();