<!--
  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.
-->
<div class="Documentation-content js-docContent"> {{/* Documentation content container */}}
{{- if or .Doc (index .Examples.Map "") -}}
  <section class="Documentation-overview">
    <h3 tabindex="-1" id="pkg-overview" class="Documentation-overviewHeader">Overview <a href="#pkg-overview">¶</a></h3>{{"\n\n" -}}
    {{render_doc_extract_links .Doc}}{{"\n" -}}
    {{- template "example" (index .Examples.Map "") -}}
  </section>
{{- end -}}

{{- if or .Consts .Vars .Funcs .Types -}}
  <section class="Documentation-index">
    <h3 id="pkg-index" class="Documentation-indexHeader">Index <a href="#pkg-index">¶</a></h3>{{"\n\n" -}}
    <ul class="Documentation-indexList">{{"\n" -}}
      {{- if .Consts -}}<li class="Documentation-indexConstants"><a href="#pkg-constants">Constants</a></li>{{"\n"}}{{- end -}}
      {{- if .Vars -}}<li class="Documentation-indexVariables"><a href="#pkg-variables">Variables</a></li>{{"\n"}}{{- end -}}

      {{- range .Funcs -}}
      <li class="Documentation-indexFunction">
        <a href="#{{.Name}}">{{render_synopsis .Decl}}</a>
      </li>{{"\n"}}
      {{- end -}}

      {{- range .Types -}}
        {{- $tname := .Name -}}
        <li class="Documentation-indexType"><a href="#{{$tname}}">type {{$tname}}</a></li>{{"\n"}}
        {{- with .Funcs -}}
          <li><ul class="Documentation-indexTypeFunctions">{{"\n" -}}
          {{range .}}<li><a href="#{{.Name}}">{{render_synopsis .Decl}}</a></li>{{"\n"}}{{end}}
          </ul></li>{{"\n" -}}
        {{- end -}}
        {{- with .Methods -}}
          <li><ul class="Documentation-indexTypeMethods">{{"\n" -}}
          {{range .}}<li><a href="#{{$tname}}.{{.Name}}">{{render_synopsis .Decl}}</a></li>{{"\n"}}{{end}}
          </ul></li>{{"\n" -}}
        {{- end -}}
      {{- end -}}

      {{- range $marker, $item := .Notes -}}
      <li class="Documentation-indexNote"><a href="#pkg-note-{{$marker}}">{{(index $.NoteHeaders $marker).Label}}s</a></li>
      {{- end -}}
    </ul>{{"\n" -}}
  </section>

  {{- if .Examples.List -}}
  <section class="Documentation-examples">
    <h4 tabindex="-1" id="pkg-examples" class="Documentation-examplesHeader">Examples <a class="Documentation-idLink" href="#pkg-examples">¶</a></h4>{{"\n" -}}
    <ul class="Documentation-examplesList">{{"\n" -}}
      {{- range .Examples.List -}}
        <li><a href="#{{.ID}}" class="js-exampleHref">{{or .ParentID "Package"}}{{with .Suffix}} ({{.}}){{end}}</a></li>{{"\n" -}}
      {{- end -}}
    </ul>{{"\n" -}}
  </section>
  {{- end -}}

  <h3 tabindex="-1" id="pkg-constants" class="Documentation-constantsHeader">Constants <a href="#pkg-constants">¶</a></h3>{{"\n"}}
  <section class="Documentation-constants">
  {{- if .Consts -}}
    {{- range .Consts -}}
      {{- template "declaration-view-source" . -}}
    {{- end -}}
  {{- else -}}
      <div class="Documentation-empty">This section is empty.</div>
  {{- end -}}
  </section>

  <h3 tabindex="-1" id="pkg-variables" class="Documentation-variablesHeader">Variables <a href="#pkg-variables">¶</a></h3>{{"\n"}}
  <section class="Documentation-variables">
  {{- if .Vars -}}
    {{- range .Vars -}}
      {{- template "declaration-view-source" . -}}
    {{- end -}}
  {{- else -}}
    <div class="Documentation-empty">This section is empty.</div>
  {{- end -}}
  </section>

  <h3 tabindex="-1" id="pkg-functions" class="Documentation-functionsHeader">Functions <a href="#pkg-functions">¶</a></h3>{{"\n"}}
  <section class="Documentation-functions">
  {{- if .Funcs -}}
        {{- range .Funcs -}}
        <div class="Documentation-function">
            {{- $id := safe_id .Name -}}
            <h4 tabindex="-1" id="{{$id}}" data-kind="function" class="Documentation-functionHeader">
              <span>func {{source_link .Name .Decl}} <a class="Documentation-idLink" href="#{{$id}}">¶</a></span>
              {{- template "since_version" .Name -}}
            </h4>{{"\n"}}
            {{- template "declaration" . -}}
            {{- template "example" (index $.Examples.Map .Name) -}}
        </div>
        {{- end -}}
  {{- else -}}
    <div class="Documentation-empty">This section is empty.</div>
  {{- end -}}
  </section>

  <h3 tabindex="-1" id="pkg-types" class="Documentation-typesHeader">Types <a href="#pkg-types">¶</a></h3>{{"\n"}}
  <section class="Documentation-types">
  {{- if .Types -}}
    {{- range .Types -}}
    <div class="Documentation-type">
      {{- $tname := .Name -}}
      {{- $id := safe_id .Name -}}
      <h4 tabindex="-1" id="{{$id}}" data-kind="type" class="Documentation-typeHeader">
        <span>type {{source_link .Name .Decl}} <a class="Documentation-idLink" href="#{{$id}}">¶</a></span>
        {{- template "since_version" .Name -}}
      </h4>{{"\n"}}
      {{- template "declaration" . -}}
      {{- template "example" (index $.Examples.Map .Name) -}}

      {{- range .Consts -}}
      <div class="Documentation-typeConstant">
        {{- template "declaration" . -}}
      </div>
      {{- end -}}

      {{- range .Vars -}}
      <div class="Documentation-typeVariable">
        {{- template "declaration" . -}}
      </div>
      {{- end -}}

      {{- range .Funcs -}}
      <div class="Documentation-typeFunc">
        {{- $id := safe_id .Name -}}
        <h4 tabindex="-1" id="{{$id}}" data-kind="function" class="Documentation-typeFuncHeader">
          <span>func {{source_link .Name .Decl}} <a class="Documentation-idLink" href="#{{$id}}">¶</a></span>
          {{- template "since_version" .Name -}}
        </h4>{{"\n"}}
        {{- template "declaration" . -}}
        {{- template "example" (index $.Examples.Map .Name) -}}
      </div>
      {{- end -}}

      {{- range .Methods -}}
      <div class="Documentation-typeMethod">
        {{- $name := (printf "%s.%s" $tname .Name) -}}
        {{- $id := (safe_id $name) -}}
        <h4 tabindex="-1" id="{{$id}}" data-kind="method" class="Documentation-typeMethodHeader">
          <span>func ({{.Recv}}) {{source_link .Name .Decl}} <a class="Documentation-idLink" href="#{{$id}}">¶</a></span>
          {{- template "since_version" $name -}}
        </h4>{{"\n"}}
        {{- template "declaration" . -}}
        {{- template "example" (index $.Examples.Map $name) -}}
      </div>
      {{- end -}}
    </div>
    {{- end -}}
  {{- else -}}
    <div class="Documentation-empty">This section is empty.</div>
  {{- end -}}
  </section>
{{- end -}}

{{- if .Notes -}}
  <h3 tabindex="-1" id="pkg-notes" class="Documentation-notesHeader">Notes <a href="#pkg-notes">¶</a></h3>{{"\n"}}
  <section class="Documentation-notes">
    {{- range $marker, $content := .Notes -}}
    <div class="Documentation-note">
      <h3 tabindex="-1" id="{{(index $.NoteHeaders $marker).SafeIdentifier}}" class="Documentation-noteHeader">{{(index $.NoteHeaders $marker).Label}}s <a href="#pkg-note-{{$marker}}">¶</a></h3>
      <ul class="Documentation-noteList" style="padding-left: 20px; list-style: initial;">{{"\n" -}}
      {{- range $v := $content -}}
        <li style="margin: 6px 0 6px 0;">{{render_doc $v.Body}}</li>
      {{- end -}}
      </ul>{{"\n" -}}
    </div>
    {{- end -}}
  </section>
{{- end -}}
</div> {{/* End documentation content container */}}
