Anilist External Links

Adds external link section to Anilist manga pages, with Anime-Planet, MyAnimeList, MangaUpdates, MangaDex, and AniSearch.

  1. // ==UserScript==
  2. // @name Anilist External Links
  3. // @include http://anilist.co/manga/*
  4. // @include https://anilist.co/manga/*
  5. // @icon https://www.google.com/s2/favicons?domain=anilist.co
  6. // @grant none
  7. // @author kpossibles
  8. // @version 1.0.3
  9. // @description Adds external link section to Anilist manga pages, with Anime-Planet, MyAnimeList, MangaUpdates, MangaDex, and AniSearch.
  10. // @namespace https://greasyfork.org/users/787696
  11. // ==/UserScript==
  12.  
  13. var appendButtons = function() {
  14. var btnCont = document.createElement('div');
  15. btnCont.className = "comicInfo__btns";
  16.  
  17. // Pick class location where buttons show up
  18. document.querySelector("div.content h1").appendChild(btnCont);
  19. // Search query = title (class name search query)
  20. var title = findNative();
  21.  
  22. var searchAP = document.createElement('a')
  23. searchAP.className = "comicInfo__btnView";
  24. searchAP.style = "margin-left: 0px;flex: 0 0 auto;width: 48.7%;padding: 0px 8px;cursor: pointer;line-height: 42px;";
  25. searchAP.innerHTML = `<img src="https://www.anime-planet.com/favicon.ico" style="float:left;height:30px;margin-top:6px;margin:2px;">`;
  26. btnCont.appendChild(searchAP);
  27. searchAP.addEventListener("click", function() {open(encodeURI("https://www.anime-planet.com/manga/all?name=" + title), "")});
  28.  
  29. var searchMAL = document.createElement('a')
  30. searchMAL.className = "comicInfo__btnView";
  31. searchMAL.style = "margin-left: 0px;flex: 0 0 auto;width: 48.7%;padding: 0px 8px;cursor: pointer;line-height: 42px;";
  32. searchMAL.innerHTML = `<img src="https://myanimelist.net/favicon.ico" style="float:left;height:30px;margin-top:6px;margin:2px;">`;
  33. btnCont.appendChild(searchMAL);
  34. searchMAL.addEventListener("click", function() {open(encodeURI("https://myanimelist.net/manga.php?q=" + title+ "&cat=manga"), "")});
  35.  
  36. var searchMU = document.createElement('a')
  37. searchMU.className = "comicInfo__btnView";
  38. searchMU.style = "margin-left: 0px;flex: 0 0 auto;width: 48.7%;padding: 0px 8px;cursor: pointer;line-height: 42px;";
  39. searchMU.innerHTML = `<img src="https://www.mangaupdates.com/images/manga-updates.svg" style="float:left;height:30px;margin-top:6px;margin:2px;">`;
  40. btnCont.appendChild(searchMU);
  41. searchMU.addEventListener("click", function() {
  42. open(encodeURI("https://www.mangaupdates.com/site/search/result?search=" + title), "")
  43. });
  44.  
  45. var searchMD = document.createElement('a')
  46. searchMD.className = "comicInfo__btnView";
  47. searchMD.style = "margin-left: 0px;flex: 0 0 auto;width: 48.7%;padding: 0px 8px;cursor: pointer;line-height: 42px;";
  48. searchMD.innerHTML = `<img src="https://mangadex.org/favicon.ico" style="float:left;height:30px;margin-top:6px;margin:2px;">`;
  49. btnCont.appendChild(searchMD);
  50. searchMD.addEventListener("click", function() {open(encodeURI("https://mangadex.org/titles?q=" + title), "")});
  51.  
  52.  
  53. var searchAnisearch = document.createElement('a')
  54. searchAnisearch.className = "comicInfo__btnView";
  55. searchAnisearch.style = "margin-left: 0px;flex: 0 0 auto;width: 48.7%;padding: 0px 8px;cursor: pointer;line-height: 42px;";
  56. searchAnisearch.innerHTML = `<img src="https://www.anisearch.com/favicon.ico" style="float:left;height:30px;margin-top:6px;margin:2px;">`;
  57. btnCont.appendChild(searchAnisearch);
  58. searchAnisearch.addEventListener("click", function() {open(encodeURI("https://www.anisearch.com/manga/index?text=" + title), "")});
  59.  
  60. }
  61.  
  62. var findNative = function() {
  63. // find dataset = native, get value
  64. var elements = document.getElementsByClassName('data-set'); // get the elements
  65. var nativeTitle = "";
  66. for (var i = 0; i < elements.length; i++) {
  67. if (elements[i].getElementsByClassName('type')[0].innerText == 'Native') {
  68. nativeTitle = elements[i].getElementsByClassName('value')[0].innerText;
  69. if(!!nativeTitle){
  70. return nativeTitle;
  71. }
  72. else {
  73. //Use main title if empty
  74. return document.querySelector("div.content h1").innerText;
  75. }
  76. }
  77. }
  78. console.log("Native title not found.");
  79. return document.querySelector("div.content h1").innerText;
  80. }
  81.  
  82. var checkElems = function() {
  83. if (document.querySelector('div.content')) {
  84. setTimeout(appendButtons, 1000);
  85. } else {
  86. setTimeout(checkElems, 100);
  87. };
  88. };
  89.  
  90. checkElems();