internal/godoc/dochtml: add HTML for unit page

tmplHTML is added, which uses tmplSidenav + tmplBody + tmplExample to
generated an HTML template for the unit page.

Change-Id: Iabc01a5040f4e1c4c903a778a621afcdd807381f
Reviewed-on: https://go-review.googlesource.com/c/pkgsite/+/259002
Trust: Julie Qiu <julie@golang.org>
Run-TryBot: Julie Qiu <julie@golang.org>
TryBot-Result: kokoro <noreply+kokoro@google.com>
Reviewed-by: Jamal Carvalho <jamal@golang.org>
diff --git a/internal/godoc/dochtml/dochtml.go b/internal/godoc/dochtml/dochtml.go
index 0db5750..01cb580 100644
--- a/internal/godoc/dochtml/dochtml.go
+++ b/internal/godoc/dochtml/dochtml.go
@@ -118,7 +118,7 @@
 		return linkHTML(name, opt.SourceLinkFunc(node), "Documentation-source")
 	}
 
-	h := htmlPackage()
+	h := htmlPackage(ctx)
 	tmpl := template.Must(h.Clone()).Funcs(map[string]interface{}{
 		"render_short_synopsis": r.ShortSynopsis,
 		"render_synopsis":       r.Synopsis,
diff --git a/internal/godoc/dochtml/template.go b/internal/godoc/dochtml/template.go
index 1ceef3f..d1f2591 100644
--- a/internal/godoc/dochtml/template.go
+++ b/internal/godoc/dochtml/template.go
@@ -5,9 +5,12 @@
 package dochtml
 
 import (
+	"context"
 	"reflect"
 
 	"github.com/google/safehtml/template"
+	"golang.org/x/pkgsite/internal"
+	"golang.org/x/pkgsite/internal/experiment"
 	"golang.org/x/pkgsite/internal/godoc/dochtml/internal/render"
 	"golang.org/x/pkgsite/internal/godoc/internal/doc"
 )
@@ -15,11 +18,18 @@
 // 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.
-func htmlPackage() *template.Template {
-	return template.Must(template.New("package").Funcs(tmpl).Parse(legacyTmplHTML))
+func htmlPackage(ctx context.Context) *template.Template {
+	t := template.New("package").Funcs(tmpl)
+	if experiment.IsActive(ctx, internal.ExperimentUnitPage) {
+		return template.Must(t.Parse(tmplHTML))
+	}
+	return template.Must(t.Parse(legacyTmplHTML))
 }
 
-const legacyTmplHTML = `{{- "" -}}` + legacyTmplSidenav + legacyTmplBody + tmplExample
+const (
+	tmplHTML       = `{{- "" -}}` + tmplSidenav + tmplBody + tmplExample
+	legacyTmplHTML = `{{- "" -}}` + legacyTmplSidenav + legacyTmplBody + tmplExample
+)
 
 var tmpl = map[string]interface{}{
 	"ternary": func(q, a, b interface{}) interface{} {