ao3 crossover savior

hide works with too many fandoms on the AO3

  1. // ==UserScript==
  2. // @name ao3 crossover savior
  3. // @description hide works with too many fandoms on the AO3
  4. // @namespace ao3
  5. // @include http*://archiveofourown.org/*
  6. // @grant none
  7. // @version 1.0
  8. // ==/UserScript==
  9.  
  10.  
  11. /**** CONFIG ********************/
  12. window.ao3XoverConfig = {
  13. maxFandoms: 2,
  14. // set to the maximum number of fandoms per work you want to see
  15. };
  16. /********************************/
  17.  
  18. (function($) {
  19.  
  20. var works = $('li.blurb');
  21. if (!works[0]) return;
  22.  
  23. var toggleClass = 'ao3-xover-hide-toggle',
  24. fold = $('<p>').addClass('fold').append(
  25. $('<span>').addClass(toggleClass).text('This work is hidden! '),
  26. $('<span>').addClass(toggleClass).html('This work was hidden. ').hide(),
  27. $('<span>').addClass('reason'),
  28. $('<span>').addClass('actions').append(
  29. $('<a>').addClass('action').css({
  30. 'position': 'absolute',
  31. 'right': 8,
  32. 'top': 10
  33. }).text('Unhide')
  34. )
  35. ),
  36. bl = window.ao3XoverConfig,
  37. shouldBlacklist = function(work) {
  38. var fandoms = work.find('.fandoms').find('a.tag');
  39. if (fandoms.length > bl.maxFandoms) {
  40. return fandoms.length;
  41. }
  42. },
  43. blacklist = function(work, reason) {
  44. var cut = $('<div>').addClass('cut').html(work.html()),
  45. reason = '(Too many fandoms: ' + reason +')',
  46. thisFold = fold.clone(),
  47. reasonContainer = thisFold.find('.reason');
  48.  
  49. reasonContainer.html(reason);
  50.  
  51. work.empty().append(thisFold, cut.hide());
  52. work.find('a.action').click(function() {
  53. var fold = $(this).closest('.fold'),
  54. cut = fold.next('.cut');
  55.  
  56. cut.add(fold.children('.'+toggleClass)).toggle();
  57. $(this).text(cut.is(':visible') ? 'Hide' : 'Unhide');
  58. })
  59. };
  60.  
  61. works.each(function() {
  62. var reason = shouldBlacklist($(this));
  63. if (reason) {
  64. blacklist($(this), reason)
  65. }
  66. });
  67.  
  68. })(window.jQuery);