Quick-select from google search using numbers 1-9. Does not work on sub-results. Adds numbers for reference. Also does NOT yet work on complex results such as yt vids/twitter posts.
// ==UserScript==
// @name Google Search hotkeys
// @namespace http://tampermonkey.net/
// @version 0.2
// @description Quick-select from google search using numbers 1-9. Does not work on sub-results. Adds numbers for reference. Also does NOT yet work on complex results such as yt vids/twitter posts.
// @author You
// @include /(https?:(www\.)?\/\/)?google\.com\/search\?.*
// @run-at document-start
// @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant none
// @license MIT
// ==/UserScript==
(function() {
'use strict';
let cycleno=0;
let cycle=setInterval(update,100)
let search_dict = {}
let queue=[]
setup_listeners()
function update(){
//var startTime = performance.now()
if(cycleno==10){
clearInterval(cycle)
(()=>{
if(queue.length>0){
search_dict[queue[0]].click()
}
})()
}
cycleno+=1
let linkno=1;
let search_results = document.querySelectorAll('.g')
let gtags=[]
for(let i=0; i<search_results.length; ++i){
if(search_results[i].className=='g'){
gtags.push(search_results[i])
}
}
let htags=[]
let atags=[]
for(let i=0; i<gtags.length; ++i){
let htag=gtags[i].getElementsByTagName('h3')
if(htag.length>0){
htags.push(htag[0])
atags.push(htag[0].parentElement)
}
}
let headers=[]
for(let i=0; i<atags.length; ++i){
if(atags[i].parentNode.children.length>1){
let svgtag=atags[i].parentNode.getElementsByTagName('svg')
if(svgtag.length>0){
headers.push(atags[i])
}
}
}
let hrefs=[]
let headers2=[]
for(const header of headers){
if(hrefs.includes(header.getAttribute('href'))){
}
else{
hrefs.push(header.getAttribute('href'))
headers2.push(header)
}
}
for(const tag of headers2){
let cites=tag.getElementsByTagName('cite');
if(cites.length==1){
if(!cites[0].textContent.startsWith(linkno)){
cites[0].textContent=linkno+' '+cites[0].textContent
}
linkno++
}
}
headers2.forEach((key,i)=>{search_dict[i+1]=key})
//var endTime = performance.now()
//console.log(`Call to doSomething took ${endTime - startTime} milliseconds`)
}
function setup_listeners(){
for(let i=1; i<10; ++i){
if(document.querySelector('body')){
console.log('body found')
document.body.addEventListener('keydown',(e)=>{
if(e.key==i && document.activeElement.tagName!='INPUT'){
let index=parseInt(i)
if(search_dict.hasOwnProperty(index)){
search_dict[index].click()
}
else {
queue.push(index)
}
}
})
}
else {
console.log('body not found')
setTimeout(setup_listeners,100)
}
}
}
// Your code here...
})();