// mode.js — picks table-mode vs form-mode at boot time and unhides the // matching container. Both apps (tablesApp, formApp) ship in the same // bundle but each only paints when its container is visible. // // Decision rule: // //table.html → table mode // //form.html → form mode (empty / create) // //.yaml.html → form mode (re-edit) // anything else / file:// → table mode (legacy default; tables tool // was the original consumer of this bundle) // // In offline / file:// mode the inline-context placeholders decide: // whichever blob is non-empty wins. Tests that inject only // #form-context render in form mode; tests that inject only // #table-context render in table mode. (function () { 'use strict'; function modeFromUrl() { const path = String((typeof location !== 'undefined' && location.pathname) || ''); if (/\/form\.html$/.test(path) || /\.yaml\.html$/.test(path)) { return 'form'; } if (/\/table\.html$/.test(path)) { return 'table'; } return null; // unknown — will be decided once DOM is parsed. } function readInline(id) { const el = document.getElementById(id); if (!el) return null; try { return JSON.parse(el.textContent || '{}'); } catch (_) { return null; } } function modeFromInline() { // file:// or unrecognised URL — whichever inline-context blob is // non-empty wins. Tests that inject only #form-context render in // form mode; tests that inject only #table-context render in // table mode. Default to table for legacy compatibility. const formCtx = readInline('form-context'); if (formCtx && Object.keys(formCtx).length > 0) { return 'form'; } return 'table'; } // Best-effort synchronous decision so per-app boot guards can read // window.zddcMode without waiting for DOM. URL-based decision is // always known up-front; inline-context fallback only matters for // file:// and is finalized at DOMContentLoaded. window.zddcMode = modeFromUrl() || 'table'; function activate() { if (modeFromUrl() == null) { window.zddcMode = modeFromInline(); } const tableEl = document.getElementById('table-mode'); const formEl = document.getElementById('form-mode'); if (window.zddcMode === 'form' && formEl) { formEl.hidden = false; } else if (tableEl) { tableEl.hidden = false; } } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', activate, { once: true }); } else { activate(); } })();