1
0
mirror of https://github.com/golang/go synced 2024-11-25 07:17:56 -07:00

godoc: skip template wrapping for complete HTML files

demo at http://wreck:8080/doc/
click on go_talk-20100112.html

R=gri
CC=golang-dev
https://golang.org/cl/186137
This commit is contained in:
Russ Cox 2010-01-13 13:09:33 -08:00
parent ae13f43810
commit 1c6c0eee20
2 changed files with 23 additions and 1 deletions

View File

@ -18,7 +18,7 @@
</tr> </tr>
{.repeated section @} {.repeated section @}
<tr> <tr>
<td align="left"><a href="{Name|html}">{Name|html}</a></td> <td align="left"><a href="{Name|html}{@|dir/}">{Name|html}{@|dir/}</a></td>
<td></td> <td></td>
<td align="right">{Size|html}</td> <td align="right">{Size|html}</td>
<td></td> <td></td>

View File

@ -694,6 +694,14 @@ func timeFmt(w io.Writer, x interface{}, format string) {
} }
// Template formatter for "dir/" format.
func dirslashFmt(w io.Writer, x interface{}, format string) {
if x.(*os.Dir).IsDirectory() {
w.Write([]byte{'/'})
}
}
var fmap = template.FormatterMap{ var fmap = template.FormatterMap{
"": textFmt, "": textFmt,
"html": htmlFmt, "html": htmlFmt,
@ -705,6 +713,7 @@ var fmap = template.FormatterMap{
"infoSnippet": infoSnippetFmt, "infoSnippet": infoSnippetFmt,
"padding": paddingFmt, "padding": paddingFmt,
"time": timeFmt, "time": timeFmt,
"dir/": dirslashFmt,
} }
@ -802,6 +811,13 @@ func serveHTMLDoc(c *http.Conn, r *http.Request, path string) {
return return
} }
// if it begins with "<!DOCTYPE " assume it is standalone
// html that doesn't need the template wrapping.
if bytes.HasPrefix(src, strings.Bytes("<!DOCTYPE ")) {
c.Write(src)
return
}
// if it's the language spec, add tags to EBNF productions // if it's the language spec, add tags to EBNF productions
if strings.HasSuffix(path, "go_spec.html") { if strings.HasSuffix(path, "go_spec.html") {
var buf bytes.Buffer var buf bytes.Buffer
@ -917,6 +933,12 @@ func serveDirectory(c *http.Conn, r *http.Request, path string) {
return return
} }
for _, d := range list {
if d.IsDirectory() {
d.Size = 0
}
}
var buf bytes.Buffer var buf bytes.Buffer
if err := dirlistHTML.Execute(list, &buf); err != nil { if err := dirlistHTML.Execute(list, &buf); err != nil {
log.Stderrf("dirlistHTML.Execute: %s", err) log.Stderrf("dirlistHTML.Execute: %s", err)