From ccedd2f767bb449a9b6ce07c6278a013a7f99ea1 Mon Sep 17 00:00:00 2001 From: Mark Boas Date: Sat, 11 Jul 2026 18:47:27 +0200 Subject: [PATCH 1/2] Add the wordArr re-index regression test (#394) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Belongs with 9d8867e — the spec change was left unstaged when that commit staged only editor-core.js. --- __TEST__/e2e/span-merge.spec.mjs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/__TEST__/e2e/span-merge.spec.mjs b/__TEST__/e2e/span-merge.spec.mjs index 96ded15..7bd94d9 100644 --- a/__TEST__/e2e/span-merge.spec.mjs +++ b/__TEST__/e2e/span-merge.spec.mjs @@ -81,6 +81,27 @@ test('retyping a word\'s first letter reflows the leaked char back, keeping orig expect(r.editor).toEqual({ t: 'Editor ', m: r.orig.editorM, d: r.orig.editorD }); }); +test('splitting a word re-indexes the player wordArr so the new spans can highlight', async ({ page }) => { + // A stale wordArr is why split words don't highlight; after a split (span + // count changes) the editor must rebuild it to match the DOM (#394). + const r = await page.evaluate(() => { + const t = document.querySelector('#hypertranscript'); + const inst = window.hyperaudioInstance; + const domBefore = t.querySelectorAll('span[data-m]').length; + const span = [...t.querySelectorAll('span[data-m]')].find((s) => s.textContent.trim() === 'makes'); + span.textContent = 'ma kes '; // add a space -> split on blur + t.dispatchEvent(new Event('blur')); + const domNodes = [...t.querySelectorAll('span[data-m]')]; + const arrNodes = inst.wordArr.map((w) => w.n); + return { + grew: t.querySelectorAll('span[data-m]').length === domBefore + 1, + arrMatchesDom: arrNodes.length === domNodes.length && domNodes.every((n) => arrNodes.includes(n)), + }; + }); + expect(r.grew).toBe(true); + expect(r.arrMatchesDom).toBe(true); +}); + test('a clean transcript is untouched on blur (no spurious merges)', async ({ page }) => { const { before, after } = await page.evaluate(() => { const t = document.querySelector('#hypertranscript'); From a34fe91cd3c93f2b9d78a39da8a9e444107f3c20 Mon Sep 17 00:00:00 2001 From: Mark Boas Date: Sat, 11 Jul 2026 18:47:27 +0200 Subject: [PATCH 2/2] Accessibility: labels, ARIA tab roles, modal keyboard operability, contrast (#402) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Form labels: - media file inputs (all five engines): drop title="", add aria-label - Recents load select: aria-label; Model/Language span headings become real