From 0e0c9d8fdea0c72da7b26af2c517ea9b441725ed Mon Sep 17 00:00:00 2001 From: AIRONAX Developer Date: Fri, 2 Oct 2026 21:13:55 +0530 Subject: [PATCH 1/4] refactor(render): centralize engine HTML template relative paths Add TemplatePath and parse-set helpers (shell layout, shell inner pages, auth pages) so handlers stop hardcoding filenames under templates/. --- core/engine/render/templates_paths.go | 61 +++++++++++++++++++ core/engine/templates/{ => auth}/login.html | 0 core/engine/templates/{ => auth}/setup.html | 0 .../templates/{ => auth}/totp_login.html | 0 core/engine/templates/{ => shell}/base.html | 0 5 files changed, 61 insertions(+) create mode 100644 core/engine/render/templates_paths.go rename core/engine/templates/{ => auth}/login.html (100%) rename core/engine/templates/{ => auth}/setup.html (100%) rename core/engine/templates/{ => auth}/totp_login.html (100%) rename core/engine/templates/{ => shell}/base.html (100%) diff --git a/core/engine/render/templates_paths.go b/core/engine/render/templates_paths.go new file mode 100644 index 0000000..f23ad96 --- /dev/null +++ b/core/engine/render/templates_paths.go @@ -0,0 +1,61 @@ +package render + +import "path/filepath" + +// Relative paths under TemplatesPath (core/engine/templates). +const ( + TemplateShellBase = "shell/base.html" + + TemplatePartialMenuIcons = "partials/menu_icons.html" + TemplatePartialHomeHub = "partials/home_hub.html" + TemplatePartialAppsModule = "partials/apps_module.html" + TemplatePartialLoginBrand = "partials/login_brand_aside.html" + TemplatePartialAuthHead = "partials/auth_head.html" + + TemplateAuthLogin = "auth/login.html" + TemplateAuthTOTP = "auth/totp_login.html" + TemplateAuthSetup = "auth/setup.html" + + TemplatePortalHome = "portal/portal_home.html" + TemplatePortalShare = "portal/portal_share.html" + + TemplatePagesHome = "pages/home_dashboard.html" + TemplatePagesApps = "pages/apps.html" + TemplatePagesAppLogs = "pages/app_logs.html" + TemplatePagesSettingsHub = "pages/settings_hub.html" + TemplatePagesSettingsAccount = "pages/settings_account.html" + TemplatePagesSettingsFieldACL = "pages/settings_field_acl.html" + TemplatePagesSettingsModelACL = "pages/settings_model_acl.html" +) + +// TemplatePath joins templatesDir with a relative template path. +func TemplatePath(templatesDir, rel string) string { + return filepath.Join(templatesDir, rel) +} + +// ShellLayoutTemplateFiles returns files parsed for base.html layout rendering. +func ShellLayoutTemplateFiles(templatesDir string) []string { + return []string{ + TemplatePath(templatesDir, TemplateShellBase), + TemplatePath(templatesDir, TemplatePartialMenuIcons), + } +} + +// ShellInnerTemplateFiles returns files parsed for a shell inner page (pages/*.html). +func ShellInnerTemplateFiles(templatesDir, pageRel string) []string { + return []string{ + TemplatePath(templatesDir, pageRel), + TemplatePath(templatesDir, TemplatePartialMenuIcons), + TemplatePath(templatesDir, TemplatePartialHomeHub), + TemplatePath(templatesDir, TemplatePartialAppsModule), + } +} + +// AuthTemplateFiles returns files parsed for standalone auth pages (login, TOTP, setup). +func AuthTemplateFiles(templatesDir, pageRel string) []string { + return []string{ + TemplatePath(templatesDir, pageRel), + TemplatePath(templatesDir, TemplatePartialLoginBrand), + TemplatePath(templatesDir, TemplatePartialAuthHead), + } +} diff --git a/core/engine/templates/login.html b/core/engine/templates/auth/login.html similarity index 100% rename from core/engine/templates/login.html rename to core/engine/templates/auth/login.html diff --git a/core/engine/templates/setup.html b/core/engine/templates/auth/setup.html similarity index 100% rename from core/engine/templates/setup.html rename to core/engine/templates/auth/setup.html diff --git a/core/engine/templates/totp_login.html b/core/engine/templates/auth/totp_login.html similarity index 100% rename from core/engine/templates/totp_login.html rename to core/engine/templates/auth/totp_login.html diff --git a/core/engine/templates/base.html b/core/engine/templates/shell/base.html similarity index 100% rename from core/engine/templates/base.html rename to core/engine/templates/shell/base.html From 26dab0d46bf76512bc0ee50f2798dfe99db705f0 Mon Sep 17 00:00:00 2001 From: AIRONAX Developer Date: Fri, 2 Oct 2026 21:14:16 +0530 Subject: [PATCH 2/4] refactor(templates): organize engine HTML under shell, auth, pages, portal, partials Move base.html to shell/, auth pages to auth/, portal pages to portal/, and shell inner bodies to pages/ (drop *_inner suffix). Split shared defines into partials (menu icons, home hub, apps module forms, auth assets, login brand aside). Wire RenderPage, shell inner render, auth template cache, setup, and portal handlers via render/templates_paths.go. --- core/engine/render/page.go | 8 +-- core/engine/templates/README.md | 17 +++++ core/engine/templates/auth/login.html | 25 +------ core/engine/templates/auth/setup.html | 16 +---- core/engine/templates/auth/totp_login.html | 16 +---- .../app_logs.html} | 0 .../{apps_inner.html => pages/apps.html} | 68 ------------------- .../home_dashboard.html} | 0 .../settings_account.html} | 0 .../settings_field_acl.html} | 0 .../settings_hub.html} | 0 .../settings_model_acl.html} | 0 .../templates/partials/apps_module.html | 67 ++++++++++++++++++ core/engine/templates/partials/auth_head.html | 8 +++ .../home_hub.html} | 8 --- .../templates/partials/login_brand_aside.html | 34 ++++++++++ .../engine/templates/partials/menu_icons.html | 7 ++ .../templates/{ => portal}/portal_home.html | 0 .../templates/{ => portal}/portal_share.html | 0 core/server/web/login.go | 37 ++++++---- core/server/web/portal_handlers.go | 5 +- core/server/web/setup_handlers.go | 13 ++-- core/server/web/shell_render.go | 7 +- core/server/web/web_constants.go | 23 +++---- 24 files changed, 189 insertions(+), 170 deletions(-) create mode 100644 core/engine/templates/README.md rename core/engine/templates/{app_logs_inner.html => pages/app_logs.html} (100%) rename core/engine/templates/{apps_inner.html => pages/apps.html} (81%) rename core/engine/templates/{home_dashboard_inner.html => pages/home_dashboard.html} (100%) rename core/engine/templates/{settings_account_inner.html => pages/settings_account.html} (100%) rename core/engine/templates/{settings_field_acl_inner.html => pages/settings_field_acl.html} (100%) rename core/engine/templates/{settings_hub_inner.html => pages/settings_hub.html} (100%) rename core/engine/templates/{settings_model_acl_inner.html => pages/settings_model_acl.html} (100%) create mode 100644 core/engine/templates/partials/apps_module.html create mode 100644 core/engine/templates/partials/auth_head.html rename core/engine/templates/{shell_partials.html => partials/home_hub.html} (75%) create mode 100644 core/engine/templates/partials/login_brand_aside.html create mode 100644 core/engine/templates/partials/menu_icons.html rename core/engine/templates/{ => portal}/portal_home.html (100%) rename core/engine/templates/{ => portal}/portal_share.html (100%) diff --git a/core/engine/render/page.go b/core/engine/render/page.go index 0471360..3becbe0 100644 --- a/core/engine/render/page.go +++ b/core/engine/render/page.go @@ -13,16 +13,14 @@ func RenderPage(ctx context.Context, templatesDir string, data PageData, bootstr if len(data.SWCBootstrapJSON) == 0 { data.SWCBootstrapJSON = BuildSWCBootstrapJSON(ctx, data, bootstrapWorkspace) } - tmpl, err := template.ParseFiles( - filepath.Join(templatesDir, "base.html"), - filepath.Join(templatesDir, "shell_partials.html"), - ) + paths := ShellLayoutTemplateFiles(templatesDir) + tmpl, err := template.ParseFiles(paths...) if err != nil { return "", err } var buf bytes.Buffer // Must execute the layout by name: the partials file only defines {{template "sumMenuIcon"}}. - if err := tmpl.ExecuteTemplate(&buf, "base.html", data); err != nil { + if err := tmpl.ExecuteTemplate(&buf, filepath.Base(TemplateShellBase), data); err != nil { return "", err } return buf.String(), nil diff --git a/core/engine/templates/README.md b/core/engine/templates/README.md new file mode 100644 index 0000000..c20ed13 --- /dev/null +++ b/core/engine/templates/README.md @@ -0,0 +1,17 @@ +# Engine HTML templates + +Root path: `core/engine/templates` (`templates_path` in config). Relative paths are defined in [`render/templates_paths.go`](../render/templates_paths.go). + +| Folder | Role | Loaded by | +|--------|------|-----------| +| `shell/` | Authenticated app chrome (`base.html`) | `render.RenderPage` | +| `partials/` | Shared `{{define}}` fragments (menu icons, home hub, apps forms, login brand, auth assets) | Parsed with shell layout, shell inner pages, or auth pages | +| `pages/` | Main column HTML injected into `base.html` | `web.renderShellPage` / `executeInnerTemplate` | +| `auth/` | Standalone login, TOTP, setup wizards | `web.getAuthTemplate`, setup handler | +| `portal/` | Portal home and share pages | `web.loadPortalTemplates` | + +## Parse sets + +- **Shell layout:** `shell/base.html` + `partials/menu_icons.html` +- **Shell inner page:** `pages/.html` + menu, home hub, and apps partials +- **Auth page:** `auth/.html` + `partials/login_brand_aside.html` + `partials/auth_head.html` diff --git a/core/engine/templates/auth/login.html b/core/engine/templates/auth/login.html index fb49d7b..e6a3683 100644 --- a/core/engine/templates/auth/login.html +++ b/core/engine/templates/auth/login.html @@ -4,32 +4,11 @@ Sign in — {{.AppName}} - {{range .Stylesheets}} - - {{end}} - - - + {{template "auth_head_assets" .}}