diff --git a/assets/goreportcard.css b/assets/goreportcard.css new file mode 100644 index 0000000..f347674 --- /dev/null +++ b/assets/goreportcard.css @@ -0,0 +1,135 @@ +.header .is-active { + font-weight: bold; +} +.header .title { + font-size: 1.5em; +} +.hero-content .subtitle { + font-size: 1.5em; + font-weight: 300; + color: rgb(255, 255, 255) !important; + text-shadow: 0px 0px 4px rgba(150, 150, 150, 1); +} +#check_form { + font-size: 1.5em; +} +#check_form .input-box { + padding: 0.5em; + min-width: 350px; +} +#check_form .btn-test { + margin-top: 1em; + font-weight: 200; +} +.header-item #check_form .input-box { + padding: 3px; + font-size: 0.9em; +} + +.hidden { + display: none; +} + +.menu.results .percentage { + float: right; +} +.percentage.danger { + color: #C61E1E; +} +.percentage.info { +} +.percentage.warning { + color: #C6761E; +} +.percentage.success { + color: #4CC61E; +} +.results-text { + font-size: 1.4em; +} +.results-text .huge { + font-size: 2em; + color: black; +} +.results-text .badge-col { + text-align: right; + position: relative; +} +.results-text .badge-col .badge { + margin-top: 10px; + cursor: pointer; +} +.menu-block.is-active { + font-weight: bold; + background: #f0f0f0; +} +.results-details { + word-break: break-word; +} +.results-details .files, .results .errors { + padding-left: 0; +} +.results-details .files .file { + list-style-type: none; + padding-left: 0; +} +.results-details .files .errors .error { + list-style-type: none; + padding-left: 4em; + margin: 1em 0; +} +.results-details .tool-title { + font-size: 1.8em; + color: #050505; + margin-bottom: 10px; +} +.results-details .percentage { + float: right; +} +.results-details .wrapper { + margin-bottom: 20px; +} +.results-details .perfect { + margin-top: 1em; + font-weight: 600; +} +#badge_dropdown { + position: absolute; + top: 32px; + right: 0; + width: 100%; + max-width: 400px; + padding: 10px; + border: 3px solid #dddddd; + background: white; +} +#badge_dropdown label { + clear: left; + float: left; + font-size: 0.8em; +} +#badge_dropdown input { + float: left; + font-size: 0.8em; + width: 100%; +} +nav.results.stickytop { + position:fixed; + top:0; + width: auto; + min-width: 200px; +} + +@media (max-width: 800px) { + nav.results.stickytop { + display: none; + } +} +@media (min-width: 600px) { + .hero.gopher { + background-image: url(/assets/biggopher.png); + background-repeat: no-repeat; + background-position: left middle; + background-size: cover; + } +} diff --git a/handlers/check.go b/handlers/check.go index 7419758..b7ab93d 100644 --- a/handlers/check.go +++ b/handlers/check.go @@ -64,7 +64,6 @@ func CheckHandler(w http.ResponseWriter, r *http.Request) { http.Error(w, err.Error(), 500) return } - w.Write(respBytes) // write to boltdb db, err := bolt.Open(DBPath, 0755, &bolt.Options{Timeout: 1 * time.Second}) @@ -126,6 +125,12 @@ func CheckHandler(w http.ResponseWriter, r *http.Request) { } } + b, marshalErr := json.Marshal(map[string]string{"redirect": "/report/" + repo}) + if marshalErr != nil { + log.Println("JSON marshal error:", marshalErr) + } + w.WriteHeader(http.StatusOK) + w.Write(b) return } diff --git a/handlers/home.go b/handlers/home.go index 5dc20a2..ac33b56 100644 --- a/handlers/home.go +++ b/handlers/home.go @@ -8,6 +8,7 @@ import ( // HomeHandler handles the homepage func HomeHandler(w http.ResponseWriter, r *http.Request) { log.Println("Serving home page") + if r.URL.Path[1:] == "" { http.ServeFile(w, r, "templates/home.html") } else { diff --git a/handlers/report.go b/handlers/report.go index 7fe2fd6..323fbdc 100644 --- a/handlers/report.go +++ b/handlers/report.go @@ -1,8 +1,30 @@ package handlers -import "net/http" +import ( + "encoding/json" + "log" + "net/http" + + "github.com/alecthomas/template" +) // ReportHandler handles the report page func ReportHandler(w http.ResponseWriter, r *http.Request, repo string) { - http.ServeFile(w, r, "templates/home.html") + log.Println("report", repo) + t := template.Must(template.New("report.html").Delims("[[", "]]").ParseFiles("templates/report.html")) + resp, err := getFromCache(repo) + needToLoad := false + if err != nil { + log.Println("ERROR:", err) // log error, but continue + needToLoad = true + } + + respBytes, err := json.Marshal(resp) + if err != nil { + log.Println("ERROR: marshaling json: ", err) + http.Error(w, "Failed to load cache object", 500) + return + } + + t.Execute(w, map[string]interface{}{"repo": repo, "response": string(respBytes), "loading": needToLoad}) } diff --git a/templates/home.html b/templates/home.html index 8fcfa96..38e7921 100644 --- a/templates/home.html +++ b/templates/home.html @@ -6,6 +6,7 @@