Greasy Fork

Greasy Fork is available in English.

巴哈縮圖強化

狗才用預設縮圖= =

当前为 2019-05-20 提交的版本,查看 最新版本

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         巴哈縮圖強化
// @namespace    http://tampermonkey.net/
// @version      0.5.7
// @description  狗才用預設縮圖= =
// @author       SmallYue1
// @match        https://forum.gamer.com.tw/B.php*
// @match        https://forum.gamer.com.tw/C.php*
// @match        https://forum.gamer.com.tw/Co.php*
// @require      https://cdnjs.cloudflare.com/ajax/libs/jszip/3.2.0/jszip.js
// @require      https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/1.3.8/FileSaver.min.js
// ==/UserScript==

var Lists = [], Lists_Img = [], Lists_UnSetted = [];
var zip, img, A_Download, Count_Text;

function Find_And_Change()
{
    var Match, Popularity, User, User_LowerCase, Time, Tempt;
    Match = document.getElementsByTagName('tr');
    for(var i = 0; i < Match.length; i++)
    {
        if(Match[i].className.indexOf('b-list__head') != -1)
        {
            for(var j = Match[i].children.length-1; j >0 ; j--)
            {
                Match[i].removeChild(Match[i].children[j]);
            }
        }
        if((Match[i].className.indexOf('b-list__row') != -1) /*&& (Match[i].className.indexOf('edited') == -1)*/)
        {
            if(Match[i].children.length > 2)
            {
                Lists.push(Match[i]);
                Lists_UnSetted.push("");
                Lists_Img.push("");
            }
        }
    }

    for(i = 0; i < Lists.length; i++)
    {
        //if(Lists[i].className.indexOf('edited') == -1)
        //{
            User = Lists[i].children[2].children[1].innerText;
            User_LowerCase = User.toLowerCase();
            Time = Lists[i].children[3].children[0].innerText;
            Popularity = Lists[i].children[2].children[0].innerText
            var NodeImg = document.createElement('img');
            var Node_Div_Img = document.createElement('div');
            var Node_A_Div_Img = document.createElement('a');
            var NodeP_A_Div_Img_User_NodeTime_NodePopularity = document.createElement('p');
            var Node_Div_Img_User_NodeTime_NodePopularity = document.createElement('div');
            var NodeTime = document.createElement('p');
            var NodePopularity = document.createElement('p');
            NodeImg.setAttribute("src", "https://avatar2.bahamut.com.tw/avataruserpic/"+User_LowerCase.split("")[0]+"/"+User_LowerCase.split("")[1]+"/"+User_LowerCase+"/"+User_LowerCase+"_s.png");
            Node_Div_Img.appendChild(NodeImg);
            Node_Div_Img.setAttribute("class", "nav-member_imgbox")
            Node_A_Div_Img.appendChild(Node_Div_Img);
            Node_A_Div_Img.append(User);
            Node_A_Div_Img.setAttribute("class", "topbar_member-home")
            Node_A_Div_Img.setAttribute("href", "https://home.gamer.com.tw/homeindex.php?owner="+User);
            Node_A_Div_Img.setAttribute("target", "_blank");
            NodeTime.appendChild(document.createElement('br'));
            NodeTime.append(" "+Time);
            NodeTime.setAttribute("style", "font-size: 13px");
            NodePopularity.append("互動: "+Popularity.split("/")[0]+" 人氣:"+Popularity.split("/")[1]);
            NodePopularity.setAttribute("style", "font-size: 11px; color:gray;");
            NodeP_A_Div_Img_User_NodeTime_NodePopularity.appendChild(Node_A_Div_Img);
            NodeP_A_Div_Img_User_NodeTime_NodePopularity.appendChild(NodeTime);
            NodeP_A_Div_Img_User_NodeTime_NodePopularity.appendChild(NodePopularity);
            NodeP_A_Div_Img_User_NodeTime_NodePopularity.setAttribute("class","b-list__count__user");
            NodeP_A_Div_Img_User_NodeTime_NodePopularity.setAttribute("style","width:100%;text-align:center;vertical-align:middle;display:inline-block;");
            Node_Div_Img_User_NodeTime_NodePopularity.appendChild(NodeP_A_Div_Img_User_NodeTime_NodePopularity);
            Node_Div_Img_User_NodeTime_NodePopularity.setAttribute("class","TOP-my");

            for(j = Lists[i].children.length-1; j >1 ; j--)
            {
                Lists[i].removeChild(Lists[i].children[j]);
            }

            if((Lists[i].className.indexOf('b-imglist-item') != -1)&&(Lists[i].children[1].children.length >1))
            {
                Tempt = Lists[i].children[1].children[0].outerHTML;
                Lists[i].children[1].children[0].outerHTML = Lists[i].children[1].children[1].outerHTML;
                Lists[i].children[1].children[1].outerHTML = Tempt;
            }
            Lists[i].children[1].prepend(Node_Div_Img_User_NodeTime_NodePopularity);
            Lists[i].children[1].className="";
            if(Lists[i].className.indexOf('b-imglist-item') != -1)
            {
                Lists[i].children[1].children[1].className="";
                Lists[i].children[1].children[1].setAttribute('style','display:block;margin-top:5px');
            }
            if(Lists[i].children[1].children[1].childElementCount > 1)
            {
                Lists[i].children[1].children[1].children[1].setAttribute('style','padding:5px;padding-bottom:0px;margin-right:20px;');
            }
            if(Lists[i].children[1].childElementCount > 2)
            {
                Lists[i].children[1].children[2].setAttribute('style','margin-top:5px;margin-bottom:8px');
                if(Lists[i].children[1].children[2].children.length > 0)
                {
                    if(Lists[i].children[1].children[2].children[0].children.length > 0)
                    {
                        if(Lists[i].children[1].children[2].children[0].children[0].localName.indexOf('canvas') == -1)
                        {
                            Lists_Img[i] = Lists[i].children[1].children[2].children[0];
                        }
                        else
                        {
                            Lists[i].children[1].children[2].children[0].outerHTML = "";
                        }
                    }
                    else
                    {
                        if(Lists[i].children[1].children[2].children[0].className.indexOf('b-list__img') != -1)
                        {
                            Lists_Img[i] = Lists[i].children[1].children[2].children[0];
                        }
                    }
                }
                else
                {
                    if(Lists[i].children[1].children[2].className.indexOf('b-list__img') != -1)
                    {
                        Lists_Img[i] = Lists[i].children[1].children[2];
                    }
                }
            }
            if(Lists[i].children[0].children[2] == null)
            {
                var Node_Span = document.createElement('span');
                Node_Span.setAttribute('class','b-list__summary__gp b-gp b-gp--normal');
                Node_Span.append("0");
                Lists[i].children[0].appendChild(Node_Span);
            }
            Lists_UnSetted[i] = Node_Div_Img_User_NodeTime_NodePopularity;
        if(Lists_Img[i] != "")
        {
            if(Lists_Img[i].dataset.thumbnail.indexOf("no-img-") != -1)
            {
                Lists_Img[i].outerHTML = "";
            }
            else
            {
                if((Lists_Img[i].style.length == 0) && (Lists_Img[i].className.indexOf('skeleton') != -1))
                {
                    Lists_Img[i].style = 'background-image: url("'+Lists_Img[i].dataset.thumbnail+'");';
                    Lists_Img[i].className = 'b-list__img';
                }
                if(Lists_Img[i].dataset.thumbnail.indexOf("ytimg") != -1)
                {
                    Lists_Img[i].parentNode.removeAttribute('href');
                    Lists_Img[i].parentNode.onclick = function() {
                        this.outerHTML = '<iframe width="560" height="315" src="https://www.youtube.com/embed/'+this.children[0].dataset.thumbnail.split("/")[4]+'" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>';
                    };
                }
                else
                {
                    Lists_Img[i].parentNode.removeAttribute('href');
                    Lists_Img[i].parentNode.onclick = function() {
                        this.outerHTML = '<img style="width:80%" src="'+this.children[0].dataset.thumbnail+'">';
                    };
                }
            }
        }

        Lists_UnSetted[i].setAttribute("style","float:left;width:160px;margin-top:5px;margin-bottom:5px;padding-top:"+((Lists_UnSetted[i].parentNode.offsetHeight/2)-((Lists_UnSetted[i].offsetHeight+10)/2))+"px;");
        //Lists[i].setAttribute('class','b-list__row b-list-item b-imglist-item edited');
        //}
    }
}

async function Find_And_Download_Image()
{
    zip = new JSZip();
    zip.file(document.title.replace(/\//g,"_") +".txt", location.href);
    img = zip.folder("images");
    var Match_Imgs = document.getElementsByTagName('img');
    DownloadImage(Match_Imgs);
}

function DownloadImage(Match_Imgs)
{
    var xhr = [];
    for(var i = 0; i < Match_Imgs.length; i++)
    {
        if(((Match_Imgs[i].className.indexOf('lazyloaded') != -1) || (Match_Imgs[i].className.indexOf('lazyload') != -1)) && ((Match_Imgs[i].getAttribute("data-src").indexOf("bahamut") == -1) || ((Match_Imgs[i].getAttribute("data-src").indexOf("truth") != -1) && (Match_Imgs[i].getAttribute("data-src").indexOf("bahamut") != -1))) && (Match_Imgs[i].getAttribute("data-src").indexOf(".gif") == -1) && (Match_Imgs[i].getAttribute("data-src").indexOf(".GIF") == -1))
        {
            xhr.push(new XMLHttpRequest());
            xhr[i].open("GET", "https://cors-anywhere.herokuapp.com/"+Match_Imgs[i].getAttribute("data-src"));
            xhr[i].responseType = 'blob';
            xhr[i].onload = function () {
                let blob = this.response;
                var blobUri = window.URL.createObjectURL(blob);
                var ImgObj=new Image();
                ImgObj.src = blobUri;
                ImgObj.name = this.responseURL.split("/")[this.responseURL.split("/").length-1];
                ImgObj.onload = function()
                {
                    if(this.fileSize > 0 || (this.width > 0 && this.height > 0))
                    {
                        this.className = "";
                        Lists_Img.push(this);
                        getBase64(this).then(
                            function(base64)
                            {
                                var Count_Text = document.getElementById('Count');
                                var A_Download = document.getElementById('A_Download');
                                Count_Text.innerText = parseInt(Count_Text.innerText) + 1;
                                A_Download.innerText = "下載 "+Count_Text.innerText+" 張圖片中";
                                img.file(base64[0], base64[1].substring(22), {base64: true});
                            },function(err)
                            {
                                console.log(err);
                            });
                    }
                }
            }
            xhr[i].send(null);
        }
        else
        {
            xhr.push("");
        }
    }
    setTimeout(function(){Check(10);},1000);
}

var gg=999;

function Check(count)
{
    if(gg == parseInt(Count_Text.innerText))
    {
        if(count != 0)
        {
            count--;
            console.log(count);
            setTimeout(function(){Check(count);},1000);
        }
        else
        {
            Package();
        }
    }
    else
    {
        gg = parseInt(Count_Text.innerText);
        setTimeout(function(){Check(10);},1000);
    }

}

function Package()
{
    if(Lists_Img.length != 0)
    {
        zip.generateAsync({type:"blob",compression:"STORE"}, function updateCallback(metadata) {
            A_Download.innerText = "封裝進度: " + metadata.percent.toFixed(2) + " %";
        }).then(function(content) {
            saveAs(content, document.title.replace(/\//g,"_") + ".zip");
            A_Download.innerText = "封裝完畢";
        });
        Count_Text.setAttribute("style","visibility:hidden;");
    }
    else
    {
        A_Download.innerText = "沒有符合域名的圖片";
    }
}

function getBase64(image){
    function getBase64Image(img,width,height) {
        var canvas = document.createElement("canvas");
        canvas.width = width ? width : img.width;
        canvas.height = height ? height : img.height;
        var ctx = canvas.getContext("2d");
        ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
        var dataURL = canvas.toDataURL();
        var x = img.name;
        var RtData = [];
        RtData.push(x);
        RtData.push(dataURL);
        return RtData;
    }
    return new Promise((resolve,reject)=>{resolve(getBase64Image(image));});
}

(function() {
    'use strict';
    if(location.pathname.indexOf("B.php") != -1)
    {
        Find_And_Change();
    }
    else if((location.pathname.indexOf("C.php") != -1) || (location.pathname.indexOf("Co.php") != -1))
    {
        var Tool_Bar = document.getElementById('BH-menu-path');
        var x = document.getElementById('BH-background');
        A_Download = document.createElement('a');
        Count_Text = document.createElement('a');
        var Li_A_Download = document.createElement('li');
        Li_A_Download.appendChild(A_Download);
        A_Download.append("對優質門寶具");
        A_Download.onclick = Find_And_Download_Image;
        A_Download.setAttribute("id","A_Download");
        Count_Text.append("0");
        Count_Text.setAttribute("id","Count");
        if(Tool_Bar != null)
        {
            Tool_Bar.children[0].appendChild(Li_A_Download);
            x.appendChild(Count_Text);
        }
    }
})();