website.git

commit 7f5606e87216b8b5cac043005190e068c6141ce7

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) {