[%
USE Number.Format(DECIMAL_DIGITS=1);
cur = f.currently; today = f.daily.data.0;
today_start = f.hourly.data.0.time.clone
today_stop = f.hourly.data.0.time.clone.add('days'=>1);
hourly = f.hourly.slice('from', today_start, 'to', today_stop);
MACRO hours_length(span) BLOCK;
d=span.stop_time.subtract_datetime(span.start_time);
format_duration(
'pattern','%k',
'base',span.start_time,
'normalize',1).format_duration(d);
END;
MACRO time(d) BLOCK;
d.clone.set_time_zone('Europe/London').strftime('%H:%M');
END;
MACRO minsec_until(d) BLOCK;
dur=d.subtract_datetime(now);
format_duration(
'pattern','%M:%S',
'base',now,
'normalize',1).format_duration(dur);
END;
-%]
<html>
<head>
<title>Forecast</title>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<meta http-equiv="refresh" content="5" />
<style type="text/css">
body, table {
font-size: 30px;
}
table { border-collapse: collapse; empty-cells: show }
table td { border: dotted thin black; padding: 3px }
div.forecast dt { display: none }
div.forecast dd { display: inline; margin: 0; border: 0 }
.icon img {
width: 2em; height: 2em;
float: left; margin: 0 5px 5px 0;
}
div.currently, div.next-hour, div.next-day, div.next-week {
width: 24%;
position: absolute; top: 5px;
}
div.currently { left: 5px }
div.next-hour { left: 25% }
div.next-day { left: 50% }
div.next-week { right: 5px }
div.today {
position: absolute; top: 8em; left: 5px;
float: left; clear: none;
width: 40%;
margin-right: 5px;
}
dl.today dt.temperature, dl.today dd.temperature { display: inherit }
dl.today dt.sunrise, dl.today dt.sunset { display: inline }
div.bus {
position: absolute; left: 38%; top: 10em;
}
div.bus td.destination { width: 5em }
div.tube {
position: absolute; left: 5px; top: 20em;
width: 75%;
}
div.tube table { font-size: 75% }
div.tube td.status { width: 8em }
div.tube td.details { width: 10em }
div.timeline { position: absolute; right: 5px; bottom: 5px; }
div.timeline table { font-size: 75% }
.stripes {
text-align: center;
border: solid thin black;
}
.stripes span {
vertical-align: middle;
}
</style>
</head>
<body>
<div class="forecast">
<div class="currently">
<h2>Currently</h2>
<span class="icon"><img src="[% icon_for(cur.icon) %]" alt="[% cur.icon %]" /></span>
<dl class="currently">
<dt class="temperature">Temperature:</dt>
<dd class="temperature">[% cur.temperature|round %]°</dd>
<dt class="summary">Summary:</dt>
<dd class="summary">[% cur.summary %]</dd>
</dl>
</div>
<div class="next-hour">
<h2>Hour</h2>
<span class="icon"><img src="[% icon_for(f.minutely.icon) %]" alt="[% f.minutely.icon %]" /></span>
<dl class="next-hour">
<dt class="summary">Summary:</dt>
<dd class="summary">[% f.minutely.summary %]</dd>
</dl>
</div>
<div class="next-day">
<h2>Day</h2>
<span class="icon"><img src="[% icon_for(hourly.icon) %]" alt="[% hourly.icon %]" /></span>
<dl class="next-day">
<dt class="summary">Summary:</dt>
<dd class="summary">[% hourly.summary %]</dd>
</dl>
</div>
<div class="next-week">
<h2>Week</h2>
<span class="icon"><img src="[% icon_for(f.daily.icon) %]" alt="[% f.daily.icon %]" /></span>
<dl class="next-week">
<dt class="summary">Summary:</dt>
<dd class="summary">[% f.daily.summary %]</dd>
</dl>
</div>
<div class="today">
<h2>Today</h2>
<span class="icon"><img src="[% icon_for(today.icon) %]" alt="[% today.icon %]" /></span>
<dl class="today">
<dt class="summary">Summary:</dt>
<dd class="summary">[% today.summary %]</dd>
<dt class="temperature min">Min temperature:</dt>
<dd class="temperature min">[% today.temperatureMin|round %]° <span class="time">[% time(today.temperatureMinTime) %]</span></dd>
<dt class="temperature max">Max temperature:</dt>
<dd class="temperature max">[% today.temperatureMax|round %]° <span class="time">[% time(today.temperatureMaxTime) %]</span></dd>
<dt class="sunrise">Sunrise:</dt>
<dd class="sunrise"><span class="time">[% time(today.sunriseTime) %]</span></dd>
<dt class="sunset">Sunset:</dt>
<dd class="sunset"><span class="time">[% time(today.sunsetTime) %]</span></dd>
</dl>
</div>
</div>
<div class="bus">
<table class="prediction">
<thead>
<tr><th>Line</th><th>Destination</th><th>When</th></tr>
</thead>
<tbody>
[% FOREACH p IN b.Prediction %]
<tr>
<td class="line">[% p.LineName %]</td>
<td class="destination">[% p.DestinationText %]</td>
<td class="eta">[% minsec_until(p.EstimatedTime) %]</td>
</tr>
[% END %]
</tbody>
</table>
</div>
<div class="timeline">
<table class="timeline">
[% FOR h IN hourly.data; BREAK IF loop.last %]
<tr class="stripes">
<td class="summary"><span>[% h.summary %]</span></td>
<td class="hours"><span>[% time(h.time) %]</span></td>
<td class="temperature"><span>[% h.temperature|round %]°</span></td>
</tr>
[% END %]
</table>
</div>
<div class="tube">
<table class="status">
<thead>
<tr><th>Line</th><th>Status</th><th>Details</th></tr>
</thead>
<tbody>
[% FOREACH line IN t.lines %]
<tr>
<td class="line">[% line.name %]</td>
<td class="status">[% line.status.description %]</td>
<td class="details">[% line.status.details %]</td>
</tr>
[% END %]
</tbody>
</table>
</div>
</body>
</html>