- Главная: фото, факты, соцсети, форма связи, анимации - Архитектура: карточки проектов и отдельные страницы (Тихий двор, павильон, «Лофт») - Проекты: Aman's World (скриншоты, описание) и хоумлаб - Меню из config.json, шаблон новых страниц, черновики training/work/fixed - Чистый HTML/CSS/JS без сборки, шрифты и картинки локально Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
53 lines
2.6 KiB
JavaScript
53 lines
2.6 KiB
JavaScript
// Заполняет страницу из config.json
|
|
(function () {
|
|
var $ = function (id) { return document.getElementById(id); };
|
|
var make = function (tag, cls, text) { var n = document.createElement(tag); if (cls) n.className = cls; if (text) n.textContent = text; return n; };
|
|
var safe = function (u) { return /^https?:\/\//i.test(u) ? u : '#'; };
|
|
|
|
window.siteConfig.then(function (c) {
|
|
if (!c) return;
|
|
if (c.name) {
|
|
$('name').textContent = c.name;
|
|
document.title = c.name + ': давай общаться';
|
|
$('initials').textContent = c.name.split(/\s+/).map(function (w) { return w.charAt(0); }).join('').slice(0, 2).toUpperCase();
|
|
}
|
|
if (c.status) $('status').textContent = c.status;
|
|
if (c.tagline) {
|
|
// текст раскладывается на слова: каждое появляется по очереди (стили в css, .w)
|
|
var tg = $('tagline'); tg.textContent = '';
|
|
c.tagline.split(/\s+/).forEach(function (word, i, all) {
|
|
var w = make('span', 'w', word); w.style.setProperty('--i', i); tg.appendChild(w);
|
|
if (i < all.length - 1) tg.appendChild(document.createTextNode(' '));
|
|
});
|
|
}
|
|
(c.facts || []).forEach(function (f) {
|
|
var li = make('li'); li.appendChild(make('span', 'em', f.emoji || '')); li.appendChild(document.createTextNode(' ' + f.text));
|
|
$('facts').appendChild(li);
|
|
});
|
|
if (c.cta) $('cta').textContent = c.cta;
|
|
if (c.photo && /^\/[\w\-./]+$/.test(c.photo)) {
|
|
var img = document.createElement('img');
|
|
img.src = c.photo; img.alt = ''; img.width = 480; img.height = 480; img.fetchPriority = 'high';
|
|
$('avatar').textContent = ''; $('avatar').classList.add('has-photo'); $('avatar').appendChild(img);
|
|
}
|
|
(c.tags || []).forEach(function (t) {
|
|
var li = make('li');
|
|
li.appendChild(make('span', 'em', t.emoji || ''));
|
|
li.appendChild(document.createTextNode(' ' + t.text));
|
|
$('tags').appendChild(li);
|
|
});
|
|
|
|
var list = $('links'), mailLi = $('mail').parentNode;
|
|
(c.socials || []).forEach(function (s) {
|
|
var a = make('a', 'link');
|
|
a.href = safe(s.url); a.target = '_blank'; a.rel = 'me noopener';
|
|
a.appendChild(make('span', 'ic', (s.label || '?').charAt(0)));
|
|
a.appendChild(make('span', 'lk', s.label));
|
|
a.appendChild(make('span', 'lh', s.handle || ''));
|
|
var li = make('li'); li.appendChild(a);
|
|
list.insertBefore(li, mailLi);
|
|
});
|
|
if (c.email) { $('mail').href = 'mailto:' + c.email; $('mail').querySelector('.lh').textContent = c.email; }
|
|
}).then(window.siteReady);
|
|
})();
|