internal/godoc/dochtml/internal/render: create copy of docDataHTML and exampleHTML

A copy of docDataHTML and exampleHTML are made, so that we can edit
those templates separately.

Change-Id: I858ab902b9857c48079c20f04c330387f1acf765
Reviewed-on: https://go-review.googlesource.com/c/pkgsite/+/260802
Trust: Julie Qiu <julie@golang.org>
Reviewed-by: Jonathan Amsterdam <jba@google.com>
diff --git a/internal/godoc/dochtml/internal/render/render.go b/internal/godoc/dochtml/internal/render/render.go
index 67e6d27..312bee8 100644
--- a/internal/godoc/dochtml/internal/render/render.go
+++ b/internal/godoc/dochtml/internal/render/render.go
@@ -15,6 +15,8 @@
 
 	"github.com/google/safehtml"
 	"github.com/google/safehtml/template"
+	"golang.org/x/pkgsite/internal"
+	"golang.org/x/pkgsite/internal/experiment"
 	"golang.org/x/pkgsite/internal/godoc/internal/doc"
 )
 
@@ -66,6 +68,33 @@
 	DisablePermalinks bool
 }
 
+// docDataTmpl renders documentation. It expects a docData.
+var docDataTmpl = template.Must(template.New("").Parse(`
+{{- range .Elements -}}
+  {{- if .IsHeading -}}
+    <h3 id="{{.ID}}">{{.Title}}
+    {{- if not $.DisablePermalinks}}<a href="#{{.ID}}">¶</a>{{end -}}
+    </h3>
+  {{else if .IsPreformat -}}
+    <pre>{{.Body}}</pre>
+  {{- else -}}
+    <p>{{.Body}}</p>
+  {{- end -}}
+{{end}}`))
+
+// exampleTmpl renders code for an example. It expect an Example.
+var exampleTmpl = template.Must(template.New("").Parse(`
+<pre class="Documentation-exampleCode">
+{{range .}}
+  {{- if .Comment -}}
+    <span class="comment">{{.Text}}</span>
+  {{- else -}}
+    {{.Text}}
+  {{- end -}}
+{{end}}
+</pre>
+`))
+
 // legacyDocDataTmpl renders documentation. It expects a docData.
 var legacyDocDataTmpl = template.Must(template.New("").Parse(`
 {{- range .Elements -}}
@@ -109,14 +138,21 @@
 		disablePermalinks = opts.DisablePermalinks
 	}
 	pids := newPackageIDs(pkg, others...)
+
+	d := legacyDocDataTmpl
+	e := legacyExampleTmpl
+	if experiment.IsActive(ctx, internal.ExperimentUnitPage) {
+		d = docDataTmpl
+		e = exampleTmpl
+	}
 	return &Renderer{
 		fset:              fset,
 		pids:              pids,
 		packageURL:        packageURL,
 		disableHotlinking: disableHotlinking,
 		disablePermalinks: disablePermalinks,
-		docTmpl:           legacyDocDataTmpl,
-		exampleTmpl:       legacyExampleTmpl,
+		docTmpl:           d,
+		exampleTmpl:       e,
 	}
 }