Captions: add German and Portuguese, make them findable, and fix the dead "Add mine" button
Three things. GERMAN AND PORTUGUESE. Marty's call, and the right one: the translation cache only shows who is already here, not who Manson is bringing. Manson knows his audience, so Portuguese goes in even though site data ranks German above it. All five videos now carry English, Italian, French, Spanish, German and Portuguese. Disclaimers checked by hand in the two new languages: "Es wird kein Einkommen garantiert" and "Nenhuma renda e garantida". FINDABILITY. Marty went looking for the multilingual feature on his own training page and could not find it, because the first build leaned on the native CC control and nothing switches on for an English reader. A feature nobody can find is not shipped. Every captioned player now carries a visible row of subtitle chips underneath, named in their own language, with an Off option. Captions still stay off by default for an English reader and still turn themselves on for anyone who already picked a language with the globe button; the chips just make the choice visible instead of buried. THE DEAD BUTTON. The inbox banner's "Add mine" shipped with NO click handler, so it rendered and did absolutely nothing. That is why Marty could not add his address while connected to the right wallet: nothing was listening. It now opens the same optional profile dialog and re-renders when it completes. Tests: gate-e2e 38 (up from 33, and rendering that button is explicitly not the test any more, it has to actually open the dialog), captions-e2e 158 across six languages including the new chip behaviour, clicking one and turning them back off. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -93,6 +93,16 @@ t('no modal for the member without contact details', !(await modalOpen(p3)));
|
||||
const body3 = await p3.evaluate(() => document.body.innerText.replace(/\s+/g, ' '));
|
||||
t('the inbox explains why it needs an address', /Messages reach you here only/i.test(body3), body3.slice(0, 140));
|
||||
t('the inbox ask is phrased as optional', /Optional, private, removable/i.test(body3));
|
||||
// Marty, 2026-09-17: this button shipped with NO click handler and did nothing at all.
|
||||
// Rendering it is not the test; it has to actually open the dialog.
|
||||
t('the inbox "Add mine" button exists', await p3.evaluate(() => !!document.getElementById('msgAddContact')));
|
||||
await p3.click('#msgAddContact').catch(() => {});
|
||||
await p3.waitForTimeout(1400);
|
||||
t('"Add mine" actually opens the profile dialog', await modalOpen(p3), 'button did nothing');
|
||||
t('and that dialog uses the inbox wording', /inbox needs somewhere to reach you|reach you off the site/i.test(await cardText(p3)) || /username/i.test(await cardText(p3)), await cardText(p3));
|
||||
t('and it can be closed', await p3.evaluate(() => !!document.getElementById('pgClose')));
|
||||
await p3.click('#pgClose').catch(() => {}); await p3.waitForTimeout(500);
|
||||
t('closing it leaves the inbox usable', !(await modalOpen(p3)));
|
||||
|
||||
// ---------- 4. nothing changed for visitors or shared links ----------
|
||||
const anon = await ctxFor(null); const p4 = await anon.newPage();
|
||||
|
||||
Reference in New Issue
Block a user