feat(notes): [[note]] is an inline link, not bracketed text
Choosing a note from the [[ completion wrote [[Title]] as plain text. It made a real link behind the scenes — it showed in the panel under the note — but in the note itself it stayed brackets, and "it doesn't become a link" is exactly how that reads. A wiki link is a link where it is written. Now a [[note]] renders inline as the title, in the accent colour, and a click on it opens the note it points at. It is atomic — contenteditable="false" — so it moves and deletes as one thing and a click is a click, not a caret landing mid-word. And it appears the moment it is chosen: the completion drops the finished link in, brackets and all swallowed, rather than text waiting to become a link when the note is next opened. The seam holds both ways: markdownToHtml lifts [[title]] into the link the same way it already lifts an image, and htmlToMarkdown reads the link back to [[title]] by the title it carries — so what is on disk is still the same Markdown, and a note opened, saved and reopened is unchanged. e2e: choosing a note writes an inline link, it survives the round-trip through Markdown and a reload, and clicking it opens the note it names. Full suite green. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
b07938e351
commit
8022502015
+13
-6
@@ -2638,21 +2638,28 @@ test('[[ foreslår en note, og linket lander i noten', async ({ page }) => {
|
||||
|
||||
await page.getByRole('button', { name: 'Ny note' }).click();
|
||||
await ed.click();
|
||||
await page.keyboard.type('Mine planer');
|
||||
await page.keyboard.press('Enter');
|
||||
await page.keyboard.type('Se ');
|
||||
await page.keyboard.type('[[Rejse');
|
||||
|
||||
// The picker offers the note by title, and choosing it closes the brackets.
|
||||
// The picker offers the note by title, and choosing it turns the text into a
|
||||
// real inline link — the title, not the brackets.
|
||||
const option = page.locator('.suggestions button', { hasText: 'Rejseplan til Berlin' });
|
||||
await expect(option).toBeVisible();
|
||||
await option.click();
|
||||
await expect(ed).toContainText('[[Rejseplan til Berlin]]');
|
||||
const inline = ed.locator('a.notelink', { hasText: 'Rejseplan til Berlin' });
|
||||
await expect(inline).toBeVisible();
|
||||
|
||||
// And the link is real: it turns up in the note's links, not just as text.
|
||||
// It survives the round-trip through Markdown and a reload.
|
||||
await ed.blur();
|
||||
await expect(page.locator('.links')).toContainText('Rejseplan til Berlin');
|
||||
await page.waitForTimeout(900);
|
||||
await page.reload();
|
||||
await page.getByRole('button', { name: /Mine planer/ }).click();
|
||||
await expect(ed.locator('a.notelink', { hasText: 'Rejseplan til Berlin' })).toBeVisible();
|
||||
|
||||
// And it is a link you can follow: clicking the chip opens the note it names.
|
||||
await page.locator('.links .link', { hasText: 'Rejseplan til Berlin' }).click();
|
||||
// And it is a link you can follow: clicking it opens the note it names.
|
||||
await ed.locator('a.notelink', { hasText: 'Rejseplan til Berlin' }).click();
|
||||
await expect(ed.locator('h1')).toHaveText('Rejseplan til Berlin');
|
||||
|
||||
expect(trouble).toEqual([]);
|
||||
|
||||
Reference in New Issue
Block a user