[x/go.dev] all: remove use of partial function

Templates already provide a way to call other templates.
Delete partial, which is just a second way that is not as
well integrated into HTML sanitizing.

Change-Id: I34a258ff133439966a4b5119df3b92a00660a1cd
X-GoDev-Commit: 0e5902a60b5b5808fc1e94e7a004021547defe23
diff --git a/go.dev/cmd/internal/site/tmpl.go b/go.dev/cmd/internal/site/tmpl.go
index 1aab413..b89c4e1 100644
--- a/go.dev/cmd/internal/site/tmpl.go
+++ b/go.dev/cmd/internal/site/tmpl.go
@@ -5,12 +5,10 @@
 package site
 
 import (
-	"bytes"
 	"crypto/sha256"
 	"encoding/base64"
 	"encoding/hex"
 	"fmt"
-	"io/ioutil"
 	"os"
 	"path"
 	"path/filepath"
@@ -34,7 +32,6 @@
 		"isset":       isset,
 		"list":        list,
 		"markdownify": markdownify,
-		"partial":     site.partial,
 		"path":        pathFn,
 		"replace":     replace,
 		"replaceRE":   replaceRE,
@@ -60,22 +57,6 @@
 	return t
 }
 
-func (site *Site) runTemplate(name string, arg interface{}) (template.HTML, error) {
-	data, err := ioutil.ReadFile(site.file(name))
-	if err != nil {
-		return "", err
-	}
-	t := site.clone().New(name)
-	if err := tmplfunc.Parse(t, string(data)); err != nil {
-		return "", err
-	}
-	var buf bytes.Buffer
-	if err := t.Execute(&buf, arg); err != nil {
-		return "", err
-	}
-	return template.HTML(buf.String()), nil
-}
-
 func toString(x interface{}) string {
 	switch x := x.(type) {
 	case string:
@@ -161,10 +142,6 @@
 	return h
 }
 
-func (site *Site) partial(name string, data interface{}) (template.HTML, error) {
-	return site.runTemplate("layouts/partials/"+name, data)
-}
-
 func pathFn() pathPkg { return pathPkg{} }
 
 type pathPkg struct{}
diff --git a/go.dev/layouts/_default/baseof.html b/go.dev/layouts/_default/baseof.html
index c4acef8..a2ff3a5 100644
--- a/go.dev/layouts/_default/baseof.html
+++ b/go.dev/layouts/_default/baseof.html
@@ -60,7 +60,7 @@
           alt="Go">
       </a>
       <div class="Header-rightContent">
-        {{ partial "searchForm.html" . }}
+        {{template "search-form" .}}
         <ul class="Header-menu">
           {{- $currentPage := .}}
           {{- range .Site.Menus.main}}
@@ -129,9 +129,9 @@
       <div class="Footer-links">
         {{- range .Site.Menus.footer}}
           <div class="Footer-linkColumn">
-            {{partial "footer/link.html" (dict "menuItem" . "Site" $currentPage.Site)}}
+            {{template "footer-link" (dict "menuItem" . "Site" $currentPage.Site)}}
             {{- range .Children}}
-              {{partial "footer/link.html" (dict "menuItem" . "Site" $currentPage.Site)}}
+              {{template "footer-link" (dict "menuItem" . "Site" $currentPage.Site)}}
             {{end}}
           </div>
         {{- end}}
@@ -186,4 +186,34 @@
   <script src="/js/hats.js"></script>
 </footer>
 </body>
-</html>
\ No newline at end of file
+</html>
+
+{{define "search-form"}}
+<form
+  class="js-searchForm SearchForm" action="https://pkg.go.dev/search" role="search">
+  <button
+    class="js-searchFormSubmit SearchForm-submit"
+    aria-label="Search for a package">
+    <svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
+      <path fill-rule="evenodd" clip-rule="evenodd" d="M11.76 10.27L17.49 16L16 17.49L10.27 11.76C9.2 12.53 7.91 13 6.5 13C2.91 13 0 10.09 0 6.5C0 2.91 2.91 0 6.5 0C10.09 0 13 2.91 13 6.5C13 7.91 12.53 9.2 11.76 10.27ZM6.5 2C4.01 2 2 4.01 2 6.5C2 8.99 4.01 11 6.5 11C8.99 11 11 8.99 11 6.5C11 4.01 8.99 2 6.5 2Z">
+      </svg>
+  </button>
+  <input class="SearchForm-input" aria-label="Search for a package" type="text" name="q" size="1"
+         placeholder="Search for a package" autocapitalize="off" autocomplete="off" autocorrect="off"
+         spellcheck="false" title="Search for a package">
+        </input>
+</form>
+{{end}}
+
+{{define "footer-link"}}
+{{- $url := .menuItem.URL}}
+{{- if and (not .Site.IsServer) (eq .Identifier "learn")}}
+  {{- $url = "https://learn.go.dev"}}
+{{- end}}
+{{- if not .Site.IsServer}}
+  {{- $url = $url | absURL}}
+{{- end}}
+<a href="{{$url}}" class="Footer-link{{if not .menuItem.Parent}} Footer-link--primary{{end}}" title="{{.menuItem.Title}}" data-identifier="{{ .menuItem.Identifier }}">
+  {{.menuItem.Name}}
+</a>
+{{end}}
diff --git a/go.dev/layouts/learn/section.html b/go.dev/layouts/learn/section.html
index aaad0c6..485c4ca 100644
--- a/go.dev/layouts/learn/section.html
+++ b/go.dev/layouts/learn/section.html
@@ -3,7 +3,7 @@
   <div class="Container">
     <div class="Learn-heroInner">
       <div class="Learn-heroContent">
-        {{ partial "breadcrumbs.html" . }}
+        {{breadcrumbs .}}
         <h1>Install the latest version of Go</h1>
         <p>
           Install the latest version of Go. For instructions to download and install
@@ -29,7 +29,7 @@
           </div>
         </div>
         <p>
-          Download packages for 
+          Download packages for
           <a class="js-downloadWin">Windows 64-bit</a>,
           <a class="js-downloadMac">macOS</a>,
           <a class="js-downloadLinux">Linux</a>, and
@@ -44,7 +44,7 @@
       <ul class="Learn-quickstarts Learn-cardList">
         {{ range first 3 $.Site.Data.learn.quickstart.links }}
           <li class="Learn-quickstart Learn-card">
-            {{ partial "learn/card.html" . }}
+            {{template "learn-card" .}}
           </li>
         {{end}}
       </ul>
@@ -65,7 +65,7 @@
       <ul class="Learn-cardList">
         {{ range first 4 $.Site.Data.learn.guidedLearning.links }}
           <li class="Learn-card">
-            {{ partial "learn/card.html" . }}
+            {{template "learn-card" .}}
           </li>
         {{ end }}
       </ul>
@@ -82,7 +82,7 @@
       <ul class="Learn-cardList">
         {{ range first 4 $.Site.Data.learn.courses.links }}
           <li class="Learn-card">
-            {{ partial "learn/card.html" . }}
+            {{template "learn-card" .}}
           </li>
         {{ end }}
       </ul>
@@ -99,7 +99,7 @@
       <ul class="Learn-cardList">
         {{ range first 4 $.Site.Data.learn.cloud.links }}
           <li class="Learn-card">
-            {{ partial "learn/selfPacedCard.html" . }}
+            {{template "learn-self-paced-card" .}}
           </li>
           </li>
         {{ end }}
@@ -117,7 +117,7 @@
       <ul class="Learn-cardList Learn-bookList">
         {{ range first 5 $.Site.Data.learn.books.links }}
           <li class="Learn-card Learn-book">
-            {{ partial "learn/book.html" . }}
+            {{template "learn-book" .}}
           </li>
         {{ end }}
       </ul>
@@ -191,3 +191,101 @@
   </div>
 </section>
 {{end}}
+
+{{define "learn-card"}}
+<div class="Card">
+  <div class="Card-inner">
+    {{if .thumbnail}}
+    <div
+      class="Card-thumbnail"
+      style="background-image: url('{{.thumbnail}}')"
+    ></div>
+    {{end}}
+    <div class="Card-content">
+      <div class="Card-contentTitle">{{.title}}</div>
+      <p class="Card-contentBody">{{.content | safeHTML}}</p>
+      <div class="Card-contentCta">
+        <a href="{{.url}}" target="_blank">
+          <span>{{.cta}}</span>
+          <svg
+            xmlns="http://www.w3.org/2000/svg"
+            width="16"
+            height="16"
+            fill="none"
+            viewBox="0 0 24 24"
+          >
+            <path
+              fill="#007D9C"
+              fill-rule="evenodd"
+              d="M5 5v14h14v-7h2v7a2 2 0 01-2 2H5a2 2 0 01-2-2V5c0-1.1.9-2 2-2h7v2H5zm9 0V3h7v7h-2V6.4l-9.8 9.8-1.4-1.4L17.6 5H14z"
+              clip-rule="evenodd"
+            />
+          </svg>
+        </a>
+      </div>
+    </div>
+  </div>
+</div>
+{{end}}
+
+{{define "learn-self-paced-card"}}
+<div class="Card">
+  <a href="{{.url}}" target="_blank" rel="noopener">
+    <div class="Card-inner">
+      {{if .thumbnail}}
+      <div
+        class="Card-thumbnail"
+        style="background-image: url('{{.thumbnail}}')"
+      ></div>
+      {{end}}
+      <div class="Card-content">
+        <div class="Card-contentTitle">{{.title}}</div>
+        <div class="Card-selfPacedFooter">
+          <div class="Card-selfPacedCredits">
+            <span>{{ .length }}</span> •
+            <span>{{.credits}} Credits</span>
+          </div>
+          <div class="Card-selfPacedRating">
+            <div class="Card-starRating" style="width: {{ .rating }}rem"></div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </a>
+</div>
+{{end}}
+
+{{define "learn-book"}}
+<div class="Book">
+  <a href="{{.url}}" target="_blank" rel="noopener">
+    <div class="Book-inner">
+      {{if .thumbnail}}
+      <div class="Book-thumbnail">
+        <img alt="{{.title}} thumbnail." src="{{.thumbnail}}" />
+      </div>
+      {{end}}
+      <div class="Book-content">
+        <p class="Book-title">{{.title}}</p>
+        <p class="Book-description">{{.description}}</p>
+        <div class="Book-cta">
+          <span>{{.cta}}</span>
+          <svg
+            xmlns="http://www.w3.org/2000/svg"
+            width="16"
+            height="16"
+            fill="none"
+            viewBox="0 0 24 24"
+          >
+            <path
+              fill="#007D9C"
+              fill-rule="evenodd"
+              d="M5 5v14h14v-7h2v7a2 2 0 01-2 2H5a2 2 0 01-2-2V5c0-1.1.9-2 2-2h7v2H5zm9 0V3h7v7h-2V6.4l-9.8 9.8-1.4-1.4L17.6 5H14z"
+              clip-rule="evenodd"
+            />
+          </svg>
+        </div>
+      </div>
+    </div>
+  </a>
+</div>
+{{end}}
diff --git a/go.dev/layouts/partials/breadcrumbs.html b/go.dev/layouts/partials/breadcrumbs.html
deleted file mode 100644
index e7dfadf..0000000
--- a/go.dev/layouts/partials/breadcrumbs.html
+++ /dev/null
@@ -1,25 +0,0 @@
-
-  <div class="BreadcrumbNav">
-    <ol class="BreadcrumbNav-inner">
-      {{ template "breadcrumbnav" (dict "p1" . "p2" .) }}
-    </ol>
-    {{ define "breadcrumbnav" }}
-    {{ if .p1.Parent }}
-    {{ template "breadcrumbnav" (dict "p1" .p1.Parent "p2" .p2 ) }}
-    {{ else if not .p1.IsHome }}
-    {{ template "breadcrumbnav" (dict "p1" .p1.Site.Home "p2" .p2 ) }}
-    {{ end }}
-
-    {{ if not (eq .p1.Title "go.dev") }}
-      <li class="BreadcrumbNav-li {{ if eq .p1 .p2 }}active{{ end }}">
-        <a class="BreadcrumbNav-link" href="{{ .p1.Permalink }}">
-          {{ if isset .p1.Params "company" }}
-            {{ .p1.Params.company }}
-          {{ else }}
-            {{ .p1.Title }}
-          {{ end }}
-        </a>
-      </li>
-    {{end}}
-    {{ end }}
-  </div>
\ No newline at end of file
diff --git a/go.dev/layouts/partials/footer/link.html b/go.dev/layouts/partials/footer/link.html
deleted file mode 100644
index ea23e6e..0000000
--- a/go.dev/layouts/partials/footer/link.html
+++ /dev/null
@@ -1,10 +0,0 @@
-{{- $url := .menuItem.URL}}
-{{- if and (not .Site.IsServer) (eq .Identifier "learn")}}
-  {{- $url = "https://learn.go.dev"}}
-{{- end}}
-{{- if not .Site.IsServer}}
-  {{- $url = $url | absURL}}
-{{- end}}
-<a href="{{$url}}" class="Footer-link{{if not .menuItem.Parent}} Footer-link--primary{{end}}" title="{{.menuItem.Title}}" data-identifier="{{ .menuItem.Identifier }}">
-  {{.menuItem.Name}}
-</a>
diff --git a/go.dev/layouts/partials/learn/book.html b/go.dev/layouts/partials/learn/book.html
deleted file mode 100644
index d1ccd78..0000000
--- a/go.dev/layouts/partials/learn/book.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<div class="Book">
-  <a href="{{.url}}" target="_blank" rel="noopener">
-    <div class="Book-inner">
-      {{if .thumbnail}}
-      <div class="Book-thumbnail">
-        <img alt="{{.title}} thumbnail." src="{{.thumbnail}}" />
-      </div>
-      {{end}}
-      <div class="Book-content">
-        <p class="Book-title">{{.title}}</p>
-        <p class="Book-description">{{.description}}</p>
-        <div class="Book-cta">
-          <span>{{.cta}}</span>
-          <svg
-            xmlns="http://www.w3.org/2000/svg"
-            width="16"
-            height="16"
-            fill="none"
-            viewBox="0 0 24 24"
-          >
-            <path
-              fill="#007D9C"
-              fill-rule="evenodd"
-              d="M5 5v14h14v-7h2v7a2 2 0 01-2 2H5a2 2 0 01-2-2V5c0-1.1.9-2 2-2h7v2H5zm9 0V3h7v7h-2V6.4l-9.8 9.8-1.4-1.4L17.6 5H14z"
-              clip-rule="evenodd"
-            />
-          </svg>
-        </div>
-      </div>
-    </div>
-  </a>
-</div>
diff --git a/go.dev/layouts/partials/learn/card.html b/go.dev/layouts/partials/learn/card.html
deleted file mode 100644
index a53dedc..0000000
--- a/go.dev/layouts/partials/learn/card.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<div class="Card">
-  <div class="Card-inner">
-    {{if .thumbnail}}
-    <div
-      class="Card-thumbnail"
-      style="background-image: url('{{.thumbnail}}')"
-    ></div>
-    {{end}}
-    <div class="Card-content">
-      <div class="Card-contentTitle">{{.title}}</div>
-      <p class="Card-contentBody">{{.content | safeHTML}}</p>
-      <div class="Card-contentCta">
-        <a href="{{.url}}" target="_blank">
-          <span>{{.cta}}</span>
-          <svg
-            xmlns="http://www.w3.org/2000/svg"
-            width="16"
-            height="16"
-            fill="none"
-            viewBox="0 0 24 24"
-          >
-            <path
-              fill="#007D9C"
-              fill-rule="evenodd"
-              d="M5 5v14h14v-7h2v7a2 2 0 01-2 2H5a2 2 0 01-2-2V5c0-1.1.9-2 2-2h7v2H5zm9 0V3h7v7h-2V6.4l-9.8 9.8-1.4-1.4L17.6 5H14z"
-              clip-rule="evenodd"
-            />
-          </svg>
-        </a>
-      </div>
-    </div>
-  </div>
-</div>
diff --git a/go.dev/layouts/partials/learn/selfPacedCard.html b/go.dev/layouts/partials/learn/selfPacedCard.html
deleted file mode 100644
index 520dc85..0000000
--- a/go.dev/layouts/partials/learn/selfPacedCard.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<div class="Card">
-  <a href="{{.url}}" target="_blank" rel="noopener">
-    <div class="Card-inner">
-      {{if .thumbnail}}
-      <div
-        class="Card-thumbnail"
-        style="background-image: url('{{.thumbnail}}')"
-      ></div>
-      {{end}}
-      <div class="Card-content">
-        <div class="Card-contentTitle">{{.title}}</div>
-        <div class="Card-selfPacedFooter">
-          <div class="Card-selfPacedCredits">
-            <span>{{ .length }}</span> •
-            <span>{{.credits}} Credits</span>
-          </div>
-          <div class="Card-selfPacedRating">
-            <div class="Card-starRating" style="width: {{ .rating }}rem"></div>
-          </div>
-        </div>
-      </div>
-    </div>
-  </a>
-</div>
diff --git a/go.dev/layouts/partials/searchForm.html b/go.dev/layouts/partials/searchForm.html
deleted file mode 100644
index e1116e3..0000000
--- a/go.dev/layouts/partials/searchForm.html
+++ /dev/null
@@ -1,15 +0,0 @@
-
-<form
-  class="js-searchForm SearchForm" action="https://pkg.go.dev/search" role="search">
-  <button
-    class="js-searchFormSubmit SearchForm-submit"
-    aria-label="Search for a package">
-    <svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
-      <path fill-rule="evenodd" clip-rule="evenodd" d="M11.76 10.27L17.49 16L16 17.49L10.27 11.76C9.2 12.53 7.91 13 6.5 13C2.91 13 0 10.09 0 6.5C0 2.91 2.91 0 6.5 0C10.09 0 13 2.91 13 6.5C13 7.91 12.53 9.2 11.76 10.27ZM6.5 2C4.01 2 2 4.01 2 6.5C2 8.99 4.01 11 6.5 11C8.99 11 11 8.99 11 6.5C11 4.01 8.99 2 6.5 2Z">
-      </svg>
-  </button>
-  <input class="SearchForm-input" aria-label="Search for a package" type="text" name="q" size="1"
-         placeholder="Search for a package" autocapitalize="off" autocomplete="off" autocorrect="off"
-         spellcheck="false" title="Search for a package">
-        </input>
-</form>
diff --git a/go.dev/layouts/partials/useCaseNav.html b/go.dev/layouts/partials/useCaseNav.html
deleted file mode 100644
index 1c4ae1e..0000000
--- a/go.dev/layouts/partials/useCaseNav.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<a href="#overview" class="UseCase-anchorLink anchor-link selected">Overview</a>
-<a href="#key-benefits" class="UseCase-anchorLink anchor-link">Key Benefits</a>
-<a href="#use-case" class="UseCase-anchorLink anchor-link">Use Case</a>
-<a href="#featured-users" class="UseCase-anchorLink anchor-link">Featured Users</a>
-<a href="#get-started" class="UseCase-anchorLink anchor-link">Get Started</a>
\ No newline at end of file
diff --git a/go.dev/layouts/solutions/single.html b/go.dev/layouts/solutions/single.html
index c763cf5..2d8655c 100644
--- a/go.dev/layouts/solutions/single.html
+++ b/go.dev/layouts/solutions/single.html
@@ -4,7 +4,7 @@
     <div class="WhoUsesSubPage-heroInner{{if (eq .Params.Series "Case Studies")}}--caseStudy{{else}}--useCase{{end}}">
       <div class="WhoUsesSubPage-heroContent{{if (eq .Params.Series "Case Studies")}}--caseStudy{{else}}--useCase{{end}}">
         <div class="WhoUsesSubPage-heroText{{if (eq .Params.Series "Case Studies")}}--caseStudy{{else}}--useCase{{end}}">
-          {{ partial "breadcrumbs.html" . }}
+          {{breadcrumbs .}}
           <h1>{{.Title}}</h1>
           {{range .Params.authors}}
             <div class="Article-author">{{.}}</div>
diff --git a/go.dev/templates/breadcrumbs.tmpl b/go.dev/templates/breadcrumbs.tmpl
new file mode 100644
index 0000000..be0fe87
--- /dev/null
+++ b/go.dev/templates/breadcrumbs.tmpl
@@ -0,0 +1,26 @@
+{{define "breadcrumbnav"}}
+{{- if .p1.Parent}}
+  {{- template "breadcrumbnav" (dict "p1" .p1.Parent "p2" .p2 )}}
+{{- else if not .p1.IsHome}}
+  {{- template "breadcrumbnav" (dict "p1" .p1.Site.Home "p2" .p2 ) }}
+{{- end}}
+{{- if not (eq .p1.Title "go.dev")}}
+      <li class="BreadcrumbNav-li {{if eq .p1 .p2}}active{{end}}">
+        <a class="BreadcrumbNav-link" href="{{.p1.Permalink}}">
+          {{- if isset .p1.Params "company"}}
+            {{.p1.Params.company}}
+          {{- else}}
+            {{.p1.Title}}
+          {{- end}}
+        </a>
+      </li>
+{{- end}}
+{{end}}
+
+{{define "breadcrumbs"}}
+<div class="BreadcrumbNav">
+    <ol class="BreadcrumbNav-inner">
+      {{template "breadcrumbnav" (dict "p1" . "p2" .)}}
+    </ol>
+</div>
+{{end}}