ao3 relationship savior

hide works with too many relationships on the AO3

  1. // ==UserScript==
  2. // @name ao3 relationship savior
  3. // @description hide works with too many relationships on the AO3
  4. // @namespace https://greasyfork.org/en/users/3759-locrian
  5. // @include http*://archiveofourown.org/*
  6. // @grant none
  7. // @version 1.021
  8. // ==/UserScript==
  9.  
  10.  
  11. /**** CONFIG ********************/
  12. window.ao3RelsConfig = {
  13. maxRelationships: 2,
  14. // set to the maximum number of relationships 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-rels-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.ao3RelsConfig,
  37. shouldBlacklist = function(work) {
  38. var relationships = work.find('.relationships').find('a.tag');
  39. if (relationships.length > bl.maxRelationships) {
  40. return relationships.length;
  41. }
  42. },
  43. blacklist = function(work, reason) {
  44. var cut = $('<div>').addClass('cut').html(work.html()),
  45. reason = '(Too many relationships: ' + 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);