Author: Adam Evyčędo <git@apiote.xyz>
embed rest of files
router.go | 38 ++++++++++++++++++++++----------------
diff --git a/router.go b/router.go index cb2f57085a6d45ed68448a8418ff8f642e1ae756..73cb13c73ad3b5f1516d9a7f070616f1c12de6dc 100644 --- a/router.go +++ b/router.go @@ -6,7 +6,6 @@ "embed" "fmt" "html/template" "io" - "io/fs" "io/ioutil" "log" "math/rand" @@ -23,10 +22,14 @@ "github.com/bytesparadise/libasciidoc/pkg/configuration" "golang.org/x/text/language" ) -// TODO go:embed for programs and templates - //go:embed static var staticFS embed.FS + +//go:embed programs +var programsFS embed.FS + +//go:embed templates +var templatesFS embed.FS type Redirection struct { ID string @@ -90,23 +93,23 @@ } func chooseLanguage(name, acceptLanguage string) string { languagesSet := map[language.Tag]struct{}{} - _ = filepath.WalkDir("templates", func(path string, d fs.DirEntry, err error) error { - info, err := d.Info() - if info.IsDir() { - return nil + entries, err := templatesFS.ReadDir("templates") + for _, entry := range entries { + if entry.IsDir() { + continue } - nameParts := strings.Split(info.Name(), ".") + + nameParts := strings.Split(entry.Name(), ".") if len(nameParts) == 2 { - return nil + continue } l, err := language.Parse(nameParts[1]) if err != nil { - return err + continue } languagesSet[l] = struct{}{} - return nil - }) + } if len(languagesSet) == 0 { return name @@ -134,7 +137,7 @@ } func showHtml(w http.ResponseWriter, name string, data any, acceptLanguage string) { name = chooseLanguage(name, acceptLanguage) - t, err := template.ParseFiles("templates/"+name+".html", "templates/aside.html", "templates/header.html", "templates/nav.html", "templates/head.html", "templates/head_program.html") + t, err := template.ParseFS(templatesFS, "templates/"+name+".html", "templates/aside.html", "templates/header.html", "templates/nav.html", "templates/head.html", "templates/head_program.html") if err != nil { log.Println(err) if os.IsNotExist(err) { @@ -176,7 +179,7 @@ func readPrograms() (map[string]Program, error) { m := map[string]Program{} programs := []Program{} - file, err := os.Open("programs/index.dirty") + file, err := programsFS.Open("programs/index.dirty") if err != nil { log.Println(err) return m, err @@ -219,14 +222,17 @@ program = programs[name] version, present = program.Versions[path[2]] } else { renderStatus(w, 404, acceptLanguage) + return } if !present { renderStatus(w, 404, acceptLanguage) + return } - file, err := os.Open("programs/" + version.Description) + file, err := programsFS.Open("programs/" + version.Description) if err != nil { if os.IsNotExist(err) { renderStatus(w, 404, acceptLanguage) + return } else { log.Println(err) } @@ -414,7 +420,7 @@ log.Println(holidays) fmt.Fprint(w, "Error 500") return } - t, err := template.ParseFiles("templates/calendar.ics") + t, err := template.ParseFS(templatesFS, "templates/calendar.ics") if err != nil { log.Println(err) if os.IsNotExist(err) {