feat: add smart map view with location-level clustering

- /map page with Leaflet (CartoDB dark tiles)
- Photos clustered by city/country (not per-photo)
- /api/map endpoint with encrypted cover asset IDs
- Configurable via gallery.yaml (map: true/false)
- Conditional nav link in header
- CSP updated for Leaflet CDN and tile servers
- Theme-aware popups with cover thumbnails and album links
This commit is contained in:
ralksta
2026-02-15 23:07:04 +01:00
parent 424f7558c6
commit 62a7b178d6
13 changed files with 555 additions and 3 deletions

View File

@@ -123,6 +123,7 @@ interface GalleryYaml {
hero?: string | string[];
albums?: string[];
exifOnHover?: boolean;
map?: boolean;
theme?:
| string
| {
@@ -236,6 +237,8 @@ export interface AppConfig {
theme: ThemeConfig;
/** Footer social links config. */
footer: FooterConfig | null;
/** Show the /map page. Default: false. */
map: boolean;
cacheTtl: number;
rateLimitRpm: number;
}
@@ -392,6 +395,7 @@ export function getConfig(): AppConfig {
website: gallery.footer.website,
}
: null,
map: gallery.map === true,
cacheTtl: env.CACHE_TTL * 1000,
rateLimitRpm: env.RATE_LIMIT_RPM,
};