RYM: Advanced collection view widget

custom filters for viewing music collections

  1. // ==UserScript==
  2. // @name RYM: Advanced collection view widget
  3. // @namespace https://rateyourmusic.com/~pandrew
  4. // @version 0.6
  5. // @description custom filters for viewing music collections
  6. // @match https://rateyourmusic.com/~*
  7. // @require http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js
  8. // @copyright 2014+, pandy butternubs
  9. // ==/UserScript==
  10.  
  11. widget = '<br><a id="toggle-widget" style="color: #181818;" href="javascript:void(0);">show/hide widget</a><div id="music-widget" style="text-align: left; font-size: x-small; background-color: #ffe; border: 1px solid #333; padding: 6px;">'
  12.  
  13. // rating selector
  14. widget += 'Rating: <select name="rating" style="min-width:2em;" id="ratemin" >'
  15.  
  16. ratings = '<option value="none">--</option><option value="5.0">5</option><option value="4.5">4.5</option>'
  17. ratings += '<option value="4.0">4</option><option value="3.5">3.5</option><option value="3.0">3</option>'
  18. ratings += '<option value="2.5">2.5</option><option value="2.0">2</option><option value="1.5">1.5</option>'
  19. ratings += '<option value="1.0">1</option><option value="0.5">0.5</option><option value="0.0">unrated</option></select>'
  20.  
  21. widget += ratings
  22. widget += ' to <select name="maxrating" style="min-width:2em;" id="ratemax">'
  23. widget += ratings
  24.  
  25. // ownership
  26. widget += ' | Ownership: '
  27. widget += '<select name="type" id="ownship"><option value="none">All</option><option value="oo">Owned</option>'
  28. widget += '<option value="ow">On wishlist</option><option value="on">Not Owned</option><option value="ou">Used to Own</option></select>'
  29.  
  30. // number per page
  31. widget += ' | Items per page: <input type="text" size="4" maxlength="4" id="perpage" name="q">'
  32.  
  33. // view type
  34. widget += '<br><br>View style: '
  35. widget += '<select id="viewtype"><option value="none">--</option><option value="visual">Covers only</option>'
  36. widget += '<option value="tracks">Display tracklist column</option><option value="review">Display reviews</option>'
  37. widget += '<option value="track_ratings">Display track ratings</option></select>'
  38.  
  39. // release type
  40. widget += ' | Release type: '
  41. widget += '<select id="rlstype"><option value="none">All</option><option value="typs">Album</option>'
  42. widget += '<option value="type">EP</option><option value="typc">Compilation</option><option value="typi">Single</option>'
  43. widget += '<option value="typd">Video</option><option value="typb">Bootleg</option></select>'
  44.  
  45. // search terms
  46. widget += '&nbsp;|&nbsp;Search terms: &Tab;<input type="text" size="15" id="srchquery" name="q"> &Tab;'
  47. widget += '<select id="srchtype"><option value="a">Artist</option><option value="l">Release</option>'
  48. widget += '<option value="q">Review</option><option value="g">Tag</option><option value="b">Label</option><option value="h">Genres</option><option value="relyear">Release Year</option></select>'
  49.  
  50. // end
  51. widget += '&Tab;<input type="submit" id="gobtn" value="GO>"></div><br><br>'
  52.  
  53. music_header = 'music'
  54.  
  55. // $('.bubble_header:contains("'+music_header+'")').after(widget)
  56.  
  57. $('a[href="/collection/'+document.URL.split('~')[1]+'/"]').parent().after(widget);
  58.  
  59. // https://rateyourmusic.com/collection/<username>/<options>
  60. // https://rateyourmusic.com/collection/<username>/strm_<searchtype>,<options>/<searchquery>/1
  61.  
  62. $('#toggle-widget').bind('click', function(){$('#music-widget').toggle()})
  63. $('#music-widget').toggle()
  64.  
  65. $('#gobtn').bind('click', function(){
  66. username = document.URL.split('~')[1]
  67. options = ''
  68.  
  69. if ($('#perpage').val() != '' && !isNaN($('#perpage').val())){
  70. options += ',n'+$('#perpage').val();
  71. }
  72. if ($('#rlstype').val() != 'none'){
  73. options += ','+$('#rlstype').val();
  74. }
  75. if ($('#ratemin').val() != 'none' || $('#ratemax').val() != 'none'){
  76. rating = [$('#ratemin').val(), $('#ratemax').val()]
  77. rating.sort()
  78. options += ',r'+rating[0]
  79. if (rating[1] != 'none' && rating[1] != rating[0]){
  80. options += '-'+rating[1];
  81. }
  82. }
  83. if ($('#ownship').val() != 'none'){
  84. options += ','+$('#ownship').val();
  85. }
  86.  
  87. if ($('#srchquery').val() != ''){
  88. if ($('#viewtype').val() != 'none'){
  89. viewtype = $('#viewtype').val()+',';
  90. } else {viewtype = ''}
  91.  
  92. window.location = 'https://rateyourmusic.com/collection/'+username+'/'+viewtype+'strm_'+$('#srchtype').val()+','+options+'/'+$('#srchquery').val()+'/1'
  93. } else{
  94. if ($('#viewtype').val() != 'none'){
  95. options = $('#viewtype').val() + options;
  96. }
  97. window.location = 'https://rateyourmusic.com/collection/'+username+'/'+options
  98. }
  99.  
  100. })
  101.