// Main JavaScript file for Edu-Space Admin $(document).ready(function() { // Initialize tooltips var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')); var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) { return new bootstrap.Tooltip(tooltipTriggerEl); }); // Initialize popovers var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]')); var popoverList = popoverTriggerList.map(function (popoverTriggerEl) { return new bootstrap.Popover(popoverTriggerEl); }); // Auto-hide alerts after 5 seconds setTimeout(function() { $('.alert.fade').alert('close'); }, 5000); // Confirm delete actions $('.delete-confirm').on('click', function(e) { if (!confirm('Are you sure you want to delete this item? This action cannot be undone.')) { e.preventDefault(); return false; } }); // Form validation enhancements $('form').on('submit', function() { var form = $(this); var submitBtn = form.find('button[type="submit"]'); // Show loading state submitBtn.prop('disabled', true); var originalText = submitBtn.html(); submitBtn.html('Loading...'); // Re-enable after 10 seconds in case of error setTimeout(function() { submitBtn.prop('disabled', false); submitBtn.html(originalText); }, 10000); }); // Copy to clipboard functionality $('.copy-to-clipboard').on('click', function() { var text = $(this).data('text'); if (!text) { text = $(this).text(); } navigator.clipboard.writeText(text).then(function() { showToast('Copied to clipboard!', 'success'); }).catch(function() { showToast('Failed to copy to clipboard', 'error'); }); }); // Quick search functionality $('#quickSearch').on('input', function() { var searchTerm = $(this).val().toLowerCase(); $('.searchable-item').each(function() { var item = $(this); var text = item.text().toLowerCase(); if (text.includes(searchTerm)) { item.show(); } else { item.hide(); } }); }); // Initialize datepickers $('.datetimepicker').each(function() { $(this).flatpickr({ enableTime: true, dateFormat: "Y-m-d H:i", time_24hr: true, minDate: "today" }); }); $('.datepicker').each(function() { $(this).flatpickr({ dateFormat: "Y-m-d", minDate: "today" }); }); // Auto-save functionality for multi-step forms $('.auto-save').on('change input', function() { var form = $(this).closest('form'); var formData = form.serialize(); // Save to localStorage localStorage.setItem('autosave_' + form.attr('id'), formData); showToast('Draft saved automatically', 'info'); }); // Restore auto-saved data $('form.auto-save-restore').each(function() { var form = $(this); var savedData = localStorage.getItem('autosave_' + form.attr('id')); if (savedData) { // Show restore prompt if (confirm('Found unsaved changes. Would you like to restore them?')) { var params = new URLSearchParams(savedData); params.forEach(function(value, key) { form.find('[name="' + key + '"]').val(value); }); showToast('Draft restored', 'info'); } } }); // Print functionality $('.btn-print').on('click', function() { window.print(); }); // Export functionality $('.btn-export').on('click', function() { var format = $(this).data('format'); var url = $(this).data('url'); if (format === 'excel') { window.open(url + '?export=excel', '_blank'); } else if (format === 'pdf') { window.open(url + '?export=pdf', '_blank'); } else if (format === 'csv') { window.open(url + '?export=csv', '_blank'); } }); // Keyboard shortcuts $(document).on('keydown', function(e) { // Ctrl/Cmd + K for search if ((e.ctrlKey || e.metaKey) && e.key === 'k') { e.preventDefault(); $('#quickSearch').focus(); } // Escape to close modals if (e.key === 'Escape') { $('.modal.show').modal('hide'); } }); // Initialize tooltips dynamically for AI-generated content initializeDynamicTooltips(); }); // Utility functions function showToast(message, type = 'info') { var toastHtml = `