mirror of
https://github.com/got-feedBack/feedBack.git
synced 2026-08-12 03:41:40 +00:00
window.h3dSetFretSpacing was the only 3D-highway setting that applied via location.reload(). The SPA boots with #home as the active screen and has no restore-last-screen mechanism, so the reload ejected the user from Settings onto the home screen. Apply it live like every other 3D-highway setting: rebind the module-scope _h3dFretUniform flag (so panels mounted later this session pick up the new mode), recompute the two fretX-derived scalars baked at init (_fretLabelScaleRefW, FRET_WIDTH_MID), and broadcast a 'fretSpacing' change over the existing _bgEmitChange pub-sub so every mounted panel rebuilds its board via buildBoard(). Per-frame note geometry already reads fretX live. Settings copy updated (no longer reloads) and tests/js pin the no-reload / live-rebuild behavior. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
530995dd02
commit
fe8d30ce3e
@@ -42,3 +42,33 @@ test('h3dSetFretSpacing validates the mode against the two supported values', ()
|
||||
'h3dSetFretSpacing must coerce mode to a supported value before persisting',
|
||||
);
|
||||
});
|
||||
|
||||
test('h3dSetFretSpacing applies the change live, not via a page reload', () => {
|
||||
// A reload reboots the SPA to the home screen, ejecting the user from
|
||||
// Settings. The setter must instead rebind the spacing flag and broadcast
|
||||
// a 'fretSpacing' change so mounted panels rebuild in place — same path as
|
||||
// every other 3D-highway setting. Reintroducing location.reload() here is
|
||||
// the regression this guards against.
|
||||
const src = fs.readFileSync(SCREEN_JS, 'utf8');
|
||||
const setter = src.match(/window\.h3dSetFretSpacing\s*=\s*mode\s*=>\s*\{[\s\S]*?\n \};/);
|
||||
assert.ok(setter, 'h3dSetFretSpacing assignment must be present');
|
||||
assert.doesNotMatch(
|
||||
setter[0],
|
||||
/location\.reload/,
|
||||
'h3dSetFretSpacing must not reload the page (it ejects the user from Settings)',
|
||||
);
|
||||
assert.match(
|
||||
setter[0],
|
||||
/_bgEmitChange\(\s*'fretSpacing'\s*\)/,
|
||||
'h3dSetFretSpacing must broadcast a live fretSpacing change',
|
||||
);
|
||||
});
|
||||
|
||||
test('the fretSpacing change rebuilds a mounted board live', () => {
|
||||
const src = fs.readFileSync(SCREEN_JS, 'utf8');
|
||||
assert.match(
|
||||
src,
|
||||
/changedKey\s*===\s*'fretSpacing'[\s\S]*?if\s*\(fretG\)\s*buildBoard\(\)/,
|
||||
'the panel bg listener must rebuild the board when fretSpacing changes',
|
||||
);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user