From 3748b4413e6962654162625a3e57ade91defb71b Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Tue, 10 Dec 2019 17:36:21 +0100 Subject: Introduce GlobalRenderData and RenderData GlobalRenderData contains some global metadata that can be obtained from any template. RenderData is a base type for template data. It contains a Global field with global metadata and an Extra field for plugins. --- template.go | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'template.go') diff --git a/template.go b/template.go index 110c433..2ebcbc0 100644 --- a/template.go +++ b/template.go @@ -13,6 +13,38 @@ import ( const themesDir = "public/themes" +// GlobalRenderData contains data available in all templates. +type GlobalRenderData struct { + LoggedIn bool + + // if logged in + Username string + // TODO: list of mailboxes + + Extra map[string]interface{} +} + +// RenderData is the base type for templates. It should be extended with new +// template-specific fields. +type RenderData struct { + Global GlobalRenderData + Extra map[string]interface{} +} + +func NewRenderData(ctx *context) *RenderData { + global := GlobalRenderData{Extra: make(map[string]interface{})} + + if ctx.session != nil { + global.LoggedIn = true + global.Username = ctx.session.username + } + + return &RenderData{ + Global: global, + Extra: make(map[string]interface{}), + } +} + type renderer struct { base *template.Template themes map[string]*template.Template -- cgit v1.2.3-59-g8ed1b