(function() { function initBadge() { if (!document.getElementById('gojd-badge-widget')) { setTimeout(initBadge, 50); return; } var apiUrl = 'https://clever-coyote-64-08jr16jhr172.deno.dev/api/functions/getBadgeData'; var badgeToken = '14sq9qq31fqmjd944p8'; var widgetUrl = 'https://clever-coyote-64-08jr16jhr172.deno.dev/#/BadgeWidget?token=14sq9qq31fqmjd944p8'; var shadowMap = { 'none': 'none', 'light': '0 2px 4px rgba(0,0,0,0.1)', 'medium': '0 4px 6px rgba(0,0,0,0.1)', 'heavy': '0 8px 16px rgba(0,0,0,0.2)' }; function openModal() { var modal = document.createElement('div'); modal.id = 'gojd-modal'; modal.style.cssText = 'position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.5);z-index:99999;display:flex;align-items:center;justify-content:center;'; var modalContent = document.createElement('div'); modalContent.style.cssText = 'position:relative;width:90%;max-width:500px;height:600px;background:white;border-radius:12px;overflow:hidden;box-shadow:0 20px 60px rgba(0,0,0,0.3);'; var closeBtn = document.createElement('button'); closeBtn.textContent = '×'; closeBtn.style.cssText = 'position:absolute;top:10px;right:10px;width:30px;height:30px;border:none;background:rgba(0,0,0,0.1);color:#333;font-size:24px;line-height:1;cursor:pointer;border-radius:50%;z-index:1;'; closeBtn.onclick = function() { document.body.removeChild(modal); }; var iframe = document.createElement('iframe'); iframe.src = widgetUrl; iframe.style.cssText = 'width:100%;height:100%;border:none;'; modalContent.appendChild(closeBtn); modalContent.appendChild(iframe); modal.appendChild(modalContent); modal.onclick = function(e) { if (e.target === modal) document.body.removeChild(modal); }; document.body.appendChild(modal); } var requestUrl = apiUrl + '?badge_token=' + encodeURIComponent(badgeToken) + '&referrer=' + encodeURIComponent(window.location.href); console.log('[Badge] Fetching from:', requestUrl); fetch(requestUrl, { method: 'GET', mode: 'cors', credentials: 'include' }) .then(function(res) { console.log('[Badge] Response status:', res.status); console.log('[Badge] Response headers:', res.headers); console.log('[Badge] Response CORS header:', res.headers.get('Access-Control-Allow-Origin')); return res.text().then(function(text) { console.log('[Badge] Raw response:', text); try { return JSON.parse(text); } catch (e) { console.error('[Badge] Failed to parse JSON:', e); return { error: 'Invalid JSON response', rawText: text }; } }); }) .then(function(data) { console.log('[Badge] Parsed data:', data); if (!data.success || data.error) { console.error('Badge error:', data.error, data.message); var errorDiv = document.createElement('div'); errorDiv.style.cssText = 'display:inline-block;padding:12px;background:#fee;border:1px solid #fcc;border-radius:8px;color:#c33;font-size:12px;max-width:250px;'; errorDiv.textContent = data.message || data.error || 'Unable to load badge'; document.getElementById('gojd-badge-widget').appendChild(errorDiv); return; } var badgeSize = data.badge ? data.badge.size : 100; var borderRadius = data.badge ? data.badge.borderRadius : 8; var shadowIntensity = data.badge ? data.badge.shadowIntensity : 'medium'; var boxShadow = shadowMap[shadowIntensity] || shadowMap['medium']; var badge = document.createElement('div'); badge.style.cssText = 'display:inline-block;cursor:pointer;transition:transform 0.2s;'; var img = document.createElement('img'); img.src = data.badge ? data.badge.url : 'https://via.placeholder.com/100x100/4F46E5/ffffff?text=Member'; img.style.cssText = 'width:'+badgeSize+'px;height:'+badgeSize+'px;border-radius:'+borderRadius+'px;box-shadow:'+boxShadow+';'; badge.appendChild(img); badge.onmouseover = function() { badge.style.transform = 'scale(1.05)'; }; badge.onmouseout = function() { badge.style.transform = 'scale(1)'; }; badge.onclick = openModal; document.getElementById('gojd-badge-widget').appendChild(badge); }) .catch(function(err) { console.error('[Badge] Fetch error:', err); console.error('[Badge] Error details:', { message: err.message, name: err.name, stack: err.stack, url: requestUrl }); var errorDiv = document.createElement('div'); errorDiv.style.cssText = 'display:inline-block;padding:12px;background:#fee;border:1px solid #fcc;border-radius:8px;color:#c33;font-size:12px;max-width:250px;'; errorDiv.innerHTML = 'Unable to load badge
' + err.message + ''; document.getElementById('gojd-badge-widget').appendChild(errorDiv); }); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', initBadge); } else { initBadge(); } })();