hackdoc: do not render links to pages that wouldn't serve anything
This gets rid of annoying clickable 404 links.
Change-Id: Ibf767875af29f4571e7f935d494b44dde002fac6
diff --git a/devtools/hackdoc/markdown.go b/devtools/hackdoc/markdown.go
index 14ffe45..eaed905 100644
--- a/devtools/hackdoc/markdown.go
+++ b/devtools/hackdoc/markdown.go
@@ -50,6 +50,29 @@
Path string
}
+func (r *request) renderable(dirpath string) bool {
+ cfg, err := config.ForPath(r.ctx, r.source, dirpath)
+ if err != nil {
+ glog.Errorf("could not get config for path %q: %v", dirpath, err)
+ return false
+ }
+
+ for _, f := range cfg.DefaultIndex {
+ fpath := dirpath + "/" + f
+ file, err := r.source.IsFile(r.ctx, fpath)
+ if err != nil {
+ glog.Errorf("IsFile(%q): %v", fpath, err)
+ return false
+ }
+
+ if file {
+ return true
+ }
+ }
+
+ return false
+}
+
func (r *request) handleFile(path string, cfg *config.Config) {
data, err := r.source.ReadFile(r.ctx, path)
if err != nil {
@@ -85,7 +108,11 @@
label = label + "/"
}
fullPath += "/" + p
- pathParts = append(pathParts, pathPart{Label: label, Path: fullPath})
+ target := fullPath
+ if i != len(parts)-1 && !r.renderable("/"+fullPath) {
+ target = ""
+ }
+ pathParts = append(pathParts, pathPart{Label: label, Path: target})
}
vars := map[string]interface{}{
diff --git a/devtools/hackdoc/tpl/default.html b/devtools/hackdoc/tpl/default.html
index edb4c33..e6280db 100644
--- a/devtools/hackdoc/tpl/default.html
+++ b/devtools/hackdoc/tpl/default.html
@@ -72,6 +72,7 @@
font-family: Consolas, monospace;
margin-top: 1rem;
padding: 0.5em 0 0.5em 0;
+ display: inline-flex;
}
.header a {
@@ -231,7 +232,13 @@
<div class="page">
<div class="header">
<span class="red">hackdoc:</span>
- {{ range .PathParts }}<span class="part"><a href="{{ .Path }}">{{ .Label }}</a></span>{{ end }}
+ {{ range .PathParts }}
+ {{ if ne .Path "" }}
+ <span class="part"><a href="{{ .Path }}">{{ .Label }}</a></span>
+ {{ else }}
+ <span class="part">{{ .Label }}</span>
+ {{ end }}
+ {{ end }}
<span class="red" style="margin-left: 1em;">shortcuts:</span> <a href="/">root</a>, <a href="/cluster/doc">cluster docs</a>, <a href="/doc/codelabs">codelabs</a>
</div>
{{ .Rendered }}