Quotes that hold more than a sentence, and one list of marks
A quote may hold whole blocks, and they now have room: the rule that gives the writing its rhythm reaches only the editor's own children, so inside a quote a heading, a list and a closing line stood jammed together. Leaving as Markdown they were written on consecutive lines, which every other reader folds into one — the sentence after a quoted list became more of the last bullet. They are divided by a quoted blank line now, the same rule the top level has had since 11 August. The marks were two copies of one list, in two dialogs, and only one of them had ever been extended. One list, one grid, twice as many marks, divided under headings — and anything else can be typed into the search box, which on a phone is where the emoji keyboard lives. The changelog is a third of its length: one entry per day rather than one per image, since a round that repaired what an earlier round the same day broke reads as noise afterwards. Every digest is still listed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
c0523f3ba4
commit
c86c63922a
14 files changed
+742
-887
No files matched your search
@@ -295,6 +295,44 @@ try {
|
||||
await p.locator(".ProseMirror p").first().evaluate((e) => getComputedStyle(e).textAlign)
|
||||
);
|
||||
|
||||
/* ── a quote that holds more than a sentence ──
|
||||
* Markdown lets a quote hold whole blocks, and so does the editor. What it did
|
||||
* not do was give them any room: inside a quote nothing had a margin, so a
|
||||
* heading, a list and a closing line stood jammed together while the items of
|
||||
* the list were further apart than the blocks around them. */
|
||||
await createNote(p);
|
||||
await setTitle(p, "Zitat");
|
||||
await p.locator(".ProseMirror").click();
|
||||
await p.keyboard.type("> ### Quartalszahlen");
|
||||
await p.keyboard.press("Enter");
|
||||
await p.keyboard.type("- Umsatz");
|
||||
await p.keyboard.press("Enter");
|
||||
await p.keyboard.type("Gewinn");
|
||||
await p.keyboard.press("Enter");
|
||||
await p.keyboard.press("Enter");
|
||||
await p.keyboard.type("Alles nach Plan.");
|
||||
await p.waitForTimeout(1500);
|
||||
|
||||
const quoted = await p.evaluate(() =>
|
||||
[...(document.querySelector(".ProseMirror blockquote")?.children || [])].map((el) => {
|
||||
const r = el.getBoundingClientRect();
|
||||
return { tag: el.tagName, top: r.top, bottom: r.bottom };
|
||||
})
|
||||
);
|
||||
check(
|
||||
quoted.map((c) => c.tag).join(",") === "H3,UL,P",
|
||||
"a quote holds a heading, a list and a paragraph",
|
||||
quoted.map((c) => c.tag).join(",")
|
||||
);
|
||||
const gaps = quoted.slice(1).map((c, i) => Math.round(c.top - quoted[i].bottom));
|
||||
check(gaps.every((g) => g >= 6), "with room between them, as outside a quote", gaps.join(" | "));
|
||||
|
||||
/* And the same divide when it leaves as Markdown: written on consecutive
|
||||
lines, every other reader folds that closing line into the last bullet. */
|
||||
const quoteNote = (await api(p, "GET", "/notes")).body.find((n) => n.title === "Zitat");
|
||||
const quoteDoc = (await api(p, "GET", `/notes/${quoteNote.id}`)).body.content;
|
||||
check(/blockquote/.test(quoteDoc), "and it is stored as a quote");
|
||||
|
||||
/* ── the typeface follows the account ── */
|
||||
await p.getByTitle("Account").click();
|
||||
await p.waitForTimeout(800);
|
||||
|
||||
Reference in new issue
Block a user