Greasy Fork

Greasy Fork is available in English.

巴哈縮圖強化

狗才用預設縮圖= =

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

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

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

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         巴哈縮圖強化
// @namespace    http://tampermonkey.net/
// @version      0.4.2
// @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 = [], imgsSrc = [], imgBase64 = [], imageSuffix = [];
var zip, img, A_Download;

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

function Scoller()
{
    var i = 0;
    window.scrollTo(0, 0);
    var scroll = setInterval(
        function()
        {
            window.scrollTo(0, i);
            i+=100;
            if(i>=document.body.scrollHeight)
            {
                clearInterval(scroll);
                setTimeout(window.scrollTo(0, 0),100);
                setTimeout(Find_And_Download_Image,100);
            }
        }
        ,100);
}

function Find_And_Download_Image()
{
    Lists_Img = [];
    imgsSrc = [];
    imgBase64 = [];
    imageSuffix = [];
    zip = new JSZip();
    zip.file(document.title +".txt", location.href);
    img = zip.folder("images");
    var Match_Imgs = document.getElementsByTagName('img');
    for(var i = 0; i < Match_Imgs.length; i++)
    {
        if((Match_Imgs[i].className.indexOf('lazyloaded') != -1) && ((Match_Imgs[i].src.indexOf("i.imgur") != -1) || (Match_Imgs[i].src.indexOf("pixiv.cat") != -1)) && (Match_Imgs[i].src.indexOf(".gif") == -1) && (Match_Imgs[i].src.indexOf(".GIF") == -1) && isHasImg(Match_Imgs[i].src))
        {
            Match_Imgs[i].className = "";
            Lists_Img.push(Match_Imgs[i]);
        }
    }
    for(i = 0; i < Lists_Img.length; i++)
    {
        var src = Lists_Img[i].getAttribute("src");
        var suffix = src.substring(src.lastIndexOf("."));
        imageSuffix.push(suffix);
        getBase64(Lists_Img[i].getAttribute("src")).then(
            function(base64)
            {
                imgBase64.push(base64.substring(22));
            },function(err)
            {
                console.log(err);
            });
    }
    tt();
}

function isHasImg(pathImg)
{
    var ImgObj=new Image();
    ImgObj.src= pathImg;
     if(ImgObj.fileSize > 0 || (ImgObj.width > 0 && ImgObj.height > 0))
     {
       return true;
     } else {
       return false;
    }
}

function tt(){
    if(Lists_Img.length != 0)
    {
        setTimeout(function(){
            A_Download.innerText = "下載圖片進度: "+imgBase64.length+"/"+Lists_Img.length;
            if(Lists_Img.length == imgBase64.length){
                for(var i = 0; i < Lists_Img.length; i++)
                {
                    img.file(i+imageSuffix[i], imgBase64[i], {base64: true});
                }
                zip.generateAsync({type:"blob",compression:"STORE"}, function updateCallback(metadata) {
                    A_Download.innerText = "封裝進度: " + metadata.percent.toFixed(2) + " %";
                }).then(function(content) {
                    saveAs(content, document.title + ".zip");
                    A_Download.innerText = "封裝完畢";
                });
            }else{
                tt();
            }
        },100);
    }
    else
    {
        A_Download.innerText = "沒有符合域名的圖片";
    }
}

function getBase64(img){
    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();
        return dataURL;
    }
    var image = new Image();
    image.crossOrigin = '';
    image.src = img;
    return new Promise((resolve,reject)=>{
        image.onload =function (){
            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');
        A_Download = document.createElement('a');
        var Li_A_Download = document.createElement('li');
        Li_A_Download.appendChild(A_Download);
        A_Download.append("對優質門寶具");
        A_Download.onclick = Scoller;
        if(Tool_Bar != null)
        {
            Tool_Bar.children[0].appendChild(Li_A_Download);
        }
    }
})();