// ==UserScript== // @name 巴哈縮圖強化 // @namespace http://tampermonkey.net/ // @version 0.6.21 // @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 // @downloadURL none // ==/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 = ''; }; } else { Lists_Img[i].parentNode.removeAttribute('href'); Lists_Img[i].parentNode.onclick = function() { this.outerHTML = ''; }; } } } 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.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); } } })();