- Главная: фото, факты, соцсети, форма связи, анимации - Архитектура: карточки проектов и отдельные страницы (Тихий двор, павильон, «Лофт») - Проекты: Aman's World (скриншоты, описание) и хоумлаб - Меню из config.json, шаблон новых страниц, черновики training/work/fixed - Чистый HTML/CSS/JS без сборки, шрифты и картинки локально Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
32 lines
1.7 KiB
JavaScript
32 lines
1.7 KiB
JavaScript
// Верхнее меню из config.json: pages. На главной показывается, только если есть страницы; на остальных всегда.
|
|
(function () {
|
|
window.siteConfig.then(function (c) {
|
|
var nav = document.getElementById('topnav');
|
|
if (nav && c) {
|
|
var pages = (c.pages || []).filter(function (p) { return !p.draft; }); // черновики в меню не попадают
|
|
var norm = function (p) { return p.replace(/\/+$/, '') + '/'; };
|
|
var here = norm(location.pathname);
|
|
var home = here === '/';
|
|
if (pages.length || !home) {
|
|
var brand = document.createElement('a');
|
|
brand.className = 'brand'; brand.href = '/';
|
|
var parts = (c.name || 'Главная').split(' ');
|
|
brand.appendChild(document.createTextNode(parts[0]));
|
|
if (parts.length > 1) { var rest = document.createElement('span'); rest.className = 'brand-rest'; rest.textContent = ' ' + parts.slice(1).join(' '); brand.appendChild(rest); }
|
|
nav.appendChild(brand);
|
|
var ul = document.createElement('ul');
|
|
pages.forEach(function (p) {
|
|
if (!/^\/[\w\-./]*$/.test(p.url)) return; // только внутренние адреса
|
|
var a = document.createElement('a');
|
|
a.className = 'pill'; a.href = p.url; a.textContent = p.label;
|
|
var u = norm(p.url);
|
|
if (u === here || (u !== '/' && here.indexOf(u) === 0)) a.setAttribute('aria-current', 'page');
|
|
var li = document.createElement('li'); li.appendChild(a); ul.appendChild(li);
|
|
});
|
|
nav.appendChild(ul);
|
|
document.body.classList.add('has-nav');
|
|
}
|
|
}
|
|
}).then(window.siteReady);
|
|
})();
|