class WebReactionz{#t="https://webreactionz.com";#e="https://cdn.jsdelivr.net/gh/intersect-software/web-reactionz@1/public/WebReactionz.min.css";#s={layout:"horizontal",position:"top",showReactionCounts:!0,theme:"minimal"};#i="WebReactionz";#n;#o;#r;#a;#c;#l="visible";constructor(t={}){const e=e=>t[e]??t[e.toLowerCase()];if(this.#n=e("siteId"),!this.#n)throw new Error(this.#h("No Site ID provided"));this.#o=e("noAutoFetch"),this.#r=e("baseUrl")??this.#t,this.#a=t.computePageId?.()??e("pageId")??location.pathname.split("/").findLast(t=>""!==t)?.split(".")[0]??"/",this.#c=["layout","position","prompt","showReactionCounts","domSelector","bordered","fontSizeScale","fontColor","theme"].reduce((t,s)=>{const i=e(s);return void 0!==i&&(t[s]=["showReactionCounts","bordered"].includes(s)?!!+i:i),t},{}),this.#d(this.#e)}async#E(t=!1){return fetch(`${this.#r}/api/sites/${this.#n}/widgetDetails?page_id=${this.#a}&settings=${t?"0":"1"}`).then(t=>t.json())}async init(){try{const t=await this.#E(this.#o);this.#c={...this.#s,...t.settings??{},...this.#c};const e=this.#c.domSelector;if(!e)throw new Error(this.#h("No DOM selector provided"));const s=document.querySelector(e);if(!s)throw new Error(this.#h("No DOM element found for selector"),e);const{reactions:i,userHasReacted:n}=t,o=Object.keys(i).map(t=>this.#S(t,i[t].count,i[t].unicode,n)),r=this.#T("div",{classes:[this.#i,this.#c.position,this.#c.layout,this.#c.theme,this.#c.bordered?"bordered":""]});if(this.#c.fontSizeScale&&(r.style.fontSize=`${this.#c.fontSizeScale}em`),this.#c.fontColor&&(r.style.fontColor=this.#c.fontColor),this.#c.prompt){const t=this.#T("div",{classes:["prompt"],innerText:this.#c.prompt});r.append(t)}const a=this.#T("div",{classes:["emojis",this.#c.layout],children:o});if(r.append(a),t.branding&&r.append(this.#I()),s.insertAdjacentElement("bottom"===this.#c.position?"beforeend":"afterbegin",r),["left","right"].includes(this.#c.position)){const t=s.getBoundingClientRect().top+document.documentElement.scrollTop,e=()=>this.#p(s,r,t);e(),window.addEventListener("resize",e);const i=()=>this.#_(r,t);i(),window.addEventListener("scroll",i)}else r.classList.add(this.#l)}catch(t){console.error(this.#h("Failed to initialise"),t)}}#_(t,e){if(document.body.scrollHeight>window.innerHeight)return window.scrollY>0?t.classList.add(this.#l):t.classList.remove(this.#l),void(window.scrollY>e?t.style.top=0:t.style.top=e-window.scrollY+"px");t.classList.add(this.#l)}#p(t,e,s){e.style.top=`${s}px`;const i=e.getBoundingClientRect().width,n=t.getBoundingClientRect();"left"===this.#c.position?e.style.left=n.left-i-10+"px":e.style.left=`${n.right+i+10}px`}#S(t,e,s,i){const n=this.#T("span",{classes:["increment"],innerText:"+1"}),o=this.#T("span",{classes:["number"],innerText:this.#c.showReactionCounts&&e?e:""}),r=this.#T("span",{classes:["reaction",i&&"disabled"],data:{type:t,title:i?"You have already reacted on this page":"React to this page?"},children:[this.#T("span",{classes:["emoji"],innerText:s}),this.#T("span",{children:[o,n]})]}),a=JSON.stringify({page_id:this.#a,type:t});return r.onclick=()=>{n.classList.remove("active"),fetch(`${this.#r}/api/sites/${this.#n}/reactions`,{method:"POST",headers:{"Content-Type":"application/json"},body:a}).then(t=>t.json()).then(t=>{t.error||(n.classList.add("active"),this.#c.showReactionCounts&&(o.innerText=+(o.innerText.split("\n")[0]?.trim()??"0")+1))})},r}#I(){return this.#T("div",{title:`Powered by ${this.#i}`,children:[this.#T("a",{href:this.#t,target:"_blank",children:[this.#T("img",{src:`${this.#r}/logo.svg`,classes:["branding"]})]})]})}#T(t,e={}){const{classes:s,dataset:i,children:n,...o}=e,r=document.createElement(t);return Object.keys(o).forEach(t=>r[t]=o[t]),n?.forEach(t=>r.appendChild(t)),s&&r.classList.add(...s.filter(t=>!!t)),Object.keys(i??{}).forEach(t=>r.dataset[t]=i[t]),r}#d(t){document.getElementsByTagName("head")[0].insertAdjacentHTML("beforeend",``)}#h(t){return`${this.#i} ${t}`}}const t=t=>new WebReactionz(t).init();if(!+document.currentScript.dataset.noautoinit){const e=document.currentScript.dataset;"loading"!==document.readyState?t(e):document.addEventListener("DOMContentLoaded",()=>t(e))}