<!--
	Copyright 2009 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).
-->
{{$pkg := .Data}}
{{with $pkg.PDoc}}
	{{if $pkg.IsMain}}
		{{/* command documentation */}}
		{{$.Comment .Doc}}
	{{else}}
		{{/* package documentation */}}
		<div id="short-nav">
			<dl>
			<dd><code>import "{{.ImportPath}}"</code></dd>
			</dl>
			<dl>
			<dd><a href="#pkg-overview" class="overviewLink">Overview</a></dd>
			<dd><a href="#pkg-index" class="indexLink">Index</a></dd>
			{{if $pkg.Examples}}
				<dd><a href="#pkg-examples" class="examplesLink">Examples</a></dd>
			{{end}}
			{{if $pkg.Dirs}}
				<dd><a href="#pkg-subdirectories">Subdirectories</a></dd>
			{{end}}
			</dl>
		</div>
		<!-- The package's Name is printed as title by the top-level template -->
		<div id="pkg-overview" class="toggleVisible">
			<div class="collapsed">
				<h2 class="toggleButton" title="Click to show Overview section">Overview ▹</h2>
			</div>
			<div class="expanded">
				<h2 class="toggleButton" title="Click to hide Overview section">Overview ▾</h2>
				{{$.Comment .Doc}}
				{{$.Example ""}}
			</div>
		</div>

		<div id="pkg-index" class="toggleVisible">
		<div class="collapsed">
			<h2 class="toggleButton" title="Click to show Index section">Index ▹</h2>
		</div>
		<div class="expanded">
			<h2 class="toggleButton" title="Click to hide Index section">Index ▾</h2>

		<!-- Table of contents for API; must be named manual-nav to turn off auto nav. -->
			<div id="manual-nav">
			<dl>
			{{if .Consts}}
				<dd><a href="#pkg-constants">Constants</a></dd>
			{{end}}
			{{if .Vars}}
				<dd><a href="#pkg-variables">Variables</a></dd>
			{{end}}
			{{range .Funcs}}
				<dd><a href="#{{.Name}}">{{$.NodeTOC .Decl}}</a></dd>
			{{end}}
			{{range .Types}}
				{{$typeName := .Name}}
				<dd><a href="#{{.Name}}">type {{.Name}}</a></dd>
				{{range .Funcs}}
					<dd>&nbsp; &nbsp; <a href="#{{.Name}}">{{$.NodeTOC .Decl}}</a></dd>
				{{end}}
				{{range .Methods}}
					<dd>&nbsp; &nbsp; <a href="#{{$typeName}}.{{.Name}}">{{$.NodeTOC .Decl}}</a></dd>
				{{end}}
			{{end}}
			{{if $pkg.Bugs}}
				<dd><a href="#pkg-note-BUG">Bugs</a></dd>
			{{end}}
			</dl>
			</div><!-- #manual-nav -->

		{{if $pkg.Examples}}
		<div id="pkg-examples">
			<h3>Examples</h3>
			<div class="js-expandAll expandAll collapsed">(Expand All)</div>
			<dl>
			{{range $pkg.Examples}}
			<dd><a class="exampleLink" href="#example_{{.Name}}">{{example_name .Name}}</a></dd>
			{{end}}
			</dl>
		</div>
		{{end}}

		{{with .Filenames}}
			<h3>Package files</h3>
			<p>
			<span style="font-size:90%">
			{{range .}}
				<a href="/{{.}}">{{basename .}}</a>
			{{end}}
			</span>
			</p>
		{{end}}
		</div><!-- .expanded -->
		</div><!-- #pkg-index -->

		{{with .Consts}}
			<h2 id="pkg-constants">Constants</h2>
			{{range .}}
				{{$.Comment .Doc}}
				<pre>{{$.Node .Decl}}</pre>
			{{end}}
		{{end}}
		{{with .Vars}}
			<h2 id="pkg-variables">Variables</h2>
			{{range .}}
				{{$.Comment .Doc}}
				<pre>{{$.Node .Decl}}</pre>
			{{end}}
		{{end}}
		{{range .Funcs}}
			{{/* Name is a string - no need for FSet */}}
			<h2 id="{{.Name}}">func <a href="{{$.SrcPosLink .Decl}}">{{.Name}}</a>
				<a class="permalink" href="#{{.Name}}">&#xb6;</a>
				{{$since := $.Since "func" "" .Name}}
				{{if $since}}<span title="Added in Go {{$since}}">{{$since}}</span>{{end}}
			</h2>
			<pre>{{$.Node .Decl}}</pre>
			{{$.Comment .Doc}}
			{{$.Example .Name}}
		{{end}}
		{{range .Types}}
			{{$typeName := .Name}}
			<h2 id="{{.Name}}">type <a href="{{$.SrcPosLink .Decl}}">{{$typeName}}</a>
				<a class="permalink" href="#{{.Name}}">&#xb6;</a>
				{{$since := $.Since "type" "" .Name}}
				{{if $since}}<span title="Added in Go {{$since}}">{{$since}}</span>{{end}}
			</h2>
			{{$.Comment .Doc}}
			<pre>{{$.Node .Decl}}</pre>

			{{range .Consts}}
				{{$.Comment .Doc}}
				<pre>{{$.Node .Decl}}</pre>
			{{end}}

			{{range .Vars}}
				{{$.Comment .Doc}}
				<pre>{{$.Node .Decl}}</pre>
			{{end}}

			{{$.Example .Name}}

			{{range .Funcs}}
				<h3 id="{{.Name}}">func <a href="{{$.SrcPosLink .Decl}}">{{.Name}}</a>
					<a class="permalink" href="#{{.Name}}">&#xb6;</a>
					{{$since := $.Since "func" "" .Name}}
					{{if $since}}<span title="Added in Go {{$since}}">{{$since}}</span>{{end}}
				</h3>
				<pre>{{$.Node .Decl}}</pre>
				{{$.Comment .Doc}}
				{{$.Example .Name}}
			{{end}}

			{{range .Methods}}
				<h3 id="{{$typeName}}.{{.Name}}">func ({{html .Recv}}) <a href="{{$.SrcPosLink .Decl}}">{{.Name}}</a>
					<a class="permalink" href="#{{$typeName}}.{{.Name}}">&#xb6;</a>
					{{$since := $.Since "method" .Recv .Name}}
					{{if $since}}<span title="Added in Go {{$since}}">{{$since}}</span>{{end}}
				</h3>
				<pre>{{$.Node .Decl}}</pre>
				{{$.Comment .Doc}}
				{{$.Example (printf "%s_%s" $typeName .Name)}}
			{{end}}
		{{end}}
	{{end}}

	{{with $pkg.Bugs}}
		<h2 id="pkg-note-BUG">Bugs</h2>
		<ul style="list-style: none; padding: 0;">
		{{range .}}
		<li><a href="{{$.SrcPosLink .}}" style="float: left;">&#x261e;</a> {{$.Comment .Body}}</li>
		{{end}}
		</ul>
	{{end}}
{{end}}

{{with $pkg.Dirs}}
	{{/* DirList entries are numbers and strings - no need for FSet */}}
	{{if $pkg.PDoc}}
		<h2 id="pkg-subdirectories">Subdirectories</h2>
	{{end}}
	<div class="pkg-dir">
		<table>
			<tr>
				<th class="pkg-name">Name</th>
				<th class="pkg-synopsis">Synopsis</th>
			</tr>

			{{if not (or (eq $pkg.Dirname "/src/cmd") $pkg.DirFlat)}}
			<tr>
				<td colspan="2"><a href="..">..</a></td>
			</tr>
			{{end}}

			{{range .List}}
				<tr>
				{{if $pkg.DirFlat}}
					{{if .HasPkg}}
						<td class="pkg-name">
							<a href="{{.Path}}/{{$.ModeQuery}}">{{.Path}}</a>
						</td>
					{{end}}
				{{else}}
					<td class="pkg-name" style="padding-left: {{multiply .Depth 20}}px;">
						<a href="{{.Path}}/{{$.ModeQuery}}">{{.Name}}</a>
					</td>
				{{end}}
					<td class="pkg-synopsis">
						{{.Synopsis}}
					</td>
				</tr>
			{{end}}
		</table>
	</div>
{{end}}
