← back to Apartmentwallpaper

public/page-theme.js

34 lines

/* Shared page-theme toggle wiring (Steve 2026-06-01). Loaded with `defer` on every
   page. The render-blocking FOUC guard (inline <head> script) already set
   data-page-theme / data-theme-preview before paint; this only injects + wires the
   toggle UI, which is CSS-hidden until preview mode, so late injection never flashes.
   Reads/writes localStorage('wallco-page-theme') — same key as wallco.ai. */
(function(){
  var bar = document.createElement('div');
  bar.id = 'page-theme-toggle';
  bar.setAttribute('role','group');
  bar.setAttribute('aria-label','Page theme');
  bar.innerHTML =
    '<button type="button" data-theme="theme1" aria-pressed="false">Theme 1</button>' +
    '<button type="button" data-theme="theme2" aria-pressed="false">Theme 2</button>';
  document.body.appendChild(bar);

  var cur = document.documentElement.getAttribute('data-page-theme') || 'theme1';
  var btns = bar.querySelectorAll('button');
  function sync(t){ btns.forEach(function(b){ b.setAttribute('aria-pressed', b.dataset.theme === t ? 'true' : 'false'); }); }
  sync(cur);

  btns.forEach(function(b){
    b.addEventListener('click', function(){
      var t = b.dataset.theme;
      var de = document.documentElement;
      de.setAttribute('data-page-theme', t);
      // Clicking the toggle is an explicit opt-in → keep it visible (sticky) so the
      // user can switch back; otherwise picking Theme 1 would hide the control.
      de.setAttribute('data-theme-preview','on');
      try { localStorage.setItem('wallco-page-theme', t); } catch(e){}
      sync(t);
    });
  });
})();