From 1674cb5f1672d28e1279cc16aecffc598d4a4122 Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Wed, 7 Nov 2018 16:16:33 +0100 Subject: Add github-search-pronto.user.js User script that triggers a search within a repository immediately upon pressing enter. This used to be the normal functionality, but ever since GitHub added the search drop-down to enable a choice of search scopes, they don't let you press enter to search until the drop-down list has populated. That typically takes a second or two, which means you have to press enter again after a second in order to actually search for something. So stupid. Here we search right away unless the search drop-down is visible and has been populated. --- github-search-pronto.user.js | 61 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 github-search-pronto.user.js diff --git a/github-search-pronto.user.js b/github-search-pronto.user.js new file mode 100644 index 0000000..cf71b1c --- /dev/null +++ b/github-search-pronto.user.js @@ -0,0 +1,61 @@ +// ==UserScript== +// @name GitHub Search Pronto +// @description Search immediately inside a repository without having to wait for the drop-down +// @namespace com.teddywing +// @match https://github.com/* +// ==/UserScript== + +// Copyright (c) 2018 Teddy Wing +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + + +var search_field = document.querySelector('.js-site-search-field'); + +if (!search_field) { + return; +} + +search_field.addEventListener('keydown', function(e) { + var search_drop_down = document.querySelector('.js-jump-to-suggestions-results-container'); + var loading_spinner = search_drop_down.querySelector('[alt="Octocat Spinner Icon"]'); + + if (e.key === 'Enter' && + ( + !is_visible(search_drop_down) || + ( + is_visible(search_drop_down) && + is_visible(loading_spinner) + ) + ) + ) { + var query = search_field.value; + + // Get "https://github.com/owner/repo" + var repo_url = window.location.href.split('/').slice(0, 5).join('/') + + window.location.assign( + repo_url + + '/search?q=' + + query + + '&unscoped_q=' + + query + ); + } +}); + + +function is_visible(node) { + return node && node.offsetParent !== null +} -- cgit v1.2.3