CMMS fork: Phase 6 polish — schema.html light theme + load-time IndexedDB wipe
- cmms-bridge.js: wipeProjectData() clears the project object stores (devices, boards, components, images, overlappedImages, nets, schemas, schemaComponents — not the KiCad symbol library) and resets studio.js's shared globals before the CMMS attachment ZIP is imported. The ZIP is the single source of truth for a CMMS board, so restoreDevice()'s merge path (which only de-dupes on a newer meta.lastModified, absent on CMMS-created boards) no longer accretes duplicate image/net rows across repeated opens. init() also stamps data-theme=light as well as =dark. All gated on PCBRETRACE_CONFIG — standalone untouched. - schema.html: inline head script mirrors ?theme=light|dark (passed by studio.js on the iframe src) onto <html> and, for light, injects cmms-schema-light.css. Full no-op with no ?theme=. - cmms-schema-light.css (new): [data-theme="light"]-gated override of schema.html's :root palette for the CMMS light theme. Canvas stays dark. - studio.js: append ?theme=<active> to the schema.html iframe src. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
parent
514551c9f2
commit
eeb2af1e15
4 changed files with 84 additions and 2 deletions
|
|
@ -350,10 +350,45 @@
|
|||
trace('ensureBoard: created a starter board');
|
||||
}
|
||||
|
||||
// Working-data stores restoreDevice() / processImportData() write into. The
|
||||
// KiCad symbol-library stores (kicadSymbols, symbolTypes, componentTypes*,
|
||||
// pinDirections) are reference data and expensive to rebuild — leave them.
|
||||
const CMMS_PROJECT_STORES = ['devices', 'boards', 'components', 'images',
|
||||
'overlappedImages', 'nets', 'schemas', 'schemaComponents'];
|
||||
|
||||
// The .pcbretrace.zip attachment is the single source of truth for a CMMS
|
||||
// board — there is no local working copy to preserve between sessions. Clear
|
||||
// the project stores before importing so restoreDevice() starts from empty
|
||||
// and can't accrete duplicate image / net rows across repeated opens in the
|
||||
// same browser (its merge path only de-dupes when timestamps say the import
|
||||
// is newer, and CMMS-created boards carry no lastModified).
|
||||
async function wipeProjectData() {
|
||||
if (!db || !db.db) return;
|
||||
const stores = CMMS_PROJECT_STORES.filter(s => db.db.objectStoreNames.contains(s));
|
||||
if (stores.length) {
|
||||
await new Promise((res, rej) => {
|
||||
const tx = db.db.transaction(stores, 'readwrite');
|
||||
stores.forEach(s => tx.objectStore(s).clear());
|
||||
tx.oncomplete = () => res();
|
||||
tx.onerror = () => rej(tx.error);
|
||||
tx.onabort = () => rej(tx.error || new Error('wipe aborted'));
|
||||
});
|
||||
}
|
||||
// studio.js caches these in shared globals — reset so a fresh import (or
|
||||
// ensureBoard) doesn't reuse a now-deleted device/board.
|
||||
deviceList = []; bomList = []; bomData = []; bomImages = [];
|
||||
currentDeviceId = null; currentBomId = null; currentImgId = null;
|
||||
trace('wipeProjectData: cleared', stores.join(', ') || '(none)');
|
||||
}
|
||||
|
||||
async function init() {
|
||||
if (CFG.dark) document.documentElement.setAttribute('data-theme', 'dark');
|
||||
// Set light explicitly too (not just dark) so studio.js can tell a CMMS
|
||||
// embed from standalone use and pass the theme to the schema.html iframe.
|
||||
document.documentElement.setAttribute('data-theme', CFG.dark ? 'dark' : 'light');
|
||||
injectControls();
|
||||
|
||||
try { await wipeProjectData(); } catch (e) { trace('wipeProjectData threw:', e && e.message); }
|
||||
|
||||
if (CFG.loadUrl) {
|
||||
status('Loading board…');
|
||||
try {
|
||||
|
|
|
|||
Loading…
Reference in a new issue