fix(frontend): restore DOMContentLoaded wrapper in app.js and render login overlay by default
This commit is contained in:
1 parent
99741c386e
commit
d5071c8ac9
2 files changed
+24
-23
No files matched your search
@@ -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
@@ -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: '/' })
|
||||||
|
|||||||
Reference in new issue
Block a user