Portal customization API v2, SPA hardening, and test cleanup

- Group portal state into brand/pages/actions/layout structs; portal* API
- Bootstrap JSON: nested brand/context/pages/actions/layout; param kind
- Handlers: PROGMEM default CSS when no override/append; dynamic CSS path
- PortalAppJS: portal timeout countdown; safe WiFi scan DOM; serialized
  scan-status polling; fetch error handling; wm:view-changed on redirects
- CSS: scan list icon alignment; wm-status for timeout
- Tests: remove low-value/no-op tests; trim fragile JS substring checks
This commit is contained in:
2026-05-04 22:03:43 +10:00
parent 93711d981d
commit 7735d7f0cb
22 changed files with 1039 additions and 326 deletions
@@ -70,7 +70,7 @@ void test_parameter_add_and_retrieve() {
// 1. Add parameters
WiFiManagerParameter param("server", "Server", "default", 40);
wm.addParameter(&param);
wm.portalAddParameter(&param);
TEST_ASSERT_EQUAL(1, wm.getParametersCount());
@@ -135,8 +135,8 @@ void test_portal_with_parameters_and_infrastructure() {
// Add parameters
WiFiManagerParameter p1("server", "Server", "192.168.1.1", 40);
WiFiManagerParameter p2("port", "Port", "1883", 6);
wm.addParameter(&p1);
wm.addParameter(&p2);
wm.portalAddParameter(&p1);
wm.portalAddParameter(&p2);
// Start portal
wm.startConfigPortal("TestAP");