<!--
	Copyright 2018 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.
-->
<!--
	Note: Static (i.e., not template-generated) href and id
	attributes start with "pkg-" to make it impossible for
	them to conflict with generated attributes (some of which
	correspond to Go identifiers).
-->
{{with .PAst}}
	{{range $filename, $ast := .}}
		<a href="{{$filename|srcLink|html}}">{{$filename|filename|html}}</a>:<pre>{{node_html $ $ast false}}</pre>
	{{end}}
{{end}}

{{with .Dirs}}
	{{/* DirList entries are numbers and strings - no need for FSet */}}
	{{if $.PDoc}}
		<h2 id="pkg-subdirectories">Subdirectories</h2>
	{{end}}
		<div id="manual-nav">
			<img alt="" class="gopher" src="/lib/godoc/gopher/pkg.png"/>
			<dl>
				<dt><a href="#stdlib">Standard library</a></dt>
				{{if hasThirdParty .List }}
					<dt><a href="#thirdparty">Third party</a></dt>
				{{end}}
				<dt><a href="#other">Other packages</a></dt>
				<dd><a href="#subrepo">Sub-repositories</a></dd>
				<dd><a href="#community">Community</a></dd>
			</dl>
		</div>

		<div id="stdlib" class="toggleVisible">
			<div class="collapsed">
				<h2 class="toggleButton" title="Click to show Standard library section">Standard library ▹</h2>
			</div>
			<div class="expanded">
				<h2 class="toggleButton" title="Click to hide Standard library section">Standard library ▾</h2>
				<div class="pkg-dir">
					<table>
						<tr>
							<th class="pkg-name">Name</th>
							<th class="pkg-synopsis">Synopsis</th>
						</tr>

						{{range .List}}
							<tr>
							{{if eq .RootType "GOROOT"}}
							{{if $.DirFlat}}
								{{if .HasPkg}}
										<td class="pkg-name">
											<a href="{{html .Path}}/{{modeQueryString $.Mode | html}}">{{html .Path}}</a>
										</td>
								{{end}}
							{{else}}
									<td class="pkg-name" style="padding-left: {{multiply .Depth 20}}px;">
										<a href="{{html .Path}}/{{modeQueryString $.Mode | html}}">{{html .Name}}</a>
									</td>
							{{end}}
								<td class="pkg-synopsis">
									{{html .Synopsis}}
								</td>
							{{end}}
							</tr>
						{{end}}
					</table>
				</div> <!-- .pkg-dir -->
			</div> <!-- .expanded -->
		</div> <!-- #stdlib .toggleVisible -->

	{{if hasThirdParty .List }}
		<div id="thirdparty" class="toggleVisible">
			<div class="collapsed">
				<h2 class="toggleButton" title="Click to show Third party section">Third party ▹</h2>
			</div>
			<div class="expanded">
				<h2 class="toggleButton" title="Click to hide Third party section">Third party ▾</h2>
				<div class="pkg-dir">
					<table>
						<tr>
							<th class="pkg-name">Name</th>
							<th class="pkg-synopsis">Synopsis</th>
						</tr>

						{{range .List}}
							<tr>
								{{if eq .RootType "GOPATH"}}
								{{if $.DirFlat}}
									{{if .HasPkg}}
											<td class="pkg-name">
												<a href="{{html .Path}}/{{modeQueryString $.Mode | html}}">{{html .Path}}</a>
											</td>
									{{end}}
								{{else}}
										<td class="pkg-name" style="padding-left: {{multiply .Depth 20}}px;">
											<a href="{{html .Path}}/{{modeQueryString $.Mode | html}}">{{html .Name}}</a>
										</td>
								{{end}}
									<td class="pkg-synopsis">
										{{html .Synopsis}}
									</td>
								{{end}}
							</tr>
						{{end}}
					</table>
				</div> <!-- .pkg-dir -->
			</div> <!-- .expanded -->
		</div> <!-- #stdlib .toggleVisible -->
	{{end}}

	<h2 id="other">Other packages</h2>
	<h3 id="subrepo">Sub-repositories</h3>
	<p>
	These packages are part of the Go Project but outside the main Go tree.
	They are developed under looser <a href="https://golang.org/doc/go1compat">compatibility requirements</a> than the Go core.
	Install them with "<a href="/cmd/go/#hdr-Download_and_install_packages_and_dependencies">go get</a>".
	</p>
	<ul>
		<li><a href="//pkg.go.dev/golang.org/x/benchmarks">benchmarks</a> — benchmarks to measure Go as it is developed.</li>
		<li><a href="//pkg.go.dev/golang.org/x/blog">blog</a> — <a href="//blog.golang.org">blog.golang.org</a>'s implementation.</li>
		<li><a href="//pkg.go.dev/golang.org/x/build">build</a> — <a href="//build.golang.org">build.golang.org</a>'s implementation.</li>
		<li><a href="//pkg.go.dev/golang.org/x/crypto">crypto</a> — additional cryptography packages.</li>
		<li><a href="//pkg.go.dev/golang.org/x/debug">debug</a> — an experimental debugger for Go.</li>
		<li><a href="//pkg.go.dev/golang.org/x/image">image</a> — additional imaging packages.</li>
		<li><a href="//pkg.go.dev/golang.org/x/mobile">mobile</a> — experimental support for Go on mobile platforms.</li>
		<li><a href="//pkg.go.dev/golang.org/x/net">net</a> — additional networking packages.</li>
		<li><a href="//pkg.go.dev/golang.org/x/perf">perf</a> — packages and tools for performance measurement, storage, and analysis.</li>
		<li><a href="//pkg.go.dev/golang.org/x/pkgsite">pkgsite</a> — home of the pkg.go.dev website.</li>
		<li><a href="//pkg.go.dev/golang.org/x/review">review</a> — a tool for working with Gerrit code reviews.</li>
		<li><a href="//pkg.go.dev/golang.org/x/sync">sync</a> — additional concurrency primitives.</li>
		<li><a href="//pkg.go.dev/golang.org/x/sys">sys</a> — packages for making system calls.</li>
		<li><a href="//pkg.go.dev/golang.org/x/text">text</a> — packages for working with text.</li>
		<li><a href="//pkg.go.dev/golang.org/x/time">time</a> — additional time packages.</li>
		<li><a href="//pkg.go.dev/golang.org/x/tools">tools</a> — godoc, goimports, gorename, and other tools.</li>
		<li><a href="//pkg.go.dev/golang.org/x/tour">tour</a> — <a href="//tour.golang.org">tour.golang.org</a>'s implementation.</li>
		<li><a href="//pkg.go.dev/golang.org/x/exp">exp</a> — experimental and deprecated packages (handle with care; may change without warning).</li>
	</ul>

	<h3 id="community">Community</h3>
	<p>
	These services can help you find Open Source packages provided by the community.
	</p>
	<ul>
		<li><a href="//pkg.go.dev">Pkg.go.dev</a> - the Go package discovery site.</li>
		<li><a href="/wiki/Projects">Projects at the Go Wiki</a> - a curated list of Go projects.</li>
	</ul>
{{end}}
