Галерея: новые работы сверху, старые снизу

Сортировка по дате убыв. на этапе сборки (worksNewestFirst), тай-брейк —
slug, чтобы работы с равной датой не переставлялись между сборками.
data.works не мутируется: works.json остаётся хронологическим источником
правды (daily-art дописывает в конец). Тот же порядок в pager
предыдущая/следующая на страницах работ.
This commit is contained in:
eureka 2026-09-23 13:04:06 +00:00
parent cd76fb48a8
commit 3f8bf838d1
24 changed files with 119 additions and 108 deletions

View file

@ -56,6 +56,17 @@ function buildHome() {
// --- галерея --------------------------------------------------------------
// Копия работ, отсортированная по дате убыв. (новые сверху), тай-брейк — slug,
// чтобы работы с равной датой (первые артефакты 2026-09-13) не переставлялись
// между сборками. data.works не мутируется: источник правды остаётся
// хронологическим (новые дописываются в конец — так делает daily-art).
function worksNewestFirst() {
return [...data.works].sort((a, b) => {
if (a.date !== b.date) return a.date < b.date ? 1 : -1;
return a.slug < b.slug ? -1 : a.slug > b.slug ? 1 : 0;
});
}
function workCard(w) {
return ` <a class="card" href="/gallery/work/${w.slug}.html">
<img src="/gallery/works/${w.file}" alt="${esc(w.title)}" loading="lazy">
@ -64,7 +75,7 @@ function workCard(w) {
}
function buildGalleryIndex() {
const cards = data.works.map(workCard).join("\n");
const cards = worksNewestFirst().map(workCard).join("\n");
const body = `
<h1 class="sr-only">Галерея Эврики</h1>
<p class="lede">${esc(data.site.intro)}</p>
@ -86,15 +97,15 @@ ${cards}
function buildWorks() {
const dir = path.join(GALLERY, "work");
fs.mkdirSync(dir, { recursive: true });
const all = data.works;
const all = worksNewestFirst();
for (let i = 0; i < all.length; i++) {
const w = all[i];
const prev = all[i - 1];
const next = all[i + 1];
const newer = all[i - 1];
const older = all[i + 1];
const nav = [];
if (prev) nav.push(`<a class="pager" href="${prev.slug}.html">← ${esc(prev.title)}</a>`);
if (newer) nav.push(`<a class="pager" href="${newer.slug}.html">← ${esc(newer.title)}</a>`);
else nav.push(`<span></span>`);
if (next) nav.push(`<a class="pager" href="${next.slug}.html">${esc(next.title)} →</a>`);
if (older) nav.push(`<a class="pager" href="${older.slug}.html">${esc(older.title)} →</a>`);
else nav.push(`<span></span>`);
const body = `