Goodreads Plus

Add "Search MAM" button to Goodreads

当前为 2022-09-22 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Goodreads Plus
  3. // @namespace https://greasyfork.org/en/users/78880
  4. // @version 0.3.12
  5. // @description Add "Search MAM" button to Goodreads
  6. // @author Slengpung
  7. // @match https://www.goodreads.com/*
  8. // @grant none
  9. // @license MIT
  10. // ==/UserScript==
  11.  
  12. window.addEventListener("load", Greasemonkey_main, false);
  13. function Greasemonkey_main() {
  14. console.log("[G+] Tweaking Goodreads...");
  15. var page = window.location.pathname.split('/')[1];
  16. var mamSearchUrl = "";
  17. if(page === 'book'){
  18. console.log("[G+] We got a book URL");
  19. //var bookTitle = document.getElementsByClassName("Text__title1")[0].innerHTML;
  20. var bookTitle = document.getElementById("bookTitle").innerText;
  21. console.log("[G+] Book title: " + bookTitle);
  22. bookTitle = bookTitle.replace('&', '%26');
  23. bookTitle = bookTitle.replace('&', '%26');
  24. mamSearchUrl = "https://www.myanonamouse.net/tor/browse.php?tor[text]=" + bookTitle;
  25. // Add 'Search MAM' button
  26. // Old or new layout?
  27. old = document.getElementById("buyButtonContainer");
  28. if(old != null) {
  29. console.log("[G+] Old layout");
  30. var buttonBar = document.getElementById("buyButtonContainer");
  31. if (buttonBar === null || buttonBar == "null") {
  32. buttonBar = document.getElementById("asyncBuyButtonContainer");
  33. }
  34. var buttonUl = buttonBar.getElementsByTagName("ul");
  35. var mamButton = document.createElement("li");
  36. mamButton.innerHTML = '<a id="mamLink" href="' + mamSearchUrl + '" target="_blank" class="buttonBar">Search MAM</a>';
  37. mamButton.className = "Button";
  38. buttonUl[0].appendChild(mamButton);
  39. console.log("[G+] 'Search MAM' button added!");
  40. }
  41. else {
  42. console.log("[G+] New layout");
  43. var buttonBar = document.getElementsByClassName("BookActions")[0];
  44. var mamButton = document.getElementsByClassName("BookActions__button")[0].cloneNode(true);
  45. mamButton.innerHTML = '<div class="BookActions__button"><a href="' + mamSearchUrl + '">' +
  46. '<div class="Button__container Button__container--block">' +
  47. '<button type="button" class="Button Button--secondary Button--medium Button--block">' +
  48. '<span class="Button__labelItem" style="text-decoration=none">Search MAM</span></button></div></a></div>';
  49. buttonBar.appendChild(mamButton)
  50. console.log("[G+] 'Search MAM' button added!");
  51. }
  52. } else if(page === 'review'){
  53. var bookList = document.querySelectorAll('#booksBody .title div a');
  54. // Loop over all the books
  55. for(var i=0; i<bookList.length; i++){
  56. bookTitle = getBookTitle(bookList[i]);
  57. bookTitle = bookTitle.replace('&amp;', '%26');
  58. bookTitle = bookTitle.replace('&', '%26');
  59. mamSearchUrl = "https://www.myanonamouse.net/tor/browse.php?tor[text]=" + bookTitle;
  60. // Add 'Search MAM' button
  61. var newLink = document.createElement('a');
  62. var linkText = document.createTextNode('[Search MAM]');
  63. newLink.appendChild(linkText);
  64. newLink.setAttribute('href',mamSearchUrl);
  65. newLink.setAttribute('style','color:#b3b3b3;font-style:italic');
  66. bookList[i].parentNode.parentNode.appendChild(newLink);
  67. }
  68. console.log("[G+] 'Search MAM' buttons added!");
  69. }
  70. }
  71. // Grab book title (and only title) from the element
  72. function getBookTitle(el){
  73. var bookTitle = el.innerHTML.trim().split('<', 1)+'';
  74. console.log("Book title: " + bookTitle.trim());
  75. return bookTitle.trim();
  76. }