diff --git a/lib/WiFiManager/include/WiFiManagerServer.h b/lib/WiFiManager/include/WiFiManagerServer.h index d77bd22..4b89ff3 100644 --- a/lib/WiFiManager/include/WiFiManagerServer.h +++ b/lib/WiFiManager/include/WiFiManagerServer.h @@ -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 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 customizer = nullptr); + // Create server instance void createServer(uint16_t port); @@ -93,6 +109,7 @@ class WiFiManagerServer { // Shared DFTE placeholder registry std::unique_ptr _tplRegistry; + std::function _tplSetupCallback; // Singleton instance static WiFiManagerServer* s_instance; diff --git a/lib/WiFiManager/include/templates/RootSelector.h b/lib/WiFiManager/include/templates/RootSelector.h new file mode 100644 index 0000000..21ed0e8 --- /dev/null +++ b/lib/WiFiManager/include/templates/RootSelector.h @@ -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_ + + diff --git a/lib/WiFiManager/src/WiFiManagerHandlers.cpp b/lib/WiFiManager/src/WiFiManagerHandlers.cpp index 792fccc..bcf501e 100644 --- a/lib/WiFiManager/src/WiFiManagerHandlers.cpp +++ b/lib/WiFiManager/src/WiFiManagerHandlers.cpp @@ -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 #if defined(ESP8266) || defined(ESP32) diff --git a/lib/WiFiManager/src/WiFiManagerServer.cpp b/lib/WiFiManager/src/WiFiManagerServer.cpp index df7679f..a97ad0c 100644 --- a/lib/WiFiManager/src/WiFiManagerServer.cpp +++ b/lib/WiFiManager/src/WiFiManagerServer.cpp @@ -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 customizer) { + _tplRegistry = std::unique_ptr(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) {