// ==UserScript== // @name Google Search Various Ranges // @namespace knoa.jp // @description Add more time ranges on Google search. // @description Google検索の期間指定の選択肢を増やします。 // @include https://www.google.*/search?* // @version 1.1 // @grant none // @downloadURL none // ==/UserScript== (function(){ const SCRIPTNAME = 'GoogleSearchVariousRanges'; console.time(SCRIPTNAME); const LANGS = { 'en': 0, 'ja': 1, }; const RANGES = { qdr_h: { h: ['Past hour', '1 時間以内'], h2: ['Past 2 hours', '2 時間以内'], h12:['Past 12 hours','12 時間以内'], }, qdr_d: { d: ['Past day', '1 日以内'], d2: ['Past 2 days', '2 日以内'], d3: ['Past 3 days', '3 日以内'], }, qdr_w: { w: ['Past week', '1 週間以内'], w2: ['Past 2 weeks', '2 週間以内'], }, qdr_m: { m: ['Past month', '1 か月以内'], m2: ['Past 2 months', '2 か月以内'], m6: ['Past 6 months', '6 か月以内'], }, qdr_y: { y: ['Past year', '1 年以内'], y2: ['Past 2 years', '2 年以内'], y5: ['Past 5 years', '5 年以内'], }, }; const PERIODS = { // 'Before 2000': ['', '12/31/1999'], // 'After 2000': ['1/1/2000', ''], }; window.addEventListener('load', setTimeout.bind(null, function(){ /* Rebuild Ranges */ let lang = document.documentElement.lang; let lindex = (lang in LANGS) ? LANGS[lang] : LANGS[lang.split('-')[0]] || 0; let lis = document.querySelectorAll('#hdtb li[id^="qdr_"]'); let tpl = document.querySelector('#hdtb li[id^="qdr_"] a[href*="qdr:"]'); for(let i=1; lis[i]; i++){ if(RANGES[lis[i].id]){ lis[i].innerHTML = ''; for(let range in RANGES[lis[i].id]){ let node = tpl.cloneNode(true); node.href = node.href.replace(/(qdr:)[a-z][0-9]*/, '$1' + range); node.textContent = RANGES[lis[i].id][range][lindex]; lis[i].appendChild(node); } }else{ lis[i].style.display = 'none'; } } /* Add Custom Periods */ let cdr = document.querySelector('#cdrlnk'); for(let key in PERIODS){ let node = tpl.cloneNode(true); node.href = node.href.replace(/(qdr:)[a-z][0-9]*/, `cdr:1,cd_min:${PERIODS[key][0]},cd_max:${PERIODS[key][1]}`); node.textContent = key; cdr.parentNode.appendChild(node); } /* Selected Checkmark */ let sel = document.querySelector('#hdtb li[id*="dr_"].hdtbSel'); if(!sel || sel.id === 'qdr_'/*Any time*/) return; let a, cdruri = location.href.match(/cdr:1,cd_min:[0-9\/]*,cd_max:[0-9\/]*/); if(cdruri){/*has period*/ a = document.querySelector(`#hdtb li[id^="cdr_"] a[href*="${cdruri[0]}"]`); }else{ let qdr = sel.id.split('_')[1]; a = document.querySelector(`#hdtb li[id^="qdr_"] a[href*="qdr:${qdr}&"]`); } if(a){ a.classList.add('hdtbSel'); sel.classList.remove('hdtbSel'); } }, 100)); (function(css){ let head = document.querySelector('head'); let style = document.createElement('style'); style.type = 'text/css'; style.textContent = css; head.appendChild(style); })(` #hdtb li[id^="qdr_"].hdtbItm a, #hdtb li[id^="cdr_"].hdtbItm a{ display: inline-block !important; width: 80px !important; padding-right: 20px !important; } `); const log = console.log.bind(null, SCRIPTNAME); console.timeEnd(SCRIPTNAME); })();