aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backend/home.go60
-rw-r--r--backend/logs.go23
-rw-r--r--backend/templates/home_log.html23
3 files changed, 71 insertions, 35 deletions
diff --git a/backend/home.go b/backend/home.go
index d223cf5..d41102c 100644
--- a/backend/home.go
+++ b/backend/home.go
@@ -2,9 +2,7 @@ package backend
import (
"log/slog"
- "maps"
"net/http"
- "slices"
"strconv"
"github.com/go-chi/chi/v5"
@@ -27,43 +25,37 @@ func (h *homeData) SetData(d *data) {
func HandleHome(r *chi.Mux) {
r.Get("/", func(w http.ResponseWriter, r *http.Request) {
- rawPage := r.URL.Query().Get("page")
- page := 1
- if rawPage != "" {
- var err error
- page, err = strconv.Atoi(rawPage)
- if err != nil || page < 1 {
- slog.Warn("invalid page number", "rawPage", rawPage)
- w.WriteHeader(http.StatusBadRequest)
- return
- }
- }
- d := new(homeData)
- d.data = new(data)
- if sortedLogs == nil {
- sortLogs()
- }
- d.CurrentPage = page
- d.PagesNumber = len(sortedLogs)/maxLogsPerPage + 1
- if d.PagesNumber < page {
- http.NotFoundHandler().ServeHTTP(w, r)
+ d := handleGenericLogsDisplay(w, r)
+ if d == nil {
return
}
- d.Logs = sortedLogs[(page-1)*maxLogsPerPage : min(page*maxLogsPerPage, len(sortedLogs))]
d.handleGeneric(w, r, "home", d)
})
}
-func sortLogs() {
- sortedLogs = slices.SortedFunc(maps.Values(logs), func(l *logData, l2 *logData) int {
- lt := l.ModAt
- l2t := l2.ModAt
- // we want it reversed
- if lt.Before(l2t) {
- return 1
- } else if lt.After(l2t) {
- return -1
+func handleGenericLogsDisplay(w http.ResponseWriter, r *http.Request) *homeData {
+ rawPage := r.URL.Query().Get("page")
+ page := 1
+ if rawPage != "" {
+ var err error
+ page, err = strconv.Atoi(rawPage)
+ if err != nil || page < 1 {
+ slog.Warn("invalid page number", "rawPage", rawPage)
+ w.WriteHeader(http.StatusBadRequest)
+ return nil
}
- return 0
- })
+ }
+ d := new(homeData)
+ d.data = new(data)
+ if sortedLogs == nil {
+ sortLogs()
+ }
+ d.CurrentPage = page
+ d.PagesNumber = len(sortedLogs)/maxLogsPerPage + 1
+ if d.PagesNumber < page {
+ http.NotFoundHandler().ServeHTTP(w, r)
+ return nil
+ }
+ d.Logs = sortedLogs[(page-1)*maxLogsPerPage : min(page*maxLogsPerPage, len(sortedLogs))]
+ return d
}
diff --git a/backend/logs.go b/backend/logs.go
index 50caec1..8b6a608 100644
--- a/backend/logs.go
+++ b/backend/logs.go
@@ -6,9 +6,11 @@ import (
"html/template"
"io/fs"
"log/slog"
+ "maps"
"net/http"
"os"
"path/filepath"
+ "slices"
"strings"
"sync"
"time"
@@ -112,6 +114,7 @@ func readLogDir(path string, dir []os.DirEntry) error {
}
}
wg.Wait()
+ sortLogs()
return nil
}
@@ -123,7 +126,11 @@ func HandleLogs(r *chi.Mux) {
}
func handleLogList(w http.ResponseWriter, r *http.Request) {
-
+ d := handleGenericLogsDisplay(w, r)
+ if d == nil {
+ return
+ }
+ d.handleGeneric(w, r, "home_log", d)
}
func handleLog(w http.ResponseWriter, r *http.Request) {
@@ -187,3 +194,17 @@ func parseLog(d *logData, path, slug string, fi fs.FileInfo) bool {
logs[path] = d
return true
}
+
+func sortLogs() {
+ sortedLogs = slices.SortedFunc(maps.Values(logs), func(l *logData, l2 *logData) int {
+ lt := l.ModAt
+ l2t := l2.ModAt
+ // we want it reversed
+ if lt.Before(l2t) {
+ return 1
+ } else if lt.After(l2t) {
+ return -1
+ }
+ return 0
+ })
+}
diff --git a/backend/templates/home_log.html b/backend/templates/home_log.html
new file mode 100644
index 0000000..dd5fdc1
--- /dev/null
+++ b/backend/templates/home_log.html
@@ -0,0 +1,23 @@
+{{define "body"}}
+<article>
+ {{ range .Logs }}
+ <article>
+ <h2><a href="/log/{{ .Slug }}">{{ .LogTitle }}</a></h2>
+ <figure>
+ <a href="/log/{{ .Slug }}"><img src="{{ .Img.Src }}" alt="{{ .Img.Alt }}"></a>
+ <figcaption>{{ .Img.Legend }}</figcaption>
+ </figure>
+ <p>
+ {{ .Description }}
+ </p>
+ </article>
+ {{ end }}
+ {{ if ne .PagesNumber 1 }}
+ <div class="pagination">
+ {{ if ne .CurrentPage 1 }}<a href="?page={{ before .CurrentPage }}">Précédent</a>{{else}}<p></p>{{end}}
+ <p>{{ .CurrentPage }}/{{ .PagesNumber }}</p>
+ {{ if ne .CurrentPage .PagesNumber }}<a href="?page={{ next .CurrentPage }}">Suivant</a>{{else}}<p></p>{{end}}
+ </div>
+ {{ end }}
+</article>
+{{end}}