mirror of
https://github.com/tarampampam/error-pages.git
synced 2024-08-30 18:22:40 +00:00
60 lines
1.2 KiB
Go
60 lines
1.2 KiB
Go
package build
|
|
|
|
import (
|
|
"bytes"
|
|
_ "embed"
|
|
"os"
|
|
"sort"
|
|
"text/template"
|
|
)
|
|
|
|
type (
|
|
buildingHistory struct {
|
|
items map[string][]historyItem
|
|
}
|
|
|
|
historyItem struct {
|
|
Code, Message, Path string
|
|
}
|
|
)
|
|
|
|
func newBuildingHistory() buildingHistory {
|
|
return buildingHistory{items: make(map[string][]historyItem)}
|
|
}
|
|
|
|
func (bh *buildingHistory) Append(templateName, pageCode, message, path string) {
|
|
if _, ok := bh.items[templateName]; !ok {
|
|
bh.items[templateName] = make([]historyItem, 0)
|
|
}
|
|
|
|
bh.items[templateName] = append(bh.items[templateName], historyItem{
|
|
Code: pageCode,
|
|
Message: message,
|
|
Path: path,
|
|
})
|
|
|
|
sort.Slice(bh.items[templateName], func(i, j int) bool { // keep history items sorted
|
|
return bh.items[templateName][i].Code < bh.items[templateName][j].Code
|
|
})
|
|
}
|
|
|
|
//go:embed index.tpl.html
|
|
var indexPageTemplate string
|
|
|
|
func (bh *buildingHistory) WriteIndexFile(path string, perm os.FileMode) error {
|
|
t, err := template.New("index").Parse(indexPageTemplate)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
var buf bytes.Buffer
|
|
|
|
if err = t.Execute(&buf, bh.items); err != nil {
|
|
return err
|
|
}
|
|
|
|
defer buf.Reset() // optimization (is needed here?)
|
|
|
|
return os.WriteFile(path, buf.Bytes(), perm)
|
|
}
|