(() => { const SUPABASE_URL = 'https://vhiweeypifbwacashxjz.supabase.co'; const SUPABASE_KEY = 'sb_publishable_EoB7MFJhCmb6PiAk-GPJ4w_PGhQ44Ru'; const DEFAULT_ICON = 'organ'; const FALLBACK_LABEL = 'Send your appreciation'; const DEFAULT_LABELS = { organ: 'Offer up your heart.' }; const BUILTIN_ICONS = { organ: '', }; const formatCount = (count) => ` ${count}`; const getAccessibleLabel = (button, iconValue) => { if (button.dataset.ariaLabel) { return button.dataset.ariaLabel; } if (button.dataset.label) { return button.dataset.label; } return DEFAULT_LABELS[iconValue] || FALLBACK_LABEL; }; const toggleFill = (icon, filled) => { const svg = icon.querySelector("svg"); if (svg) { const iconType = icon.closest('.iine-button')?.dataset.icon || DEFAULT_ICON; if (iconType === 'upvote') { svg.setAttribute("stroke-width", filled ? "3" : "2"); } else { const paths = svg.querySelectorAll("path, polygon, circle"); paths.forEach((path) => { path.setAttribute("fill", filled ? "currentColor" : "none"); }); } } }; document.addEventListener("DOMContentLoaded", () => { const iineButtons = document.querySelectorAll(".iine-button"); if (iineButtons.length === 0) { return; } const slugs = Array.from(iineButtons).map( (button) => button.dataset.slug || window.location.pathname ); const uniqueSlugs = [...new Set(slugs)]; const counts = new Map(); const fetchCounts = async () => { if (uniqueSlugs.length === 0) { return; } try { const response = await fetch( `${SUPABASE_URL}/rest/v1/rpc/get_hits`, { method: "POST", headers: { "Content-Type": "application/json", apikey: SUPABASE_KEY, Authorization: `Bearer ${SUPABASE_KEY}`, }, body: JSON.stringify({ page_slugs: uniqueSlugs, }), } ); if (!response.ok) throw new Error("Failed to fetch counts"); const countsData = await response.json(); if (countsData && typeof countsData === 'object' && !countsData.error) { for (const slug in countsData) { const count = countsData[slug]; counts.set(slug, typeof count === 'number' ? count : 0); } } } catch (error) { console.error("Error fetching iine counts:", error); } }; const initializeButtons = async () => { await fetchCounts(); iineButtons.forEach((button) => { const slug = button.dataset.slug || window.location.pathname; const storageKey = `iine-clicked-${slug}`; let icon = button.querySelector(".icon"); let counter = button.querySelector(".counter"); if (!icon) { // Clear fallback content (e.g.