Ask before opening a shared item in a message

The share address takes a plain form POST, which any website can make,
and the app opened whatever arrived straight into a composer. It now
shows what was shared -- the title, the start of the text and link, and
the file names -- and opens a message only when the reader chooses to.
Discarding drops it.

Confirm dialogs now put a message that is not plain text in a div, since
the summary has blocks of its own.

Three new strings, translated in all nine catalogs.
This commit is contained in:
2026-09-16 12:23:27 -07:00
parent 4c1ceca8e9
commit 191c4e7e68
16 changed files with 182 additions and 4 deletions
+14
View File
@@ -117,3 +117,17 @@ export function shareBody(share: Pick<SharedContent, "text" | "url">): string {
if (!url || text.includes(url)) return text;
return text ? `${text}\n\n${url}` : url;
}
/**
* What a share holds, in the few words the confirmation shows.
*
* Only what the reader needs to recognize it as theirs: the title, the start
* of the text or link, and the names of the files. It is shown before any of
* it goes near a message, because the page cannot tell a share the reader
* made from one a website posted at the same address (#375 review).
*/
export function shareSummary(share: SharedContent): { title: string; preview: string; files: string[] } {
const body = [share.text, share.url].map((s) => s.trim()).filter(Boolean).join(" ");
const preview = body.length > 160 ? `${body.slice(0, 157).trimEnd()}` : body;
return { title: share.title.trim(), preview, files: share.files.map((f) => f.name) };
}