Royal Road - Toggle Show Only Unread for My Follows

Button to Toggle hiding/showing stories on my follows list that don't have unread chapters

  1. // ==UserScript==
  2. // @name Royal Road - Toggle Show Only Unread for My Follows
  3. // @namespace http://tampermonkey.net/
  4. // @version 2025-02-17
  5. // @description Button to Toggle hiding/showing stories on my follows list that don't have unread chapters
  6. // @author You
  7. // @match https://www.royalroad.com/my/follows*
  8. // @icon https://www.google.com/s2/favicons?sz=64&domain=royalroad.com
  9. // @grant GM_setValue
  10. // @grant GM_getValue
  11. // ==/UserScript==
  12.  
  13. (function() {
  14. 'use strict';
  15.  
  16. var buttonState = GM_getValue("RR-TSOUFMF-ButtonState", "off");
  17.  
  18. var button = document.createElement('a');
  19. button.innerHTML = "Show Only Unread";
  20. button.id = "btnToggleUnreadStories";
  21. button.classList.add("btn");
  22. button.classList.add("btn-circle");
  23. button.classList.add("btn-sm");
  24. button.classList.add("blue");
  25. if(buttonState=="off"){
  26. button.classList.add("btn-outline");
  27. }
  28. document.querySelector(".actions").prepend(button);
  29.  
  30. if(buttonState=="on"){
  31. toggleStories();
  32. }
  33.  
  34. $('#btnToggleUnreadStories').click(function() {
  35. toggleStories();
  36. if(buttonState == "on"){
  37. button.classList.add("btn-outline");
  38. buttonState = "off";
  39. GM_setValue("RR-TSOUFMF-ButtonState", "off");
  40. } else {
  41. button.classList.remove("btn-outline");
  42. buttonState = "on";
  43. GM_setValue("RR-TSOUFMF-ButtonState", "on");
  44. }
  45. });
  46.  
  47. function toggleStories() {
  48. var stories = document.querySelectorAll(".fiction-list-item");
  49. for (var story of stories) {var chapterButton = story.querySelector(".btn-primary"); if(chapterButton == null) {story.hidden = !story.hidden;}}
  50. }
  51. })();