web: fingerprint the fonts and floor plans so they can be cached

This commit is contained in:
ponas committed 2026-10-14 02:02:45 +02:00
1 parent e3e4a613c5
commit f46a1307b5
14 files changed
+39 -25

No files matched your search

+28 -16
View File
@@ -1,24 +1,36 @@
import styles from "./neufMap.module.scss";
import etg1 from "./map/etg1.svg";
import etg2 from "./map/etg2.svg";
import etg3 from "./map/etg3.svg";
import kjeller from "./map/kjeller.svg";
type SvgFile = { src: string; width: number; height: number };
// Imported rather than served from public/, so the files get hashed names
// and can be cached for good
const FLOORS: { heading: string; alt: string; file: SvgFile }[] = [
{ heading: "Kjeller", alt: "Plantegning av kjelleren", file: kjeller },
{ heading: "1. etasje", alt: "Plantegning av 1. etasje", file: etg1 },
{ heading: "2. etasje", alt: "Plantegning av 2. etasje", file: etg2 },
{ heading: "3. etasje", alt: "Plantegning av 3. etasje", file: etg3 },
];
export const NeufMap = ({ venueSlug }: { venueSlug: string }) => {
return (
<section className={styles.neufMap}>
<div className={styles.floorItem}>
<span className={styles.floorHeading}>Kjeller</span>
<img src="/assets/graphics/map/kjeller.svg" />
</div>
<div className={styles.floorItem}>
<span className={styles.floorHeading}>1. etasje</span>
<img src="/assets/graphics/map/etg1.svg" />
</div>
<div className={styles.floorItem}>
<span className={styles.floorHeading}>2. etasje</span>
<img src="/assets/graphics/map/etg2.svg" />
</div>
<div className={styles.floorItem}>
<span className={styles.floorHeading}>3. etasje</span>
<img src="/assets/graphics/map/etg3.svg" />
</div>
{FLOORS.map(({ heading, alt, file }) => (
<div className={styles.floorItem} key={heading}>
<span className={styles.floorHeading}>{heading}</span>
{/* eslint-disable-next-line @next/next/no-img-element -- an SVG, which next/image would not optimise */}
<img
src={file.src}
alt={alt}
width={file.width}
height={file.height}
loading="lazy"
/>
</div>
))}
</section>
);
};
+11 -9
View File
@@ -1,10 +1,12 @@
// The files sit next to this stylesheet so the bundler gives them hashed
// names, which lets browsers cache them for good
@font-face {
font-family: "Avenir Next";
font-style: normal;
font-weight: 700;
font-stretch: normal;
font-display: swap;
src: url('/assets/fonts/AvenirNext/AvenirNextBold_normal_normal.woff2') format('woff2'), url('/assets/fonts/AvenirNext/AvenirNextBold_normal_normal.woff') format('woff');
src: url('./fonts/AvenirNextBold_normal_normal.woff2') format('woff2');
}
@font-face {
@@ -13,7 +15,7 @@
font-weight: 400;
font-stretch: normal;
font-display: swap;
src: url('/assets/fonts/AvenirNext/AvenirNextRegular_normal_normal.woff2') format('woff2'), url('/assets/fonts/AvenirNext/AvenirNextRegular_normal_normal.woff') format('woff');
src: url('./fonts/AvenirNextRegular_normal_normal.woff2') format('woff2');
}
@font-face {
@@ -22,7 +24,7 @@
font-weight: 500;
font-stretch: normal;
font-display: swap;
src: url('/assets/fonts/AvenirNext/AvenirNextMedium_normal_normal.woff2') format('woff2'), url('/assets/fonts/AvenirNext/AvenirNextMedium_normal_normal.woff') format('woff');
src: url('./fonts/AvenirNextMedium_normal_normal.woff2') format('woff2');
}
@font-face {
@@ -31,7 +33,7 @@
font-weight: 700;
font-stretch: normal;
font-display: swap;
src: url('/assets/fonts/AvenirNext/AvenirNextBoldItalic_italic_normal.woff2') format('woff2'), url('/assets/fonts/AvenirNext/AvenirNextBoldItalic_italic_normal.woff') format('woff');
src: url('./fonts/AvenirNextBoldItalic_italic_normal.woff2') format('woff2');
}
@font-face {
@@ -40,7 +42,7 @@
font-weight: 500;
font-stretch: normal;
font-display: swap;
src: url('/assets/fonts/AvenirNext/AvenirNextMediumItalic_italic_normal.woff2') format('woff2'), url('/assets/fonts/AvenirNext/AvenirNextMediumItalic_italic_normal.woff') format('woff');
src: url('./fonts/AvenirNextMediumItalic_italic_normal.woff2') format('woff2');
}
@font-face {
@@ -49,7 +51,7 @@
font-weight: 600;
font-stretch: normal;
font-display: swap;
src: url('/assets/fonts/AvenirNext/AvenirNextDemi_normal_normal.woff2') format('woff2'), url('/assets/fonts/AvenirNext/AvenirNextDemi_normal_normal.woff') format('woff');
src: url('./fonts/AvenirNextDemi_normal_normal.woff2') format('woff2');
}
@font-face {
@@ -58,7 +60,7 @@
font-weight: 400;
font-stretch: normal;
font-display: swap;
src: url('/assets/fonts/AvenirNext/AvenirNextItalic_italic_normal.woff2') format('woff2'), url('/assets/fonts/AvenirNext/AvenirNextItalic_italic_normal.woff') format('woff');
src: url('./fonts/AvenirNextItalic_italic_normal.woff2') format('woff2');
}
@font-face {
@@ -67,5 +69,5 @@
font-weight: 600;
font-stretch: normal;
font-display: swap;
src: url('/assets/fonts/AvenirNext/AvenirNextDemiItalic_italic_normal.woff2') format('woff2'), url('/assets/fonts/AvenirNext/AvenirNextDemiItalic_italic_normal.woff') format('woff');
}
src: url('./fonts/AvenirNextDemiItalic_italic_normal.woff2') format('woff2');
}