rollback slider-photo
continuous-integration/drone/push Build is passing

This commit is contained in:
2026-04-19 11:15:54 +01:00
parent 189355174c
commit f2b62f29ba
+55 -55
View File
@@ -1,63 +1,63 @@
// import fs from "fs";
// import path from "path";
import fs from "fs";
import path from "path";
// export type SliderPhoto = { src: string; alt: string };
export type SliderPhoto = { src: string; alt: string };
// function slugToAlt(filename: string): string {
// const base = filename.replace(/\.[^.]+$/, "");
// const words = base.replace(/[-_]+/g, " ").trim();
// return words || "Slide";
// }
function slugToAlt(filename: string): string {
const base = filename.replace(/\.[^.]+$/, "");
const words = base.replace(/[-_]+/g, " ").trim();
return words || "Slide";
}
// export function parseManifest(data: unknown): SliderPhoto[] {
// if (!Array.isArray(data)) return [];
// const out: SliderPhoto[] = [];
// for (const item of data) {
// if (typeof item !== "object" || item === null || !("src" in item)) continue;
// const src = (item as { src: unknown }).src;
// if (typeof src !== "string" || !src.startsWith("/")) continue;
// const altRaw = (item as { alt?: unknown }).alt;
// const alt = typeof altRaw === "string" && altRaw.trim() ? altRaw.trim() : slugToAlt(src.split("/").pop() ?? "");
// out.push({ src, alt });
// }
// return out;
// }
export function parseManifest(data: unknown): SliderPhoto[] {
if (!Array.isArray(data)) return [];
const out: SliderPhoto[] = [];
for (const item of data) {
if (typeof item !== "object" || item === null || !("src" in item)) continue;
const src = (item as { src: unknown }).src;
if (typeof src !== "string" || !src.startsWith("/")) continue;
const altRaw = (item as { alt?: unknown }).alt;
const alt = typeof altRaw === "string" && altRaw.trim() ? altRaw.trim() : slugToAlt(src.split("/").pop() ?? "");
out.push({ src, alt });
}
return out;
}
// const IMAGE_EXT = /\.(jpe?g|png|webp|gif|avif)$/i;
const IMAGE_EXT = /\.(jpe?g|png|webp|gif|avif)$/i;
// function scanSliderDirectory(dir: string): SliderPhoto[] {
// let names: string[] = [];
// try {
// names = fs.readdirSync(dir);
// } catch {
// return [];
// }
// return names
// .filter((f) => IMAGE_EXT.test(f))
// .sort((a, b) => a.localeCompare(b, undefined, { sensitivity: "base" }))
// .map((f) => ({
// src: `/slider/${f}`,
// alt: slugToAlt(f),
// }));
// }
function scanSliderDirectory(dir: string): SliderPhoto[] {
let names: string[] = [];
try {
names = fs.readdirSync(dir);
} catch {
return [];
}
return names
.filter((f) => IMAGE_EXT.test(f))
.sort((a, b) => a.localeCompare(b, undefined, { sensitivity: "base" }))
.map((f) => ({
src: `/slider/${f}`,
alt: slugToAlt(f),
}));
}
// /**
// * Reads `public/slider/manifest.json` when present (full control: order + alt).
// * Otherwise scans `public/slider` for image files (drop-in updates, no code edits).
// */
// export function readSliderPhotos(): SliderPhoto[] {
// const dir = path.join(process.cwd(), "public", "slider");
// if (!fs.existsSync(dir)) return [];
/**
* Reads `public/slider/manifest.json` when present (full control: order + alt).
* Otherwise scans `public/slider` for image files (drop-in updates, no code edits).
*/
export function readSliderPhotos(): SliderPhoto[] {
const dir = path.join(process.cwd(), "public", "slider");
if (!fs.existsSync(dir)) return [];
// const manifestPath = path.join(dir, "manifest.json");
// if (fs.existsSync(manifestPath)) {
// try {
// const raw = JSON.parse(fs.readFileSync(manifestPath, "utf8")) as unknown;
// return parseManifest(raw);
// } catch {
// return [];
// }
// }
const manifestPath = path.join(dir, "manifest.json");
if (fs.existsSync(manifestPath)) {
try {
const raw = JSON.parse(fs.readFileSync(manifestPath, "utf8")) as unknown;
return parseManifest(raw);
} catch {
return [];
}
}
// return scanSliderDirectory(dir);
// }
return scanSliderDirectory(dir);
}