} else { bgVideo.style.display = "none"; bgVideo.pause(); bgContainer.style.backgroundImage = `url('${item.url}')`; } localStorage.setItem('premium_active_wallpaper_url', item.url); localStorage.setItem('premium_active_wallpaper_type', item.type); } chooseVideoFileBtn.addEventListener("click", () => localVideoInput.click()); localVideoInput.addEventListener("change", function(e) { const file = e.target.files[0]; if (!file) return; const reader = new FileReader(); reader.onload = function(evt) { const dataUrl = evt.target.result; const isVideo = file.type.includes("video") || file.name.endsWith('.mp4'); const newItem = { url: dataUrl, type: isVideo ? "video" : "image" }; const currentImports = JSON.parse(localStorage.getItem('premium_imported_wallpapers') || '[]'); currentImports.unshift(newItem); if(currentImports.length > 5) currentImports.pop(); localStorage.setItem('premium_imported_wallpapers', JSON.stringify(currentImports)); const thumbBox = document.createElement("div"); thumbBox.className = "wallpaper-thumb active"; if (isVideo) { const vid = document.createElement("video"); vid.src = dataUrl; vid.preload = "metadata"; vid.muted = true; vid.playsInline = true; thumbBox.appendChild(vid); } else { const img = document.createElement("img"); img.src = dataUrl; thumbBox.appendChild(img); } thumbBox.addEventListener("click", () => { document.querySelectorAll("#wallpaperGrid .wallpaper-thumb").forEach(t => t.classList.remove("active")); thumbBox.classList.add("active"); applyWallpaper(newItem); }); wallpaperGrid.insertBefore(thumbBox, wallpaperGrid.firstChild); applyWallpaper(newItem); }; reader.readAsDataURL(file); }); const pCan = bgEffectsCanvas; const pCtx = pCan.getContext('2d'); let pArr = []; let pType = effectSelect?.value || 'snow'; let mX = -9999, mY = -9999; window.addEventListener('mousemove', (e) => { mX = e.clientX; mY = e.clientY; }); function resPCan() { if (!pCan) return; pCan.width = window.innerWidth; pCan.height = window.innerHeight; initP(); } window.addEventListener('resize', resPCan); function initP() { pArr = []; if (!pCan || pType === 'none') return; for (let i = 0; i < 100; i++) { pArr.push(createP(true)); } } function createP(init = false) { let x = Math.random() * pCan.width; let y = init ? Math.random() * pCan.height : -10; let s = Math.random() * 3 + 1; let vx = Math.random() * 1 - 0.5; let vy = Math.random() * 2 + 1; let a = Math.random() * 0.5 + 0.3; if (pType === 'fireflies') { y = Math.random() * pCan.height; vx = Math.random() * 2 - 1; vy = Math.random() * 2 - 1; s = Math.random() * 4 + 2; } else if (pType === 'nexus') { y = Math.random() * pCan.height; vx = Math.random() * 1 - 0.5; vy = Math.random() * 1 - 0.5; s = 2; } else if (pType === 'rain') { vy = Math.random() * 10 + 10; vx = -2; s = Math.random() * 2 + 1; } return { x, y, s, vx, vy, a }; } function updP() { if (!pCan || pType === 'none') { pCtx?.clearRect(0,0,pCan.width,pCan.height); requestAnimationFrame(updP); return; } pCtx.clearRect(0, 0, pCan.width, pCan.height); pArr.forEach((p, idx) => { if (pType === 'fireflies') { let dx = mX - p.x; let dy = mY - p.y; let dist = Math.sqrt(dx * dx + dy * dy); if (dist < 100) { p.vx -= dx * 0.005; p.vy -= dy * 0.005; } } if (pType === 'nexus') { pArr.forEach(p2 => { let d2 = Math.sqrt(Math.pow(p2.x - p.x, 2) + Math.pow(p2.y - p.y, 2)); if (d2 < 80) { pCtx.beginPath(); pCtx.moveTo(p.x, p.y); pCtx.lineTo(p2.x, p2.y); pCtx.strokeStyle = `rgba(255,255,255,${1 - (d2 / 80)})`; pCtx.stroke(); } }); } p.x += p.vx; p.y += p.vy; if (p.y > window.innerHeight || p.x < 0 || p.x > window.innerWidth) pArr[idx] = createP(); pCtx.fillStyle = `rgba(255,255,255,${p.a})`; pCtx.beginPath(); if (pType === 'rain') { pCtx.strokeStyle = `rgba(255,255,255,${p.a*0.4})`; pCtx.moveTo(p.x, p.y); pCtx.lineTo(p.x+p.vx*2, p.y+p.vy*2); pCtx.stroke(); } else { pCtx.arc(p.x, p.y, p.s, 0, Math.PI * 2); pCtx.fill(); } }); requestAnimationFrame(updP); } if (effectSelect) effectSelect.addEventListener('change', (e) => { pType = e.target.value; localStorage.setItem('premium_bg_effect', pType); initP(); }); function loadSavedPreferences() { const savedPosition = localStorage.getItem('premium_dock_position') || 'bottom'; updateDockPosition(savedPosition); const savedEffect = localStorage.getItem('premium_bg_effect'); if (savedEffect && effectSelect) { effectSelect.value = savedEffect; pType = savedEffect; } const savedLoop = localStorage.getItem('premium_bg_loop'); if (savedLoop && loopToggle) { const isTrue = savedLoop === "true"; loopToggle.checked = isTrue; bgVideo.loop = isTrue; } } document.documentElement.style.setProperty('--dock-size', '38px'); loadSavedPreferences(); checkUpdateModal(); setupUniversalResizers(); setupDragAndDrop(); resPCan(); updP(); fetchAllWallpapers(); buildInterface();