feat(mapa): strip persistent de fonts + línia 'Font:' al popup

Acaba d'arribar a 0 la manca de transparència que l'usuaria va
senyalar: el mapa mostra Mallorca groc i Eivissa blau sense
explicar per què, i això podia semblar una tria editorial.

1. Strip de fonts persistent sota el mapa a /mapa:
   'Per què cada illa té una capa diferent?' — targetes per a
   Mallorca/Menorca (Airbnb Inside), Eivissa (HUT Consell) i
   Formentera (IBESTAT 2019 única font pública).

2. Línia 'Font:' al popup que canvia segons el context:
   - Capa Possibles vacants / Habitatges totals → INE 59531
   - Capa Pressio turística + click M/Mn      → Inside Airbnb
   - Capa Pressio turística + click Eivissa  → HUT
   - Capa Pressio turística + click Formentera → IBESTAT 2019

Texts dins T (no pas t(): el client-side script ja té T com a
única font d'estrings del navegador).

astro-check: 0 errors.
This commit is contained in:
2026-07-16 16:14:10 +02:00
parent 80635f4714
commit 9bbcfc1e57
2 changed files with 42 additions and 2 deletions
+16 -1
View File
@@ -148,6 +148,10 @@ const popupTitleTmpl = t(lang, "map.popup_title");
legend_islands_ef: lang === "es" ? "Ibiza / Formentera (municipio)" : "Eivissa / Formentera (municipi)",
legend_islands_all_mun: lang === "es" ? "Todas (municipio)" : "Totes (municipi)",
legend_islands_tourism: lang === "es" ? "Airbnb + HUT simultáneos" : "Airbnb + HUT simultanis",
popup_source_ine: lang === "es" ? "Fuente: INE, Censo 2021, tabla 59531" : "Font: INE, Cens 2021, taula 59531",
popup_source_airbnb: lang === "es" ? "Fuente: Inside Airbnb (Mallorca y Menorca, junio 2026)" : "Font: Inside Airbnb (Mallorca i Menorca, juny 2026)",
popup_source_hut_eivissa: lang === "es" ? "Fuente: Registro HUT, Consell d'Eivissa (julio 2026)" : "Font: Registre HUT, Consell d'Eivissa (juliol 2026)",
popup_source_ibestat_formentera: lang === "es" ? "Fuente: IBESTAT 2019 (agregado isla, Formentera)" : "Font: IBESTAT 2019 (agregat illa, Formentera)",
};
const DESC: Record<string, string> = {
@@ -681,7 +685,18 @@ const popupTitleTmpl = t(lang, "map.popup_title");
lines.push(sectionTitle("Més dades HUT (juliol 2026)"));
for (const f of remaining) lines.push(row(f, Number(p[f] ?? 0)));
}
lines.push(`<div class="text-[10px] text-stone-500 mt-2 italic">${T.granularitat}: ${granLabel}</div>`);
let sourceKey = "popup_source_ine";
if (activeVariable === "pressio_turistica") {
if (kind === "airbnb") sourceKey = "popup_source_airbnb";
else if (kind === "hut") {
sourceKey = String(p.isla) === "Formentera"
? "popup_source_ibestat_formentera"
: "popup_source_hut_eivissa";
}
}
lines.push(`<div class="text-[10px] text-stone-500 mt-1.5 leading-snug">${escape(T[sourceKey] ?? "")}</div>`);
lines.push(`<div class="text-[10px] text-stone-400 italic">${T.granularitat}: ${granLabel}</div>`);
new Popup({ closeButton: true })
.setLngLat(e.lngLat)
.setHTML(lines.join(""))
+26 -1
View File
@@ -3,7 +3,7 @@ export const prerender = false;
import Base from "../layouts/Base.astro";
import Mapa from "../components/Mapa.astro";
import ConsumoDistribucion from "../components/ConsumoDistribucion.astro";
import { getLangFromAstroCookies, type Lang } from "../i18n";
import { getLangFromAstroCookies, t, type Lang } from "../i18n";
const lang: Lang = getLangFromAstroCookies(Astro.cookies);
---
@@ -11,4 +11,29 @@ const lang: Lang = getLangFromAstroCookies(Astro.cookies);
<Base lang={lang} active="map" title={undefined} description={undefined}>
<Mapa />
<ConsumoDistribucion lang={lang} />
<section class="max-w-6xl mx-auto px-4 py-8">
<div class="bg-stone-50 border border-stone-200 rounded-lg p-4 sm:p-5">
<h3 class="text-sm font-bold text-stone-900 mb-1">
{t(lang, "map.sources_strip_title")}
</h3>
<p class="text-xs text-stone-600 mb-3 leading-snug max-w-3xl">
{t(lang, "map.sources_strip_intro")}
</p>
<dl class="grid grid-cols-1 sm:grid-cols-3 gap-3 text-xs">
<div class="bg-white rounded p-2.5 border border-stone-200">
<dt class="font-semibold text-stone-900 mb-0.5">{t(lang, "map.sources_strip_pm")}</dt>
<dd class="text-stone-600 leading-snug">{t(lang, "map.sources_strip_pm_desc")}</dd>
</div>
<div class="bg-white rounded p-2.5 border border-stone-200">
<dt class="font-semibold text-stone-900 mb-0.5">{t(lang, "map.sources_strip_eivissa")}</dt>
<dd class="text-stone-600 leading-snug">{t(lang, "map.sources_strip_eivissa_desc")}</dd>
</div>
<div class="bg-white rounded p-2.5 border border-stone-200">
<dt class="font-semibold text-stone-900 mb-0.5">{t(lang, "map.sources_strip_formentera")}</dt>
<dd class="text-stone-600 leading-snug">{t(lang, "map.sources_strip_formentera_desc")}</dd>
</div>
</dl>
</div>
</section>
</Base>