// ==UserScript==
// @name RisiBank pour JVC
// @namespace risibank.fr
// @description La RisiBank intégrée sur JVC, comme par magie !
// @author RisiBank Admin
// @version 1.2.33
// @website https://risibank.fr
// @homepage https://risibank.fr
// @match https://www.jeuxvideo.com/forums/*
// @match https://www.jeuxvideo.com/recherche/forums/*
// @match https://www.jeuxvideo.com/messages-prives/message.php?id=*
// @match https://www.jeuxvideo.com/messages-prives/nouveau.php*
// @match https://www.jeuxvideo.com/forums/message/*
// @match https://m.jeuxvideo.com/forums/create_topic.php*
// @match https://m.jeuxvideo.com/forums/create_message.php*
// @match https://m.jeuxvideo.com/forums/*
// @icon https://risibank.fr/logo.png
// @require https://risibank.fr/downloads/web-api/risibank.js?1.2.33
// @updateURL https://risibank.fr/downloads/userscript/jvc/jvc.user.js
// @downloadURL https://risibank.fr/downloads/userscript/jvc/jvc.user.js
// @run-at document-start
// @connect risibank.fr
// @connect image.noelshack.com
// @grant GM_addStyle
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_xmlhttpRequest
// @grant GM.addStyle
// @grant GM.setValue
// @grant GM.getValue
// @grant GM.xmlHttpRequest
// @noframes
// ==/UserScript==
(()=>{var e={257:(e,t,i)=>{"use strict";i.r(t),i.d(t,{scriptOptions:()=>s});var n=i(989);class a{static STORAGE_KEY="risibank-options";static OPTIONS=[{name:"enabled",type:"boolean",label:"État du plugin",description:"Activer/désactiver le plugin.",default:()=>!0,hidden:!0},{name:"theme",type:"select",values:[{value:"light",label:"futuriste (light)"},{value:"dark",label:"futuriste (dark)"},{value:"light-old",label:"classique (light)"},{value:"dark-old",label:"classique (dark)"}],label:"Thème de l'interface",description:"Choisir le thème de l'interface de RisiBank. Les thèmes sont les mêmes que sur le site",default:()=>"light"},{name:"defaultTab",type:"select",values:[{value:"search",label:"recherche"},{value:"fav",label:"favoris"},{value:"hot",label:"tendance"},{value:"top",label:"populaire"},{value:"new",label:"récent"},{value:"rand",label:"hasard"}],label:"Onglet par défaut",description:"Choix de l'onglet à afficher par défaut dans l'interface RisiBank",default:()=>"top"},{name:"embedType",type:"select",values:[{value:"iframe",label:"intégré"},{value:"overlay",label:"overlay"}],label:"Mode d'intégration",description:"Choix du monde d'intégration de l'interface RisiBank",default:()=>"iframe"},{name:"embeddedContainerHeight",type:"select",values:[{value:"105px",label:"minuscule"},{value:"165px",label:"petit"},{value:"225px",label:"moyen"},{value:"285px",label:"grand"}],label:"Hauteur fenêtre mode intégré",description:"Choisir la taille de la zone de contenu dans l'interface RisiBank (mode intégré)",default:()=>"165px",activateIf:e=>"iframe"===e.embedType},{name:"mediaSize",type:"select",values:[{value:"sm",label:"petit"},{value:"md",label:"moyen"},{value:"lg",label:"grand"}],label:"Taille des images",description:"Choisir la taille des images dans l'interface RisiBank",default:()=>"sm"},{name:"navbarSize",type:"select",values:[{value:"sm",label:"petit"},{value:"md",label:"moyen"},{value:"lg",label:"grand"}],label:"Taille de la navbar",description:"Choisir la taille de la barre de navigation dans l'interface RisiBank",default:()=>"sm"},{name:"redirectToRisiBank",type:"boolean",label:"Rediriger les stickers vers RisiBank",description:"Lors d'un clic sur un sticker noelshack, rediriger vers RisiBank si le sticker existe plutôt que noelshack",default:()=>!0},{name:"addImageFavoriteButton",type:"boolean",label:"Afficher le bouton favoris",description:"Afficher le bouton favoris lors du survol des images",default:()=>!0},{name:"addTransparency",type:"boolean",label:"Rendre les images transparentes",description:"Remplace les images noelshack par leur version complète (Consomme de la bande passante).",default:()=>!0},{name:"animateGifs",type:"boolean",label:"Animer les GIFs",description:"Anime les GIFs (Consomme de la bande passante).",default:()=>!0},{name:"autoReplaceDeletedImages",type:"boolean",label:"Auto-fix des images supprimées",description:"Remplacer automatiquement les images noelshack supprimées par leur version originale de RisiBank. Cette option ne sera appliquée que si vous avez activé l'option qui rend les images transparente ou anime les GIFs.",values:[!0,!1],default:()=>!0,activateIf:e=>e.addTransparency||e.animateGifs},{name:"embedYoutubeLinks",type:"boolean",label:"Intégration des vidéos youtube",description:"Lecteur intégré YouTube",values:[!0,!1],default:()=>!0},{name:"antiCensorPlugin",type:"boolean",label:"Plugin anti-censure (textuel)",description:"Remplace automatiquement certains mots clefs sensibles d'une manière transparente pour ceux qui ont l'userscript",default:()=>!0},{name:"autoUpdate",type:"boolean",label:"Mise à jour auto",description:"Vérifier automatiquement les mises à jour du script",default:()=>!0},{name:"increaseMessageFormHeight",type:"boolean",label:"Augmenter taille zone message",description:"Augmente la taille par défaut de la zone de message",default:()=>!1},{name:"hideDonateButton",type:"boolean",label:"Masquer bouton donation (🐀)",description:"Masquer le bouton donation",default:()=>!1}];constructor(){this.allOptions=a.OPTIONS,this.options=null}async load(){const e={};for(const t of a.OPTIONS)e[t.name]=t.default();try{const t=JSON.parse(await n.storage.get(a.STORAGE_KEY,"{}"));if(!t)throw new Error("No options found");for(const i in t){const n=t[i],s=a.OPTIONS.find((e=>e.name===i));s&&this.checkOptionValue(s,n)&&(e[i]=n)}}catch(e){console.warn(e)}try{await n.storage.set(a.STORAGE_KEY,JSON.stringify(e))}catch(e){console.warn(e)}this.options=e}checkOptionValue(e,t){return"select"===e.type?e.values.map((e=>e.value)).includes(t):"boolean"===e.type&&"boolean"==typeof t}getOption(e){return this.options[e]}async saveOption(e,t){await this.load();const i=a.OPTIONS.find((t=>t.name===e));if(!i)throw new Error("This option does not exist");if(!this.checkOptionValue(i,t))throw new Error("This value is not valid");this.options[e]=t,await n.storage.set(a.STORAGE_KEY,JSON.stringify(this.options))}}const s=new a},752:(e,t,i)=>{"use strict";i.r(t),i.d(t,{RisiBankJVC:()=>M});const{scriptOptions:n}=i(257);class a{constructor(e){this.risibank=e,this.view=new s(this)}open(){this.view.open()}close(){this.view.close()}}class s{constructor(e){this.model=e,this.node=null,this.mount(),this.controller=new o(this.model,this)}mount(){this.node&&this.node.remove(),this.node=document.createElement("div"),this.node.classList.add("risibank-options-panel"),this.node.style.display="none",this.node.style.position="fixed",this.node.style.top="0",this.node.style.left="0",this.node.style.width="100%",this.node.style.height="100%",this.node.style.zIndex="10000000000",this.node.style.padding="20px",this.node.style.textAlign="center",this.node.style.fontSize="16px",this.node.style.overflowY="auto",document.body.appendChild(this.node),this.buildNodeHtml()}buildNodeHtml(){n.getOption("theme").startsWith("dark")?(this.node.style.backgroundColor="rgba(0, 0, 0, 0.9)",this.node.style.color="#cccccc"):(this.node.style.backgroundColor="rgba(255, 255, 255, 0.9)",this.node.style.color="black");let e="";e+="\n
\n ";for(const t of n.allOptions)if(!t.hidden&&(!t.activateIf||t.activateIf(n.options))){if(e+=`\n
\n `}open(){this.node.style.display="",document.body.style.overflow="hidden"}close(){this.node.style.display="none",document.body.style.overflow=""}}class o{constructor(e,t){this.model=e,this.view=t,this.bindEvents()}bindEvents(){document.querySelectorAll(".risibank-options-panel-close").forEach((e=>{e.addEventListener("click",(()=>{this.model.close()}))}));const e=Array.from(document.querySelectorAll(".risibank-options-panel input, .risibank-options-panel select"));for(const t of e)t.addEventListener("change",(async()=>{const e=t.dataset.risibankOptionName,i=t.dataset.risibankOptionType;if("boolean"===i)await n.saveOption(e,!!t.checked);else{if("select"!==i)throw new Error("Unknown option type");await n.saveOption(e,t.value)}this.model.risibank.reload(),this.view.buildNodeHtml(),this.bindEvents()}))}}var r=i(257);const{storage:l}=i(989);class c{static STORAGE_KEY="DeviceSeedPlugin_deviceSeed";constructor(e){this.model=e,this.deviceSeed=null}async install(){try{this.deviceSeed=await l.get(c.STORAGE_KEY,"undefined"),"undefined"===this.deviceSeed&&(this.deviceSeed=crypto.randomUUID(),await l.set(c.STORAGE_KEY,this.deviceSeed))}catch(e){console.error(e)}}}class d{static jvCare(e){const t="0A12B34C56D78E9F";let i="";const n=e.split(" ")[1];for(let e=0;ee.split(";"))).map((([e,t])=>[e,h.addInvisibleCharacter(t)])));constructor(e){this.model=e}async install(){if(["web","mobile"].includes(this.model.pageType))return;const e=document.querySelectorAll(".bloc-contenu p, .text-enrichi-fmobile p");for(const t of e){let e=t.innerHTML,i=!1;for(const t in h.associations){const n=h.associations[t],[a,s]=[n,t],o=new RegExp(a,"g");e.match(o)&&(e=e.replace(o,s),i=!0)}i&&(t.innerHTML=e)}if(m.getOption("antiCensorPlugin")){let e,t;"web"===this.model.pageType?(e=".btn.btn-poster-msg",t="#message_topic"):"mp"===this.model.pageType?(e=".btn.btn-poster-msg",t="#message"):"mobile"===this.model.pageType&&(e=".sub-form-fmobile",t=".area-form-fmobile");const i=document.querySelector(e);i&&i.addEventListener("click",(()=>{const e=document.querySelector(t);for(const t in h.associations){const i=h.associations[t],[n,a]=[t,i],s=new RegExp(n,"gi");e.value=e.value.replace(s,a)}}))}}}class b{constructor(e){this.model=e}async install(){let e=Array.from(document.querySelectorAll("a.xXx"));const t={"^https://risibank.fr/cache/medias/([\\d/]+)/([\\d]+)/(\\w+)\\.(\\w+)$":"https://risibank.fr/media/$2-media-$4","^https://risibank.fr/cache/stickers/d([\\d]+)/([\\d]+)-(\\w+)\\.(\\w+)$":"https://risibank.fr/media/$2-media-$4"};e=e.map((e=>{for(const i in t){const n=new RegExp(i);e.href.match(n)&&(e.href=e.href.replace(new RegExp(i),t[i]))}return e})),e=e.filter((e=>!!e.href.match("^https://risibank.fr/media/(\\d+)-media-(\\w+)$"))),e.forEach((e=>{const t=parseInt(e.href.match("/(\\d+)-media")[1]),i=e.href.match("-media-(\\w+)$")[1],n=this.model.getRisiBankImageUrl(t,i);e.innerHTML=`\n \n `}))}}const{scriptOptions:g}=i(257),{loadImage:y}=i(738),{ImageOptimizerPlugin:f}=i(234);class v{constructor(e){this.model=e,this.imageOptimizer=this.model.getPlugin(f)}async install(){let e=Array.from(document.querySelectorAll("img.img-shack"));const t={"^https://www.noelshack.com/(2022|2021|2020|2019)-(\\d+)-(\\d+)-([\\w\\[\\]\\._-]+)$":"https://image.noelshack.com/fichiers/$1/$2/$3/$4","^https://www.noelshack.com/(\\d+)-(\\d+)-(\\d+)-([\\w\\[\\]\\._-]+)$":"https://image.noelshack.com/fichiers/$1/$2/$3/$4"};e=e.map((e=>{for(const i in t){const n=new RegExp(i);e.alt.match(n)&&(e.alt=e.alt.replace(new RegExp(i),t[i]))}return e})),e=e.filter((e=>!!e.alt.match("^https://image.noelshack.com/fichiers/([\\d/]+)/([\\w\\[\\]\\._-]+)$")));let i=0;for(let t of e){const e=++i;t.setAttribute("risibank-id",e);const n=this.imageOptimizer.cached[t.alt];g.getOption("redirectToRisiBank")&&(t.parentElement.href=n?`https://risibank.fr/media/${n.id}-${n.slug}`:"https://risibank.fr/api/v1/medias/by-source?type=jvc&url="+t.alt),t.setAttribute("risibank-original-src",t.src);let a=!1;a=t.alt.match(/\.gif$/)?g.getOption("animateGifs"):g.getOption("addTransparency"),a?n?(t.src=n.thumb,this.addImageButtons(t)):this.replaceImageByFull(e,t.alt):this.addImageButtons(t)}}waitForImageToComplete(e){return e.complete?0!==e.naturalHeight?Promise.resolve(e):Promise.reject(e):new Promise(((t,i)=>{e.addEventListener("load",(()=>{0!==e.naturalHeight?t(e):i(e)})),e.addEventListener("error",(()=>{i(e)}))}))}async replaceImageByFull(e,t){const i=e=>{e.src="https://risibank.fr/cache/medias/0/5/512/51206/thumb.png",e.parentElement.insertAdjacentHTML("beforeend","[Média supprimé]")},n=e=>{e.src=e.getAttribute("risibank-original-src")};let a=document.querySelector(`img[risibank-id="${e}"]`),s=!1;try{await this.waitForImageToComplete(a),s=!0}catch(e){if(!g.getOption("autoReplaceDeletedImages"))return void i(a)}try{if(!s)throw new Error("original image failed");a.style.objectFit="contain",a.src=t,await this.waitForImageToComplete(a),this.addImageButtons(a)}catch(o){if(!g.getOption("autoReplaceDeletedImages"))return void(s?n(a):i(a));try{const i=await y("https://risibank.fr/api/v1/medias/by-source?type=jvc&redirect_to=image&url="+t);a=this.replaceImageByBlob(e,i),this.addImageButtons(a)}catch(e){return void(s?n(a):i(a))}}}replaceImageByBlob(e,t){const i=URL.createObjectURL(t),n=document.querySelector(`img[risibank-id="${e}"]`);return n.setAttribute("src",i),n}addImageButtons(e){g.getOption("addImageFavoriteButton")&&(e.parentElement.style.position="relative",e.parentElement.classList.add("risibank-image-enhancer-link"),e.parentElement.insertAdjacentHTML("beforeend",'\n
\n \n
\n '),e.parentElement.querySelector(".add").addEventListener("click",(t=>{window.open("https://risibank.fr/api/v1/medias/by-source?type=jvc&redirect_to=web-add&url="+e.alt,"_blank"),t.preventDefault(),t.stopPropagation()})))}}const{scriptOptions:w}=i(257);class k{constructor(e){this.model=e}async install(){if(!w.getOption("embedYoutubeLinks"))return;let e=Array.from(document.querySelectorAll(".txt-msg a.xXx"));e=e.map((e=>{let t=null,i=null,n=null;return(t=e.href.match(/^https:\/\/youtu.be\/([\w-]+)\?.*t=(\d+)/))?(i=t[1],n=parseInt(t[2])):(t=e.href.match(/^https:\/\/youtu.be\/([\w-]+)/))?(i=t[1],n=0):(t=e.href.match(/^https:\/\/www.youtube.com\/watch\?v=([\w-]+).*\&t=(\d+)/))?(i=t[1],n=parseInt(t[2])):(t=e.href.match(/^https:\/\/www.youtube.com\/watch\?t=(\d+).*\&v=([\w-]+)/))?(i=t[2],n=parseInt(t[1])):(t=e.href.match(/^https:\/\/www.youtube.com\/watch\?v=([\w-]+)/))&&(i=t[1],n=0),i&&(e.setAttribute("data-yt-id",i),e.setAttribute("data-yt-start",n)),e})),e=e.filter((e=>!!e.hasAttribute("data-yt-id"))),e.forEach((e=>{const t=e.getAttribute("data-yt-id"),i=parseInt(e.getAttribute("data-yt-start")),n=document.createElement("p"),a=`\n ${e.outerHTML}\n \n `;n.innerHTML=a,e.parentNode.replaceChild(n,e)}))}}var T=i(989),S=i(738);class O{static STORAGE_KEY_LAST_UPDATE="AutoUpdatePlugin_lastUpdate";static STORAGE_KEY_IGNORED_VERSION="AutoUpdatePlugin_ignoredVersion";static UPDATE_DELAY=9e5;static UPDATE_LINK="https://risibank.fr/downloads/userscript/jvc/jvc.user.js?from=userscript-jvc";constructor(e){this.model=e,this.deviceSeedPlugin=this.model.getPlugin(c)}getCurrentScriptVersion(){try{return GM.info.script.version}catch(e){try{return GM_info.script.version}catch(e){return"0.0.0"}}}async isVersionIgnored(e){const t=await T.storage.get(O.STORAGE_KEY_IGNORED_VERSION);return!!t&&t===e}async install(){if(!r.scriptOptions.getOption("autoUpdate"))return;const e=await T.storage.get(O.STORAGE_KEY_LAST_UPDATE);if(!e)return void await T.storage.set(O.STORAGE_KEY_LAST_UPDATE,Date.now());if(Date.now()-ee.match(/\/\/ @version (.*)/))).match(/\/\/ @version (.*)/)[1].trim();await T.storage.set(O.STORAGE_KEY_LAST_UPDATE,Date.now()),i!==t&&(await this.isVersionIgnored(i)||(confirm(`Une nouvelle version du script 'RisiBank pour JVC' est disponible (${i}). Voulez-vous l'installer ?`)?document.location.href=O.UPDATE_LINK+"&nocache="+Date.now():confirm("Souhaitez-vous ignorer cette mise à jour ?")&&await T.storage.set(O.STORAGE_KEY_IGNORED_VERSION,i)))}}const{scriptOptions:E}=i(257),{waitForFunction:x}=i(52);class J{constructor(e){this.model=e}async install(){const e=Array.from(document.querySelectorAll(".bloc-options-msg .picto-msg-crayon"));for(const t of e)t.addEventListener("click",this.activateForm.bind(this))}async activateForm(e){if(!this.model.getRisiBankIconState())return;const t=e.path[3],i=await x((()=>t.querySelector(".jv-editor-toolbar")),2e3),n=document.createElement("div");n.classList.add("btn-group"),n.innerHTML=`\n \n `,i.appendChild(n),t.querySelector(".risibank-form-edit-toggle").addEventListener("click",(e=>this.openRisiBank(t)))}openRisiBank(e){RisiBank.activate({type:"overlay",theme:E.getOption("theme"),defaultTab:E.getOption("defaultTab"),mediaSize:"lg",navbarSize:"lg",onSelectMedia:RisiBank.Actions.addSourceImageLink(e.querySelector("textarea"))})}}var A=i(234);class M{constructor(){this.pageType=null,document.location.href.includes("www.jeuxvideo.com/messages-prives/")?this.pageType="mp":"www.jeuxvideo.com"===document.location.hostname?this.pageType="web":this.pageType="mobile",this.view=new R(this),this.components={optionsPanel:new a(this)},this.plugins=[],this.plugins.push(new c(this)),this.plugins.push(new d(this)),this.plugins.push(new u(this)),this.plugins.push(new h(this)),this.plugins.push(new b(this)),this.plugins.push(new A.ImageOptimizerPlugin(this)),this.plugins.push(new k(this)),this.plugins.push(new O(this)),this.plugins.push(new J(this)),this.plugins.push(new v(this)),new Promise((async e=>{for(const e of this.plugins)await e.install();e()})).catch((e=>console.error(e)))}getPlugin(e){return this.plugins.find((t=>t instanceof e))}reload(){this.view.init()}getRisiBankImageUrl(e,t){return`https://risibank.fr/cache/medias/${Math.floor(e/1e6)}/${Math.floor(e/1e4)}/${Math.floor(e/100)}/${e}/full.${t}`}getRisiBankIconState(){return"overlay"===r.scriptOptions.getOption("embedType")||r.scriptOptions.getOption("enabled")}}class R{constructor(e){this.model=e,this.init()}mount(){const e=Array.from(document.querySelectorAll(".risibank-cleanup"));for(const t of e)t.remove();if(["mp"].includes(this.model.pageType))this.afterIntegrationSelector=".form-post-topic .text-editor",this.textAreaSelector=".form-post-topic .text-editor textarea";else if(["web"].includes(this.model.pageType))this.afterIntegrationSelector="#bloc-formulaire-forum .text-editor",this.textAreaSelector="#bloc-formulaire-forum .text-editor textarea";else{if("mobile"!==this.model.pageType)throw new Error("Unknown page type");this.afterIntegrationSelector=".area-form-fmobile",this.textAreaSelector=".area-form-fmobile"}if(this.iframeContainerId="risibank-container","iframe"===r.scriptOptions.getOption("embedType")&&r.scriptOptions.getOption("enabled"))try{const e=document.querySelector(this.afterIntegrationSelector),t=document.createElement("div");t.id=this.iframeContainerId,t.classList.add("risibank-cleanup"),t.style.height=r.scriptOptions.getOption("embeddedContainerHeight"),e.parentElement.insertBefore(t,e)}catch(e){console.warn("Unable to prepare location for the RisiBank embed",e)}if("web"===this.model.pageType)try{const e=document.querySelector("#bloc-formulaire-forum .jv-editor-toolbar"),t=document.createElement("div");t.classList.add("risibank-cleanup"),t.classList.add("btn-group"),t.innerHTML=`\n \n \n `,r.scriptOptions.getOption("hideDonateButton")||(t.innerHTML+='\n \n '),e.appendChild(t)}catch(e){console.warn("Unable to prepare the location for the RisiBank settings",e)}else if("mp"===this.model.pageType)try{const e=document.querySelector(".form-post-topic .jv-editor-toolbar"),t=document.createElement("div");t.classList.add("risibank-cleanup"),t.classList.add("btn-group"),t.innerHTML=`\n \n \n `,e.appendChild(t)}catch(e){console.warn("Unable to prepare the location for the RisiBank settings",e)}else if("mobile"===this.model.pageType)try{const e=document.querySelector(".bloc-opt-area");e.style.display="flex";const t=document.createElement("div");t.style.marginLeft="8px",t.classList.add("risibank-cleanup"),t.classList.add("btn-group"),t.innerHTML=`\n \n \n \n `,e.appendChild(t)}catch(e){console.warn("Unable to prepare the location for the RisiBank settings",e)}}init(){this.mount(),"iframe"===r.scriptOptions.getOption("embedType")&&r.scriptOptions.getOption("enabled")&&this.startEmbed(),this.controller=new I(this.model,this)}startEmbed(){document.querySelector(`#${this.iframeContainerId}`)&&RisiBank.activate({type:"iframe",container:"#"+this.iframeContainerId,theme:r.scriptOptions.getOption("theme"),defaultTab:r.scriptOptions.getOption("defaultTab"),mediaSize:r.scriptOptions.getOption("mediaSize"),navbarSize:r.scriptOptions.getOption("navbarSize"),onSelectMedia:RisiBank.Actions.addSourceImageLink(this.textAreaSelector)})}startOverlay(){RisiBank.activate({type:"overlay",theme:r.scriptOptions.getOption("theme"),defaultTab:r.scriptOptions.getOption("defaultTab"),mediaSize:r.scriptOptions.getOption("mediaSize"),navbarSize:r.scriptOptions.getOption("navbarSize"),onSelectMedia:RisiBank.Actions.addSourceImageLink(this.textAreaSelector)})}}class I{constructor(e,t){this.model=e,this.view=t,this.bind()}bind(){const e=Array.from(document.querySelectorAll(".risibank-toggle"));for(const t of e)"iframe"===r.scriptOptions.getOption("embedType")?t.addEventListener("click",(async()=>{await r.scriptOptions.saveOption("enabled",!r.scriptOptions.getOption("enabled")),this.view.init()})):t.addEventListener("click",(async()=>{this.view.startOverlay()}));const t=Array.from(document.querySelectorAll(".risibank-open-options"));for(const e of t)e.addEventListener("click",(()=>{this.model.components.optionsPanel.open()}))}}},234:(e,t,i)=>{"use strict";i.r(t),i.d(t,{ImageOptimizerPlugin:()=>o});var n=i(52);const{storage:a}=i(989),{apiGet:s}=i(738);class o{static STORAGE_KEY_LAST_UPDATE="ImageOptimizerPlugin_lastUpdate";static STORAGE_KEY_DATA="ImageOptimizerPlugin_data";static UPDATE_DELAY=36e5;constructor(e){this.model=e,this.cached={}}async install(){try{this.cached=JSON.parse(await a.get(o.STORAGE_KEY_DATA,"{}"))}catch(e){console.error(e),this.cached={}}this.updateIfNecessary().then((()=>{})).catch((e=>console.error(e)))}async updateIfNecessary(){const e=await a.get(o.STORAGE_KEY_LAST_UPDATE,"0");if(await a.set(o.STORAGE_KEY_LAST_UPDATE,Date.now()),Date.now()-et+1));for(const e of i)for(const i of["hot"]){const a=JSON.parse((await s(`https://risibank.fr/api/v1/medias/${i}?page=${e}`)).responseText);t.push(...a),await(0,n.wait)(500)}const r={};for(const e of t)r[e.source_url]={id:e.id,slug:e.slug,thumb:e.cache_url.replace("/full.","/thumb.")};await a.set(o.STORAGE_KEY_DATA,JSON.stringify(r))}}},738:(e,t,i)=>{"use strict";function n(){return"undefined"!=typeof GM&&void 0!==GM.xmlHttpRequest?GM.xmlHttpRequest:"undefined"!=typeof GM_xmlhttpRequest?GM_xmlhttpRequest:fetch}function a(e){return new Promise(((t,i)=>{n()({url:e,method:"GET",onload:e=>{e.status<200||e.status>=300?i(e.statusText):t(e)},onerror:e=>{i(e)}})}))}function s(e){return new Promise(((t,i)=>{n()({url:e,method:"GET",responseType:"blob",onload:e=>{e.status<200||e.status>=300?i(e.statusText):t(e.response)},onerror:e=>{i(e)}})}))}i.r(t),i.d(t,{apiGet:()=>a,loadImage:()=>s})},989:(e,t,i)=>{"use strict";i.r(t),i.d(t,{storage:()=>n});const n=new class{constructor(){this.identify()}identify(){return"undefined"!=typeof GM_getValue?(this.get=async(e,t)=>GM_getValue(e,t),void(this.set=async(e,t)=>GM_setValue(e,t))):"object"==typeof GM?(this.get=async(e,t)=>GM.getValue(e,t),void(this.set=async(e,t)=>GM.setValue(e,t))):"undefined"!=typeof localStorage?(this.get=async(e,t)=>localStorage.getItem(e)||t,void(this.set=async(e,t)=>localStorage.setItem(e,t))):"undefined"!=typeof sessionStorage?(this.get=async(e,t)=>sessionStorage.getItem(e)||t,void(this.set=async(e,t)=>sessionStorage.setItem(e,t))):(this.get=async(e,t)=>t,void(this.set=async(e,t)=>{console.warn("Unable to store data in any storage")}))}}},910:(e,t,i)=>{"use strict";i.r(t),i.d(t,{installDefaultStyles:()=>s,installStyles:()=>a});var n=i(52);const a=async e=>{try{GM_addStyle(e)}catch(t){const i=await(0,n.waitForFunction)((()=>document.querySelector("head")),5e3);i||console.error("RisiBank: Unable to load styles");const a=document.createElement("style");a.appendChild(document.createTextNode(e)),i.appendChild(a)}},s=async()=>{await a('\n\n')}},52:(e,t,i)=>{"use strict";i.r(t),i.d(t,{wait:()=>n,waitForFunction:()=>a});const n=e=>new Promise((t=>setTimeout(t,e))),a=async(e,t)=>{const i=(t||2e3)/50;let a=e(),s=0;for(;!a&&s{for(var n in t)i.o(t,n)&&!i.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{const{installDefaultStyles:e}=i(910),{scriptOptions:t}=i(257),{RisiBankJVC:n}=i(752),{waitForFunction:a}=i(52);(async function(){await t.load(),await e(),window.addEventListener("load",(async e=>{await a((()=>document.body)),new n}),!1)})().then((()=>console.log("RisiBankJVC is ready")))})()})();