chance, and an hourly temperature graph - Current conditions block redone horizontally (icon left, big temp + description + an extras line on the right) instead of stacked vertically. - New extras line: "feels like" (apparent_temperature), today's high/low, and rain chance (precipitation_probability_max) -- each independently toggleable in settings, all on by default. Switched from the legacy current_weather=true param to Open-Meteo's current= param, since that's what exposes apparent_temperature; confirmed field names/formats live before wiring them in. - New hourly-today temperature graph (also toggleable): a polyline across today's 24 hourly points, min/max temps labeled at their points, a red dot marking the current hour, and hour labels along the bottom. - When both the graph and the daily forecast strip are shown, they split the remaining vertical space; either can be toggled off to give the other more room, matching how forecast_days already worked.
73 lines
3.0 KiB
HTML
73 lines
3.0 KiB
HTML
{% extends "base.html" %}
|
|
{% block content %}
|
|
<h1>Weather</h1>
|
|
|
|
{% if error %}
|
|
<div class="toast error">{{ error }}</div>
|
|
{% endif %}
|
|
|
|
<form method="post">
|
|
<div class="card">
|
|
<div class="section-label">Location</div>
|
|
<p class="hint" style="margin: -0.25rem 0 1rem;">Uses Open-Meteo — no API key needed.</p>
|
|
<div class="field">
|
|
<label for="city">City</label>
|
|
<input type="text" id="city" name="city" placeholder="e.g. Berlin">
|
|
{% if settings.city %}
|
|
<p class="hint">Currently: {{ settings.city }} ({{ settings.latitude }}, {{ settings.longitude }})</p>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
|
|
<div class="card">
|
|
<div class="section-label">Forecast</div>
|
|
<div class="field">
|
|
<label for="forecast_days">Days to show</label>
|
|
<select id="forecast_days" name="forecast_days">
|
|
<option value="3" {{ "selected" if settings.forecast_days == 3 or not settings.forecast_days }}>3 days</option>
|
|
<option value="5" {{ "selected" if settings.forecast_days == 5 }}>5 days</option>
|
|
<option value="7" {{ "selected" if settings.forecast_days == 7 }}>7 days</option>
|
|
</select>
|
|
</div>
|
|
<div class="field">
|
|
<label for="update_minutes">Update every (minutes)</label>
|
|
<input type="number" id="update_minutes" name="update_minutes" min="1" value="{{ settings.update_minutes or 30 }}">
|
|
<p class="hint">Weather itself only refreshes the panel when something actually changed, so a shorter interval here mostly just means fresher data, not more flashing.</p>
|
|
</div>
|
|
<div class="field">
|
|
<label class="checkbox">
|
|
<input type="checkbox" name="show_hourly_graph" {{ "checked" if settings.show_hourly_graph != False }}>
|
|
Hourly temperature graph
|
|
</label>
|
|
<label class="checkbox">
|
|
<input type="checkbox" name="show_feels_like" {{ "checked" if settings.show_feels_like != False }}>
|
|
"Feels like" temperature
|
|
</label>
|
|
<label class="checkbox">
|
|
<input type="checkbox" name="show_high_low" {{ "checked" if settings.show_high_low != False }}>
|
|
Today's high/low
|
|
</label>
|
|
<label class="checkbox">
|
|
<input type="checkbox" name="show_rain_chance" {{ "checked" if settings.show_rain_chance != False }}>
|
|
Rain chance
|
|
</label>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="card">
|
|
<div class="section-label">Or enter coordinates manually</div>
|
|
<p class="hint" style="margin: -0.25rem 0 1rem;">Leave the city field above empty to use these instead.</p>
|
|
<div class="field">
|
|
<label for="latitude">Latitude</label>
|
|
<input type="text" id="latitude" name="latitude" value="{{ settings.latitude if settings.latitude is not none else '' }}" placeholder="e.g. 52.52">
|
|
</div>
|
|
<div class="field">
|
|
<label for="longitude">Longitude</label>
|
|
<input type="text" id="longitude" name="longitude" value="{{ settings.longitude if settings.longitude is not none else '' }}" placeholder="e.g. 13.40">
|
|
</div>
|
|
</div>
|
|
|
|
<button type="submit">Save</button>
|
|
</form>
|
|
{% endblock %}
|