feat: en-tete allege, compte utilisateur en sidebar et pellicule d'images defilable (molette + fleches) #112
This commit is contained in:
+36
-4
@@ -700,8 +700,26 @@ export function renderImageViewer(area, data) {
|
||||
container.appendChild(body);
|
||||
|
||||
// ── Thumbnail filmstrip (navigation) ───────────────────────────────────
|
||||
const strip = el("div", { class: "image-nav-strip", hidden: true });
|
||||
container.appendChild(strip);
|
||||
// #112 — the film scrolls with the mouse wheel and two translucent edge
|
||||
// arrows; the scrollable strip is wrapped so the arrows stay fixed.
|
||||
const navWrap = el("div", { class: "image-nav", hidden: true });
|
||||
const strip = el("div", { class: "image-nav-strip" });
|
||||
const stripPrev = el("button", {
|
||||
class: "image-strip-arrow image-strip-arrow-prev",
|
||||
type: "button",
|
||||
title: t("viewer.image_strip_prev"),
|
||||
"aria-label": t("viewer.image_strip_prev"),
|
||||
}, [icon("chevron-left", 20)]);
|
||||
const stripNext = el("button", {
|
||||
class: "image-strip-arrow image-strip-arrow-next",
|
||||
type: "button",
|
||||
title: t("viewer.image_strip_next"),
|
||||
"aria-label": t("viewer.image_strip_next"),
|
||||
}, [icon("chevron-right", 20)]);
|
||||
navWrap.appendChild(strip);
|
||||
navWrap.appendChild(stripPrev);
|
||||
navWrap.appendChild(stripNext);
|
||||
container.appendChild(navWrap);
|
||||
|
||||
let scale = 1;
|
||||
let tx = 0;
|
||||
@@ -807,8 +825,8 @@ export function renderImageViewer(area, data) {
|
||||
};
|
||||
|
||||
const renderStrip = () => {
|
||||
if (siblings.length < 2) { strip.hidden = true; return; }
|
||||
strip.hidden = false;
|
||||
if (siblings.length < 2) { navWrap.hidden = true; return; }
|
||||
navWrap.hidden = false;
|
||||
strip.innerHTML = "";
|
||||
thumbs = siblings.map((s, i) => {
|
||||
const thumb = el("img", {
|
||||
@@ -826,6 +844,20 @@ export function renderImageViewer(area, data) {
|
||||
updateStripActive();
|
||||
};
|
||||
|
||||
// #112 — scroll the film with the wheel (vertical → horizontal) and the
|
||||
// two overlay arrows; the active image never changes, only the strip view.
|
||||
const scrollStrip = (dir) => {
|
||||
strip.scrollBy({ left: dir * Math.max(140, strip.clientWidth * 0.8), behavior: "smooth" });
|
||||
};
|
||||
stripPrev.addEventListener("click", () => scrollStrip(-1));
|
||||
stripNext.addEventListener("click", () => scrollStrip(1));
|
||||
strip.addEventListener("wheel", (e) => {
|
||||
if (strip.scrollWidth <= strip.clientWidth) return;
|
||||
const delta = Math.abs(e.deltaY) > Math.abs(e.deltaX) ? e.deltaY : e.deltaX;
|
||||
strip.scrollLeft += delta;
|
||||
e.preventDefault();
|
||||
}, { passive: false });
|
||||
|
||||
(async () => {
|
||||
try {
|
||||
const dir = currentPath.includes("/") ? currentPath.slice(0, currentPath.lastIndexOf("/")) : "";
|
||||
|
||||
Reference in New Issue
Block a user