internal/godoc/dochtml/internal/render: move docTmpl and exampleTmpl fields to Renderer
Renderer.docTmpl and Renderer.exampleTmpl are added, so that the HTML
snippets for those sections can be control using experiments in a later
CL.
Change-Id: I78e58657af66149f57cead403ef9d4bf8c6fbe25
Reviewed-on: https://go-review.googlesource.com/c/pkgsite/+/260799
Trust: Julie Qiu <julie@golang.org>
Run-TryBot: Julie Qiu <julie@golang.org>
Reviewed-by: Jonathan Amsterdam <jba@google.com>
TryBot-Result: kokoro <noreply+kokoro@google.com>
diff --git a/internal/godoc/dochtml/internal/render/linkify.go b/internal/godoc/dochtml/internal/render/linkify.go
index d5fe7df..e8d92ea 100644
--- a/internal/godoc/dochtml/internal/render/linkify.go
+++ b/internal/godoc/dochtml/internal/render/linkify.go
@@ -75,20 +75,6 @@
ID safehtml.Identifier
}
-// docTmpl renders documentation. It expects a docData.
-var docTmpl = 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}}`))
-
func (r *Renderer) declHTML(doc string, decl ast.Decl) (out struct{ Doc, Decl safehtml.HTML }) {
dids := newDeclIDs(decl)
idr := &identifierResolver{r.pids, dids, r.packageURL}
@@ -110,7 +96,7 @@
}
els = append(els, el)
}
- out.Doc = ExecuteToHTML(docTmpl, docData{Elements: els, DisablePermalinks: r.disablePermalinks})
+ out.Doc = ExecuteToHTML(r.docTmpl, docData{Elements: els, DisablePermalinks: r.disablePermalinks})
}
if decl != nil {
out.Decl = safehtml.HTMLConcat(
@@ -157,7 +143,7 @@
if err != nil {
log.Errorf(r.ctx, "Error converting *doc.Example into string: %v", err)
}
- return codeHTML(codeStr)
+ return codeHTML(codeStr, r.exampleTmpl)
}
type codeElement struct {
@@ -165,19 +151,7 @@
Comment bool
}
-var codeTmpl = template.Must(template.New("").Parse(`
-<pre class="Documentation-exampleCode">
-{{range .}}
- {{- if .Comment -}}
- <span class="comment">{{.Text}}</span>
- {{- else -}}
- {{.Text}}
- {{- end -}}
-{{end}}
-</pre>
-`))
-
-func codeHTML(src string) safehtml.HTML {
+func codeHTML(src string, codeTmpl *template.Template) safehtml.HTML {
var els []codeElement
// If code is an *ast.BlockStmt, then trim the braces.
var indent string
diff --git a/internal/godoc/dochtml/internal/render/linkify_test.go b/internal/godoc/dochtml/internal/render/linkify_test.go
index 6f3f8a4..dbb4fb9 100644
--- a/internal/godoc/dochtml/internal/render/linkify_test.go
+++ b/internal/godoc/dochtml/internal/render/linkify_test.go
@@ -280,7 +280,7 @@
`,
},
} {
- out := codeHTML(test.in)
+ out := codeHTML(test.in, exampleTmpl)
got := strings.TrimSpace(string(out.String()))
want := strings.TrimSpace(test.want)
if got != want {
diff --git a/internal/godoc/dochtml/internal/render/render.go b/internal/godoc/dochtml/internal/render/render.go
index 299c64d..fd2b689 100644
--- a/internal/godoc/dochtml/internal/render/render.go
+++ b/internal/godoc/dochtml/internal/render/render.go
@@ -14,6 +14,7 @@
"strings"
"github.com/google/safehtml"
+ "github.com/google/safehtml/template"
"golang.org/x/pkgsite/internal/godoc/internal/doc"
)
@@ -36,6 +37,8 @@
disableHotlinking bool
disablePermalinks bool
ctx context.Context
+ docTmpl *template.Template
+ exampleTmpl *template.Template
}
type Options struct {
@@ -63,6 +66,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>
+`))
+
func New(ctx context.Context, fset *token.FileSet, pkg *doc.Package, opts *Options) *Renderer {
var others []*doc.Package
var packageURL func(string) string
@@ -85,6 +115,8 @@
packageURL: packageURL,
disableHotlinking: disableHotlinking,
disablePermalinks: disablePermalinks,
+ docTmpl: docDataTmpl,
+ exampleTmpl: exampleTmpl,
}
}