Changeset 0.37.14 (#226)
Co-authored-by: gobha <jasafpro@gmail.com> Co-committed-by: gobha <jasafpro@gmail.com>
This commit is contained in:
@@ -68,9 +68,24 @@ type BannerConfig struct {
|
||||
Visible bool `json:"visible"`
|
||||
}
|
||||
|
||||
// MessageConfig holds dismissible message bar settings.
|
||||
type MessageConfig struct {
|
||||
Text string `json:"text"`
|
||||
Variant string `json:"variant"` // info, warn, error, success
|
||||
Visible bool `json:"visible"`
|
||||
}
|
||||
|
||||
// FooterConfig holds optional footer bar settings.
|
||||
type FooterConfig struct {
|
||||
Text string `json:"text"`
|
||||
Visible bool `json:"visible"`
|
||||
}
|
||||
|
||||
// PageData is passed to every template render.
|
||||
type PageData struct {
|
||||
Banner BannerConfig
|
||||
Message MessageConfig
|
||||
Footer FooterConfig
|
||||
Surface string // active surface ID
|
||||
Section string // sub-section (for admin pages)
|
||||
CSPNonce string
|
||||
@@ -300,6 +315,8 @@ func (e *Engine) Render(c *gin.Context, name string, data PageData) {
|
||||
data.Environment = e.cfg.Environment
|
||||
data.CSPNonce = generateNonce()
|
||||
data.Banner = e.loadBanner()
|
||||
data.Message = e.loadMessage()
|
||||
data.Footer = e.loadFooter()
|
||||
|
||||
// v0.22.7: Default theme if not set
|
||||
if data.Theme == "" {
|
||||
@@ -336,7 +353,7 @@ func (e *Engine) RenderSurface(surfaceID string) gin.HandlerFunc {
|
||||
|
||||
section := c.Param("section")
|
||||
if section == "" && surfaceID == "admin" {
|
||||
section = "overview"
|
||||
section = "users"
|
||||
}
|
||||
if section == "" && surfaceID == "settings" {
|
||||
section = "general"
|
||||
@@ -837,6 +854,50 @@ func (e *Engine) loadBanner() BannerConfig {
|
||||
return b
|
||||
}
|
||||
|
||||
// loadMessage reads dismissible message bar config from global settings.
|
||||
func (e *Engine) loadMessage() MessageConfig {
|
||||
if e.stores.GlobalConfig == nil {
|
||||
return MessageConfig{}
|
||||
}
|
||||
raw, err := e.stores.GlobalConfig.Get(context.Background(), "message")
|
||||
if err != nil || raw == nil {
|
||||
return MessageConfig{}
|
||||
}
|
||||
m := MessageConfig{}
|
||||
if v, ok := raw["enabled"].(bool); ok {
|
||||
m.Visible = v
|
||||
}
|
||||
if v, ok := raw["text"].(string); ok {
|
||||
m.Text = v
|
||||
}
|
||||
if v, ok := raw["variant"].(string); ok {
|
||||
m.Variant = v
|
||||
}
|
||||
if m.Variant == "" {
|
||||
m.Variant = "info"
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
// loadFooter reads optional footer bar config from global settings.
|
||||
func (e *Engine) loadFooter() FooterConfig {
|
||||
if e.stores.GlobalConfig == nil {
|
||||
return FooterConfig{}
|
||||
}
|
||||
raw, err := e.stores.GlobalConfig.Get(context.Background(), "footer")
|
||||
if err != nil || raw == nil {
|
||||
return FooterConfig{}
|
||||
}
|
||||
f := FooterConfig{}
|
||||
if v, ok := raw["enabled"].(bool); ok {
|
||||
f.Visible = v
|
||||
}
|
||||
if v, ok := raw["text"].(string); ok {
|
||||
f.Text = v
|
||||
}
|
||||
return f
|
||||
}
|
||||
|
||||
// loadBranding reads instance branding from global settings.
|
||||
func (e *Engine) loadBranding() (name, logoURL, tagline string) {
|
||||
name = "Chat Switchboard" // default
|
||||
|
||||
Reference in New Issue
Block a user