{# 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: 'dayGridMonth', 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 = { "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-fluid 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> {% for event in events if event.as_date >= two_weeks_ago %} {% if loop.first or event.date.year != loop.previtem.date.year %} <div class="row mt-2"> <div class="col"> <h5>{{ event.date.year }}</h5> </div> </div> {% endif %} <div class="row border border-1 {% if event.name in class_map %} {{ class_map[event.name]}}{% endif %}"> <div class="col-md-3"> {{event.as_date.strftime("%a, %d, %b")}} {{event.display_time or ""}} {{event.display_timezone or ""}} </div> <div class="col-md-8 text-start"> {% 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 %} </div> <div class="col-md-1"> {{ event.delta_days(today) }} </div> </div> {% endfor %} <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>