diff --git a/web/e2e/smoke.spec.js b/web/e2e/smoke.spec.js index 0f60037..f5dbb37 100644 --- a/web/e2e/smoke.spec.js +++ b/web/e2e/smoke.spec.js @@ -5035,6 +5035,47 @@ test('et klik væk fra en kodeblok skriver ikke dens linjer sammen', async ({ pa expect(trouble).toEqual([]); }); +/** + * ⌘B gør teksten fed i en note — den folder ikke sidebjælken. + * + * Fladen tog ⌘B til sidebjælken med den begrundelse, at den "ikke flytter noget i + * feltet". Det passer for et , hvor ⌘B ikke gør noget. I en contenteditable + * ER ⌘B fed tekst, og `preventDefault()` stoppede browseren i at gøre den — så i + * noterne foldede menuen sig, hver gang man ville fremhæve et ord. + * + * Begge halvdele måles. En rettelse, der bare holdt op med at folde, ville være + * halvt færdig: ordet skal også blive fedt. + */ +test('⌘B gør teksten fed i en note i stedet for at folde sidebjælken', async ({ page }) => { + const trouble = watchForTrouble(page); + await page.goto('/noter'); + + const foldet = () => page.locator('.shell.sidebar-collapsed').count(); + expect(await foldet()).toBe(0); + + await nyNote(page); + await page.keyboard.type('Fremhævet'); + await page.keyboard.press('Enter'); + await page.keyboard.type('ordet'); + await page.keyboard.press('ControlOrMeta+a'); + + const ed = page.getByRole('textbox', { name: 'Notens tekst' }); + await page.keyboard.press('ControlOrMeta+b'); + + // Enten eller : browserens egen fed er , omformeren skriver + // , og begge læses som fed på vejen tilbage. + await expect(ed.locator('b, strong')).toContainText('ordet'); + expect(await foldet()).toBe(0); + + // Og uden for et skrivefelt gør den stadig det, den er sat til. + await page.getByRole('heading', { name: 'Noter' }).click(); + await page.keyboard.press('ControlOrMeta+b'); + expect(await foldet()).toBe(1); + await page.keyboard.press('ControlOrMeta+b'); + + expect(trouble).toEqual([]); +}); + /** * Flere markerede afsnit bliver til ÉN monotypeblok — ikke kun det øverste. * diff --git a/web/src/routes/+layout.svelte b/web/src/routes/+layout.svelte index 17f67df..b311528 100644 --- a/web/src/routes/+layout.svelte +++ b/web/src/routes/+layout.svelte @@ -130,8 +130,20 @@ // Folding the sidebar had a button and nothing else, and a rectangle with a // line down it is not a word: somebody who wanted the menu out of the way // asked for the feature that was already there. ⌘B is where an editor puts - // it. Works while typing as well — it moves nothing in the field. - if ((event.metaKey || event.ctrlKey) && (event.key === 'b' || event.key === 'B')) { + // it. + // + // Men ikke i en rig editor. Her stod der "works while typing as well — it + // moves nothing in the field", og det passer for et , hvor ⌘B ikke + // gør noget. I en contenteditable ER ⌘B fed tekst, og `preventDefault()` + // nedenfor stoppede browseren i at gøre den — så i noterne foldede + // sidebjælken sig i stedet for at gøre ordet fedt. Feltet, markøren står i, + // har førsteret til en tast, det selv bruger. + const writing = el?.isContentEditable || el?.closest?.('[contenteditable="true"]'); + if ( + (event.metaKey || event.ctrlKey) && + (event.key === 'b' || event.key === 'B') && + !writing + ) { event.preventDefault(); sidebar.toggle(); return;