// ==UserScript== // @name RYM Custom Chart Filters // @version 3.1 // @description cash rules everything around me // @match http://rateyourmusic.com/customchart* // @match https://rateyourmusic.com/customchart* // @copyright 2012+, quiapz // @namespace https://greasyfork.org/users/2625 // @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 endYear = 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 = ''; } var label4 = document.createElement('span'); label4.innerHTML = '  '; label4.style.float = 'none'; newTargetBar.appendChild(label4); var label5 = document.createElement('span'); label5.id = 'toggle_exfilter_lbl'; label5.innerHTML = 'Show excluded releases: '; label5.style.float = 'none'; newTargetBar.appendChild(label5); excludeCb.type = 'checkbox'; excludeCb.id = 'excludeCbInput'; excludeCb.style.float = 'none'; excludeCb.style.verticalAlign = '-3px'; excludeCb.addEventListener('click', filterChart, false); newTargetBar.appendChild(excludeCb); var label3 = document.createElement('span'); label3.innerHTML = ' | '; label3.style.float = 'none'; newTargetBar.appendChild(label3); var label = document.createElement('span'); label.id = 'toggle_gfilter_lbl'; label.innerHTML = 'Display releases with ALL genres specified: '; label.style.float = 'none'; newTargetBar.appendChild(label); genreCb.type = 'checkbox'; genreCb.id = 'genreCbInput'; genreCb.style.float = 'none'; genreCb.style.verticalAlign = '-3px'; genreCb.addEventListener('click', filterChart, false); newTargetBar.appendChild(genreCb); var label1 = document.createElement('span'); label1.innerHTML = ' | '; label1.style.float = 'none'; newTargetBar.appendChild(label1); var label2 = document.createElement('span'); label2.id = 'minRatings'; label2.innerHTML = 'Min # of ratings: '; label2.style.float = 'none'; newTargetBar.appendChild(label2); minRatings.type = 'text'; minRatings.id = 'minRatingsInput'; minRatings.size = 7; minRatings.maxLength = 7; minRatings.style.float = 'none'; minRatings.style.height = '10px'; minRatings.style.fontSize = '10px'; minRatings.addEventListener('change', filterChart, false); newTargetBar.appendChild(minRatings); var label3 = document.createElement('span'); label3.innerHTML = ' | '; label3.style.float = 'none'; newTargetBar.appendChild(label3); var label4 = document.createElement('span'); label4.id = 'maxRatings'; label4.innerHTML = 'Max # of ratings: '; label4.style.float = 'none'; newTargetBar.appendChild(label4); maxRatings.type = 'text'; maxRatings.id = 'maxRatingsInput'; maxRatings.size = 7; maxRatings.maxLength = 7; maxRatings.style.float = 'none'; maxRatings.style.height = '10px'; maxRatings.style.fontSize = '10px'; maxRatings.addEventListener('change', filterChart, false); newTargetBar.appendChild(maxRatings); /////start var label8 = document.createElement('span'); label8.innerHTML = ' | '; label8.style.float = 'none'; newTargetBar.appendChild(label8); var label5 = document.createElement('span'); label5.id = 'startYear'; label5.innerHTML = 'From (year): '; label5.style.float = 'none'; newTargetBar.appendChild(label5); startYear.type = 'text'; startYear.id = 'startYearInput'; startYear.size = 4; startYear.maxLength = 4; startYear.style.float = 'none'; startYear.style.height = '10px'; startYear.style.fontSize = '10px'; startYear.addEventListener('change', filterChart, false); newTargetBar.appendChild(startYear); var label6 = document.createElement('span'); label6.innerHTML = ' | '; label6.style.float = 'none'; newTargetBar.appendChild(label6); var label7 = document.createElement('span'); label7.id = 'endYear'; label7.innerHTML = 'To (year): '; label7.style.float = 'none'; newTargetBar.appendChild(label7); endYear.type = 'text'; endYear.id = 'endYearInput'; endYear.size = 4; endYear.maxLength = 4; endYear.style.float = 'none'; endYear.style.height = '10px'; endYear.style.fontSize = '10px'; endYear.addEventListener('change', filterChart, false); newTargetBar.appendChild(endYear); /////end function filterChart() { var minRatingsNum = (document.getElementById("minRatingsInput")).value; var maxRatingsNum = (document.getElementById("maxRatingsInput")).value; var genreCbVal = (document.getElementById("genreCbInput")).checked; var excludeCbVal = (document.getElementById("excludeCbInput")).checked; var startYearNum = (document.getElementById("startYearInput")).value; var endYearNum = (document.getElementById("endYearInput")).value; // year filter if (!(startYearNum == "") || !(endYearNum == "")) { startYearNum = parseInt(startYearNum); endYearNum = parseInt(endYearNum); if (isNaN(startYearNum)) { startYearNum = 0; } if (isNaN(endYearNum)) { endYearNum = Number.MAX_VALUE; } var albumList = document.getElementsByClassName("mbgen"); var album = albumList[0].getElementsByTagName("tr"); var yearArray = []; for (i = 0; i < album.length; i++) { var albumYear = parseInt((((album[i].getElementsByClassName("mediumg")[0]).innerHTML).replace(/[()]/g, ''))); if ((albumYear < startYearNum) || (albumYear > endYearNum)) { yearArray[i] = 0; } else { yearArray[i] = 1; } } } // ratings filter if (!(minRatingsNum == "") || !(maxRatingsNum == "")) { minRatingsNum = parseInt(minRatingsNum); maxRatingsNum = parseInt(maxRatingsNum); if (isNaN(minRatingsNum)) { minRatingsNum = 0; } if (isNaN(maxRatingsNum)) { maxRatingsNum = Number.MAX_VALUE; } var albumList = document.getElementsByClassName("mbgen"); var album = albumList[0].getElementsByTagName("tr"); var ratingsArray = []; for (i = 0; i < album.length; i++) { try{ var albumRatings = parseInt(((album[i].getElementsByTagName("b")[1].textContent.replace(/,/g, "")))); //var albumRatings = parseInt(((album[i].getElementsByTagName("td")[2]).getElementsByTagName("div")[1]).getElementsByTagName("a")[0].getElementsByTagName("b")[1].textContent.replace(/,/g, "")); if ((albumRatings < minRatingsNum) || (albumRatings > maxRatingsNum)) { ratingsArray[i] = 0; } else { ratingsArray[i] = 1; } }catch(err){} } } // genre filter var genres = (document.getElementById("genres")).value; var genre = genres.split(","); for (i = 0; i < genre.length; i++) { genre[i] = genre[i].trim(); } var albumList = document.getElementsByClassName("mbgen"); var album = albumList[0].getElementsByTagName("tr"); var genreMatchArray = []; for (i = 0; i < album.length; i++) { var albumGenre = ((album[i].getElementsByTagName("td")[2]).getElementsByTagName("div")[0]).getElementsByClassName("genre"); var matches = 0; for (j = 0; j < albumGenre.length; j++) { for (k = 0; k < genre.length; k++) { if (genre[k].toUpperCase() == albumGenre[j].textContent.toUpperCase()) { matches++; } } } if (matches != genre.length) { genreMatchArray[i] = 0; } else { genreMatchArray[i] = 1; } } // determine whether to display albums based on filters for (i = 0; i < album.length; i++) { var albumId = album[i].getElementsByClassName("album")[0].getAttribute('title'); if (((genreCbVal && genreMatchArray[i] == 0) || ((!(minRatingsNum == "") || !(maxRatingsNum == "")) && (ratingsArray[i] == 0)) || ((!(startYearNum == "") || !(endYearNum == "")) && (yearArray[i] == 0)) || ((albumsRemove.indexOf(albumId) >= 0) && (!excludeCbVal)))) { album[i].style.display = "none"; } else { album[i].style.display = ""; } } } 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'; } } }