JURN on Google Search

Adds a link to the open-access search tool JURN just before the "more" button, on Google Search.

  1. // ==UserScript==
  2. // @name JURN on Google Search
  3. // @description Adds a link to the open-access search tool JURN just before the "more" button, on Google Search.
  4. // @namespace https://greasyfork.org/en/scripts/368234-jurn-on-google-search
  5. // @include http*://google.*
  6. // @include http*://www.google.*
  7. // @include https://encrypted.google.*
  8. // @version 1.1
  9. // @author dhaden with thanks to sergio91pt
  10. // @license GPLv3
  11. // @grant none
  12. // ==/UserScript==
  13.  
  14. var jurnUrl = 'https://cse.google.com/cse/publicurl?cx=017986067167581999535:rnewgrysmpe#gsc.tab=0&gsc.q=';
  15. var jurnEleId = 'hdtb-us-jurn';
  16. var appendEleId = 'hdtb-msb-vis';
  17.  
  18. var createJurnElement = function() {
  19. var wrapper = document.createElement('div');
  20. wrapper.id = jurnEleId;
  21. wrapper.classList.add('hdtb-mitem');
  22. wrapper.classList.add('hdtb-imb');
  23.  
  24. var anchor = document.createElement('a');
  25. var anchorClasses = anchor.classList;
  26. anchorClasses.add('q');
  27. anchorClasses.add('qs');
  28. anchor.textContent = 'Jurn';
  29.  
  30. wrapper.appendChild(anchor);
  31. return wrapper;
  32. };
  33.  
  34. var getSearchQuery = function(href) {
  35. var results = /[\\?&]q=([^&#]*)/.exec(href);
  36. return (results) ? results[1] : '';
  37. };
  38.  
  39. var updateJurnHref = function(wrapper, jurnEle) {
  40. var otherHref = wrapper.querySelector('a').getAttribute('href');
  41. var query = getSearchQuery(otherHref);
  42. var anchor = jurnEle.firstChild;
  43. anchor.setAttribute('href', jurnUrl + query);
  44. };
  45.  
  46. var addJurnLink = function() {
  47. var wrapper = document.getElementById(appendEleId);
  48. if (wrapper) {
  49. var jurnEle = createJurnElement();
  50. updateJurnHref(wrapper, jurnEle);
  51. wrapper.appendChild(jurnEle);
  52. }
  53. };
  54.  
  55. var watchJurnLink = function() {
  56. // Whenever the query changes without changing the window href, our node
  57. // is removed, so use a MutationObserver to update and put us back.
  58. new MutationObserver(function(mutations) {
  59. var len = mutations.length;
  60. for (var i = 0; i < len; i++) {
  61. // Normally the link bar is removed then added, along
  62. // with search results, so just check additions.
  63. if (mutations[i].addedNodes) {
  64. if (!document.getElementById(jurnEleId)) {
  65. addJurnLink();
  66. }
  67. break;
  68. }
  69. }
  70. }).observe(document.body, {'childList': true, 'subtree': true});
  71. };
  72.  
  73. addJurnLink();
  74. watchJurnLink();