console.log('JavaScript se izvaja...'); // DOM elementi const songNumberInput = document.getElementById('song-number'); const loadBtn = document.getElementById('load-btn'); const displayArea = document.getElementById('display-area'); const prevBtn = document.getElementById('prev-btn'); const nextBtn = document.getElementById('next-btn'); const darkBtn = document.getElementById('dark-btn'); const pageInfo = document.getElementById('page-info'); const clearBtn = document.getElementById('clear-btn'); const keypadButtons = document.querySelectorAll('.btn-key'); const keypadWrapper = document.getElementById('keypad-wrapper'); const toggleKeypadBtn = document.getElementById('toggle-keypad-btn'); const menuToggle = document.getElementById('menu-toggle'); const menuDropdown = document.getElementById('menu-dropdown'); const searchInput = document.getElementById('search-input'); const searchResults = document.getElementById('search-results'); let capsMode = false; let wakeLock = null; let lastStateSignature = ""; let lastPageInfo = ""; // vibracija telefona function vibrate() { if (navigator.vibrate && /Android|iPhone|iPad|iPod/i.test(navigator.userAgent)) { navigator.vibrate([25, 30, 25]); } } // poskus, da se zaslon ne ugaša async function requestWakeLock() { try { if ('wakeLock' in navigator) { wakeLock = await navigator.wakeLock.request('screen'); console.log('Wake lock aktiviran'); wakeLock.addEventListener('release', () => { console.log('Wake lock sproščen'); }); } } catch (err) { console.log('Wake lock ni uspel:', err); } } // ob vrnitvi v zavihek ponovno zahtevaj wake lock document.addEventListener('visibilitychange', async () => { if (document.visibilityState === 'visible') { await requestWakeLock(); } }); // posodobi stanje async function updateState(force = false) { try { const response = await fetch('/api/state', { cache: 'no-store' }); const data = await response.json(); const signature = JSON.stringify({ current_text: data.current_text || '', page_info: data.page_info || '', caps_mode: data.caps_mode || false, can_prev: !!data.can_prev }); if (!force && signature === lastStateSignature) { return; } lastStateSignature = signature; displayArea.textContent = data.current_text || 'Pripravljeno. Vpiši številko pesmi.'; lastPageInfo = data.page_info || ''; updatePageInfoDisplay(); capsMode = data.caps_mode || false; if (capsMode) { darkBtn.classList.add('active'); } else { darkBtn.classList.remove('active'); } prevBtn.disabled = !data.can_prev; } catch (error) { console.error('Napaka pri posodabljanju stanja:', error); displayArea.innerHTML = ''; } } // Posodobi prikaz v page-info (vključno z vnosom številke) function updatePageInfoDisplay() { const songNumber = songNumberInput.value; if (songNumber) { pageInfo.textContent = 'Vnos: ' + songNumber; pageInfo.classList.add('input-active'); } else { pageInfo.textContent = lastPageInfo; pageInfo.classList.remove('input-active'); } } // dodaj številko function addDigit(digit) { songNumberInput.value += digit; updatePageInfoDisplay(); } // počisti vnos function clearInput() { songNumberInput.value = ''; updatePageInfoDisplay(); } // Enter: // - če je številka -> naloži pesem // - če ni številke -> naslednja kitica async function loadSong() { const songNumber = songNumberInput.value.trim(); try { if (songNumber) { await fetch('/api/load_song', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ song_number: songNumber }) }); songNumberInput.value = ''; updatePageInfoDisplay(); } else { await fetch('/api/next_page', { method: 'POST' }); } await updateState(true); } catch (error) { console.error('Napaka:', error); displayArea.innerHTML = ''; } } // Iskanje pesmi async function searchSongs() { const query = searchInput.value.trim(); if (!query) { searchResults.innerHTML = ''; searchResults.classList.remove('show'); return; } try { const response = await fetch('/api/search_songs', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ query: query }) }); const data = await response.json(); if (data.results && data.results.length > 0) { searchResults.innerHTML = ''; data.results.forEach(song => { const item = document.createElement('div'); item.className = 'search-item'; item.innerHTML = ` ${song[0]} ${song[1]} `; item.addEventListener('click', () => { songNumberInput.value = song[0]; updatePageInfoDisplay(); loadSong(); searchInput.value = ''; searchResults.innerHTML = ''; searchResults.classList.remove('show'); }); searchResults.appendChild(item); }); searchResults.classList.add('show'); } else { searchResults.innerHTML = '