let currentYear; //Adding new element in the array creates new tab const years = ['pre-2009', '2009', '2010', '2011', '2012', '2013', '2014', '2015', '2016','2017','2018','2019','2020','2021','2022','2023', '2024', 're-watch', 'manga']; function loadYearTabs() { const yearTabs = document.getElementById('year-tabs'); // Populate the tabs years.forEach(year => { const li = document.createElement('li'); li.textContent = year; li.classList.add('tab'); li.dataset.year = year; // Set data-year attribute for each tab // Add a click event listener to each tab li.addEventListener('click', () => { loadYearContent(year); }); yearTabs.appendChild(li); // Now check if all entries are completed for this year fetch(`php/check_completed_year.php?year=${encodeURIComponent(year)}`) .then(response => response.json()) .then(data => { if (data.all_completed) { // Strike through the tab if all are completed li.style.textDecoration = 'line-through'; } }) .catch(error => console.error('Error checking completed status:', error)); }); // Load the last active tab or default to 'pre-2009' const activeYear = localStorage.getItem('activeYear') || 'pre-2009'; loadYearContent(activeYear); } function loadYearContent(year) { currentYear = year; // Save the current year in localStorage for persistence localStorage.setItem('activeYear', year); // Highlight the active tab const tabs = document.querySelectorAll('#year-tabs .tab'); tabs.forEach(tab => { // Add or remove the active class based on the tab's data-year if (tab.dataset.year === year) { tab.classList.add('active'); } else { tab.classList.remove('active'); } }); // Fetch and display content for the selected year fetch(`php/fetch_data.php?year=${encodeURIComponent(year)}`) .then(response => response.text()) .then(html => { document.getElementById('content').innerHTML = html; setupFormSubmission(); setupEditButtons(); setupDeleteButtons(); setupSuggestButton(); setupSetCompleteButtons(); setupSetCurrentlyWatchingButtons(); }) .catch(error => console.error('Error loading content:', error)); } function setupFormSubmission() { const form = document.getElementById('add-form'); function handleFormSubmit(event) { event.preventDefault(); const formData = new FormData(form); fetch('php/add_record.php', { method: 'POST', body: formData }) .then(response => { if (!response.ok) { return response.json().then(errorData => { if (response.status === 403) { alert(errorData.message || 'Access denied: You are not authorized to perform this action.'); } throw new Error(errorData.message || 'An error occurred.'); }); } return response.text(); }) .then(() => { loadYearContent(currentYear); }) .catch(error => { console.error('Error:', error); }); } form.addEventListener('submit', handleFormSubmit); form.addEventListener('keydown', event => { if (event.ctrlKey && event.key === 'Enter') { event.preventDefault(); handleFormSubmit(event); } }); } function setupEditButtons() { const editButtons = document.querySelectorAll('.edit-button'); editButtons.forEach(button => { button.addEventListener('click', () => { const recordId = button.dataset.id; openEditModal(recordId); }); }); } function setupDeleteButtons() { const deleteButtons = document.querySelectorAll('.delete-button'); deleteButtons.forEach(button => { button.addEventListener('click', () => { const recordId = button.dataset.id; if (confirm('Are you sure you want to delete this record?')) { fetch(`php/delete_record.php?id=${recordId}`, { method: 'DELETE' }) .then(response => { if (!response.ok) { return response.json().then(errorData => { if (response.status === 403) { alert(errorData.message || 'Access denied: You are not authorized to delete this record.'); } throw new Error(errorData.message || 'An error occurred while deleting the record.'); }); } return response.text(); }) .then(() => { loadYearContent(currentYear); }) .catch(error => { console.error('Error:', error); }); } }); }); } function openEditModal(id) { // Fetch record data fetch(`php/fetch_record.php?id=${id}`) .then(response => response.json()) .then(data => { const modal = document.getElementById('edit-modal'); const form = document.getElementById('edit-form'); form.innerHTML = generateEditForm(data); modal.style.display = 'block'; setupEditFormSubmission(); }); } function setupModal() { const modal = document.getElementById('edit-modal'); const closeModal = document.getElementById('close-modal'); closeModal.addEventListener('click', () => modal.style.display = 'none'); window.addEventListener('keydown', event => { if (event.key === 'Escape') { modal.style.display = 'none'; } }); // Close modal when clicking outside the modal content modal.addEventListener('click', event => { if (event.target === modal) { modal.style.display = 'none'; } }); } function mapLabelToYear(label) { if (label === 'pre-2009') return -1; if (label === 're-watch') return -2; return parseInt(label, 10); } function setupEditFormSubmission() { const form = document.getElementById('edit-form'); function handleEditFormSubmit(event) { event.preventDefault(); const yearLabelSelect = form.querySelector('#year_label'); const numericYearInput = form.querySelector('#year_numeric'); const selectedLabel = yearLabelSelect.value; // Use the mapLabelToYear function numericYearInput.value = mapLabelToYear(selectedLabel); const formData = new FormData(form); fetch('php/edit_record.php', { method: 'POST', body: formData }) .then(response => { if (!response.ok) { return response.json().then(errorData => { if (response.status === 403) { alert(errorData.message || 'Access denied: You are not authorized to edit this record.'); } throw new Error(errorData.message || 'An error occurred while editing the record.'); }); } return response.text(); }) .then(() => { const modal = document.getElementById('edit-modal'); modal.style.display = 'none'; loadYearContent(currentYear); }) .catch(error => { console.error('Error:', error); }); } form.addEventListener('submit', handleEditFormSubmit); form.addEventListener('keydown', event => { if (event.ctrlKey && event.key === 'Enter') { event.preventDefault(); handleEditFormSubmit(event); } }); } function generateEditForm(data) { function mapYearToLabel(yearValue) { if (yearValue == -1) return 'pre-2009'; if (yearValue == -2) return 're-watch'; if (yearValue == -3) return 'manga'; return yearValue.toString(); } const selectedYearLabel = mapYearToLabel(data.year); return `
${names.join('
')}