<!--
  Copyright 2020 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.
-->

{{/* . is internal/frontend.UnitPage */}}

{{define "unit_header"}}
  <header class="UnitHeader" role="complementary"
      aria-label="{{if eq .PageType "std"}}module{{else}}{{.PageType}}{{end}} {{.Title}} information">
    <div class="UnitHeader-container">
      <div class="UnitHeader-breadcrumb" data-test-id="UnitHeader-breadcrumb">
        {{with .Breadcrumb}}
          {{range .Links}}
            <span class="UnitHeader-breadcrumbItem" data-test-id="UnitHeader-breadcrumbItem">
              <a href="{{.Href}}">{{.Body}}</a>
            </span>
          {{end}}
          <span class="UnitHeader-breadcrumbItem">
            <span data-test-id="UnitHeader-breadcrumbCurrent">{{.Current}}</span>
            {{if .CopyData}}
              <button class="CopyToClipboardButton js-copyToClipboard"
                  title="Copy path to clipboard.&#10;&#10;{{.CopyData}}"
                  data-to-copy="{{.CopyData}}"
                  tabindex="-1">
                <img class="CopyToClipboardButton-image" src="/static/img/copy-click.svg" alt="">
              </button>
            {{end}}
          </span>
        {{end}}
      </div>
      <div class="UnitHeader-heading">
        <h1 class="UnitHeader-title" data-test-id="UnitHeader-title">
          {{.Title}}
        </h1>
        {{range .PageLabels}}
          <span class="UnitHeader-badge">{{.}}</span>
        {{end}}
      </div>
      {{with .RedirectedFromPath}}
        <div class="UnitHeader-redirectedFromBanner">
          <img height="19px" width="16px" class="UnitHeader-detailIcon" src="/static/img/pkg-icon-info_19x16.svg" alt="">
          <span>
          Redirected from <span>{{.}}</span>.
          </span>
        </div>
      {{end}}
      {{if .LatestMajorVersion}}
        <div class="UnitHeader-majorVersionBanner" data-test-id="UnitHeader-majorVersionBanner">
          <img height="19px" width="16px" class="UnitHeader-detailIcon" src="/static/img/pkg-icon-info_19x16.svg" alt="">
          <span>
            The highest tagged major version is <a href="/{{.LatestMajorVersionURL}}">{{.LatestMajorVersion}}</a>.
          </span>
        </div>
      {{end}}
      <div class="js-fixedHeaderSentinel"></div>
      {{if (eq .SelectedTab.Name "")}}
        <div class="UnitHeader-detail">

          <span class="UnitHeader-detailItem" data-test-id="UnitHeader-version">
            <img class="UnitHeader-detailItemLarge" height="16px" width="16px" src="/static/img/pkg-icon-arrowBranch_16x16.svg" alt="">
            <a href="?tab=versions">Version {{.DisplayVersion}}</a>
            <!-- Do not reformat the data attributes of the following div: the server uses a regexp to extract them. -->
            <div class="DetailsHeader-badge {{.LatestMinorClass}}"
                data-test-id="UnitHeader-minorVersionBanner"
                data-version="{{.LinkVersion}}"
                data-mpath="{{.Unit.ModulePath}}"
                data-ppath="{{.Unit.Path}}"
                data-pagetype="{{.PageType}}">
              <span class="DetailsHeader-span--latest">Latest</span>
              {{if (.Experiments.IsActive "not-at-latest")}}
                <span class="DetailsHeader-span--notAtLatest">
                    Latest
                    {{template "severity_toggletip" "This package is not in the latest version of its module."}}
                </span>
              {{end}}
              <a href="{{.LatestURL}}">Go to latest</a>
            </div>
          </span>

          <span class="UnitHeader-detailItem" data-test-id="UnitHeader-commitTime">
            <img height="16px" width="16px" src="/static/img/pkg-icon-circularArrows_16x16.svg" alt="">
            {{.Details.CommitTime}}
          </span>
          <span class="UnitHeader-detailItem UnitHeader-scaleIcon" data-test-id="UnitHeader-licenses">
            <img height="16px" width="16px" src="/static/img/pkg-icon-scale_16x16.svg" alt="">
            {{- if .Details.Licenses -}}
              {{- if .Unit.IsRedistributable -}}
                <a href="{{$.URLPath}}?tab=licenses" data-test-id="UnitHeader-license">
                  {{- range $i, $e := .Details.Licenses -}}
                    {{if $i}}, {{end}}{{$e.Type}}
                  {{- end -}}
                </a>
              {{else}}
                <span>
                  {{- range $i, $e := .Details.Licenses -}}
                    {{if $i}}, {{end}} {{$e.Type}}
                  {{- end -}}
                </span>
                <a href="/license-policy" class="Disclaimer-link"><em>not legal advice</em></a>
              {{end}}
            {{else}}
              <span>None detected</span>
              <a href="/license-policy" class="Disclaimer-link"><em>not legal advice</em></a>
            {{end}}
          </span>
          {{if .Unit.IsPackage}}
            <span class="UnitHeader-detailItem" data-test-id="UnitHeader-imports">
              <img height="16px" width="16px" src="/static/img/pkg-icon-boxClosed_16x16.svg" alt="">
              <a href="{{$.URLPath}}?tab=imports">
                {{.Details.NumImports}} <span>Imports</span>
              </a>
            </span>
            <span class="UnitHeader-detailItem" data-test-id="UnitHeader-importedby">
              <img height="16px" width="16px" src="/static/img/pkg-icon-boxClosed_16x16.svg" alt="">
              <a href="{{$.URLPath}}?tab=importedby">
                {{.Details.ImportedByCount}} <span>Imported by</span>
              </a>
            </span>
          {{end}}
        </div>
      {{else}}
        <div class="UnitHeader-detail">
          <span class="UnitHeader-detailItem">
          <!-- Do not reformat the data attributes of the following div: the server uses a regexp to extract them. -->
          <div style="display: none;" class="DetailsHeader-badge {{.LatestMinorClass}}"
              data-version="{{.LinkVersion}}" data-mpath="{{.Unit.ModulePath}}" data-ppath="{{.Unit.Path}}" data-pagetype="{{.PageType}}">
          </div>
          <a class="UnitHeader-backLink" href="{{.URLPath}}">
            <img height="16px" width="16px" src="/static/img/pkg-icon-arrowLeft_16x16.svg" alt=""> Go to main page
          </a>
          </span>
        </div>
      {{end}}
    </div>
  </header>
{{end}}

{{define "severity_toggletip"}}
  <span class="UnitMetaDetails-toggletip">
    <button type="button" aria-label="more info" data-toggletip-content="{{.}}">
      <img src="/static/img/severity.svg" alt="" height="14" width="15">
    </button>
    <span role="status"></span>
  </span>
{{end}}
