From 5a437a0c64ba5679760be17fb3935c559ac34b06 Mon Sep 17 00:00:00 2001 From: Amy Gale Ruth Bowersox Date: Sat, 13 Sep 2025 21:21:02 -0600 Subject: [PATCH] started doing framing --- server.go | 23 ++----------- ui/amcontext.go | 40 +++++++++++++++++++--- ui/render_wrap.go | 3 ++ ui/templates.go | 37 ++++++++++++++++++++ views/frame.jet | 86 +---------------------------------------------- views/top.jet | 85 ++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 164 insertions(+), 110 deletions(-) create mode 100644 ui/templates.go create mode 100644 views/top.jet 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 Venice

-
-

- 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. -

-
- - -
-

Venice Currents

-
- -
-
- Amy, formerly Eric - ( - Administrator, - Sep 8, 2025 5:17:02 PM - ) -
-
This is a test.
-This is only a test.
-If this had been an actual emergency, we would all be 
-dead by now.
-
- (From the topic: It Works Again!) -
-
-
-
- - -
- -
-
-

Featured Communities:

-
-
-
- 🟣 - La Piazza -
-
-
- - -
-
-

Featured Conferences:

-
-
-
- 🟣 -
- General Discussion - (La Piazza) -
-
-
-
- - -
-
-

Users Online:

-
-
-
1 total (max 1)
-
- 🟣 - Not logged in (1) -
-
-
-
+ {{ .SubRender(amsterdam_innerPage) | raw }}
diff --git a/views/top.jet b/views/top.jet new file mode 100644 index 0000000..b4654d6 --- /dev/null +++ b/views/top.jet @@ -0,0 +1,85 @@ + +
+ +
+

Welcome to Venice

+
+

+ 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. +

+
+ + +
+

Venice Currents

+
+ +
+
+ Amy, formerly Eric + ( + Administrator, + Sep 8, 2025 5:17:02 PM + ) +
+
This is a test.
+This is only a test.
+If this had been an actual emergency, we would all be 
+dead by now.
+
+ (From the topic: It Works Again!) +
+
+
+
+ + +
+ +
+
+

Featured Communities:

+
+
+
+ 🟣 + La Piazza +
+
+
+ + +
+
+

Featured Conferences:

+
+
+
+ 🟣 +
+ General Discussion + (La Piazza) +
+
+
+
+ + +
+
+

Users Online:

+
+
+
1 total (max 1)
+
+ 🟣 + Not logged in (1) +
+
+
+