{{define "title"}}{{.Title}}{{end}} {{define "content"}}

{{.Data.Event.Title}}

{{.Data.Event.CalendarName}}

{{if .Data.Event.Writable}} {{/* The occurrence rides through to the form, so "edit this one" knows which one it is editing. */}} Edit {{end}}
{{if .Data.Booked}} {{/* Booked through a booking page. The sentence says how to move it, because the form will refuse to (booking spec B18, ยง10). */}} {{template "callout" dict "Tone" "info" "Title" (printf "Booked by %s" (or .Data.BookedBy "a visitor")) "Body" (printf "To move this meeting, cancel it and let %s rebook." (or .Data.BookedBy "them"))}} {{end}} {{if eq .Data.Event.Status "cancelled"}} {{template "callout" dict "Tone" "warning" "Body" "This event is cancelled. It stays on the calendar, struck through, so nobody wonders whether it was ever there."}} {{end}} {{$items := list (dict "Label" "When" "Value" .Data.When)}} {{template "detail-list" dict "Items" $items}} {{/* The authored zone is a whisper, never the headline: the time above is always the reader's own. */}} {{if .Data.Chip.AuthoredZone}}

Written as {{.Data.Chip.AuthoredTime}} in {{.Data.Chip.AuthoredZone}}.

{{end}} {{with .Data.Event.Location}}

Where: {{.}}

{{end}} {{with .Data.Event.Notes}}

{{.}}

{{end}} {{/* Attendees are RECORDED, never invited, and the heading says so rather than leaving it to a footnote. Somebody who reads "Who's coming" and assumes an invitation went out has been misled by this page, not by their own carelessness. */}} {{with .Data.Attendees}}

Who’s coming: {{range $i, $a := .}}{{if $i}}, {{end}}{{$a}}{{end}}

Nobody here was emailed. This is a note on the event; the ICS export carries it so a calendar that does send invitations can.

{{end}} {{with .Data.RuleText}}

Repeats

{{.}}

{{if $.Data.Event.RRuleForeign}} {{template "callout" dict "Tone" "info" "Body" "This rule came from another calendar and is outside the set this app can edit. It is kept exactly as it arrived, and exported unchanged."}} {{end}}
{{end}}

Your reminders

{{/* Yours only. Whether a colleague wants a warning is a fact about them, and not something this page should carry. */}} {{if .Data.Reminders}} {{range .Data.Reminders}}
{{/* class, not an attribute: rst-grow is one of the seven rastrillo utilities that keep the class spelling and have no attribute twin. Written bare it silently does nothing. */}} Email {{minutesLabel .OffsetMin}}
{{end}} {{else}}

No reminder for this one.

{{end}}
{{template "field-select" dict "ID" "offset_min" "Name" "offset_min" "Label" "Remind me" "Short" true "Options" (list (dict "Value" "0" "Label" "At the time it starts") (dict "Value" "5" "Label" "5 minutes before") (dict "Value" "10" "Label" "10 minutes before" "Selected" true) (dict "Value" "30" "Label" "30 minutes before") (dict "Value" "60" "Label" "1 hour before") (dict "Value" "1440" "Label" "1 day before"))}}
Download as .ics {{if .Data.Event.Writable}} {{/* The destructive action is a link to its own page, never a modal: it works with no script, it can be linked to, and the browser's back button is a working cancel. */}} Delete {{end}}
{{end}}