<!--
  Copyright 2021 The Go Authors. All rights reserved.
  Use of this source code is governed by a BSD-style
  license that can be found in the LICENSE file.
-->

{{define "title"}}
  <title>{{.Query}} - Search Results · pkg.go.dev</title>
{{end}}

{{define "pre-content"}}
  <link href="/static/frontend/search/search.css?version={{.AppVersionLabel}}" rel="stylesheet">
{{end}}

{{define "main"}}
  <main class="go-Container">
    <div class="go-Content SearchResults">
      {{if eq .SearchMode .SearchModeSymbol }}
        {{template "search_identifier" .}}
      {{else}}
        {{template "search_package" .}}
      {{end}}
      {{if gt (len .Results) 0}}
        {{template "search_pagination" .}}
      {{end}}
    </div>
  </main>
{{end}}

{{define "search_identifier"}}
  <h1>Identifiers matching “{{.Query}}”</h1>
  {{if gt (len .Results) 0}}
    <div class="SearchResults-summary">
      <div>
        <div>
          Showing <strong>{{len $.Results}}</strong> matching identifiers.
          <a href="/search-help">Search help</a>
        </div>
      </div>
      {{template "search_pagination" .}}
    </div>
  {{end}}
  {{if eq (len .Results) 0}}
    {{template "gopher-airplane" "No results found."}}
    <p class="SearchResults-emptyContentMessage">
      Try searching for a package by visiting <a href="https://pkg.go.dev/search?q={{.Query}}">pkg.go.dev/search?q={{.Query}}</a>.
    </p>
  {{else}}
    {{template "search_identifier_results" .}}
  {{end}}
{{end}}

{{define "search_identifier_results"}}
  <div>
    {{$query := .Query}}
    {{range $i, $r := .Results}}
      <div class="SearchSnippet">
        <div class="SearchSnippet-headerContainer">
          <h2>
            <a href="{{.SymbolLink}}" data-gtmc="search result" data-gtmv="{{$i}}"
                data-test-id="snippet-title">
              <span class="SearchSnippet-symbolKind">{{.SymbolKind}}</span>
              {{.SymbolName}}
            </a>
            <span class="SearchSnippet-header-dash">in</span>
            <a href="/{{$r.PackagePath}}"
              class="">{{$r.PackagePath}}</a>
          </h2>
        </div>
        <div class="SearchSnippet-infoLabel go-textSubtle" data-test-id="snippet-synopsis">{{$r.Synopsis}}</div>
        <pre class="SearchSnippet-symbolCode">{{.SymbolSynopsis}}</pre>
        {{template "search_metadata" $r}}
      </div> <!-- SearchSnippet -->
    {{end}}
  </div>
{{end}}

{{define "search_package"}}
  <h1>Search results for “{{.Query}}”</h1>
  <a class="SearchResults-instead" href="{{.Pagination.URL .Pagination.Limit .SearchModeSymbol .Query}}">
    <span class="SearchResults-insteadPrefix">Search instead for </span>“{{.SearchModeSymbol}}: {{.Query}}”
  </a>
  {{if gt (len .Results) 0}}
    <div class="SearchResults-summary">
      <div>
        Showing <strong>{{len .Results}}</strong> modules with matching packages. <a href="/search-help">Search help</a>
      </div>
      {{template "search_pagination" .}}
    </div>
  {{end}}
  {{if eq (len .Results) 0}}
    {{template "gopher-airplane" "No results found."}}
    <p class="SearchResults-emptyContentMessage">
      If you think “{{.Query}}” is a valid package or module, you could try downloading
      it by visiting <a href="https://pkg.go.dev/{{.Query}}">pkg.go.dev/{{.Query}}</a>.
    </p>
  {{else}}
    {{template "search_package_results" .}}
  {{end}}
{{end}}

{{define "search_package_results"}}
  <div>
    {{$query := .Query}}
    {{range $i, $v := .Results}}
      <div class="SearchSnippet">
        <div class="SearchSnippet-headerContainer">
          <h2>
            <a href="/{{$v.PackagePath}}" data-gtmc="search result" data-gtmv="{{$i}}"
                data-test-id="snippet-title">
              <span class="SearchSnippet-header-name">{{$v.Name}}</span>
              <span class="SearchSnippet-header-dash">–</span>
              {{$v.PackagePath}}
            </a>
          </h2>
          {{with $v.ChipText}}<span class="go-Chip go-Chip--inverted">{{.}}</span>{{end}}
        </div>
        <p class="SearchSnippet-synopsis" data-test-id="snippet-synopsis">
          {{$v.Synopsis}}
        </p>
        {{template "search_metadata" $v}}
        {{with .OtherMajor}}
          <div>
            <span class="go-textSubtle">{{.Heading}}</span>
            {{range $i, $v := .Links}}
              <a href="/{{$v.Href}}" data-gtmc="search result lower major" data-gtmv="{{$i}}"><strong>{{$v.Body}}</strong></a>
            {{end}}
          </div>
        {{end}}
        {{with .SameModule}}
          {{$m := .}}
          <div class="SearchSnippet-sub go-textSubtle">
            <a href="{{$v.ModulePath}}#section-directories"><strong>{{.Heading}}</strong></a>
            {{range $i, $v := .Links}}
              {{if lt $i 5}}
                <a class="go-Chip go-Chip--subtle"
                    href="/{{$v.Href}}"
                    {{if gt $i 4 }}data-hidden="true"{{end}}
                    data-gtmc="search result same module"
                    data-gtmv="{{$i}}">
                  {{$v.Body}}
                </a>
              {{end}}
            {{end}}
            {{$more := subtract (len .Links) 5}}
            {{if gt (len .Links) 5}}
              <a href="{{$v.ModulePath}}#section-directories" class="go-Chip go-Chip--subtle"
                  data-gtmc="search result same module link">
                +{{$more}} more
              </a>
            {{end}}
          </div>
        {{end}}
      </div> <!-- SearchSnippet -->
    {{end}}
  </div>
{{end}}

{{define "search_metadata"}}
  <div class="SearchSnippet-infoLabel">
    <a href="/{{$.PackagePath}}?tab=importedby" aria-label="Go to Imported By">
       <span class="go-textSubtle">Imported by </span><strong>{{.NumImportedBy}}</strong>
    </a>
    <span class="go-textSubtle">|</span>
    <span class="go-textSubtle">
      <strong>{{.DisplayVersion}}</strong> published on <span data-test-id="snippet-published"><strong>{{.CommitTime}}</strong></span>
    </span>
    <span class="go-textSubtle">|</span>
    <span data-test-id="snippet-license">
    {{if .Licenses}}
      <a href="/{{$.PackagePath}}?tab=licenses" aria-label="Go to Licenses">
        {{commaseparate .Licenses}}
      </a>
    {{else}}
      <span class="go-textSubtle">No license</span>
    {{end}}
    </span>
  </div>
{{end}}

{{define "search_pagination"}}
  {{ $p := .Pagination }}
  <label class="go-Label go-Label--inline" data-test-id="pagination">
    Show
    <select name="limit" class="go-Select js-selectNav">
      {{range $p.Limits}}
        <option value="{{$p.URL . $.SearchMode ""}}"{{if eq . $p.Limit}} selected{{end}}>{{.}}</option>
      {{end}}
    </select>
    results
  </label>
{{end}}
