<!--
	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">
			<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>
				<img alt="" class="gopher" src="/doc/gopher/pkg.png"/>
				<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="/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="//godoc.org/golang.org/x/benchmarks">benchmarks</a> — benchmarks to measure Go as it is developed.</li>
		<li><a href="//godoc.org/golang.org/x/blog">blog</a> — <a href="//blog.golang.org">blog.golang.org</a>'s implementation.</li>
		<li><a href="//godoc.org/golang.org/x/build">build</a> — <a href="//build.golang.org">build.golang.org</a>'s implementation.</li>
		<li><a href="//godoc.org/golang.org/x/crypto">crypto</a> — additional cryptography packages.</li>
		<li><a href="//godoc.org/golang.org/x/debug">debug</a> — an experimental debugger for Go.</li>
		<li><a href="//godoc.org/golang.org/x/image">image</a> — additional imaging packages.</li>
		<li><a href="//godoc.org/golang.org/x/mobile">mobile</a> — experimental support for Go on mobile platforms.</li>
		<li><a href="//godoc.org/golang.org/x/net">net</a> — additional networking packages.</li>
		<li><a href="//godoc.org/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="//godoc.org/golang.org/x/review">review</a> — a tool for working with Gerrit code reviews.</li>
		<li><a href="//godoc.org/golang.org/x/sync">sync</a> — additional concurrency primitives.</li>
		<li><a href="//godoc.org/golang.org/x/sys">sys</a> — packages for making system calls.</li>
		<li><a href="//godoc.org/golang.org/x/text">text</a> — packages for working with text.</li>
		<li><a href="//godoc.org/golang.org/x/time">time</a> — additional time packages.</li>
		<li><a href="//godoc.org/golang.org/x/tools">tools</a> — godoc, goimports, gorename, and other tools.</li>
		<li><a href="//godoc.org/golang.org/x/tour">tour</a> — <a href="//tour.golang.org">tour.golang.org</a>'s implementation.</li>
		<li><a href="//godoc.org/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="//godoc.org">GoDoc</a> - a package index and search engine.</li>
		<li><a href="http://go-search.org">Go Search</a> - a code search engine.</li>
		<li><a href="/wiki/Projects">Projects at the Go Wiki</a> - a curated list of Go projects.</li>
	</ul>
{{end}}
