mirror of
https://github.com/alexhopeoconnor/WiFiManager.git
synced 2026-10-15 15:41:21 +10:00
WiFiManager: add template customization hooks (callback, granular default registrations, rebuild); switch to RootSelector for overridable WM_ROOT_TEMPLATE; minor menu logic fixes
This commit is contained in:
@@ -64,6 +64,22 @@ class WiFiManagerServer {
|
||||
static const char* tplGetMenu();
|
||||
static const char* tplGetStatus();
|
||||
|
||||
// Template customization API
|
||||
// Consumers can register a callback to customize placeholders
|
||||
void registerTemplateSetupCallback(std::function<void(PlaceholderRegistry&)> cb) { _tplSetupCallback = cb; }
|
||||
|
||||
// Convenience helpers to register our defaults (granular + all)
|
||||
void registerDefaultStyles(PlaceholderRegistry& reg);
|
||||
void registerDefaultScripts(PlaceholderRegistry& reg);
|
||||
void registerDefaultPageTitle(PlaceholderRegistry& reg);
|
||||
void registerDefaultSubtitle(PlaceholderRegistry& reg);
|
||||
void registerDefaultMenu(PlaceholderRegistry& reg);
|
||||
void registerDefaultStatus(PlaceholderRegistry& reg);
|
||||
void registerDefaultPlaceholders(PlaceholderRegistry& reg);
|
||||
|
||||
// Rebuild registry with defaults and optional customizer
|
||||
void rebuildPlaceholderRegistry(std::function<void(PlaceholderRegistry&)> customizer = nullptr);
|
||||
|
||||
// Create server instance
|
||||
void createServer(uint16_t port);
|
||||
|
||||
@@ -93,6 +109,7 @@ class WiFiManagerServer {
|
||||
|
||||
// Shared DFTE placeholder registry
|
||||
std::unique_ptr<PlaceholderRegistry> _tplRegistry;
|
||||
std::function<void(PlaceholderRegistry&)> _tplSetupCallback;
|
||||
|
||||
// Singleton instance
|
||||
static WiFiManagerServer* s_instance;
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
/**
|
||||
* RootSelector.h
|
||||
* Allows overriding the root template header via build flag
|
||||
* Define WM_CUSTOM_ROOT_TEMPLATE_HEADER to a quoted header path.
|
||||
*/
|
||||
#ifndef _WM_ROOT_SELECTOR_H_
|
||||
#define _WM_ROOT_SELECTOR_H_
|
||||
|
||||
#ifdef WM_CUSTOM_ROOT_TEMPLATE_HEADER
|
||||
#include WM_CUSTOM_ROOT_TEMPLATE_HEADER
|
||||
#else
|
||||
#include "Root.h"
|
||||
#endif
|
||||
|
||||
#endif // _WM_ROOT_SELECTOR_H_
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
#include "templates/HTML.h"
|
||||
#include "templates/CSS.h"
|
||||
#include "templates/JS.h"
|
||||
#include "templates/Root.h"
|
||||
#include "templates/RootSelector.h"
|
||||
#include <TemplateEngine.h>
|
||||
|
||||
#if defined(ESP8266) || defined(ESP32)
|
||||
|
||||
@@ -66,6 +66,49 @@ const char* WiFiManagerServer::tplGetStatus() {
|
||||
return buf.c_str();
|
||||
}
|
||||
|
||||
void WiFiManagerServer::registerDefaultStyles(PlaceholderRegistry& reg) {
|
||||
reg.registerProgmemData("%STYLES%", CSS_STYLE);
|
||||
}
|
||||
|
||||
void WiFiManagerServer::registerDefaultScripts(PlaceholderRegistry& reg) {
|
||||
reg.registerProgmemData("%SCRIPTS%", JS_SCRIPT);
|
||||
}
|
||||
|
||||
void WiFiManagerServer::registerDefaultPageTitle(PlaceholderRegistry& reg) {
|
||||
reg.registerRamData("%PAGE_TITLE%", &WiFiManagerServer::tplGetPageTitle);
|
||||
}
|
||||
|
||||
void WiFiManagerServer::registerDefaultSubtitle(PlaceholderRegistry& reg) {
|
||||
reg.registerRamData("%SUBTITLE%", &WiFiManagerServer::tplGetSubtitle);
|
||||
}
|
||||
|
||||
void WiFiManagerServer::registerDefaultMenu(PlaceholderRegistry& reg) {
|
||||
reg.registerRamData("%MENU%", &WiFiManagerServer::tplGetMenu);
|
||||
}
|
||||
|
||||
void WiFiManagerServer::registerDefaultStatus(PlaceholderRegistry& reg) {
|
||||
reg.registerRamData("%STATUS%", &WiFiManagerServer::tplGetStatus);
|
||||
}
|
||||
|
||||
void WiFiManagerServer::registerDefaultPlaceholders(PlaceholderRegistry& reg) {
|
||||
registerDefaultStyles(reg);
|
||||
registerDefaultScripts(reg);
|
||||
registerDefaultPageTitle(reg);
|
||||
registerDefaultSubtitle(reg);
|
||||
registerDefaultMenu(reg);
|
||||
registerDefaultStatus(reg);
|
||||
}
|
||||
|
||||
void WiFiManagerServer::rebuildPlaceholderRegistry(std::function<void(PlaceholderRegistry&)> customizer) {
|
||||
_tplRegistry = std::unique_ptr<PlaceholderRegistry>(new PlaceholderRegistry(12));
|
||||
registerDefaultPlaceholders(*_tplRegistry);
|
||||
if (customizer) {
|
||||
customizer(*_tplRegistry);
|
||||
} else if (_tplSetupCallback) {
|
||||
_tplSetupCallback(*_tplRegistry);
|
||||
}
|
||||
}
|
||||
|
||||
void WiFiManagerServer::setupTemplateEngine() {
|
||||
// Initialize shared placeholder registry once
|
||||
if (!_tplRegistry) {
|
||||
@@ -74,15 +117,13 @@ void WiFiManagerServer::setupTemplateEngine() {
|
||||
_tplRegistry->clear();
|
||||
}
|
||||
|
||||
// Register PROGMEM assets
|
||||
_tplRegistry->registerProgmemData("%STYLES%", CSS_STYLE);
|
||||
_tplRegistry->registerProgmemData("%SCRIPTS%", JS_SCRIPT);
|
||||
// Register all default placeholders
|
||||
registerDefaultPlaceholders(*_tplRegistry);
|
||||
|
||||
// Register dynamic RAM getters
|
||||
_tplRegistry->registerRamData("%PAGE_TITLE%", &WiFiManagerServer::tplGetPageTitle);
|
||||
_tplRegistry->registerRamData("%SUBTITLE%", &WiFiManagerServer::tplGetSubtitle);
|
||||
_tplRegistry->registerRamData("%MENU%", &WiFiManagerServer::tplGetMenu);
|
||||
_tplRegistry->registerRamData("%STATUS%", &WiFiManagerServer::tplGetStatus);
|
||||
// Allow consumers to customize placeholders
|
||||
if (_tplSetupCallback) {
|
||||
_tplSetupCallback(*_tplRegistry);
|
||||
}
|
||||
}
|
||||
|
||||
void WiFiManagerServer::createServer(uint16_t port) {
|
||||
|
||||
Reference in New Issue
Block a user