gowebd/indexHtml.go

153 lines
4.7 KiB
Go
Raw Normal View History

package main
import (
"fmt"
"net/http"
"strconv"
"strings"
"time"
)
func indexHeader(w http.ResponseWriter) {
fmt.Fprintln(w, "<!DOCTYPE html>")
fmt.Fprintln(w, "<html>")
fmt.Fprintln(w, " <head>")
// fmt.Fprintln(w, " <link rel=\"stylesheet\" href=\"skeleton.v2.css\" />")
fmt.Fprintln(w, " <style>")
fmt.Fprintln(w, " #footer {")
fmt.Fprintln(w, " position: fixed;")
fmt.Fprintln(w, " padding: 1% 0% 1% 0%; /* top left bottom right */")
fmt.Fprintln(w, " bottom: 0;")
fmt.Fprintln(w, " width: 100%;")
fmt.Fprintln(w, " /* Height of the footer*/")
fmt.Fprintln(w, " height: 40px;")
fmt.Fprintln(w, " background: lightgrey;")
fmt.Fprintln(w, " }")
fmt.Fprintln(w, " </style>")
fmt.Fprintln(w, " </head>")
fmt.Fprintln(w, "</html>")
}
func indexBodyStart(w http.ResponseWriter) {
// fmt.Fprintln(w, "
fmt.Fprintln(w, "<body>")
fmt.Fprintln(w, " <div class=\"container\">")
fmt.Fprintln(w, " <div class=\"row\">")
fmt.Fprintln(w, " <table class=\"u-full-width\">")
// fmt.Fprintln(w, " <thead>")
fmt.Fprintln(w, " <tr>")
fmt.Fprintln(w, " <th>Package (IPv6 only)</th>")
fmt.Fprintln(w, " <th>Documentation</th>")
fmt.Fprintln(w, " <th>Version</th>")
fmt.Fprintln(w, " <th>Age</th>")
fmt.Fprintln(w, " <th>Dev Version</th>")
fmt.Fprintln(w, " <th>Description</th>")
// fmt.Fprintln(w, " <th>Authoritative sources (IPv6 only)</th>")
// fmt.Fprintln(w, " <th></th>")
fmt.Fprintln(w, " </tr>")
// fmt.Fprintln(w, " </thead>")
fmt.Fprintln(w, " <tbody>")
fmt.Fprintln(w, "")
}
func insertHTMLnote(w http.ResponseWriter, i int, parts []string) {
// log.Info("comment # line:", i, strings.Join(parts, " "))
fmt.Fprintln(w, " <tr> <td><h3>", strings.Join(parts, " "), "</h3></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr>")
}
func indexBodyScanConfig(w http.ResponseWriter) {
// log.Info("indexBodyScanConfig() START")
for i, line := range configfile {
// log.Info("config file line:", i, line)
fields := strings.Fields(line)
if len(fields) == 0 {
continue
}
if fields[0] == "#" {
insertHTMLnote(w, i, fields[0:])
// log.Info("comment # line:", i, line)
continue
}
if len(fields) == 2 {
// log.Info("short file line:", i, line)
gourl := fields[0]
giturl := fields[1]
indexBodyRepo(w, gourl, giturl, "")
continue
}
if len(fields) > 2 {
// log.Info("short file line:", i, line)
gourl := fields[0]
giturl := fields[1]
desc := strings.Join(fields[2:], " ")
desc = strings.TrimSpace(desc)
indexBodyRepo(w, gourl, giturl, desc)
continue
}
// log.Info("config file line:", i, line)
}
// log.Info("indexBodyScanConfig() END")
}
func indexBodyRepo(w http.ResponseWriter, gourl string, giturl string, desc string) {
// skip displaying packages without a desc
if desc == "" {
return
}
// fmt.Fprintln(w, " <tr> <td><h5>log/ (needed for the gui)</h5></td> <td></td> <td></td> <td></td> <td></td> </tr>")
fmt.Fprintln(w, " <tr>")
// fmt.Fprintln(w, " <td>"+gourl+"</td>")
fmt.Fprintln(w, " <td> <a href=\"//"+gourl+"\">"+gourl+"</a></td>")
fmt.Fprintln(w, " <td> <a href=\"//pkg.go.dev/"+gourl+"\"> <img src=\"goReference.svg\" alt=\"pkg.go.dev\" /> </a> </td>")
// for i, s := range versionMap {
// log.Println("found i =", i, "with", "s =", s)
// }
var vtime, version string
gourl = strings.TrimSpace(gourl)
tmp, _ := versionMap[gourl]
parts := strings.Split(tmp, " ")
if len(parts) > 0 {
version = parts[0]
}
if len(parts) > 1 {
vtime = parts[1]
}
if vtime != "" {
// Convert the string to an integer
gitTagTimestampInt, _ := strconv.ParseInt(vtime, 10, 64)
// Parse the Unix timestamp into a time.Time object
gitTagDate := time.Unix(gitTagTimestampInt, 0)
// Get the current time
currentTime := time.Now()
// Calculate the duration between the git tag date and the current time
duration := currentTime.Sub(gitTagDate)
vtime = formatDuration(duration)
}
fmt.Fprintln(w, " <td>"+version+"</td>") // version
fmt.Fprintln(w, " <td>"+vtime+"</td>") // dev version
fmt.Fprintln(w, " <td></td>") // dev version
fmt.Fprintln(w, " <td>"+desc+"</td>")
// fmt.Fprintln(w, " <td> <a href=\"//"+gourl+"\">"+giturl+"</a></td>")
fmt.Fprintln(w, " </tr>")
fmt.Fprintln(w, "")
}
func indexDivEnd(w http.ResponseWriter) {
// fmt.Fprintln(w, "
fmt.Fprintln(w, " </tbody>")
fmt.Fprintln(w, " </table>")
fmt.Fprintln(w, " </div>")
fmt.Fprintln(w, " </div>")
}
func indexBodyEnd(w http.ResponseWriter) {
fmt.Fprintln(w, " </body>")
fmt.Fprintln(w, " </html>")
}