// ==UserScript==
// @name 巴哈縮圖強化
// @namespace http://tampermonkey.net/
// @version 0.6.22
// @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, Num_Of_Img_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(var k = Lists[i].children.length-1; k > 1; k--)
{
Lists[i].removeChild(Lists[i].children[k]);
}
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 Find_And_Download_Image()
{
zip = new JSZip();
zip.file(document.title.replace(/\//g,"_") +".url", "[InternetShortcut]\n" +"URL="+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))))
{
Num_Of_Img_Text.innerText = parseInt(Num_Of_Img_Text.innerText) + 1;
xhr.push(new XMLHttpRequest());
xhr[i].responseType = 'blob';
xhr[i].MURL = Match_Imgs[i].getAttribute("data-src");
xhr[i].onload = function () {
if(this.statusText == "OK")
{
Count_Text.innerText = parseInt(Count_Text.innerText) + 1;
A_Download.innerText = "下載 "+Count_Text.innerText+" 張圖片中";
img.file(this.responseURL.split("/")[this.responseURL.split("/").length-1],this.response);
}
};
xhr[i].onerror = function () {
console.log(this.MURL)
var xhr = new XMLHttpRequest();
xhr.responseType = 'blob';
xhr.onload = function () {
if(this.statusText == "OK")
{
Count_Text.innerText = parseInt(Count_Text.innerText) + 1;
A_Download.innerText = "下載 "+Count_Text.innerText+" 張圖片中";
img.file(this.responseURL.split("/")[this.responseURL.split("/").length-1],this.response);
}
else if(this.statusText == "Too Many Requests")
{
alert('檔案 '+this.responseURL.split("/")[this.responseURL.split("/").length-1]+' 下載失敗:過多請求,請稍後再試。');
Num_Of_Img_Text.innerText = parseInt(Num_Of_Img_Text.innerText) - 1;
}
else
{
Num_Of_Img_Text.innerText = parseInt(Num_Of_Img_Text.innerText) - 1;
}
};
xhr.open("GET", "https://cors-anywhere.herokuapp.com/"+this.MURL);
xhr.send(null);
};
xhr[i].open("GET", Match_Imgs[i].getAttribute("data-src"));
xhr[i].send(null);
}
else
{
xhr.push("");
}
}
setTimeout(function(){Check();},1000);
}
function Check()
{
if(parseInt(Num_Of_Img_Text.innerText) == parseInt(Count_Text.innerText))
{
Package();
}
else
{
setTimeout(function(){Check();},1000);
}
}
function Package()
{
if(parseInt(Count_Text.innerText) !== 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.innerText+" 張圖片";
Count_Text.setAttribute("style","visibility:hidden;");
});
}
else
{
A_Download.innerText = "沒有符合域名的圖片";
}
}
(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');
Count_Text = document.createElement('a');
Num_Of_Img_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");
Num_Of_Img_Text.append("0");
Num_Of_Img_Text.setAttribute("id","Num_Of_Img");
if(Tool_Bar !== null)
{
Tool_Bar.children[0].appendChild(Li_A_Download);
document.body.appendChild(Count_Text);
document.body.appendChild(Num_Of_Img_Text);
}
}
})();