]> Cypherpunks repositories - gostls13.git/commitdiff
godoc: skip template wrapping for complete HTML files
authorRuss Cox <rsc@golang.org>
Wed, 13 Jan 2010 21:09:33 +0000 (13:09 -0800)
committerRuss Cox <rsc@golang.org>
Wed, 13 Jan 2010 21:09:33 +0000 (13:09 -0800)
demo at http://wreck:8080/doc/
click on go_talk-20100112.html

R=gri
CC=golang-dev
https://golang.org/cl/186137

lib/godoc/dirlist.html
src/cmd/godoc/godoc.go

index c1f24d758daac2a735c97d76bacc411f4bd999d9..b35da55d8d01c652f065402411561658312491b5 100644 (file)
@@ -18,7 +18,7 @@
 </tr>
 {.repeated section @}
 <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 align="right">{Size|html}</td>
        <td></td>
index 09b110cabaab3402662f178c439da4560348840a..b590cd29712bcb0dca84f4f3dea5779ac928f49f 100644 (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{
        "": textFmt,
        "html": htmlFmt,
@@ -705,6 +713,7 @@ var fmap = template.FormatterMap{
        "infoSnippet": infoSnippetFmt,
        "padding": paddingFmt,
        "time": timeFmt,
+       "dir/": dirslashFmt,
 }
 
 
@@ -802,6 +811,13 @@ func serveHTMLDoc(c *http.Conn, r *http.Request, path string) {
                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 strings.HasSuffix(path, "go_spec.html") {
                var buf bytes.Buffer
@@ -917,6 +933,12 @@ func serveDirectory(c *http.Conn, r *http.Request, path string) {
                return
        }
 
+       for _, d := range list {
+               if d.IsDirectory() {
+                       d.Size = 0
+               }
+       }
+
        var buf bytes.Buffer
        if err := dirlistHTML.Execute(list, &buf); err != nil {
                log.Stderrf("dirlistHTML.Execute: %s", err)