mirror of
https://github.com/rowboatlabs/rowboat.git
synced 2026-07-12 21:02:17 +02:00
Quoted-chain detection only matched Gmail/Apple markup (.gmail_quote, .gmail_attr, blockquote[type=cite]). Outlook emits none of those, so hasQuote stayed false, no "•••" toggle rendered, and the whole quoted history was drawn inline — each message in a long thread re-rendering every message before it. Outlook desktop marks the boundary with a border-top:solid #E1E1E1 div that holds only the From:/Sent:/Subject: header; the quoted body trails it as siblings. Hiding just the matched element is therefore not enough, so mark the divider and everything after it, climbing ancestors. Require the header block before treating a border-top div as a boundary — signatures and marketing footers draw the same rule, and wrongly hiding a signature is worse than wrongly showing a quote. Measured against a 558-message local corpus: 7/7 real quotes caught, 0 false positives. Also fixes a pre-existing bug: a forward is quoted top to bottom, so hiding its quote left a blank body behind a toggle nobody would press. When nothing visible remains, show everything and drop the toggle. The plain-text path had the same Gmail-only hole, and the fix already existed in the file — isReplyQuoteBoundary handled Outlook headers but was wired only to the composer. It now backs display too. Quote tagging moves into the srcDoc build, so quotes are hidden on first paint and the measured iframe height is the collapsed height. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| .pnpm-store/v11 | ||
| apps | ||
| docs | ||
| packages | ||
| .gitignore | ||
| ANALYTICS.md | ||
| CODE_MODE_ENGINES_PLAN.md | ||
| eslint.config.mts | ||
| LIVE_NOTE.md | ||
| MINI_APPS_PLAN.md | ||
| package.json | ||
| pnpm-lock.yaml | ||
| pnpm-workspace.yaml | ||
| tsconfig.base.json | ||
| VIDEO_MODE.md | ||