diff --git a/server.go b/server.go index ab00c0f..616a8eb 100644 --- a/server.go +++ b/server.go @@ -9,34 +9,15 @@ package main import ( - "io" - "git.erbosoft.com/amy/amsterdam/ui" - "github.com/CloudyKit/jet/v6" "github.com/labstack/echo/v4" ) -var views = jet.NewSet( - jet.NewOSFileSystemLoader("./views"), - jet.DevelopmentMode(true), -) - -type TemplateRenderer struct { -} - -func (r *TemplateRenderer) Render(w io.Writer, name string, data any, c echo.Context) error { - view, err := views.GetTemplate(name) - if err != nil { - return err - } - return view.Execute(w, nil, nil) -} - func setupEcho() *echo.Echo { e := echo.New() - e.Renderer = &TemplateRenderer{} + e.Renderer = &ui.TemplateRenderer{} e.GET("/", ui.AmWrap(func(ctxt ui.AmContext) (string, any, error) { - return "template", "frame.jet", nil + return "framed_template", "top.jet", nil })) return e } diff --git a/ui/amcontext.go b/ui/amcontext.go index 93b23e2..174800a 100644 --- a/ui/amcontext.go +++ b/ui/amcontext.go @@ -9,33 +9,65 @@ package ui import ( + "bytes" "net/http" + "github.com/CloudyKit/jet/v6" "github.com/labstack/echo/v4" ) type AmContext interface { Render(string) error + SubRender(string) ([]byte, error) SetRC(int) + VarMap() jet.VarMap } type amContext struct { echoContext echo.Context httprc int -} - -func (c *amContext) SetRC(rc int) { - c.httprc = rc + rendervars jet.VarMap } func (c *amContext) Render(name string) error { return c.echoContext.Render(c.httprc, name, c) } +func (c *amContext) SubRender(name string) ([]byte, error) { + view, err := views.GetTemplate(name) + if err != nil { + return nil, err + } + buf := new(bytes.Buffer) + err = view.Execute(buf, c.VarMap(), c) + return buf.Bytes(), err +} + +func (c *amContext) SetRC(rc int) { + c.httprc = rc +} + +func (c *amContext) VarMap() jet.VarMap { + return c.rendervars +} + func NewAmContext(ctxt echo.Context) AmContext { rc := amContext{ echoContext: ctxt, httprc: http.StatusOK, + rendervars: make(jet.VarMap), } + ctxt.Set("amsterdam_context", &rc) return &rc } + +func AmContextFromEchoContext(ctxt echo.Context) AmContext { + myctxt := ctxt.Get("amsterdam_context") + if myctxt != nil { + rc, ok := myctxt.(AmContext) + if ok { + return rc + } + } + return nil +} diff --git a/ui/render_wrap.go b/ui/render_wrap.go index 464b42e..fe8089e 100644 --- a/ui/render_wrap.go +++ b/ui/render_wrap.go @@ -22,6 +22,9 @@ func AmWrap(myfunc func(AmContext) (string, any, error)) echo.HandlerFunc { switch what { case "template": err = amctxt.Render(fmt.Sprintf("%v", rc)) + case "framed_template": + amctxt.VarMap().Set("amsterdam_innerPage", rc) + err = amctxt.Render("frame.jet") default: err = fmt.Errorf("unknown rendering type: %s", what) } diff --git a/ui/templates.go b/ui/templates.go new file mode 100644 index 0000000..db9d4e4 --- /dev/null +++ b/ui/templates.go @@ -0,0 +1,37 @@ +/* + * Amsterdam Web Communities System + * Copyright (c) 2025 Erbosoft Metaverse Design Solutions, All Rights Reserved + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ +package ui + +import ( + "io" + + "github.com/CloudyKit/jet/v6" + "github.com/labstack/echo/v4" +) + +var views = jet.NewSet( + jet.NewOSFileSystemLoader("./views"), + jet.DevelopmentMode(true), +) + +type TemplateRenderer struct { +} + +func (r *TemplateRenderer) Render(w io.Writer, name string, data any, c echo.Context) error { + view, err := views.GetTemplate(name) + if err != nil { + return err + } + var vmap jet.VarMap = nil + amctxt := AmContextFromEchoContext(c) + if amctxt != nil { + vmap = amctxt.VarMap() + } + return view.Execute(w, vmap, data) +} diff --git a/views/frame.jet b/views/frame.jet index 4f49de3..85fd763 100644 --- a/views/frame.jet +++ b/views/frame.jet @@ -84,91 +84,7 @@
- Welcome to the Venice Web Communities System. To get the most out of this site, you should log in or create an account, using one of the links above. -
-This is a test. -This is only a test. -If this had been an actual emergency, we would all be -dead by now.-
+ Welcome to the Venice Web Communities System. To get the most out of this site, you should log in or create an account, using one of the links above. +
+This is a test. +This is only a test. +If this had been an actual emergency, we would all be +dead by now.+