diff --git a/controllers/reihen.go b/controllers/reihen.go index 41f6316..8a7b32b 100644 --- a/controllers/reihen.go +++ b/controllers/reihen.go @@ -14,13 +14,14 @@ import ( ) const ( - URL_REIHEN = "/reihen/" - PARAM_LETTER = "letter" - PARAM_SEARCH = "search" - PARAM_PERSON = "agent" - PARAM_PLACE = "place" - PARAM_YEAR = "year" - PARAM_HIDDEN = "hidden" + URL_REIHEN = "/reihen/" + URL_REIHEN_RESULTS = "/reihen/results/" + PARAM_LETTER = "letter" + PARAM_SEARCH = "search" + PARAM_PERSON = "agent" + PARAM_PLACE = "place" + PARAM_YEAR = "year" + PARAM_HIDDEN = "hidden" ) func init() { @@ -42,54 +43,87 @@ type ReihenPage struct { func (p *ReihenPage) Setup(router *router.Router[*core.RequestEvent], ia pagemodels.IApp, engine *templating.Engine) error { app := ia.Core() - router.GET(URL_REIHEN, func(e *core.RequestEvent) error { - search := e.Request.URL.Query().Get(PARAM_SEARCH) - if search != "" { - return p.SearchRequest(app, engine, e) - } - person := e.Request.URL.Query().Get(PARAM_PERSON) - if person != "" { - return p.PersonRequest(app, engine, e) - } - place := e.Request.URL.Query().Get(PARAM_PLACE) - if place != "" { - return p.PlaceRequest(app, engine, e) - } - year := e.Request.URL.Query().Get(PARAM_YEAR) - if year != "" { - return p.YearRequest(app, engine, e) - } - - return p.LetterRequest(app, engine, e) - }) + router.GET(URL_REIHEN, p.handlePage(engine, app)) + router.GET(URL_REIHEN_RESULTS, p.handleResults(engine, app)) return nil } -func (p *ReihenPage) YearRequest(app core.App, engine *templating.Engine, e *core.RequestEvent) error { - year := e.Request.URL.Query().Get(PARAM_YEAR) - data := make(map[string]any) - data[PARAM_HIDDEN] = e.Request.URL.Query().Get(PARAM_HIDDEN) - data[PARAM_YEAR] = year - - y, err := strconv.Atoi(year) - if err != nil { - return engine.Response404(e, err, data) +func (p *ReihenPage) handlePage(engine *templating.Engine, app core.App) HandleFunc { + return func(e *core.RequestEvent) error { + data, err := p.buildResultData(app, e) + if err != nil { + return engine.Response404(e, err, data) + } + data["common"] = NewCommonReihenData(app) + return engine.Response200(e, URL_REIHEN, data) } - - result, err := NewSeriesResult_Year(app, y) - if err != nil { - return engine.Response404(e, err, data) - } - - data["result"] = result - return p.Get(e, engine, data) } -func (p *ReihenPage) LetterRequest(app core.App, engine *templating.Engine, e *core.RequestEvent) error { - letter := e.Request.URL.Query().Get(PARAM_LETTER) - data := map[string]interface{}{} +func (p *ReihenPage) handleResults(engine *templating.Engine, app core.App) HandleFunc { + return func(e *core.RequestEvent) error { + data, err := p.buildResultData(app, e) + if err != nil { + return engine.Response404(e, err, data) + } + return engine.Response200(e, URL_REIHEN_RESULTS, data, "fragment") + } +} + +// TODO: Suchverhalten bei gefilterten Personen, Orten und Jahren +func (p *ReihenPage) buildResultData(app core.App, e *core.RequestEvent) (map[string]any, error) { + data := map[string]any{} data[PARAM_HIDDEN] = e.Request.URL.Query().Get(PARAM_HIDDEN) + + search := e.Request.URL.Query().Get(PARAM_SEARCH) + if search != "" { + data[PARAM_SEARCH] = search + result, err := NewSeriesResult_Search(app, search) + if err != nil { + return data, err + } + data["result"] = result + return data, nil + } + + person := e.Request.URL.Query().Get(PARAM_PERSON) + if person != "" { + data[PARAM_PERSON] = person + result, err := NewSeriesResult_Agent(app, person) + if err != nil { + return data, err + } + data["result"] = result + return data, nil + } + + place := e.Request.URL.Query().Get(PARAM_PLACE) + if place != "" { + data[PARAM_PLACE] = place + result, err := NewSeriesResult_Place(app, place) + if err != nil { + return data, err + } + data["result"] = result + return data, nil + } + + year := e.Request.URL.Query().Get(PARAM_YEAR) + if year != "" { + data[PARAM_YEAR] = year + y, err := strconv.Atoi(year) + if err != nil { + return data, err + } + result, err := NewSeriesResult_Year(app, y) + if err != nil { + return data, err + } + data["result"] = result + return data, nil + } + + letter := e.Request.URL.Query().Get(PARAM_LETTER) if letter == "" { data["startpage"] = true letter = "A" @@ -98,61 +132,11 @@ func (p *ReihenPage) LetterRequest(app core.App, engine *templating.Engine, e *c result, err := NewSeriesListResult_Letter(app, letter) if err != nil { - return engine.Response404(e, err, data) + return data, err } data["result"] = result - return p.Get(e, engine, data) -} - -func (p *ReihenPage) PersonRequest(app core.App, engine *templating.Engine, e *core.RequestEvent) error { - person := e.Request.URL.Query().Get(PARAM_PERSON) - data := map[string]interface{}{} - data[PARAM_PERSON] = person - data[PARAM_HIDDEN] = e.Request.URL.Query().Get(PARAM_HIDDEN) - - result, err := NewSeriesResult_Agent(app, person) - if err != nil { - return engine.Response404(e, err, data) - } - - data["result"] = result - return p.Get(e, engine, data) -} - -func (p *ReihenPage) PlaceRequest(app core.App, engine *templating.Engine, e *core.RequestEvent) error { - place := e.Request.URL.Query().Get(PARAM_PLACE) - data := map[string]interface{}{} - data[PARAM_PLACE] = place - data[PARAM_HIDDEN] = e.Request.URL.Query().Get(PARAM_HIDDEN) - - result, err := NewSeriesResult_Place(app, place) - if err != nil { - return engine.Response404(e, err, data) - } - - data["result"] = result - return p.Get(e, engine, data) -} - -// TODO: Suchverhalten bei gefilterten Personen, Orten und Jahren -func (p *ReihenPage) SearchRequest(app core.App, engine *templating.Engine, e *core.RequestEvent) error { - search := e.Request.URL.Query().Get(PARAM_SEARCH) - data := map[string]interface{}{} - data[PARAM_SEARCH] = search - - result, err := NewSeriesResult_Search(app, search) - if err != nil { - return engine.Response404(e, err, data) - } - - data["result"] = result - return p.Get(e, engine, data) -} - -func (p *ReihenPage) Get(request *core.RequestEvent, engine *templating.Engine, data map[string]interface{}) error { - data["common"] = NewCommonReihenData(request.App) - return engine.Response200(request, URL_REIHEN, data) + return data, nil } type CommonReihenData struct { diff --git a/views/routes/components/_reihe.gohtml b/views/routes/components/_reihe.gohtml index 0ff74d8..3c168ba 100644 --- a/views/routes/components/_reihe.gohtml +++ b/views/routes/components/_reihe.gohtml @@ -33,7 +33,7 @@ Link {{- if (IsAdminOrEditor $request.user) -}} - + Bearbeiten diff --git a/views/routes/ort/edit/body.gohtml b/views/routes/ort/edit/body.gohtml index 3d68ffa..8457137 100644 --- a/views/routes/ort/edit/body.gohtml +++ b/views/routes/ort/edit/body.gohtml @@ -29,7 +29,6 @@ Orte - · {{- end -}} @@ -45,7 +44,7 @@
{{ $model.result.Prev.Name }}
@@ -62,7 +61,7 @@
{{ $model.result.Next.Name }}
diff --git a/views/routes/orte/body.gohtml b/views/routes/orte/body.gohtml index 65169d7..8e59674 100644 --- a/views/routes/orte/body.gohtml +++ b/views/routes/orte/body.gohtml @@ -32,7 +32,7 @@ {{- end -}} {{- if (IsAdminOrEditor $model.request.user) -}} - + Bearbeiten {{- end -}} diff --git a/views/routes/person/edit/body.gohtml b/views/routes/person/edit/body.gohtml index 9b11d6d..ddfb47c 100644 --- a/views/routes/person/edit/body.gohtml +++ b/views/routes/person/edit/body.gohtml @@ -25,7 +25,6 @@ Anschauen - · {{- end -}} diff --git a/views/routes/reihe/body.gohtml b/views/routes/reihe/body.gohtml index 8175c9e..aa8cd9b 100644 --- a/views/routes/reihe/body.gohtml +++ b/views/routes/reihe/body.gohtml @@ -48,7 +48,7 @@ {{- end -}} diff --git a/views/routes/reihe/edit/body.gohtml b/views/routes/reihe/edit/body.gohtml index 655025a..6551cf7 100644 --- a/views/routes/reihe/edit/body.gohtml +++ b/views/routes/reihe/edit/body.gohtml @@ -25,7 +25,6 @@ Anschauen - · {{- end -}} @@ -41,7 +40,7 @@
{{ $model.result.Prev.Title }}
@@ -58,7 +57,7 @@
{{ $model.result.Next.Title }}
diff --git a/views/routes/reihen/body.gohtml b/views/routes/reihen/body.gohtml index c15f13d..fd02e44 100644 --- a/views/routes/reihen/body.gohtml +++ b/views/routes/reihen/body.gohtml @@ -69,79 +69,17 @@ {{ end }} - -
- {{ if and .search $model.result.IDSeries }} -
- {{ range $id, $r := $model.result.IDSeries }} - {{ template "_reihe" (Arr $r $model.result.Entries $model.result.EntriesSeries - true false false $model.request) }} - {{ end }} -
- {{ end }} - - {{ if $model.result.Series }} -
- {{ range $id, $r := $model.result.Series }} - {{ template "_reihe" (Arr $r $model.result.Entries $model.result.EntriesSeries false false - false $model.request) - }} - {{ end }} -
- {{ end }} - - {{ if and .search $model.result.AltSeries }} - {{ if $model.result.IDSeries }} -
- Treffer in Almanach-Nummer ↑ -
- {{ end }} - - {{ if $model.result.Series }} -
- Treffer in Reihentiteln ↑ -
- {{ end }} - - {{ if not (or $model.result.Series $model.result.IDSeries) }} -
- Keine Treffer im Reihentitel - -
- {{ end }} -
- Treffer in allen Feldern (inkl. Anmerkungen & Verweise) ↓ -
-
- {{ range $id, $r := $model.result.AltSeries }} - {{ template "_reihe" (Arr $r $model.result.Entries $model.result.EntriesSeries - false true true $model.request) }} - {{ end }} -
- {{ end }} - {{ if not (or $model.result.Series $model.result.AltSeries $model.result.IDSeries) }} -
- Keine Reihen - {{ if .search }}für {{ .search }}{{ end }} - gefunden. -
- {{ end }} - - {{ if $model.search }} - - {{ end }} - - - +
+
+
Reihen laden…
+
diff --git a/views/routes/reihen/components/alphabet.gohtml b/views/routes/reihen/components/alphabet.gohtml index fb64358..f479477 100644 --- a/views/routes/reihen/components/alphabet.gohtml +++ b/views/routes/reihen/components/alphabet.gohtml @@ -32,21 +32,26 @@
{{- if $model.letter -}} - + {{- end -}} {{- if and $model.result $model.result.Agent -}} - + {{- end -}} {{- if and $model.result $model.result.Place -}} - + {{- end -}} {{- if $model.year -}} - + {{- end -}} Erscheinungsort · {{ $model.result.Place.Name }} {{- if (IsAdminOrEditor $model.request.user) -}} - + {{- end -}} diff --git a/views/routes/reihen/filters/body.gohtml b/views/routes/reihen/filters/body.gohtml new file mode 100644 index 0000000..6b1b9fa --- /dev/null +++ b/views/routes/reihen/filters/body.gohtml @@ -0,0 +1,83 @@ +{{ $model := . }} + +
+{{ $model := . }} + + +
diff --git a/views/routes/reihen/results/body.gohtml b/views/routes/reihen/results/body.gohtml new file mode 100644 index 0000000..355c6a9 --- /dev/null +++ b/views/routes/reihen/results/body.gohtml @@ -0,0 +1,77 @@ +{{ $model := . }} + +
+ +
+ {{ if and .search $model.result.IDSeries }} +
+ {{ range $id, $r := $model.result.IDSeries }} + {{ template "_reihe" (Arr $r $model.result.Entries $model.result.EntriesSeries + true false false $model.request) }} + {{ end }} +
+ {{ end }} + + {{ if $model.result.Series }} +
+ {{ range $id, $r := $model.result.Series }} + {{ template "_reihe" (Arr $r $model.result.Entries $model.result.EntriesSeries false false + false $model.request) + }} + {{ end }} +
+ {{ end }} + + {{ if and .search $model.result.AltSeries }} + {{ if $model.result.IDSeries }} +
+ Treffer in Almanach-Nummer ↑ +
+ {{ end }} + + {{ if $model.result.Series }} +
+ Treffer in Reihentiteln ↑ +
+ {{ end }} + + {{ if not (or $model.result.Series $model.result.IDSeries) }} +
+ Keine Treffer im Reihentitel + +
+ {{ end }} +
+ Treffer in allen Feldern (inkl. Anmerkungen & Verweise) ↓ +
+
+ {{ range $id, $r := $model.result.AltSeries }} + {{ template "_reihe" (Arr $r $model.result.Entries $model.result.EntriesSeries + false true true $model.request) }} + {{ end }} +
+ {{ end }} + {{ if not (or $model.result.Series $model.result.AltSeries $model.result.IDSeries) }} +
+ Keine Reihen + {{ if .search }}für {{ .search }}{{ end }} + gefunden. +
+ {{ end }} + + {{ if $model.search }} + + {{ end }} + + +
+