godoc: cleanup package templates

Separate the templates of package root directory and other
directories. This removes several if-else conditions and
makes the template code much cleaner.

To be merged after CL 95835.

For golang/go#3305

Change-Id: I435441dbe214e4c89271483173df7c30a42ee28f
Reviewed-on: https://go-review.googlesource.com/101295
Run-TryBot: Andrew Bonventre <andybons@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Andrew Bonventre <andybons@golang.org>
diff --git a/cmd/godoc/handlers.go b/cmd/godoc/handlers.go
index 6691ed7..137709b 100644
--- a/cmd/godoc/handlers.go
+++ b/cmd/godoc/handlers.go
@@ -120,6 +120,7 @@
 		p.ImplementsHTML = readTemplate("implements.html")
 		p.MethodSetHTML = readTemplate("methodset.html")
 		p.PackageHTML = readTemplate("package.html")
+		p.PackageRootHTML = readTemplate("packageroot.html")
 		p.SearchHTML = readTemplate("search.html")
 		p.SearchDocHTML = readTemplate("searchdoc.html")
 		p.SearchCodeHTML = readTemplate("searchcode.html")
diff --git a/godoc/pres.go b/godoc/pres.go
index b8205e2..de23c75 100644
--- a/godoc/pres.go
+++ b/godoc/pres.go
@@ -33,6 +33,7 @@
 	ImplementsHTML,
 	MethodSetHTML,
 	PackageHTML,
+	PackageRootHTML,
 	PackageText,
 	SearchHTML,
 	SearchDocHTML,
diff --git a/godoc/server.go b/godoc/server.go
index 2c56465..9240746 100644
--- a/godoc/server.go
+++ b/godoc/server.go
@@ -321,11 +321,17 @@
 	}
 
 	info.GoogleCN = googleCN(r)
+	var body []byte
+	if info.Dirname == "/src" {
+		body = applyTemplate(h.p.PackageRootHTML, "packageRootHTML", info)
+	} else {
+		body = applyTemplate(h.p.PackageHTML, "packageHTML", info)
+	}
 	h.p.ServePage(w, Page{
 		Title:    title,
 		Tabtitle: tabtitle,
 		Subtitle: subtitle,
-		Body:     applyTemplate(h.p.PackageHTML, "packageHTML", info),
+		Body:     body,
 		GoogleCN: info.GoogleCN,
 	})
 }
diff --git a/godoc/static/makestatic.go b/godoc/static/makestatic.go
index 8ee8e55..aedc81a 100644
--- a/godoc/static/makestatic.go
+++ b/godoc/static/makestatic.go
@@ -60,6 +60,7 @@
 	"methodset.html",
 	"opensearch.xml",
 	"package.html",
+	"packageroot.html",
 	"package.txt",
 	"play.js",
 	"playground.js",
diff --git a/godoc/static/package.html b/godoc/static/package.html
index c531cbd..06f533a 100644
--- a/godoc/static/package.html
+++ b/godoc/static/package.html
@@ -245,162 +245,37 @@
 	{{if $.PDoc}}
 		<h2 id="pkg-subdirectories">Subdirectories</h2>
 	{{end}}
-	{{if eq $.Dirname "/src"}}
-		<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 class="pkg-dir">
+		<table>
+			<tr>
+				<th class="pkg-name">Name</th>
+				<th class="pkg-synopsis">Synopsis</th>
+			</tr>
 
-		<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"/>
-	{{end}}
-		<div class="pkg-dir">
-			<table>
+			{{if not ((eq $.Dirname "/src/cmd") $.DirFlat)}}
+			<tr>
+				<td colspan="2"><a href="..">..</a></td>
+			</tr>
+			{{end}}
+
+			{{range .List}}
 				<tr>
-					<th class="pkg-name">Name</th>
-					<th class="pkg-synopsis">Synopsis</th>
-				</tr>
-
-				{{if not (or (eq $.Dirname "/src") (eq $.Dirname "/src/cmd") $.DirFlat)}}
-				<tr>
-					<td colspan="2"><a href="..">..</a></td>
-				</tr>
-				{{end}}
-
-				{{if eq $.Dirname "/src"}}
-					{{range .List}}
-						<tr>
-						{{if eq .FsRootType "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>
+				{{if $.DirFlat}}
+					{{if .HasPkg}}
+						<td class="pkg-name">
+							<a href="{{html .Path}}/{{modeQueryString $.Mode | html}}">{{html .Path}}</a>
+						</td>
 					{{end}}
 				{{else}}
-					{{range .List}}
-						<tr>
-						{{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>
-						</tr>
-					{{end}}
+					<td class="pkg-name" style="padding-left: {{multiply .Depth 20}}px;">
+						<a href="{{html .Path}}/{{modeQueryString $.Mode | html}}">{{html .Name}}</a>
+					</td>
 				{{end}}
-			</table>
-		</div>
-	{{if eq $.Dirname "/src"}}
-		</div>
+					<td class="pkg-synopsis">
+						{{html .Synopsis}}
+					</td>
+				</tr>
+			{{end}}
+		</table>
 	</div>
-
-	{{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 .FsRootType "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>
-		</div>
-	</div>
-	{{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}}
 {{end}}
diff --git a/godoc/static/packageroot.html b/godoc/static/packageroot.html
new file mode 100644
index 0000000..497f39a
--- /dev/null
+++ b/godoc/static/packageroot.html
@@ -0,0 +1,150 @@
+<!--
+	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 .FsRootType "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 .FsRootType "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}}
diff --git a/godoc/static/static.go b/godoc/static/static.go
index 180660d..ce43e24 100644
--- a/godoc/static/static.go
+++ b/godoc/static/static.go
@@ -1865,12 +1865,69 @@
 	{{if $.PDoc}}
 		<h2 id="pkg-subdirectories">Subdirectories</h2>
 	{{end}}
-	{{if eq $.Dirname "/src"}}
+	<div class="pkg-dir">
+		<table>
+			<tr>
+				<th class="pkg-name">Name</th>
+				<th class="pkg-synopsis">Synopsis</th>
+			</tr>
+
+			{{if not ((eq $.Dirname "/src/cmd") $.DirFlat)}}
+			<tr>
+				<td colspan="2"><a href="..">..</a></td>
+			</tr>
+			{{end}}
+
+			{{range .List}}
+				<tr>
+				{{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>
+				</tr>
+			{{end}}
+		</table>
+	</div>
+{{end}}
+`,
+
+	"packageroot.html": `<!--
+	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>
+					<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>
@@ -1879,90 +1936,22 @@
 		</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"/>
-	{{end}}
-		<div class="pkg-dir">
-			<table>
-				<tr>
-					<th class="pkg-name">Name</th>
-					<th class="pkg-synopsis">Synopsis</th>
-				</tr>
-
-				{{if not (or (eq $.Dirname "/src") (eq $.Dirname "/src/cmd") $.DirFlat)}}
-				<tr>
-					<td colspan="2"><a href="..">..</a></td>
-				</tr>
-				{{end}}
-
-				{{if eq $.Dirname "/src"}}
-					{{range .List}}
+			<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>
-						{{if eq .FsRootType "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}}
+							<th class="pkg-name">Name</th>
+							<th class="pkg-synopsis">Synopsis</th>
 						</tr>
-					{{end}}
-				{{else}}
-					{{range .List}}
-						<tr>
-						{{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>
-						</tr>
-					{{end}}
-				{{end}}
-			</table>
-		</div>
-	{{if eq $.Dirname "/src"}}
-		</div>
-	</div>
 
-	{{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 .FsRootType "GOPATH"}}
+						{{range .List}}
+							<tr>
+							{{if eq .FsRootType "GOROOT"}}
 							{{if $.DirFlat}}
 								{{if .HasPkg}}
 										<td class="pkg-name">
@@ -1978,12 +1967,51 @@
 									{{html .Synopsis}}
 								</td>
 							{{end}}
-						</tr>
-					{{end}}
-				</table>
+							</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>
-	</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 .FsRootType "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>
@@ -2022,7 +2050,6 @@
 		<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}}
 {{end}}
 `,