aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeddy Wing2018-11-07 16:16:33 +0100
committerTeddy Wing2018-11-07 16:16:33 +0100
commit1674cb5f1672d28e1279cc16aecffc598d4a4122 (patch)
tree413a6f722c309b89c7cd53330b7ff8bc478a907b
downloadgithub-search-pronto-1674cb5f1672d28e1279cc16aecffc598d4a4122.tar.bz2
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.
-rw-r--r--github-search-pronto.user.js61
1 files changed, 61 insertions, 0 deletions
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 <https://www.gnu.org/licenses/>.
+
+
+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 +
+ '&amp;unscoped_q=' +
+ query
+ );
+ }
+});
+
+
+function is_visible(node) {
+ return node && node.offsetParent !== null
+}