more translations
This commit is contained in:
@@ -173,15 +173,38 @@
|
||||
|
||||
// Apply ?day= once the forecast is in: the parameter is a plain calendar date,
|
||||
// which only means something against the location's own timezone.
|
||||
let appliedDayParam = false;
|
||||
// A `?day=` outside what this page can ever show (more than 3 days back, or
|
||||
// beyond the 15-day horizon) is dropped and we open on today. A day that IS
|
||||
// reachable but sits outside the default 7-day window widens the request up
|
||||
// front, so the link loads straight into the right day instead of showing
|
||||
// today and making the visitor click.
|
||||
let wantedDay: string | null = $state(null);
|
||||
onMount(() => {
|
||||
const param = get(page).url.searchParams.get('day');
|
||||
if (!param || !/^\d{4}-\d{2}-\d{2}$/.test(param)) return;
|
||||
|
||||
const target = Date.parse(`${param}T12:00:00Z`);
|
||||
if (Number.isNaN(target)) return;
|
||||
const today = new Date();
|
||||
today.setUTCHours(12, 0, 0, 0);
|
||||
const offset = Math.round((target - today.getTime()) / 86_400_000);
|
||||
|
||||
if (offset < -3 || offset > 15) return; // out of reach: stay on today
|
||||
wantedDay = param;
|
||||
if (offset < 0) pastDays = 3;
|
||||
if (offset >= 7) forecastDays = 15;
|
||||
});
|
||||
|
||||
// Select it as soon as a fetch arrives that actually covers the day.
|
||||
$effect(() => {
|
||||
const fd = fetchedDaily;
|
||||
if (appliedDayParam || !fd) return;
|
||||
appliedDayParam = true;
|
||||
const wanted = get(page).url.searchParams.get('day');
|
||||
if (!wanted) return;
|
||||
const wanted = wantedDay;
|
||||
if (!fd || !wanted) return;
|
||||
const match = fd.dailyDates.find((d) => formatZoned(d, fd.timezone, 'yyyy-MM-dd') === wanted);
|
||||
if (match) selectedDay.setTime(match.getTime());
|
||||
if (match) {
|
||||
selectedDay.setTime(match.getTime());
|
||||
wantedDay = null;
|
||||
}
|
||||
});
|
||||
|
||||
// Mirror the open day and the plotted model back into the URL.
|
||||
@@ -189,8 +212,11 @@
|
||||
const dayKey = selectedDayKey;
|
||||
const model = params.models?.[0];
|
||||
if (!mounted || !dayKey) return;
|
||||
const isToday = fetchedDaily
|
||||
? dayKey === formatZoned(new Date(), fetchedDaily.timezone, 'yyyy-MM-dd')
|
||||
: false;
|
||||
syncSearchParams($page.url, {
|
||||
day: dayKey,
|
||||
day: isToday ? null : dayKey,
|
||||
model: model && model !== 'best_match' ? model : null
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user