[object Object]

← back to Chinoiseriewallpaper

header A-rebuild: dw-header.js wins fleet — patched to hide original header + corner-nav + v1, fix centered site-name (title fallback), add theme toggle; v1 removed from index

293d2158c1d7bc7ee017357739ed5c78312ad920 · 2026-06-01 14:49:48 -0700 · Steve Abrams

Files touched

Diff

commit 293d2158c1d7bc7ee017357739ed5c78312ad920
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Mon Jun 1 14:49:48 2026 -0700

    header A-rebuild: dw-header.js wins fleet — patched to hide original header + corner-nav + v1, fix centered site-name (title fallback), add theme toggle; v1 removed from index
---
 public/dw-header.js | 36 +++++++++++++++++++++++++++++++-----
 1 file changed, 31 insertions(+), 5 deletions(-)

diff --git a/public/dw-header.js b/public/dw-header.js
index 0f10a0b..39f29a5 100644
--- a/public/dw-header.js
+++ b/public/dw-header.js
@@ -31,7 +31,10 @@
             .replace(/\s+/g, ' ').trim()
             .replace(/\b\w/g, function (c) { return c.toUpperCase(); });
   }
-  var SITE_NAME = CFG.siteName || titleCase(STEM);
+  // digit-only STEM = localhost IP (127.0.0.1); fall back to <title> first segment
+  var SITE_NAME = CFG.siteName || (/^\d+$/.test(STEM)
+    ? ((document.title || '').split(/\s*[|–—-]\s*/)[0].trim() || titleCase(STEM))
+    : titleCase(STEM));
   var HOME = CFG.homeUrl || '/';
   var ACCENT = CFG.accent || (getComputedStyle(document.documentElement).getPropertyValue('--accent').trim()) || '#9B7B4F';
   var NAV = CFG.navLinks || [
@@ -82,6 +85,9 @@
     '.dwh-drawer a:last-child,.dwh-drawer button:last-child{border-bottom:0}',
     '.dwh-drawer a:hover,.dwh-drawer button:hover{background:rgba(245,241,232,.06)}',
     '.dwh-head{padding:10px 22px 8px;font-size:10px;letter-spacing:.22em;text-transform:uppercase;color:' + ACCENT + '}',
+    '.dwh-right{flex:1 1 0;display:flex;align-items:center;justify-content:flex-end;gap:12px}',
+    '.dwh-toggle{width:34px;height:34px;border-radius:50%;border:1px solid rgba(245,241,232,.25);background:transparent;color:#f5f1e8;cursor:pointer;font-size:14px;display:inline-flex;align-items:center;justify-content:center;padding:0;transition:all .15s}',
+    '.dwh-toggle:hover{border-color:' + ACCENT + ';color:' + ACCENT + '}',
   ].join('\n');
   document.head.appendChild(css);
 
@@ -94,13 +100,18 @@
       (isAdmin ? '<button type="button" class="dwh-burger dwh-admin" id="dwhAdmin" aria-label="Admin tools" aria-controls="dwhAdminDrawer" aria-expanded="false"><span></span><span></span><span></span></button>' : '') +
     '</div>' +
     '<a href="' + esc(HOME) + '" class="dwh-name">' + esc(SITE_NAME) + '</a>' +
-    '<div class="dwh-spacer"></div>' +
+    '<div class="dwh-right"><button type="button" class="dwh-toggle" id="dwhTheme" aria-label="Toggle light/dark theme" title="Toggle theme">☾</button></div>' +
     '<nav class="dwh-drawer" id="dwhNavDrawer" aria-label="Primary">' + linksHTML(NAV) + '</nav>' +
     (isAdmin ? '<nav class="dwh-drawer dwh-admin-drawer" id="dwhAdminDrawer" aria-label="Admin tools"><div class="dwh-head">Admin tools</div>' + linksHTML(ADMIN) + '<button type="button" data-act="logout">Sign out admin</button></nav>' : '');
 
-  // remove any pre-existing inline header so we don't double up
-  var old = document.querySelector('header.ns-header, header.dwh:not(:first-of-type)');
-  if (old && old.className.indexOf('dwh') === -1) old.style.display = 'none';
+  // Replace every pre-existing site header / corner-nav / inline hamburger so we
+  // don't double-stack. dw-header is the sole header now (Steve 2026-06-01: dw-header
+  // rebuild wins the fleet). Covers: inline <header> (any class but .dwh), the
+  // legacy ns-header, corner-nav pill, and the DW-HAMBURGER-NAV v1 fixed button/panel.
+  try {
+    document.querySelectorAll('header:not(.dwh), .ns-header, .cnav-wrap, #dwBurgerBtn, #dwBurgerPanel')
+      .forEach(function (el) { el.style.display = 'none'; });
+  } catch (e) {}
 
   document.body.insertBefore(header, document.body.firstChild);
 
@@ -126,4 +137,19 @@
     if (typeof window[act] === 'function') { e.preventDefault(); window[act](); }
   });
   document.addEventListener('keydown', function (e) { if (e.key === 'Escape') { close('dwhNavDrawer', 'dwhNav'); close('dwhAdminDrawer', 'dwhAdmin'); } });
+
+  // ---- theme toggle (self-contained; replaces the original header's toggle) ----
+  function applyTheme(t) {
+    document.documentElement.dataset.theme = t;
+    var b = document.getElementById('dwhTheme');
+    if (b) b.textContent = (t === 'dark') ? '☀' : '☾';   // ☀ when dark, ☾ when light
+  }
+  try { var savedT = localStorage.getItem('dwTheme'); if (savedT === 'dark' || savedT === 'light') applyTheme(savedT); else applyTheme(document.documentElement.dataset.theme || 'light'); } catch (e) {}
+  var themeBtn = document.getElementById('dwhTheme');
+  if (themeBtn) themeBtn.addEventListener('click', function () {
+    var cur = (document.documentElement.dataset.theme === 'dark') ? 'dark' : 'light';
+    var nxt = (cur === 'dark') ? 'light' : 'dark';
+    applyTheme(nxt);
+    try { localStorage.setItem('dwTheme', nxt); } catch (e) {}
+  });
 })();

← 6c0ac9e header: complete dw-header rebuild — remove old DW-HAMBURGER  ·  back to Chinoiseriewallpaper  ·  dw-header: hide ANY pre-existing <header> (not just ns-heade 831b2d7 →