// Featured Servers Management const FEATURED_SERVERS_API = 'https://assets.authbp.xyz/featured.json'; /** * Load and display featured servers */ async function loadFeaturedServers() { const featuredContainer = document.getElementById('featuredServersList'); const myServersContainer = document.getElementById('myServersList'); try { console.log('[FeaturedServers] Fetching from', FEATURED_SERVERS_API); // Fetch featured servers from API (no cache) const response = await fetch(FEATURED_SERVERS_API, { cache: 'no-store', headers: { 'Cache-Control': 'no-cache', 'Pragma': 'no-cache' } }); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const data = await response.json(); const featuredServers = data.featuredServers || []; console.log('[FeaturedServers] Loaded', featuredServers.length, 'featured servers'); // Render featured servers if (featuredServers.length === 0) { featuredContainer.innerHTML = `

No featured servers

`; } else { const featuredHTML = featuredServers.map((server, index) => { console.log(`[FeaturedServers] Building featured card ${index + 1}:`, server.Name); const escapedName = (server.Name || 'Unknown Server').replace(/"/g, '"').replace(/'/g, ''').replace(//g, '>'); const escapedAddress = (server.Address || '').replace(/"/g, '"').replace(/'/g, '''); const bannerUrl = server.img_Banner || 'https://via.placeholder.com/400x240/1e293b/ffffff?text=Server+Banner'; return ` `; }).join(''); featuredContainer.innerHTML = featuredHTML; } // Show "Coming Soon" for my servers myServersContainer.innerHTML = `

Coming Soon

`; } catch (error) { console.error('[FeaturedServers] Error loading servers:', error); featuredContainer.innerHTML = `

Failed to load servers

${error.message}

`; myServersContainer.innerHTML = `

Coming Soon

`; } } /** * Copy server address to clipboard */ async function copyServerAddress(address, button) { try { await navigator.clipboard.writeText(address); // Visual feedback const originalHTML = button.innerHTML; button.classList.add('copied'); button.innerHTML = 'Copied!'; setTimeout(() => { button.classList.remove('copied'); button.innerHTML = originalHTML; }, 2000); console.log('[FeaturedServers] Copied address:', address); } catch (error) { console.error('[FeaturedServers] Failed to copy address:', error); // Fallback for older browsers const textArea = document.createElement('textarea'); textArea.value = address; textArea.style.position = 'fixed'; textArea.style.left = '-999999px'; document.body.appendChild(textArea); textArea.select(); try { document.execCommand('copy'); const originalHTML = button.innerHTML; button.classList.add('copied'); button.innerHTML = 'Copied!'; setTimeout(() => { button.classList.remove('copied'); button.innerHTML = originalHTML; }, 2000); } catch (err) { console.error('[FeaturedServers] Fallback copy also failed:', err); } document.body.removeChild(textArea); } } // Load featured servers when the featured page becomes visible document.addEventListener('DOMContentLoaded', () => { const observer = new MutationObserver((mutations) => { mutations.forEach((mutation) => { if (mutation.type === 'attributes' && mutation.attributeName === 'class') { const featuredPage = document.getElementById('featured-page'); if (featuredPage && featuredPage.classList.contains('active')) { loadFeaturedServers(); } } }); }); const featuredPage = document.getElementById('featured-page'); if (featuredPage) { observer.observe(featuredPage, { attributes: true }); // Load immediately if already visible if (featuredPage.classList.contains('active')) { loadFeaturedServers(); } } });