diff --git a/src/cmd/server/handler/testdata/index.html b/src/cmd/server/handler/testdata/index.html
deleted file mode 100644
index 65ee7da..0000000
--- a/src/cmd/server/handler/testdata/index.html
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
- Hello World
-
-
-
diff --git a/src/cmd/server/handler/testdata/index.tmpl b/src/cmd/server/handler/testdata/index.tmpl
new file mode 100644
index 0000000..654e809
--- /dev/null
+++ b/src/cmd/server/handler/testdata/index.tmpl
@@ -0,0 +1,8 @@
+
+
+ Hello templated world b
+ {{ range feeds }}
+ feed = {{ . }}
+ {{ end }}
+
+
diff --git a/src/cmd/server/handler/ui.go b/src/cmd/server/handler/ui.go
index 83d4fb8..70673c2 100644
--- a/src/cmd/server/handler/ui.go
+++ b/src/cmd/server/handler/ui.go
@@ -1,13 +1,49 @@
package handler
import (
- "log"
+ "html/template"
"net/http"
+ "os"
+ "path"
+ "show-rss/src/feeds"
)
+var dir = func() string {
+ if v := os.Getenv("UI_D"); v != "" {
+ return v
+ }
+ return "./src/cmd/server/handler/testdata"
+}()
+
func (h Handler) ui(w http.ResponseWriter, r *http.Request) error {
- log.Printf("ui(%s)", r.URL.String())
- fs := http.FileServer(http.Dir("./src/cmd/server/handler/testdata"))
+ fs := http.FileServer(http.Dir(dir))
+ if path.Base(r.URL.Path) == "ui" {
+ return h.uiIndex(w, r)
+ }
http.StripPrefix("/experimental/ui", fs).ServeHTTP(w, r)
return nil
}
+
+func (h Handler) uiIndex(w http.ResponseWriter, r *http.Request) error {
+ ctx := r.Context()
+
+ b, _ := os.ReadFile(path.Join(dir, "index.tmpl"))
+
+ tmpl := template.New(r.URL.Path).Funcs(template.FuncMap{
+ "feeds": func() ([]feeds.Feed, error) {
+ all := []feeds.Feed{}
+ err := feeds.ForEach(ctx, func(f feeds.Feed) error {
+ all = append(all, f)
+ return ctx.Err()
+ })
+ return all, err
+ },
+ })
+
+ tmpl, err := tmpl.Parse(string(b))
+ if err != nil {
+ return err
+ }
+
+ return tmpl.Execute(w, nil)
+}