Google Search Various Ranges

Add more time ranges on Google search.

目前为 2017-07-08 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name Google Search Various Ranges
  3. // @namespace knoa.jp
  4. // @description Add more time ranges on Google search.
  5. // @description Google検索の期間指定の選択肢を増やします。
  6. // @include https://www.google.*/search?*
  7. // @version 1
  8. // @grant none
  9. // ==/UserScript==
  10.  
  11. (function(){
  12. const SCRIPTNAME = 'GoogleSearchVariousRanges';
  13. console.time(SCRIPTNAME);
  14. const langs = {
  15. 'en': 0,
  16. 'ja': 1,
  17. };
  18. const ranges= {
  19. qdr_h: {
  20. h: ['Past hour', '1 時間以内'],
  21. h2: ['Past 2 hours', '2 時間以内'],
  22. h12:['Past 12 hours', '12 時間以内'],
  23. },
  24. qdr_d: {
  25. d: ['Past day', '1 日以内'],
  26. d2: ['Past 2 days', '2 日以内'],
  27. d3: ['Past 3 days', '3 日以内'],
  28. },
  29. qdr_w: {
  30. w: ['Past week', '1 週間以内'],
  31. w2: ['Past 2 weeks', '2 週間以内'],
  32. },
  33. qdr_m: {
  34. m: ['Past month', '1 か月以内'],
  35. m2: ['Past 2 months', '2 か月以内'],
  36. m6: ['Past 6 months', '6 か月以内'],
  37. },
  38. qdr_y: {
  39. y: ['Past year', '1 年以内'],
  40. y2: ['Past 2 years', '2 年以内'],
  41. y5: ['Past 5 years', '5 年以内'],
  42. },
  43. };
  44. window.addEventListener('load', setTimeout.bind(null, function(){
  45. /* Rebuild Ranges */
  46. let lang = document.documentElement.lang;
  47. let lindex = (lang in langs) ? langs[lang] : langs[lang.split('-')[0]] || 0;
  48. let lis = document.querySelectorAll('#hdtb li[id^="qdr_"]');
  49. let tpl = document.querySelector('#hdtb li[id^="qdr_"] a[href*="tbs=qdr:"]');
  50. for(let i=1; lis[i]; i++){
  51. if(ranges[lis[i].id]){
  52. lis[i].innerHTML = '';
  53. for(let range in ranges[lis[i].id]){
  54. let node = tpl.cloneNode(true);
  55. node.href = node.href.replace(/(tbs=qdr:)[a-z]/, '$1' + range);
  56. node.textContent = ranges[lis[i].id][range][lindex];
  57. lis[i].appendChild(node);
  58. }
  59. }else{
  60. lis[i].style.display = 'none';
  61. }
  62. }
  63. /* Selected Checkmark */
  64. let sel = document.querySelector('#hdtb li[id^="qdr_"].hdtbSel');
  65. if(sel && sel.id !== 'qdr_'){
  66. let qdr = sel.id.split('_')[1];
  67. let a = document.querySelector('#hdtb li[id^="qdr_"] a[href*="tbs=qdr:' + qdr + '&"]');
  68. if(a) a.classList.add('hdtbSel');
  69. sel.classList.remove('hdtbSel');
  70. }
  71. }, 100));
  72. (function(css){
  73. let head = document.querySelector('head');
  74. let style = document.createElement('style');
  75. style.type = 'text/css';
  76. style.textContent = css;
  77. head.appendChild(style);
  78. })(`
  79. #hdtb li[id^="qdr_"].hdtbItm a{
  80. display: inline-block !important;
  81. width: 80px !important;
  82. padding-right: 20px !important;
  83. }
  84. `);
  85. const log = console.log.bind(null, SCRIPTNAME);
  86. console.timeEnd(SCRIPTNAME);
  87. })();