Briefansicht

This commit is contained in:
Simon Martens
2025-03-27 21:34:29 +01:00
parent a224d31c47
commit 316e8e3f58
8 changed files with 122 additions and 52 deletions

27
controllers/brief.go Normal file
View File

@@ -0,0 +1,27 @@
package controllers
import (
"strconv"
"github.com/Theodor-Springmann-Stiftung/lenz-web/xmlmodels"
"github.com/gofiber/fiber/v2"
)
func GetLetter(c *fiber.Ctx) error {
lib := xmlmodels.Get()
l := c.Params(LETTER_PARAM)
letter, err := strconv.Atoi(l)
if err != nil {
return c.SendStatus(fiber.StatusNotFound)
}
meta := lib.Metas.Item(letter)
if meta == nil {
return c.SendStatus(fiber.StatusNotFound)
}
text := lib.Letters.Item(letter)
tradition := lib.Traditions.Item(letter)
return c.Render("/brief/", map[string]any{"meta": meta, "text": text, "tradition": tradition})
}

View File

@@ -1,16 +1,27 @@
package controllers package controllers
import ( import (
"strconv"
"github.com/Theodor-Springmann-Stiftung/lenz-web/xmlmodels" "github.com/Theodor-Springmann-Stiftung/lenz-web/xmlmodels"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
) )
const DEFAULT_YEAR = 1765 const DEFAULT_YEAR = 1765
func GetIndex(fiber *fiber.Ctx) error { func GetIndex(c *fiber.Ctx) error {
return c.Redirect("/" + strconv.Itoa(DEFAULT_YEAR))
}
func GetIndexYear(c *fiber.Ctx) error {
lib := xmlmodels.Get() lib := xmlmodels.Get()
// Years
years, yearmap := lib.Years() years, yearmap := lib.Years()
return fiber.Render("/", map[string]any{"years": years, "yearmap": yearmap}) y := c.Params(YEAR_PARAM)
year, err := strconv.Atoi(y)
if _, ok := yearmap[year]; (err != nil || !ok) && y != "all" {
return c.SendStatus(fiber.StatusNotFound)
}
return c.Render("/", map[string]any{"years": years, "yearmap": yearmap, "year": year, "all": y == "all"})
} }

View File

@@ -10,21 +10,25 @@ import (
) )
const ASSETS_URL = "/assets" const ASSETS_URL = "/assets"
const WBHOOK_URL = "/webhook" const INDEX_URL = "/"
const YEAR_PARAM = "year"
const LETTER_PARAM = "letter"
var INDEX_YEAR_URL = "/:" + YEAR_PARAM
var LETTER_URL = "/brief/:" + LETTER_PARAM
func Register(server server.Server, cfg config.Config) { func Register(server server.Server, cfg config.Config) {
server.Server.Use(ASSETS_URL, compress.New(compress.Config{ server.Server.Use(ASSETS_URL, compress.New(compress.Config{
Level: compress.LevelBestSpeed, Level: compress.LevelBestSpeed,
})) }))
server.Server.Use(ASSETS_URL, middleware.StaticHandler(&views.StaticFS)) server.Server.Use(ASSETS_URL, middleware.StaticHandler(&views.StaticFS))
server.Server.Get("/", GetIndex) server.Server.Get(INDEX_URL, GetIndex)
server.Server.Get(INDEX_YEAR_URL, GetIndexYear)
server.Server.Get(LETTER_URL, GetLetter)
// INFO: we map the webhook when a secret was provided
if cfg.WebHookSecret != "" { if cfg.WebHookSecret != "" {
whurl := WBHOOK_URL server.Server.Post(cfg.WebHookEndpoint, PostWebhook(cfg))
if cfg.WebHookEndpoint != "" {
whurl = cfg.WebHookEndpoint
}
server.Server.Post(whurl, PostWebhook(cfg))
} }
} }

File diff suppressed because one or more lines are too long

View File

@@ -1,5 +1,5 @@
{{- $date := Today -}} {{- $date := Today -}}
<footer class="container-normal pb-1.5 text-base text-gray-800 self-end justify-self-end"> <footer class="container-normal pb-1.5 text-base text-gray-800 justify-self-end">
<div class="mt-12 pt-3 flex flex-row justify-between"> <div class="mt-12 pt-3 flex flex-row justify-between">
<div> <div>
<i class="ri-creative-commons-line"></i> <i class="ri-creative-commons-line"></i>

View File

@@ -1,46 +1,39 @@
{{ $model := . }} {{ $model := . }}
{{- if .years -}}
<div>
{{- range $y := .years -}} {{- range $y := .years -}}
<div> <a class="inline-block px-0.5" href="/{{ $y }}">{{ $y }}</a>
{{- printf "%d " $y -}} {{- end -}}
{{- $letters := index $model.yearmap $y -}} <a class="inline-block px-0.5" href="/all">Alle</a>
{{- len $letters }} </div>
{{ range $l := $letters -}}
<div>{{ $l.Letter }}</div> {{- if .years -}}
<div>{{ $l.Earliest.Text -}}</div> {{- if .year -}}
{{- range $sr := $l.SendReceivedPairs -}} {{- $letters := index $model.yearmap $model.year -}}
<div> <div class="flex flex-row gap-x-1">
<div> <div>{{- .year }}</div>
{{- range $i, $p := $sr.Sent.Persons -}} <div>({{- len $letters }})</div>
<div>
{{- if $i -}}
,
{{ end -}}
{{- $person := Person $p.Reference -}}
{{- $person.Name -}}
</div>
{{- end -}}
</div>
<div>an</div>
{{- if $sr.Received -}}
<div>
{{- range $i, $p := $sr.Received.Persons -}}
<div>
{{- if $i -}}
,
{{ end -}}
{{- $person := Person $p.Reference -}}
{{- $person.Name -}}
</div>
{{- end -}}
</div>
{{- else -}}
<div>Unbekannt</div>
{{- end -}}
</div>
{{- end -}}
{{- end -}}
</div> </div>
{{ range $l := $letters -}}
<a href="/brief/{{ $l.Letter }}" class="">
{{- template "_letterhead" $l -}}
</a>
{{- end -}}
{{- end -}}
{{- if .all -}}
{{- range $y := .years -}}
<div>
{{- $y -}}
{{- $letters := index $model.yearmap $y -}}
{{- len $letters }}
{{ range $l := $letters -}}
<a href="/brief/{{ $l.Letter }}" class="">
{{- template "_letterhead" $l -}}
</a>
{{- end -}}
</div>
{{- end -}}
{{- end -}} {{- end -}}
{{- end -}} {{- end -}}

View File

@@ -0,0 +1 @@
{{- template "_letterhead" .meta -}}

View File

@@ -0,0 +1,34 @@
{{ $model := . }}
<div>{{ $model.Letter }}</div>
<div>{{ $model.Earliest.Text -}}</div>
{{- range $sr := $model.SendReceivedPairs -}}
<div>
<div>
{{- range $i, $p := $sr.Sent.Persons -}}
<div>
{{- if $i -}}
,
{{ end -}}
{{- $person := Person $p.Reference -}}
{{- $person.Name -}}
</div>
{{- end -}}
</div>
<div>an</div>
{{- if $sr.Received -}}
<div>
{{- range $i, $p := $sr.Received.Persons -}}
<div>
{{- if $i -}}
,
{{ end -}}
{{- $person := Person $p.Reference -}}
{{- $person.Name -}}
</div>
{{- end -}}
</div>
{{- else -}}
<div>Unbekannt</div>
{{- end -}}
</div>
{{- end -}}