<!--
	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="//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}}
