// KoalaSync Landing Page Logic document.addEventListener('DOMContentLoaded', () => { // Scroll Reveal Logic const revealElements = document.querySelectorAll('[data-reveal]'); const revealOnScroll = () => { const windowHeight = window.innerHeight; revealElements.forEach(el => { const elementTop = el.getBoundingClientRect().top; const revealPoint = 150; if (elementTop < windowHeight - revealPoint) { el.classList.add('revealed'); } }); }; // Initial check revealOnScroll(); // Scroll listener window.addEventListener('scroll', revealOnScroll); // Navbar scroll effect const nav = document.querySelector('nav'); window.addEventListener('scroll', () => { if (window.scrollY > 50) { nav.style.padding = '0.75rem 0'; nav.style.background = 'rgba(15, 23, 42, 0.9)'; } else { nav.style.padding = '1rem 0'; nav.style.background = 'rgba(30, 41, 59, 0.7)'; } }); // Smooth scroll for anchors document.querySelectorAll('a[href^="#"]').forEach(anchor => { anchor.addEventListener('click', function (e) { e.preventDefault(); const target = document.querySelector(this.getAttribute('href')); if (target) { target.scrollIntoView({ behavior: 'smooth', block: 'start' }); } }); }); // Invite Detection & Bridge const checkInvite = () => { const isJoinPage = window.location.pathname.includes('join.html'); // Use a short timeout to let the bridge script initialize its dataset attribute setTimeout(() => { const isInstalled = document.documentElement.dataset.koalasyncInstalled === 'true'; if (window.location.hash.startsWith('#join:')) { const parts = window.location.hash.split(':'); if (parts.length >= 3) { const roomId = parts[1]; const password = parts[2]; const serverFlag = parts[3] || '0'; const serverUrl = parts[4] ? decodeURIComponent(parts[4]) : ''; if (isJoinPage) { const displayRoom = document.getElementById('display-room-id'); const actions = document.getElementById('join-actions'); if (displayRoom) displayRoom.textContent = roomId; if (actions) { if (!isInstalled) { actions.innerHTML = ` GET IT ON CHROME WEBSTORE Download via GitHub

The extension is required to join and sync videos.

`; } else { actions.innerHTML = `
🚀
Joining room automatically...

Your extension is taking care of it.

`; // AUTO-TRIGGER JOIN setTimeout(() => { window.dispatchEvent(new CustomEvent('KOALASYNC_JOIN_REQUEST', { detail: { roomId, password, useCustomServer: serverFlag === '1', serverUrl: serverUrl } })); }, 500); } } } else { // Fallback banner for index.html if (!document.getElementById('koala-banner')) { const banner = document.createElement('div'); banner.className = 'invite-banner'; banner.id = 'koala-banner'; banner.innerHTML = `
🎫 Invitation for ${roomId} detected! OPEN JOIN PAGE
`; document.body.prepend(banner); } } // Global listener for Join Button document.addEventListener('click', (e) => { if (e.target && e.target.id === 'webJoinBtn') { e.target.textContent = 'JOINING...'; e.target.disabled = true; window.dispatchEvent(new CustomEvent('KOALASYNC_JOIN_REQUEST', { detail: { roomId, password, useCustomServer: serverFlag === '1', serverUrl: serverUrl } })); } }); } } }, 600); // 600ms delay to ensure bridge.js has set the dataset }; // Listen for status from Extension window.addEventListener('KOALASYNC_STATUS', (e) => { const { success, message } = e.detail; const isJoinPage = window.location.pathname.includes('join.html'); if (isJoinPage) { const icon = document.getElementById('join-status-icon'); const title = document.getElementById('join-title'); const actions = document.getElementById('join-actions'); const desc = document.getElementById('join-desc'); if (success) { if (icon) icon.textContent = '✅'; title.textContent = 'Erfolgreich!'; let count = 3; const updateCountdown = () => { desc.innerHTML = `Du bist dem Raum beigetreten.
Dieser Tab schließt sich in ${count} Sekunden...`; if (count <= 0) { window.close(); desc.textContent = 'Beitritt erfolgreich! Du kannst diesen Tab jetzt manuell schließen.'; } else { count--; setTimeout(updateCountdown, 1000); } }; updateCountdown(); actions.innerHTML = ''; } else { if (icon) icon.textContent = '❌'; title.textContent = 'Fehler'; desc.textContent = `Beitritt fehlgeschlagen: ${message}`; actions.innerHTML = ''; } } else { const banner = document.getElementById('koala-banner'); if (banner) { if (success) { banner.style.background = 'var(--success)'; banner.innerHTML = '
✅ Joined! This tab will close in 3s...
'; setTimeout(() => window.close(), 3000); } else { banner.style.background = 'var(--error)'; banner.innerHTML = `
❌ Error: ${message}
`; } } } }); checkInvite(); });