Initial V1 Backup

This commit is contained in:
Javier
2026-01-22 00:36:01 -06:00
commit 4c5a588197
27 changed files with 7509 additions and 0 deletions

90
static/js/main.js Normal file
View File

@@ -0,0 +1,90 @@
/**
* ScanLook - Main JavaScript
* Client-side utilities and enhancements
*/
// Auto-dismiss flash messages after 5 seconds
document.addEventListener('DOMContentLoaded', function() {
const flashMessages = document.querySelectorAll('.flash');
flashMessages.forEach(function(flash) {
setTimeout(function() {
flash.style.animation = 'slideOut 0.3s ease';
setTimeout(function() {
flash.remove();
}, 300);
}, 5000);
});
});
// Animation for slide out
const style = document.createElement('style');
style.textContent = `
@keyframes slideOut {
from {
transform: translateX(0);
opacity: 1;
}
to {
transform: translateX(120%);
opacity: 0;
}
}
`;
document.head.appendChild(style);
// Utility: Format timestamp
function formatTimestamp(timestamp) {
const date = new Date(timestamp);
return date.toLocaleString();
}
// Utility: Format number with commas
function formatNumber(num) {
return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
// Auto-focus on scan inputs when page loads
window.addEventListener('load', function() {
const scanInput = document.querySelector('.scan-input');
if (scanInput) {
scanInput.focus();
}
});
// Prevent accidental page navigation
window.addEventListener('beforeunload', function(e) {
const isCountingPage = document.querySelector('.count-location-container');
if (isCountingPage) {
const scans = document.querySelectorAll('.scan-item').length;
if (scans > 0) {
e.preventDefault();
e.returnValue = '';
}
}
});
// Auto-uppercase inputs with specific classes
document.addEventListener('input', function(e) {
if (e.target.classList.contains('scan-input')) {
e.target.value = e.target.value.toUpperCase();
}
});
// Settings dropdown toggle
function toggleSettings() {
const menu = document.getElementById('settingsMenu');
if (menu) {
menu.classList.toggle('show');
}
}
// Close settings dropdown when clicking outside
document.addEventListener('click', function(e) {
if (!e.target.matches('.btn-settings') && !e.target.closest('.settings-dropdown')) {
const menu = document.getElementById('settingsMenu');
if (menu && menu.classList.contains('show')) {
menu.classList.remove('show');
}
}
});