- Add A-Z alphabetical filter keyboard for clients and suppliers lists (same pattern as company selection, without emoji) - Increase clients/suppliers list pagination from 10 to 20 items per page - Remove emoji from company A-Z filter button for consistency - Add 6 new callback handlers: clients_alpha_menu, clients_alpha:LETTER, clients_alpha_page:PAGE:LETTER, and supplier equivalents - Dashboard service and models updates - Telegram bot: email handlers, auth, DB operations, internal API improvements - Frontend: dashboard cards updates (CashFlow, Clienti, Furnizori, Treasury) - Frontend: SolduriCompactCard and CollapsibleCard improvements - DashboardView enhancements - start.sh and run-with-restart.sh script updates - IIS web.config and service worker updates Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
75 lines
2.8 KiB
HTML
75 lines
2.8 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="ro">
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<title>ROA2WEB - Unified App</title>
|
|
<link rel="icon" href="/favicon.ico" />
|
|
<!-- BUILD_TIMESTAMP placeholder for cache busting -->
|
|
<meta name="build-time" content="BUILD_TIMESTAMP" />
|
|
<!-- PWA Support -->
|
|
<link rel="manifest" href="%BASE_URL%manifest.json" />
|
|
<meta name="theme-color" content="#2563eb" />
|
|
<meta name="mobile-web-app-capable" content="yes" />
|
|
<meta name="apple-mobile-web-app-capable" content="yes" />
|
|
<meta name="apple-mobile-web-app-status-bar-style" content="default" />
|
|
<meta name="apple-mobile-web-app-title" content="ROA2WEB" />
|
|
<link rel="apple-touch-icon" href="/roa2web/icon-192.png" />
|
|
<!-- Theme initialization - MUST be before any rendering to prevent flash -->
|
|
<script>
|
|
(function() {
|
|
var theme = localStorage.getItem('user-theme');
|
|
if (theme && theme !== 'auto') {
|
|
document.documentElement.setAttribute('data-theme', theme);
|
|
}
|
|
})();
|
|
</script>
|
|
<!-- Service Worker Registration for PWA -->
|
|
<script>
|
|
if ('serviceWorker' in navigator) {
|
|
window.addEventListener('load', () => {
|
|
const swBase = document.querySelector('link[rel="manifest"]')
|
|
?.getAttribute('href')?.replace('manifest.json', '') || '/';
|
|
navigator.serviceWorker.register(swBase + 'sw.js')
|
|
.then(reg => {
|
|
console.log('[PWA] Service Worker registered:', reg.scope);
|
|
|
|
// Auto-reload when a new SW takes control (picks up new deploy)
|
|
navigator.serviceWorker.addEventListener('controllerchange', () => {
|
|
console.log('[PWA] New Service Worker active - reloading for fresh version');
|
|
window.location.reload();
|
|
});
|
|
|
|
// Check for SW updates each time user returns to the tab (handles PWA on mobile)
|
|
document.addEventListener('visibilitychange', () => {
|
|
if (document.visibilityState === 'visible') {
|
|
reg.update();
|
|
}
|
|
});
|
|
})
|
|
.catch(err => console.error('[PWA] Service Worker registration failed:', err));
|
|
});
|
|
}
|
|
</script>
|
|
</head>
|
|
<body>
|
|
<div id="app"></div>
|
|
|
|
<!-- Eruda Mobile Console - activare cu ?debug in URL -->
|
|
<script>
|
|
if (location.search.includes('debug') || localStorage.getItem('eruda') === 'true') {
|
|
var script = document.createElement('script');
|
|
script.src = 'https://cdn.jsdelivr.net/npm/eruda';
|
|
script.onload = function() {
|
|
eruda.init();
|
|
localStorage.setItem('eruda', 'true');
|
|
console.log('🔧 Eruda Mobile Console ACTIVE');
|
|
};
|
|
document.body.appendChild(script);
|
|
}
|
|
</script>
|
|
|
|
<script type="module" src="/src/main.js"></script>
|
|
</body>
|
|
</html>
|