let allItems = []; let currentPage = 1; let itemsPerPage = 10; function searchItems() { const formData = new FormData(searchForm); resultsContainer.innerHTML = ''; overlay.style.display = 'flex'; fetch('/search', { method: 'POST', body: formData }) .then(response => response.json()) .then(data => { currentItems = data; sortItems(currentItems); displayItems(currentItems, 1); overlay.style.display = 'none'; }) .catch(error => { console.error('Error:', error); overlay.style.display = 'none'; }); updateProgress(); } function updateProgress() { fetch('/progress') .then(response => response.json()) .then(data => { const totalItems = data.total_items; const currentItem = data.current_item; const progressPercentage = data.progress_percentage; document.getElementById('progress-text').innerText = `Artikel ${currentItem} von ${totalItems}`; //document.getElementById('progress-fill').style.width = `${progressPercentage}%`; //document.getElementById('progress-percentage').innerText = `${progressPercentage}%`; if (currentItem < totalItems) { setTimeout(updateProgress, 500); // Poll every second } else { document.getElementById('overlay').style.display = 'none'; } }) .catch(error => console.error('Fehler beim Abrufen des Fortschritts:', error)); } document.getElementById('search-form').addEventListener('submit', function(event) { event.preventDefault(); const formData = new FormData(event.target); document.getElementById('overlay').style.display = 'flex'; fetch('/search', { method: 'POST', body: formData }) .then(response => response.json()) .then(data => { allItems = data; currentPage = 1; displayResults(); document.getElementById('overlay').style.display = 'none'; }) .catch(error => { console.error('Fehler beim Abrufen der Ergebnisse:', error); document.getElementById('overlay').style.display = 'none'; }); // Start updating progress updateProgress(); }); document.getElementById('items-per-page').addEventListener('change', function(event) { itemsPerPage = parseInt(event.target.value); currentPage = 1; displayResults(); }); document.getElementById('sort-filter').addEventListener('change', function(event) { const sortBy = event.target.value; if (sortBy === 'alphabet') { allItems.sort((a, b) => a[0].localeCompare(b[0])); } else if (sortBy === 'price') { allItems.sort((a, b) => parseFloat(a[3]) - parseFloat(b[3])); } displayResults(); }); document.getElementById('manufacturer-filter').addEventListener('input', function(event) { const manufacturer = event.target.value.toLowerCase(); const filteredItems = allItems.filter(item => item[0].toLowerCase().includes(manufacturer)); displayResults(filteredItems); }); function displayResults(items = allItems) { const resultsDiv = document.getElementById('results'); resultsDiv.innerHTML = ''; const start = (currentPage - 1) * itemsPerPage; const end = start + itemsPerPage; const paginatedItems = items.slice(start, end); paginatedItems.forEach(item => { const itemDiv = document.createElement('div'); itemDiv.classList.add('item'); itemDiv.innerHTML = `

${item[0]}

Preis: ${item[1]}

`; resultsDiv.appendChild(itemDiv); }); displayPagination(items.length); } function displayPagination(totalItems) { const paginationTopDiv = document.getElementById('pagination-top'); const paginationBottomDiv = document.getElementById('pagination-bottom'); paginationTopDiv.innerHTML = ''; paginationBottomDiv.innerHTML = ''; const totalPages = Math.ceil(totalItems / itemsPerPage); let paginationHTML = ` << < `; if (totalPages <= 9) { for (let page = 1; page <= totalPages; page++) { paginationHTML += ` ${page} `; } } else { if (currentPage <= 5) { for (let page = 1; page <= 7; page++) { paginationHTML += ` ${page} `; } paginationHTML += `...`; paginationHTML += ` ${totalPages} `; } else if (currentPage > totalPages - 5) { paginationHTML += ` 1 ... `; for (let page = totalPages - 6; page <= totalPages; page++) { paginationHTML += ` ${page} `; } } else { paginationHTML += ` 1 ... `; for (let page = currentPage - 3; page <= currentPage + 3; page++) { paginationHTML += ` ${page} `; } paginationHTML += `...`; paginationHTML += ` ${totalPages} `; } } paginationHTML += ` > >> `; paginationTopDiv.innerHTML = paginationHTML; paginationBottomDiv.innerHTML = paginationHTML; } function changePage(page) { const totalPages = Math.ceil(allItems.length / itemsPerPage); if (page < 1) page = 1; if (page > totalPages) page = totalPages; currentPage = page; displayResults(); }