(function(g){"use strict";class d{static resolveElement(e,a){let t;if(typeof e=="string"?t=document.querySelector(e):t=e||a||null,!t)throw new Error("Element not found");return t}static setInputValue(e,a){const t=Object.getOwnPropertyDescriptor(e.__proto__,"value")?.set,i=Object.getPrototypeOf(e),o=Object.getOwnPropertyDescriptor(i,"value")?.set;o&&t!==o?o.call(e,a):t?t.call(e,a):e.value=a,e.dispatchEvent(new Event("input",{bubbles:!0}))}static addImageLink(e,a){return({media:t})=>{const i=d.resolveElement(e),o=a==="source"?t.source_url:t.cache_url,r=i.selectionStart,l=r!==null&&i.value[r-1]&&!i.value[r-1].match(/\s/),y=r!==null&&(typeof i.value[r]>"u"||!i.value[r].match(/\s/)),p=`${l?" ":""}${o}${y?" ":""}`;d.setInputValue(i,i.value.substring(0,r??0)+p+i.value.substring(r??0)),i.dispatchEvent(new Event("change")),i.dispatchEvent(new Event("input")),i.focus()}}static addSourceImageLink(e){return d.addImageLink(e,"source")}static addRisiBankImageLink(e){return d.addImageLink(e,"risibank")}static pasteImage(e){return async({media:a})=>{const i=await(await fetch(a.cache_url)).blob(),o=a.cache_url.split("/").pop()||"image",r=new File([i],o,{type:i.type}),l=new DataTransfer;l.items.add(r);const y=new ClipboardEvent("paste",{bubbles:!0,cancelable:!0,clipboardData:l});d.resolveElement(e,document.activeElement||document).dispatchEvent(y)}}}class u{}u.RISIBANK_URL="https://risibank.fr",u.RISIBANK_CACHE_REGEX=/https:\/\/risibank.fr\/cache\/medias\/(\d+)\/(\d+)\/(\d+)\/(\d+)\/(\w+)\.(jpg|jpeg|gif|png)/;class c{static getPreferredModalOpenPosition(){const e={width:600,height:300},a=25;if(!document.activeElement)return c.adjustPositionForWindowBounds({x:window.innerWidth/2-e.width/2,y:window.innerHeight/2-e.height/2},e,a);const t=document.activeElement.getBoundingClientRect();return t.bottom+a+e.height>window.innerHeight?c.adjustPositionForWindowBounds({x:t.left,y:t.top-e.height-a},e,a):c.adjustPositionForWindowBounds({x:t.left,y:t.bottom+a},e,a)}static adjustPositionForWindowBounds({x:e,y:a},{width:t,height:i},o){const r=window.innerWidth,l=window.innerHeight;return e+t+o>r&&(e=r-t-o),el&&(a=l-i-o),aObject.entries(b).reduce((e,[a,t])=>(e[a]={...w,...t,...f},e),{});class v{static get Frame(){return m({container:void 0,type:"iframe",mediaSize:"md",navbarSize:"md"})}static get Modal(){return m({openPosition:c.getPreferredModalOpenPosition(),type:"modal",mediaSize:"md",navbarSize:"lg"})}static get Overlay(){return m({type:"overlay",mediaSize:"lg",navbarSize:"lg"})}}const s=class n{static init(){if(localStorage?.getItem!==void 0){const e=localStorage.getItem("risibank-userscript-selected-username");typeof e=="string"&&e.match(/^[a-zA-Z0-9\][_-]+$/i)&&n.setSelectedUsername(e)}window?.addEventListener!==void 0&&window.addEventListener("message",n.onIFrameMessage.bind(this),!1)}static setSelectedUsername(e){if(e===null||typeof e!="string"){n.selectedUsername=null,typeof localStorage<"u"&&localStorage.removeItem("risibank-userscript-selected-username");return}n.selectedUsername=e,typeof localStorage<"u"&&localStorage.setItem("risibank-userscript-selected-username",e)}static activate(e){if(e.type=e.type||"iframe",!["iframe","overlay","modal"].includes(e.type))throw new Error("Invalid type");if(e.theme=e.theme||"light",!["light","dark","light-old","dark-old"].includes(e.theme))throw new Error("Unsupported theme");if(e.mediaSize=e.mediaSize||"md",!["sm","md","lg"].includes(e.mediaSize))throw new Error("Unsupported media size. Allowed sizes are sm, md and lg");if(e.navbarSize=e.navbarSize||"md",!["sm","md","lg"].includes(e.navbarSize))throw new Error("Unsupported navbar size. Allowed sizes are sm, md and lg");if(e.defaultTab=e.defaultTab||"top",!["search","fav","hot","top","new","rand"].includes(e.defaultTab))throw new Error("Unsupported default tab. Allowed values are search, fav, hot, top, new and rand");if(e.showNSFW=typeof e.showNSFW=="boolean"?e.showNSFW:!1,e.allowUsernameSelection=typeof e.allowUsernameSelection=="boolean"?e.allowUsernameSelection:!0,e.showCopyButton=typeof e.showCopyButton=="boolean"?e.showCopyButton:!1,typeof e.onSelectMedia!="function")throw new Error("A callback must be specified for when a media is selected");if(e.type==="iframe"){if(++n._currentIntegrationId,typeof e.container>"u")throw new Error("A container must be specified when type is iframe");const t=typeof e.container=="string"?document.querySelector(e.container):e.container;if(!t)throw new Error("Invalid container specified");n.populateContainerWithIFrame(e,t,n._currentIntegrationId),n._integrations[n._currentIntegrationId]=e}if(e.type==="overlay"){if(!n._overlayContainer){const t=document.createElement("div");t.id="risibank-overlay",t.style.position="fixed",t.style.top="0",t.style.left="0",t.style.width="100%",t.style.height="100%",t.style.zIndex="2000000001",t.style.opacity="0.9",t.style.backgroundColor="rgba(0,0,0,0.5)",document.body.appendChild(t),n._overlayContainer=t}n._overlayContainer.style.display="block",n.populateContainerWithIFrame(e,n._overlayContainer,0),n._integrations[0]=e}if(e.type==="modal"){if(typeof e.openPosition>"u")throw new Error("A position must be specified when type is modal");if(!n._modalContainer){const t=document.createElement("div");t.id="risibank-modal",t.style.position="fixed",t.style.width="600px",t.style.height="300px",t.style.zIndex="2000000000",t.style.opacity="1",document.body.appendChild(t),n._modalContainer=t}n._modalContainer.style.display="block",n._modalContainer.style.pointerEvents="all",n._modalContainer.style.left=e.openPosition.x+"px",n._modalContainer.style.top=e.openPosition.y+"px",n.populateContainerWithIFrame(e,n._modalContainer,1),n._integrations[1]=e}}static getEmbedUrl(e,a){let t=`${u.RISIBANK_URL}/embed?id=${a}`;return t+=`&theme=${e.theme}`,t+=`&allowUsernameSelection=${e.allowUsernameSelection}`,t+=`&showCopyButton=${e.showCopyButton}`,t+=`&mediaSize=${e.mediaSize}`,t+=`&navbarSize=${e.navbarSize}`,t+=`&defaultTab=${e.defaultTab}`,t+=`&showNSFW=${e.showNSFW}`,["overlay","modal"].includes(e.type)&&(t+="&showCloseButton=true"),e.allowUsernameSelection&&typeof n.selectedUsername=="string"&&(t+=`&username=${n.selectedUsername}`),t}static hashOptions(e){return JSON.stringify([e.theme,e.allowUsernameSelection,e.showCopyButton,e.mediaSize,e.navbarSize,e.defaultTab,e.type])}static populateContainerWithIFrame(e,a,t){const i=n.hashOptions(e),o=a.querySelector("iframe");if(o&&o.getAttribute("data-hash")===i){a.style.display="block";return}const r=document.createElement("iframe");r.src=n.getEmbedUrl(e,t),r.style.width="100%",r.style.height="100%",r.style.border="none",r.style.overflow="hidden",r.setAttribute("data-hash",i),a.innerHTML="",a.appendChild(r)}static onIFrameMessage(e){if(!e.data||!e.data.type||!e.data.type.match(/^risibank/))return;if(e.origin!==u.RISIBANK_URL){console.log("ignoring event due to origin mismatch",e);return}const a=e.data.id,t=e.data.type;if(t==="risibank-closed"){n.desactivate(a);return}if(t==="risibank-username-selected"){const i=e.data.username;n.setSelectedUsername(i);return}if(t==="risibank-username-cleared"){n.setSelectedUsername(null);return}if(t==="risibank-media-copy"){const i=n._integrations[a];i?.onCopyMedia&&i.onCopyMedia({id:a,type:t,media:e.data.media});return}if(t==="risibank-media-selected"){const i=n._integrations[a];i?.onSelectMedia&&i.onSelectMedia({id:a,type:t,media:e.data.media}),n._integrations[a]&&["overlay","modal"].includes(n._integrations[a].type)&&n.desactivate(a);return}}static desactivate(e){if(typeof e>"u"){for(const t in n._integrations)n.desactivate(parseInt(t,10));return}const a=n._integrations[e];a&&(a.type==="iframe"&&n.desactivateIFrame(a,e),a.type==="overlay"&&n.desactivateOverlay(),a.type==="modal"&&n.desactivateModal())}static desactivateIFrame(e,a){const t=typeof e.container=="string"?document.querySelector(e.container):e.container;t&&(t.innerHTML="",delete n._integrations[a])}static desactivateOverlay(){const e=document.querySelector("#risibank-overlay");e&&(e.style.display="none")}static desactivateModal(){const e=document.querySelector("#risibank-modal");e&&(e.style.display="none",e.style.pointerEvents="none")}};s.Actions=d,s.Constants=u,s.Defaults=v,s.UI=c,s._integrations={},s._overlayContainer=null,s._modalContainer=null,s._currentIntegrationId=2,s.selectedUsername=null;let h=s;h.init(),g.RisiBank=h})(this.window=this.window||{});