From 93e107e442a6e1c836f05a2d0fed1334a9a4c7dd Mon Sep 17 00:00:00 2001 From: Simon Martens Date: Thu, 5 Dec 2024 17:08:34 +0100 Subject: [PATCH] revised page sorting --- go.mod | 3 +- go.sum | 2 - viewmodels/piecevm.go | 85 ------------------- viewmodels/singleissuevm.go | 79 +++++++++++++++-- .../components/_inhaltsverzeichnis.gohtml | 60 ++++++------- 5 files changed, 104 insertions(+), 125 deletions(-) diff --git a/go.mod b/go.mod index 77d96a9..9d0e8fa 100644 --- a/go.mod +++ b/go.mod @@ -7,8 +7,10 @@ require ( github.com/go-git/go-git/v5 v5.12.0 github.com/gofiber/fiber/v2 v2.52.5 github.com/gofiber/storage/memory/v2 v2.0.1 + github.com/google/uuid v1.6.0 github.com/kelseyhightower/envconfig v1.4.0 github.com/yalue/merged_fs v1.3.0 + golang.org/x/text v0.14.0 ) require ( @@ -22,7 +24,6 @@ require ( github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect github.com/go-git/go-billy/v5 v5.5.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/google/uuid v1.6.0 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect github.com/kevinburke/ssh_config v1.2.0 // indirect github.com/klauspost/compress v1.17.0 // indirect diff --git a/go.sum b/go.sum index fe2bfee..573e1b1 100644 --- a/go.sum +++ b/go.sum @@ -44,8 +44,6 @@ github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU= -github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= diff --git a/viewmodels/piecevm.go b/viewmodels/piecevm.go index 7efc8e6..ac239fa 100644 --- a/viewmodels/piecevm.go +++ b/viewmodels/piecevm.go @@ -1,11 +1,6 @@ package viewmodels import ( - "slices" - "strconv" - "strings" - - "github.com/Theodor-Springmann-Stiftung/kgpz_web/helpers/logging" "github.com/Theodor-Springmann-Stiftung/kgpz_web/providers/xmlprovider" ) @@ -19,83 +14,3 @@ type PieceViewModel struct { func NewPieceView(p xmlprovider.Piece) (PieceViewModel, error) { return PieceViewModel{Piece: p}, nil } - -type PieceListViewModel struct { - IssuePieces []PieceViewModel - AdditionalPieces []PieceViewModel -} - -func PieceListViewModelForIssue(lib *xmlprovider.Library, y string, No string) (*PieceListViewModel, error) { - p := PieceListViewModel{} - err := p.piecesForIsssue(y, No, lib) - if err != nil { - return nil, err - } - return &p, nil -} - -func (plvm *PieceListViewModel) piecesForIsssue(y string, No string, lib *xmlprovider.Library) error { - lookfor := y + "-" + No + "-" - noi, err := strconv.Atoi(No) - if err != nil { - return err - } - - lib.Pieces.Items.Range(func(key, value interface{}) bool { - k := key.(string) - if strings.HasPrefix(k, lookfor) { - a := value.(xmlprovider.Piece) - p, err := NewPieceView(a) - if err != nil { - logging.ObjErr(&a, err) - return true - } - - if strings.HasPrefix(k, lookfor+"b-") { - for _, i := range p.AdditionalRef { - if i.Datum == y && i.Nr == noi { - p.Von = i.Von - p.Bis = i.Bis - } - } - plvm.AdditionalPieces = append(plvm.AdditionalPieces, p) - } else { - for _, i := range p.IssueRefs { - if i.Datum == y && i.Nr == noi { - p.Von = i.Von - p.Bis = i.Bis - } - } - plvm.IssuePieces = append(plvm.IssuePieces, p) - } - } - return true - }) - - return nil -} - -func (plvm *PieceListViewModel) Sort(y string, no int) { - SortPiecesByPage(&plvm.IssuePieces, y, no) - SortPiecesByPage(&plvm.AdditionalPieces, y, no) -} - -func SortPiecesByPage(pieces *[]PieceViewModel, y string, no int) { - slices.SortFunc(*pieces, func(i, j PieceViewModel) int { - if i.Von == j.Von { - if i.Bis >= 0 { - return 1 - } else if j.Bis >= 0 { - return -1 - } else { - return 0 - } - } - - if i.Von > j.Von { - return 1 - } - - return -1 - }) -} diff --git a/viewmodels/singleissuevm.go b/viewmodels/singleissuevm.go index dd9c29a..9fffbb1 100644 --- a/viewmodels/singleissuevm.go +++ b/viewmodels/singleissuevm.go @@ -1,18 +1,25 @@ package viewmodels import ( + "slices" "strconv" + "strings" + "github.com/Theodor-Springmann-Stiftung/kgpz_web/functions" + "github.com/Theodor-Springmann-Stiftung/kgpz_web/helpers/logging" "github.com/Theodor-Springmann-Stiftung/kgpz_web/providers/xmlprovider" ) type SingleIssueViewModel struct { IssueViewModel - No int - Year string - Pieces PieceListViewModel - Next IssueViewModel - Prev IssueViewModel + No int + Year string + Pieces map[int][]PieceViewModel + Pages []int + AdditionalPieces map[int][]PieceViewModel + AdditionalPages []int + Next IssueViewModel + Prev IssueViewModel } func NewSingleIssueView(y string, No string, lib *xmlprovider.Library) (*SingleIssueViewModel, error) { @@ -21,7 +28,6 @@ func NewSingleIssueView(y string, No string, lib *xmlprovider.Library) (*SingleI return nil, err } - pl, err := PieceListViewModelForIssue(lib, y, No) if err != nil { return nil, err } @@ -31,9 +37,66 @@ func NewSingleIssueView(y string, No string, lib *xmlprovider.Library) (*SingleI return nil, err } - sivm := SingleIssueViewModel{IssueViewModel: *ivm, No: no, Year: y, Pieces: *pl} + sivm := SingleIssueViewModel{IssueViewModel: *ivm, No: no, Year: y} - sivm.Pieces.Sort(y, no) + if err := sivm.PiecesForIsssue(lib); err != nil { + return nil, err + } + + slices.Sort(sivm.Pages) + slices.Sort(sivm.AdditionalPages) return &sivm, nil } + +func (issue *SingleIssueViewModel) PiecesForIsssue(lib *xmlprovider.Library) error { + nostr := strconv.Itoa(issue.No) + lookfor := issue.Year + "-" + nostr + "-" + n := issue.No + y := issue.Year + + adp := make(map[int][]PieceViewModel) + ip := make(map[int][]PieceViewModel) + + lib.Pieces.Items.Range(func(key, value interface{}) bool { + k := key.(string) + if strings.HasPrefix(k, lookfor) { + a := value.(xmlprovider.Piece) + p, err := NewPieceView(a) + if err != nil { + logging.ObjErr(&a, err) + return true + } + + if strings.HasPrefix(k, lookfor+"b-") { + for _, i := range p.AdditionalRef { + // INFO: Here we find the page number the piece has in THIS issue, same below + if i.Datum == y && i.Nr == n { + p.Von = i.Von + p.Bis = i.Bis + } + } + + functions.MapArrayInsert(adp, p.Von, p) + } else { + for _, i := range p.IssueRefs { + if i.Datum == y && i.Nr == n { + p.Von = i.Von + p.Bis = i.Bis + } + } + + functions.MapArrayInsert(ip, p.Von, p) + } + } + return true + }) + + issue.Pieces = ip + issue.Pages = functions.Keys(ip) + + issue.AdditionalPieces = adp + issue.AdditionalPages = functions.Keys(adp) + + return nil +} diff --git a/views/routes/issue/components/_inhaltsverzeichnis.gohtml b/views/routes/issue/components/_inhaltsverzeichnis.gohtml index b68b533..b53e9ce 100644 --- a/views/routes/issue/components/_inhaltsverzeichnis.gohtml +++ b/views/routes/issue/components/_inhaltsverzeichnis.gohtml @@ -1,38 +1,40 @@ -{{ $page := 0 }} {{ $model := .model }}
Inhalt
-{{ range $piece := .model.Pieces.IssuePieces }} -
- {{ if (ne $page $piece.Von) }} - {{ $page = $piece.Von }} +
+ {{ range $page := $model.Pages }} +
Seite {{ $page }}
- {{ end }} - {{ template "_inhaltsverzeichnis_eintrag" $piece }} + {{ range $piece := (index $model.Pieces $page) }} + + {{ template "_inhaltsverzeichnis_eintrag" $piece }} - - {{ if gt (len $piece.IssueRefs) 1 }} -
- {{ len $piece.IssueRefs }} Teile: -
    - {{ range $issue := $piece.IssueRefs }} -
  1. - - {{- $issue.Datum }} Nr. - {{ $issue.Nr -}} - -
  2. - {{ end }} -
-
- {{ end }} + + {{ if gt (len $piece.IssueRefs) 1 }} +
+ {{ len $piece.IssueRefs }} Teile: +
    + {{ range $issue := $piece.IssueRefs }} +
  1. + + {{- $issue.Datum }} Nr. + {{ $issue.Nr -}} + +
  2. + {{ end }} +
+
+ {{ end }} -
-{{ end }} + {{ end }} + +
+ {{ end }} +