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-12-22 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Proxer Statistics
// @namespace    https://greasyfork.org/de/users/83349-deimos
// @version      1.11
// @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
// @run-at       document-start
// @include      http://proxer.me/*
// @include      https://proxer.me/*
// @include      http://www.proxer.me/*
// @include      https://www.proxer.me/*        
// @require      https://greasyfork.org/scripts/12981-proxer-userscript-anker/code/Proxer-Userscript-Anker.js?version=108560
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        unsafeWindow
// @history      1.1 Einbinden des Userscript Anker von Blue.Reaper
// @history      1.0 Zählen von Anime/Manga, anzeigen von Details, minimieren von Tabellen
// ==/UserScript==

var page = 0;
var hv_values = "vvvvvvvv";   //v:= visible     h:= hidden
var dn_values = "nnnnnnnn";   //d:= details     n:= no details

//############################# Einbinden des Userscript Anker #############################

document.addEventListener('DOMContentLoaded', function(event) {
    var zusatz = document.createElement("div");
    function changefunction(change) //Ist das Script aktiviert?
    {
        if(GM_getValue("proxStat",0) == 1 ) //aktiviert
        {
            if(window.location.pathname.split('/')[3] == "anime")  ///User befindet sich auf Anime Verzeichnis
            {
                page = 1;
                tableListener();
            }
            else if(window.location.pathname.split('/')[3] == "manga" ) ///User befindet sich auf Manga Verzeichnis
            {
                page = 2;
                tableListener();
            }
        }
    }
    //addAnkerMember(id, modulname, modus, changefunction, memoryName, memoryDefault, zusatz);
    addAnkerMember("proxStat_Anker","Proxer Statistics",4,changefunction,"proxStat",1,zusatz);

    var obj_tabellen = createExtAnkerCheckBox("Tabellen" , "safe_tables", "12em");
    var obj_details = createExtAnkerCheckBox("Details" , "safe_details", "12.6em");
    var obj_anzahl = createExtAnkerCheckBox("Anzahl" , "safe_number", "12.8em");
    var anleitung = createExtAnkerAnleitung("http://proxer.me/forum/anwendungen/380300-userscript-proxer-statistics");

    zusatz.appendChild(obj_tabellen);
    zusatz.appendChild(obj_details);
    zusatz.appendChild(obj_anzahl);
    zusatz.appendChild(anleitung);
});

//############################# Hauptteil #############################

//Ermitteln der Tabellenlänge und setzen der EventListener
function tableListener()
{
    var tables = document.getElementsByTagName("table");
    for(i = 0; i<tables.length;i++)
    {
        var tr = tables[i].rows;
        var l = tr.length;
        var message= ": " + (l-2); 

        if(GM_getValue("safe_number",0) == 1 ) //Anzahl wird angezeigt
            tr[0].getElementsByTagName("th")[0].innerHTML+= message;
        tr[0].addEventListener("click",action);
        tr[0].id ="tr"+(i+(page*4)-4);

        if(GM_getValue("safe_tables",0) == 1 ) //Tabellen werden minimiert
        {
            hv_values = checkCookie("hv_values",hv_values);
            if(hv_values[i+(page*4)-4]=="h")
                hide(tr);
        }
        if(GM_getValue("safe_details",0) == 1 ) //Details werden angezeigt
        {
            dn_values = checkCookie("dn_values",dn_values);
            if(dn_values[i+(page*4)-4]=="d")
                details(tr);
        }
    }
}

//Auswahl ob "hide" oder "details", setzen des neuen Cookies
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);
        setCookie("dn_values",dn_values,365);
    }
    else
    {
        hide(tr);
        setCookie("hv_values",hv_values,365);
    }
}

//Anzeigen der genaueren Details der ausgewählten Tabelle
function details(tr)
{
    var id = parseInt(tr[0].id[2]);
    var text = tr[0].getElementsByTagName("th")[0].innerHTML;

    if(text.includes("<br>")) //Details werden minimiert
    {
        text = text.slice(0,text.indexOf("<br>"));
        tr[0].getElementsByTagName("th")[0].innerHTML = text;
        dn_values = dn_values.substring(0,id) + "n" +  dn_values.substring(id+1, dn_values.length);  //erstellen eines neuen Cookies
        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(e = 2; e<l; e++)
    {
        var type = tr[e].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;
    dn_values = dn_values.substring(0,id) + "d" +  dn_values.substring(id+1, dn_values.length);  //erstellen eines neuen Cookies
}

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

    hv_values = hv_values.substring(0,id) + char +  hv_values.substring(id+1, hv_values.length); //erstellen eines neuen Cookies
    for(e = 1; e < tr.length; e++)
    {
        tr[e].style.display =visibility;
    }
}

//############################# Cookies #############################
function checkCookie(cname,ctext) 
{
    var cookie = getCookie(cname);
    if (cookie === "")  
    {
        cookie = ctext;
        setCookie(cname, 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=/";
}