// ==UserScript== // @name RYM Custom Chart Filters // @version 3.3 // @description adds new filters to the rym custom charts // @match http://rateyourmusic.com/customchart* // @match https://rateyourmusic.com/customchart* // @copyright 2012+, quiapz + pandrei rublev // @namespace https://greasyfork.org/users/2625 // @grant GM_getValue // @grant GM_setValue // @require http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js // @downloadURL none // ==/UserScript== // Place new elements in the custom charts to let the user filter results in various ways var contentTable = document.getElementById("content"); var targetBar = contentTable.getElementsByTagName("div")[4]; var newTargetBar = targetBar.cloneNode(true); var newClearBar = document.createElement('div'); var minRatings = document.createElement('input'); var maxRatings = document.createElement('input'); var startYear = document.createElement('input'); var genreCb = document.createElement('input'); var excludeCb = document.createElement('input'); newTargetBar.innerHTML = ' '; newTargetBar.style.textAlign = 'left'; newClearBar.setAttribute('class', 'clear'); (targetBar.parentNode).insertBefore(newTargetBar, targetBar); (targetBar.parentNode).insertBefore(newClearBar, targetBar); // get albums that are ignored var albumsRemove = GM_getValue('albumsRemoveCharts'); if (albumsRemove === undefined) { albumsRemove = ''; } notgenres = '  | '); $(newTargetBar).append('From (year): '); $(newTargetBar).append(''); document.getElementById('startYearInput').addEventListener('change', filterChart, false); $(newTargetBar).append(' | '); $(newTargetBar).append('To (year): '); $(newTargetBar).append(''); document.getElementById('endYearInput').addEventListener('change', filterChart, false); function filterChart() { var minRatingsNum = parseInt($("#minRatingsInput").val()); var maxRatingsNum = parseInt($("#maxRatingsInput").val()); var genreCbVal = (document.getElementById("genreCbInput")).checked; var excludeCbVal = (document.getElementById("excludeCbInput")).checked; var startYearNum = parseInt((document.getElementById("startYearInput")).value); var endYearNum = parseInt((document.getElementById("endYearInput")).value); var genres = $("#genres").val().split(','); var genresExcluded = $("#notgenres").val().split(','); //new start $.each($('.mbgen:eq(0)').find('tr'), function(){ var hideAlbum = false; if (!excludeCbVal && albumsRemove.length > 0){ if (albumsRemove.indexOf($(this).find('.album:eq(0)').attr('title')) > -1){hideAlbum = true;} } // year filter if (!hideAlbum && (!(startYearNum == "") || !(endYearNum === ""))) { if (isNaN(startYearNum)) {startYearNum = 0;} if (isNaN(endYearNum)) {endYearNum = Number.MAX_VALUE;} var albumYear = parseInt($(this).find('.mediumg').text().replace(/[()]/g, '')); if ((albumYear < startYearNum) || (albumYear > endYearNum)) {hideAlbum = true;} } // ratings filter if(!hideAlbum && (!(minRatingsNum === "") || !(maxRatingsNum === ""))){ if (isNaN(minRatingsNum)) {minRatingsNum = 0;} if (isNaN(maxRatingsNum)) {maxRatingsNum = Number.MAX_VALUE;} var albumRatings = parseInt($(this).find('b:eq(-2)').text()); if ((albumRatings < minRatingsNum) || (albumRatings > maxRatingsNum)) {hideAlbum = true;} } // exclude specified genres if(!hideAlbum){ for (i = 0; i < genresExcluded.length; i++) {genresExcluded[i] = genresExcluded[i].trim();} genre_plaintext = ''; $.each($(this).find('.genre'),function(){ genre_plaintext += $(this).text().toLowerCase(); if (genresExcluded.indexOf($(this).text().toLowerCase()) > -1){hideAlbum = true;} }); $.each(genresExcluded, function(){ if(this.indexOf('[') === 0){ if(genre_plaintext.indexOf(this.toLowerCase().replace(/[\[\]]/g,'')) >= 0){hideAlbum = true;} }}); } // genre include all matching filter if(!hideAlbum && genreCbVal){ for (i = 0; i < genres.length; i++) {genres[i] = genres[i].trim();} var matches = 0; $.each($(this).find('.genre'),function(){ if (genres.indexOf($(this).text().toLowerCase()) > -1){matches++;} }); if (matches != genres.length){hideAlbum = true;} } if(hideAlbum){$(this).hide();} else{$(this).show();} }); //end } function addAlbum(album) { if (albumsRemove.indexOf(album.getAttribute('title')) >= 0) { albumsRemove = albumsRemove.replace(album.getAttribute('title', ','), ''); album.nextSibling.nextSibling.innerHTML = 'x'; alert(album.innerHTML + ' has been removed from your ignore list.'); } else { albumsRemove = album.getAttribute('title') + ',' + albumsRemove; var excludeCbVal = (document.getElementById("excludeCbInput")).checked; if (!excludeCbVal) { album.parentNode.parentNode.parentNode.parentNode.style.display = "none"; } album.nextSibling.nextSibling.innerHTML = '+'; } GM_setValue('albumsRemoveCharts', albumsRemove); } var albumsRemove = GM_getValue('albumsRemoveCharts'); if (albumsRemove === undefined) { albumsRemove = ''; } var albums = document.getElementsByClassName('album'); if (albums !== undefined) { for (u = 0; u < albums.length; u++) { y = document.createElement('a'); y.innerHTML = ' '; removeButton = document.createElement('a'); removeButton.setAttribute('href', 'javascript:void(0);'); removeButton.setAttribute('class', 'smallgray'); albums[u].parentNode.insertBefore(removeButton, albums[u].nextSibling); albums[u].parentNode.insertBefore(y, albums[u].nextSibling); removeButton.addEventListener('click', (function (n) { return function (e) { e.preventDefault(); addAlbum(n); }; })(albums[u]), false); if (albumsRemove.indexOf(albums[u].getAttribute('title')) >= 0) { albums[u].parentNode.parentNode.parentNode.parentNode.style.display = "none"; removeButton.innerHTML = '+'; } else { removeButton.innerHTML = 'x'; } } } filterChart();