Commit Graph
1578 Commits
Author SHA1 Message Date
Linus Rath f8157a92f4 fix: hide the via badge when it repeats the sender name 2026-10-11 20:07:05 +02:00
Shuki Vaknin 2a45f6099c fix: take a re-opened draft's body from its body parts only
A draft that carried attachments and no message re-opened with the
contents of one of the attachments as its text. Attach a .csv to an
empty draft, save it, re-open it: the editor shows the rows of the csv
as what you had written, and the next save or send makes that the real
message.

Both edit-draft paths built the text body by joining every value in
bodyValues:

    Object.values(draft.bodyValues).map(v => v.value).join('\n')

bodyValues is keyed by part id, and getEmail asks for
fetchAllBodyValues, which per RFC 8621 4.1.4 returns a value for every
text/* part of the message - attachments included. So any attached
.csv, .txt, .log or .md was joined in as body text, and with no html
body to prefer it became the whole message.

Take the body from the parts the server lists as the body instead, and
from nothing else. A draft whose textBody is empty now re-opens empty,
which is what an attachments-only draft is.

The selection lives in lib/email-body-selection.ts beside
getRenderableHtmlBody, which exists because the viewer and the mobile
thread view had already drifted apart once (#489). mail-app and the pro
email tab held character-for-character copies of this join, so the same
drift was already in place.
2026-10-11 18:04:26 +00:00
Shuki Vaknin 58a4041aaa fix: scroll the attachment list instead of burying the send button
Expanding a long attachment list made the composer unusable. With a few
dozen files, "+N" grew the chip row past the bottom of the composer: the
last rows were off-screen, the send toolbar went with them, and nothing
scrolled, so the only way out was to collapse the list again.

The row is a shrink-0 sibling of the body's scroll container, so every
pixel it takes comes out of the composer and out of nothing else, and it
has no scroller of its own. Collapsed that is fine - three chips and a
counter. Expanded, its height is the attachment count.

So bound it when it is expanded and let it scroll itself. 30vh keeps the
toolbar on screen on a laptop and still shows several rows; collapsed
behaviour is untouched, since three chips never needed a cap.

overscroll-contain stops a scroll that reaches the end of the list from
continuing into the message body behind it, which is the usual annoyance
once a small scroller appears next to a large one.
2026-10-11 18:04:26 +00:00
Linus Rath 54b74363e7 feat: offer one-click times in the Schedule send dialog 2026-10-11 20:03:42 +02:00
Linus Rath 46e4f8385c fix: mark quotes and list items in the plain-text part of sent mail 2026-10-11 20:00:47 +02:00
Linus Rath e9a37e14bd fix: close an autosaved draft without asking about unsaved changes 2026-10-11 19:57:10 +02:00
Linus Rath 935a410c8f fix: explain failed sends in plain words and keep toasts off the Send button 2026-10-11 19:54:02 +02:00
Linus Rath 2ae8c89990 fix: show the scheduled time rounded to the minute and with its date 2026-10-11 19:50:40 +02:00
Linus Rath 8e074503a3 fix: ask about a missing subject only once per message 2026-10-11 19:48:26 +02:00
Linus Rath eadcc2b481 fix: put the caret in the body when a reply opens 2026-10-11 19:46:36 +02:00
Linus Rath 39d299b720 fix: title the composer Reply, Reply All or Forward instead of New Message 2026-10-11 19:43:20 +02:00
Linus Rath 7aa35ca5b9 Merge branch 'main' of https://github.com/bulwarkmail/webmail 2026-10-11 19:42:32 +02:00
Linus Rath a4cc91c4fb fix: show one signature separator and keep its trailing space 2026-10-11 19:41:48 +02:00
Linus Rath 22ffc36ca9 feat: let plugins run a message-list search with a JMAP filter #1024 2026-10-11 19:39:58 +02:00
Linus Rath b361387cd9 fix: make Discard delete the draft, also one reopened from Scheduled 2026-10-11 19:21:52 +02:00
Linus Rath 67c5191b2c Merge branch 'main' of https://github.com/bulwarkmail/webmail 2026-10-11 19:18:57 +02:00
Linus Rath ef710c7b92 test: drop unused imports from the new composer tests 2026-10-11 19:18:19 +02:00
Linus Rath 31057af93d fix: stop the Continue draft banner from flashing after a send 2026-10-11 19:16:54 +02:00
Linus Rath e7237e1d05 feat: run saved rules on a folder from its context menu #1166 2026-10-11 19:16:51 +02:00
Linus Rath a5c60ef597 fix: hide Undo send when the delay is over and say when an undo fails 2026-10-11 19:13:10 +02:00
Linus Rath 1614cab78b fix: return to the message list after sending a new message on a phone 2026-10-11 19:04:02 +02:00
Linus Rath 7c21b0d0f9 Merge branch 'main' of https://github.com/bulwarkmail/webmail 2026-10-11 18:59:34 +02:00
Linus Rath 32f74e2083 fix: keep the quoted message when tabbing into a reply or forward 2026-10-11 18:58:55 +02:00
Linus Rath 9dc0f9c892 fix: label the composer toolbar buttons and group send options in a menu 2026-10-11 18:58:26 +02:00
Linus Rath 3efa370e42 fix: split typed addresses on commas and stop sends to invalid addresses 2026-10-11 18:55:46 +02:00
Linus Rath ab97ed2441 fix: add the highlighted suggestion on Enter instead of the typed text 2026-10-11 18:53:15 +02:00
Linus Rath fcc6c15227 fix: close the recipient suggestions once the typed address is added 2026-10-11 18:49:03 +02:00
Linus Rath 7401ea6658 fix: recolour mails for dark mode instead of inverting them
Dark mode used to invert the whole message body with a CSS filter and
re-invert images and coloured cells. Brand colours came out shifted
(red turned pink), white cells set through bgcolor stayed white, and
the result changed after loading remote content because the blocker
strips the background attributes the selectors relied on.

The rendered body is now read back through computed styles and its
colours are rewritten in place: light backgrounds are darkened in their
own hue, vivid and dark fills stay as sent, text and borders only change
when they lack contrast, and anything painted on a background image is
left alone. Transparent dark images get their original light background
behind them when their pixels show they would vanish. The thread
conversation view uses the same pass.

Also fixed along the way:
- blocking remote content dropped every leading `<style>` block, so
  mails lost their CSS until images were loaded
- a mail's `prefers-color-scheme` rules followed the OS instead of the
  app theme
2026-10-11 18:43:04 +02:00
Linus Rath d98f0684d9 test: click the My files breadcrumb in the file picker test 2026-10-11 18:12:14 +02:00
Linus Rath 89d8bcc453 fix: hide the paperclip in the list when a message only has inline images 2026-10-11 17:57:04 +02:00
Linus Rath face095a83 fix: align the contact sidebar header with the toolbar and use app buttons for its actions 2026-10-11 17:53:43 +02:00
Linus Rath 50771cd082 fix: close the composer after a plugin send and keep the draft when it fails #1207 2026-10-11 17:44:26 +02:00
Linus Rath 44bfb7ebfd fix: translate the new Files app strings and label the picker root My files 2026-10-11 17:29:30 +02:00
Linus Rath 5877b31879 fix: hide forward in filter rules when the server allows no redirects #1208 2026-10-11 17:28:20 +02:00
Linus Rath b846c7bf22 fix: make the contact more-actions menu look like the other menus 2026-10-11 17:22:16 +02:00
Linus Rath 6d518f1849 fix(contacts): show placeholders instead of "No contacts yet" while contacts load 2026-10-11 17:20:43 +02:00
Linus Rath b9d4d5ed7f feat: add search and Twemoji flags to the language picker 2026-10-11 17:16:54 +02:00
Linus Rath 93969a1371 fix: show a live sample on every date format and region option 2026-10-11 17:09:55 +02:00
Linus Rath efefbd1358 fix: show the resolved date format on the automatic region option 2026-10-11 17:04:19 +02:00
Linus Rath bf00ea27cf fix(files): show the loading skeleton instead of "No files yet" before the first listing 2026-10-11 17:00:56 +02:00
Linus Rath a4909ae106 fix(files): drop the cursor outline from a file once it is deselected 2026-10-11 16:57:00 +02:00
Linus Rath 958aa500b8 feat(files): add right-click menus to My files, folders, starred and recent in the sidebar 2026-10-11 16:50:08 +02:00
Linus Rath 8f146509ca fix(files): give the image zoom bar the same card and buttons as the rest of the app 2026-10-11 16:44:37 +02:00
Linus Rath dfa68a1d2f fix(files): keep the items a drag selection covers after letting go 2026-10-11 16:42:43 +02:00
Linus Rath e60840c0e6 fix(files): say the upload was canceled instead of counting it as done
Cancelling an upload ended the loop like a normal finish, and the Files
app then reported every picked file as uploaded. Uploads now return how
many files went up and whether they were cancelled, so a cancel shows
"Upload canceled" (with the count of files that made it, if any).

Folder uploads also passed no cancel signal or progress callback to the
blob upload, so Cancel did not stop the file in flight and the progress
line stood still; they now behave like file uploads.
2026-10-11 16:40:32 +02:00
Linus Rath cd5fe770e4 feat: show file uploads as a toast like every other notice
Uploads in Files had their own card with a thick progress bar, larger
corners and a heavier shadow, so they looked unlike the toasts around
them.

Toasts can now show work in progress: the thin line at the bottom fills
with progress instead of counting down, and the toast stays until it is
updated or removed. Uploads use it, with the file and percentage below
the title and Cancel as the toast action.
2026-10-11 16:38:05 +02:00
Linus Rath 87915f8bf1 feat(files): zoom and pan images in the preview, close by clicking beside them
The image viewer only zoomed with its buttons, scaled the image inside
a fixed box so a zoomed image could not be moved, and the area around
the image swallowed clicks, so clicking beside it did nothing.

Both the Files image viewer and the attachment preview now use one
viewer that:

- zooms with the wheel, trackpad or two-finger pinch, centred on the
  pointer, and with a zoom bar at the bottom (-, percentage, +, fit,
  rotate)
- toggles between fit and full size on double-click or double-tap
- pans by dragging, or with the arrow keys, while zoomed
- closes on a click or tap beside the image, but not after a drag
- keeps + / - / 0 / r as shortcuts and Escape to close
2026-10-11 16:32:51 +02:00
Linus Rath d07939fc04 feat(files): drop the large file upload warning 2026-10-11 16:25:11 +02:00
Linus Rath 4ba39cef0e feat(files): rework the Files app layout and interactions
The Files app had two layouts (folders inline or in a tree), a back bar
and a permanent warning above the list, a toolbar of ten unlabelled
icons, and a Recent list whose entries did nothing. In the tree layout
folders could not be renamed or deleted at all, and the default view,
default sort and hidden-files settings were ignored.

It now follows the contacts and calendar layout:

- a full-height sidebar with a "+" New menu, My files with the folder
  tree, Starred, Recent and Shared with me; folders accept dropped items
- a header with collapsing breadcrumbs (also drop targets), search, sort,
  list/grid switch and a details toggle; selecting items swaps it for an
  action bar
- list rows open from the name and select from the row, with hover
  actions; the grid shows folders as chips and files as cards with
  lazy, cached thumbnails
- a details panel for the selection or the current folder, empty-folder
  and no-results states, a floating upload card, a dismissible
  stability warning, and keyboard navigation with the arrow keys
- touch: tap opens, long-press selects, a "+" button in narrow panes

The tree is built from the listing the store already fetches instead of
one full fetch per folder, so it is current after every change. Recent
files open in their folder, and the settings for view, sort, hidden
files and icons now apply. The inline/sidebar setting is gone.
2026-10-11 16:23:19 +02:00
lucamzanon 26ae483577 fix(mountain-view): let the collapsed rail fill its 72px column
With the navigation collapsed, Mountain View gives the sidebar a 72px
column, but the sidebar inside kept the default layout's 48px width. The
round compose button was cut in half, the selected folder's highlight
ran off the edge, and an empty strip showed before the message list.
2026-10-11 13:30:11 +02:00