Proxer Statistics

Zählt die bereits geschauten/gelesenen Animes/Mangas und erlaubt es die Tabellen per Klick zusammenzuklappen bzw. sich mehr Details anzeigen zu lassen.

目前为 2016-11-27 提交的版本。查看 最新版本

// ==UserScript==
// @name         Proxer Statistics
// @namespace    *
// @version      1.0
// @description  Zählt die bereits geschauten/gelesenen Animes/Mangas und erlaubt es die Tabellen per Klick zusammenzuklappen bzw. sich mehr Details anzeigen zu lassen.
// @author       Deimos
// @include      http://proxer.me/*
// @include      https://proxer.me/*
// @include      http://www.proxer.me/*
// @include      https://www.proxer.me/*        
// @grant        none
// ==/UserScript==

var page = 0;
var cookie = "vvvvvvvv";   //v:= visible     h:= hidden

createObserver();
tableListener();

//Observer um auf AJAX zu reagieren
function createObserver()
{
    var target = $("#main").get(0);

    var observer = new MutationObserver(function(mutations) {
        mutations.forEach(function(mutation) {
            console.log(mutation.type);
            tableListener();
        });    
    });

    var config = { attributes: true, childList: true, characterData: true };
    
    observer.observe(target, config);
}

//Ermitteeln der Tabellenlänge und setzen der EventListener
function tableListener()
{
    var tables = $("table");
    page = getPage(tables[0].rows[0].getElementsByTagName("th")[0].innerHTML);

    if(page == 1 || page == 2)
    {
        cookie=checkCookie();
        for(i = 0; i<tables.length;i++)
        {
            var tr = tables[i].rows;
            var l = tr.length;
            var message= ": " + (l-2); 

            tr[0].getElementsByTagName("th")[0].innerHTML+= message;
            tr[0].addEventListener("click",action);
            tr[0].id ="tr"+(i+(page*4)-4);

            if(cookie[i+(page*4)-4]=="h")
                hide(tr);
        }
    }
}

//Auswahl ob "hide" oder "details"
function action(e)
{
    var tr = this.parentElement.parentElement.rows;
    var xPosition = e.clientX;
    var rect = tr[0].getBoundingClientRect();
    var width = tr[0].offsetWidth;

    if(xPosition<width/2)
        details(tr);
    else
    {
        hide(tr);
        setCookie("proxStat",cookie,365);
    }
}

//Anzeigen der genaueren Details der ausgewählten Tabelle
function details(tr)
{
    var text = tr[0].getElementsByTagName("th")[0].innerHTML;
    
    if(text.includes("<br>"))
    {
        text = text.slice(0,text.indexOf("<br>"));
        tr[0].getElementsByTagName("th")[0].innerHTML = text;
        return true;
    }

    var l = tr.length;
    var movies = 0;
    var ovas = 0;
    var animes = 0;
    var mangas = 0;
    var doujinshis = 0;
    var one_shots = 0;
    var h_mangas = 0;

    for(i = 2; i<l; i++)
    {
        var type = tr[i].getElementsByTagName("td")[2].innerHTML;
        switch(type) 
        {
            case "Movie":
                movies++;
                break;
            case "OVA":
                ovas++;
                break;
            case "Animeserie":
                animes++;
                break;
            case "Mangaserie":
                mangas++;
                break;
            case "H-Manga":
                h_mangas++;
                break;
            case "Doujinshi":
                doujinshis++;
                break;
            case "One-Shot":
                one_shots++;
                break;
        }
    }

    var message= "";
    if(animes!==0)
        message+= 		"<br> Animeserien: "+animes;
    if(movies!==0)
        message+= 		"<br> Movies: "+movies;
    if(ovas!==0)
        message+= 		"<br> OVAs: "+ovas;
    if(mangas!==0)
        message+= 		"<br> Mangaserien: "+mangas;
    if(h_mangas!==0)
        message+=		"<br> H-Mangas: "+h_mangas;
    if(doujinshis!==0)
        message+= 		"<br> Doujinshis:: "+doujinshis;
    if(one_shots!==0)
        message+= 		"<br> One-Shots: "+one_shots;

    tr[0].getElementsByTagName("th")[0].innerHTML+= message;
}

//Einklappen der ausgewählten Tabelle
function hide(tr)
{
    var id = parseInt(tr[0].id[2]);
    var visibility;
    var char;
    
    if(tr[1].style.display == "none")
    {
        visibility = "table-row";
        char = "v";
    }
    else
    {
        visibility = "none";
        char = "h";
    }

    cookie = cookie.substring(0,id) + char +  cookie.substring(id+1, cookie.length);
    for(e = 1; e < tr.length; e++)
    {
        tr[e].style.display =visibility;
    }
}

//Befindet sich der User auf seinem Manga oder Anime Verzeichnis?
function getPage(innerHTML)
{
    switch(innerHTML) 
    {
        case "Gelesen":   //Mangas
            return 1;
        case "Geschaut":  //Animes
            return 2;
        default:          //Anderes
            return 0;
    }
}


//Cookie, welcher speichert ob eine Tabelle versteckt ist, oder nicht
function checkCookie() 
{
    var cookie = getCookie("proxStat");
    if (cookie == "")  
    {
        cookie = "vvvvvvvv";
        setCookie("proxStat", cookie, 365); 
    }
    return cookie;
}
function getCookie(cname) 
{
    var name = cname + "=";
    var ca = document.cookie.split(";");
    for(var i = 0; i < ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) == ' ') {
            c = c.substring(1);
        }
        if (c.indexOf(name) == 0) {
            return c.substring(name.length, c.length);
        }
    }
    return "";
}
function setCookie(cname, cvalue, exdays)
{
    var d = new Date();
    d.setTime(d.getTime() + (exdays*24*60*60*1000));
    var expires = "expires="+d.toUTCString();
    document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}