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 提交的版本,檢視 最新版本

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

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

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

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