internal/godoc/dochtml: add htmlPackage function

The htmlPackage is moved to a function. In a future CL, it will be used
to parse different templates.

Change-Id: I419df42973b5d924cbcaa8889d542890872fe369
Reviewed-on: https://go-review.googlesource.com/c/pkgsite/+/258999
Trust: Julie Qiu <julie@golang.org>
Run-TryBot: Julie Qiu <julie@golang.org>
TryBot-Result: kokoro <noreply+kokoro@google.com>
Reviewed-by: Jonathan Amsterdam <jba@google.com>
diff --git a/internal/godoc/dochtml/dochtml.go b/internal/godoc/dochtml/dochtml.go
index c268abd..0db5750 100644
--- a/internal/godoc/dochtml/dochtml.go
+++ b/internal/godoc/dochtml/dochtml.go
@@ -118,7 +118,8 @@
 		return linkHTML(name, opt.SourceLinkFunc(node), "Documentation-source")
 	}
 
-	tmpl := template.Must(htmlPackage.Clone()).Funcs(map[string]interface{}{
+	h := htmlPackage()
+	tmpl := template.Must(h.Clone()).Funcs(map[string]interface{}{
 		"render_short_synopsis": r.ShortSynopsis,
 		"render_synopsis":       r.Synopsis,
 		"render_doc":            r.DocHTML,
diff --git a/internal/godoc/dochtml/template.go b/internal/godoc/dochtml/template.go
index d10974e..4c7c7e8 100644
--- a/internal/godoc/dochtml/template.go
+++ b/internal/godoc/dochtml/template.go
@@ -15,26 +15,28 @@
 // htmlPackage is the template used to render documentation HTML.
 // TODO(golang.org/issue/5060): finalize URL scheme and design for notes,
 // then it becomes more viable to factor out inline CSS style.
-var htmlPackage = template.Must(template.New("package").Funcs(
-	map[string]interface{}{
-		"ternary": func(q, a, b interface{}) interface{} {
-			v := reflect.ValueOf(q)
-			vz := reflect.New(v.Type()).Elem()
-			if reflect.DeepEqual(v.Interface(), vz.Interface()) {
-				return b
-			}
-			return a
-		},
-		"render_short_synopsis": (*render.Renderer)(nil).ShortSynopsis,
-		"render_synopsis":       (*render.Renderer)(nil).Synopsis,
-		"render_doc":            (*render.Renderer)(nil).DocHTML,
-		"render_decl":           (*render.Renderer)(nil).DeclHTML,
-		"render_code":           (*render.Renderer)(nil).CodeHTML,
-		"file_link":             func() string { return "" },
-		"source_link":           func() string { return "" },
-		"play_url":              func(*doc.Example) string { return "" },
-		"safe_id":               render.SafeGoID,
-	},
-).Parse(tmplHTML))
+func htmlPackage() *template.Template {
+	return template.Must(template.New("package").Funcs(tmpl).Parse(tmplHTML))
+}
 
 const tmplHTML = `{{- "" -}}` + tmplSidenav + tmplBody + tmplExample
+
+var tmpl = map[string]interface{}{
+	"ternary": func(q, a, b interface{}) interface{} {
+		v := reflect.ValueOf(q)
+		vz := reflect.New(v.Type()).Elem()
+		if reflect.DeepEqual(v.Interface(), vz.Interface()) {
+			return b
+		}
+		return a
+	},
+	"render_short_synopsis": (*render.Renderer)(nil).ShortSynopsis,
+	"render_synopsis":       (*render.Renderer)(nil).Synopsis,
+	"render_doc":            (*render.Renderer)(nil).DocHTML,
+	"render_decl":           (*render.Renderer)(nil).DeclHTML,
+	"render_code":           (*render.Renderer)(nil).CodeHTML,
+	"file_link":             func() string { return "" },
+	"source_link":           func() string { return "" },
+	"play_url":              func(*doc.Example) string { return "" },
+	"safe_id":               render.SafeGoID,
+}