RYM Custom Chart Filters

cash rules everything around me

Verze ze dne 13. 06. 2014. Zobrazit nejnovější verzi.

K instalaci tototo skriptu si budete muset nainstalovat rozšíření jako Tampermonkey, Greasemonkey nebo Violentmonkey.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Violentmonkey.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Violentmonkey.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Userscripts.

You will need to install an extension such as Tampermonkey to install this script.

K instalaci tohoto skriptu si budete muset nainstalovat manažer uživatelských skriptů.

(Už mám manažer uživatelských skriptů, nechte mě ho nainstalovat!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(Už mám manažer uživatelských stylů, nechte mě ho nainstalovat!)

// ==UserScript==
// @name       RYM Custom Chart Filters
// @version     3.0
// @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
// ==/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 = '&nbsp';
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 = '&nbsp&nbsp';
label4.style.float = 'none';
newTargetBar.appendChild(label4);

var label5 = document.createElement('span');
label5.id = 'toggle_exfilter_lbl';
label5.innerHTML = 'Show excluded releases:&nbsp';
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 = '&nbsp|&nbsp';
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:&nbsp';
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 = '&nbsp|&nbsp';
label1.style.float = 'none';
newTargetBar.appendChild(label1);

var label2 = document.createElement('span');
label2.id = 'minRatings';
label2.innerHTML = 'Min # of ratings:&nbsp';
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 = '&nbsp|&nbsp';
label3.style.float = 'none';
newTargetBar.appendChild(label3);

var label4 = document.createElement('span');
label4.id = 'maxRatings';
label4.innerHTML = 'Max # of ratings:&nbsp';
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 = '&nbsp|&nbsp';
label8.style.float = 'none';
newTargetBar.appendChild(label8);

var label5 = document.createElement('span');
label5.id = 'startYear';
label5.innerHTML = 'From (year):&nbsp';
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 = '&nbsp|&nbsp';
label6.style.float = 'none';
newTargetBar.appendChild(label6);

var label7 = document.createElement('span');
label7.id = 'endYear';
label7.innerHTML = 'To (year):&nbsp';
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++) {
            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;
            }
        }
    }

    // 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';
        }
    }
}