{{/* present-controls — the command buttons, shared by the presenter view, the phone remote and the presenter's own fullscreen surface. Every button is its own
, and that is the whole point: with scripts off the remote still drives the talk (spec §8), because a form and a redirect need nothing but a browser. static/present.js posts the same fields with fetch when it is there, so the two paths send identical requests and there is no second protocol to keep in step. The capability rides as a hidden field rather than living in the form's action: an action carrying a token would put it in the address bar of every page the redirect lands on. Keys (the whole `controls` struct, presentation.go): Action string — /p/{session}/command Token string — the remote capability Buttons []{Op, Label, Slide} — one form each; Slide only for a goto, which nothing renders yet and which the handler accepts so a native remote has it. */}} {{/* data-busy="false": the busy rule is for buttons that save something. Next, Previous and Blackout save nothing — they are presenting controls, and they stay instant (Paul, 2026-09-29). */}} {{define "present-controls"}} {{- range .Buttons}} {{- if .Slide}} {{- end}}
{{- end}} {{end}}