pxer.core.js

Pxer的核心执行文件@稳定版

このスクリプトは単体で利用できません。右のようなメタデータを含むスクリプトから、ライブラリとして読み込まれます: // @require https://update.sleazyfork.org/scripts/23945/152159/pxercorejs.js

このスクリプトの質問や評価の投稿はこちら通報はこちらへお寄せください。
'use strict';
window.afterLoad=function(fn){if(document.readyState!=='loading'){setTimeout(fn)}else{document.addEventListener('DOMContentLoaded',fn)}};window.setDefalut=function(obj,key,val){if(key in obj)return false;obj[key]=val;return true};Object.copy=function(target){var obj={};for(let key in target){var opd=Object.getOwnPropertyDescriptor(target,key);if(opd&&(!opd.writable||!opd.configurable||!opd.enumerable||opd.get||opd.set)){Object.defineProperty(obj,key,opd)}else{obj[key]=target[key]}};return obj};Promise.prototype['finally']=function(callback){return this.then(value=>Promise.resolve(callback()).then(()=>value),reason=>Promise.resolve(callback()).then(()=>{throw reason}))};XMLHttpRequest.prototype['refererSend']=function(url){var originUrl=document.URL;history.replaceState({},null,url);this.send();history.replaceState({},null,originUrl)};HTMLDocument.prototype['blinkTitle']=function(addMsg,spaceMsg){var addMsg=addMsg||'[完成] ';var spaceMsg=spaceMsg||'[  ] ';var timer=setInterval(()=>{if(this.title.indexOf(addMsg)!==-1){this.title=this.title.replace(addMsg,spaceMsg)}else if(this.title.indexOf(spaceMsg)!==-1){this.title=this.title.replace(spaceMsg,addMsg)}else{this.title=addMsg+this.title}},300);this.addOneEventListener('mousemove',()=>{clearInterval(timer);this.title=this.title.replace(spaceMsg,"").replace(addMsg,"")})};EventTarget.prototype['addOneEventListener']=function(type,listener,useCapture){var fn;this.addEventListener(type,listener,useCapture);this.addEventListener(type,fn=()=>{this.removeEventListener(type,listener,useCapture);this.removeEventListener(type,fn,useCapture);fn=null},useCapture)};~function(originAdd,originRemove){var map=new Map();EventTarget.prototype.addEventListener=function(type,listener,useCapture){let eltMap=map.get(this);if(eltMap===undefined)map.set(this,eltMap={});if(eltMap[type]===undefined)eltMap[type]=[];eltMap[type].push({listener,useCapture});return originAdd.apply(this,arguments)};EventTarget.prototype.removeEventListener=function(type,listener,useCapture){if(listener!=='*'&&type!=='*'){return originRemove.apply(this,arguments)};let eltMap=map.get(this);if(type==='*'){for(let hasType in eltMap){this.removeEventListener(hasType,'*',useCapture)};return};if(eltMap[type]===undefined)return;for(let{listener:l,useCapture:u}of eltMap[type]){originRemove.bind(this)(type,l,u)}}}(EventTarget.prototype.addEventListener,EventTarget.prototype.removeEventListener);['push','pop','shift','unshift','splice','sort','reverse'].forEach(function(method){var original=Array.prototype[method];Array.prototype[method]=function(){var result=original.apply(this,arguments);if(typeof this['Hook:change']==='function')this['Hook:change']();return result}});[DocumentFragment,HTMLDocument,Element].forEach(constructor=>{constructor.prototype.querySelectorList=function(...selector){var result;for(let i=0;i<selector.length;i++){result=this.querySelector(selector[i]);if(result!==null)return result}}});'use strict';class PxerRequest{constructor({url,html}){this.url=url;this.html=html}}class PxerPageRequest extends PxerRequest{constructor(...argn){super(...argn)}}class PxerWorksRequest extends PxerRequest{constructor({url,html,type,isMultiple,id}){super({url,html});this.type=type;this.isMultiple=isMultiple;this.id=id}}class PxerWorks{constructor({id,type,date,server,tagList,viewCount,ratedCount,scoreCount,fileFormat}){this.id=id;this.type=type;this.date=date;this.server=server;this.tagList=tagList;this.viewCount=viewCount;this.ratedCount=ratedCount;this.scoreCount=scoreCount;this.fileFormat=fileFormat}}class PxerMultipleWorks extends PxerWorks{constructor(data){super(data);this.multiple=data.multiple}};class PxerUgoiraWorks extends PxerWorks{constructor(data){super(data);this.fileFormat='zip';this.frames=data.frames}};'use strict';class PxerEvent{constructor(eventList=[]){this.eventList=eventList;this._event={};this._oneEvent={};return new Proxy(this,{get(target,property){if(property in target){return target[property]};let inEvent=target.eventList.some(item=>property&&(item===property));if(inEvent){return target.dispatch.bind(target,property)}},})}};PxerEvent.prototype.on=function(type,listener){if(!(this._checkEventType(type)&&this._checkListener(listener)))return false;this._event[type]||(this._event[type]=[]);this._event[type].push(listener);return true};PxerEvent.prototype.one=function(type,listener){if(!(this._checkEventType(type)&&this._checkListener(listener)))return false;this._oneEvent[type]||(this._oneEvent[type]=[]);this._oneEvent[type].push(listener);return true};PxerEvent.prototype.off=function(type,listener){if(!((type==='*'||this._checkEventType(type))&&(typeof listener==='undefined'||this._checkListener(listener))))return false;if(type==='*'){this._event={};this._oneEvent={};return true};if(typeof listener==='undefined'){delete this._event[type];delete this._oneEvent[type];return true};let index1=this._event[type].lastIndexOf(listener);if(index1!==-1){this._event[type].splice(index1,1)};let index2=this._oneEvent[type].lastIndexOf(listener);if(index2!==-1){this._oneEvent[type].splice(index2,1)};return true};PxerEvent.prototype.dispatch=function(type,data){if(!this._checkEventType(type))return false;if(Array.isArray(this._event[type])&&this._event[type].length!==0){this._event[type].forEach(function(item){item.call(this,data)},this)};if(Array.isArray(this._oneEvent[type])&&this._oneEvent[type].length!==0){this._oneEvent[type].forEach(function(item){item.call(this,data)},this);delete this._oneEvent[type]};return true};PxerEvent.prototype._checkEventType=function(type){let inEvent=this.eventList.some(item=>type&&(item===type));if(!inEvent){console.warn(`PxerEvent:"${type}"is not in eventList[${this.eventList}]`);return false};return true};PxerEvent.prototype._checkListener=function(listener){if(typeof listener!=='function'){console.warn(`PxerEvent:"${listener}"is not a function`);return false};return true};'use strict';class PxerPrint{constructor(){this.works;this.runtime={passWorks:[],address:[],ugoira_frames:{},taskInfo:'',};this.config={"manga_single":"max","manga_medium":"max","illust_single":"max","illust_medium":"max","ugoira_zip":"no","ugoira_frames":"no","task_inf":"yes",};this.filter={"score":0,"avg":0,"yes_and_tag":[],"yes_or_tag":[],"no_and_tag":[],"no_or_tag":[],"tagExp":null,"callback":null,}}};PxerPrint.getUgoira=function(works,{ugoira_zip}){const tpl={"max":"http://#server#.pixiv.net/img-zip-ugoira/img/#date#/#id#_ugoira1920x1080.zip","600p":"http://#server#.pixiv.net/img-zip-ugoira/img/#date#/#id#_ugoira600x600.zip",};var address=tpl[ugoira_zip];if(!address)return[];for(let key in works){address=address.replace(`#${key}#`,works[key])};return[address]};PxerPrint.getMultiple=function(works,{manga_medium,illust_medium}){const tpl={"max":"http://#server#.pixiv.net/img-original/img/#date#/#id#_p#index#.#fileFormat#","1200p":"http://#server#.pixiv.net/c/1200x1200/img-master/img/#date#/#id#_p#index#_master1200.jpg","cover_600p":"http://#server#.pixiv.net/c/600x600/img-master/img/#date#/#id#_p0_master1200.jpg",};var address=works.type==='manga'?tpl[manga_medium]:tpl[illust_medium];if(!address)return[];for(let key in works){address=address.replace(`#${key}#`,works[key])};var addressList=[];for(let i=0;i<works.multiple;i++){addressList.push(address.replace('#index#',i))};return addressList};PxerPrint.getWorks=function(works,{illust_single,manga_single}){const tpl={"max":"http://#server#.pixiv.net/img-original/img/#date#/#id#_p0.#fileFormat#","600p":"http://#server#.pixiv.net/c/600x600/img-master/img/#date#/#id#_p0_master1200.jpg",};var address=works.type==='manga'?tpl[manga_single]:tpl[illust_single];if(!address)return[];for(let key in works){address=address.replace(`#${key}#`,works[key])}return[address]};PxerPrint.prototype.queryPrint=function(){this.filterWorks().countAddress().getTaskInfo().print()};PxerPrint.prototype.print=function(){if(this.config['ugoira_frames']==="yes"){let win=window.open(document.URL,'_blank');win.document.write("/*! 这个页面是动图压缩包的动画参数,目前pxer还无法将动图压缩包打包成GIF,请寻找其他第三方软件 */\n<br /><br />");let frames=JSON.stringify(this.runtime.ugoira_frames,null,4);win.document.write("<pre>\n"+frames+"\n</pre>")};let win=window.open(document.URL,'_blank');win.document.write(this.runtime.taskInfo.replace(/\n/g,'<br />'));win.document.write(this.runtime.address.join("<br />"))};PxerPrint.prototype.getTaskInfo=function(){this.runtime.textHead||(this.runtime.textHead='');var[manga,ugoira,illust,unknow,multiple,single,works,address]=new Array(20).fill(0);for(let works of this.runtime.passWorks){switch(works.type){case'manga':manga++;break;case'ugoira':ugoira++;break;case'illust':illust++;break;default:unknow++;break};if(works instanceof PxerMultipleWorks){multiple++}else if(works instanceof PxerWorks){single++}};address=this.runtime.address.length;works=this.runtime.passWorks.length;this.runtime.taskInfo=`\
共计${works}个作品,${address}个下载地址。
其中有${illust}幅插画、${manga}幅漫画、${ugoira}幅动图。
单张图片作品有${multiple}个,多张图片的作品有${single}个。
`;return this};PxerPrint.prototype.countAddress=function(){this.runtime.address=[];for(let works of this.runtime.passWorks){switch(true){case works instanceof PxerUgoiraWorks:this.runtime.ugoira_frames[works.id]=works.frames;this.runtime.address.push(...PxerPrint.getUgoira(works,this.config));break;case works instanceof PxerMultipleWorks:this.runtime.address.push(...PxerPrint.getMultiple(works,this.config));break;case works instanceof PxerWorks:this.runtime.address.push(...PxerPrint.getWorks(works,this.config));break}};return this};PxerPrint.prototype.filterWorks=function(){this.runtime.passWorks=[];let isEmpty=function(filter){for(let key in filter){if(filter[key])return false};return true}(this.filter);if(isEmpty){this.runtime.passWorks=this.works;return this}for(let works of this.works){if(!(this.filter.score==0||isNaN(this.filter.score)||works.scoreCount>=this.filter.score))continue;if(!(this.filter['yes_and_tag'].length===0||this.filter['yes_and_tag'].every(tag=>works.tagList.indexOf(tag)!=-1)))continue;if(!(this.filter['yes_or_tag'].length===0||!this.filter['yes_or_tag'].some(tag=>works.tagList.indexOf(tag)!=-1)))continue;if(!(this.filter['no_and_tag'].length===0||!this.filter['no_and_tag'].every(tag=>works.tagList.indexOf(tag)==-1)))continue;if(!(this.filter['no_or_tag'].length===0||!this.filter['no_or_tag'].some(tag=>works.tagList.indexOf(tag)==-1)))continue;this.runtime.passWorks.push(works)};return this};'use strict';class PxerHtmlParser{constructor(config){this.config=config;this.task=null}};PxerHtmlParser.prototype['parseAll']=function(requests){var result=[];for(let request of requests){result.push(...this.parse(request))};return result};PxerHtmlParser.prototype['parse']=function(request){if(request instanceof PxerWorksRequest){this.task=request;return[this.parseWorks()]}else if(request instanceof PxerPageRequest){this.task=request;return this.parsePage()}else{return false}};PxerHtmlParser.prototype['parseWorks']=function(){var pw;for(let url in this.task.html){let data={task:this.task,dom:(new DOMParser()).parseFromString(this.task.html[url],'text/html'),url:url,pw:pw,};switch(true){case/mode=medium/.test(url):pw=PxerHtmlParser.parseMediumHtml(data);break;case/mode=big/.test(url):case/mode=manga_big/.test(url):pw=PxerHtmlParser.parseMangaBigHtml(data);break;case/mode=manga&/.test(url):pw=PxerHtmlParser.parseMangaHtml(data);break;default:console.warn(`Count not parse"${url}"`);};};return pw;};PxerHtmlParser.prototype['parsePage']=function(){var dom=(new DOMParser()).parseFromString(this.task.html,'text/html');var elts=dom.querySelectorAll('a.work._work');var taskList=[];for(let elt of elts){let task=new PxerWorksRequest({html:{},type:elt.matches('.ugoku-illust')?'ugoira':elt.matches(".manga")?'manga':"illust",isMultiple:elt.matches(".multiple"),id:elt.getAttribute('href').match(/illust_id=(\d+)/)[1]});task.url=getUrlList(task);taskList.push(task);};return taskList;function getUrlList(task,singleMangaMode){if(task.type==="ugoira"||(task.type==="illust"&&!task.isMultiple)){return["/member_illust.php?mode=medium&illust_id="+task.id];}else if(task.isMultiple){return["/member_illust.php?mode=medium&illust_id="+task.id,"/member_illust.php?mode=manga&illust_id="+task.id,"/member_illust.php?mode=manga_big&page=0&illust_id="+task.id];}else if(task.type==="manga"&&!task.isMultiple){return["http://www.pixiv.net/member_illust.php?mode=medium&illust_id="+task.id,"http://www.pixiv.net/member_illust.php?mode=big&illust_id="+task.id,];}else{console.warn('miss task '+task.id);return[];};};};PxerHtmlParser.parseMangaHtml=function({task,dom,url,pw}){var rePw=new PxerMultipleWorks(pw);rePw.multiple=+dom.querySelectorList(".page .total",".position .total").innerHTML;return rePw;};PxerHtmlParser.parseMangaBigHtml=function({task,dom,url,pw}){var rePw=new PxerMultipleWorks(pw);var src=dom.getElementsByTagName('img')[0].src;Object.assign(rePw,{server:src.match(/(i\d+)\.pixiv\.net/)[1],date:src.match(PxerHtmlParser.REGEXP['getDate'])[1],fileFormat:src.match(/\.(jpg|gif|png)$/)[1],});return rePw;};PxerHtmlParser.parseMediumHtml=function({task,dom,url,pw}){var rePw=new PxerWorks({id:task.id,type:task.type,tagList:[...dom.querySelectorAll(".tag a.text")].map(elt=>elt.innerHTML),viewCount:+dom.querySelector(".view-count").innerHTML,ratedCount:+dom.querySelector(".rated-count").innerHTML,scoreCount:+dom.querySelector(".score-count").innerHTML,fileFormat:'jpg',});if(task.type==='ugoira'){let script=[...dom.querySelectorAll("script")].filter(tag=>/zip/.test(tag.innerHTML))[0].innerHTML;let exp=/"src":"([^"<>]*?600x600\.zip)"[^<>]*?"frames":(\[.*?\])/mi;let arr=script.match(exp);rePw=new PxerUgoiraWorks(Object.assign(rePw,{server:arr[1].replace(/\\\//g,'\/').match(/(i\d+)\.pixiv\.net/)[1],date:arr[1].replace(/\\\//g,'\/').match(PxerHtmlParser.REGEXP['getDate'])[1],frames:JSON.parse(arr[2]),}));};if(task.type==='illust'&&!task.isMultiple){let src=dom.querySelector(".ui-modal-close-box img.original-image").getAttribute("data-src");Object.assign(rePw,{server:src.match(/(i\d+)\.pixiv\.net/)[1],date:src.match(PxerHtmlParser.REGEXP['getDate'])[1],fileFormat:src.match(/\.(jpg|gif|png)$/)[1],});}if(task.type==='manga'&&!task.isMultiple){let src=dom.querySelector("a._work.manga img").src;Object.assign(rePw,{server:src.match(/(i\d+)\.pixiv\.net/)[1],date:src.match(PxerHtmlParser.REGEXP['getDate'])[1],});}return rePw;};PxerHtmlParser.getMangaPath=function(pwr){var pw=PxerHtmlParser.parseMediumHtml({task:pwr,dom:(new DOMParser()).parseFromString(pwr.html[pwr.url[0]],'text/html'),url:pwr.url[0],pw:{},});pw.fileFormat='';return PxerPrint.getWorks(pw,{manga_single:'max'})[0];};PxerHtmlParser.REGEXP={'getDate':/img\/((?:\d+\/){5}\d+)/,};'use strict';class PxerThread extends PxerEvent{constructor({id,config,task}){super(['load','error','fail']);this.id=id;this.isFree=true;this.task=task;this.config=config||{timeout:5000,retry:3};this.runtime={};this.xhr=new XMLHttpRequest();this.xhr.timeout=this.config.timeout;this.xhr.responseType='text';};};PxerThread.checkRequest=function(url,html){if(!html)return'empty';if(html.indexOf("_no-item _error")!==-1){if(html.indexOf("sprites-r-18g-badge")!==-1)return'r-18g';if(html.indexOf("sprites-r-18-badge")!==-1)return'r-18';};if(html.indexOf("sprites-mypixiv-badge")!==-1)return'mypixiv';return true;};PxerThread.prototype['stop']=function(){this.xhr.abort();};PxerThread.prototype['init']=function(task){if(task)this.task=task;this.runtime={};this.isFree=false;if(this.task instanceof PxerWorksRequest){this.runtime.urlList=this.task.url.slice();}else if(this.task instanceof PxerPageRequest){this.runtime.urlList=[this.task.url];}else{console.error(`PxerThread:"${this.task}"is not PxerRequest`);return false;};};PxerThread.prototype['run']=function(){var prms=Promise.resolve();var thread=this;var xhr=this.xhr;xhr.removeEventListener('*');this.runtime.urlList.forEach((url)=>{prms=prms.then(()=>{return new Promise((resolve,reject)=>{var sendAjax=function(){xhr.addOneEventListener("timeout",function(){setDefalut(thread.runtime,"retry",0);if((+thread.config.retry!==0)&&(++thread.runtime.retry>=thread.config.retry)){reject({type:"timeout",url,xhr,});}else{sendAjax();};});if(thread.task.type==='manga'&&thread.task.isMultiple===false&&/mode=big/.test(url)){var referer;for(let url of thread.task.url){if(/mode=medium/.test(url)){referer=url;break;}};xhr.open('GET',url,true);xhr.refererSend(referer);}else{xhr.open('GET',url,true);xhr.send();};};xhr.addOneEventListener("load",function(){if(/^2/.test(xhr.status)||xhr.status===304){var msg=PxerThread.checkRequest(url,xhr.responseText);if(msg!==true){reject({type:msg,url,xhr,});return;};if(thread.task instanceof PxerWorksRequest){resolve(Object.assign(thread.task.html=Object(thread.task.html),{[url]:xhr.responseText}));}else{resolve(thread.task.html=xhr.responseText);};}else{reject({type:"http:"+xhr.status,url,xhr,});};});xhr.addOneEventListener("error",function(){reject({type:"error",url,xhr,});});sendAjax();});});});prms.finally(()=>{thread.isFree=true;}).then(()=>{thread.dispatch("load",thread.task);}).catch(function({type,url,xhr}){switch(type){case'error':console.error(`PxerThread#${thread.id}error!`);thread.dispatch("error",{task:thread.task,msg:type});break;case'empty':case'r-18g':case'r-18':case'mypixiv':console.warn(`Request check return ${type}form PxerThread#${thread.id}@${url}`);break;case'timeout':console.warn(`Request timeout form PxerThread#${thread.id}@${url}`);break;default:console.error(`PxerThread#${thread.id}error!`);thread.dispatch("error",{task:thread.task,msg:'unknown'});};thread.dispatch("fail",{task:thread.task,msg:type});});return true;};'use strict';class PxerThreadManager extends PxerEvent{constructor(config){super(['load','error','fail']);this.config=config||{timeout:5000,retry:3,thread:8,};this.taskList=[];this.resultSet=[];this.runtime={};this.threads=[];};};PxerThreadManager.prototype['stop']=function(){for(let thread of this.threads){thread.off('*');thread.stop();};};PxerThreadManager.prototype['init']=function(taskList){if(taskList)this.taskList=taskList.slice();this.resultSet=[];this.runtime={};this.threads=[];for(let i=0;i<this.config.thread;i++){this.threads.push(new PxerThread({id:i,config:{timeout:this.config.timeout,retry:this.config.retry,},task:null,}));};return this;};PxerThreadManager.prototype['run']=function(){this.threads.forEach(thread=>{let task=this.taskList.shift();if(!task)return;thread.on('load',data=>{this.resultSet.push(data);var task=this.taskList.shift();if(task){thread.init(task);setTimeout(thread.run.bind(thread));}else if(this.threads.every(thread=>thread.isFree)){this.dispatch('load',this.resultSet);};});thread.init(task);thread.on('fail',()=>{var task=this.taskList.shift();if(task){thread.init(task);setTimeout(thread.run.bind(thread));}else if(this.threads.every(thread=>thread.isFree)){this.dispatch('load',this.resultSet);};});thread.on('fail',this.dispatch.bind(this,"fail"));thread.on('error',this.dispatch.bind(this,"error"));setTimeout(thread.run.bind(thread));});};'use strict';class PxerApp extends PxerEvent{constructor(){super(['executeWroksTask','executePageTask','finishWorksTask','finishPageTask','error','stop',]);this.runtime={"pageType":'',"illust_number":0,"failList":[],};this.resultSet=[];this.taskList=[];this.pp=new PxerPrint();this.printConfig=this.pp.config;this.printFilter=this.pp.filter;this.ptm=new PxerThreadManager();this.threadManagerConfig=this.ptm.config;this.php=new PxerHtmlParser();this.ptm.on("error",({task})=>console.error(task));this.ptm.on("fail",({task})=>console.warn(task));this.ptm.on("fail",({task,msg})=>{setDefalut(this.runtime,'failList',[]);this.runtime.failList.push({task,msg});});this.on('error',err=>console.error(err));};};PxerApp.version='6.1.2';PxerApp.prototype["stop"]=function(){this.ptm.stop();this.dispatch('finishWorksTask');this.dispatch('stop');};PxerApp.prototype["autoSwitch"]=function(){this.one('finishPageTask',()=>{this.taskList=this.php.parseAll(this.resultSet);this.resultSet=[];this.executeWroksTask();});this.one('finishWorksTask',()=>{this.pp.works=this.php.parseAll(this.resultSet);this.taskList=[];});};PxerApp.prototype["queryExecute"]=function(){this.autoSwitch();this.one('finishWorksTask',()=>{this.pp.queryPrint();});this.executePageTask();};PxerApp.prototype["executePageTask"]=function(){if(this.taskList.length===0){this.dispatch('error','Could not find request!');return false;};if(!this.taskList.every(request=>request instanceof PxerPageRequest)){this.dispatch('error','Task list is not every instance PxerPageRequest');return false;};this.dispatch('executePageTask');this.ptm.one('load',(data)=>{setDefalut(this,'resultSet',[]);this.resultSet.push(...data);setTimeout(this.dispatch.bind(this,'finishPageTask'));});this.ptm.init(this.taskList);this.ptm.run();return true;};PxerApp.prototype["executeWroksTask"]=function(){if(this.taskList.length===0){this.dispatch('error','Could not find request!');return false;};if(!this.taskList.every(request=>request instanceof PxerWorksRequest)){this.dispatch('error','Task list is not every instance PxerWorksRequest');return false;};this.dispatch('executeWroksTask');this.ptm.one('load',(data)=>{setDefalut(this,'resultSet',[]);this.resultSet.push(...data);setTimeout(this.dispatch.bind(this,'finishWorksTask'));});this.ptm.init(this.taskList);this.ptm.run();return true;};PxerApp.prototype["analyzePage"]=function(){switch(this.runtime.pageType){case"member_illust":case"search":case"bookmark":this.runtime.illust_number=parseInt(document.querySelector(".count-badge").innerHTML);var separator=/\?/.test(document.URL)?"&":"?";for(var i=0;i<Math.ceil(this.runtime.illust_number/20);i++){this.taskList.push(new PxerPageRequest({url:document.URL+separator+"p="+(i+1),}));};break;default:return false;};return true;};PxerApp.prototype["getPageType"]=function(){var typeAnalyzer={"member":function(url){return/member\.php/.test(url);},"member_illust":function(url){return/member_illust\.php/.test(url);},"search":function(url){return/search\.php/.test(url);},"bookmark":function(url){return/bookmark\.php/.test(url);},"illust_medium":function(url){return/member_illust\.php/.test(url)&&/illust_id/.test(url);}};for(var key in typeAnalyzer){if(typeAnalyzer[key](document.URL)){return this.runtime.pageType=key;}}return false;};'use strict';~function(){if(/\.php(\?.+)?$/.test(pxerDefinePxerConfig['TEMPLATE_URL'])){pxerDefinePxerConfig['TEMPLATE_URL']=pxerDefinePxerConfig['TEMPLATE_URL'].replace(/\.php(\?.+)?$/,'.js$1');};var tpl=document.createElement('script');tpl.src=pxerDefinePxerConfig['URL_ROOT']+pxerDefinePxerConfig['TEMPLATE_URL']+"?"+(new Date()).getTime();;tpl.addEventListener('load',function(){var parentNote=document.getElementById('page-mypage')||document.getElementById('wrapper')||document.getElementById('contents')||document.body;var pxerTpl=(new DOMParser()).parseFromString(pxerDefinePxerConfig['PXER_TPL'],'text/html').body;parentNote.insertBefore(pxerTpl,parentNote.firstChild);var pu=new PxerUI(document.getElementById('pxer'));afterLoad(pu.init.bind(pu));window.pu=pu;});document.head.appendChild(tpl);}();class PxerUI{constructor(elt){this.elt=elt;this.pxer=new PxerApp();this.button=[];this.window=[];this.runtime={runtime:0,state:'wait',taskRuntime:0,taskTimer:null,};this.timer=setInterval(()=>{this.runtime.runtime||(this.runtime.runtime=0);this.runtime.runtime++;},1000);};};PxerUI.prototype['constMap']={version:PxerApp.version};PxerUI.prototype['init']=function(){this.button=[...this.elt.querySelectorAll('[pxer-button]')];this.button.forEach((item,index,array)=>array[item.getAttribute('pxer-button')]=item);this.window=[...this.elt.querySelectorAll('[pxer-window]')];this.window.forEach((item,index,array)=>array[item.getAttribute('pxer-window')]=item);[...this.elt.querySelectorAll('[pxer-const]')].forEach(item=>item.innerHTML=this.constMap[item.getAttribute('pxer-const')]);if(this.pxer.getPageType()===false&&pxerDefinePxerConfig['DEBUG']!==true){this.button.run.disabled=true;console.warn('getPageType return false');return false;}else{this.button.run.disabled=false;this.button.run.innerHTML='<span class="glyphicon glyphicon-play"></span>';};this.pxer.autoSwitch();this.pxer.on('finishWorksTask',()=>clearInterval(this.timer));(()=>{var originRetry=this.pxer.ptm.config.retry;this.pxer.on('executePageTask',()=>this.pxer.ptm.config.retry=0);this.pxer.on('finishPageTask',()=>this.pxer.ptm.config.retry=originRetry);})();this.pxer.on('finishWorksTask',()=>this.window.print.style.display='');this.pxer.on('finishWorksTask',()=>this.window.inf.style.display='none');this.button.run.addEventListener('click',()=>{if(this.button.run.classList.contains('btn-success')){this.button.run.classList.remove('btn-success');this.button.run.classList.add('btn-info');this.button.run.innerHTML='<span class="glyphicon glyphicon-ok"></span>';this.window.inf.style.display='';}else if(this.button.run.classList.contains('btn-info')){this.button.run.classList.remove('btn-info');this.button.run.classList.add('btn-danger');this.button.run.innerHTML='<span class="glyphicon glyphicon-remove"></span>';}else if(this.button.run.classList.contains('btn-danger')){this.button.run.style.display='none';this.button.run.classList.remove('btn-danger');this.button.run.classList.add('btn-success');this.button.run.innerHTML='<span class="glyphicon glyphicon-play"></span>';};});this.pxer.on('executePageTask',()=>this.runtime.state='getPageTask');this.pxer.on('executeWroksTask',()=>this.runtime.state='getWorks');this.pxer.on('finishWorksTask',()=>this.runtime.state='finish');this.pxer.on('finishWorksTask',()=>this.button.run.style.display='none');this.pxer.on('error',()=>this.runtime.state='error');this.pxer.on('stop',()=>this.runtime.state='stop');this.pxer.on('finishWorksTask',()=>document.blinkTitle());this.pxer.on('executePageTask',()=>{this.runtime.taskTimer=setInterval(()=>{this.runtime.taskRuntime++;},500);});this.pxer.on('executeWroksTask',()=>{this.runtime.taskRuntime=0;});this.pxer.on('finishWorksTask',()=>{clearInterval(this.runtime.taskTimer);});[...this.elt.querySelectorAll('[pxer-bind]')].forEach(item=>this.signBind(item,item.getAttribute('pxer-bind')));[...this.elt.querySelectorAll('[pxer-config]')].forEach(item=>this.signConfig(item,item.getAttribute('pxer-config')));this.button.run.addOneEventListener('click',()=>{this.pxer.analyzePage();this.button.run.addOneEventListener('click',()=>{this.pxer.executePageTask();this.button.run.addOneEventListener('click',()=>{if(this.runtime.state==='getPageTask'||this.runtime.state==='getWorks')this.pxer.stop();});});});this.button.echo.addEventListener('click',()=>this.pxer.pp.queryPrint());this.button.count.addEventListener('click',()=>{this.window.taskInfo.style.display='';this.pxer.pp.filterWorks().countAddress().getTaskInfo();});this.button.warn.addEventListener('click',()=>{this.window.warn.classList.toggle('show-block');});this.button.selectAllfw.addEventListener('click',()=>{var elt=this.button.selectAllfw.parentNode;while(elt.tagName.toLowerCase()!=='table'){elt=elt.parentNode;};[...elt.querySelectorAll('[name="again_works"]')].forEach(elt=>elt.checked=true);});this.button.again.addEventListener('click',()=>{var againIds=[...document.querySelectorAll('[name="again_works"]:checked')].map(elt=>elt.value);if(againIds.length===0)return;setDefalut(this.pxer,'taskList',[]);this.pxer.runtime.failList=this.pxer.runtime.failList.filter(({task})=>{if(againIds.some(id=>id==task.id)){this.pxer.taskList.push(task);return false;}else{return true;};});if(this.pxer.runtime.failList.length===0)this.window.warn.classList.remove('show-block');this.readyAgain();});};PxerUI.prototype['readyAgain']=function(){if(this.runtime.readyAgain)return;this.runtime.readyAgain=true;this.pxer.one('finishWorksTask',()=>this.pxer.taskList=[]);this.pxer.one('finishWorksTask',()=>this.runtime.readyAgain=false);this.pxer.one('finishWorksTask',()=>this.runtime.failList=[]);this.button.run.classList.contains('btn-danger')&&this.button.run.click();this.button.run.style.display='';this.button.run.addOneEventListener('click',()=>{this.button.run.addOneEventListener('click',()=>{this.pxer.executeWroksTask();this.button.run.addOneEventListener('click',()=>{if(this.runtime.state==='getPageTask'||this.runtime.state==='getWorks')this.pxer.stop();});});});this.pxer.on('finishWorksTask',()=>{this.pxer.pp.works.push(...this.pxer.php.parseAll(this.pxer.ptm.resultSet));this.pxer.ptm.resultSet=[];});};PxerUI.prototype['signBind']=function(elt,key){var bindMap=this.bindMap(key);if(bindMap===undefined)return console.warn(`Count not find field"${key}"in PxerUI::bindMap`);if(bindMap.object[bindMap.propertyName]instanceof Array){let oldOpd=Object.getOwnPropertyDescriptor(bindMap.object,bindMap.propertyName)||{value:[],writable:true,enumerable:true,configurable:true,};let newOpd=Object.assign(Object.copy(oldOpd),{set(newValue){if(newValue instanceof Array){if('Hook:change'in newValue){var originHook=newValue['Hook:change'];newValue['Hook:change']=function(){bindMap.update(elt,newValue);originHook.bind(newValue)();};}else{Object.defineProperty(newValue,'Hook:change',{value:function(){bindMap.update(elt,newValue);},enumerable:false,configurable:true,writable:true,});};};bindMap.update(elt,newValue);if(typeof oldOpd.set==='function'){oldOpd.set(newValue);}else{oldOpd.value=newValue;};},get(){if(typeof oldOpd.get==='function'){return oldOpd.get();}else{return oldOpd.value;};},});delete newOpd.value;delete newOpd.writable;Object.defineProperty(bindMap.object,bindMap.propertyName,newOpd);bindMap.object[bindMap.propertyName]=bindMap.object[bindMap.propertyName];return true;};var oldOpd=Object.getOwnPropertyDescriptor(bindMap.object,bindMap.propertyName)||{value:undefined,writable:true,enumerable:true,configurable:true,};var newOpd=Object.assign(Object.copy(oldOpd),{set(newValue){if(typeof oldOpd.set==='function'){oldOpd.set(newValue);}else{oldOpd.value=newValue;};if(bindMap.update){bindMap.update(elt,newValue);}else{elt.innerHTML=newValue;};},get(){if(typeof oldOpd.get==='function'){return oldOpd.get();}else{return oldOpd.value;};},});delete newOpd.value;delete newOpd.writable;Object.defineProperty(bindMap.object,bindMap.propertyName,newOpd);bindMap.object[bindMap.propertyName]=bindMap.object[bindMap.propertyName];};PxerUI.prototype['bindMap']=function(key){var obj={record:{object:this.runtime,propertyName:'runtime',update(elt,time){var second=time%60;var minute=~~(time/60);if(second<10)second='0'+second;elt.innerHTML=`${minute}:${second}`;},},pageType:{object:this.pxer.runtime,propertyName:'pageType',update(elt,value){var pt='';switch(value){case'member':pt='个人资料页';break;case'member_illust':pt='个人作品页';break;case'search':pt='搜索页';break;case'bookmark':pt='收藏页';break;case'medium':pt='作品详情查看';break;default:pt='未知';};elt.innerHTML=pt;},},worksNum:{object:this.pxer.runtime,propertyName:'illust_number',},pret:{object:this.pxer,propertyName:'taskList',update(elt,arr){elt.innerHTML=arr.length},},finish:{object:this.pxer.ptm,propertyName:'resultSet',update(elt,arr){elt.innerHTML=arr.length},},forecast:{object:this.runtime,propertyName:'taskRuntime',update:(elt,value)=>{var time=~~((0.5*value)/this.pxer.ptm.resultSet.length*this.pxer.ptm.taskList.length);isNaN(time)&&(time=0);var second=time%60;var minute=~~(time/60);if(second<10)second='0'+second;elt.innerHTML=`${minute}:${second}`;},},failTaskLength:{object:this.pxer.runtime,propertyName:'failList',update(elt,arr){if(arr&&arr.length){elt.innerHTML=arr.length;};}},hasFailTask:{object:this.pxer.runtime,propertyName:'failList',update(elt,arr){if(arr&&arr.length){elt.style.display='';}else{elt.style.display='none';};}},failList:{object:this.pxer.runtime,propertyName:'failList',update(elt,arr){var signMap={timeout:'重试',mypixiv:'申请画师好友获得查看权限',empty:'重试或手动保存',error:'重试或手动保存,并报告给花生',unknown:'重试或手动保存,并报告给花生','r-18':'在用户设置中设置显示R-18作品','r-18g':'在用户设置中设置显示R-18G作品',};var html='';for(let{task,msg}of arr){html+=`<tr><td><a href="http://www.pixiv.net/member_illust.php?mode=medium&illust_id=${task.id}">${task.id}</a></td><td>${msg}</td><td>${signMap[msg]||signMap['unknown']}</td><td class="text-center"><input type="checkbox"name="again_works"value="${task.id}"/></td></tr>`;};elt.innerHTML=html;}},taskInfo:{object:this.pxer.pp.runtime,propertyName:'taskInfo',},state:{object:this.runtime,propertyName:'state',update(elt,value){var pt='';switch(value){case'wait':pt='待命中';break;case'getPageTask':pt='获取作品信息中';break;case'getWorks':pt='爬取作品中';break;case'finish':pt='已完成';break;case'error':pt='出现错误';break;case'stop':pt='手动停止';break;default:pt='未知';};elt.innerHTML=pt;},},};return obj[key];};PxerUI.prototype['signConfig']=function(elt,key){var configMap=this.configMap(key);if(configMap===undefined)return console.warn(`Count not find field"${key}"in PxerUI::configMap`);if(typeof configMap.toValue==='function'){elt.value=configMap.toValue(configMap.object[configMap.propertyName]);}else{elt.value=configMap.object[configMap.propertyName];};let eventType=elt.tagName==='SELECT'?'change':'input';elt.addEventListener(eventType,()=>{if(typeof configMap.toConfig==='function'){configMap.object[configMap.propertyName]=configMap.toConfig(elt.value);}else{configMap.object[configMap.propertyName]=elt.value;};})};PxerUI.prototype['configMap']=function(key){var obj={thread:{object:this.pxer.ptm.config,propertyName:'thread',},timeout:{object:this.pxer.ptm.config,propertyName:'timeout',},maxRetry:{object:this.pxer.ptm.config,propertyName:'retry',},score:{object:this.pxer.printFilter,propertyName:'score',},avg:{object:this.pxer.printFilter,propertyName:'avg',},yes_and_tag:{object:this.pxer.printFilter,propertyName:'yes_and_tag',toConfig:value=>value.trim().split(' '),toValue:config=>config.join(' '),},yes_or_tag:{object:this.pxer.printFilter,propertyName:'yes_or_tag',toConfig:value=>value.trim().split(' '),toValue:config=>config.join(' '),},no_and_tag:{object:this.pxer.printFilter,propertyName:'no_and_tag',toConfig:value=>value.trim().split(' '),toValue:config=>config.join(' '),},no_or_tag:{object:this.pxer.printFilter,propertyName:'no_or_tag',toConfig:value=>value.trim().split(' '),toValue:config=>config.join(' '),},illust_single:{object:this.pxer.printConfig,propertyName:'illust_single',},illust_medium:{object:this.pxer.printConfig,propertyName:'illust_medium',},manga_single:{object:this.pxer.printConfig,propertyName:'manga_single',},manga_medium:{object:this.pxer.printConfig,propertyName:'manga_medium',},ugoira:{object:this.pxer.printConfig,propertyName:'ugoira_zip',toConfig:value=>{var arr=value.split('-');this.pxer.printConfig['ugoira_frames']=arr[1];return arr[0];},toValue:config=>`${config}-${this.pxer.printConfig['ugoira_frames']}`,},};return obj[key]};