From f46a1307b5cf3af3f6fa66fae7053f40b3306568 Mon Sep 17 00:00:00 2001 From: Jonas Braathen Date: Wed, 14 Oct 2026 02:02:45 +0200 Subject: [PATCH] web: fingerprint the fonts and floor plans so they can be cached --- web/src/components/venues/NeufMap.tsx | 44 +++++++++++------- .../components/venues}/map/etg1.svg | 0 .../components/venues}/map/etg2.svg | 0 .../components/venues}/map/etg3.svg | 0 .../components/venues}/map/kjeller.svg | 0 web/src/css/fonts.scss | 20 ++++---- .../AvenirNextBoldItalic_italic_normal.woff2 | Bin .../fonts}/AvenirNextBold_normal_normal.woff2 | Bin .../AvenirNextDemiItalic_italic_normal.woff2 | Bin .../fonts}/AvenirNextDemi_normal_normal.woff2 | Bin .../AvenirNextItalic_italic_normal.woff2 | Bin ...AvenirNextMediumItalic_italic_normal.woff2 | Bin .../AvenirNextMedium_normal_normal.woff2 | Bin .../AvenirNextRegular_normal_normal.woff2 | Bin 14 files changed, 39 insertions(+), 25 deletions(-) rename web/{public/assets/graphics => src/components/venues}/map/etg1.svg (100%) rename web/{public/assets/graphics => src/components/venues}/map/etg2.svg (100%) rename web/{public/assets/graphics => src/components/venues}/map/etg3.svg (100%) rename web/{public/assets/graphics => src/components/venues}/map/kjeller.svg (100%) rename web/{public/assets/fonts/AvenirNext => src/css/fonts}/AvenirNextBoldItalic_italic_normal.woff2 (100%) rename web/{public/assets/fonts/AvenirNext => src/css/fonts}/AvenirNextBold_normal_normal.woff2 (100%) rename web/{public/assets/fonts/AvenirNext => src/css/fonts}/AvenirNextDemiItalic_italic_normal.woff2 (100%) rename web/{public/assets/fonts/AvenirNext => src/css/fonts}/AvenirNextDemi_normal_normal.woff2 (100%) rename web/{public/assets/fonts/AvenirNext => src/css/fonts}/AvenirNextItalic_italic_normal.woff2 (100%) rename web/{public/assets/fonts/AvenirNext => src/css/fonts}/AvenirNextMediumItalic_italic_normal.woff2 (100%) rename web/{public/assets/fonts/AvenirNext => src/css/fonts}/AvenirNextMedium_normal_normal.woff2 (100%) rename web/{public/assets/fonts/AvenirNext => src/css/fonts}/AvenirNextRegular_normal_normal.woff2 (100%) diff --git a/web/src/components/venues/NeufMap.tsx b/web/src/components/venues/NeufMap.tsx index bfa0271..6df8263 100644 --- a/web/src/components/venues/NeufMap.tsx +++ b/web/src/components/venues/NeufMap.tsx @@ -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 (
-
- Kjeller - -
-
- 1. etasje - -
-
- 2. etasje - -
-
- 3. etasje - -
+ {FLOORS.map(({ heading, alt, file }) => ( +
+ {heading} + {/* eslint-disable-next-line @next/next/no-img-element -- an SVG, which next/image would not optimise */} + {alt} +
+ ))}
); }; diff --git a/web/public/assets/graphics/map/etg1.svg b/web/src/components/venues/map/etg1.svg similarity index 100% rename from web/public/assets/graphics/map/etg1.svg rename to web/src/components/venues/map/etg1.svg diff --git a/web/public/assets/graphics/map/etg2.svg b/web/src/components/venues/map/etg2.svg similarity index 100% rename from web/public/assets/graphics/map/etg2.svg rename to web/src/components/venues/map/etg2.svg diff --git a/web/public/assets/graphics/map/etg3.svg b/web/src/components/venues/map/etg3.svg similarity index 100% rename from web/public/assets/graphics/map/etg3.svg rename to web/src/components/venues/map/etg3.svg diff --git a/web/public/assets/graphics/map/kjeller.svg b/web/src/components/venues/map/kjeller.svg similarity index 100% rename from web/public/assets/graphics/map/kjeller.svg rename to web/src/components/venues/map/kjeller.svg diff --git a/web/src/css/fonts.scss b/web/src/css/fonts.scss index 0d796a3..eedab0e 100644 --- a/web/src/css/fonts.scss +++ b/web/src/css/fonts.scss @@ -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'); -} \ No newline at end of file + src: url('./fonts/AvenirNextDemiItalic_italic_normal.woff2') format('woff2'); +} diff --git a/web/public/assets/fonts/AvenirNext/AvenirNextBoldItalic_italic_normal.woff2 b/web/src/css/fonts/AvenirNextBoldItalic_italic_normal.woff2 similarity index 100% rename from web/public/assets/fonts/AvenirNext/AvenirNextBoldItalic_italic_normal.woff2 rename to web/src/css/fonts/AvenirNextBoldItalic_italic_normal.woff2 diff --git a/web/public/assets/fonts/AvenirNext/AvenirNextBold_normal_normal.woff2 b/web/src/css/fonts/AvenirNextBold_normal_normal.woff2 similarity index 100% rename from web/public/assets/fonts/AvenirNext/AvenirNextBold_normal_normal.woff2 rename to web/src/css/fonts/AvenirNextBold_normal_normal.woff2 diff --git a/web/public/assets/fonts/AvenirNext/AvenirNextDemiItalic_italic_normal.woff2 b/web/src/css/fonts/AvenirNextDemiItalic_italic_normal.woff2 similarity index 100% rename from web/public/assets/fonts/AvenirNext/AvenirNextDemiItalic_italic_normal.woff2 rename to web/src/css/fonts/AvenirNextDemiItalic_italic_normal.woff2 diff --git a/web/public/assets/fonts/AvenirNext/AvenirNextDemi_normal_normal.woff2 b/web/src/css/fonts/AvenirNextDemi_normal_normal.woff2 similarity index 100% rename from web/public/assets/fonts/AvenirNext/AvenirNextDemi_normal_normal.woff2 rename to web/src/css/fonts/AvenirNextDemi_normal_normal.woff2 diff --git a/web/public/assets/fonts/AvenirNext/AvenirNextItalic_italic_normal.woff2 b/web/src/css/fonts/AvenirNextItalic_italic_normal.woff2 similarity index 100% rename from web/public/assets/fonts/AvenirNext/AvenirNextItalic_italic_normal.woff2 rename to web/src/css/fonts/AvenirNextItalic_italic_normal.woff2 diff --git a/web/public/assets/fonts/AvenirNext/AvenirNextMediumItalic_italic_normal.woff2 b/web/src/css/fonts/AvenirNextMediumItalic_italic_normal.woff2 similarity index 100% rename from web/public/assets/fonts/AvenirNext/AvenirNextMediumItalic_italic_normal.woff2 rename to web/src/css/fonts/AvenirNextMediumItalic_italic_normal.woff2 diff --git a/web/public/assets/fonts/AvenirNext/AvenirNextMedium_normal_normal.woff2 b/web/src/css/fonts/AvenirNextMedium_normal_normal.woff2 similarity index 100% rename from web/public/assets/fonts/AvenirNext/AvenirNextMedium_normal_normal.woff2 rename to web/src/css/fonts/AvenirNextMedium_normal_normal.woff2 diff --git a/web/public/assets/fonts/AvenirNext/AvenirNextRegular_normal_normal.woff2 b/web/src/css/fonts/AvenirNextRegular_normal_normal.woff2 similarity index 100% rename from web/public/assets/fonts/AvenirNext/AvenirNextRegular_normal_normal.woff2 rename to web/src/css/fonts/AvenirNextRegular_normal_normal.woff2