mirror of
https://github.com/got-feedBack/feedBack.git
synced 2026-07-26 23:01:22 +00:00
Some checks are pending
ship-ci / ci (push) Waiting to run
* feat(v3): add a handedness (left-handed) choice to the instrument selector + onboarding Left-handed players could already mirror the highway, but only via a buried Settings toggle they had to find AFTER setup -- so a lefty went through the tour, the tuner and calibration all right-handed first (community callout). Add a "Handedness: Right / Left" row to the v3 instrument badge popover, alongside Instrument / Strings / Tuning (all player-orientation choices). It writes the same lefty preference -- highway.setLefty when a live highway exists (flips it immediately + persists), else the 'lefty' localStorage key the highway reads on init -- and keeps the Settings "Left-handed" checkbox in sync. The first-run tour's "Choose your instrument" step, which runs before the tuner/audio- calibration steps, now calls it out so lefties flip it up front. Frontend-only, additive. Full core JS suite green (938). Tests: tests/js/badges_handedness.test.js. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UR2Cr7GEu3yMY7SrfxH6c1 * docs: split the spliced Handedness/Colorblind CHANGELOG entries A rebase pasted the Handedness bullet over the Colorblind preset entry's bold lead, merging two unrelated Added entries into one run-on bullet. Restore them as two separate bullets. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Co-authored-by: byrongamatos <xasiklas@gmail.com>
48 lines
2.4 KiB
JavaScript
48 lines
2.4 KiB
JavaScript
// Pins the onboarding handedness control: a Right/Left choice lives in the
|
|
// instrument selector (the "Choose your instrument" onboarding step, which the
|
|
// tour spotlights BEFORE the tuner/audio-calibration steps) and writes the
|
|
// highway 'lefty' preference. Source-level, matching the other tests/js/
|
|
// browser-heavy regression guards (the runtime path is DOM/WebGL-heavy).
|
|
|
|
const { test } = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
const fs = require('node:fs');
|
|
const path = require('node:path');
|
|
|
|
const ROOT = path.join(__dirname, '..', '..');
|
|
const BADGES = fs.readFileSync(path.join(ROOT, 'static', 'v3', 'badges.js'), 'utf8');
|
|
const TOUR = fs.readFileSync(path.join(ROOT, 'static', 'v3', 'onboarding-tour.js'), 'utf8');
|
|
|
|
test('instrument selector offers a Handedness Right/Left choice', () => {
|
|
assert.match(BADGES, /instRow\('Handedness'/, 'a Handedness row must be in the instrument menu');
|
|
assert.match(BADGES, /pill\('hand',\s*'right'/, 'Right handedness pill');
|
|
assert.match(BADGES, /pill\('hand',\s*'left'/, 'Left handedness pill');
|
|
});
|
|
|
|
test('clicking a handedness pill writes the lefty preference from its value', () => {
|
|
assert.match(
|
|
BADGES,
|
|
/\[data-pill="hand"\][\s\S]*?_setLeftyPref\(\s*b\.getAttribute\('data-val'\)\s*===\s*'left'\s*\)/,
|
|
'the handedness click handler sets lefty from the pill value');
|
|
});
|
|
|
|
test('_setLeftyPref prefers highway.setLefty and falls back to the lefty localStorage key', () => {
|
|
const setter = BADGES.match(/function _setLeftyPref\(on\)\s*\{[\s\S]*?\n \}/);
|
|
assert.ok(setter, '_setLeftyPref must exist');
|
|
assert.match(setter[0], /highway\.setLefty/, 'prefers highway.setLefty (flips a live highway + persists)');
|
|
assert.match(setter[0], /localStorage\.setItem\('lefty'/, 'falls back to the lefty localStorage key the highway reads on init');
|
|
});
|
|
|
|
test('_leftyPref reads highway.getLefty with a localStorage fallback', () => {
|
|
assert.match(
|
|
BADGES,
|
|
/function _leftyPref\(\)\s*\{[\s\S]*?getLefty[\s\S]*?localStorage\.getItem\('lefty'\)/,
|
|
'_leftyPref reads the current handedness with a storage fallback');
|
|
});
|
|
|
|
test('onboarding instrument step calls out left-handed players + the Handedness control', () => {
|
|
assert.match(TOUR, /Choose your instrument/);
|
|
assert.match(TOUR, /left-handed/i, 'the instrument step must call out left-handed players');
|
|
assert.match(TOUR, /Handedness/, 'and name the Handedness control');
|
|
});
|