oakazanin/public/js/firebase.min.cad74e0625f72f...

1 line
2.9 KiB
JavaScript

import{initializeApp}from"https://www.gstatic.com/firebasejs/9.23.0/firebase-app.js";import{getFirestore,doc,getDoc,setDoc,updateDoc,increment,onSnapshot,}from"https://www.gstatic.com/firebasejs/9.23.0/firebase-firestore.js";import{getAuth,signInAnonymously}from"https://www.gstatic.com/firebasejs/9.23.0/firebase-auth.js";let app,db,auth,oids;try{const e=document.getElementById("firebase-config");if(!e?.textContent)throw new Error("Firebase config element not found");const t=JSON.parse(e.textContent);app=initializeApp(t.config),oids={views:e.getAttribute("data-views"),likes:e.getAttribute("data-likes")},db=getFirestore(app),auth=getAuth(app)}catch(e){throw console.error("Firebase initialization failed:",e.message),e}const id=oids?.views?.replaceAll("/","-"),id_likes=oids?.likes?.replaceAll("/","-");let liked=!1,authReady=!1;function formatNumber(e){return e.toString().replace(/\B(?=(\d{3})+(?!\d))/g,",")}function toggleLoaders(e){var t,s,n=e.className;if(n=="")return;t=n.split(" ");for(s in t)e.classList.toggle(t[s])}function updateDisplay(e,t){const n=document.getElementById(t);if(!n)return;const s=t.replaceAll("/","-");onSnapshot(doc(db,e,s),t=>{n.innerText=t.exists()?formatNumber(t.data()[e]):0,toggleLoaders(n)},e=>{console.error("Firebase snapshot update failed:",e)})}async function recordView(e){if(!e||localStorage.getItem(e))return;try{const t=doc(db,"views",e),n=await getDoc(t);n.exists()?await updateDoc(t,{views:increment(1)}):await setDoc(t,{views:1}),localStorage.setItem(e,!0)}catch(e){console.error("Record view operation failed:",e.message)}}function updateButton(e){const t=document.querySelectorAll("span[id='button_likes_heart']"),n=document.querySelectorAll("span[id='button_likes_emtpty_heart']"),s=document.querySelectorAll("span[id='button_likes_text']");t.forEach(t=>{t.style.display=e?"":"none"}),n.forEach(t=>{t.style.display=e?"none":""}),s.forEach(t=>{t.innerText=e?"":"\xa0Like"})}async function toggleLike(e){if(!id_likes||!authReady)return;try{const t=doc(db,"likes",id_likes),n=await getDoc(t);liked=e,e?localStorage.setItem(id_likes,!0):localStorage.removeItem(id_likes),updateButton(e),n.exists()?await updateDoc(t,{likes:increment(e?1:-1)}):await setDoc(t,{likes:e?1:0})}catch(t){console.error("Like operation failed:",t.message),liked=!e,e?localStorage.removeItem(id_likes):localStorage.setItem(id_likes,!0),updateButton(!e)}}signInAnonymously(auth).then(()=>{authReady=!0,document.querySelectorAll("span[id^='views_']").forEach(e=>{e.id&&updateDisplay("views",e.id)}),document.querySelectorAll("span[id^='likes_']").forEach(e=>{e.id&&updateDisplay("likes",e.id)}),recordView(id),id_likes&&localStorage.getItem(id_likes)&&(liked=!0,updateButton(!0));const e=document.getElementById("button_likes");e&&e.addEventListener("click",()=>{toggleLike(!liked)})}).catch(e=>{console.error("Firebase anonymous sign-in failed:",e.message),authReady=!1}),window.process_article=()=>toggleLike(!liked)