SHiNE-server/shine-UI/index.html

85 lines
3.2 KiB
HTML

<!doctype html>
<html lang="ru">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
<base href="/" />
<link rel="manifest" href="./manifest.webmanifest" />
<link rel="icon" type="image/jpeg" href="./img/logo.jpg" />
<link rel="apple-touch-icon" href="./img/logo.jpg" />
<title>СИЯНИЕ</title>
<script>
window.__SHINE_BUILD_HASH__ = '20260616130000';
window.__SHINE_CLIENT_VERSION__ = '1.2.8';
</script>
<script>
(function attachStylesWithBuildHash() {
const v = encodeURIComponent(window.__SHINE_BUILD_HASH__ || 'dev');
const cssFiles = ['./styles/main.css', './styles/layout.css', './styles/components.css', './styles/network-graph.css'];
cssFiles.forEach((file) => {
const link = document.createElement('link');
link.rel = 'stylesheet';
link.href = `${file}?v=${v}`;
document.head.appendChild(link);
});
}());
</script>
</head>
<body>
<div class="app-shell">
<main id="app-screen" class="screen-content"></main>
<div id="toolbar-slot" class="toolbar-slot"></div>
</div>
<div id="modal-root"></div>
<script>
// Public VAPID key for Web Push (Base64URL)
window.__SHINE_WEBPUSH_VAPID_PUBLIC_KEY__ = 'BOdoWZndZRaNe9kyUFsJ5-xEfFABXNKennAKg15Z7ycAwUIQ7yDV_sIWWYJCwJriN4g9oU-CyJPrn1U6lfxuDbI';
</script>
<script>
(function attachBootErrorOverlay() {
const show = (title, text) => {
try {
let el = document.getElementById('boot-error-overlay');
if (!el) {
el = document.createElement('pre');
el.id = 'boot-error-overlay';
el.style.position = 'fixed';
el.style.left = '8px';
el.style.right = '8px';
el.style.bottom = '8px';
el.style.maxHeight = '40vh';
el.style.overflow = 'auto';
el.style.padding = '10px';
el.style.margin = '0';
el.style.background = 'rgba(120, 0, 0, 0.92)';
el.style.color = '#fff';
el.style.fontSize = '12px';
el.style.lineHeight = '1.4';
el.style.zIndex = '999999';
el.style.whiteSpace = 'pre-wrap';
document.body.appendChild(el);
}
el.textContent = `[BOOT ERROR] ${title}\n${String(text || '')}`;
} catch {}
};
window.addEventListener('error', (e) => {
show('window.error', `${e?.message || ''}\n${e?.filename || ''}:${e?.lineno || ''}:${e?.colno || ''}`);
});
window.addEventListener('unhandledrejection', (e) => {
const reason = e?.reason;
show('unhandledrejection', reason?.stack || reason?.message || String(reason || 'unknown'));
});
}());
</script>
<script>
(function attachAppWithBuildHash() {
const v = encodeURIComponent(window.__SHINE_BUILD_HASH__ || 'dev');
const script = document.createElement('script');
script.type = 'module';
script.src = `./js/app.js?v=${v}`;
document.body.appendChild(script);
}());
</script>
</body>
</html>