Advertisement
Guest User

Untitled

a guest
Feb 6th, 2022
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @name     Google Groups Wiktionary Citation
  3. // @version  1
  4. // @include https://groups.google.com/*
  5. // ==/UserScript==
  6.  
  7. // Set to true if you wish to only see Usenet results in searches; by default it only highlights them as red
  8. var HIDE_NON_USENET = false;
  9.  
  10. function displayCitationGroups() {
  11.  
  12.     var textarea = document.createElement('textarea');
  13.     textarea.setAttribute('rows', 10);
  14.     textarea.setAttribute('cols', 50);
  15.  
  16.     var button = document.createElement('button');
  17.     var buttonText = document.createTextNode("[minify]");
  18.     button.appendChild(buttonText);
  19.     button.onclick = minify;
  20.  
  21.     var s = this.closest("section");
  22.  
  23.     var title = this.closest(".RBM0ic").getElementsByClassName("ThqSJd");
  24.     title = title && title[0].textContent.trim();
  25.  
  26.     var author = s.getElementsByClassName("s1f8Zd");
  27.     author = author && author[0].textContent.trim();
  28.  
  29.     var date = s.getElementsByClassName("zX2W9c");
  30.     date = date && date[0].textContent.trim();
  31.     date = date.replace(/\s+\(.*/, "");
  32.  
  33.     var passage = s.getElementsByClassName("ptW7te");
  34.     passage = passage && passage[0].innerText.replace(/^cite\b/, "").trim().replace(/\n+/g, "<br>");
  35.  
  36.     var target = window.location.href.replace(/\/m\/.*/, "/");
  37.     target += "m/" + s.getAttribute("data-doc-id");
  38.  
  39.     var group = target.match(/\/g\/(.*?)\//);
  40.     group = group && group[1]
  41.  
  42.     var citation = "{{quote-newsgroup|en" +
  43.         (target && ("\n|url=" + target) || "") +
  44.         (title && ("\n|title=" + title) || "") +
  45.         (group && ("\n|group=" + group) || "") +
  46.         (author && ("\n|author=" + author) || "") +
  47.         (date && ("\n|date=" + date) || "") +
  48.         (passage && ("\n|passage=" + passage) || "") +
  49.         "\n}}";
  50.     textarea.value = citation;
  51.  
  52.     var d = s.getElementsByClassName("ptW7te")[0];
  53.     d.prepend(button);
  54.     d.prepend(textarea);
  55.     return 0;
  56. }
  57.  
  58. function addButton() {
  59.     var d = document.getElementsByClassName("ptW7te");
  60.  
  61.     for (var i = 0; i < d.length; i++) {
  62.         if (d[i].getElementsByClassName("wikt-cite").length == 0) {
  63.             d[i].innerHTML = "<button class=\"wikt-cite\">cite</button><br>" + d[i].innerHTML;
  64.             document.getElementsByClassName("wikt-cite")[i].onclick = displayCitationGroups;
  65.         }
  66.     }
  67. }
  68.  
  69. function removeClass(c) {
  70.     while (document.getElementsByClassName(c).length != 0) {
  71.         var el = document.getElementsByClassName(c)[0];
  72.         var color = window.getComputedStyle(el).getPropertyValue("color");
  73.         el.classList.remove(c);
  74.         el.style.color = color;
  75.     }
  76. }
  77.  
  78. function highlightUsenet() {
  79.     var elements = document.getElementsByClassName("dkj3H");
  80.     for (var i = 0; i < elements.length; i++) {
  81.         var isUsenet = elements[i].textContent.trim().match(/[a-z0-9-+_]+(\.[a-z0-9-+_]+)+/);
  82.         elements[i].style.color = isUsenet && "red" || "grey";
  83.         if (HIDE_NON_USENET && !isUsenet) {
  84.             elements[i].closest(".cXEmmc").style.display = "none";
  85.         }
  86.     }
  87. }
  88.  
  89. function minify() {
  90.     var textarea = this.parentNode.getElementsByTagName('textarea')[0];
  91.     textarea.value = textarea.value.replace(/\n/g, "");
  92. }
  93.  
  94. function misc() {
  95.     removeClass("iBQX0d");
  96.     removeClass("WzoK");
  97.     highlightUsenet();
  98.     addButton();
  99. }
  100.  
  101. misc();
  102. var observer = new MutationObserver(misc);
  103. observer.observe(document.body, {
  104.     childList: true,
  105.     subtree: true,
  106.     attributes: true,
  107.     characterData: true
  108. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement