web/module.go

145 lines
2.5 KiB
Go
Raw Normal View History

2025-03-28 08:49:33 +01:00
package web
2025-03-27 09:19:08 +01:00
import (
"github.com/flosch/pongo2/v6"
"io/fs"
2025-03-27 11:41:50 +01:00
"netgarden.dev/maf/maf"
"netgarden.dev/maf/mergefs"
2025-03-27 09:19:08 +01:00
)
func NewModule(moduleConfig *ModuleConfig) *Module {
return &Module{
moduleConfig: moduleConfig,
}
}
type Module struct {
moduleConfig *ModuleConfig
manager *maf.Manager
config *Config
server *Server
}
func (m *Module) GetID() string {
2025-03-28 08:49:33 +01:00
return "web"
2025-03-27 09:19:08 +01:00
}
func (m *Module) GetName() string {
2025-03-28 08:49:33 +01:00
return "Web"
2025-03-27 09:19:08 +01:00
}
func (m *Module) SetManager(manager *maf.Manager) {
m.manager = manager
}
func (m *Module) CreateConfig() interface{} {
return NewConfig()
}
func (m *Module) SetConfig(cfg interface{}) {
m.config = cfg.(*Config)
}
func (m *Module) GetConfig() *Config {
return m.config
}
func (m *Module) Initialize() error {
return nil
}
func (m *Module) PreStart() error {
m.server = NewServer(m)
for _, module := range m.manager.GetModulesList() {
webModule, ok := module.(WebModule)
if !ok {
continue
}
if tagsProvider, ok := module.(WebModuleTemplateTagsProvider); ok {
for name, tag := range tagsProvider.GetWebTemplateTags(m.server.GetRenderer()) {
err := pongo2.RegisterTag(name, tag)
if err != nil {
return err
}
}
}
if filtersProvider, ok := module.(WebModuleTemplateFiltersProvider); ok {
for name, filter := range filtersProvider.GetWebTemplateFilters() {
err := pongo2.RegisterFilter(name, filter)
if err != nil {
return err
}
}
}
routerGroup := m.server.GetGroup()
controllers := webModule.GetWebControllers()
for _, controller := range controllers {
controller.Register(routerGroup)
}
}
return nil
}
func (m *Module) Start() error {
return m.server.Start()
}
func (m *Module) Stop() error {
if m.server == nil {
return nil
}
return m.server.Stop()
}
func (m *Module) getStaticFS() fs.FS {
fsList := make([]fs.FS, 0)
for _, module := range m.manager.GetModulesList() {
webModule, ok := module.(WebModuleStaticFSProvider)
if !ok {
continue
}
tplFS := webModule.GetWebStaticFS()
if tplFS == nil {
continue
}
fsList = append(fsList, tplFS)
}
return mergefs.Merge(fsList...)
}
func (m *Module) getTemplatesFS() fs.FS {
fsList := make([]fs.FS, 0)
for _, module := range m.manager.GetModulesList() {
webModule, ok := module.(WebModuleTemplatesFSProvider)
if !ok {
continue
}
tplFS := webModule.GetWebTemplatesFS()
if tplFS == nil {
continue
}
fsList = append(fsList, tplFS)
}
return mergefs.Merge(fsList...)
}