{{/* The results region, rendered two ways from one definition. index.html includes it, so a scriptless form submit gets it inside the page; GET /search executes it alone, so search.js can swap it in on every keystroke. One definition because the two must agree about which result is primed — if they disagreed, where Enter goes would depend on whether the script had loaded yet. */}} {{/* One sentence, two places that must not disagree: the callout the server renders when store.Search fails, and the attribute search.js reads when its own fetch fails. Both mean "the search did not run", and a page with two wordings for that would be two pages. */}} {{define "searchFailed"}}The search did not run. Nothing was found because nothing was searched.{{end}} {{define "results"}} {{if .SearchFailed}}
{{template "searchFailed"}}
{{.}}
{{end}}{{.Label}} {{.Span}} {{if .Model}}🤖 {{.Provider}} · {{.Model}}{{end}} {{.Title}}{{if .Trail}} › {{.Trail}}{{end}}
{{/* §8.8's narrowing line, under the row it describes: the box chose this row on the reader's own words, and how many it left out. It keeps the others visible, which is the one thing standing between a planted label and a single confident answer. */}} {{with .Note}}{{.Text}}
{{end}} {{end}}{{if .Notices}} Nothing that could be shown matched “{{.Query}}”. Some passages were withheld (see above), so there may be more than this. {{else if lt .Chunks 0}} No matches for “{{.Query}}” — but the passage count could not be read, so the index may be empty. {{else}} No matches for “{{.Query}}”. {{end}}
{{end}}{{$r.Snippet | safeSnippet}}
{{$r.Source}} · passage {{$r.Ordinal}}