mirror of
https://github.com/Theodor-Springmann-Stiftung/lenz-web.git
synced 2025-10-28 16:55:32 +00:00
Grupperiung seiten
This commit is contained in:
@@ -1,12 +1,19 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"github.com/Theodor-Springmann-Stiftung/lenz-web/xmlmodels"
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
const DEFAULT_YEAR = 1765
|
||||
|
||||
func GetIndex(c *fiber.Ctx) error {
|
||||
return c.Redirect(LETTERS_URL + "?year=" + strconv.Itoa(DEFAULT_YEAR))
|
||||
type DateRange struct {
|
||||
Label string
|
||||
Start int
|
||||
End int
|
||||
Letters []xmlmodels.Meta
|
||||
}
|
||||
|
||||
func GetIndex(c *fiber.Ctx) error {
|
||||
return c.Redirect(LETTERS_URL + "?range=all")
|
||||
}
|
||||
|
||||
@@ -1,23 +1,48 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
|
||||
"github.com/Theodor-Springmann-Stiftung/lenz-web/xmlmodels"
|
||||
"github.com/gofiber/fiber/v2"
|
||||
)
|
||||
|
||||
func GetLetters(c *fiber.Ctx) error {
|
||||
lib := xmlmodels.Get()
|
||||
years, yearmap := lib.Years()
|
||||
y := c.Query(YEAR_PARAM, strconv.Itoa(DEFAULT_YEAR))
|
||||
_, yearmap := lib.Years()
|
||||
rangeParam := c.Query("range", "")
|
||||
// TODO: does not work ATM
|
||||
c.Locals("path", c.Path())
|
||||
|
||||
year, err := strconv.Atoi(y)
|
||||
if _, ok := yearmap[year]; (err != nil || !ok) && y != "all" {
|
||||
return c.SendStatus(fiber.StatusNotFound)
|
||||
// Define the date ranges
|
||||
ranges := []DateRange{
|
||||
{Label: "1756–1770", Start: 1756, End: 1770, Letters: []xmlmodels.Meta{}},
|
||||
{Label: "1771–1775", Start: 1771, End: 1775, Letters: []xmlmodels.Meta{}},
|
||||
{Label: "1776", Start: 1776, End: 1776, Letters: []xmlmodels.Meta{}},
|
||||
{Label: "1777–1779", Start: 1777, End: 1779, Letters: []xmlmodels.Meta{}},
|
||||
{Label: "1780–1792", Start: 1780, End: 1792, Letters: []xmlmodels.Meta{}},
|
||||
}
|
||||
|
||||
return c.Render(LETTERS_URL+"/", fiber.Map{"years": years, "yearmap": yearmap, "year": year, "all": y == "all"})
|
||||
// Group letters by date ranges
|
||||
for year, letters := range yearmap {
|
||||
for i := range ranges {
|
||||
if year >= ranges[i].Start && year <= ranges[i].End {
|
||||
ranges[i].Letters = append(ranges[i].Letters, letters...)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Handle specific range selection
|
||||
selectedRange := -1
|
||||
for i, r := range ranges {
|
||||
if r.Label == rangeParam {
|
||||
selectedRange = i
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
return c.Render(LETTERS_URL+"/", fiber.Map{
|
||||
"ranges": ranges,
|
||||
"selectedRange": selectedRange,
|
||||
"all": rangeParam == "all",
|
||||
})
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,41 +1,45 @@
|
||||
{{ $model := . }}
|
||||
|
||||
|
||||
<nav class="print:hidden">
|
||||
{{- range $y := .years -}}
|
||||
{{- range $i, $range := .ranges -}}
|
||||
{{- if $range.Letters -}}
|
||||
<a
|
||||
class="inline-block stdlink px-0.5"
|
||||
href="/briefe?year={{ $y }}"
|
||||
{{ if eq $model.year $y -}}aria-current="page"{{- end }}
|
||||
>{{ $y }}</a
|
||||
href="/briefe?range={{ $range.Label }}"
|
||||
{{ if eq $model.selectedRange $i -}}aria-current="page"{{- end }}
|
||||
>{{ $range.Label }}</a
|
||||
>
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
<a
|
||||
class="inline-block stdlink px-0.5"
|
||||
href="/briefe?year=all"
|
||||
href="/briefe?range=all"
|
||||
{{ if .all -}}aria-current="page"{{- end }}
|
||||
>Alle</a
|
||||
>
|
||||
</nav>
|
||||
|
||||
{{- if .years -}}
|
||||
{{- if .year -}}
|
||||
{{- $letters := index $model.yearmap $model.year -}}
|
||||
{{- if .ranges -}}
|
||||
{{- if ne .selectedRange -1 -}}
|
||||
{{- $selectedRangeData := index .ranges .selectedRange -}}
|
||||
<div class="flex flex-row gap-x-1">
|
||||
<div>Briefe für das Jahr {{- .year }}</div>
|
||||
<div>({{- len $letters }})</div>
|
||||
<div>Briefe für {{ $selectedRangeData.Label }}</div>
|
||||
<div>({{ len $selectedRangeData.Letters }})</div>
|
||||
</div>
|
||||
{{ template "_letterlist" $letters -}}
|
||||
{{ template "_letterlist" $selectedRangeData.Letters -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- if .all -}}
|
||||
{{- range $y := .years -}}
|
||||
<div class="">
|
||||
{{- $y -}}
|
||||
{{- $letters := index $model.yearmap $y -}}
|
||||
<div>({{- len $letters }})</div>
|
||||
{{ template "_letterlist" $letters -}}
|
||||
{{- range $range := .ranges -}}
|
||||
{{- if $range.Letters -}}
|
||||
<div class="mb-8">
|
||||
<div class="flex flex-row gap-x-1 mb-4">
|
||||
<div class="font-semibold">{{ $range.Label }}</div>
|
||||
<div>({{ len $range.Letters }})</div>
|
||||
</div>
|
||||
{{ template "_letterlist" $range.Letters -}}
|
||||
</div>
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
20
views/routes/index/body.gohtml
Normal file
20
views/routes/index/body.gohtml
Normal file
@@ -0,0 +1,20 @@
|
||||
{{ $model := . }}
|
||||
|
||||
<div class="space-y-8">
|
||||
<div class="prose max-w-none">
|
||||
<h1>Lenz-Briefe</h1>
|
||||
<p>Digitale Edition der Briefe von Jakob Michael Reinhold Lenz</p>
|
||||
</div>
|
||||
|
||||
<div class="space-y-6">
|
||||
{{- range $range := .ranges -}}
|
||||
{{- if $range.Letters -}}
|
||||
<div class="border-l-4 border-gray-300 pl-4">
|
||||
<h2 class="text-xl font-semibold mb-3">{{ $range.Label }}</h2>
|
||||
<div class="text-sm text-gray-600 mb-3">({{ len $range.Letters }} {{ if eq (len $range.Letters) 1 }}Brief{{ else }}Briefe{{ end }})</div>
|
||||
{{ template "_letterlist" $range.Letters }}
|
||||
</div>
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
</div>
|
||||
</div>
|
||||
2
views/routes/index/head.gohtml
Normal file
2
views/routes/index/head.gohtml
Normal file
@@ -0,0 +1,2 @@
|
||||
<title>Lenz-Briefe</title>
|
||||
<meta name="description" content="Digitale Edition der Briefe von Jakob Michael Reinhold Lenz" />
|
||||
Reference in New Issue
Block a user