Sleazy Fork is available in English.

re621 - e621 Reimagined

Increases the amount of customization on e621

Pada tanggal 15 November 2021. Lihat %(latest_version_link).

// ==UserScript==
// @name         re621 - e621 Reimagined
// @namespace    re621.github.io
// @version      1.1.3
// @description  Increases the amount of customization on e621
// @author       bitWolfy
// @match        https://e621.net/*
// @match        https://e926.net/*
// @require      https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js#sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=
// @require      https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js#sha256-KM512VNnjElC30ehFwehXjx1YCHPiQkOPmqnrWtpccM=
// @require      https://cdnjs.cloudflare.com/ajax/libs/lazysizes/5.2.0/lazysizes.min.js
// @require      https://cdnjs.cloudflare.com/ajax/libs/jszip/3.3.0/jszip.min.js
// @require      https://cdn.jsdelivr.net/npm/jquery.hotkeys@0.1.0/jquery.hotkeys.min.js
// @require      https://cdn.jsdelivr.net/npm/file-saver@2.0.2/dist/FileSaver.min.js
// @resource     re621_styles https://github.com/re621/re621/releases/download/1.1.3/style.min.css
// @resource     re621_dnp https://github.com/re621/re621/releases/download/1.1.3/avoid-posting.json
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_deleteValue
// @grant        GM_getResourceText
// @grant        GM_addStyle
// @grant        GM_download
// @grant        GM_xmlhttpRequest
// @grant        GM_openInTab
// @grant        GM_setClipboard
// @icon64       https://re621.github.io/images/icon.png
// @connect      api.github.com
// @connect      static1.e621.net
// ==/UserScript==

/**
 * This is a minified build. To see the source visit the projects github page
 */

window.re621 = new function() {
    this.name = "re621";
    this.displayName = "re621 - e621 Reimagined";
    this.version = "1.1.3";
    this.build = "200414:1741";
    this.repo = "re621/re621";
    this.links = {
        website: "https://re621.github.io/",
        repository: "https://github.com/" + this.repo + "/",
        issues: "https://github.com/" + this.repo + "/issues/",
        releases: "https://github.com/" + this.repo + "/releases",
        forum: "https://e621.net/forum_topics/25872",
    };
    this.useragent = "re621/1.0 userscript " + this.links.website;
    this.debug = true;
    this.toString = function() { return this.name + " v." + this.version + " (" + this.build + ")"; };
};

!function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,(function(r){return o(e[i][1][r]||r)}),p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}({1:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const Modal_1=require("./structure/Modal");class ErrorHandler{constructor(){const $contentWrapper=$("<div>").append("<p>RE621 has encountered an error during script execution.</p>").append('<p>Please, report this message, including the error log below, through the <a href="'+window.re621.links.issues+'">issue tracker</a>, or in the <a href="'+window.re621.links.forum+'">forum thread</a>.</p>');this.feedback=$("<textarea>").addClass("error-feedback bg-section color-text").appendTo($contentWrapper),this.trigger=$("<a>"),this.modal=new Modal_1.Modal({title:"An error has occurred",content:$contentWrapper,triggers:[{element:this.trigger}],fixed:!0})}static getInstance(){return void 0===this.instance&&(this.instance=new ErrorHandler),this.instance}static log(module,message,context){const instance=this.getInstance();"string"!=typeof module&&(module=module.prototype.constructor.name),void 0!==context&&(module+="/"+context),instance.feedback.val((index,value)=>{const entry=""===value?module+"\n"+message:value+"\n\n"+module+"\n"+message;return console.log(entry),entry})}static error(module,message,context){const instance=this.getInstance();instance.modal.isOpen()||instance.trigger.get(0).click(),this.log(module,message,context)}}exports.ErrorHandler=ErrorHandler},{"./structure/Modal":21}],2:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const ErrorHandler_1=require("./ErrorHandler");class ModuleController{static register(moduleClass){try{const moduleInstance=moduleClass.getInstance();moduleInstance.create(),this.modules.set(moduleClass.prototype.constructor.name,moduleInstance)}catch(error){ErrorHandler_1.ErrorHandler.error(moduleClass,error.stack,"init")}}static getWithType(moduleClass){return this.getByName(moduleClass.prototype.constructor.name)}static get(moduleClass){return this.getByName(moduleClass.prototype.constructor.name)}static getByName(name){return this.modules.get(name)}static getAll(){return this.modules}}exports.ModuleController=ModuleController,ModuleController.modules=new Map},{"./ErrorHandler":1}],3:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const Page_1=require("./data/Page"),Hotkeys_1=require("./data/Hotkeys"),GM_1=require("./api/GM");exports.RE6Module=class{constructor(constraint){this.initialized=!1,this.constraint=[],this.hotkeys=[],void 0===constraint?this.constraint=[]:constraint instanceof RegExp?this.constraint.push(constraint):this.constraint=constraint,this.loadSettingsData();const status=this.fetchSettings("enabled");this.enabled=void 0===status||status}isInitialized(){return this.initialized}canInitialize(){return!this.initialized&&this.pageMatchesFilter()&&this.enabled}pageMatchesFilter(){return 0==this.constraint.length||Page_1.Page.matches(this.constraint)}create(){this.initialized=!0}destroy(){this.initialized=!1}isEnabled(){return this.enabled}setEnabled(enabled){this.enabled=enabled}fetchSettings(property,fresh){return fresh&&this.loadSettingsData(),void 0===property?this.settings:this.settings[property]}pushSettings(property,value,preserve){preserve&&this.loadSettingsData(),this.settings[property]=value,this.saveSettingsData()}clearSettings(){GM_1.GM.deleteValue("re621."+this.constructor.name),this.loadSettingsData()}getSavedSettings(){return{name:"re621."+this.constructor.name,data:GM_1.GM.getValue("re621."+this.constructor.name,{})}}getDefaultSettings(){return{enabled:!0}}loadSettingsData(){const defaultValues=this.getDefaultSettings();this.settings=GM_1.GM.getValue("re621."+this.constructor.name,defaultValues);for(const key of Object.keys(defaultValues))void 0===this.settings[key]&&(this.settings[key]=defaultValues[key])}saveSettingsData(){GM_1.GM.setValue("re621."+this.constructor.name,this.settings)}resetHotkeys(){const enabled=this.pageMatchesFilter();this.hotkeys.forEach(value=>{this.fetchSettings(value.keys,!0).split("|").forEach(key=>{""!==key&&(enabled?Hotkeys_1.Hotkeys.register(key,value.fnct):Hotkeys_1.Hotkeys.register(key,()=>{}))})})}registerHotkeys(...hotkeys){this.hotkeys=this.hotkeys.concat(hotkeys),this.resetHotkeys()}static getInstance(){return null==this.instance&&(this.instance=new this),this.instance}}},{"./api/GM":8,"./data/Hotkeys":13,"./data/Page":14}],4:[function(require,module,exports){"use strict";var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){return new(P||(P=Promise))((function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator.throw(value))}catch(e){reject(e)}}function step(result){var value;result.done?resolve(result.value):(value=result.value,value instanceof P?value:new P((function(resolve){resolve(value)}))).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())}))};Object.defineProperty(exports,"__esModule",{value:!0});const RequestQueue_1=require("./RequestQueue");class Api{constructor(){this.defaultDelay=2e3,this.queue=new Map,this.authenticityToken=$("head meta[name=csrf-token]").attr("content")}static requestFunction(url,method,data={}){return __awaiter(this,void 0,void 0,(function*(){return new Promise((resolve,reject)=>__awaiter(this,void 0,void 0,(function*(){const requestInfo={credentials:"include",headers:{"Content-Type":"application/x-www-form-urlencoded",Header:"re621/1.0 userscript re621.github.io"},method:method,mode:"cors"};if("GET"!==method&&"get"!==method){const postData=[];data.authenticity_token=Api.getInstance().authenticityToken;for(const key of Object.keys(data))postData.push(encodeURIComponent(key)+"="+encodeURIComponent(data[key]));requestInfo.body=postData.join("&")}const request=yield fetch(location.protocol+"//"+location.host+url,requestInfo);request.status>=200&&request.status<400?resolve(yield request.text()):reject()})))}))}static request(url,method,delay,data){return __awaiter(this,void 0,void 0,(function*(){const instance=this.getInstance();delay||(delay=instance.defaultDelay);let queue=instance.queue.get(delay);if(!queue){const newQueue=new RequestQueue_1.RequestQueue(delay);instance.queue.set(delay,newQueue),queue=newQueue}const id=queue.getRequestId();return queue.add(this.requestFunction,id,url,method,data),yield queue.getRequestResult(id)}))}static getUrl(url,delay){return __awaiter(this,void 0,void 0,(function*(){return yield this.request(url,"GET",delay)}))}static getJson(url,delay){return __awaiter(this,void 0,void 0,(function*(){const response=yield this.getUrl(url,delay);return JSON.parse(response)}))}static postUrl(url,json,delay){return __awaiter(this,void 0,void 0,(function*(){return yield this.request(url,"POST",delay,json)}))}static getInstance(){return void 0===this.instance&&(this.instance=new Api),this.instance}}exports.Api=Api},{"./RequestQueue":10}],5:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});class Danbooru{static notice(input){return this.getValue("notice")(input)}static error(input){return this.getValue("error")(input)}static getValue(name){return unsafeWindow.Danbooru[name]}static _init(){this.Blacklist=this.getValue("Blacklist"),this.Post=this.getValue("Post"),this.Note=this.getValue("Note"),this.Utility=this.getValue("Utility")}}exports.Danbooru=Danbooru,Danbooru._init()},{}],6:[function(require,module,exports){"use strict";var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){return new(P||(P=Promise))((function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator.throw(value))}catch(e){reject(e)}}function step(result){var value;result.done?resolve(result.value):(value=result.value,value instanceof P?value:new P((function(resolve){resolve(value)}))).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())}))};Object.defineProperty(exports,"__esModule",{value:!0});const GM_1=require("./GM");class DownloadQueue{constructor(){this.queue=[],this.zip=new JSZip}getThreadCount(){return DownloadQueue.concurrent}getQueueLength(){return this.queue.length}add(file,listeners){file.unid=void 0===file.unid?0:file.unid,file.date=void 0===file.date?new Date:new Date(file.date),file.tags=void 0===file.tags?"":file.tags,listeners.onStart=void 0===listeners.onStart?function(){}:listeners.onStart,listeners.onFinish=void 0===listeners.onFinish?function(){}:listeners.onFinish,listeners.onLoadStart=void 0===listeners.onLoadStart?function(){}:listeners.onLoadStart,listeners.onLoadFinish=void 0===listeners.onLoadFinish?function(){}:listeners.onLoadFinish,listeners.onLoadProgress=void 0===listeners.onLoadProgress?function(){}:listeners.onLoadProgress,listeners.onError=void 0===listeners.onError?function(){}:listeners.onError,this.queue.push({file:file,listeners:listeners})}run(onArchiveProgress){return __awaiter(this,void 0,void 0,(function*(){const processes=[];for(let i=0;i<DownloadQueue.concurrent;i++)processes.push(this.createNewProcess(i));return Promise.all(processes).then(()=>this.zip.generateAsync({type:"blob",compression:"STORE",comment:"Downloaded from e621 on "+(new Date).toUTCString()},onArchiveProgress))}))}createNewProcess(thread){return __awaiter(this,void 0,void 0,(function*(){return new Promise(resolve=>__awaiter(this,void 0,void 0,(function*(){let index,item;for(;this.queue.length>0;)index=this.queue.length,item=this.queue.pop(),item.listeners.onStart(item.file,thread,index),yield this.zip.file(item.file.name,yield this.getDataBlob(item,thread),{binary:!0,date:item.file.date,comment:item.file.tags}),item.listeners.onFinish(item.file,thread,index);void 0!==item&&item.listeners.onWorkerFinish(item.file,thread),resolve()})))}))}getDataBlob(item,thread){return __awaiter(this,void 0,void 0,(function*(){return new Promise((resolve,reject)=>{let timer;GM_1.GM.xmlHttpRequest({method:"GET",url:item.file.path,headers:{"User-Agent":window.re621.useragent},responseType:"blob",onloadstart:event=>{item.listeners.onLoadStart(item.file,thread,event)},onerror:event=>{item.listeners.onError(item.file,thread,event),reject(item.file)},ontimeout:event=>{item.listeners.onError(item.file,thread,event),reject(item.file)},onprogress:event=>{timer&&clearTimeout(timer),timer=window.setTimeout(()=>{item.listeners.onLoadProgress(item.file,thread,event)},500)},onload:event=>{item.listeners.onLoadFinish(item.file,thread,event),resolve(event.response)}})})}))}}exports.DownloadQueue=DownloadQueue,DownloadQueue.concurrent=4},{"./GM":8}],7:[function(require,module,exports){"use strict";var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){return new(P||(P=Promise))((function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator.throw(value))}catch(e){reject(e)}}function step(result){var value;result.done?resolve(result.value):(value=result.value,value instanceof P?value:new P((function(resolve){resolve(value)}))).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())}))};Object.defineProperty(exports,"__esModule",{value:!0});const ENDPOINT_DEFS=[{name:"posts",path:"posts",node:{list:"posts",id:"post"}},{name:"tags",path:"tags"},{name:"tag_aliases",path:"tag_aliases"},{name:"tag_implications",path:"tag_implications"},{name:"notes",path:"notes"},{name:"favorites",path:"favorites",node:{list:"posts"}},{name:"pools",path:"pools"},{name:"sets",path:"post_sets"},{name:"users",path:"users"},{name:"blips",path:"blips"},{name:"wiki_pages",path:"wiki_pages"},{name:"comments",path:"comments"},{name:"forum_posts",path:"forum_posts"},{name:"forum_topics",path:"forum_topics"}];class APIEndpoint{constructor(queue,endpoint){this.param="",this.queue=queue,this.path=endpoint.path,this.name=endpoint.name,this.nodeDef=void 0===endpoint.node?{}:endpoint.node,this.nodeCur="list"}find(param){return this.param=encodeURIComponent(param),this.nodeCur="id",this}get(query,delay){return __awaiter(this,void 0,void 0,(function*(){return this.queue.createRequest(this.getParsedPath(),this.queryToString(query),"GET","",this.name,this.getNode(),delay).then(response=>{const result=this.formatData(response[0],response[2]);return Promise.resolve(result)},response=>Promise.reject(response[0]))}))}post(data,delay){return __awaiter(this,void 0,void 0,(function*(){return this.queue.createRequest(this.getParsedPath(),"","POST",this.queryToString(data),this.name,this.getNode(),delay).then(data=>Promise.resolve(data),error=>Promise.reject(error))}))}getParsedPath(){if(""===this.param)return this.path+".json";const newPath=this.path+"/"+this.param+".json";return this.param="",newPath}queryToString(query){if(void 0===query)return"";if("string"==typeof query)return query;const keys=Object.keys(query);if(0===keys.length)return"";const queryString=[];return keys.forEach(key=>{key.includes("search")&&(this.nodeCur="search");let value=query[key];Array.isArray(value)&&(value=value.join("+")),queryString.push(encodeURIComponent(key)+"="+encodeURIComponent(value).replace(/%2B/g,"+"))}),queryString.join("&")}getNode(){const node=this.nodeCur;return this.nodeCur="list",node}formatData(data,node){const selectedNode=this.nodeDef[node];return void 0!==selectedNode&&""!==selectedNode&&(data=data[selectedNode]),Array.isArray(data)?data:[data]}}class E621{constructor(){this.emitter=$({}),this.processing=!1,this.requestIndex=0,this.endpoints={},this.authToken=$("head meta[name=csrf-token]").attr("content"),this.queue=[],ENDPOINT_DEFS.forEach(definition=>{this.endpoints[definition.name]=new APIEndpoint(this,definition)})}static getEndpoint(name){return void 0===this.instance&&(this.instance=new E621),this.instance.endpoints[name]}createRequest(path,query,method,data,endpoint,node,delay){return __awaiter(this,void 0,void 0,(function*(){void 0===delay?delay=E621.requestRateLimit:delay<500&&(delay=500);const requestInfo={credentials:"include",headers:{"Content-Type":"application/x-www-form-urlencoded",Header:"re621/1.0 userscript re621.github.io"},method:method,mode:"cors"};"POST"===method&&(requestInfo.body=data+(data.length>0?"&":"")+"authenticity_token="+this.authToken);const entry=new Request(location.origin+"/"+path+(query.length>0?"?":"")+query,requestInfo),index=this.requestIndex++,final=new Promise((resolve,reject)=>{this.emitter.one("api.re621.result-"+index,(e,data,status,endpoint,node)=>{null===data&&(data=[]),void 0!==data[endpoint]&&"posts"!==endpoint&&(data=[]),void 0===data.error?resolve([data,status,node]):reject([data,status,node])})});return this.add({request:entry,index:index,delay:delay,endpoint:endpoint,node:node}),final}))}add(newItem){return __awaiter(this,void 0,void 0,(function*(){if(this.queue.push(newItem),!this.processing){for(this.processing=!0;this.queue.length>0;){const item=this.queue.shift(),request=yield fetch(item.request);request.ok?this.emitter.trigger("api.re621.result-"+item.index,[yield request.json(),request.status,item.endpoint,item.node]):this.emitter.trigger("api.re621.result-"+item.index,[{error:request.status+" "+request.statusText},request.status,item.endpoint,item.node]),yield new Promise(resolve=>{setTimeout(()=>{resolve()},item.delay)})}this.processing=!1}}))}}exports.E621=E621,E621.requestRateLimit=1e3,E621.Posts=E621.getEndpoint("posts"),E621.Tags=E621.getEndpoint("tags"),E621.TagAliases=E621.getEndpoint("tag_aliases"),E621.TagImplications=E621.getEndpoint("tag_implications"),E621.Notes=E621.getEndpoint("notes"),E621.Favorites=E621.getEndpoint("favorites"),E621.Pools=E621.getEndpoint("pools"),E621.Sets=E621.getEndpoint("sets"),E621.Users=E621.getEndpoint("users"),E621.Blips=E621.getEndpoint("blips"),E621.Wiki=E621.getEndpoint("wiki_pages"),E621.Comments=E621.getEndpoint("comments"),E621.ForumPosts=E621.getEndpoint("forum_posts"),E621.ForumTopics=E621.getEndpoint("forum_topics")},{}],8:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.GM=class{static addStyle(css){return GM_addStyle(css)}static setValue(name,value){return GM_setValue(name,value)}static getValue(name,defaultValue){return GM_getValue(name,defaultValue)}static deleteValue(name){GM_deleteValue(name)}static getResourceText(name){return GM_getResourceText(name)}static openInTab(a,b){return GM_openInTab(a,b)}static xmlHttpRequest(details){return GM_xmlhttpRequest(details)}static download(a,b){return GM_download(a,b)}static setClipboard(data,info){return GM_setClipboard(data,info)}}},{}],9:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const APIPost_1=require("./responses/APIPost");exports.PostHtml=class{static create(json,loadLargeImage=!0){const allTags=APIPost_1.APIPost.getTagString(json),$article=$("<article>").attr({id:"post_"+json.id,"data-id":json.id,"data-flags":this.getFlags(json).join(" "),"data-tags":allTags,"data-rating":json.rating,"data-uploader-id":json.uploader_id,"data-file-ext":json.file.ext,"data-file-url":json.file.url,"data-large-file-url":json.sample.url,"data-preview-file-url":json.preview.url,"data-uploader":json.uploader_id}).addClass(this.getArticleClasses(json).join(" ")),$href=$("<a>").addClass("preview-box").attr("href","/posts/"+json.id).appendTo($article),$picture=$("<picture>").appendTo($href),$img=$("<img>").addClass("has-cropped-false").addClass("lazyload").attr("title",`Rating: ${json.rating}\nID: ${json.id}\nDate: ${json.created_at}\nScore: ${json.score.total}\n\n ${allTags}`).attr("alt",allTags).appendTo($picture);loadLargeImage?$img.attr("data-src",json.file.url):$img.attr("data-src",json.preview.url);const $desc=$("<div>").attr("class","desc").appendTo($article),$postScore=$("<div>").attr("id","post-score-"+json.id).addClass("post-score").appendTo($desc),scoreInfo=this.getScoreInfo(json);return $("<span>").addClass("post-score-score ").addClass(scoreInfo.class).text(scoreInfo.modifier+json.score.total).appendTo($postScore),$("<span>").addClass("post-score-faves").text("♥"+json.fav_count).appendTo($postScore),$("<span>").addClass("post-score-comments").text("C"+json.comment_count).appendTo($postScore),$("<span>").addClass("post-score-rating").text(json.rating.toUpperCase()).appendTo($postScore),$("<span>").addClass("post-score-extra").text(this.getExtra(json)).appendTo($postScore),$article}static getScoreInfo(json){return 0===json.score.total?{class:"score-neutral",modifier:"↕"}:json.score.total>0?{class:"score-positive",modifier:"↑"}:{class:"score-negative",modifier:"↓"}}static getArticleClasses(json){const result=["blacklisted","captioned","post-preview"];switch(json.rating){case"s":result.push("post-rating-safe");break;case"q":result.push("post-rating-questionable");break;case"e":result.push("post-rating-explicit")}for(const flag of this.getFlags(json))result.push("post-status-"+flag);return json.relationships.has_active_children&&result.push("post-status-has-children"),null!==json.relationships.parent_id&&result.push("post-status-has-parent"),result}static getFlags(json){const result=[];return json.flags.deleted?result.push("deleted"):json.flags.flagged?result.push("flagged"):json.flags.pending&&result.push("pending"),result}static getExtra(json){let result="";return null!==json.relationships.parent_id&&(result+="P"),json.relationships.has_active_children&&(result+="C"),json.flags.pending&&(result+="U"),json.flags.flagged&&(result+="F"),result}}},{"./responses/APIPost":11}],10:[function(require,module,exports){"use strict";var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){return new(P||(P=Promise))((function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator.throw(value))}catch(e){reject(e)}}function step(result){var value;result.done?resolve(result.value):(value=result.value,value instanceof P?value:new P((function(resolve){resolve(value)}))).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())}))};Object.defineProperty(exports,"__esModule",{value:!0});exports.RequestQueue=class{constructor(requestSleepDuration){this.emitter=$({}),this.requestQueue=new Map,this.workingQueue=!1,this.requestCounter=0,this.requestSleepDuration=requestSleepDuration}getRequestId(){return this.requestCounter++}workQueue(requestMethod){return __awaiter(this,void 0,void 0,(function*(){if(!0!==this.workingQueue){this.workingQueue=!0;for(const entry of this.requestQueue.entries())entry[1].content=yield requestMethod(entry[1].url,entry[1].method,entry[1].data),console.log(`Finished ${entry[0]} on lane ${this.requestSleepDuration}`),this.emitter.trigger("request-"+entry[0]),yield new Promise(resolve=>setTimeout(()=>resolve(),this.requestSleepDuration));this.workingQueue=!1}}))}add(requestMethod,id,url,method,data={}){return __awaiter(this,void 0,void 0,(function*(){this.requestQueue.set(id,{url:url,method:method,data:data,content:""}),this.workQueue(requestMethod),console.log("Queue size: "+this.requestQueue.size)}))}getRequestResult(id){return __awaiter(this,void 0,void 0,(function*(){return new Promise(resolve=>{this.emitter.on("request-"+id,()=>{const result=this.requestQueue.get(id).content;this.requestQueue.delete(id),resolve(result)})})}))}}},{}],11:[function(require,module,exports){"use strict";var PostRating;Object.defineProperty(exports,"__esModule",{value:!0}),function(PostRating){PostRating.Safe="s",PostRating.Questionable="q",PostRating.Explicit="e"}(PostRating=exports.PostRating||(exports.PostRating={})),function(PostRating){PostRating.fromValue=function(value){for(const key of Object.keys(PostRating))if(PostRating[key]===value)return PostRating[key]},PostRating.toString=function(postRating){for(const key of Object.keys(PostRating))if(PostRating[key]===postRating)return key}}(PostRating=exports.PostRating||(exports.PostRating={})),function(APIPost){APIPost.getTagString=function(post){return[...post.tags.artist,...post.tags.character,...post.tags.copyright,...post.tags.general,...post.tags.invalid,...post.tags.lore,...post.tags.meta,...post.tags.species].join(" ")},APIPost.getFlagString=function(post){const flags=[];return post.flags.deleted&&flags.push("deleted"),post.flags.flagged&&flags.push("flagged"),post.flags.pending&&flags.push("pending"),flags.join(" ")},APIPost.fromDomElement=function($element){let md5;const deletedUrl="/images/deleted-preview.png";$element.attr("data-md5")?md5=$element.attr("data-md5"):$element.attr("data-file-url")&&(md5=$element.attr("data-file-url").substring(36,68));const ext=$element.attr("data-file-ext");let score;return $element.attr("data-score")?score=parseInt($element.attr("data-score")):0!==$element.find(".post-score-score").length&&(score=parseInt($element.find(".post-score-score").first().html().substring(1))),{error:"",id:parseInt($element.attr("data-id")),change_seq:-1,comment_count:-1,created_at:"",description:"",fav_count:-1,file:{ext:ext,height:-1,width:-1,md5:md5,size:-1,url:void 0===md5?deletedUrl:`https://static1.e621.net/data/${md5.substring(0,2)}/${md5.substring(2,4)}/${md5}.${ext}`},flags:{deleted:!1,flagged:!1,note_locked:!1,pending:!1,rating_locked:!1,status_locked:!1},locked_tags:[],pools:[],preview:{height:-1,width:-1,url:void 0===md5?deletedUrl:`https://static1.e621.net/data/preview/${md5.substring(0,2)}/${md5.substring(2,4)}/${md5}.jpg`},rating:PostRating.fromValue($element.attr("data-rating")),relationships:{children:[],has_active_children:!1,has_children:!1},sample:{has:!0,height:-1,width:-1,url:void 0===md5?deletedUrl:`https://static1.e621.net/data/sample/${md5.substring(0,2)}/${md5.substring(2,4)}/${md5}.jpg`},score:{down:0,total:score,up:0},sources:[],tags:{artist:[],character:[],copyright:[],general:$element.attr("data-tags").split(" "),invalid:[],lore:[],meta:[],species:[]},updated_at:"",uploader_id:parseInt($element.attr("data-uploader-id"))}}}(exports.APIPost||(exports.APIPost={}))},{}],12:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const GM_1=require("../api/GM");class AvoidPosting{constructor(){this.data=JSON.parse(GM_1.GM.getResourceText("re621_dnp")).data}static getInstance(){return void 0===this.instance&&(this.instance=new AvoidPosting),this.instance}static contains(name){return void 0!==this.getInstance().data[name]}static get(name){return this.getInstance().data[name]}}exports.AvoidPosting=AvoidPosting},{"../api/GM":8}],13:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const Danbooru_1=require("../api/Danbooru"),Page_1=require("./Page"),validKeys=["1","2","3","4","5","6","7","8","9","0","-","=",".",",","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","escape","ctrl","alt","shift","return","up","down","left","right"];class Hotkeys{constructor(){this.listeners=[],Danbooru_1.Danbooru.Utility.disableShortcuts=!0,Page_1.Page.matches(Page_1.PageDefintion.post)&&"swf"===$("section#image-container").attr("data-file-ext")&&(Hotkeys.enabled=!1)}static getInstance(){return void 0===this.instance&&(this.instance=new Hotkeys),this.instance}static recordSingleKeypress(callback){$("body").attr("data-recording-hotkey","true");let keys=[];$(document).on("keydown.re621.record",event=>{const key=event.key.toLowerCase().replace(/enter/g,"return").replace(/arrow/g,"");-1!=validKeys.indexOf(key)&&keys.push(key)}),$(document).on("keyup.re621.record",()=>{if(0!==keys.length)return $(document).off(".re621.record"),callback(keys.join("+")),void $("body").attr("data-recording-hotkey","false");keys=[]})}static getListeners(){return this.getInstance().listeners}static isRegistered(key){return-1!=this.getInstance().listeners.indexOf(key)}static register(key,fn){return this.unregister(key),$(document).bind("keydown.re621.hotkey-"+key,key,(function(event){if(!Hotkeys.enabled||"true"===$("body").attr("data-recording-hotkey"))return!1;fn(event,key)})),this.getListeners().push(key),!0}static unregister(key){return!!this.isRegistered(key)&&($(document).unbind("keydown.re621.hotkey-"+key),this.getInstance().listeners=this.getListeners().filter(e=>e!==key),!0)}static registerInput(key,element,fn){return this.unregisterInput(key,element),$(element).bind("keydown.re621.hotkey-"+key,key,(function(event){if(!Hotkeys.enabled||"true"===$("body").attr("data-recording-hotkey"))return!1;fn(event,key)})),this.getListeners().push(key),!0}static unregisterInput(key,element){return!!this.isRegistered(key)&&($(element).unbind("keydown.re621.hotkey-"+key),this.getInstance().listeners=this.getListeners().filter(e=>e!==key),!0)}}exports.Hotkeys=Hotkeys,Hotkeys.enabled=!0},{"../api/Danbooru":5,"./Page":14}],14:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});class Page{constructor(){this.url=new URL(window.location.toString())}static matches(filter){filter instanceof RegExp&&(filter=[filter]);const pathname=this.getInstance().url.pathname.replace(/[\/?]$/g,"");let result=!1;return filter.forEach((function(constraint){result=result||constraint.test(pathname)})),result}static getURL(){return this.getInstance().url}static getQueryParameter(key){return this.getInstance().url.searchParams.get(key)}static setQueryParameter(key,value){this.getInstance().url.searchParams.set(key,value),this.refreshCurrentUrl()}static removeQueryParameter(key){this.getInstance().url.searchParams.delete(key),this.refreshCurrentUrl()}static refreshCurrentUrl(){const url=this.getInstance().url,searchPrefix=0===url.searchParams.toString().length?"":"?";history.replaceState({},"",url.origin+url.pathname+searchPrefix+url.searchParams.toString())}static getSiteName(){return this.getInstance().url.hostname.replace(/\.net/g,"")}static getPageID(){return this.getInstance().url.pathname.split("/")[2]}static getInstance(){return void 0===this.instance&&(this.instance=new Page),this.instance}}exports.Page=Page,exports.PageDefintion={search:/^$|^\/posts\/?$/,post:/^\/posts\/\d+\/?$/,upload:/\/uploads\/new\/?/,forum:/^\/forum_topics\/?.*/,forumPost:/^\/forum_topics\/\d+.*/,pool:/^\/pools\/.+/,set:/^\/post_sets\/.+/,popular:/^\/explore\/posts\/popular.?/,favorites:/^\/favorites\/?.*/,wiki:/^\/wiki_pages\/[0-9]+/}},{}],15:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const User_1=require("./User"),APIPost_1=require("../api/responses/APIPost"),PostHtml_1=require("../api/PostHtml"),ModuleController_1=require("../ModuleController"),ThumbnailsEnhancer_1=require("../../modules/search/ThumbnailsEnhancer");class Post{constructor(element){if(element instanceof jQuery)(element=element).removeClass("blacklisted-active"),this.apiElement=APIPost_1.APIPost.fromDomElement(element),this.htmlElement=element;else{element=element,this.apiElement=element;const upscaleMode=ModuleController_1.ModuleController.get(ThumbnailsEnhancer_1.ThumbnailEnhancer).fetchSettings("upscale");this.htmlElement=PostHtml_1.PostHtml.create(element,upscaleMode===ThumbnailsEnhancer_1.ThumbnailPerformanceMode.Always)}for(const filter of User_1.User.getBlacklist().values())filter.addPost(this,!1)}static fetchPosts(){if(void 0===this.initalPosts){const imageContainer=$("#image-container");this.initalPosts=[],0===imageContainer.length?$("#posts-container").children(".post-preview").each((index,element)=>{Post.initalPosts.push(new Post($(element)))}):this.initalPosts.push(new ViewingPost(imageContainer)),$(".post-thumbnail").each((index,element)=>{this.postThumbnails.push(new Post($(element)))})}return this.initalPosts.concat(this.addedPosts).concat(this.postThumbnails)}static appendPost(post){this.addedPosts.push(post)}static getViewingPost(){const posts=this.fetchPosts();return posts[0]instanceof ViewingPost?posts[0]:void 0}static createPreviewUrlFromMd5(md5){return""===md5?"https://static1.e621.net/images/download-preview.png":`https://static1.e621.net/data/preview/${md5.substring(0,2)}/${md5.substring(2,4)}/${md5}.jpg`}static createThumbnailURLFromMd5(md5){return`https://static1.e621.net/data/crop/${md5.substring(0,2)}/${md5.substring(2,4)}/${md5}.jpg`}applyBlacklist(){this.matchesBlacklist()?this.hide():this.show()}matchesBlacklist(){for(const filter of User_1.User.getBlacklist().values())if(filter.matchesPost(this))return!0;return!1}hide(){this.htmlElement.addClass("filtered")}show(){this.matchesBlacklist()||this.htmlElement.removeClass("filtered")}getDomElement(){return this.htmlElement}getId(){return this.apiElement.id}getTags(){return APIPost_1.APIPost.getTagString(this.apiElement)}getRating(){return this.apiElement.rating}getFavCount(){return this.apiElement.fav_count}getScoreCount(){return this.apiElement.score.total}getImageURL(){return this.apiElement.file.url}getSampleURL(){return this.apiElement.sample.url}getPreviewURL(){return this.apiElement.preview.url}getFileExtension(){return this.apiElement.file.ext}getUploaderID(){return this.apiElement.uploader_id}hasSound(){return-1!==this.getTags().indexOf("sound")}getFlags(){return APIPost_1.APIPost.getFlagString(this.apiElement)}}exports.Post=Post,Post.addedPosts=[],Post.postThumbnails=[];class ViewingPost extends Post{constructor($image){super($image),this.isFaved="none"===$("#add-to-favorites").css("display"),this.isUpvoted=$(".post-vote-up-"+this.apiElement.id).first().hasClass("score-positive"),this.isDownvoted=$(".post-vote-down-"+this.apiElement.id).first().hasClass("score-negative"),this.artistTags=this.getAllFromTaggroup("artist"),this.characterTags=this.getAllFromTaggroup("character"),this.copyrightTags=this.getAllFromTaggroup("copyright"),this.speciesTags=this.getAllFromTaggroup("species"),this.generalTags=this.getAllFromTaggroup("general"),this.metaTags=this.getAllFromTaggroup("meta"),this.loreTags=this.getAllFromTaggroup("lore")}getAllFromTaggroup(taggroup){const result=[];for(const element of $(`#tag-list .${taggroup}-tag-list`).children())result.push($(element).find(".search-tag").text().replace(/ /g,"_"));return result}getIsFaved(){return this.isFaved}getIsUpvoted(){return this.isUpvoted}getIsDownvoted(){return this.isDownvoted}getTagsFromType(tagType){return this[tagType+"Tags"]}}exports.ViewingPost=ViewingPost},{"../../modules/search/ThumbnailsEnhancer":43,"../ModuleController":2,"../api/PostHtml":9,"../api/responses/APIPost":11,"./User":18}],16:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const Tag_1=require("./Tag");var PostFilterType,Comparable;exports.PostFilter=class{constructor(input,enabled=!0){this.entries=[],this.enabled=enabled,this.matchesCount=0,this.matchesIds=new Set,this.createPostFilter(input)}createPostFilter(input){const seperatedFilters=input.split(" ");for(let filter of seperatedFilters){const inverse=filter.startsWith("-");filter=inverse?filter.substring(1):filter;let filterType=PostFilterType.getFromString(filter);void 0===filterType?filterType=PostFilterType.Tags:filter=filter.substring(filterType.length);let comparable=Comparable.getFromString(filter);void 0===comparable?comparable=Comparable.Equals:filter=filter.substring(comparable.length),this.entries.push({type:filterType,content:filter,invert:inverse,comparable:comparable})}}addPost(post,shouldDecrement){let result=!0;for(const filter of this.entries){if(!1===result)break;const content=filter.content;switch(filter.type){case PostFilterType.Flag:const flags=content;result=post.getFlags()===flags;break;case PostFilterType.Id:const id=parseInt(content);result=this.compareNumbers(post.getId(),id,filter.comparable);break;case PostFilterType.Rating:const rating=content;result=post.getRating()===rating;break;case PostFilterType.Score:const score=parseInt(content);result=this.compareNumbers(post.getScoreCount(),score,filter.comparable);break;case PostFilterType.Tags:result=this.tagsMatchesFilter(post,content);break;case PostFilterType.Uploader:const uploader=content;result=post.getUploaderID()===parseInt(uploader)}result=result!==filter.invert}return!0===result?(this.matchesCount++,this.matchesIds.add(post.getId())):!1===result&&shouldDecrement&&(this.matchesCount--,this.matchesIds.delete(post.getId())),result}matchesPost(post){return this.enabled&&this.matchesIds.has(post.getId())}compareNumbers(a,b,mode){switch(mode){case Comparable.Equals:return a===b;case Comparable.Smaller:return a<b;case Comparable.EqualsSmaller:return a<=b;case Comparable.Larger:return a>b;case Comparable.EqualsLarger:return a>=b}}tagsMatchesFilter(post,filter){if(filter.includes("*")){return Tag_1.Tag.escapeSearchToRegex(filter).test(post.getTags())}for(const tag of post.getTags().split(" "))if(tag===filter)return!0;return!1}getMatches(){return this.matchesCount}getMatchesIds(){return this.matchesIds}toggleEnabled(){this.enabled=!this.enabled}setEnabled(enabled){this.enabled=enabled}isEnabled(){return this.enabled}},function(PostFilterType){PostFilterType.Tags="tag:",PostFilterType.Id="id:",PostFilterType.Score="score:",PostFilterType.Rating="rating:",PostFilterType.Uploader="uplaoder:",PostFilterType.Flag="flag:"}(PostFilterType=exports.PostFilterType||(exports.PostFilterType={})),function(PostFilterType){PostFilterType.getFromString=function(value){for(const key of Object.keys(PostFilterType))if(value.startsWith(PostFilterType[key]))return PostFilterType[key]}}(PostFilterType=exports.PostFilterType||(exports.PostFilterType={})),function(Comparable){Comparable.EqualsSmaller="<=",Comparable.EqualsLarger=">=",Comparable.Equals="=",Comparable.Smaller="<",Comparable.Larger=">"}(Comparable=exports.Comparable||(exports.Comparable={})),function(Comparable){Comparable.getFromString=function(value){for(const key of Object.keys(Comparable))if(value.startsWith(Comparable[key]))return Comparable[key]}}(Comparable=exports.Comparable||(exports.Comparable={}))},{"./Tag":17}],17:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(TagTypes){TagTypes.Artist="artist",TagTypes.Character="character",TagTypes.Copyright="copyright",TagTypes.Species="species",TagTypes.General="general",TagTypes.Meta="meta",TagTypes.Lore="lore"}(exports.TagTypes||(exports.TagTypes={}));class Tag{static isArist(tag){return-1===Tag.nonArtistTags.indexOf(tag)}static escapeSearchToRegex(string){return new RegExp(string.replace(/[-\/\\^$+?.()|[\]{}]/g,"\\$&").replace(/\*/g,"[\\S]*?"))}}exports.Tag=Tag,Tag.nonArtistTags=["unknown_artist","unknown_artist_signature","unknown_colorist","anonymous_artist","avoid_posting","conditional_dnp","sound_warning","epilepsy_warning"]},{}],18:[function(require,module,exports){"use strict";var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){return new(P||(P=Promise))((function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator.throw(value))}catch(e){reject(e)}}function step(result){var value;result.done?resolve(result.value):(value=result.value,value instanceof P?value:new P((function(resolve){resolve(value)}))).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())}))};Object.defineProperty(exports,"__esModule",{value:!0});const Api_1=require("../api/Api"),PostFilter_1=require("./PostFilter"),Post_1=require("./Post");exports.User=class{constructor(){this.blacklist=new Map;const $ref=$("body");this.loggedin="false"==$ref.attr("data-user-is-anonymous"),this.username=$ref.attr("data-user-name")||"Anonymous",this.userid=parseInt($ref.attr("data-user-id"))||0,this.level=$ref.attr("data-user-level-string")||"Guest";const filters=$("head meta[name=blacklisted-tags]").attr("content"),blacklistEnabled=$("#disable-all-blacklists").is(":visible");if(void 0!==filters)for(const filter of JSON.parse(filters))this.addBlacklistFilter(filter,blacklistEnabled)}static isLoggedIn(){return this.getInstance().loggedin}static getUsername(){return this.getInstance().username}static getUserID(){return this.getInstance().userid}static getLevel(){return this.getInstance().level}static getBlacklist(){return this.getInstance().blacklist}static getTotalBlacklistMatches(){const filtered=new Set;for(const filter of this.getBlacklist().values())for(const id of filter.getMatchesIds())filtered.add(id);return filtered.size}addBlacklistFilter(filter,enabled=!0){let postFilter=this.blacklist.get(filter);void 0===postFilter&&(postFilter=new PostFilter_1.PostFilter(filter,enabled),this.blacklist.set(filter,postFilter));const posts=Post_1.Post.fetchPosts();for(const post of posts)postFilter.addPost(post,!1)}removeBlacklistFilter(filter){this.blacklist.delete(filter)}static getCurrentSettings(){return __awaiter(this,void 0,void 0,(function*(){return Api_1.Api.getJson("/users/"+this.getUserID()+".json")}))}static setSettings(data){return __awaiter(this,void 0,void 0,(function*(){const url="/users/"+this.getUserID()+".json",json={_method:"patch"};for(const key of Object.keys(data))json["user["+key+"]"]=data[key];yield Api_1.Api.postUrl(url,json)}))}static getInstance(){return null==this.instance&&(this.instance=new this),this.instance}}},{"../api/Api":4,"./Post":15,"./PostFilter":16}],19:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const Page_1=require("../data/Page"),GM_1=require("../api/GM");exports.DomUtilities=class{static createStructure(){GM_1.GM.addStyle(GM_1.GM.getResourceText("re621_styles")),$("<div>").attr("id","modal-container").prependTo("div#page");const $menuContainer=$("nav#nav"),$menuMain=$("menu.main");$("nav#nav menu").length<2&&$menuContainer.append("<menu>");const $menuLogo=$("<menu>").addClass("logo desktop-only").html('<a href="/" data-ytta-id="-">'+Page_1.Page.getSiteName()+"</a>");$menuContainer.prepend($menuLogo);const $menuExtra=$("<menu>").addClass("extra");if($menuMain.after($menuExtra),$("menu:last-child").addClass("submenu"),Page_1.Page.matches([Page_1.PageDefintion.search,Page_1.PageDefintion.post,Page_1.PageDefintion.favorites])){const $searchContainer=$("<div>").attr("id","re621-search").prependTo("aside#sidebar");$("aside#sidebar section#search-box").appendTo($searchContainer),$("aside#sidebar section#mode-box").appendTo($searchContainer),new IntersectionObserver(([e])=>e.target.classList.toggle("bg-foreground",e.intersectionRatio<1),{threshold:[1]}).observe($searchContainer[0])}if($("#tag-box > ul > li, #tag-list > ul > li").each((index,element)=>{const $container=$(element),$tagLink=$container.find("a.search-tag").first(),$actionsBox=$("<div>").addClass("tag-actions").attr("data-tag",$container.find("a.search-tag").text().replace(/ /g,"_")).appendTo($container);$container.find("a.wiki-link").first().insertBefore($tagLink),$("<span>").addClass("tag-action-blacklist").appendTo($actionsBox);const $countBox=$container.find(".post-count").first();$countBox.addClass("re621-post-count").attr("data-count-short",$countBox.text()).appendTo($actionsBox),$("<span>").addClass("tag-action-subscribe").appendTo($actionsBox)}),Page_1.Page.matches(Page_1.PageDefintion.upload)||Page_1.Page.matches(Page_1.PageDefintion.post)){const $textarea=$("textarea#post_description");$("<div>").addClass("dtext-previewable").append($('<div class="dtext-preview">')).insertBefore($textarea).append($textarea).wrap('<form class="simple_form"></form>')}$("div#posts-container article.post-preview").each((index,element)=>{$(element).find("a").first().addClass("preview-box")})}static addSettingsButton(config){void 0===config.name&&(config.name="T"),void 0===config.href&&(config.href=""),void 0===config.title&&(config.title=""),void 0===config.class&&(config.class="");const $tab=$("<li>").appendTo("menu.extra"),$link=$("<a>").html(config.name).attr("title",config.title).appendTo($tab);return config.href&&$link.attr("href",config.href),config.class&&$tab.addClass(config.class),$link}}},{"../api/GM":8,"../data/Page":14}],20:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const Hotkeys_1=require("../data/Hotkeys"),GM_1=require("../api/GM"),Util_1=require("./Util");class Form{constructor(config,elements,parent){this.elements=[],this.index=0,this.$inputList=new Map,void 0===config.name&&(config.name=config.id),void 0===config.columns&&(config.columns=1),void 0===config.parent&&(config.parent="body"),void 0===config.collapse&&(config.collapse=!1),void 0===config.collapseState&&(config.collapseState=!0),this.config=config,this.formID=void 0===parent?config.id:config.id+"-"+parent,elements.forEach(element=>{Array.isArray(element)?element.forEach(subElement=>{this.addElement(subElement)}):this.addElement(element)})}addElement(element){void 0===element.id&&(element.id=this.index+""),void 0===element.stretch&&(element.stretch="default"),void 0===element.label&&(element.label=""),void 0===element.value&&(element.value=""),void 0===element.required&&(element.required=!1),void 0===element.pattern&&(element.pattern=""),void 0===element.data&&(element.data=[]),void 0===element.onChange&&(element.onChange=()=>{}),this.elements.push(element),this.index++}get(force){if(void 0!==this.$form&&!force)return this.$form;let curInput;this.$form=$("<form>").attr("id",this.formID).addClass("grid-form"),this.config.columns>1&&this.$form.addClass("columns-"+this.config.columns);for(const element of this.elements)curInput=this.build(this.$form,element),Array.isArray(curInput)?curInput.forEach(input=>{this.$inputList.set(input.id,input.el)}):(this.$inputList.set(curInput.id,curInput.el),curInput.el.on("re621:form:input",(event,...data)=>{0===data.length?data=null:1===data.length&&(data=data[0]),element.onChange(event,data)}));if($(this.config.parent).on("submit","form#"+this.formID,event=>{event.preventDefault(),this.$form.trigger("re621:form:submit",this.getInputValues())}),this.$form.trigger("re621:form:create"),this.config.collapse){const section=$("<div>").addClass(this.formID+"-collapse form-collapse").append($("<h3>").addClass("form-collapse-header").html(this.config.name)).append($("<div>").addClass("form-collapse-content").append(this.$form));return section.accordion({active:this.config.collapseState,animate:!1,collapsible:!0,header:"h3"}),section}return this.$form}getInputList(...types){if(0==types.length)return this.$inputList;const results=new Map;return this.$inputList.forEach((element,key)=>{-1!==$.inArray(element.attr("data-type"),types)&&results.set(key,element)}),results}getInputValues(){const values=new Map;return this.$inputList.forEach((function(input,key){values.set(key,input.val())})),values}reset(){if(void 0!==this.$form)for(const element of this.elements){const $input=this.$form.find("#"+this.formID+"-"+element.id);switch(element.type){case"input":case"textarea":case"select":$input.val(element.value);break;case"icon":$input.val(element.value).trigger("re621:form:update");break;case"checkbox":$input.attr("checked",element.value)}}}build($form,element){return this["build"+element.type.charAt(0).toUpperCase()+element.type.slice(1)](this.$form,element)}static make(type,id,label,value,stretch="column",required,pattern,data,onChange){return{id:id,type:type,stretch:stretch,label:label,value:value,required:required,pattern:pattern,data:data,onChange:onChange}}buildInput($form,element){let labeled=!1;element.label?($("<label>").attr("for",this.formID+"-"+element.id).html(element.label).appendTo($form),labeled=!0):"default"===element.stretch&&(element.stretch="column");const $inputContainer=$("<div>").addClass("input-container").toggleClass("labeled",labeled).addClass("stretch-"+element.stretch).appendTo($form),$input=$("<input>").attr({type:"text","data-type":element.type,id:this.formID+"-"+element.id}).addClass("bg-section color-text").val(element.value).appendTo($inputContainer);let timer;return element.pattern&&$input.attr("pattern",element.pattern),element.required&&$input.attr("required",""),$input.on("input",()=>{timer&&clearTimeout(timer),timer=window.setTimeout(()=>{$input.trigger("re621:form:input",$input.val())},Form.timeout)}),{id:element.id,el:$input}}static input(id,value,label,stretch,reqs,onChange){return void 0===reqs&&(reqs={required:void 0,pattern:void 0}),this.make("input",id,label,value,stretch,reqs.required,reqs.pattern,void 0,onChange)}buildCopy($form,element){let labeled=!1;element.label?($("<label>").attr("for",this.formID+"-"+element.id).html(element.label).appendTo($form),labeled=!0):"default"===element.stretch&&(element.stretch="column");const $inputContainer=$("<div>").addClass("input-container").toggleClass("labeled",labeled).addClass("copybox").addClass("stretch-"+element.stretch).appendTo($form),$input=$("<input>").attr({type:"text","data-type":element.type,id:this.formID+"-"+element.id,readonly:""}).addClass("bg-section color-text").val(element.value).appendTo($inputContainer),$copybutton=$("<button>").attr("type","button").attr("id",this.formID+"-"+element.id+"-copy").addClass("button btn-neutral border-highlight border-left").html('<i class="far fa-copy"></i>').appendTo($inputContainer);let timer;return $($copybutton).click((function(){GM_1.GM.setClipboard($input.val())})),$input.on("input",()=>{timer&&clearTimeout(timer),timer=window.setTimeout(()=>{$input.trigger("re621:form:input",$input.val())},Form.timeout)}),{id:element.id,el:$input}}static copy(id,value="",label,stretch="column",onChange){return this.make("copy",id,label,value,stretch,void 0,void 0,void 0,onChange)}buildKey($form,element){let labeled=!1;element.label?($("<label>").attr("for",this.formID+"-"+element.id).html(element.label).appendTo($form),labeled=!0):"default"===element.stretch&&(element.stretch="column");const $inputContainer=$("<div>").addClass("input-container").toggleClass("labeled",labeled).addClass("keyinput").addClass("stretch-"+element.stretch).appendTo($form),$input=$("<input>").attr({type:"text","data-type":element.type,id:this.formID+"-"+element.id,readonly:""}).addClass("bg-section color-text").val(element.value).appendTo($inputContainer),$recordbutton=$("<button>").attr("type","button").attr("id",this.formID+"-"+element.id+"-copy").addClass("button btn-neutral border-highlight border-left").html('<i class="far fa-keyboard"></i>').appendTo($inputContainer);let occupied=!1;return $($recordbutton).click((function(){if(occupied)return;occupied=!0;const $oldKey=$input.val();$input.addClass("input-info").val("Recording"),Hotkeys_1.Hotkeys.recordSingleKeypress((function(key){key.includes("escape")?($input.removeClass("input-info").val("").trigger("re621:form:input",[key,$oldKey]),occupied=!1):Hotkeys_1.Hotkeys.isRegistered(key)?($input.val("Already Taken"),setTimeout(()=>{$input.removeClass("input-info").val($oldKey),occupied=!1},1e3)):($input.removeClass("input-info").val(key).trigger("re621:form:input",[key,$oldKey]),occupied=!1)}))})),{id:element.id,el:$input}}static key(id,value="",label,stretch="column",onChange){return this.make("key",id,label,value,stretch,void 0,void 0,void 0,onChange)}buildFile($form,element){let labeled=!1;element.label?($("<label>").attr("for",this.formID+"-"+element.id).html(element.label).appendTo($form),labeled=!0):"default"===element.stretch&&(element.stretch="column");const $inputContainer=$("<div>").addClass("input-container").toggleClass("labeled",labeled).addClass("stretch-"+element.stretch).appendTo($form),$input=$("<input>").attr({type:"file",accept:element.value,"data-type":element.type,id:this.formID+"-"+element.id}).addClass("bg-section color-text").appendTo($inputContainer);return element.pattern&&$input.attr("pattern",element.pattern),element.required&&$input.attr("required",""),$input.on("change",()=>{$input.trigger("re621:form:input",$input.prop("files"))}),{id:element.id,el:$input}}static file(id,value="",label,stretch="column",reqs,onChange){return void 0===reqs&&(reqs={required:void 0,pattern:void 0}),this.make("file",id,label,value,stretch,reqs.required,reqs.pattern,void 0,onChange)}buildIcon($form,element){let labeled=!1;element.label?($("<label>").attr("for",this.formID+"-"+element.id).html(element.label).appendTo($form),labeled=!0):"default"===element.stretch&&(element.stretch="column");const $inputContainer=$("<div>").addClass("input-container").toggleClass("labeled",labeled).addClass("stretch-"+element.stretch).appendTo($form),$input=$("<input>").attr({type:"text","data-type":element.type,id:this.formID+"-"+element.id}).css("display","none").val(element.value).appendTo($inputContainer),$selectContainer=$("<div>").addClass("icon-picker").appendTo($inputContainer);return element.data.forEach(icon=>{$("<a>").attr("href","#").attr("data-value",icon.value).html(icon.name).appendTo($selectContainer)}),$selectContainer.find("a").click(event=>{event.preventDefault(),$selectContainer.find("a").removeClass("active");const $target=$(event.target);$input.val($target.attr("data-value")),$target.addClass("active"),$input.trigger("re621:form:input",$input.val())}),""===element.value?$selectContainer.find("a").first().click():$selectContainer.find("a[data-value='"+element.value+"']").first().click(),$input.on("re621:form:update",()=>{""==$input.val()?$selectContainer.find("a").first().click():$selectContainer.find("a[data-value='"+$input.val()+"']").first().click()}),element.pattern&&$input.attr("pattern",element.pattern),element.required&&$input.attr("required",""),{id:element.id,el:$input}}static icon(id,value="",label,stretch="column",onChange){return this.make("icon",id,label,value,stretch,void 0,void 0,void 0,onChange)}buildCheckbox($form,element){"default"===element.stretch&&(element.stretch="column");const $inputContainer=$("<div>").addClass("input-container").addClass("checkbox-switch").addClass("stretch-"+element.stretch).appendTo($form),$input=$("<input>").attr({type:"checkbox","data-type":element.type,id:this.formID+"-"+element.id}).addClass("switch").attr("checked",element.value).appendTo($inputContainer);return $("<label>").attr("for",this.formID+"-"+element.id).addClass("switch").appendTo($inputContainer),element.label&&$("<label>").attr("for",this.formID+"-"+element.id).html(element.label).appendTo($inputContainer),$input.on("change",()=>{$input.trigger("re621:form:input",$input.is(":checked"))}),{id:element.id,el:$input}}static checkbox(id,value="",label,stretch="column",onChange){return this.make("checkbox",id,label,value,stretch,void 0,void 0,void 0,onChange)}buildRadio($form,element){let labeled=!1;element.label?($("<label>").attr("for",this.formID+"-"+element.id).html(element.label).appendTo($form),labeled=!0):"default"===element.stretch&&(element.stretch="column");const $inputContainer=$("<div>").addClass("input-container").addClass("radio-switch").toggleClass("labeled",labeled).addClass("stretch-"+element.stretch).appendTo($form),$input=$("<input>").addClass("display-hidden").attr("id",this.formID+"-"+element.id+"-input").val(element.value).appendTo($inputContainer);let $radioContainer,checked;return element.data.forEach((entry,index)=>{checked=element.value===entry.value,$radioContainer=$("<div>").addClass("radio-element").toggleClass("bg-section",!checked).toggleClass("bg-highlight",checked).attr("id",this.formID+"-"+element.id+"-"+index+"-cont").appendTo($inputContainer),$("<input>").attr({type:"radio",name:this.formID+"-"+element.id,id:this.formID+"-"+element.id+"-"+index}).prop("checked",checked).val(entry.value).appendTo($radioContainer).on("click",(function(){$input.val($(this).val()).trigger("change"),$inputContainer.find("div.radio-element.bg-highlight").toggleClass("bg-section bg-highlight"),$(this).parent().toggleClass("bg-section bg-highlight")})),$("<label>").attr("for",this.formID+"-"+element.id+"-"+index).html(entry.name).appendTo($radioContainer)}),element.required&&$input.attr("required",""),$input.on("change",()=>{$input.trigger("re621:form:input",$input.val())}),{id:element.id,el:$input}}static radio(id,value="",label,data,stretch="column",onChange){return this.make("radio",id,label,value,stretch,void 0,void 0,data,onChange)}buildButton($form,element){let labeled=!1;element.label&&($("<label>").attr("for",this.formID+"-"+element.id).html(element.label).appendTo($form),labeled=!0);const $inputContainer=$("<div>").addClass("input-container").toggleClass("labeled",labeled).addClass("stretch-"+element.stretch).appendTo($form),$input=$("<button>").attr({type:"button","data-type":element.type,id:this.formID+"-"+element.id}).addClass("button btn-neutral").html(element.value).appendTo($inputContainer);return element.pattern&&$input.attr("pattern",element.pattern),element.required&&$input.attr("required",""),{id:element.id,el:$input}}static button(id,value="",label,stretch="column",onChange){return this.make("button",id,label,value,stretch,void 0,void 0,void 0,onChange)}buildSubmit($form,element){let labeled=!1;element.label&&($("<label>").attr("for",this.formID+"-"+element.id).html(element.label).appendTo($form),labeled=!0);const $inputContainer=$("<div>").addClass("input-container").toggleClass("labeled",labeled).addClass("stretch-"+element.stretch).appendTo($form),$input=$("<button>").attr({type:"submit","data-type":element.type,id:this.formID+"-"+element.id}).addClass("button btn-neutral").html(element.value).appendTo($inputContainer);return element.pattern&&$input.attr("pattern",element.pattern),element.required&&$input.attr("required",""),{id:element.id,el:$input}}static submit(id,value="",label,stretch="column",onChange){return this.make("submit",id,label,value,stretch,void 0,void 0,void 0,onChange)}buildTextarea($form,element){let labeled=!1;element.label?($("<label>").attr("for",this.formID+"-"+element.id).html(element.label).appendTo($form),labeled=!0):"default"===element.stretch&&(element.stretch="column");const $inputContainer=$("<div>").addClass("input-container").toggleClass("labeled",labeled).addClass("stretch-"+element.stretch).appendTo($form),$input=$("<textarea>").attr({"data-type":element.type,id:this.formID+"-"+element.id}).addClass("bg-section color-text").val(element.value).appendTo($inputContainer);let timer;return element.pattern&&$input.attr("pattern",element.pattern),element.required&&$input.attr("required",""),$input.on("input",()=>{timer&&clearTimeout(timer),timer=window.setTimeout(()=>{$input.trigger("re621:form:input",$input.val())},Form.timeout)}),{id:element.id,el:$input}}static textarea(id,value="",label,stretch="column",reqs,onChange){return void 0===reqs&&(reqs={required:void 0,pattern:void 0}),this.make("textarea",id,label,value,stretch,reqs.required,reqs.pattern,void 0,onChange)}buildSelect($form,element){let labeled=!1;element.label?($("<label>").attr("for",this.formID+"-"+element.id).html(element.label).appendTo($form),labeled=!0):"default"===element.stretch&&(element.stretch="column");const $inputContainer=$("<div>").addClass("input-container").toggleClass("labeled",labeled).addClass("stretch-"+element.stretch).appendTo($form),$input=$("<select>").attr({"data-type":element.type,id:this.formID+"-"+element.id}).addClass("button btn-neutral").appendTo($inputContainer);return element.data.forEach((function(entry){$("<option>").val(entry.value).text(entry.name).appendTo($input)})),$input.val(element.value),element.required&&$input.attr("required",""),$input.on("change",()=>{$input.trigger("re621:form:input",$input.val())}),{id:element.id,el:$input}}static select(id,value="",label,data,stretch="column",onChange){return this.make("select",id,label,value,stretch,void 0,void 0,data,onChange)}buildDiv($form,element){let labeled=!1;element.label?($("<label>").attr("for",this.formID+"-"+element.id).html(element.label).appendTo($form),labeled=!0):"default"===element.stretch&&(element.stretch="column");const $inputContainer=$("<div>").addClass("input-container").toggleClass("labeled",labeled).addClass("stretch-"+element.stretch).appendTo($form),$input=$("<div>").addClass("input-div").attr({"data-type":element.type,id:this.formID+"-"+element.id}).append(element.value).appendTo($inputContainer);return{id:element.id,el:$input}}static div(value="",stretch="full"){return this.make("div",Util_1.Util.makeID(),void 0,value,stretch)}static header(value="",stretch="full"){return this.make("div",Util_1.Util.makeID(),void 0,$("<h3>").html(value),stretch)}static label(value="",stretch="column"){return this.make("div",Util_1.Util.makeID(),void 0,value,stretch)}static status(value="",stretch="full"){return this.make("div",Util_1.Util.makeID()," ",value,stretch)}static spacer(stretch="column"){return this.make("div",Util_1.Util.makeID(),void 0," ",stretch)}buildHr($form,element){let labeled=!1;element.label?($("<label>").attr("for",this.formID+"-"+element.id).html(element.label).appendTo($form),labeled=!0):"default"===element.stretch&&(element.stretch="column");const $inputContainer=$("<div>").addClass("input-container").toggleClass("labeled",labeled).addClass("stretch-"+element.stretch).appendTo($form),$input=$("<hr>").attr({"data-type":element.type,id:this.formID+"-"+element.id}).addClass("color-text-muted").appendTo($inputContainer);return{id:element.id,el:$input}}static hr(stretch="full"){return this.make("hr",Util_1.Util.makeID(),void 0,void 0,stretch)}buildForm($form,element){let labeled=!1;element.label?($("<label>").attr("for",this.formID+"-"+element.id).html(element.label).appendTo($form),labeled=!0):"default"===element.stretch&&(element.stretch="column");const $inputContainer=$("<div>").addClass("input-container").toggleClass("labeled",labeled).addClass("stretch-"+element.stretch).appendTo($form),$innerForm=element.value;$innerForm.get().appendTo($inputContainer);const inputs=[];return $innerForm.$inputList.forEach((value,key)=>{inputs.push({id:$innerForm.config.id+"-"+key,el:value})}),inputs}static section(config,elements,label,stretch="full"){return this.make("form",config.id,label,new Form(config,elements),stretch)}static subsection(config,name,elements,label,stretch="full"){return config.collapse=!0,config.name=name,config.collapseState=!1,this.make("form",config.id,label,new Form(config,elements),stretch)}}exports.Form=Form,Form.timeout=500},{"../api/GM":8,"../data/Hotkeys":13,"./Util":24}],21:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.Modal=class{constructor(config){if(this.triggers=[],this.uid=Math.round((new Date).getTime()+100*Math.random()),this.config=this.validateConfig(config),this.$modal=$("<div>").appendTo("div#modal-container").attr("title",config.title).append(this.config.content).dialog({autoOpen:!1,appendTo:"div#modal-container",closeOnEscape:config.escapable,draggable:config.draggable,resizable:config.resizable,width:"auto",minWidth:config.minWidth,minHeight:config.minHeight,position:{my:config.position.my,at:config.position.at,of:$("div#modal-container"),within:$("div#modal-container"),collision:"none"},classes:{"ui-dialog":"bg-foreground border-section color-text","ui-dialog-titlebar":"color-text","ui-dialog-titlebar-close":"border-foreground"}}),this.$modal.dialog("widget").addClass("re621-ui-dialog").removeClass("ui-dialog ui-widget ui-widget-content").draggable({disabled:!config.draggable,containment:"parent"}).resizable({disabled:!config.resizable,containment:"parent"}),config.fixed){const widget=this.$modal.dialog("widget");widget.addClass("modal-fixed"),this.$modal.dialog("option","position",{my:config.position.my,at:config.position.at,of:window,within:"div#modal-container",collision:"none"}),widget.draggable("option","containment","window"),widget.resizable("option","containment","window");let timer=0,left=widget.css("left"),top=widget.css("top");const style=$("<style>").attr("id","style-"+this.uid).attr("type","text/css").html("\n                    .modal-fixed-"+this.uid+" {\n                        left: "+left+" !important;\n                        top: "+top+" !important;\n                    }").appendTo("head");$(window).scroll(()=>{timer?clearTimeout(timer):(left=widget.css("left"),top=widget.css("top"),style.html("\n                        .modal-fixed-"+this.uid+" {\n                            left: "+left+" !important;\n                            top: "+top+" !important;\n                        }"),widget.addClass("modal-fixed-"+this.uid)),timer=window.setTimeout(()=>{timer=0,widget.removeClass("modal-fixed-"+this.uid),widget.css("left",left),widget.css("top",top)},500)})}config.reserveHeight&&this.$modal.dialog("widget").addClass("modal-reserve-height");for(const trigger of config.triggers)this.registerTrigger(trigger)}getUID(){return this.uid}validateConfig(config){return void 0===config.title&&(config.title="Dialog"),void 0===config.content&&(config.content=$("")),void 0===config.triggers&&(config.triggers=[]),void 0===config.triggerMulti&&(config.triggerMulti=!1),void 0===config.escapable&&(config.escapable=!0),void 0===config.draggable&&(config.draggable=!0),void 0===config.resizable&&(config.resizable=!1),void 0===config.minWidth&&(config.minWidth=150),void 0===config.minHeight&&(config.minHeight=150),void 0===config.fixed&&(config.fixed=!1),void 0===config.reserveHeight&&(config.reserveHeight=!1),void 0===config.disabled&&(config.disabled=!1),void 0===config.position&&(config.position={my:"center",at:"center"}),config}addContent($content){this.$modal.append($content)}registerTrigger(trigger){void 0===trigger.event&&(trigger.event="click"),0==this.triggers.length&&(this.$activeTrigger=trigger.element),this.triggers.push(trigger),trigger.element.on(trigger.event,event=>{if(this.isDisabled())return;const $target=$(event.currentTarget);return this.config.triggerMulti&&!this.$activeTrigger.is($target)&&this.isOpen()&&this.toggle(),this.$activeTrigger=$target,event.preventDefault(),this.toggle(),!1})}getElement(){return this.$modal}toggle(){this.isOpen()?this.close():this.open()}isOpen(){return this.$modal.dialog("isOpen")}open(){return this.$modal.dialog("open")}close(){return this.$modal.dialog("close")}isDisabled(){return this.config.disabled}enable(){this.config.disabled=!1}disable(){this.config.disabled=!0}destroy(){this.$modal.dialog("destroy"),this.$modal.remove()}getActiveTrigger(){return this.$activeTrigger}}},{}],22:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const Modal_1=require("./Modal");class Prompt extends Modal_1.Modal{constructor(title="Prompt"){super({title:title,fixed:!0,minHeight:50}),this.createForm(),this.addContent(this.$form),this.open(),this.$input.focus(),this.promise=new Promise((resolve,reject)=>{this.$form.submit(event=>{event.preventDefault(),this.destroy(),resolve(this.$input.val()),reject()})})}createForm(){this.$form=$("<form>").addClass("prompt-input"),this.$input=$("<input>").attr("id","text").appendTo(this.$form),$("<button>").attr("type","submit").html("Submit").appendTo(this.$form)}getPromise(){return this.promise}}exports.Prompt=Prompt},{"./Modal":21}],23:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.Tabbed=class{constructor(config){this.config=config}create(){this.$container=$("<div>");const $tabList=$("<ul>").appendTo(this.$container);return this.config.content.forEach((entry,index)=>{const $tab=$("<a>").attr("href","#fragment-"+index).html(entry.name);$("<li>").appendTo($tabList).append($tab),$("<div>").attr("id","fragment-"+index).append(entry.page).appendTo(this.$container)}),this.$container.tabs({classes:{"ui-tabs":"color-text","ui-tabs-tab":"color-text"}}),this.$container.tabs("widget").find(".ui-tabs-nav li").off("keydown"),this.$container}replace(index,$element){this.$container.find("#fragment-"+index).children().replaceWith($element)}}},{}],24:[function(require,module,exports){"use strict";var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){return new(P||(P=Promise))((function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator.throw(value))}catch(e){reject(e)}}function step(result){var value;result.done?resolve(result.value):(value=result.value,value instanceof P?value:new P((function(resolve){resolve(value)}))).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())}))};Object.defineProperty(exports,"__esModule",{value:!0});const GM_1=require("../api/GM");exports.Util=class{static timeAgo(time){switch(typeof time){case"string":time=+new Date(time);break;case"object":time=time.getTime()}const timeFormats=[[60,"seconds",1],[120,"1 minute ago","1 minute from now"],[3600,"minutes",60],[7200,"1 hour ago","1 hour from now"],[86400,"hours",3600],[172800,"Yesterday","Tomorrow"],[604800,"days",86400],[1209600,"Last week","Next week"],[2419200,"weeks",604800],[4838400,"Last month","Next month"],[29030400,"months",2419200],[58060800,"Last year","Next year"],[290304e4,"years",29030400],[580608e4,"Last century","Next century"],[580608e5,"centuries",290304e4]];let seconds=(+new Date-time)/1e3,token="ago",listChoice=1;if(seconds>=0&&seconds<2)return"Just now";seconds<0&&(seconds=Math.abs(seconds),token="from now",listChoice=2);let format,i=0;for(;format=timeFormats[i++];)if(seconds<format[0])return"string"==typeof format[2]?format[listChoice]:Math.floor(seconds/format[2])+" "+format[1]+" "+token;return time+""}static downloadJSON(exportObj,exportName){const dataStr="data:text/json;charset=utf-8,"+encodeURIComponent(JSON.stringify(exportObj,null,4)),downloadAnchorNode=document.createElement("a");downloadAnchorNode.setAttribute("href",dataStr),downloadAnchorNode.setAttribute("download",exportName+".json"),document.body.appendChild(downloadAnchorNode),downloadAnchorNode.click(),downloadAnchorNode.remove()}static userscriptRequest(url){return __awaiter(this,void 0,void 0,(function*(){return new Promise(resolve=>{GM_1.GM.xmlHttpRequest({method:"GET",url:url,headers:{"User-Agent":window.re621.useragent},onload:res=>{resolve(res.responseText)}})})}))}static getImageBlob(url){return __awaiter(this,void 0,void 0,(function*(){return new Promise(resolve=>{GM_1.GM.xmlHttpRequest({method:"GET",url:url,headers:{"User-Agent":window.re621.useragent},responseType:"blob",onload:result=>{resolve(result.response)}})})}))}static getImageAsDataURL(url){return __awaiter(this,void 0,void 0,(function*(){return new Promise(resolve=>{GM_1.GM.xmlHttpRequest({method:"GET",url:url,headers:{"User-Agent":window.re621.useragent},responseType:"blob",onload:result=>{const reader=new FileReader;reader.onloadend=function(){resolve(reader.result.toString())},reader.readAsDataURL(result.response)}})})}))}static getDatetimeShort(){function twoDigit(n){return(n<10?"0":"")+n}const date=new Date;return(date.getFullYear()+"").substring(2)+twoDigit(date.getMonth()+1)+twoDigit(date.getDate())+"-"+twoDigit(date.getHours())+twoDigit(date.getMinutes())}static chunkArray(input,size){const result=[];for(let i=0;i<input.length;i+=size)result.push(input.slice(i,i+size));return result}static quickParseMarkdown(input){return input.replace(/\*\*(.*?)\*\*/gm,"<strong>$1</strong>").replace(/^[-]+(.*)?/gim,"<ul><li>$1</li></ul>").replace(/\<\/ul\>\r\n\<ul\>/gm,"").replace(/\n(?!<)/gm,"<br />")}static makeID(length=8){let result="";const chars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",charLength=chars.length;for(let i=0;i<length;i++)result+=chars.charAt(Math.floor(Math.random()*charLength));return result}}},{"../api/GM":8}],25:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const DomUtilities_1=require("./components/structure/DomUtilities"),ModuleController_1=require("./components/ModuleController"),FormattingHelper_1=require("./modules/general/FormattingHelper"),HeaderCustomizer_1=require("./modules/general/HeaderCustomizer"),Miscellaneous_1=require("./modules/general/Miscellaneous"),ThemeCustomizer_1=require("./modules/general/ThemeCustomizer"),DownloadCustomizer_1=require("./modules/post/DownloadCustomizer"),ImageScaler_1=require("./modules/post/ImageScaler"),PoolNavigator_1=require("./modules/post/PoolNavigator"),PostViewer_1=require("./modules/post/PostViewer"),TitleCustomizer_1=require("./modules/post/TitleCustomizer"),BlacklistEnhancer_1=require("./modules/search/BlacklistEnhancer"),InstantSearch_1=require("./modules/search/InstantSearch"),InfiniteScroll_1=require("./modules/search/InfiniteScroll"),MassDownloader_1=require("./modules/search/MassDownloader"),ThumbnailsEnhancer_1=require("./modules/search/ThumbnailsEnhancer"),TinyAlias_1=require("./modules/misc/TinyAlias"),WikiEnhancer_1=require("./modules/misc/WikiEnhancer"),PoolDownloader_1=require("./modules/pools/PoolDownloader"),SubscriptionManager_1=require("./modules/subscriptions/SubscriptionManager"),ForumSubscriptions_1=require("./modules/subscriptions/ForumSubscriptions"),PoolSubscriptions_1=require("./modules/subscriptions/PoolSubscriptions"),TagSubscriptions_1=require("./modules/subscriptions/TagSubscriptions"),SettingsController_1=require("./modules/general/SettingsController"),loadOrder=[FormattingHelper_1.FormattingManager,HeaderCustomizer_1.HeaderCustomizer,ThemeCustomizer_1.ThemeCustomizer,Miscellaneous_1.Miscellaneous,DownloadCustomizer_1.DownloadCustomizer,ImageScaler_1.ImageScaler,PoolNavigator_1.PoolNavigator,PostViewer_1.PostViewer,TitleCustomizer_1.TitleCustomizer,BlacklistEnhancer_1.BlacklistEnhancer,InfiniteScroll_1.InfiniteScroll,InstantSearch_1.InstantSearch,MassDownloader_1.MassDownloader,ThumbnailsEnhancer_1.ThumbnailEnhancer,TinyAlias_1.TinyAlias,WikiEnhancer_1.WikiEnhancer,PoolDownloader_1.PoolDownloader,SubscriptionManager_1.SubscriptionManager,SettingsController_1.SettingsController],subscriptions=[PoolSubscriptions_1.PoolSubscriptions,ForumSubscriptions_1.ForumSubscriptions,TagSubscriptions_1.TagSubscriptions];DomUtilities_1.DomUtilities.createStructure(),subscriptions.forEach(module=>{ModuleController_1.ModuleController.register(module),SubscriptionManager_1.SubscriptionManager.register(module)}),loadOrder.forEach(module=>{ModuleController_1.ModuleController.register(module)})},{"./components/ModuleController":2,"./components/structure/DomUtilities":19,"./modules/general/FormattingHelper":26,"./modules/general/HeaderCustomizer":27,"./modules/general/Miscellaneous":28,"./modules/general/SettingsController":29,"./modules/general/ThemeCustomizer":30,"./modules/misc/TinyAlias":31,"./modules/misc/WikiEnhancer":32,"./modules/pools/PoolDownloader":33,"./modules/post/DownloadCustomizer":34,"./modules/post/ImageScaler":35,"./modules/post/PoolNavigator":36,"./modules/post/PostViewer":37,"./modules/post/TitleCustomizer":38,"./modules/search/BlacklistEnhancer":39,"./modules/search/InfiniteScroll":40,"./modules/search/InstantSearch":41,"./modules/search/MassDownloader":42,"./modules/search/ThumbnailsEnhancer":43,"./modules/subscriptions/ForumSubscriptions":44,"./modules/subscriptions/PoolSubscriptions":45,"./modules/subscriptions/SubscriptionManager":46,"./modules/subscriptions/TagSubscriptions":47}],26:[function(require,module,exports){"use strict";var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){return new(P||(P=Promise))((function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator.throw(value))}catch(e){reject(e)}}function step(result){var value;result.done?resolve(result.value):(value=result.value,value instanceof P?value:new P((function(resolve){resolve(value)}))).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())}))};Object.defineProperty(exports,"__esModule",{value:!0});const RE6Module_1=require("../../components/RE6Module"),Prompt_1=require("../../components/structure/Prompt"),Modal_1=require("../../components/structure/Modal"),Form_1=require("../../components/structure/Form"),Hotkeys_1=require("../../components/data/Hotkeys"),Api_1=require("../../components/api/Api"),iconDefinitions=[{value:"spacer",name:"&nbsp;"},{value:"bold",name:"&#xf032"},{value:"italic",name:"&#xf033"},{value:"strikethrough",name:"&#xf0cc"},{value:"underscore",name:"&#xf0cd"},{value:"superscript",name:"&#xf12b"},{value:"subscript",name:"&#xf12c"},{value:"spoiler",name:"&#xf29e"},{value:"color",name:"&#xf53f"},{value:"code",name:"&#xf121"},{value:"heading",name:"&#xf1dc"},{value:"quote",name:"&#xf10e"},{value:"section",name:"&#xf103"},{value:"tag",name:"&#xf02b"},{value:"wiki",name:"&#xf002"},{value:"keyboard",name:"&#xf11c"},{value:"link",name:"&#xf0c1"},{value:"unlink",name:"&#xf127"},{value:"link_prompt",name:"&#xf35d"},{value:"lemon",name:"&#xf094"},{value:"pepper",name:"&#xf816"},{value:"drumstick",name:"&#xf6d7"},{value:"magic",name:"&#xf0d0"},{value:"clipboard",name:"&#xf328"},{value:"paperclip",name:"&#xf0c6"},{value:"fountainpen",name:"&#xf5ad"},{value:"comment",name:"&#xf27a"},{value:"bell",name:"&#xf0f3"},{value:"bullhorn",name:"&#xf0a1"},{value:"heart",name:"&#xf004"},{value:"plus-square",name:"&#xf0fe"},{value:"minus-square",name:"&#xf146"},{value:"baby",name:"&#xf77c"},{value:"scales",name:"&#xf24e"},{value:"chart-pie",name:"&#xf200"},{value:"dice",name:"&#xf522"},{value:"hotdog",name:"&#xf80f"},{value:"leaf",name:"&#xf06c"},{value:"paper-plane",name:"&#xf1d8"},{value:"anchor",name:"&#xf13d"},{value:"crown",name:"&#xf521"},{value:"crow",name:"&#xf520"}];class FormattingManager extends RE6Module_1.RE6Module{constructor(){super(...arguments),this.formatters=[],this.index=0}getDefaultSettings(){return{enabled:!0,buttonsActive:[{name:"Bold",icon:"bold",text:"[b]%selection%[/b]"},{name:"Italic",icon:"italic",text:"[i]%selection%[/i]"},{name:"Strikethrough",icon:"strikethrough",text:"[s]%selection%[/s]"},{name:"Underscore",icon:"underscore",text:"[u]%selection%[/u]"},{name:"Spacer",icon:"spacer",text:""},{name:"Heading",icon:"heading",text:"h2.%selection%"},{name:"Spoiler",icon:"spoiler",text:"[spoiler]%selection%[/spoiler]"},{name:"Code",icon:"code",text:"`%selection%`"},{name:"Quote",icon:"quote",text:"[quote]%selection%[/quote]"},{name:"Section",icon:"section",text:"[section=Title]%selection%[/section]"},{name:"Tag",icon:"tag",text:"{{%selection%}}"},{name:"Link",icon:"link",text:'"%selection%":'}],buttonInactive:[{name:"Superscript",icon:"superscript",text:"[sup]%selection%[/sup]"},{name:"Color",icon:"color",text:"[color=]%selection%[/color]"},{name:"Wiki",icon:"wiki",text:"[[%selection%]]"},{name:"Link (Prompted)",icon:"link_prompt",text:'"%selection%":%prompt:Address%'}],hotkeySubmit:"alt+return",hotkeySubmitActive:!0}}create(){$("div.dtext-previewable:has(textarea)").each((i,element)=>{const $container=$(element),newFormatter=new FormattingHelper($container,this,this.index);this.formatters.push(newFormatter),$container.on("re621:formatter:update",()=>{this.formatters.forEach(element=>{element.getContainer().is(newFormatter.getContainer())||element.loadButtons()})}),this.index++})}destroy(){this.formatters.forEach(entry=>{entry.destroy()}),this.formatters=[]}}exports.FormattingManager=FormattingManager;class FormattingHelper{constructor($targetContainer,parent,id){this.parent=parent,this.id=id,this.$container=$targetContainer,this.createDOM(),this.$form.submit(event=>{""===this.$textarea.val()&&(event.preventDefault(),this.$container.addClass("invalid"))}),this.registerHotkeys()}registerHotkeys(){Hotkeys_1.Hotkeys.registerInput(this.parent.fetchSettings("hotkeySubmit"),this.$textarea,()=>{this.parent.fetchSettings("hotkeySubmitActive")&&this.$form.submit()})}getContainer(){return this.$container}createDOM(){this.$container.attr("data-editing","true"),this.$container.attr("data-drawer","false"),this.$form=this.$container.parents("form.simple_form").first(),this.$textarea=this.$container.find("textarea"),this.$preview=this.$container.find("div.dtext-preview"),this.createToolbar(),this.createButtonDrawer(),this.createCharacterCounter(),this.$form.find("input.dtext-preview-button").css("display","none"),this.$form.find("input[type=submit]").addClass("button btn-neutral border-foreground dtext-submit"),this.$container.addClass("bg-section color-text"),this.$form.addClass("formatting-helper"),this.$textarea.addClass("bg-section border-foreground color-text"),this.$preview.addClass("bg-section border-foreground color-text"),this.$formatButtons.sortable({helper:"clone",forceHelperSize:!0,cursor:"grabbing",containment:this.$container,connectWith:this.$formatButtonsDrawer,disabled:!0,update:()=>{this.saveButtons()}}),this.$formatButtonsDrawer.sortable({helper:"clone",forceHelperSize:!0,cursor:"grabbing",containment:this.$container,connectWith:this.$formatButtons,disabled:!0});const $editButtonsForm=new Form_1.Form({id:"dtext-edit-button-"+this.id,parent:"div#modal-container",columns:2},[{id:"name",type:"input",label:"Name",stretch:"mid"},{id:"icon",type:"icon",label:"Icon",data:iconDefinitions,stretch:"mid"},{id:"text",type:"input",label:"Content",stretch:"mid"},{id:"delete",type:"button",value:"Delete",stretch:"column"},{id:"update",type:"submit",value:"Update",stretch:"column"},{id:"hr",type:"hr",stretch:"mid"},{id:"vartext",type:"div",value:"Available variables:",stretch:"mid"},{id:"var-select",label:"Selected text",value:"%selection%",type:"copy",stretch:"mid"},{id:"var-prompt",label:"Prompt for input",value:"%prompt%",type:"copy",stretch:"mid"}]);this.$editButtonsModal=new Modal_1.Modal({title:"Edit Button",content:$editButtonsForm.get(),triggers:[],triggerMulti:!0,fixed:!0,disabled:!0}),this.$editButtonsModal.getElement().on("dialogopen",()=>{const $button=this.$editButtonsModal.getActiveTrigger().parent(),$updateTabInputs=$editButtonsForm.getInputList();$updateTabInputs.get("name").val($button.attr("data-name")),$updateTabInputs.get("icon").val($button.attr("data-icon")).trigger("re621:form:update"),$updateTabInputs.get("text").val($button.attr("data-text"))}),$editButtonsForm.get().on("re621:form:submit",(event,data)=>{event.preventDefault(),this.updateButton(this.$editButtonsModal.getActiveTrigger().parent(),{name:data.get("name"),icon:data.get("icon"),text:data.get("text")}),this.$editButtonsModal.close()}),$editButtonsForm.getInputList().get("delete").click(event=>{event.preventDefault(),this.deleteButton(this.$editButtonsModal.getActiveTrigger().parent()),this.$editButtonsModal.close()}),this.loadButtons()}destroy(){this.$container.find(".comment-header, .dtext-button-drawer-title, .dtext-button-drawer, .dtext-character-counter-box").remove(),this.$form.find("input.dtext-preview-button").css("display","")}createToolbar(){const $bar=$("<div>").addClass("comment-header").addClass("bg-highlight border-foreground").prependTo(this.$container);this.$toggleTabs=$("<div>").addClass("comment-tabs").appendTo($bar),$("<a>").html("Write").addClass("toggle-editing").addClass("active").appendTo(this.$toggleTabs),$("<a>").html("Preview").addClass("toggle-preview").appendTo(this.$toggleTabs),this.$toggleTabs.find("a").click(e=>{e.preventDefault(),this.toggleEditing()}),this.$formatButtons=$("<div>").addClass("comment-buttons").appendTo($bar);const $drawerButtonBox=$("<li>").appendTo($("<div>").addClass("settings-buttons").appendTo($bar));$("<a>").html("&#xf1de").attr("title","Settings").appendTo($drawerButtonBox).click(event=>{event.preventDefault(),this.toggleButtonDrawer()})}createButtonDrawer(){const $newFormatButton=$("<a>").html("Add Button");$("<div>").addClass("dtext-button-drawer-title").addClass("bg-highlight border-foreground color-text").append($newFormatButton).appendTo(this.$container);const newFormatForm=new Form_1.Form({id:"dtext-custom-button-"+this.id,parent:"div#modal-container",columns:2},[{id:"name",type:"input",label:"Name",stretch:"mid"},{id:"icon",type:"icon",label:"Icon",data:iconDefinitions,stretch:"mid"},{id:"text",type:"input",label:"Content",stretch:"mid"},{id:"icon-spacer",type:"div",value:" ",stretch:"column"},{id:"create",type:"submit",value:"Create",stretch:"column"},{id:"hr",type:"hr",stretch:"mid"},{id:"vartext",type:"div",value:"Available variables:",stretch:"mid"},{id:"var-select",label:"Selected text",value:"%selection%",type:"copy",stretch:"mid"},{id:"var-prompt",label:"Prompt for input",value:"%prompt%",type:"copy",stretch:"mid"}]),newFormatModal=new Modal_1.Modal({title:"New Custom Button",content:newFormatForm.get(),triggers:[{element:$newFormatButton}],fixed:!0});newFormatForm.get().on("re621:form:submit",(event,data)=>{event.preventDefault(),this.createButton({name:data.get("name"),icon:data.get("icon"),text:data.get("text")}).box.appendTo(this.$formatButtonsDrawer),newFormatForm.reset(),newFormatModal.close(),this.saveButtons()}),this.$formatButtonsDrawer=$("<div>").addClass("dtext-button-drawer").addClass("bg-section border-foreground color-text").appendTo(this.$container)}createCharacterCounter(){const charCounter=$("<span>").addClass("char-counter").html((this.$textarea.val()+"").length+" / 50000");$("<div>").addClass("dtext-character-counter-box").append(charCounter).appendTo(this.$container),this.$textarea.keyup(()=>{charCounter.html((this.$textarea.val()+"").length+" / 50000")})}loadButtons(){this.$formatButtons.empty(),this.parent.fetchSettings("buttonsActive",!0).forEach(data=>{const buttonElement=this.createButton(data);buttonElement.box.appendTo(this.$formatButtons),""===buttonElement.box.attr("data-text")&&(buttonElement.button.addClass("disabled"),buttonElement.button.removeAttr("title"))}),this.$formatButtonsDrawer.empty(),this.parent.fetchSettings("buttonInactive",!0).forEach(data=>{this.createButton(data).box.appendTo(this.$formatButtonsDrawer)})}saveButtons(){let buttonData=[];function fetchData(element){const $button=$(element);return{name:$button.attr("data-name"),icon:$button.attr("data-icon"),text:$button.attr("data-text")}}this.$formatButtons.find("li").each((function(i,element){buttonData.push(fetchData(element))})),this.parent.pushSettings("buttonsActive",buttonData),buttonData=[],this.$formatButtonsDrawer.find("li").each((function(i,element){buttonData.push(fetchData(element))})),this.parent.pushSettings("buttonInactive",buttonData),this.$container.trigger("re621:formatter:update",[this])}parseButtonConfig(config){return void 0===config.name&&(config.name="New Button"),void 0===config.icon&&(config.icon="#"),void 0===config.text&&(config.text=""),config}createButton(config){config=this.parseButtonConfig(config);const box=$("<li>").attr({"data-name":config.name,"data-icon":config.icon,"data-text":config.text}).appendTo(this.$formatButtons),button=$("<a>").html(this.getIcon(config.icon)).addClass("format-button").attr("title",config.name).appendTo(box);return this.$editButtonsModal.registerTrigger({element:button}),button.click(event=>{event.preventDefault(),"false"===this.$container.attr("data-drawer")&&this.processFormattingTag(box.attr("data-text"))}),{button:button,box:box}}updateButton($element,config){config=this.parseButtonConfig(config),$element.attr("data-name",config.name).attr("data-icon",config.icon).attr("data-text",config.text),$element.find("a").first().html(this.getIcon(config.icon)).attr("title",config.name),this.saveButtons()}deleteButton($element){$element.remove(),this.saveButtons()}toggleEditing(){"true"===this.$container.attr("data-editing")?(this.$container.attr("data-editing","false"),this.$toggleTabs.find("a").toggleClass("active"),this.formatDText(this.$textarea.val(),data=>__awaiter(this,void 0,void 0,(function*(){this.$preview.html(data.html)})))):(this.$container.attr("data-editing","true"),this.$toggleTabs.find("a").toggleClass("active"))}toggleButtonDrawer(){"true"===this.$container.attr("data-drawer")?(this.$container.attr("data-drawer","false"),this.$formatButtons.sortable("disable"),this.$formatButtonsDrawer.sortable("disable"),this.$editButtonsModal.disable()):(this.$container.attr("data-drawer","true"),this.$formatButtons.sortable("enable"),this.$formatButtonsDrawer.sortable("enable"),this.$editButtonsModal.enable())}getIcon(name){for(const icon of iconDefinitions)if(icon.value===name)return icon.name;return""}processFormattingTag(content){const promises=[],lookup=content.match(/%prompt[:]?[^%]*?(%|$)/g),replacedTags=[];null!==lookup&&lookup.forEach((function(element){const title=element.replace(/(%$)|(^%prompt[:]?)/g,"");replacedTags.push(element),promises.push(new Prompt_1.Prompt(title).getPromise())})),Promise.all(promises).then(data=>{replacedTags.forEach((function(tag,index){content=content.replace(tag,data[index])}));const currentText=this.$textarea.val()+"",position={start:this.$textarea.prop("selectionStart"),end:this.$textarea.prop("selectionEnd")};content=content.replace(/%selection%/g,currentText.substring(position.start,position.end)),this.$textarea.focus(),document.execCommand("insertText",!1,content)||this.$textarea.val(currentText.substring(0,position.start)+content+currentText.substring(position.end,currentText.length)),this.$textarea.prop("selectionStart",position.start),this.$textarea.prop("selectionEnd",position.start+content.length),this.$textarea.keyup()})}formatDText(input,handleData){return __awaiter(this,void 0,void 0,(function*(){const response=yield Api_1.Api.postUrl("/dtext_preview",{body:input});handleData(JSON.parse(response))}))}}},{"../../components/RE6Module":3,"../../components/api/Api":4,"../../components/data/Hotkeys":13,"../../components/structure/Form":20,"../../components/structure/Modal":21,"../../components/structure/Prompt":22}],27:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const Modal_1=require("../../components/structure/Modal"),RE6Module_1=require("../../components/RE6Module"),User_1=require("../../components/data/User"),Form_1=require("../../components/structure/Form"),Page_1=require("../../components/data/Page"),ModuleController_1=require("../../components/ModuleController"),DomUtilities_1=require("../../components/structure/DomUtilities");class HeaderCustomizer extends RE6Module_1.RE6Module{constructor(){super(),this.registerHotkeys({keys:"hotkeyTab1",fnct:this.openTabNum},{keys:"hotkeyTab2",fnct:this.openTabNum},{keys:"hotkeyTab3",fnct:this.openTabNum},{keys:"hotkeyTab4",fnct:this.openTabNum},{keys:"hotkeyTab5",fnct:this.openTabNum},{keys:"hotkeyTab6",fnct:this.openTabNum},{keys:"hotkeyTab7",fnct:this.openTabNum},{keys:"hotkeyTab8",fnct:this.openTabNum},{keys:"hotkeyTab9",fnct:this.openTabNum})}getDefaultSettings(){return{enabled:!0,hotkeyTab1:"1",hotkeyTab2:"2",hotkeyTab3:"3",hotkeyTab4:"4",hotkeyTab5:"5",hotkeyTab6:"6",hotkeyTab7:"7",hotkeyTab8:"8",hotkeyTab9:"9",tabs:[{name:"Account",href:"/users/home"},{name:"Posts",href:"/posts"},{name:"Comments",href:"/comments?group_by=post"},{name:"Artists",href:"/artists"},{name:"Tags",href:"/tags"},{name:"Blips",href:"/blips"},{name:"Pools",href:"/pools"},{name:"Sets",href:"/post_sets"},{name:"Wiki",href:"/wiki_pages?title=help%3Ahome"},{name:"Forum",href:"/forum_topics"},{name:"Discord",href:"/static/discord"},{name:"Help",href:"/help"},{name:"More »",href:"/static/site_map"}]}}create(){this.canInitialize()&&(super.create(),this.$menu=$("menu.main"),this.createDOM(),this.addTabForm.get().on("re621:form:submit",(event,data)=>{event.preventDefault(),this.addTab({name:data.get("name"),title:data.get("title"),href:data.get("href")}),this.addTabForm.reset()}),this.updateTabForm.get().on("re621:form:submit",(event,data)=>{event.preventDefault(),this.updateTab(this.updateTabModal.getActiveTrigger().parent(),{name:data.get("name"),title:data.get("title"),href:data.get("href")}),this.updateTabModal.close()}),this.updateTabForm.getInputList().get("delete").click(event=>{event.preventDefault(),this.deleteTab(this.updateTabModal.getActiveTrigger().parent()),this.updateTabModal.close()}),this.addTabModal.getElement().on("dialogopen",()=>{this.enableEditingMode()}),this.addTabModal.getElement().on("dialogclose",()=>{this.disableEditingMode()}))}destroy(){this.isInitialized()&&(super.destroy(),this.$menu.removeClass("custom").empty(),this.$menu.sortable("destroy"),this.addTabButton.remove(),this.addTabModal.destroy(),this.updateTabModal.destroy(),this.$oldMenu.children().appendTo(this.$menu))}createDOM(){this.$oldMenu=$("<div>").css("display","none").appendTo("body"),this.$menu.children().appendTo(this.$oldMenu),this.$menu.addClass("custom"),this.fetchSettings("tabs").forEach(value=>{this.createTabElement({name:value.name,href:value.href})}),this.$menu.sortable({axis:"x",containment:"parent",helper:"clone",forceHelperSize:!0,opacity:.75,cursor:"grabbing",disabled:!0,update:()=>{this.saveNavbarSettings()}}),this.addTabButton=DomUtilities_1.DomUtilities.addSettingsButton({name:'<i class="fas fa-tasks"></i>',class:"float-left"}),this.addTabForm=new Form_1.Form({id:"header-addtab",parent:"div#modal-container"},[{id:"name",label:"Name",type:"input",required:!0,pattern:"[\\S ]+"},{id:"title",label:"Hover",type:"input"},{id:"href",label:"Link",type:"input"},{id:"submit",value:"Submit",type:"submit",stretch:"column"},{id:"help-hr",type:"hr"},{id:"help-var",value:"Available variables:",type:"div"},{id:"help-var-userid",label:"Unique ID",value:"%userid%",type:"copy"},{id:"help-var-username",label:"Username",value:"%username%",type:"copy"},{id:"info-hr",type:"hr"},{id:"info-div",value:"Drag-and-drop tabs to re-arrange.<br />Click on a tab to edit it.",type:"div"}]),this.addTabModal=new Modal_1.Modal({title:"Add Tab",triggers:[{element:this.addTabButton}],content:this.addTabForm.get(),position:{my:"right top",at:"right top"}}),this.updateTabForm=new Form_1.Form({id:"header-updatetab",parent:"div#modal-container"},[{id:"name",label:"Name",type:"input",required:!0,pattern:"[\\S ]+"},{id:"title",label:"Hover",type:"input"},{id:"href",label:"Link",type:"input"},{id:"delete",value:"Delete",type:"button"},{id:"submit",value:"Update",type:"submit"}]),this.updateTabModal=new Modal_1.Modal({title:"Update Tab",triggers:[{element:$("menu.main li a")}],content:this.updateTabForm.get(),position:{my:"center top",at:"center top"},triggerMulti:!0,disabled:!0})}enableEditingMode(){this.$menu.attr("data-editing","true"),this.$menu.sortable("enable"),this.updateTabModal.enable(),this.updateTabModal.getElement().on("dialogopen",()=>{const $tab=this.updateTabModal.getActiveTrigger().parent(),$updateTabInputs=this.updateTabForm.getInputList();$updateTabInputs.get("name").val($tab.attr("data-name")),$updateTabInputs.get("title").val($tab.attr("data-title")),$updateTabInputs.get("href").val($tab.attr("data-href"))})}disableEditingMode(){this.$menu.attr("data-editing","false"),this.$menu.sortable("disable"),this.updateTabModal.close(),this.updateTabModal.disable()}createTabElement(config,triggerUpdate){config=this.parseHeaderTabConfig(config),void 0===triggerUpdate&&(triggerUpdate=!1);const $tab=$("<li>").attr("data-name",config.name).attr("data-title",config.title).attr("data-href",config.href).appendTo("menu.main"),$link=$("<a>").html(this.processTabVariables(config.name)).attr("title",this.processTabVariables(config.title)).appendTo($tab);return""!=config.href&&$link.attr("href",this.processTabVariables(config.href)),config.controls&&$tab.addClass("configurable"),config.class&&$tab.addClass(config.class),triggerUpdate&&this.saveNavbarSettings(),Page_1.Page.getURL().pathname.includes(this.processTabVariables(config.href).split("?")[0])&&$tab.addClass("bg-foreground"),{tab:$tab,link:$link}}parseHeaderTabConfig(config){return void 0===config.name&&(config.name="New Tab"),void 0===config.href&&(config.href=""),void 0===config.title&&(config.title=""),void 0===config.class&&(config.class=""),void 0===config.controls&&(config.controls=!0),config}addTab(config){config=this.parseHeaderTabConfig(config);const newTab=this.createTabElement(config,!0);this.updateTabModal.registerTrigger({element:newTab.link})}updateTab($element,config){config=this.parseHeaderTabConfig(config),$element.attr("data-name",config.name).attr("data-title",config.title).attr("data-href",config.href),$element.find("a").first().html(this.processTabVariables(config.name)).attr("title",this.processTabVariables(config.title)).attr("href",this.processTabVariables(config.href)),this.saveNavbarSettings()}deleteTab($element){$element.remove(),this.saveNavbarSettings()}processTabVariables(text){return text.replace(/%userid%/g,User_1.User.getUserID()+"").replace(/%username%/g,User_1.User.getUsername())}saveNavbarSettings(){const tabData=[];this.$menu.find("li").each((function(i,element){const $tab=$(element);tabData.push({name:$tab.attr("data-name"),title:$tab.attr("data-title"),href:$tab.attr("data-href")})})),this.pushSettings("tabs",tabData)}openTabNum(event,key){const tabs=ModuleController_1.ModuleController.getWithType(HeaderCustomizer).$menu.find("li > a");parseInt(key)>tabs.length||tabs[parseInt(key)-1].click()}}exports.HeaderCustomizer=HeaderCustomizer},{"../../components/ModuleController":2,"../../components/RE6Module":3,"../../components/data/Page":14,"../../components/data/User":18,"../../components/structure/DomUtilities":19,"../../components/structure/Form":20,"../../components/structure/Modal":21}],28:[function(require,module,exports){"use strict";var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){return new(P||(P=Promise))((function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator.throw(value))}catch(e){reject(e)}}function step(result){var value;result.done?resolve(result.value):(value=result.value,value instanceof P?value:new P((function(resolve){resolve(value)}))).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())}))};Object.defineProperty(exports,"__esModule",{value:!0});const RE6Module_1=require("../../components/RE6Module"),Page_1=require("../../components/data/Page"),Api_1=require("../../components/api/Api");class Miscellaneous extends RE6Module_1.RE6Module{constructor(){super(),this.registerHotkeys({keys:"hotkeyFocusSearch",fnct:this.focusSearchbar},{keys:"hotkeyRandomPost",fnct:this.randomPost},{keys:"hotkeyNewComment",fnct:this.openNewComment},{keys:"hotkeyEditPost",fnct:this.openEditTab})}getDefaultSettings(){return{enabled:!0,hotkeyFocusSearch:"q",hotkeyRandomPost:"r",hotkeyNewComment:"n",hotkeyEditPost:"e",removeSearchQueryString:!0,stickySearchbox:!0,improveTagCount:!0,collapseCategories:!0,categoryData:[]}}create(){this.canInitialize()&&(super.create(),!0===this.fetchSettings("removeSearchQueryString")&&Page_1.Page.matches(Page_1.PageDefintion.post)&&this.removeSearchQueryString(),!0===this.fetchSettings("improveTagCount")&&Page_1.Page.matches([Page_1.PageDefintion.search,Page_1.PageDefintion.post])&&this.improveTagCount(),!0===this.fetchSettings("collapseCategories")&&Page_1.Page.matches(Page_1.PageDefintion.post)&&this.collapseTagCategories(),Page_1.Page.matches(Page_1.PageDefintion.search)&&this.autoFocusSearchBar(),Page_1.Page.matches([Page_1.PageDefintion.post,Page_1.PageDefintion.forum])&&this.handleQuoteButton(),Page_1.Page.matches([Page_1.PageDefintion.search,Page_1.PageDefintion.post,Page_1.PageDefintion.favorites])&&this.createStickySearchbox(this.fetchSettings("stickySearchbox")),this.registerHotkeys())}openNewComment(){Page_1.Page.matches(Page_1.PageDefintion.post)?($("menu#post-sections > li > a[href$=comments]")[0].click(),$("a.expand-comment-response")[0].click()):Page_1.Page.matches(Page_1.PageDefintion.forum)&&$("a#new-response-link")[0].click()}openEditTab(){Page_1.Page.matches(Page_1.PageDefintion.post)&&$("menu#post-sections > li > a[href$=edit]")[0].click()}removeSearchQueryString(){Page_1.Page.removeQueryParameter("q")}improveTagCount(state=!0){return __awaiter(this,void 0,void 0,(function*(){const source=state?"data-count":"data-count-short";$("span.re621-post-count").each((function(index,element){const tag=$(element);tag.text(tag.attr(source))}))}))}collapseTagCategories(){let storedCats=this.fetchSettings("categoryData",!0);$("section#tag-list .tag-list-header").each((index,element)=>{const $header=$(element),cat=$header.attr("data-category");-1!==storedCats.indexOf(cat)&&$header.get(0).click(),$header.on("click.danbooru",()=>{if(storedCats=this.fetchSettings("categoryData",!0),$header.hasClass("hidden-category"))storedCats.push(cat);else{const index=storedCats.indexOf(cat);-1!==index&&storedCats.splice(index,1)}this.pushSettings("categoryData",storedCats,!0)})})}createStickySearchbox(state=!0){state?$("div#re621-search").attr("data-sticky","true"):$("div#re621-search").attr("data-sticky","false")}autoFocusSearchBar(){const searchbox=$("section#search-box input");""==searchbox.val()&&searchbox.focus()}focusSearchbar(event){event.preventDefault(),$("section#search-box input").focus()}randomPost(){location.pathname="/posts/random"}handleQuoteButton(){Page_1.Page.matches(Page_1.PageDefintion.forum)?($(".forum-post-reply-link").each((function(index,element){const $newLink=$("<a>").attr("href","#").addClass("re621-forum-post-reply").html("Respond");$(element).after($newLink).remove()})),$(".re621-forum-post-reply").on("click",event=>{event.preventDefault();const $parent=$(event.target).parents("article.forum-post");this.quote($parent,"/forum_posts/"+$parent.data("forum-post-id")+".json",$("#forum_post_body"),$("a#new-response-link"))})):Page_1.Page.matches(Page_1.PageDefintion.post)&&($(".comment-reply-link").each((function(index,element){const $newLink=$("<a>").attr("href","#").addClass("re621-comment-reply").html("Respond");$(element).after($newLink).remove()})),$(".re621-comment-reply").on("click",event=>{event.preventDefault();const $parent=$(event.target).parents("article.comment");this.quote($parent,"/comments/"+$parent.data("comment-id")+".json",$("#comment_body_for_"),$("a.expand-comment-response"))}))}quote($parent,requestURL,$textarea,$responseButton){return __awaiter(this,void 0,void 0,(function*(){let strippedBody="";const selection=window.getSelection().toString();if(""===selection){strippedBody=(yield Api_1.Api.getJson(requestURL)).body.replace(/\[quote\](?:.|\n|\r)+?\[\/quote\][\n\r]*/gm,""),strippedBody='[quote]"'+$parent.data("creator")+'":/user/show/'+$parent.data("creator-id")+" said:\n"+strippedBody+"\n[/quote]"}else strippedBody='[quote]"'+$parent.data("creator")+'":/user/show/'+$parent.data("creator-id")+" said:\n"+selection+"\n[/quote]";($textarea.val()+"").length>0&&(strippedBody="\n\n"+strippedBody),$responseButton[0].click(),$textarea.scrollTop($textarea[0].scrollHeight);const newVal=$textarea.val()+strippedBody;$textarea.focus().val("").val(newVal)}))}}exports.Miscellaneous=Miscellaneous},{"../../components/RE6Module":3,"../../components/api/Api":4,"../../components/data/Page":14}],29:[function(require,module,exports){"use strict";var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){return new(P||(P=Promise))((function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator.throw(value))}catch(e){reject(e)}}function step(result){var value;result.done?resolve(result.value):(value=result.value,value instanceof P?value:new P((function(resolve){resolve(value)}))).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())}))};Object.defineProperty(exports,"__esModule",{value:!0});const HeaderCustomizer_1=require("./HeaderCustomizer"),Modal_1=require("../../components/structure/Modal"),Tabbed_1=require("../../components/structure/Tabbed"),RE6Module_1=require("../../components/RE6Module"),Miscellaneous_1=require("./Miscellaneous"),Form_1=require("../../components/structure/Form"),Hotkeys_1=require("../../components/data/Hotkeys"),PoolSubscriptions_1=require("../subscriptions/PoolSubscriptions"),Util_1=require("../../components/structure/Util"),ForumSubscriptions_1=require("../subscriptions/ForumSubscriptions"),TitleCustomizer_1=require("../post/TitleCustomizer"),DownloadCustomizer_1=require("../post/DownloadCustomizer"),PostViewer_1=require("../post/PostViewer"),FormattingHelper_1=require("./FormattingHelper"),BlacklistEnhancer_1=require("../search/BlacklistEnhancer"),PoolNavigator_1=require("../post/PoolNavigator"),ImageScaler_1=require("../post/ImageScaler"),ModuleController_1=require("../../components/ModuleController"),DomUtilities_1=require("../../components/structure/DomUtilities"),Api_1=require("../../components/api/Api"),User_1=require("../../components/data/User"),ThumbnailsEnhancer_1=require("../search/ThumbnailsEnhancer"),GM_1=require("../../components/api/GM"),MassDownloader_1=require("../search/MassDownloader"),PoolDownloader_1=require("../pools/PoolDownloader");class SettingsController extends RE6Module_1.RE6Module{create(){const openSettingsButton=DomUtilities_1.DomUtilities.addSettingsButton({name:'<i class="fas fa-wrench"></i>',class:"float-right"}),$settings=new Tabbed_1.Tabbed({name:"settings-tabs",content:[{name:"Features",page:this.createFeaturesTab().get()},{name:"General",page:this.createGeneralTab().get()},{name:"Downloads",page:this.createDownloadsTab().get()},{name:"Hotkeys",page:this.createHotkeysTab().get()},{name:"Other",page:this.createMiscTab().get()},{name:"About",page:this.createAboutTab().get()}]});if(this.modal=new Modal_1.Modal({title:"Settings",triggers:[{element:openSettingsButton}],escapable:!1,fixed:!0,reserveHeight:!0,content:$settings.create(),position:{my:"center",at:"center"}}),(new Date).getTime()-36e5>this.fetchSettings("lastVersionCheck")){const releases={latest:null,current:null};(()=>{__awaiter(this,void 0,void 0,(function*(){releases.latest=JSON.parse(yield Util_1.Util.userscriptRequest("https://api.github.com/repos/re621/re621/releases/latest")),releases.current=JSON.parse(yield Util_1.Util.userscriptRequest("https://api.github.com/repos/re621/re621/releases/tags/"+window.re621.version)),this.pushSettings("newVersionAvailable",releases.latest.name!==releases.current.name),this.pushSettings("lastVersionCheck",(new Date).getTime()),this.pushSettings("changelog",releases.current.body),$("div#changelog-list").html(Util_1.Util.quickParseMarkdown(releases.current.body)),$("#project-update-button").attr("data-available",(releases.latest.name!==releases.current.name)+"")}))})()}}getDefaultSettings(){return{enabled:!0,newVersionAvailable:!1,lastVersionCheck:0,changelog:""}}createFeaturesTab(){const modules=ModuleController_1.ModuleController.getAll();function createInput(moduleName,label){const module=modules.get(moduleName);return Form_1.Form.checkbox(moduleName+"-enabled",module.fetchSettings("enabled"),label,"column",(event,data)=>{module.pushSettings("enabled",data),module.setEnabled(data),!0===data?module.canInitialize()&&module.create():module.destroy()})}return new Form_1.Form({id:"settings-module-status",columns:3,parent:"div#modal-container"},[Form_1.Form.header("Features"),createInput("HeaderCustomizer","Header Customizer"),Form_1.Form.div("Add, delete, and customize header links to your heart's content","mid"),createInput("InfiniteScroll","Infinite Scroll"),Form_1.Form.div("New posts are automatically loaded. No need to turn pages","mid"),createInput("InstantSearch","Instant Filters"),Form_1.Form.div("Quickly add filters to your current search, with no need for a page reload","mid"),createInput("FormattingManager","Formatting Helper"),Form_1.Form.div("Fully customizable toolbar for easy DText formatting and post templates","mid"),createInput("TinyAlias","Tiny Alias"),Form_1.Form.div("A more intelligent way to quickly fill out post tags","mid")])}createGeneralTab(){const titleCustomizer=ModuleController_1.ModuleController.getWithType(TitleCustomizer_1.TitleCustomizer),miscellaneous=ModuleController_1.ModuleController.getWithType(Miscellaneous_1.Miscellaneous),postViewer=ModuleController_1.ModuleController.getWithType(PostViewer_1.PostViewer),formattingManager=ModuleController_1.ModuleController.getWithType(FormattingHelper_1.FormattingManager),blacklistEnhancer=ModuleController_1.ModuleController.getWithType(BlacklistEnhancer_1.BlacklistEnhancer),imageScaler=ModuleController_1.ModuleController.getWithType(ImageScaler_1.ImageScaler),thumbnailEnhancer=ModuleController_1.ModuleController.getWithType(ThumbnailsEnhancer_1.ThumbnailEnhancer);return new Form_1.Form({id:"settings-general",columns:3,parent:"div#modal-container"},[Form_1.Form.section({id:"general",columns:3},[Form_1.Form.header("General","column"),Form_1.Form.div('<div class="notice text-right">Settings are saved and applied automatically.</div>',"mid"),Form_1.Form.section({id:"title",columns:3},[Form_1.Form.input("template",titleCustomizer.fetchSettings("template"),"Page Title","full",void 0,(event,data)=>{titleCustomizer.pushSettings("template",data),titleCustomizer.isInitialized()&&titleCustomizer.refreshPageTitle()}),Form_1.Form.section({id:"template-vars-title",columns:2},[Form_1.Form.div('<div class="notice unmargin">The following variables can be used:</div>',"mid"),Form_1.Form.copy("postnum","%postid%","Post ID"),Form_1.Form.copy("author","%artist%","Artist"),Form_1.Form.copy("copyright","%copyright%","Copyright"),Form_1.Form.copy("characters","%character%","Characters"),Form_1.Form.copy("species","%species%","Species"),Form_1.Form.copy("meta","%meta%","Meta")]," "),Form_1.Form.checkbox("symbol-enabled",titleCustomizer.fetchSettings("symbolsEnabled"),"Vote / Favorite Icons","column",(event,data)=>{titleCustomizer.pushSettings("symbolsEnabled",data),titleCustomizer.isInitialized()&&titleCustomizer.refreshPageTitle()}),Form_1.Form.spacer("mid"),Form_1.Form.input("symbol-fav",titleCustomizer.fetchSettings("symbolFav"),"Favorite","column",void 0,(event,data)=>{titleCustomizer.pushSettings("symbolFav",data),titleCustomizer.isInitialized()&&titleCustomizer.refreshPageTitle()}),Form_1.Form.input("symbol-voteup",titleCustomizer.fetchSettings("symbolVoteUp"),"Upvoted","column",void 0,(event,data)=>{titleCustomizer.pushSettings("symbolVoteUp",data),titleCustomizer.isInitialized()&&titleCustomizer.refreshPageTitle()}),Form_1.Form.input("symbol-votedown",titleCustomizer.fetchSettings("symbolVoteDown"),"Downvoted","column",void 0,(event,data)=>{titleCustomizer.pushSettings("symbolVoteDown",data),titleCustomizer.isInitialized()&&titleCustomizer.refreshPageTitle()})]),Form_1.Form.checkbox("improved-tagcount",miscellaneous.fetchSettings("improveTagCount"),"Expanded Tag Count","column",(event,data)=>{miscellaneous.pushSettings("improveTagCount",data),miscellaneous.improveTagCount(data)}),Form_1.Form.checkbox("sticky-searchbox",miscellaneous.fetchSettings("stickySearchbox"),"Fixed Searchbox","column",(event,data)=>{miscellaneous.pushSettings("stickySearchbox",data),miscellaneous.createStickySearchbox(data)}),Form_1.Form.spacer(),Form_1.Form.hr()]),Form_1.Form.section({id:"thumb",columns:3},[Form_1.Form.header("Thumbnails"),Form_1.Form.select("upscale",thumbnailEnhancer.fetchSettings("upscale"),"Upscale",[{value:ThumbnailsEnhancer_1.ThumbnailPerformanceMode.Disabled,name:"Disabled"},{value:ThumbnailsEnhancer_1.ThumbnailPerformanceMode.Hover,name:"On Hover"},{value:ThumbnailsEnhancer_1.ThumbnailPerformanceMode.Always,name:"Always"}],"column",(event,data)=>{thumbnailEnhancer.pushSettings("upscale",data)}),Form_1.Form.div("Replace 150x150 blurry thumbnails with larger versions","mid"),Form_1.Form.spacer(),Form_1.Form.div('<div class="unmargin"><b>Requires a page reload</b></div>',"mid"),Form_1.Form.subsection({id:"advanced",columns:3},"Advanced",[Form_1.Form.checkbox("zoom",thumbnailEnhancer.fetchSettings("zoom"),"Enlarge on Hover","column",(event,data)=>{thumbnailEnhancer.pushSettings("zoom",data),thumbnailEnhancer.toggleHoverZoom(data)}),Form_1.Form.div("Increases the size of the thumbnail when hovering over it","mid"),Form_1.Form.input("zoom-scale",thumbnailEnhancer.fetchSettings("zoomScale"),"Zoom scale","column",{pattern:"^[1-9](\\.\\d+)?$"},(event,data)=>{event.target.checkValidity()&&(thumbnailEnhancer.pushSettings("zoomScale",data),thumbnailEnhancer.setZoomScale(data))}),Form_1.Form.div("The ratio of the enlarged thumbnail to its original size","mid"),Form_1.Form.checkbox("zoom-contextual",thumbnailEnhancer.fetchSettings("zoomContextual"),"Contextual Scaling","column",(event,data)=>{thumbnailEnhancer.pushSettings("zoomContextual",data),thumbnailEnhancer.toggleZoomContextual(data)}),Form_1.Form.div("Only enable thumbnail scaling in the viewing mode","mid"),Form_1.Form.spacer("full"),Form_1.Form.checkbox("vote",thumbnailEnhancer.fetchSettings("vote"),"Voting Buttons","column",(event,data)=>{thumbnailEnhancer.pushSettings("vote",data),thumbnailEnhancer.toggleHoverVote(data)}),Form_1.Form.div("Adds voting buttons when hovering over a thumbnail","mid"),Form_1.Form.spacer("full"),Form_1.Form.checkbox("crop",thumbnailEnhancer.fetchSettings("crop"),"Resize Images","column",(event,data)=>{thumbnailEnhancer.pushSettings("crop",data),thumbnailEnhancer.toggleThumbCrop(data)}),Form_1.Form.div("Resize thumbnail images according to settings below","mid"),Form_1.Form.input("crop-size",thumbnailEnhancer.fetchSettings("cropSize"),"Thumbnail Size","column",{pattern:"^\\d{2,3}(px|rem|em)$"},(event,data)=>{event.target.checkValidity()&&(thumbnailEnhancer.pushSettings("cropSize",data),thumbnailEnhancer.setThumbSize(data))}),Form_1.Form.div("Thumbnail width, in px, em, or rem","mid"),Form_1.Form.input("crop-ratio",thumbnailEnhancer.fetchSettings("cropRatio"),"Image Ratio","column",{pattern:"^(([01](\\.\\d+)?)|2)$"},(event,data)=>{event.target.checkValidity()&&(thumbnailEnhancer.pushSettings("cropRatio",data),thumbnailEnhancer.setThumbRatio(data))}),Form_1.Form.div("Height to width ratio of the image","mid"),Form_1.Form.spacer("full"),Form_1.Form.checkbox("state-ribbons",thumbnailEnhancer.fetchSettings("ribbons"),"Status Ribbons","column",(event,data)=>{thumbnailEnhancer.pushSettings("ribbons",data),thumbnailEnhancer.toggleStatusRibbons(data)}),Form_1.Form.div("Use corner ribbons instead of colored borders for flags","mid"),Form_1.Form.checkbox("state-relations",thumbnailEnhancer.fetchSettings("relRibbons"),"Relations Ribbons","column",(event,data)=>{thumbnailEnhancer.pushSettings("relRibbons",data),thumbnailEnhancer.toggleRelationRibbons(data)}),Form_1.Form.div("Display ribbons for parent/child relationships","mid")]),Form_1.Form.select("click-action",thumbnailEnhancer.fetchSettings("clickAction"),"Double Click Action",[{value:ThumbnailsEnhancer_1.ThumbnailClickAction.Disabled,name:"Disabled"},{value:ThumbnailsEnhancer_1.ThumbnailClickAction.NewTab,name:"Open New Tab"},{value:ThumbnailsEnhancer_1.ThumbnailClickAction.CopyID,name:"Copy Post ID"}],"column",(event,data)=>{thumbnailEnhancer.pushSettings("clickAction",data)}),Form_1.Form.div("Action taken when a thumbnail is double-clicked","mid"),Form_1.Form.spacer(),Form_1.Form.div('<div class="unmargin"><b>Requires a page reload</b></div>',"mid"),Form_1.Form.hr()]),Form_1.Form.section({id:"actions",columns:3},[Form_1.Form.header("Actions"),Form_1.Form.checkbox("votefavorite",postViewer.fetchSettings("upvoteOnFavorite"),"Auto-upvote favorites","column",(event,data)=>{postViewer.pushSettings("upvoteOnFavorite",data)}),Form_1.Form.checkbox("submit-hotkey",formattingManager.fetchSettings("hotkeySubmitActive"),"Comment with Alt+Enter","column",(event,data)=>{formattingManager.pushSettings("hotkeySubmitActive",data)}),Form_1.Form.checkbox("click-scale",imageScaler.fetchSettings("clickScale"),"Click images to resize them","column",(event,data)=>{imageScaler.pushSettings("clickScale",data)}),Form_1.Form.checkbox("collapse-tag-cats",miscellaneous.fetchSettings("collapseCategories"),"Collapse tag categories","column",(event,data)=>{miscellaneous.pushSettings("collapseCategories",data)}),Form_1.Form.hr()]),Form_1.Form.section({id:"blacklist",columns:3},[Form_1.Form.header("Blacklist"),Form_1.Form.checkbox("quickadd",blacklistEnhancer.fetchSettings("quickaddTags"),"Click X to add tag to blacklist","column",(event,data)=>{blacklistEnhancer.pushSettings("quickaddTags",data)})])])}createDownloadsTab(){const downloadCustomizer=ModuleController_1.ModuleController.getWithType(DownloadCustomizer_1.DownloadCustomizer),massDownloader=ModuleController_1.ModuleController.getWithType(MassDownloader_1.MassDownloader),poolDownloader=ModuleController_1.ModuleController.getWithType(PoolDownloader_1.PoolDownloader);return new Form_1.Form({id:"settings-download",columns:3,parent:"div#modal-container"},[Form_1.Form.section({id:"customizer",columns:3},[Form_1.Form.header("Download Customizer","column"),Form_1.Form.div('<div class="notice float-right">Download individual files</div>',"mid"),Form_1.Form.input("template",downloadCustomizer.fetchSettings("template"),"Download File Name","full",void 0,(event,data)=>{downloadCustomizer.pushSettings("template",data),downloadCustomizer.isInitialized()&&downloadCustomizer.refreshDownloadLink()}),Form_1.Form.section({id:"template-vars-cust",columns:2},[Form_1.Form.div('<div class="notice unmargin">The following variables can be used:</div>',"mid"),Form_1.Form.copy("postid","%postid%","Post ID"),Form_1.Form.copy("artist","%artist%","Artist"),Form_1.Form.copy("copyright","%copyright%","Copyright"),Form_1.Form.copy("character","%character%","Characters"),Form_1.Form.copy("species","%species%","Species"),Form_1.Form.copy("meta","%meta%","Meta")]," "),Form_1.Form.hr()]),Form_1.Form.section({id:"mass",columns:3},[Form_1.Form.header("Image Downloader","column"),Form_1.Form.div('<div class="notice float-right">Download files from the search page</div>',"mid"),Form_1.Form.input("template",massDownloader.fetchSettings("template"),"Download File Name","full",void 0,(event,data)=>{massDownloader.pushSettings("template",data)}),Form_1.Form.section({id:"template-vars-mass",columns:2},[Form_1.Form.div('<div class="notice unmargin">The same variables as above can be used. Add a forward slash ( / ) to signify a folder.</div>',"mid")]," "),Form_1.Form.checkbox("autodownload",massDownloader.fetchSettings("autoDownloadArchive"),"Auto Download","column",(event,data)=>{massDownloader.pushSettings("autoDownloadArchive",data)}),Form_1.Form.div("The archive will be downloaded automatically after being created","mid"),Form_1.Form.hr()]),Form_1.Form.section({id:"pool",columns:3},[Form_1.Form.header("Pool Downloader","column"),Form_1.Form.div('<div class="notice float-right">Download image pools or sets</div>',"mid"),Form_1.Form.input("template",poolDownloader.fetchSettings("template"),"Download File Name","full",void 0,(event,data)=>{poolDownloader.pushSettings("template",data)}),Form_1.Form.section({id:"template-vars-pool",columns:2},[Form_1.Form.div('<div class="notice unmargin">The same variables as above can be used. Add a forward slash ( / ) to signify a folder.</div>',"mid"),Form_1.Form.div('<div class="notice unmargin">The following variables can also be used:</div>',"mid"),Form_1.Form.copy("pool","%pool%","Pool Name"),Form_1.Form.copy("index","%index%","Index")]," "),Form_1.Form.checkbox("autodownload",poolDownloader.fetchSettings("autoDownloadArchive"),"Auto Download","column",(event,data)=>{poolDownloader.pushSettings("autoDownloadArchive",data)}),Form_1.Form.div("The archive will be downloaded automatically after being created","mid")])])}createHotkeysTab(){const postViewer=ModuleController_1.ModuleController.getWithType(PostViewer_1.PostViewer),poolNavigator=ModuleController_1.ModuleController.getWithType(PoolNavigator_1.PoolNavigator),imageScaler=ModuleController_1.ModuleController.getWithType(ImageScaler_1.ImageScaler),miscellaneous=ModuleController_1.ModuleController.getWithType(Miscellaneous_1.Miscellaneous),headerCustomizer=ModuleController_1.ModuleController.getWithType(HeaderCustomizer_1.HeaderCustomizer);function createInputs(module,label,settingsKey){const values=module.fetchSettings(settingsKey).split("|"),bindings=[void 0===values[0]?"":values[0],void 0===values[1]?"":values[1]];return[Form_1.Form.label(label),Form_1.Form.key(settingsKey+"-input-0",bindings[0],void 0,"column",(event,data)=>{handleRebinding(data,0)}),Form_1.Form.key(settingsKey+"-input-1",bindings[1],void 0,"column",(event,data)=>{handleRebinding(data,1)})];function handleRebinding(data,index){bindings[index]=data[0],module.pushSettings(settingsKey,bindings.join("|")),Hotkeys_1.Hotkeys.unregister(data[1]),module.resetHotkeys()}}return new Form_1.Form({id:"settings-hotkeys",columns:3,parent:"div#modal-container"},[Form_1.Form.header("Listing"),...createInputs(miscellaneous,"Search","hotkeyFocusSearch"),...createInputs(miscellaneous,"Random Post","hotkeyRandomPost"),Form_1.Form.hr(),Form_1.Form.header("Posts"),...createInputs(postViewer,"Upvote","hotkeyUpvote"),...createInputs(postViewer,"Downvote","hotkeyDownvote"),...createInputs(postViewer,"Favorite","hotkeyFavorite"),...createInputs(poolNavigator,"Previous Post","hotkeyPrev"),...createInputs(poolNavigator,"Next Post","hotkeyNext"),...createInputs(poolNavigator,"Cycle Navigation","hotkeyCycle"),...createInputs(imageScaler,"Change Scale","hotkeyScale"),Form_1.Form.hr(),Form_1.Form.header("Actions"),...createInputs(miscellaneous,"New Comment","hotkeyNewComment"),...createInputs(miscellaneous,"Edit Post","hotkeyEditPost"),...createInputs(postViewer,"Toggle Notes","hotkeyHideNotes"),...createInputs(postViewer,"Edit Notes","hotkeyNewNote"),Form_1.Form.hr(),Form_1.Form.header("Header Tabs"),...createInputs(headerCustomizer,"Tab #1","hotkeyTab1"),...createInputs(headerCustomizer,"Tab #2","hotkeyTab2"),...createInputs(headerCustomizer,"Tab #3","hotkeyTab3"),...createInputs(headerCustomizer,"Tab #4","hotkeyTab4"),...createInputs(headerCustomizer,"Tab #5","hotkeyTab5"),...createInputs(headerCustomizer,"Tab #6","hotkeyTab6"),...createInputs(headerCustomizer,"Tab #7","hotkeyTab7"),...createInputs(headerCustomizer,"Tab #8","hotkeyTab8"),...createInputs(headerCustomizer,"Tab #9","hotkeyTab9")])}createMiscTab(){const modules=ModuleController_1.ModuleController.getAll(),moduleSelector=[{value:"none",name:"------"}];modules.forEach(module=>{moduleSelector.push({value:module.constructor.name,name:module.constructor.name})});let selectedModule="none";return new Form_1.Form({id:"settings-misc",columns:3,parent:"div#modal-container"},[Form_1.Form.header("Miscellaneous"),Form_1.Form.header("Import / Export from file","column"),Form_1.Form.div('<div class="notice unmargin float-right">Import subscription data from file</div>',"mid"),Form_1.Form.button("export-button","Export","Export to file","mid",()=>{!function(){const storedData={meta:"re621/1.0"};ModuleController_1.ModuleController.getAll().forEach(module=>{const data=module.getSavedSettings();storedData[data.name]=data.data,storedData[data.name].cache&&(storedData[data.name].cache={})}),Util_1.Util.downloadJSON(storedData,"re621-"+User_1.User.getUsername()+"-userdata")}()}),Form_1.Form.spacer(),Form_1.Form.file("import-file","json","Import from file","mid",void 0,(event,data)=>{!function(data){if(!data)return;const $info=$("div#file-import-status").html("Loading . . ."),reader=new FileReader;reader.readAsText(data,"UTF-8"),reader.onload=function(event){const parsedData=JSON.parse(event.target.result.toString());parsedData.meta&&"re621/1.0"===parsedData.meta?(delete parsedData.meta,Object.keys(parsedData).forEach(key=>{$info.html("Importing "+key),GM_1.GM.setValue(key,parsedData[key])}),$info.html("Settings imported!")):$info.html("Invalid file format")},reader.onerror=function(){$info.html("Error loading file")}}(data)}),Form_1.Form.spacer(),Form_1.Form.status('<div id="file-import-status" class="unmargin"></div>'),Form_1.Form.header("eSix Extended","column"),Form_1.Form.div('<div class="notice unmargin float-right">Import the settings from eSix Extended (Legacy)</div>',"mid"),Form_1.Form.file("esix-file","json","Select file","mid",void 0,(event,data)=>{!function(data){if(!data)return;const $info=$("div#file-esix-status").html("Loading . . ."),reader=new FileReader;reader.readAsText(data,"UTF-8"),reader.onload=event=>__awaiter(this,void 0,void 0,(function*(){const parsedData=event.target.result.toString().split("\n");"eSixExtend User Prefs"===parsedData[0]?(parsedData.forEach((value,index)=>{0!==index&&(parsedData[index]=JSON.parse(atob(value).replace(/^\d+\|/,"")))}),yield function(settings,$info){return __awaiter(this,void 0,void 0,(function*(){$info.html("Processing pools . . .");const poolSubs=PoolSubscriptions_1.PoolSubscriptions.getInstance(),poolData=poolSubs.fetchSettings("data",!0);for(const entry of settings)poolData[entry.id]={md5:entry.thumb.url.substr(6,32),lastID:entry.last};poolSubs.pushSettings("data",poolData)}))}(parsedData[2],$info),yield function(settings,$info){return __awaiter(this,void 0,void 0,(function*(){$info.html("Processing forums . . .");const forumSubs=ForumSubscriptions_1.ForumSubscriptions.getInstance(),forumData=forumSubs.fetchSettings("data",!0),postIDs=[];for(const entry of settings)postIDs.push(entry.id);(yield Api_1.Api.getJson("/forum_posts.json?search[id]="+postIDs.join(","))).forEach(postData=>{forumData[postData.topic_id]={}}),forumSubs.pushSettings("data",forumData)}))}(parsedData[3],$info),$info.html("Settings imported!")):$info.html("Invalid file format")})),reader.onerror=function(){$info.html("Error loading file")}}(data)}),Form_1.Form.spacer(),Form_1.Form.status('<div id="file-esix-status" class="unmargin"></div>'),Form_1.Form.button("esix-localstorage","Load","From LocalStorage","mid",()=>{!function(){__awaiter(this,void 0,void 0,(function*(){const $info=$("div#localstorage-esix-status").html("Loading . . .");null!==localStorage.getItem("poolSubscriptions")&&(yield this.importPoolData(JSON.parse(localStorage.getItem("poolSubscriptions")),$info)),null!==localStorage.getItem("forumSubscriptions")&&(yield this.importForumData(JSON.parse(localStorage.getItem("forumSubscriptions")),$info)),$info.html("Settings imported!")}))}()}),Form_1.Form.spacer(),Form_1.Form.status('<div id="localstorage-esix-status" class="unmargin"></div>'),Form_1.Form.hr(),Form_1.Form.header("<h3>Reset Modules</h3>"),Form_1.Form.button("reset-everything","Clear","Everything","column",()=>{confirm("Are you absolutely sure?")&&(ModuleController_1.ModuleController.getAll().forEach(module=>{module.clearSettings()}),location.reload())}),Form_1.Form.div("Delete settings for all modules. <b>This cannot be undone.</b>","mid"),Form_1.Form.select("reset-specific","none","Module",moduleSelector,"mid",(event,data)=>{selectedModule=data}),Form_1.Form.div("Reset a specific module","column"),Form_1.Form.button("reset-specific-action","Reset"," ","mid",()=>{"none"!==selectedModule&&ModuleController_1.ModuleController.getByName(selectedModule).clearSettings()}),Form_1.Form.div("<b>This cannot be undone.</b>","column")])}createAboutTab(){return new Form_1.Form({id:"about-form",columns:3,parent:"div#modal-container"},[Form_1.Form.div('<h3 class="display-inline"><a href="'+window.re621.links.website+'">'+window.re621.name+" v."+window.re621.version+'</a></h3><span class="display-inline">(build '+window.re621.build+")</span>","mid"),Form_1.Form.div('<span class="float-right" id="project-update-button" data-available="'+this.fetchSettings("newVersionAvailable")+'">\n                    <a href="'+window.re621.links.releases+'">Update Available</a>\n                </span>',"column"),Form_1.Form.div("<b>"+window.re621.name+"</b> is a comprehensive set of tools designed to enhance the website for both casual and power users.It is created and maintained by unpaid volunteers, with the hope that it will be useful for the community."),Form_1.Form.div('Keeping the script - and the website - fully functional is our highest priority.If you are experiencing bugs or issues, do not hesitate to create a new ticket on <a href="'+window.re621.links.issues+'">github</a>,or leave us a message in the <a href="'+window.re621.links.forum+'">forum thread</a>. Feature requests, comments, and overall feedback are also appreciated.'),Form_1.Form.div("Thank you for downloading and using this script. We hope that you enjoy the experience."),Form_1.Form.spacer("full"),Form_1.Form.header('<a href="'+window.re621.links.releases+'" class="unmargin">What\'s new?</a>'),Form_1.Form.div('<div id="changelog-list">'+Util_1.Util.quickParseMarkdown(this.fetchSettings("changelog"))+"</div>")])}}exports.SettingsController=SettingsController},{"../../components/ModuleController":2,"../../components/RE6Module":3,"../../components/api/Api":4,"../../components/api/GM":8,"../../components/data/Hotkeys":13,"../../components/data/User":18,"../../components/structure/DomUtilities":19,"../../components/structure/Form":20,"../../components/structure/Modal":21,"../../components/structure/Tabbed":23,"../../components/structure/Util":24,"../pools/PoolDownloader":33,"../post/DownloadCustomizer":34,"../post/ImageScaler":35,"../post/PoolNavigator":36,"../post/PostViewer":37,"../post/TitleCustomizer":38,"../search/BlacklistEnhancer":39,"../search/MassDownloader":42,"../search/ThumbnailsEnhancer":43,"../subscriptions/ForumSubscriptions":44,"../subscriptions/PoolSubscriptions":45,"./FormattingHelper":26,"./HeaderCustomizer":27,"./Miscellaneous":28}],30:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const Modal_1=require("../../components/structure/Modal"),RE6Module_1=require("../../components/RE6Module"),Form_1=require("../../components/structure/Form"),DomUtilities_1=require("../../components/structure/DomUtilities"),THEME_MAIN=[{value:"hexagon",name:"Hexagon"},{value:"pony",name:"Pony"},{value:"bloodlust",name:"Bloodlust"},{value:"serpent",name:"Serpent"},{value:"hotdog",name:"Hotdog"}],THEME_EXTRA=[{value:"none",name:"None"},{value:"autumn",name:"Autumn"},{value:"winter",name:"Winter"},{value:"spring",name:"Spring"},{value:"aurora",name:"Aurora"},{value:"hexagons",name:"Hexagons"},{value:"space",name:"Space"},{value:"stars",name:"Stars"}],NAVBAR_POS=[{value:"top",name:"Top"},{value:"bottom",name:"Bottom"},{value:"none",name:"None"}];class ThemeCustomizer extends RE6Module_1.RE6Module{getDefaultSettings(){return{enabled:!0,main:"hexagon",extra:"hexagons",nav:"top"}}create(){if(!this.canInitialize())return;super.create();const openCustomizerButton=DomUtilities_1.DomUtilities.addSettingsButton({name:'<i class="fas fa-paint-brush"></i>'});this.themeCustomizerForm=new Form_1.Form({id:"theme-customizer",parent:"div#modal-container"},[{id:"main",type:"select",label:"Theme",data:THEME_MAIN,value:this.fetchSettings("main")},{id:"extra",type:"select",label:"Extras",data:THEME_EXTRA,value:this.fetchSettings("extra")},{id:"nav",type:"select",label:"Post Navbar",data:NAVBAR_POS,value:this.fetchSettings("nav")}]),new Modal_1.Modal({title:"Themes",triggers:[{element:openCustomizerButton}],content:this.themeCustomizerForm.get(),position:{my:"right top",at:"right top"}}),this.handleThemeSwitcher("main"),this.handleThemeSwitcher("extra"),this.handleThemeSwitcher("nav")}handleThemeSwitcher(selector){const theme=this.fetchSettings(selector),input=this.themeCustomizerForm.getInputList().get(selector);$("body").attr("data-th-"+selector,theme),input.val(theme),input.change(element=>{const theme=$(element.target).val()+"";this.pushSettings(selector,theme),$("body").attr("data-th-"+selector,theme)})}}exports.ThemeCustomizer=ThemeCustomizer},{"../../components/RE6Module":3,"../../components/structure/DomUtilities":19,"../../components/structure/Form":20,"../../components/structure/Modal":21}],31:[function(require,module,exports){"use strict";var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){return new(P||(P=Promise))((function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator.throw(value))}catch(e){reject(e)}}function step(result){var value;result.done?resolve(result.value):(value=result.value,value instanceof P?value:new P((function(resolve){resolve(value)}))).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())}))};Object.defineProperty(exports,"__esModule",{value:!0});const RE6Module_1=require("../../components/RE6Module"),Page_1=require("../../components/data/Page"),Modal_1=require("../../components/structure/Modal"),AvoidPosting_1=require("../../components/data/AvoidPosting"),E621_1=require("../../components/api/E621");class TinyAlias extends RE6Module_1.RE6Module{constructor(){super([Page_1.PageDefintion.upload,Page_1.PageDefintion.post,Page_1.PageDefintion.search])}getDefaultSettings(){return{enabled:!0,checkDNP:!0,data:{}}}create(){this.canInitialize()&&(super.create(),this.buildDOM())}destroy(){this.isInitialized()&&(super.destroy(),this.$container.find("input").unbind(),this.$container.find("div.tiny-alias-container").remove())}buildDOM(){$("#post-edit-link").one("click",()=>{this.destroy(),setTimeout(()=>{this.create()},100)}),this.$textarea=$("textarea#post_tags, textarea#post_tag_string"),this.$container=this.$textarea.parent();const $toolbar=$("<div>").addClass("tiny-alias-container").appendTo(this.$container),$input=$("<input>").attr({type:"text",required:"",pattern:".+"}).attr("id","tiny-alias-taginput").appendTo($toolbar),$insertButton=$("<button>").html("Insert").attr("type","button").appendTo($toolbar);this.$infoText=$("<div>").addClass("info-text").appendTo($toolbar);const $settingsButton=$("<button>").attr("type","button").html("TinyAlias").appendTo($toolbar),$sortButton=$("<button>").attr("type","button").html("Sort").appendTo($toolbar);let timer;this.tagAlreadyChecked=!1,$input.on("input",()=>{this.tagAlreadyChecked=!1,""!==$input.val()?(timer&&clearTimeout(timer),timer=window.setTimeout(()=>{this.handleCheckButton($input)},500)):this.$infoText.html("").removeAttr("data-state")}),$input.bind("keyup","return",()=>{this.tagAlreadyChecked&&this.handleInsertButton($input)}),$insertButton.on("click",()=>{this.tagAlreadyChecked&&this.handleInsertButton($input)}),$sortButton.on("click",()=>{let tags=this.prepareInput(this.$textarea.val()).split(" ").map(e=>e.trim());tags=[...new Set(tags)],tags.sort(),this.$textarea.val(tags.join(" "))});const $aliasList=$("<div>").addClass("alias-list");$("<div>").html("<h3>New Alias</h3>").appendTo($aliasList);const $newAliasForm=this.buildAliasForm($aliasList,"","","alias-form-new");$newAliasForm.css("margin-bottom","1.5rem"),$newAliasForm.find("button[type='button']").css("visibility","hidden"),$newAliasForm.find("button[type='submit']").html("Create"),$newAliasForm.find("input[type='text']").removeAttr("disabled"),this.aliasData=this.fetchSettings("data"),this.aliasData.length>0&&$("<div>").html("<h3>Existing Aliases</h3>").appendTo($aliasList);for(const[index,name]of Object.keys(this.aliasData).entries())this.makeAliasEntry($aliasList,name,this.aliasData[name],index+"");$newAliasForm.submit(event=>{event.preventDefault();const $name=$newAliasForm.find("input[type='text']"),$data=$newAliasForm.find("textarea");if($name.removeClass("invalid"),$data.removeClass("invalid"),""===$name.val()||this.aliasData[$name.val()+""])return $name.addClass("invalid"),void(""===$data.val()&&$data.addClass("invalid"));""!==$data.val()?(this.aliasData[$name.val()+""]=$data.val()+"",this.pushSettings("data",this.aliasData),this.makeAliasEntry($aliasList,$name.val()+"",$data.val()+"",this.aliasData.length+""),$name.val(""),$data.val("")):$data.addClass("invalid")}),new Modal_1.Modal({title:"Tiny Alias",triggers:[{element:$settingsButton}],fixed:!0,position:{at:"center",my:"center"},content:$aliasList})}handleInsertButton($input){this.insertAlias($input.val().toString())||this.insertTag($input.val().toString()),$input.val(""),this.$infoText.html(" ")}handleCheckButton($input){return __awaiter(this,void 0,void 0,(function*(){const tag=this.prepareTag($input.val().toString());if(this.tagAlreadyAdded(tag))return void this.$infoText.html("Tag has already been added").attr("data-state","error");if(this.aliasData=this.fetchSettings("data"),this.aliasData[tag])return this.tagAlreadyChecked=!0,void this.$infoText.html("Found alias: "+tag).attr("data-state","done");this.$infoText.attr("data-state","loading");const tagInfo=yield this.getTagInfo(tag);tagInfo.isInvalid?this.$infoText.html("Invalid tag name").attr("data-state","error"):(this.$infoText.html(tagInfo.count+" posts"),tagInfo.isAliased&&(this.$infoText.append(" (~"+tagInfo.realName+")"),$input.val(tagInfo.realName)),(AvoidPosting_1.AvoidPosting.contains(tag)||tagInfo.isAliased&&AvoidPosting_1.AvoidPosting.contains(tagInfo.realName))&&this.$infoText.append(": "+tag+' is on <a href="/wiki_pages/85">DNP</a> list'),this.tagAlreadyChecked=!0,E621_1.E621.Wiki.get({"search[title]":encodeURIComponent(tagInfo.realName)},500).then(data=>{const wikiPage=data[0];void 0!==wikiPage&&wikiPage.title===tagInfo.realName&&this.$infoText.append(` <a href="/wiki_pages/${wikiPage.id}">wiki</a>`)}),this.$infoText.attr("data-state","done"))}))}prepareInput(input){return input.trim().toLowerCase()}prepareTag(input){return this.prepareInput(input).replace(/ /g,"_")}insertTag(input){input=this.prepareTag(input),this.$textarea.val((i,text)=>text.endsWith(" ")||0===text.length?text+input:text+" "+input)}insertAlias(input){const aliasList=this.fetchSettings("data");return input=this.prepareTag(input),!!aliasList[input]&&(this.$textarea.val((function(i,text){return text.endsWith(" ")||0===text.length?text+aliasList[input]:text+" "+aliasList[input]})),!0)}tagAlreadyAdded(input){return input=this.prepareTag(input),this.$textarea.val().toString().includes(input)}getTagInfo(tag){return __awaiter(this,void 0,void 0,(function*(){tag=encodeURIComponent(tag);const result={count:0,isInvalid:!1,isAliased:!1,realName:void 0};let jsonData=yield E621_1.E621.Tags.find(tag).get("",500);if(0==jsonData.length||"invalid_tag"===jsonData[0].name)return result.isInvalid=!0,result;result.count=jsonData[0].post_count,result.realName=jsonData[0].name;const aliasJson=yield E621_1.E621.TagAliases.get({"search[antecedent_name]":tag},500);if(void 0!==aliasJson[0]){if(result.isAliased=!0,result.realName=aliasJson[0].consequent_name,"invalid_tag"===result.realName)return result.isInvalid=!0,result;jsonData=yield E621_1.E621.Tags.find(encodeURIComponent(result.realName)).get("",500),result.count=jsonData[0].post_count}return result}))}makeAliasEntry($aliasList,name,data,id){const $aliasForm=this.buildAliasForm($aliasList,name,data,"alias-form-"+id);$aliasForm.appendTo($aliasList),$aliasForm.submit(event=>{event.preventDefault();const $name=$aliasForm.find("input[type='text']"),$data=$aliasForm.find("textarea");this.aliasData[$name.val()+""]=$data.val()+"",this.pushSettings("data",this.aliasData)}),$aliasForm.find("button[type='button']").click(event=>{event.preventDefault();const $name=$aliasForm.find("input[type='text']");this.aliasData[$name.val()+""]=void 0,this.pushSettings("data",this.aliasData),$aliasForm.remove()})}buildAliasForm($aliasList,name,data,id){const $aliasForm=$("<form>").attr("id",id).appendTo($aliasList);return $("<input>").attr({type:"text",name:"name",placeholder:"name",disabled:""}).val(name).appendTo($aliasForm),$("<textarea>").attr({name:"data",placeholder:"tags"}).val(data).appendTo($aliasForm),$("<button>").attr({type:"button"}).html("Delete").appendTo($aliasForm),$("<button>").attr({type:"submit"}).html("Update").appendTo($aliasForm),$aliasForm}}exports.TinyAlias=TinyAlias},{"../../components/RE6Module":3,"../../components/api/E621":7,"../../components/data/AvoidPosting":12,"../../components/data/Page":14,"../../components/structure/Modal":21}],32:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const RE6Module_1=require("../../components/RE6Module"),Page_1=require("../../components/data/Page"),GM_1=require("../../components/api/GM");class WikiEnhancer extends RE6Module_1.RE6Module{constructor(){super(Page_1.PageDefintion.wiki)}getDefaultSettings(){return{enabled:!0}}create(){if(!this.canInitialize())return;super.create();const $title=$("#wiki-page-title"),removeThis=["Artist: ","Copyright: ","Character: ","Species: ","Meta: ","Lore: "];let tagName=$title.text().trim();for(const string of removeThis)tagName=tagName.replace(string,"");tagName=tagName.replace(/ /g,"_"),Page_1.Page.setQueryParameter("title",tagName),this.$buttonCopy=$("<button>").attr("id","wiki-page-copy-tag").addClass("button btn-neutral border-highlight border-left").on("click",()=>{GM_1.GM.setClipboard(tagName)}),$("<i>").addClass("far fa-copy").appendTo(this.$buttonCopy),this.$buttonCopy.appendTo($title)}destroy(){this.isInitialized()&&(super.destroy(),this.$buttonCopy.remove())}}exports.WikiEnhancer=WikiEnhancer},{"../../components/RE6Module":3,"../../components/api/GM":8,"../../components/data/Page":14}],33:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const RE6Module_1=require("../../components/RE6Module"),Page_1=require("../../components/data/Page"),E621_1=require("../../components/api/E621"),Util_1=require("../../components/structure/Util"),DownloadQueue_1=require("../../components/api/DownloadQueue");class PoolDownloader extends RE6Module_1.RE6Module{constructor(){super([Page_1.PageDefintion.pool,Page_1.PageDefintion.set]),this.processing=!1,this.downloadOverSize=!1,this.batchOverSize=!0,this.fileTimestamp=Util_1.Util.getDatetimeShort(),this.downloadIndex=1,this.poolName="",this.poolFiles=[],this.poolDownloaded=[]}getDefaultSettings(){return{enabled:!0,template:"%pool%/%index%-%postid%-%artist%-%copyright%-%character%-%species%",autoDownloadArchive:!0}}create(){if(!this.canInitialize())return;super.create();const base=Page_1.Page.matches(Page_1.PageDefintion.pool)?"div#c-pools":"div#c-sets",container=$(base).addClass("pool-container"),overview=$("div#a-show").addClass("pool-overview");this.actButton=$("<button>").addClass("pool-download-button").addClass("button btn-neutral").html("Download").prependTo(overview).on("click",event=>{event.preventDefault(),container.attr("data-interface","true"),this.processFiles()});const sidebar=$("<aside>").addClass("pool-sidebar").appendTo(container);this.section=$("<section>").attr("id","pool-downloader-box").appendTo(sidebar),$("<h1>").html("Download").appendTo(this.section),this.infoText=$("<div>").addClass("download-info").html("").appendTo(this.section),this.infoFile=$("<div>").addClass("download-file").html("").appendTo(this.section)}processFiles(){if(this.processing)return;let source;this.processing=!0,this.actButton.attr("disabled","disabled"),this.infoText.attr("data-state","loading").html("Indexing pool files . . ."),source=Page_1.Page.matches(Page_1.PageDefintion.pool)?E621_1.E621.Pools.get({"search[id]":Page_1.Page.getPageID()}):E621_1.E621.Sets.get({"search[id]":Page_1.Page.getPageID()}),source.then(poolData=>{if(poolData.length<1)return Promise.reject("Pool not found");const pool=poolData[0],imageList=pool.post_ids.filter(n=>!this.poolDownloaded.includes(n));if(this.poolFiles=pool.post_ids,0===imageList.length)return this.infoText.attr("data-state","error").html("Error: Pool is empty!"),Promise.reject("Pool is empty");this.poolName=pool.name,this.infoText.attr("data-state","loading").html("Fetching API data . . .");const dataQueue=[];return Util_1.Util.chunkArray(imageList,PoolDownloader.chunkSize).forEach(value=>{dataQueue.push(E621_1.E621.Posts.get({tags:"id:"+value.join(",")}))}),Promise.all(dataQueue)}).then(dataChunks=>{const downloadQueue=new DownloadQueue_1.DownloadQueue,threadInfo=[];for(let i=0;i<downloadQueue.getThreadCount();i++)threadInfo.push($("<span>").appendTo(this.infoFile));let totalFileSize=0,queueSize=0;return this.batchOverSize=!1,dataChunks.forEach(chunk=>{this.batchOverSize||chunk.forEach(post=>{if(totalFileSize+=post.file.size,totalFileSize>PoolDownloader.maxBlobSize)return this.batchOverSize=!0,void(this.downloadOverSize=!0);$("article.post-preview#post_"+post.id).attr("data-state","preparing"),downloadQueue.add({name:this.createFilename(post),path:post.file.url,file:post.file.url.replace(/^https:\/\/static1\.e621\.net\/data\/..\/..\//g,""),unid:post.id,date:null===post.updated_at?new Date(post.created_at):new Date(post.updated_at),tags:post.tags.general.join(" ")},{onStart:(item,thread,index)=>{this.infoText.html("Downloading . . . "+(queueSize-index)+" / "+queueSize),threadInfo[thread].html(item.file).css("--progress","0%"),$("article.post-preview#post_"+post.id).attr("data-state","loading")},onFinish:()=>{$("article.post-preview#post_"+post.id).attr("data-state","done")},onError:()=>{$("article.post-preview#post_"+post.id).attr("data-state","error")},onLoadProgress:(item,thread,event)=>{event.lengthComputable&&threadInfo[thread].css("--progress",Math.round(event.loaded/event.total*100)+"%")},onWorkerFinish:(item,thread)=>{threadInfo[thread].remove()}}),this.poolDownloaded.push(post.id)})}),queueSize=downloadQueue.getQueueLength(),this.infoText.html("Processing . . . "),downloadQueue.run(metadata=>{this.infoText.html("Compressing . . . "+metadata.percent.toFixed(2)+"%"),metadata.currentFile?this.infoFile.html(metadata.currentFile):this.infoFile.html("")})}).then(zipData=>{let filename="re621-download-"+this.fileTimestamp;filename+=this.downloadOverSize?"-part"+this.downloadIndex+".zip":".zip",this.infoText.attr("data-state","done").html("Done! "),this.infoFile.html("");const $downloadLink=$("<a>").attr("href",filename).html("Download Archive").appendTo(this.infoText).on("click",event=>{event.preventDefault(),saveAs(zipData,filename)});this.fetchSettings("autoDownloadArchive")&&$downloadLink.get(0).click(),this.downloadIndex++,this.actButton.removeAttr("disabled"),this.processing=!1,this.batchOverSize&&(this.fetchSettings("autoDownloadArchive")?this.actButton.get(0).click():$("<div>").addClass("download-notice").html("Download has exceeded the maximum file size.<br /><br />Click the download button again for the next part.").appendTo(this.infoText))})}createFilename(data){return this.fetchSettings("template").replace(/%postid%/g,data.id).replace(/%artist%/g,data.tags.artist.join("-")).replace(/%copyright%/g,data.tags.copyright.join("-")).replace(/%character%/g,data.tags.character.join("-")).replace(/%species%/g,data.tags.species.join("-")).replace(/%meta%/g,data.tags.meta.join("-")).replace(/%pool%/g,this.poolName).replace(/%index%/g,""+(this.poolFiles.indexOf(data.id)+1)).slice(0,128).replace(/-{2,}/g,"-").replace(/-*$/g,"")+"."+data.file.ext}}exports.PoolDownloader=PoolDownloader,PoolDownloader.chunkSize=100,PoolDownloader.maxBlobSize=838860800},{"../../components/RE6Module":3,"../../components/api/DownloadQueue":6,"../../components/api/E621":7,"../../components/data/Page":14,"../../components/structure/Util":24}],34:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const RE6Module_1=require("../../components/RE6Module"),Post_1=require("../../components/data/Post"),Tag_1=require("../../components/data/Tag"),Page_1=require("../../components/data/Page"),GM_1=require("../../components/api/GM");class DownloadCustomizer extends RE6Module_1.RE6Module{constructor(){super(Page_1.PageDefintion.post)}getDefaultSettings(){return{enabled:!0,template:"%postid%-%artist%-%copyright%-%character%"}}create(){this.canInitialize()&&(super.create(),this.post=Post_1.Post.getViewingPost(),this.link=$("div#image-download-link a"),this.refreshDownloadLink(),this.link.click(event=>{event.preventDefault(),GM_1.GM.download({url:this.link.attr("href"),name:this.link.attr("download"),saveAs:!0})}))}refreshDownloadLink(){this.link.attr("download",this.parseTemplate())}parseTemplate(){return this.fetchSettings("template").replace(/%postid%/g,this.post.getId()).replace(/%artist%/g,this.post.getTagsFromType(Tag_1.TagTypes.Artist).join("-")).replace(/%copyright%/g,this.post.getTagsFromType(Tag_1.TagTypes.Copyright).join("-")).replace(/%character%/g,this.post.getTagsFromType(Tag_1.TagTypes.Character).join("-")).replace(/%species%/g,this.post.getTagsFromType(Tag_1.TagTypes.Species).join("-")).replace(/%meta%/g,this.post.getTagsFromType(Tag_1.TagTypes.Meta).join("-")).slice(0,128).replace(/-{2,}/g,"-").replace(/-*$/g,"")+"."+this.post.getFileExtension()}}exports.DownloadCustomizer=DownloadCustomizer},{"../../components/RE6Module":3,"../../components/api/GM":8,"../../components/data/Page":14,"../../components/data/Post":15,"../../components/data/Tag":17}],35:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const RE6Module_1=require("../../components/RE6Module"),Post_1=require("../../components/data/Post"),Form_1=require("../../components/structure/Form"),Page_1=require("../../components/data/Page"),ModuleController_1=require("../../components/ModuleController"),Danbooru_1=require("../../components/api/Danbooru"),IMAGE_SIZES=[{value:"sample",name:"Sample"},{value:"fit-vertical",name:"Fill Screen"},{value:"fit-horizontal",name:"Fit Horizontally"},{value:"original",name:"Original"}];class ImageScaler extends RE6Module_1.RE6Module{constructor(){super(Page_1.PageDefintion.post),this.registerHotkeys({keys:"hotkeyScale",fnct:()=>{this.setScale()}})}getDefaultSettings(){return{enabled:!0,hotkeyScale:"v|0",clickScale:!0,size:"fit-vertical"}}create(){if(!this.canInitialize())return;super.create(),this.post=Post_1.Post.getViewingPost(),this.image=$("img#image");const resizeButtonContainer=$("#image-resize-cycle").empty();this.setImageSize(this.fetchSettings("size"));const resizeForm=new Form_1.Form({id:"resize-image",parent:"#image-resize-cycle",columns:2},[{id:"scale",type:"select",data:IMAGE_SIZES,value:this.fetchSettings("size")},{id:"fullsize",type:"div",value:'<a href="'+this.post.getImageURL()+'" class="button btn-neutral" id="fullsize-image">Fullscreen</a>'}]);resizeButtonContainer.append(resizeForm.get()),this.resizeSelector=resizeForm.getInputList().get("scale"),this.resizeSelector.change((event,save)=>{const size=$(event.target).val()+"";this.setImageSize(size),!1!==save&&this.pushSettings("size",size)}),this.image.click(()=>{this.fetchSettings("clickScale")&&!Danbooru_1.Danbooru.Note.TranslationMode.active&&this.setScale("",!1)}),this.registerHotkeys()}setScale(size="",save=!0){const selector=ModuleController_1.ModuleController.getWithType(ImageScaler).resizeSelector;if(""===size){const $next=selector.find("option:selected").next();size=$next.length>0?$next.val()+"":selector.find("option").first().val()+""}selector.val(size).trigger("change",save)}setImageSize(size){switch(this.image.removeClass(),this.image.parent().addClass("loading"),this.image.on("load",()=>{Danbooru_1.Danbooru.Note.Box.scale_all(),this.image.parent().removeClass("loading")}),size){case"sample":this.image.attr("src",this.post.getSampleURL());break;case"fit-vertical":this.image.addClass("re621-fit-vertical"),this.image.attr("src")!==this.post.getImageURL()?this.image.attr("src",this.post.getImageURL()):this.image.parent().removeClass("loading");break;case"fit-horizontal":this.image.addClass("re621-fit-horizontal"),this.image.attr("src")!==this.post.getImageURL()?this.image.attr("src",this.post.getImageURL()):this.image.parent().removeClass("loading");break;case"original":this.image.attr("src")!==this.post.getImageURL()?this.image.attr("src",this.post.getImageURL()):this.image.parent().removeClass("loading")}Danbooru_1.Danbooru.Note.Box.scale_all()}}exports.ImageScaler=ImageScaler},{"../../components/ModuleController":2,"../../components/RE6Module":3,"../../components/api/Danbooru":5,"../../components/data/Page":14,"../../components/data/Post":15,"../../components/structure/Form":20}],36:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const RE6Module_1=require("../../components/RE6Module"),Page_1=require("../../components/data/Page"),ModuleController_1=require("../../components/ModuleController");class PoolNavigator extends RE6Module_1.RE6Module{constructor(){super(Page_1.PageDefintion.post),this.activeNav=0,this.navbars=[],this.registerHotkeys({keys:"hotkeyCycle",fnct:this.cycleNavbars},{keys:"hotkeyNext",fnct:this.triggerNextPost},{keys:"hotkeyPrev",fnct:this.triggerPrevPost})}getDefaultSettings(){return{enabled:!0,hotkeyCycle:"x|.",hotkeyPrev:"a|left",hotkeyNext:"d|right"}}create(){this.canInitialize()&&(super.create(),this.buildDOM(),$("input[type='radio'].post-nav-switch").change(event=>{this.activeNav=parseInt($(event.target).val()+"")}),this.registerHotkeys())}cycleNavbars(){const poolNavigator=ModuleController_1.ModuleController.getWithType(PoolNavigator),navbars=poolNavigator.navbars,active=poolNavigator.activeNav;0!=navbars.length&&(active+1>=navbars.length?navbars[0].checkbox.click():navbars[active+1].checkbox.click())}triggerNextPost(){const poolNavigator=ModuleController_1.ModuleController.getWithType(PoolNavigator),navbars=poolNavigator.navbars,active=poolNavigator.activeNav;0!=navbars.length&&navbars[active].element.find("a.next").first()[0].click()}triggerPrevPost(){const poolNavigator=ModuleController_1.ModuleController.getWithType(PoolNavigator),navbars=poolNavigator.navbars,active=poolNavigator.activeNav;0!=navbars.length&&navbars[active].element.find("a.prev").first()[0].click()}buildDOM(){$("div#search-seq-nav").length&&this.navbars.push({type:"search",element:$("div#search-seq-nav > ul > li").first(),checkbox:void 0}),$("div#pool-nav > ul > li").each((index,element)=>{this.navbars.push({type:"pool",element:$(element),checkbox:void 0})}),this.navbars.forEach((nav,index)=>{nav.element.addClass("post-nav");const $radioBox=$("<div>").addClass("post-nav-switch-box").prependTo(nav.element);$("<div>").addClass("post-nav-spacer").appendTo(nav.element),nav.checkbox=$("<input>").attr("type","radio").attr("id","post-nav-switch-"+index).attr("name","nav").val(index).addClass("post-nav-switch").appendTo($radioBox),index===this.activeNav&&nav.checkbox.attr("checked",""),$("<label>").attr("for","post-nav-switch-"+index).appendTo($radioBox)})}}exports.PoolNavigator=PoolNavigator},{"../../components/ModuleController":2,"../../components/RE6Module":3,"../../components/data/Page":14}],37:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const Post_1=require("../../components/data/Post"),RE6Module_1=require("../../components/RE6Module"),Page_1=require("../../components/data/Page"),ModuleController_1=require("../../components/ModuleController"),Danbooru_1=require("../../components/api/Danbooru");class PostViewer extends RE6Module_1.RE6Module{constructor(){super(Page_1.PageDefintion.post),this.registerHotkeys({keys:"hotkeyUpvote",fnct:this.triggerUpvote},{keys:"hotkeyDownvote",fnct:this.triggerDownvote},{keys:"hotkeyFavorite",fnct:this.toggleFavorite},{keys:"hotkeyHideNotes",fnct:this.toggleNotes},{keys:"hotkeyNewNote",fnct:this.switchNewNote})}getDefaultSettings(){return{enabled:!0,hotkeyUpvote:"w",hotkeyDownvote:"s",hotkeyFavorite:"f",hotkeyHideNotes:"o",hotkeyNewNote:"p",upvoteOnFavorite:!0,hideNotes:!1}}create(){if(!this.canInitialize())return;super.create(),this.post=Post_1.Post.getViewingPost();const $addToContainer=$("<div>").attr("id","image-add-links").insertAfter("div#image-download-link");$("li#add-to-set-list > a").addClass("image-add-set").addClass("button btn-neutral").html("+ Set").appendTo($addToContainer),$("li#add-to-pool-list > a").addClass("image-add-pool").addClass("button btn-neutral").html("+ Pool").appendTo($addToContainer);const $noteToggleCountainer=$("<div>").attr("id","image-toggle-notes").insertAfter("div#image-add-links");$("<a>").attr({id:"image-note-button",href:"#"}).addClass("button btn-neutral").appendTo($noteToggleCountainer).html(this.fetchSettings("hideNotes")?"Notes: Off":"Notes: On").on("click",event=>{event.preventDefault(),this.toggleNotes()}),$("div#note-container").css("display","").attr("data-hidden",this.fetchSettings("hideNotes")),$(".parent-children").insertAfter($("#search-box")),$("button#add-fav-button").on("click",()=>{this.fetchSettings("upvoteOnFavorite")&&Danbooru_1.Danbooru.Post.vote(Post_1.Post.getViewingPost().getId(),1,!0)}),this.registerHotkeys()}triggerUpvote(){Danbooru_1.Danbooru.Post.vote(Post_1.Post.getViewingPost().getId(),1)}triggerDownvote(){Danbooru_1.Danbooru.Post.vote(Post_1.Post.getViewingPost().getId(),-1)}toggleFavorite(){$("div.fav-buttons").hasClass("fav-buttons-false")?$("button#add-fav-button")[0].click():$("button#remove-fav-button")[0].click()}toggleNotes(){const module=ModuleController_1.ModuleController.get(PostViewer),hideNotes=module.fetchSettings("hideNotes");hideNotes?($("div#note-container").attr("data-hidden","false"),$("a#image-note-button").html("Notes: ON")):($("div#note-container").attr("data-hidden","true"),$("a#image-note-button").html("Notes: OFF")),module.pushSettings("hideNotes",!hideNotes)}switchNewNote(){$("div#note-container").attr("data-hidden","false"),$("a#image-note-button").html("Notes: ON"),ModuleController_1.ModuleController.get(PostViewer).pushSettings("hideNotes",!1),Danbooru_1.Danbooru.Note.TranslationMode.toggle(new Event("dummy-event"))}}exports.PostViewer=PostViewer},{"../../components/ModuleController":2,"../../components/RE6Module":3,"../../components/api/Danbooru":5,"../../components/data/Page":14,"../../components/data/Post":15}],38:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const Post_1=require("../../components/data/Post"),RE6Module_1=require("../../components/RE6Module"),Tag_1=require("../../components/data/Tag"),Page_1=require("../../components/data/Page");class TitleCustomizer extends RE6Module_1.RE6Module{constructor(){super(Page_1.PageDefintion.post)}getDefaultSettings(){return{enabled:!0,template:"#%postid% by %artist% (%copyright%) - %character%",symbolsEnabled:!0,symbolFav:"♥",symbolVoteUp:"↑",symbolVoteDown:"↓"}}create(){this.canInitialize()&&(super.create(),this.post=Post_1.Post.getViewingPost(),this.refreshPageTitle())}refreshPageTitle(){document.title=this.parseTemplate()}parseTemplate(){let prefix="";return this.fetchSettings("symbolsEnabled")&&(this.post.getIsFaved()&&(prefix+=this.fetchSettings("symbolFav")),this.post.getIsUpvoted()?prefix+=this.fetchSettings("symbolVoteUp"):this.post.getIsDownvoted()&&(prefix+=this.fetchSettings("symbolVoteDown")),prefix&&(prefix+=" ")),prefix+this.fetchSettings("template").replace(/%postid%/g,this.post.getId().toString()).replace(/%artist%/g,this.post.getTagsFromType(Tag_1.TagTypes.Artist).filter(tag=>Tag_1.Tag.isArist(tag)).join(", ")).replace(/%copyright%/g,this.post.getTagsFromType(Tag_1.TagTypes.Copyright).join(", ")).replace(/%character%/g,this.post.getTagsFromType(Tag_1.TagTypes.Character).join(", ")).replace(/%species%/g,this.post.getTagsFromType(Tag_1.TagTypes.Species).join(", ")).replace(/%meta%/g,this.post.getTagsFromType(Tag_1.TagTypes.Meta).join(", ")).replace(/\(\)|( - )$/g,"").replace(/[ ]{2,}|^ | $/g,"")+" - "+Page_1.Page.getSiteName()}}exports.TitleCustomizer=TitleCustomizer},{"../../components/RE6Module":3,"../../components/data/Page":14,"../../components/data/Post":15,"../../components/data/Tag":17}],39:[function(require,module,exports){"use strict";var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){return new(P||(P=Promise))((function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator.throw(value))}catch(e){reject(e)}}function step(result){var value;result.done?resolve(result.value):(value=result.value,value instanceof P?value:new P((function(resolve){resolve(value)}))).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())}))};Object.defineProperty(exports,"__esModule",{value:!0});const RE6Module_1=require("../../components/RE6Module"),Page_1=require("../../components/data/Page"),Post_1=require("../../components/data/Post"),User_1=require("../../components/data/User"),Danbooru_1=require("../../components/api/Danbooru");class BlacklistEnhancer extends RE6Module_1.RE6Module{constructor(){super([Page_1.PageDefintion.search,Page_1.PageDefintion.post])}getDefaultSettings(){return{enabled:!0,quickaddTags:!0}}create(){this.canInitialize()&&(super.create(),Danbooru_1.Danbooru.Blacklist.apply=()=>{},Danbooru_1.Danbooru.Blacklist.initialize_anonymous_blacklist=()=>{},Danbooru_1.Danbooru.Blacklist.initialize_all=()=>{},Danbooru_1.Danbooru.Blacklist.initialize_disable_all_blacklists(),$("#blacklisted-hider").remove(),this.modifyDOM(),this.applyBlacklist(!0))}modifyDOM(){this.$box=$("section#blacklist-box"),this.$list=$("#blacklist-list").empty();const $disableAllButton=$("#disable-all-blacklists").text("Disable all filters"),$enableAllbutton=$("#re-enable-all-blacklists").text("Enable all filters");$disableAllButton.off("click.danbooru").on("click.re621",()=>{for(const filter of User_1.User.getBlacklist().values())filter.setEnabled(!1);this.applyBlacklist(),$disableAllButton.hide(),$enableAllbutton.show()}),$enableAllbutton.off("click.danbooru").on("click.re621",()=>{for(const filter of User_1.User.getBlacklist().values())filter.setEnabled(!0);this.applyBlacklist(),$disableAllButton.show(),$enableAllbutton.hide()}),!0===this.fetchSettings("quickaddTags")&&User_1.User.isLoggedIn()&&$("div.tag-actions span.tag-action-blacklist").each((index,element)=>{const $container=$(element);$("<a>").attr({href:"#",title:"Blacklist Tag"}).addClass("blacklist-tag-toggle").html('<i class="fas fa-times"></i>').prependTo($container).click(event=>{event.preventDefault(),this.toggleBlacklistTag($container.parent().attr("data-tag"))})})}toggleBlacklistTag(tag){return __awaiter(this,void 0,void 0,(function*(){Danbooru_1.Danbooru.notice("Getting current blacklist");let currentBlacklist=(yield User_1.User.getCurrentSettings()).blacklisted_tags.split("\n");-1===currentBlacklist.indexOf(tag)?(currentBlacklist.push(tag),User_1.User.getInstance().addBlacklistFilter(tag),Danbooru_1.Danbooru.notice("Adding "+tag+" to blacklist")):(currentBlacklist=currentBlacklist.filter(e=>e!==tag),User_1.User.getInstance().removeBlacklistFilter(tag),Danbooru_1.Danbooru.notice("Removing "+tag+" from blacklist")),yield User_1.User.setSettings({blacklisted_tags:currentBlacklist.join("\n")}),Danbooru_1.Danbooru.notice("Done!"),this.applyBlacklist()}))}applyBlacklist(firstRun=!1){for(const post of Post_1.Post.fetchPosts())firstRun&&!post.getDomElement().is(":visible")||post instanceof Post_1.ViewingPost||post.applyBlacklist();this.updateSidebar()}updateSidebar(){this.$list.empty();for(const entry of User_1.User.getBlacklist().entries())this.addSidebarEntry(entry[0],entry[1]);let nonZeorFilterCount=0;for(const filter of User_1.User.getBlacklist().values())0!==filter.getMatches()&&nonZeorFilterCount++;0===nonZeorFilterCount?this.$box.hide():this.$box.show(),$("#blacklisted-count").text(`(${User_1.User.getTotalBlacklistMatches()})`)}addSidebarEntry(filterString,filter){if(0===filter.getMatches())return;const $entry=$("<li>"),$link=$("<a>"),$count=$("<span>");$link.text(filterString),$link.addClass("blacklist-toggle-link"),$link.attr("href",`/posts?tags=${encodeURIComponent(filterString)}`),$link.attr("title",filterString),$link.attr("rel","nofollow"),$link.on("click",e=>{e.preventDefault(),filter.toggleEnabled(),this.applyBlacklist(),$link.toggleClass("blacklisted-active")}),filter.isEnabled()||$link.addClass("blacklisted-active"),$count.html(filter.getMatches()+""),$count.addClass("post-count"),$entry.append($link),$entry.append(" "),$entry.append($count),this.$list.append($entry)}}exports.BlacklistEnhancer=BlacklistEnhancer},{"../../components/RE6Module":3,"../../components/api/Danbooru":5,"../../components/data/Page":14,"../../components/data/Post":15,"../../components/data/User":18}],40:[function(require,module,exports){"use strict";var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){return new(P||(P=Promise))((function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator.throw(value))}catch(e){reject(e)}}function step(result){var value;result.done?resolve(result.value):(value=result.value,value instanceof P?value:new P((function(resolve){resolve(value)}))).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())}))};Object.defineProperty(exports,"__esModule",{value:!0});const RE6Module_1=require("../../components/RE6Module"),Page_1=require("../../components/data/Page"),E621_1=require("../../components/api/E621"),PostHtml_1=require("../../components/api/PostHtml"),InstantSearch_1=require("./InstantSearch"),Post_1=require("../../components/data/Post"),BlacklistEnhancer_1=require("./BlacklistEnhancer"),ModuleController_1=require("../../components/ModuleController"),ThumbnailsEnhancer_1=require("./ThumbnailsEnhancer"),Danbooru_1=require("../../components/api/Danbooru");class InfiniteScroll extends RE6Module_1.RE6Module{constructor(){super(Page_1.PageDefintion.search)}getDefaultSettings(){return{enabled:!0}}create(){if(!this.canInitialize())return;super.create(),this.$postContainer=$("#posts-container"),this.$loadingIndicator=$("<div>").attr("id","re-infinite-scroll-loading").addClass("lds-dual-ring"),this.$loadingIndicator.insertAfter(this.$postContainer),this.$loadingIndicator.hide(),this.$nextButton=$("<a>").text("Load next").on("click",()=>{this.addMorePosts(!0)}),this.$nextButton.attr("id","re-infinite-scroll-next").addClass("text-center").insertAfter(this.$postContainer),this.currentQuery=null!==Page_1.Page.getQueryParameter("tags")?Page_1.Page.getQueryParameter("tags"):"";const page=parseInt(Page_1.Page.getQueryParameter("page"));this.nextPageToGet=isNaN(page)?2:page+1,this.isInProgress=!1,this.pagesLeft=!0,$(()=>{$(window).scroll(()=>__awaiter(this,void 0,void 0,(function*(){yield this.addMorePosts()})))})}destroy(){super.destroy(),this.$nextButton.remove()}addMorePosts(override=!1){return __awaiter(this,void 0,void 0,(function*(){if(!this.isEnabled()||this.isInProgress||!this.pagesLeft||!this.shouldAddMore(override)||InfiniteScroll.scrollPaused)return;this.isInProgress=!0,this.$loadingIndicator.show();const posts=yield E621_1.E621.Posts.get({tags:this.currentQuery,page:this.nextPageToGet});if(0===posts.length)return this.pagesLeft=!1,this.$loadingIndicator.hide(),this.$nextButton.hide(),void Danbooru_1.Danbooru.notice("No more posts!");Page_1.Page.setQueryParameter("page",this.nextPageToGet.toString()),this.addPageIndicator();const thumbnailEnhancer=ModuleController_1.ModuleController.get(ThumbnailsEnhancer_1.ThumbnailEnhancer),upscaleMode=thumbnailEnhancer.fetchSettings("upscale"),clickAction=thumbnailEnhancer.fetchSettings("clickAction");for(const json of posts){const element=PostHtml_1.PostHtml.create(json,upscaleMode===ThumbnailsEnhancer_1.ThumbnailPerformanceMode.Always),post=new Post_1.Post(element);void 0!==post.getImageURL()&&(Post_1.Post.appendPost(post),post.applyBlacklist(),this.$postContainer.append(element),ThumbnailsEnhancer_1.ThumbnailEnhancer.modifyThumbnail(element,upscaleMode,clickAction))}this.isInProgress=!1,this.$loadingIndicator.hide(),ModuleController_1.ModuleController.getWithType(BlacklistEnhancer_1.BlacklistEnhancer).updateSidebar(),ModuleController_1.ModuleController.getWithType(InstantSearch_1.InstantSearch).applyFilter(),this.$postContainer.trigger("re621.infiniteScroll.pageLoad"),this.nextPageToGet++}))}addPageIndicator(){const url=document.location.href;this.$postContainer.append($("<a>").attr("href",url).addClass("instantsearch-seperator").html(`<h2>Page: ${this.nextPageToGet}</h2>`))}shouldAddMore(override){return $(window).scrollTop()+$(window).height()>$(document).height()-50||override}static pauseScroll(scrollPaused=!0){InfiniteScroll.scrollPaused=scrollPaused}}exports.InfiniteScroll=InfiniteScroll,InfiniteScroll.scrollPaused=!1},{"../../components/ModuleController":2,"../../components/RE6Module":3,"../../components/api/Danbooru":5,"../../components/api/E621":7,"../../components/api/PostHtml":9,"../../components/data/Page":14,"../../components/data/Post":15,"./BlacklistEnhancer":39,"./InstantSearch":41,"./ThumbnailsEnhancer":43}],41:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const RE6Module_1=require("../../components/RE6Module"),Page_1=require("../../components/data/Page"),Post_1=require("../../components/data/Post"),PostFilter_1=require("../../components/data/PostFilter");class InstantSearch extends RE6Module_1.RE6Module{constructor(){super(Page_1.PageDefintion.search)}getDefaultSettings(){return{enabled:!0}}create(){if(!this.canInitialize())return;let typingTimeout;super.create(),this.createDOM(),this.$searchbox.on("input",()=>{clearTimeout(typingTimeout),typingTimeout=window.setTimeout(()=>{this.applyFilter()},500)}),this.$searchbox.trigger("input")}destroy(){this.isInitialized()&&(super.destroy(),this.$searchbox.val(""),this.applyFilter(),$("section#re-instantsearch").remove())}applyFilter(){const filterText=this.$searchbox.val().toString().trim(),filter=new PostFilter_1.PostFilter(filterText);sessionStorage.setItem("re-instantsearch",filterText);const posts=Post_1.Post.fetchPosts();if(""===filterText)for(const post of posts)post.show();else for(const post of posts)filter.addPost(post,!0)?post.show():post.hide()}createDOM(){const $section=$("<section>").attr("id","re-instantsearch").insertAfter("section#search-box");$("<h1>").html("Filter").appendTo($section);const $searchForm=$("<form>").appendTo($section);this.$searchbox=$("<input>").attr("id","re-instantsearch-input").attr("type","text").val(sessionStorage.getItem("re-instantsearch")).appendTo($searchForm),$("<button>").attr("type","submit").html('<i class="fas fa-search"></i>').appendTo($searchForm)}}exports.InstantSearch=InstantSearch},{"../../components/RE6Module":3,"../../components/data/Page":14,"../../components/data/Post":15,"../../components/data/PostFilter":16}],42:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const RE6Module_1=require("../../components/RE6Module"),Page_1=require("../../components/data/Page"),ThumbnailsEnhancer_1=require("./ThumbnailsEnhancer"),Util_1=require("../../components/structure/Util"),E621_1=require("../../components/api/E621"),DownloadQueue_1=require("../../components/api/DownloadQueue"),InfiniteScroll_1=require("./InfiniteScroll");class MassDownloader extends RE6Module_1.RE6Module{constructor(){super(Page_1.PageDefintion.search),this.showInterface=!1,this.processing=!1,this.downloadOverSize=!1,this.batchOverSize=!0,this.fileTimestamp=Util_1.Util.getDatetimeShort(),this.downloadIndex=1}getDefaultSettings(){return{enabled:!0,template:"%artist%/%postid%-%copyright%-%character%-%species%",autoDownloadArchive:!0}}create(){this.canInitialize()&&(super.create(),this.section=$("<section>").attr("id","downloader-box").appendTo("aside#sidebar"),$("<h1>").html("Download").appendTo(this.section),this.selectButton=$("<a>").html("Select").attr("id","download-select").addClass("button btn-neutral").appendTo(this.section).on("click",event=>{event.preventDefault(),this.toggleInterface()}),this.actButton=$("<a>").html("Download").attr("id","download-act").addClass("button btn-neutral").appendTo(this.section).on("click",event=>{event.preventDefault(),this.processFiles()}),this.infoText=$("<div>").addClass("download-info").html("").appendTo(this.section),this.infoFile=$("<div>").addClass("download-file").html("").appendTo(this.section),this.container=$("div#posts-container").selectable({autoRefresh:!1,filter:"article.post-preview",selected:function(event,ui){$(ui.selected).toggleClass("download-item").attr("data-state","ready")}}),this.container.on("re621.infiniteScroll.pageLoad",()=>{this.container.selectable("refresh")}))}toggleInterface(){this.showInterface=!this.showInterface,ThumbnailsEnhancer_1.ThumbnailEnhancer.pauseHoverActions(this.showInterface),this.showInterface?(this.selectButton.html("Cancel"),this.section.attr("data-interface","true"),this.infoText.html('Click on thumbnails to select them, then press "Download"'),this.container.attr("data-downloading","true").selectable("refresh").selectable("enable")):(this.selectButton.html("Select"),this.section.attr("data-interface","false"),this.container.attr("data-downloading","false").selectable("disable"))}processFiles(){if(this.processing)return;this.processing=!0,this.actButton.attr("disabled","disabled"),InfiniteScroll_1.InfiniteScroll.pauseScroll(this.showInterface),this.infoText.attr("data-state","loading").html("Indexing selected files . . .");const imageList=[];if($("article.post-preview.download-item[data-state=ready]").each((index,element)=>{imageList.push(parseInt($(element).attr("data-id")))}),0===imageList.length)return void this.infoText.attr("data-state","error").html("Error: No files selected!");this.infoText.attr("data-state","loading").html("Fetching API data . . .");const dataQueue=[];Util_1.Util.chunkArray(imageList,MassDownloader.chunkSize).forEach(value=>{dataQueue.push(E621_1.E621.Posts.get({tags:"id:"+value.join(",")}))}),Promise.all(dataQueue.reverse()).then(dataChunks=>{const downloadQueue=new DownloadQueue_1.DownloadQueue,threadInfo=[];for(let i=0;i<downloadQueue.getThreadCount();i++)threadInfo.push($("<span>").appendTo(this.infoFile));let totalFileSize=0,queueSize=0;return this.batchOverSize=!1,dataChunks.forEach(chunk=>{this.batchOverSize||chunk.forEach(post=>{if(totalFileSize+=post.file.size,totalFileSize>MassDownloader.maxBlobSize)return this.batchOverSize=!0,void(this.downloadOverSize=!0);$("article.post-preview#post_"+post.id).attr("data-state","preparing"),downloadQueue.add({name:this.createFilename(post),path:post.file.url,file:post.file.url.replace(/^https:\/\/static1\.e621\.net\/data\/..\/..\//g,""),unid:post.id,date:null===post.updated_at?new Date(post.created_at):new Date(post.updated_at),tags:post.tags.general.join(" ")},{onStart:(item,thread,index)=>{this.infoText.html("Downloading . . . "+(queueSize-index)+" / "+queueSize),threadInfo[thread].html(item.file).css("--progress","0%"),$("article.post-preview#post_"+post.id).attr("data-state","loading")},onFinish:()=>{$("article.post-preview#post_"+post.id).attr("data-state","done")},onError:()=>{$("article.post-preview#post_"+post.id).attr("data-state","error")},onLoadProgress:(item,thread,event)=>{event.lengthComputable&&threadInfo[thread].css("--progress",Math.round(event.loaded/event.total*100)+"%")},onWorkerFinish:(item,thread)=>{threadInfo[thread].remove()}})})}),queueSize=downloadQueue.getQueueLength(),this.infoText.html("Processing . . . "),downloadQueue.run(metadata=>{this.infoText.html("Compressing . . . "+metadata.percent.toFixed(2)+"%"),metadata.currentFile?this.infoFile.html(metadata.currentFile):this.infoFile.html("")})}).then(zipData=>{let filename="re621-download-"+this.fileTimestamp;filename+=this.downloadOverSize?"-part"+this.downloadIndex+".zip":".zip",this.infoText.attr("data-state","done").html("Done! "),this.infoFile.html("");const $downloadLink=$("<a>").attr("href",filename).html("Download Archive").appendTo(this.infoText).on("click",event=>{event.preventDefault(),saveAs(zipData,filename)});this.fetchSettings("autoDownloadArchive")&&$downloadLink.get(0).click(),this.downloadIndex++,this.actButton.removeAttr("disabled"),this.processing=!1,this.batchOverSize&&(this.fetchSettings("autoDownloadArchive")?this.actButton.get(0).click():$("<div>").addClass("download-notice").html("Download has exceeded the maximum file size.<br /><br />Click the download button again for the next part.").appendTo(this.infoText))})}createFilename(data){return this.fetchSettings("template").replace(/%postid%/g,data.id).replace(/%artist%/g,data.tags.artist.join("-")).replace(/%copyright%/g,data.tags.copyright.join("-")).replace(/%character%/g,data.tags.character.join("-")).replace(/%species%/g,data.tags.species.join("-")).replace(/%meta%/g,data.tags.meta.join("-")).slice(0,128).replace(/-{2,}/g,"-").replace(/-*$/g,"")+"."+data.file.ext}}exports.MassDownloader=MassDownloader,MassDownloader.chunkSize=100,MassDownloader.maxBlobSize=838860800},{"../../components/RE6Module":3,"../../components/api/DownloadQueue":6,"../../components/api/E621":7,"../../components/data/Page":14,"../../components/structure/Util":24,"./InfiniteScroll":40,"./ThumbnailsEnhancer":43}],43:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const RE6Module_1=require("../../components/RE6Module"),Page_1=require("../../components/data/Page"),Util_1=require("../../components/structure/Util"),GM_1=require("../../components/api/GM"),Danbooru_1=require("../../components/api/Danbooru"),ModuleController_1=require("../../components/ModuleController");var ThumbnailPerformanceMode,ThumbnailClickAction;!function(ThumbnailPerformanceMode){ThumbnailPerformanceMode.Disabled="disabled",ThumbnailPerformanceMode.Hover="hover",ThumbnailPerformanceMode.Always="always"}(ThumbnailPerformanceMode=exports.ThumbnailPerformanceMode||(exports.ThumbnailPerformanceMode={})),function(ThumbnailClickAction){ThumbnailClickAction.Disabled="disabled",ThumbnailClickAction.NewTab="newtab",ThumbnailClickAction.CopyID="copyid"}(ThumbnailClickAction=exports.ThumbnailClickAction||(exports.ThumbnailClickAction={}));class ThumbnailEnhancer extends RE6Module_1.RE6Module{constructor(){super([Page_1.PageDefintion.search,Page_1.PageDefintion.popular,Page_1.PageDefintion.favorites])}getDefaultSettings(){return{enabled:!0,upscale:ThumbnailPerformanceMode.Hover,zoom:!1,zoomScale:"2",zoomContextual:!0,vote:!0,crop:!0,cropSize:"150px",cropRatio:"0.9",ribbons:!0,relRibbons:!0,clickAction:ThumbnailClickAction.NewTab}}create(){this.postContainer=$("div#posts-container");const upscaleMode=this.fetchSettings("upscale"),clickAction=this.fetchSettings("clickAction");$("div#posts-container article.post-preview").each((index,element)=>{ThumbnailEnhancer.modifyThumbnail($(element),upscaleMode,clickAction)}),this.toggleHoverZoom(this.fetchSettings("zoom")),this.setZoomScale(this.fetchSettings("zoomScale")),this.toggleZoomContextual(this.fetchSettings("zoomContextual")),this.toggleHoverVote(this.fetchSettings("vote")),this.toggleThumbCrop(this.fetchSettings("crop")),this.setThumbSize(this.fetchSettings("cropSize")),this.setThumbRatio(this.fetchSettings("cropRatio")),this.toggleStatusRibbons(this.fetchSettings("ribbons")),this.toggleRelationRibbons(this.fetchSettings("relRibbons"))}toggleHoverZoom(state=!0){this.postContainer.attr("data-thumb-zoom",state+"")}setZoomScale(scale){this.postContainer.css("--thumbnail-zoom",scale)}toggleZoomContextual(state=!0){this.postContainer.attr("data-thumb-zoom-context",state+"")}toggleHoverVote(state=!0){this.postContainer.attr("data-thumb-vote",state+"")}toggleThumbCrop(state=!0){this.postContainer.attr("data-thumb-crop",state+"")}setThumbSize(size){this.postContainer.css("--thumbnail-size",size)}setThumbRatio(ratio){this.postContainer.css("--thumbnail-ratio",ratio)}toggleStatusRibbons(state=!0){this.postContainer.attr("data-thumb-ribbons",state+"")}toggleRelationRibbons(state=!0){this.postContainer.attr("data-thumb-rel-ribbons",state+"")}static pauseHoverActions(zoomPaused=!0){if(zoomPaused)$("div#posts-container").attr({"data-thumb-zoom":"false","data-thumb-vote":"false"});else{const module=ModuleController_1.ModuleController.get(ThumbnailEnhancer);$("div#posts-container").attr({"data-thumb-zoom":module.fetchSettings("zoom"),"data-thumb-vote":module.fetchSettings("vote")})}ThumbnailEnhancer.zoomPaused=zoomPaused}static modifyThumbnail($article,upscaleMode=ThumbnailPerformanceMode.Hover,clickAction=ThumbnailClickAction.NewTab){const $link=$article.find("a.preview-box"),postID=parseInt($article.attr("data-id")),$picture=$article.find("picture"),$img=$article.find("img"),$imgData=$img.attr("title").split("\n").slice(0,-2);$article.find("source").remove(),$img.removeAttr("title").attr("alt","#"+$article.attr("data-id")),$("<div>").addClass("preview-load").html('<i class="fas fa-circle-notch fa-2x fa-spin"></i>').appendTo($link),$picture.addClass("picture-container");const state=$("<div>").addClass("rel-ribbon").append($("<span>")).appendTo($picture);let stateText="";$article.hasClass("post-status-has-children")&&(state.addClass("thumb-ribbon thumb-ribbon-has-children"),stateText+="Child posts\n"),$article.hasClass("post-status-has-parent")&&(state.addClass("thumb-ribbon thumb-ribbon-has-parent"),stateText+="Parent posts\n"),state.hasClass("thumb-ribbon")?state.addClass("left").attr("title",stateText):state.remove();const ribbon=$("<div>").addClass("flag-ribbon").append($("<span>")).appendTo($picture);let ribbonText="";$article.hasClass("post-status-flagged")&&(ribbon.addClass("thumb-ribbon thumb-ribbon-flagged"),ribbonText+="Flagged\n"),$article.hasClass("post-status-pending")&&(ribbon.addClass("thumb-ribbon thumb-ribbon-pending"),ribbonText+="Pending\n"),ribbon.hasClass("thumb-ribbon")?ribbon.addClass("right").attr("title",ribbonText):ribbon.remove();const $extrasBox=$("<div>").addClass("bg-highlight preview-extras").appendTo($link);$("<span>").html($imgData[4]).appendTo($extrasBox),$("<span>").html(function(input){switch(input){case"Rating: e":return"Explicit";case"Rating: q":return"Questionable";case"Rating: s":return"Safe";default:return"Unknown"}}($imgData[0])).appendTo($extrasBox),$("<span>").html(function(input){const date=new Date(input.split(": ").pop().replace(" ","T").replace(" ",""));return'<span title="'+date.toLocaleString()+'">'+Util_1.Util.timeAgo(date)+"</span>"}($imgData[2])).appendTo($extrasBox);const $voteBox=$("<div>").addClass("preview-voting").appendTo($link),$voteUp=$("<button>").attr("href","#").html('<i class="far fa-thumbs-up"></i>').addClass("button score-neutral voteButton post-vote-up-"+postID).appendTo($voteBox),$voteDown=$("<button>").attr("href","#").html('<i class="far fa-thumbs-down"></i>').addClass("button score-neutral voteButton post-vote-down-"+postID).appendTo($voteBox);let dbclickTimer;$voteUp.click(event=>{event.preventDefault(),Danbooru_1.Danbooru.Post.vote(postID,1)}),$voteDown.click(event=>{event.preventDefault(),Danbooru_1.Danbooru.Post.vote(postID,-1)});let prevent=!1;if($link.on("click.re621.thumbnail",event=>{0!==event.button||ThumbnailEnhancer.zoomPaused||$(event.target).hasClass("voteButton")||$(event.target).parent().hasClass("voteButton")||(event.preventDefault(),dbclickTimer=window.setTimeout(()=>{prevent||($link.off("click.re621.thumbnail"),$link[0].click()),prevent=!1},200))}).on("dblclick.re621.thumbnail",event=>{0!==event.button||ThumbnailEnhancer.zoomPaused||$(event.target).hasClass("voteButton")||$(event.target).parent().hasClass("voteButton")||(event.preventDefault(),window.clearTimeout(dbclickTimer),prevent=!0,$article.addClass("highlight"),window.setTimeout(()=>$article.removeClass("highlight"),250),clickAction===ThumbnailClickAction.NewTab?GM_1.GM.openInTab(window.location.origin+$link.attr("href")):clickAction===ThumbnailClickAction.CopyID?GM_1.GM.setClipboard($article.attr("data-id"),"text"):($link.off("click.re621.thumbnail"),$link[0].click()))}),"swf"===$article.attr("data-file-ext")||"deleted"===$article.attr("data-flags"))return;const sampleURL=$article.attr("data-large-file-url");if(upscaleMode===ThumbnailPerformanceMode.Hover){let timer;$article.on("mouseenter",()=>{ThumbnailEnhancer.zoomPaused||(timer=window.setTimeout(()=>{$img.attr("src")!=sampleURL&&($link.addClass("loading"),$img.attr({src:sampleURL,"data-src":sampleURL}),$img.on("load",()=>{$link.removeClass("loading"),$article.addClass("loaded")}))},200))}),$article.on("mouseleave",()=>{window.clearTimeout(timer)})}else upscaleMode===ThumbnailPerformanceMode.Always&&($link.addClass("loading"),$img.attr({src:sampleURL,"data-src":sampleURL}),$img.on("load",()=>{$link.removeClass("loading"),$article.addClass("loaded")}))}}exports.ThumbnailEnhancer=ThumbnailEnhancer,ThumbnailEnhancer.zoomPaused=!1},{"../../components/ModuleController":2,"../../components/RE6Module":3,"../../components/api/Danbooru":5,"../../components/api/GM":8,"../../components/data/Page":14,"../../components/structure/Util":24}],44:[function(require,module,exports){"use strict";var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){return new(P||(P=Promise))((function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator.throw(value))}catch(e){reject(e)}}function step(result){var value;result.done?resolve(result.value):(value=result.value,value instanceof P?value:new P((function(resolve){resolve(value)}))).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())}))};Object.defineProperty(exports,"__esModule",{value:!0});const E621_1=require("../../components/api/E621"),Page_1=require("../../components/data/Page"),RE6Module_1=require("../../components/RE6Module"),User_1=require("../../components/data/User");class ForumSubscriptions extends RE6Module_1.RE6Module{constructor(){super(...arguments),this.updateDefinition={imageSrc:()=>"",updateHref:data=>`/forum_topics/${data.id}?page=${Math.ceil(data.extra.count/75)}`,updateText:data=>data.name,sourceHref:data=>`/forum_topics/${data.id}`,sourceText:()=>"First Page"}}getName(){return"Forums"}getSubscriberId(){return Page_1.Page.getPageID()}getButtonElements(){return Page_1.Page.matches(Page_1.PageDefintion.forumPost)?$("div#c-forum-topics").first():$()}createSubscribeButton(){return $("<button>").addClass("large-subscribe-button subscribe").addClass("button btn-success").html("Subscribe")}createUnsubscribeButton(){return $("<button>").addClass("large-subscribe-button unsubscribe").addClass("button btn-danger").html("Unsubscribe")}insertButton($element,$button){$element.prepend($button)}getUpdatedEntries(lastUpdate){return __awaiter(this,void 0,void 0,(function*(){const results={},forumData=this.fetchSettings("data",!0);if(0===Object.keys(forumData).length)return results;const forumsJson=yield E621_1.E621.ForumTopics.get({"search[id]":Object.keys(forumData).join(",")});for(const forumJson of forumsJson)new Date(forumJson.updated_at).getTime()>lastUpdate&&forumJson.updater_id!==User_1.User.getUserID()&&(results[new Date(forumJson.updated_at).getTime()]=yield this.formatForumUpdate(forumJson));return this.pushSettings("data",forumData),results}))}formatForumUpdate(value){return __awaiter(this,void 0,void 0,(function*(){return{id:value.id,name:value.title,md5:"",extra:{count:value.response_count}}}))}getDefaultSettings(){return{enabled:!0,data:{}}}}exports.ForumSubscriptions=ForumSubscriptions},{"../../components/RE6Module":3,"../../components/api/E621":7,"../../components/data/Page":14,"../../components/data/User":18}],45:[function(require,module,exports){"use strict";var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){return new(P||(P=Promise))((function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator.throw(value))}catch(e){reject(e)}}function step(result){var value;result.done?resolve(result.value):(value=result.value,value instanceof P?value:new P((function(resolve){resolve(value)}))).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())}))};Object.defineProperty(exports,"__esModule",{value:!0});const E621_1=require("../../components/api/E621"),Page_1=require("../../components/data/Page"),RE6Module_1=require("../../components/RE6Module"),Post_1=require("../../components/data/Post");class PoolSubscriptions extends RE6Module_1.RE6Module{constructor(){super(...arguments),this.updateDefinition={imageSrc:data=>Post_1.Post.createPreviewUrlFromMd5(data.md5),imageHref:data=>`https://e621.net/pools/${data.id}`,updateHref:data=>`https://e621.net/posts/${data.extra.last}?pool_id=${data.id}`,updateText:data=>data.name,sourceHref:data=>`https://e621.net/pools/${data.id}`,sourceText:()=>"All Posts"}}getName(){return"Pools"}getSubscriberId(){return Page_1.Page.getPageID()}getButtonElements(){return $("div#c-pools > div#a-show").first()}createSubscribeButton(){return $("<button>").addClass("large-subscribe-button subscribe").addClass("button btn-success").html("Subscribe")}createUnsubscribeButton(){return $("<button>").addClass("large-subscribe-button unsubscribe").addClass("button btn-danger").html("Unsubscribe")}insertButton($element,$button){$element.prepend($button)}getUpdatedEntries(lastUpdate){return __awaiter(this,void 0,void 0,(function*(){const results={},poolData=this.fetchSettings("data",!0);if(0===Object.keys(poolData).length)return results;const poolsJson=yield E621_1.E621.Pools.get({"search[id]":Object.keys(poolData).join(",")});for(const poolJson of poolsJson){void 0!==poolData[poolJson.id].lastId&&poolJson.post_ids.includes(poolData[poolJson.id].lastId)||(poolData[poolJson.id].lastId=poolJson.post_ids[poolJson.post_ids.length-1]);const previousStop=poolJson.post_ids.indexOf(poolData[poolJson.id].lastId);new Date(poolJson.updated_at).getTime()>lastUpdate&&poolJson.post_ids.length>previousStop&&(results[new Date(poolJson.updated_at).getTime()]=yield this.formatPoolUpdate(poolJson,poolData)),poolData[poolJson.id].lastId=poolJson.post_ids[poolJson.post_ids.length-1]}return this.pushSettings("data",poolData),results}))}formatPoolUpdate(value,subSettings){return __awaiter(this,void 0,void 0,(function*(){const poolInfo=subSettings[value.id];if(void 0===poolInfo.md5){const post=(yield E621_1.E621.Posts.find(value.post_ids[0]).get())[0];poolInfo.md5="swf"===post.file.ext?"":post.file.md5}return{id:value.id,name:value.name.replace(/_/g," "),md5:poolInfo.md5,extra:{last:value.post_ids[value.post_ids.length-1]}}}))}getDefaultSettings(){return{enabled:!0,data:{}}}}exports.PoolSubscriptions=PoolSubscriptions},{"../../components/RE6Module":3,"../../components/api/E621":7,"../../components/data/Page":14,"../../components/data/Post":15}],46:[function(require,module,exports){"use strict";var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){return new(P||(P=Promise))((function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator.throw(value))}catch(e){reject(e)}}function step(result){var value;result.done?resolve(result.value):(value=result.value,value instanceof P?value:new P((function(resolve){resolve(value)}))).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())}))};Object.defineProperty(exports,"__esModule",{value:!0});const RE6Module_1=require("../../components/RE6Module"),Tabbed_1=require("../../components/structure/Tabbed"),Modal_1=require("../../components/structure/Modal"),Util_1=require("../../components/structure/Util"),ModuleController_1=require("../../components/ModuleController"),DomUtilities_1=require("../../components/structure/DomUtilities"),Form_1=require("../../components/structure/Form"),Danbooru_1=require("../../components/api/Danbooru");class SubscriptionManager extends RE6Module_1.RE6Module{constructor(){super(...arguments),this.updateInterval=3600,this.heartbeatInterval=10,this.alreadyUpdated=!1,this.tabNotificationsCount=0,this.subscribers=new Map}create(){const _super=Object.create(null,{create:{get:()=>super.create}});return __awaiter(this,void 0,void 0,(function*(){if(!this.canInitialize())return;_super.create.call(this),this.$openSubsButton=DomUtilities_1.DomUtilities.addSettingsButton({name:'<i class="fas fa-bell"></i>'});const content=[];for(const sub of this.subscribers.values())content.push({name:sub.instance.getName(),page:$("<div>").addClass("subscriptions-list")});const lastUpdate=this.fetchSettings("lastUpdate"),infoPage=this.getInfoPage(lastUpdate);content.push({name:"Info",page:infoPage.get()}),this.$subsTabs=new Tabbed_1.Tabbed({name:"settings-tabs",content:content}),this.handleInfoPage(infoPage);const modal=new Modal_1.Modal({title:"Subscriptions",triggers:[{element:this.$openSubsButton}],escapable:!1,reserveHeight:!0,content:this.$subsTabs.create(),position:{my:"right top",at:"right top"}});this.$openSubsButton.attr("data-loading","true");const shouldUpdate=this.getShouldUpdate(),now=(new Date).getTime();let heartbeatTimer;shouldUpdate&&(heartbeatTimer=this.startUpdate()),modal.getElement().on("dialogopen",()=>{const index=modal.getElement().tabs("option","active");this.removeUnopened(index)}),modal.getElement().tabs({activate:(event,tabProperties)=>{this.removeUnopened(tabProperties.newTab.index())}});const panels=modal.getElement().find(".ui-tabs-panel"),tabs=modal.getElement().find(".ui-tabs-tab");for(const entry of this.subscribers.entries()){const subElements={instance:entry[1].instance,content:panels.eq(entry[0]).find("div"),tab:tabs.eq(entry[0])};this.subscribers.set(entry[0],subElements),yield this.initSubscriber(subElements,shouldUpdate,lastUpdate,now)}shouldUpdate&&this.stopUpdate(heartbeatTimer),this.alreadyUpdated=!0,this.$openSubsButton.attr("data-loading","false"),this.updateNotificationSymbol(0)}))}getShouldUpdate(){const nowFake=this.fetchSettings("now"),now=void 0!==nowFake?nowFake:(new Date).getTime(),lastUpdate=this.fetchSettings("lastUpdate"),lastHeartbeat=this.fetchSettings("heartbeat"),updateInProgress=this.fetchSettings("updateInProgress"),updateIntervalConstraint=this.intervalCheck(now,lastUpdate,updateInProgress),updateHeartbeatConstraint=this.heartbeatCheck(now,lastHeartbeat,updateInProgress);return updateHeartbeatConstraint?console.log("Update because of heartbeat"):updateIntervalConstraint?console.log("Update because of interval"):console.log("No update"),updateIntervalConstraint||updateHeartbeatConstraint}intervalCheck(now,lastUpdate,updateInProgress){return now-lastUpdate-1e3*this.updateInterval>=0&&!updateInProgress}heartbeatCheck(now,lastHeartbeat,updateInProgress){return!0===updateInProgress&&now-lastHeartbeat-1e3*this.heartbeatInterval*2>=0}startUpdate(){return this.pushSettings("updateInProgress",!0),this.pushSettings("heartbeat",(new Date).getTime()),window.setInterval(()=>{this.pushSettings("heartbeat",(new Date).getTime())},1e3*this.heartbeatInterval)}stopUpdate(heartbeatTimer){this.pushSettings("updateInProgress",!1),this.pushSettings("lastUpdate",(new Date).getTime()),window.clearInterval(heartbeatTimer)}getInfoPage(lastUpdate){const updateInProgress=this.fetchSettings("updateInProgress"),heartbeat=this.fetchSettings("heartbeat",!0);return new Form_1.Form({id:"subscriptions-status",columns:2,parent:"div#modal-container"},[{id:"subscriptions-title",type:"div",value:"<h3>Stats</h3>",stretch:"full"},{id:"subscriptions-lastupdate-label",type:"div",value:"Last Update: "+this.getLastUpdateText(lastUpdate),stretch:"mid"},{id:"subscriptions-nextupdate-label",type:"div",value:"Next Update: "+this.getNextUpdateText(updateInProgress,lastUpdate,heartbeat),stretch:"mid"},{id:"subscriptions-triggerupdate",type:"button",value:"Manual update",stretch:"mid"}])}handleInfoPage(form){const inputList=form.getInputList();let allowUpdate=!0;inputList.get("subscriptions-triggerupdate").on("click",()=>__awaiter(this,void 0,void 0,(function*(){const heartbeat=this.fetchSettings("heartbeat",!0),updateInProgress=this.fetchSettings("updateInProgress");if(this.heartbeatCheck((new Date).getTime(),heartbeat,updateInProgress))return void Danbooru_1.Danbooru.notice("Update is already in progress");if(!allowUpdate)return void Danbooru_1.Danbooru.notice("You already updated, please reload to update again");const hearbeatTimer=this.startUpdate();allowUpdate=!1;const now=(new Date).getTime();for(const entry of this.subscribers.entries())entry[1].content=$("<div>").addClass("subscriptions-list"),yield this.initSubscriber(entry[1],!0,this.fetchSettings("lastUpdate",!0),now),this.$subsTabs.replace(entry[0],entry[1].content);inputList.get("subscriptions-lastupdate-label").html("Last Update: "+this.getLastUpdateText(now)),inputList.get("subscriptions-nextupdate-label").html("Next Update: "+this.getNextUpdateText(updateInProgress,now,heartbeat)),this.stopUpdate(hearbeatTimer)})))}getLastUpdateText(lastUpdate){return 0===lastUpdate?"Never":Util_1.Util.timeAgo(lastUpdate)}getNextUpdateText(updateInProgress,lastUpdate,heartbeat){const now=(new Date).getTime();return 0===lastUpdate?Util_1.Util.timeAgo(now+1e3*this.updateInterval):updateInProgress&&!this.heartbeatCheck((new Date).getTime(),heartbeat,updateInProgress)?"In Progress. Check back in a bit":now-lastUpdate>1e3*this.updateInterval?"Now":Util_1.Util.timeAgo(lastUpdate+1e3*this.updateInterval)}updateNotificationSymbol(difference){this.tabNotificationsCount+=difference,this.$openSubsButton.attr("data-has-notifications",(this.tabNotificationsCount>0).toString())}static register(moduleClass){const instance=ModuleController_1.ModuleController.getWithType(moduleClass),manager=this.getInstance();manager.subscribers.set(manager.subscribers.size,{instance:instance})}initSubscriber(sub,shouldUpdate,lastUpdate,currentTime){return __awaiter(this,void 0,void 0,(function*(){const moduleName=sub.instance.constructor.name;!1===this.alreadyUpdated&&this.addSubscribeButtons(sub.instance),sub.content.attr("data-subscription-class",moduleName),sub.tab.attr("data-loading","true");let updates={};shouldUpdate&&(updates=yield sub.instance.getUpdatedEntries(lastUpdate));const lastTimestamp=this.addUpdateEntries(sub,updates,currentTime),lastSeen=sub.instance.fetchSettings("lastSeen"),updateCount=Object.keys(updates).length;sub.tab.attr("data-loading","false"),(0!==updateCount||lastSeen<lastTimestamp)&&void 0!==lastSeen&&!isNaN(lastTimestamp)&&"true"!==sub.tab.attr("data-has-notifications")&&(sub.tab.attr("data-has-notifications","true"),this.tabNotificationsCount++)}))}createUpdateEntry(data,timeStamp,definition,customClass,toggleSub){const $content=$("<div>").addClass("subscription-update");customClass&&$content.addClass(customClass);const timeAgo=Util_1.Util.timeAgo(timeStamp),timeString=new Date(timeStamp).toLocaleString(),$imageDiv=$("<div>").addClass("subscription-update-preview").appendTo($content),imageErrorHandler=()=>{!0===definition.imageRemoveOnError&&$content.remove()};if(void 0!==definition.imageHref){const $a=$("<a>").attr("href",definition.imageHref(data));$("<img>").attr("data-src",definition.imageSrc(data)).addClass("lazyload").attr("title",definition.updateText(data)+"\n"+timeAgo+"\n"+timeString).on("error",imageErrorHandler).appendTo($a),$a.appendTo($imageDiv)}else $("<img>").attr("src",definition.imageSrc(data)).attr("title",definition.updateText(data)+"\n"+timeAgo+"\n"+timeString).on("error",imageErrorHandler).appendTo($imageDiv);const $title=$("<div>").addClass("subscription-update-title").appendTo($content);void 0!==definition.updateHref?$("<a>").html(definition.updateText(data)).attr({href:definition.updateHref(data),"data-id":data.id}).appendTo($title):$("<div>").html(definition.updateText(data)).attr("data-id",data.id).appendTo($title);const $unsub=$("<div>").addClass("subscription-update-unsub").appendTo($content),heart=$('<i class="fas fa-heart"></i>');$("<a>").append(heart).attr("href","#").appendTo($unsub).on("click",()=>{toggleSub&&(toggleSub(),heart.toggleClass("fas far"))});const $full=$("<div>").addClass("subscription-update-full").appendTo($content);void 0!==definition.sourceHref?$("<a>").attr("href",definition.sourceHref(data)).html(definition.sourceText(data)).appendTo($full):$("<div>").html(definition.sourceText(data)).appendTo($full);const $date=$("<div>").addClass("subscription-update-date").appendTo($content);return $("<span>").html(timeAgo).attr("title",timeString).appendTo($date),$content}addSubscribeButtons(instance){let subscriptionData=instance.fetchSettings("data",!0);instance.getButtonElements().each((index,element)=>{const $element=$(element),$subscribeButton=instance.createSubscribeButton(),$unsubscribeButton=instance.createUnsubscribeButton(),id=instance.getSubscriberId($element);void 0===subscriptionData[id]?$unsubscribeButton.addClass("hidden"):$subscribeButton.addClass("hidden"),$subscribeButton.click(e=>{e.preventDefault(),$subscribeButton.toggleClass("hidden"),$unsubscribeButton.toggleClass("hidden"),subscriptionData=instance.fetchSettings("data",!0),subscriptionData[id]={},instance.pushSettings("data",subscriptionData)}),$unsubscribeButton.click(e=>{e.preventDefault(),$subscribeButton.toggleClass("hidden"),$unsubscribeButton.toggleClass("hidden"),subscriptionData=instance.fetchSettings("data",!0),delete subscriptionData[id],instance.pushSettings("data",subscriptionData)}),instance.insertButton($element,$subscribeButton),instance.insertButton($element,$unsubscribeButton)})}addUpdateEntries(sub,updates,currentTime){0===Object.keys(updates).length&&sub.content.append(this.createUpToDateDivider());const cache=this.addToCache(sub.instance,updates,currentTime),timestamps=Object.keys(cache).sort((a,b)=>parseInt(b)-parseInt(a));for(let i=0;i<timestamps.length;i++){sub.content.append(this.createCacheDivider(parseInt(timestamps[i])));for(const updateTimestamp of Object.keys(cache[timestamps[i]]).sort((a,b)=>parseInt(b)-parseInt(a))){let currentlySubbed=!0;const update=cache[timestamps[i]][updateTimestamp],toggleSub=()=>{const cache=sub.instance.fetchSettings("cache",!0),data=sub.instance.fetchSettings("data",!0);currentlySubbed?(delete cache[timestamps[i]][updateTimestamp],delete data[update.id],Danbooru_1.Danbooru.notice("Successfully unsubbed!")):(cache[timestamps[i]][updateTimestamp]=update,data[update.id]={},Danbooru_1.Danbooru.notice("Successfully resubbed!")),sub.instance.pushSettings("cache",cache),sub.instance.pushSettings("data",data),currentlySubbed=!currentlySubbed};sub.content.append(this.createUpdateEntry(update,parseInt(updateTimestamp),sub.instance.updateDefinition,"",toggleSub))}}return this.getLastCacheTimestamp(cache)}getLastCacheTimestamp(cache){return Math.max(...Object.keys(cache).map(a=>parseInt(a)))}createUpToDateDivider(){return this.createUpdateEntry({id:-1,name:"All up to date!",md5:""},(new Date).getTime(),{imageSrc:()=>"",sourceText:()=>"",updateText:data=>data.name},"notice notice-uptodate")}createCacheDivider(timestamp){return this.createUpdateEntry({id:-1,name:" ",md5:""},new Date(timestamp).getTime(),{imageSrc:()=>"",sourceText:()=>"",updateText:data=>data.name},"notice notice-cached")}addToCache(instance,updates,currentTime){let cache=instance.fetchSettings("cache");if(void 0===cache&&(cache={}),0===Object.keys(updates).length)return cache;cache[currentTime]=updates,Object.keys(cache).length>this.fetchSettings("historySize")&&delete cache[Math.min(...Object.keys(cache).map(e=>parseInt(e)))];const uniqueKeys=[];for(const timestamp of Object.keys(cache).sort((a,b)=>parseInt(b)-parseInt(a))){for(const updateTimestamp of Object.keys(cache[timestamp])){const update=cache[timestamp][updateTimestamp];-1===uniqueKeys.indexOf(update.id)?uniqueKeys.push(update.id):delete cache[timestamp][updateTimestamp]}0===Object.keys(cache[timestamp]).length&&delete cache[timestamp]}return instance.pushSettings("cache",cache),cache}removeUnopened(index){const sub=this.subscribers.get(index);void 0!==sub&&(sub.instance.pushSettings("lastSeen",(new Date).getTime()),"true"===sub.tab.attr("data-has-notifications")&&(this.updateNotificationSymbol(-1),sub.tab.attr("data-has-notifications","false")))}getDefaultSettings(){return{enabled:!0,lastUpdate:0,historySize:5}}}exports.SubscriptionManager=SubscriptionManager},{"../../components/ModuleController":2,"../../components/RE6Module":3,"../../components/api/Danbooru":5,"../../components/structure/DomUtilities":19,"../../components/structure/Form":20,"../../components/structure/Modal":21,"../../components/structure/Tabbed":23,"../../components/structure/Util":24}],47:[function(require,module,exports){"use strict";var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){return new(P||(P=Promise))((function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator.throw(value))}catch(e){reject(e)}}function step(result){var value;result.done?resolve(result.value):(value=result.value,value instanceof P?value:new P((function(resolve){resolve(value)}))).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())}))};Object.defineProperty(exports,"__esModule",{value:!0});const E621_1=require("../../components/api/E621"),RE6Module_1=require("../../components/RE6Module"),Post_1=require("../../components/data/Post");class TagSubscriptions extends RE6Module_1.RE6Module{constructor(){super(...arguments),this.updateDefinition={imageSrc:data=>Post_1.Post.createPreviewUrlFromMd5(data.md5),imageHref:data=>`https://e621.net/posts/${data.id}`,imageRemoveOnError:!0,updateText:data=>data.name,sourceHref:data=>`https://e621.net/posts?tags=${encodeURIComponent(data.name.replace(/ /g,"_"))}`,sourceText:()=>"View Tag"}}getName(){return"Tags"}getSubscriberId($element){return $element.parent().attr("data-tag")}getButtonElements(){return $("#tag-box li span.tag-action-subscribe, #tag-list li span.tag-action-subscribe")}createSubscribeButton(){return $("<a>").attr({href:"#",title:"Subscribe"}).addClass("tag-subscription-button subscribe").html('<i class="far fa-heart"></i>')}createUnsubscribeButton(){return $("<a>").attr({href:"#",title:"Unsubscribe"}).addClass("tag-subscription-button unsubscribe").html('<i class="fas fa-heart"></i>')}insertButton($element,$button){$element.append($button)}getUpdatedEntries(lastUpdate){return __awaiter(this,void 0,void 0,(function*(){const results={},tagData=this.fetchSettings("data",!0);if(0===Object.keys(tagData).length)return results;for(const tagName of Object.keys(tagData)){const postsJson=yield E621_1.E621.Posts.get({tags:encodeURIComponent(tagName.replace(/ /g,"_"))});for(const post of postsJson){const postObject=new Post_1.Post(post);new Date(post.created_at).getTime()>lastUpdate&&!postObject.matchesBlacklist()&&(results[new Date(post.created_at).getTime()]=yield this.formatPostUpdate(post,tagName))}}return this.pushSettings("data",tagData),results}))}formatPostUpdate(value,tagName){return __awaiter(this,void 0,void 0,(function*(){return{id:value.id,name:tagName.replace(/ /g," "),md5:"swf"===value.file.ext?"":value.file.md5}}))}getDefaultSettings(){return{enabled:!0,data:{}}}}exports.TagSubscriptions=TagSubscriptions},{"../../components/RE6Module":3,"../../components/api/E621":7,"../../components/data/Post":15}]},{},[25]);