From 78d3225b05dc062b99ebb7ad4c77b23d24080098 Mon Sep 17 00:00:00 2001 From: Dvorinka Date: Fri, 20 Jun 2025 11:34:22 +0200 Subject: [PATCH] test --- achievements.js | 403 ------------------------------------------------ index.html | 41 +---- 2 files changed, 1 insertion(+), 443 deletions(-) delete mode 100644 achievements.js diff --git a/achievements.js b/achievements.js deleted file mode 100644 index 2d09200..0000000 --- a/achievements.js +++ /dev/null @@ -1,403 +0,0 @@ -// Cookie utilities -function setCookie(name, value, days) { - const date = new Date(); - date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); - const expires = "expires=" + date.toUTCString(); - document.cookie = name + "=" + value + ";" + expires + ";path=/"; -} - -function getCookie(name) { - const nameEQ = name + "="; - const ca = document.cookie.split(';'); - for (let i = 0; i < ca.length; i++) { - let c = ca[i]; - while (c.charAt(0) === ' ') c = c.substring(1, c.length); - if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length); - } - return null; -} - -// Achievement system -const ACHIEVEMENTS = { - "first_visit": { - name: "Nováček", - description: "První návštěva na portálu", - icon: "fa-star", - color: "text-yellow-500", - theme: { - backgroundColor: "bg-yellow-50", - textColor: "text-yellow-700", - borderColor: "border-yellow-200", - hoverColor: "hover:bg-yellow-100" - } - }, - "mobile_master": { - name: "Mobilní Master", - description: "10 návštěv z mobilního zařízení za měsíc", - icon: "fa-mobile-alt", - color: "text-green-500", - threshold: 10, - period: "monthly", - device: "mobile", - theme: { - backgroundColor: "bg-green-50", - textColor: "text-green-700", - borderColor: "border-green-200", - hoverColor: "hover:bg-green-100" - } - }, - "desktop_guru": { - name: "Desktop Guru", - description: "20 návštěv z počítače za měsíc", - icon: "fa-desktop", - color: "text-blue-500", - threshold: 20, - period: "monthly", - device: "desktop", - theme: { - backgroundColor: "bg-blue-50", - textColor: "text-blue-700", - borderColor: "border-blue-200", - hoverColor: "hover:bg-blue-100" - } - }, - "frequent_visitor": { - name: "Pravidelný návštěvník", - description: "10 návštěv za měsíc", - icon: "fa-clock-rotate-left", - color: "text-blue-500", - threshold: 10, - period: "monthly", - theme: { - backgroundColor: "bg-blue-50", - textColor: "text-blue-700", - borderColor: "border-blue-200", - hoverColor: "hover:bg-blue-100" - } - }, - "power_user": { - name: "Power User", - description: "50 návštěv za měsíc", - icon: "fa-rocket", - color: "text-purple-500", - threshold: 50, - period: "monthly", - theme: { - backgroundColor: "bg-purple-50", - textColor: "text-purple-700", - borderColor: "border-purple-200", - hoverColor: "hover:bg-purple-100" - } - }, - "super_fan": { - name: "Super Fan", - description: "100 návštěv za měsíc", - icon: "fa-award", - color: "text-gold", - threshold: 100, - period: "monthly", - theme: { - backgroundColor: "bg-yellow-50", - textColor: "text-yellow-700", - borderColor: "border-yellow-200", - hoverColor: "hover:bg-yellow-100" - } - } -}; - -// Device categories -const DEVICE_CATEGORIES = { - mobile: [ - "iPhone", - "iPad", - "Android Phone", - "Android Tablet", - "Windows Phone" - ], - desktop: [ - "Windows PC", - "Mac", - "Linux PC" - ] -}; - -// Get device category -function getDeviceCategory(device) { - for (const [category, devices] of Object.entries(DEVICE_CATEGORIES)) { - if (devices.includes(device)) { - return category; - } - } - return "unknown"; -} - -// Track unlocked achievements -let unlockedAchievements = new Set(); - -// Store current theme -let currentTheme = { - backgroundColor: "bg-white", - textColor: "text-gray-800", - borderColor: "border-gray-200", - hoverColor: "hover:bg-gray-50" -}; - -// Apply theme to all cards -function applyTheme() { - const cards = document.querySelectorAll('.card'); - cards.forEach(card => { - card.className = card.className.split(' ').filter(cls => !cls.startsWith('bg-') && !cls.startsWith('text-') && !cls.startsWith('border-') && !cls.startsWith('hover:')).join(' '); - card.className += ` ${currentTheme.backgroundColor} ${currentTheme.textColor} ${currentTheme.borderColor} ${currentTheme.hoverColor}`; - }); -} - -let achievementsEnabled = false; - -// Hidden toggle for achievements -function toggleAchievements() { - achievementsEnabled = !achievementsEnabled; - localStorage.setItem('achievementsEnabled', achievementsEnabled); - - if (achievementsEnabled) { - checkAchievements(); - showAchievements(); - } else { - hideAchievements(); - } -} - -// Check if user has earned achievements -async function checkAchievements() { - try { - const response = await fetch('/api/visitor-stats'); - const stats = await response.json(); - const visitorId = getCookie('visitor_id'); - - // First visit achievement - if (!localStorage.getItem('first_visit_' + visitorId)) { - unlockAchievement('first_visit'); - localStorage.setItem('first_visit_' + visitorId, 'true'); - } - - // Get visitor's stats - const visitor = stats.unique_visitors[visitorId]; - if (!visitor) return; - - // Device-specific achievements - const deviceCategory = getDeviceCategory(visitor.Device); - - // Mobile Master achievement - if (deviceCategory === 'mobile' && - visitor.Visits >= ACHIEVEMENTS.mobile_master.threshold && - !localStorage.getItem('mobile_master_' + visitorId)) { - unlockAchievement('mobile_master'); - localStorage.setItem('mobile_master_' + visitorId, 'true'); - } - - // Desktop Guru achievement - if (deviceCategory === 'desktop' && - visitor.Visits >= ACHIEVEMENTS.desktop_guru.threshold && - !localStorage.getItem('desktop_guru_' + visitorId)) { - unlockAchievement('desktop_guru'); - localStorage.setItem('desktop_guru_' + visitorId, 'true'); - } - - // Monthly achievements - const monthlyVisits = stats.monthly_visits; - if (monthlyVisits >= ACHIEVEMENTS.frequent_visitor.threshold && - !localStorage.getItem('frequent_visitor_' + visitorId)) { - unlockAchievement('frequent_visitor'); - localStorage.setItem('frequent_visitor_' + visitorId, 'true'); - } - - if (monthlyVisits >= ACHIEVEMENTS.power_user.threshold && - !localStorage.getItem('power_user_' + visitorId)) { - unlockAchievement('power_user'); - localStorage.setItem('power_user_' + visitorId, 'true'); - } - - if (monthlyVisits >= ACHIEVEMENTS.super_fan.threshold && - !localStorage.getItem('super_fan_' + visitorId)) { - unlockAchievement('super_fan'); - localStorage.setItem('super_fan_' + visitorId, 'true'); - } - } catch (error) { - console.error('Error checking achievements:', error); - } -} - -// Unlock achievement and show toast -function unlockAchievement(achievement) { - unlockedAchievements.add(achievement); - showAchievementToast(achievement); - showAchievements(); -} - -// Show achievement toast -function showAchievementToast(achievement) { - const toast = document.createElement('div'); - toast.className = 'fixed bottom-4 right-4 bg-white rounded-lg shadow-lg p-4 w-64 flex items-center text-green-500'; - toast.innerHTML = ` -
-

Achievement Unlocked!

-

${ACHIEVEMENTS[achievement].name}

-
- - `; - document.body.appendChild(toast); - - // Remove toast after 3 seconds - setTimeout(() => { - toast.remove(); - }, 3000); -} - -// Show only unlocked achievements -function showAchievements() { - const achievementsDisplay = document.getElementById('achievementsDisplay'); - const achievementItems = achievementsDisplay.querySelectorAll('.achievement-item'); - - achievementItems.forEach(item => { - const achievementId = item.querySelector('.achievement-icon').classList[1]; - const achievement = ACHIEVEMENTS[achievementId.replace('achievement-icon-', '')]; - if (achievement && unlockedAchievements.has(achievementId.replace('achievement-icon-', ''))) { - item.style.display = 'block'; - // Apply achievement theme - Object.entries(achievement.theme).forEach(([key, value]) => { - item.classList.add(value); - }); - } else { - item.style.display = 'none'; - } - }); - - // Show achievements display if any achievements are unlocked - if (unlockedAchievements.size > 0) { - achievementsDisplay.classList.remove('hidden'); - } else { - achievementsDisplay.classList.add('hidden'); - } - - // Apply highest unlocked achievement theme to the page - applyHighestAchievementTheme(); -} - -// Apply highest unlocked achievement theme -function applyHighestAchievementTheme() { - const unlocked = Array.from(unlockedAchievements); - if (unlocked.length === 0) return; - - // Sort achievements by threshold to find the highest - const sortedAchievements = Object.entries(ACHIEVEMENTS) - .filter(([id]) => unlocked.includes(id)) - .sort(([, a], [, b]) => b.threshold - a.threshold); - - const highest = sortedAchievements[0][1]; - - // Apply theme to body - const body = document.body; - // Remove existing theme classes - ['bg-', 'text-', 'border-', 'hover:'].forEach(prefix => { - const classes = Array.from(body.classList).filter(cls => !cls.startsWith(prefix)); - body.className = classes.join(' '); - }); - - // Add new theme classes - Object.entries(highest.theme).forEach(([key, value]) => { - body.classList.add(value); - }); -} - -// Hide achievements display -function hideAchievements() { - const achievementsDisplay = document.getElementById('achievementsDisplay'); - if (achievementsDisplay) { - achievementsDisplay.style.display = 'none'; - } -} - -// Doom-style cheat code toggle -const CHEAT_CODE = 'IDKFA'; -let cheatCodeIndex = 0; -let cheatCodeTimer; - -// Initialize achievements -function initializeAchievements() { - // Check if achievements were enabled before - achievementsEnabled = JSON.parse(localStorage.getItem('achievementsEnabled') || 'false'); - - // Add cheat code input listener - document.addEventListener('keydown', (e) => { - // Reset timer if no key was pressed in 2 seconds - if (cheatCodeTimer) { - clearTimeout(cheatCodeTimer); - } - - cheatCodeTimer = setTimeout(() => { - cheatCodeIndex = 0; - }, 2000); - - // Check if key matches current position in cheat code - if (e.key.toUpperCase() === CHEAT_CODE[cheatCodeIndex]) { - cheatCodeIndex++; - - // If complete code entered - if (cheatCodeIndex === CHEAT_CODE.length) { - // Show achievement unlocked animation - const achievementToast = document.createElement('div'); - achievementToast.className = 'fixed bottom-4 right-4 bg-white rounded-lg shadow-lg p-4 w-64 flex items-center text-green-500'; - achievementToast.innerHTML = ` -
-

Achievement Unlocked!

-

"IDKFA" cheat code activated

-
- - `; - document.body.appendChild(achievementToast); - - // Enable achievements - achievementsEnabled = true; - localStorage.setItem('achievementsEnabled', true); - - // Remove toast after 3 seconds - setTimeout(() => { - achievementToast.remove(); - }, 3000); - } - } else { - // Reset cheat code if wrong key pressed - cheatCodeIndex = 0; - } - }); - - // Initialize achievements if enabled - if (achievementsEnabled) { - checkAchievements(); - showAchievements(); - } -} - -// Add celebration animation -function celebrate() { - const confetti = document.createElement('div'); - confetti.className = 'absolute inset-0 pointer-events-none'; - confetti.innerHTML = ` -
-
-
-
-
-
-
-
- `; - - document.body.appendChild(confetti); - - setTimeout(() => { - confetti.remove(); - }, 3000); -} - -// Initialize when page loads -document.addEventListener('DOMContentLoaded', initializeAchievements); diff --git a/index.html b/index.html index 5b7bb93..1223555 100644 --- a/index.html +++ b/index.html @@ -617,47 +617,8 @@ }); }); - - - +