fix(frontend): restore DOMContentLoaded wrapper in app.js and render login overlay by default

This commit is contained in:
Antigravity committed 2026-10-05 15:28:31 +03:00
1 parent 99741c386e
commit d5071c8ac9
2 files changed
+24 -23

No files matched your search

+3 -3
View File
@@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>Notes — Персональный тренажер и словарь английского языка</title> <title>Notes — Персональный тренажер и словарь английского языка</title>
<meta name="description" content="Защищённый персональный тренажёр и словарь английского языка с интервальными повторениями SRS SM-2, контекстным поиском и озвучкой"> <meta name="description" content="Защищённый персональный тренажёр и словарь английского языка с интервальными повторениями SRS SM-2, контекстным поиском и озвучкой">
<link rel="stylesheet" href="/static/css/style.css?v=2.9"> <link rel="stylesheet" href="/static/css/style.css?v=3.0">
<!-- PWA meta and icons --> <!-- PWA meta and icons -->
<link rel="manifest" href="/manifest.json"> <link rel="manifest" href="/manifest.json">
@@ -18,7 +18,7 @@
</head> </head>
<body> <body>
<!-- Login Overlay / Page --> <!-- Login Overlay / Page -->
<div id="login-overlay" class="login-overlay hidden"> <div id="login-overlay" class="login-overlay">
<div class="login-card"> <div class="login-card">
<div class="login-header"> <div class="login-header">
<div class="login-logo">📖</div> <div class="login-logo">📖</div>
@@ -928,7 +928,7 @@
<!-- Audio Element for native streaming --> <!-- Audio Element for native streaming -->
<audio id="global-audio-player" preload="none"></audio> <audio id="global-audio-player" preload="none"></audio>
<script src="/static/js/app.js?v=2.9"></script> <script src="/static/js/app.js?v=3.0"></script>
</body> </body>
</html> </html>
+21 -20
View File
@@ -1,27 +1,28 @@
// Notes Application Frontend Logic - Complete SRS, Heatmap, Quiz, and Analytics // Notes Application Frontend Logic - Complete SRS, Heatmap, Quiz, and Analytics
// Persistent session: auto-inject Authorization header if token exists in localStorage // Persistent session: auto-inject Authorization header if token exists in localStorage
const originalFetch = window.fetch; const originalFetch = window.fetch;
window.fetch = function(url, options = {}) { window.fetch = function(url, options = {}) {
const token = localStorage.getItem('notes_token'); const token = localStorage.getItem('notes_token');
if (token && typeof url === 'string' && url.startsWith('/api/')) { if (token && typeof url === 'string' && url.startsWith('/api/')) {
options.headers = options.headers || {}; options.headers = options.headers || {};
if (options.headers instanceof Headers) { if (options.headers instanceof Headers) {
if (!options.headers.has('Authorization')) { if (!options.headers.has('Authorization')) {
options.headers.set('Authorization', `Bearer ${token}`); options.headers.set('Authorization', `Bearer ${token}`);
} }
} else if (Array.isArray(options.headers)) { } else if (Array.isArray(options.headers)) {
if (!options.headers.some(([k]) => k.toLowerCase() === 'authorization')) { if (!options.headers.some(([k]) => k.toLowerCase() === 'authorization')) {
options.headers.push(['Authorization', `Bearer ${token}`]); options.headers.push(['Authorization', `Bearer ${token}`]);
} }
} else { } else {
if (!options.headers['Authorization']) { if (!options.headers['Authorization']) {
options.headers['Authorization'] = `Bearer ${token}`; options.headers['Authorization'] = `Bearer ${token}`;
}
} }
} }
return originalFetch.call(this, url, options); }
}; return originalFetch.call(this, url, options);
};
document.addEventListener('DOMContentLoaded', () => {
// Register PWA Service Worker // Register PWA Service Worker
if ('serviceWorker' in navigator) { if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/sw.js', { scope: '/' }) navigator.serviceWorker.register('/sw.js', { scope: '/' })