diff --git a/controllers/brief.go b/controllers/brief.go index e3317bd..2dcb279 100644 --- a/controllers/brief.go +++ b/controllers/brief.go @@ -24,5 +24,5 @@ func GetLetter(c *fiber.Ctx) error { text := lib.Letters.Item(letter) tradition := lib.Traditions.Item(letter) - return c.Render("/brief/", map[string]any{"meta": meta, "text": text, "tradition": tradition, "next": np.Next, "prev": np.Prev}) + return c.Render("/brief/", fiber.Map{"meta": meta, "text": text, "tradition": tradition, "next": np.Next, "prev": np.Prev}) } diff --git a/controllers/index.go b/controllers/index.go index 3ec4996..bb98ce0 100644 --- a/controllers/index.go +++ b/controllers/index.go @@ -1,27 +1,12 @@ package controllers import ( - "strconv" - - "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(JAHRGAENGE_URL + "/" + strconv.Itoa(DEFAULT_YEAR)) -} - -func GetIndexYear(c *fiber.Ctx) error { - lib := xmlmodels.Get() - years, yearmap := lib.Years() - - 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(JAHRGAENGE_URL+"/", map[string]any{"years": years, "yearmap": yearmap, "year": year, "all": y == "all"}) + return c.Redirect(LETTERS_URL + "?year=" + strconv.Itoa(DEFAULT_YEAR)) } diff --git a/controllers/routes.go b/controllers/routes.go index 384c5e1..d0bf253 100644 --- a/controllers/routes.go +++ b/controllers/routes.go @@ -6,30 +6,37 @@ import ( "github.com/Theodor-Springmann-Stiftung/lenz-web/server" "github.com/Theodor-Springmann-Stiftung/lenz-web/views" + "github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2/middleware/compress" ) -const INDEX_URL = "/" -const ASSETS_URL = "/assets" -const DATENSCHUTZ_URL = "/datenschutz" -const JAHRGAENGE_URL = "/jahrgang" -const ZITATION_URL = "/ausgabe/zitation" -const EDITION_URL = "/ausgabe/edition" -const KONTAKT_URL = "/kontakt" - -var INDEX_YEAR_URL = JAHRGAENGE_URL + "/:" + YEAR_PARAM -var LETTER_URL = "/brief/:" + LETTER_PARAM - -const YEAR_PARAM = "year" -const LETTER_PARAM = "letter" +const ( + INDEX_URL = "/" + ASSETS_URL = "/assets" + DATENSCHUTZ_URL = "/datenschutz" + LETTERS_URL = "/briefe" + ZITATION_URL = "/ausgabe/zitation" + EDITION_URL = "/ausgabe/edition" + KONTAKT_URL = "/kontakt" + LETTER_URL = "/brief/:" + LETTER_PARAM + YEAR_PARAM = "year" + LETTER_PARAM = "letter" +) func Register(server server.Server, cfg config.Config) { server.Server.Use(ASSETS_URL, compress.New(compress.Config{ Level: compress.LevelBestSpeed, })) server.Server.Use(ASSETS_URL, middleware.StaticHandler(&views.StaticFS)) + + server.Server.Use(func(ctx *fiber.Ctx) error { + ctx.Locals("cfg", cfg) + ctx.Locals("path", ctx.Path()) + return ctx.Next() + }) + server.Server.Get(INDEX_URL, GetIndex) - server.Server.Get(INDEX_YEAR_URL, GetIndexYear) + server.Server.Get(LETTERS_URL, GetLetters) server.Server.Get(LETTER_URL, GetLetter) server.Server.Get(DATENSCHUTZ_URL, Static(DATENSCHUTZ_URL+"/")) diff --git a/controllers/static.go b/controllers/static.go index cf8de34..6ca0f02 100644 --- a/controllers/static.go +++ b/controllers/static.go @@ -11,6 +11,6 @@ func Static(url string) fiber.Handler { url += "/" } return func(c *fiber.Ctx) error { - return c.Render(url, map[string]any{}) + return c.Render(url, fiber.Map{"Was": "Static"}) } } diff --git a/controllers/uebersicht.go b/controllers/uebersicht.go new file mode 100644 index 0000000..449b2a7 --- /dev/null +++ b/controllers/uebersicht.go @@ -0,0 +1,23 @@ +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)) + // 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) + } + + return c.Render(LETTERS_URL+"/", fiber.Map{"years": years, "yearmap": yearmap, "year": year, "all": y == "all"}) +} diff --git a/helpers/functions/string.go b/helpers/functions/string.go index 4f68ac9..fd189a7 100644 --- a/helpers/functions/string.go +++ b/helpers/functions/string.go @@ -1,6 +1,11 @@ package functions -import "html/template" +import ( + "html/template" + "strings" + + xmlparsing "github.com/Theodor-Springmann-Stiftung/lenz-web/xml" +) func FirstLetter(s string) string { if len(s) == 0 { @@ -15,3 +20,41 @@ func Safe(s string) template.HTML { } return template.HTML(s) } + +type LenzParseState struct{} + +func ParseGeneric(s string) string { + if len(s) == 0 { + return "" + } + + builder := strings.Builder{} + for elem, err := range xmlparsing.Iterate(s, LenzParseState{}) { + if err != nil { + return err.Error() + } + switch elem.Token.Type { + case xmlparsing.StartElement: + builder.WriteString("