blob: a9b55b9c9a6c28ca9f61310b9cbf067f51658c36 [file] [log] [blame]
// Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package godash
import (
"fmt"
"html"
"io"
"regexp"
"strings"
)
// PrintHTML converts the text output of PrintIssues or PrintCLs into
// an HTML page.
func PrintHTML(w io.Writer, data string) {
data = html.EscapeString(data)
i := strings.Index(data, "\n")
if i < 0 {
i = len(data)
}
fmt.Fprintf(w, "<html>\n")
fmt.Fprintf(w, "<meta charset=\"UTF-8\">\n")
fmt.Fprintf(w, "<title>%s</title>\n", data[:i])
fmt.Fprintf(w, "<style>\n")
fmt.Fprintf(w, ".early {}\n")
fmt.Fprintf(w, ".maybe {}\n")
fmt.Fprintf(w, ".late {color: #700; text-decoration: underline;}\n")
fmt.Fprintf(w, ".closed {background-color: #eee;}\n")
fmt.Fprintf(w, "pre {white-space: pre-wrap;}\n")
fmt.Fprintf(w, "hr {border: none; border-top: 2px solid #000; height: 5px; border-bottom: 1px solid #000;}\n")
fmt.Fprintf(w, "</style>\n")
fmt.Fprintf(w, "<pre>\n")
data = regexp.MustCompile(`(?m)^HOWTO`).ReplaceAllString(data, `<a target="_blank" href="/">about the dashboard</a>`)
data = regexp.MustCompile(`(CL (\d+))\b`).ReplaceAllString(data, "<a target=\"_blank\" href='https://golang.org/cl/$2'>$1</a>")
data = regexp.MustCompile(`(#(\d\d\d+))\b`).ReplaceAllString(data, "<a target=\"_blank\" href='https://golang.org/issue/$2'>$1</a>")
data = regexp.MustCompile(`(?m)^(Closed Last Week|Pending Proposals|Pending CLs|Go[\?A-Za-z0-9][^\n]*)`).ReplaceAllString(data, "<hr><b><font size='+1'>$1</font></b>")
data = regexp.MustCompile(`(?m)^([\?A-Za-z0-9][^\n]*)`).ReplaceAllString(data, "<b>$1</b>")
data = regexp.MustCompile(`(?m)^([^\n]*\[early[^\n]*)`).ReplaceAllString(data, "<span class='early'>$1</span>")
data = regexp.MustCompile(`(?m)^([^\n]*\[maybe[^\n]*)`).ReplaceAllString(data, "<span class='maybe'>$1</span>")
data = regexp.MustCompile(`(?m)^( +)(.*)( → )(.*)(, [\d/]+ days)(, waiting for reviewer)`).ReplaceAllString(data, "$1$2$3<b>$4</b>$5$6")
data = regexp.MustCompile(`(?m)^( +)(.*)( → )(.*)(, [\d/]+ days)(, waiting for author)`).ReplaceAllString(data, "$1<b>$2</b>$3$4$5$6")
data = regexp.MustCompile(`(→ )(.*, \d\d+)(/\d+ days)(, waiting for reviewer)`).ReplaceAllString(data, "$1<b class='late'>$2</b>$3$4")
fmt.Fprintf(w, "%s\n", data)
fmt.Fprintf(w, "</pre>\n")
}