RYM Custom Chart Filters

cash rules everything around me

13.06.2014 itibariyledir. En son verisyonu görün.

Bu betiği kurabilmeniz için Tampermonkey, Greasemonkey ya da Violentmonkey gibi bir kullanıcı betiği eklentisini kurmanız gerekmektedir.

Bu betiği kurabilmeniz için Tampermonkey ya da Violentmonkey gibi bir kullanıcı betiği eklentisini kurmanız gerekmektedir.

Bu betiği kurabilmeniz için Tampermonkey ya da Violentmonkey gibi bir kullanıcı betiği eklentisini kurmanız gerekmektedir.

Bu betiği kurabilmeniz için Tampermonkey ya da Userscripts gibi bir kullanıcı betiği eklentisini kurmanız gerekmektedir.

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

Bu komut dosyasını yüklemek için bir kullanıcı komut dosyası yöneticisi uzantısı yüklemeniz gerekecek.

(Zaten bir kullanıcı komut dosyası yöneticim var, kurmama izin verin!)

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.

(Zateb bir user-style yöneticim var, yükleyeyim!)

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