179 lines
5.5 KiB
HTML
179 lines
5.5 KiB
HTML
{# vim: set ft=htmljinja
|
|
#}
|
|
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>Agenda</title>
|
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous">
|
|
|
|
<script type='importmap'>
|
|
{
|
|
"imports": {
|
|
"@fullcalendar/core": "https://cdn.skypack.dev/@fullcalendar/core@6.1.9",
|
|
"@fullcalendar/daygrid": "https://cdn.skypack.dev/@fullcalendar/daygrid@6.1.9",
|
|
"@fullcalendar/timegrid": "https://cdn.skypack.dev/@fullcalendar/timegrid@6.1.9",
|
|
"@fullcalendar/list": "https://cdn.skypack.dev/@fullcalendar/list@6.1.9"
|
|
}
|
|
}
|
|
</script>
|
|
<script type='module'>
|
|
import { Calendar } from '@fullcalendar/core'
|
|
import dayGridPlugin from '@fullcalendar/daygrid'
|
|
import timeGridPlugin from '@fullcalendar/timegrid'
|
|
import listPlugin from '@fullcalendar/list'
|
|
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
const calendarEl = document.getElementById('calendar')
|
|
const calendar = new Calendar(calendarEl, {
|
|
plugins: [dayGridPlugin, timeGridPlugin, listPlugin ],
|
|
themeSystem: 'bootstrap5',
|
|
firstDay: 1,
|
|
initialView: 'timeGridWeek',
|
|
headerToolbar: {
|
|
left: 'prev,next today',
|
|
center: 'title',
|
|
right: 'dayGridMonth,timeGridWeek,timeGridDay,listWeek'
|
|
},
|
|
nowIndicator: true,
|
|
weekNumbers: true,
|
|
eventTimeFormat: {
|
|
hour: '2-digit',
|
|
minute: '2-digit',
|
|
hour12: false,
|
|
},
|
|
events: {{ fullcalendar_events | tojson(indent=2) }},
|
|
eventDidMount: function(info) {
|
|
info.el.title = info.event.title;
|
|
},
|
|
})
|
|
calendar.render()
|
|
})
|
|
</script>
|
|
|
|
</head>
|
|
|
|
{% set event_labels = {
|
|
"next_economist": "The Economist",
|
|
"mothers_day": "Mothers' day",
|
|
"fathers_day": "Fathers' day",
|
|
"uk_financial_year_end": "End of financial year",
|
|
"bank_holiday": "UK bank holiday",
|
|
"us_holiday": "US holiday",
|
|
"uk_clock_change": "UK clock change",
|
|
"us_clock_change": "US clock change",
|
|
"next_us_presidential_election": "US pres. election",
|
|
"xmas_last_second": "Christmas last posting 2nd class",
|
|
"xmas_last_first": "Christmas last posting 1st class",
|
|
"xmas_day": "Christmas day",
|
|
"next_up_series": "Next Up documentary",
|
|
"waste_schedule": "Waste schedule",
|
|
"gwr_advance_tickets": "GWR advance tickets",
|
|
"critical_mass": "Critical Mass",
|
|
}
|
|
%}
|
|
|
|
{%set class_map = {
|
|
"bank_holiday": "bg-success-subtle",
|
|
"conference": "bg-primary-subtle",
|
|
"us_holiday": "bg-secondary-subtle",
|
|
"birthday": "bg-info-subtle",
|
|
"waste_schedule": "bg-danger-subtle",
|
|
} %}
|
|
|
|
|
|
|
|
<body>
|
|
|
|
<div class="container mt-2">
|
|
<p><a href="/tools">← personal tools</a></p>
|
|
<h1>Agenda</h1>
|
|
|
|
<ul>
|
|
<li>Today is {{now.strftime("%A, %-d %b %Y")}}</li>
|
|
<li>GBPUSD: {{"{:,.3f}".format(gbpusd)}}</li>
|
|
<li>GWR advance ticket furthest date:
|
|
{% if gwr_advance_tickets %}
|
|
{{ gwr_advance_tickets.strftime("%A, %-d %b %Y") }}
|
|
{% else %}
|
|
unknown
|
|
{% endif %}
|
|
</li>
|
|
<li>Bristol Sunrise: {{ sunrise.strftime("%H:%M:%S") }} /
|
|
Sunset: {{ sunset.strftime("%H:%M:%S") }}</li>
|
|
</ul>
|
|
|
|
<h3>Stock markets</h3>
|
|
{% for market in stock_markets %}
|
|
<p>{{ market }}</p>
|
|
{% endfor %}
|
|
|
|
<div class="mb-3" id="calendar"></div>
|
|
|
|
<h3>Agenda</h3>
|
|
|
|
<table class="mt-2 table table-hover">
|
|
{% for event in events %}
|
|
<tr>
|
|
<td class="text-end">
|
|
{{event.as_date.strftime("%a, %d, %b %Y")}}
|
|
</td>
|
|
<td class="text-end">
|
|
{{event.display_time or ""}}
|
|
</td>
|
|
<td class="text-end">
|
|
{{event.display_timezone or ""}}
|
|
</td>
|
|
|
|
<td class="text-start {% if event.name in class_map %} {{ class_map[event.name]}}{% endif %}">
|
|
{% if event.url %}<a href="{{ event.url }}">{% endif %}
|
|
{{ event_labels.get(event.name) or event.name }}
|
|
{%- if event.title -%}: {{ event.title }}{% endif %}
|
|
{% if event.url %}</a>{% endif %}
|
|
</td>
|
|
<td class="text-end">
|
|
{{ event.delta_days(today) }}
|
|
</td>
|
|
{% endfor %}
|
|
</table>
|
|
|
|
<h3>Space launches</h3>
|
|
{% for launch in rockets %}
|
|
<div class="row">
|
|
<div class="col-md-1 text-nowrap text-md-end">{{ launch.t0_date }}
|
|
|
|
{% if launch.t0_time %}<br class="d-none d-md-block"/>{{ launch.t0_time }}{% endif %}</div>
|
|
<div class="col-md-1 text-md-nowrap">
|
|
<span class="d-md-none">launch status:</span>
|
|
<abbr title="{{ launch.status.name }}">{{ launch.status.abbrev }}</abbr>
|
|
</div>
|
|
<div class="col">{{ launch.rocket }}
|
|
–
|
|
<strong>{{launch.mission.name }}</strong>
|
|
–
|
|
|
|
{% if launch.launch_provider_abbrev %}
|
|
<abbr title="{{ launch.launch_provider }}">{{ launch.launch_provider_abbrev }}</abbr>
|
|
{% else %}
|
|
{{ launch.launch_provider }}
|
|
{% endif %}
|
|
({{ launch.launch_provider_type }})
|
|
—
|
|
{{ launch.orbit.name }} ({{ launch.orbit.abbrev }})
|
|
<br/>
|
|
<a href="{{ launch.pad_wikipedia_url }}">{{ launch.pad_name }}</a>
|
|
— {{ launch.location }}<br/>
|
|
|
|
{% for line in launch.mission.description.splitlines() %}
|
|
<p>{{ line }}</p>
|
|
{% endfor %}
|
|
|
|
</div>
|
|
</div>
|
|
{% endfor %}
|
|
</div>
|
|
|
|
</body>
|
|
</html>
|