Сайт-визитка: главная, архитектура, проекты
- Главная: фото, факты, соцсети, форма связи, анимации - Архитектура: карточки проектов и отдельные страницы (Тихий двор, павильон, «Лофт») - Проекты: Aman's World (скриншоты, описание) и хоумлаб - Меню из config.json, шаблон новых страниц, черновики training/work/fixed - Чистый HTML/CSS/JS без сборки, шрифты и картинки локально Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
// Заполняет страницу из 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);
|
||||
})();
|
||||
Reference in New Issue
Block a user