diff options
| author | Anhgelus Morhtuuzh <william@herges.fr> | 2025-10-03 10:42:07 +0200 |
|---|---|---|
| committer | Anhgelus Morhtuuzh <william@herges.fr> | 2025-10-03 10:42:07 +0200 |
| commit | 620b03459751a17632f6165b289206dc6d86ed7c (patch) | |
| tree | 186ab77201da3ad82e5a118561eb199a76955bc6 /backend | |
| parent | 2d131a363645e4a32e47036742087acc4bf1379f (diff) | |
feat(backend): handle display all log
Diffstat (limited to 'backend')
| -rw-r--r-- | backend/home.go | 60 | ||||
| -rw-r--r-- | backend/logs.go | 23 | ||||
| -rw-r--r-- | backend/templates/home_log.html | 23 |
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}} |
