-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathitem.html
More file actions
75 lines (69 loc) · 3.23 KB
/
Copy pathitem.html
File metadata and controls
75 lines (69 loc) · 3.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Материал — GENKAI</title>
<link rel="stylesheet" href="css/site.css">
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@400;500;600;700&display=swap" rel="stylesheet">
</head>
<body>
<header class="site-header">
<div class="container">
<a href="index.html" class="site-logo">GENKAI</a>
<nav class="site-nav">
<a href="index.html">Резюме</a>
<a href="cases/index.html">Кейсы</a>
<a href="articles/index.html">Статьи</a>
<a href="glossary/index.html">Нейрословарь</a>
<a href="admin/login.html">Админка</a>
</nav>
</div>
</header>
<main class="article-page">
<div class="container">
<a href="#" id="back-link" class="back">← Назад</a>
<div id="content">Загрузка…</div>
</div>
</main>
<footer class="site-footer">
<div class="container"><p>GENKAI — Anime AI</p></div>
</footer>
<script>
(function() {
var params = new URLSearchParams(location.search);
var type = params.get('type') || '';
var slug = params.get('slug') || '';
var files = { case: 'data/cases.json', article: 'data/articles.json', glossary: 'data/glossary.json' };
var localKeys = { case: 'genkai_cases', article: 'genkai_articles', glossary: 'genkai_glossary' };
var backUrls = { case: 'cases/index.html', article: 'articles/index.html', glossary: 'glossary/index.html' };
var backLabels = { case: 'Кейсы', article: 'Статьи', glossary: 'Нейрословарь' };
var backLink = document.getElementById('back-link');
var content = document.getElementById('content');
var file = files[type];
var localKey = localKeys[type];
if (!file || !slug) { content.innerHTML = '<p>Материал не найден.</p>'; return; }
backLink.href = backUrls[type] || 'index.html';
backLink.textContent = '← ' + (backLabels[type] || 'Назад');
function findItem(data) {
for (var i = 0; i < data.length; i++) {
if ((data[i].slug || data[i].id) == slug) return data[i];
}
return null;
}
fetch(file).then(function(r) { return r.ok ? r.json() : []; }).catch(function() { return []; })
.then(function(data) {
try { var loc = localStorage.getItem(localKey); if (loc) data = data.concat(JSON.parse(loc)); } catch (e) {}
var item = findItem(data);
if (!item) { content.innerHTML = '<p>Материал не найден.</p>'; return; }
var d = item.date ? new Date(item.date).toLocaleDateString('ru-RU') : '';
var body = (item.body || '').replace(/</g, '<').replace(/\n/g, '<br>');
content.innerHTML = '<h1>' + (item.title || '').replace(/</g, '<') + '</h1>' +
(d ? '<p class="meta">' + d + '</p>' : '') +
(item.excerpt && type !== 'glossary' ? '<p style="color:var(--text-muted); margin-bottom:1rem;">' + (item.excerpt || '').replace(/</g, '<') + '</p>' : '') +
'<div class="body">' + body + '</div>';
});
})();
</script>
</body>
</html>