@bobfrankston/rmfmail 1.2.243 → 1.2.244
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client/app.bundle.js +20 -74
- package/client/app.bundle.js.map +3 -3
- package/client/app.js +16 -56
- package/client/app.js.map +1 -1
- package/client/app.ts +15 -53
- package/client/components/message-viewer.js +2 -40
- package/client/components/message-viewer.js.map +1 -1
- package/client/components/message-viewer.ts +2 -41
- package/package.json +3 -3
- /package/packages/mailx-imap/{node_modules.npmglobalize-stash-17784 → node_modules.npmglobalize-stash-55392}/.package-lock.json +0 -0
package/client/app.js
CHANGED
|
@@ -6,7 +6,7 @@ import { initFolderTree, refreshFolderTree, updateFolderCounts, setFolderSynced,
|
|
|
6
6
|
import { initMessageList, loadMessages, loadUnifiedInbox, loadSearchResults, reloadCurrentFolder, clearSearchMode, getSelectedMessages, markBodiesCached, getCurrentFocused, releaseFocus, removeMessagesAndReconcile, setRowFlagged, scrollFocusedIntoView, refreshPriorityIndex, revealMessage, getCurrentView, selectAllVisible, exitMultiSelect, getDateBasis, setDateBasis } from "./components/message-list.js";
|
|
7
7
|
import { seenOf, flaggedOf, draftOf, setSeen, setFlagged } from "@bobfrankston/mailx-types";
|
|
8
8
|
import { initTabs, setActiveView as setActiveTabView, openTab } from "./components/tabs.js";
|
|
9
|
-
import { getCurrentMessage, initViewer, popOutCurrentMessage, popOutToWindow, printCurrentMessage, toggleFullscreenPreview, showPreviewBodyMenu
|
|
9
|
+
import { getCurrentMessage, initViewer, popOutCurrentMessage, popOutToWindow, printCurrentMessage, toggleFullscreenPreview, showPreviewBodyMenu } from "./components/message-viewer.js";
|
|
10
10
|
import { connectWebSocket, onWsEvent, triggerSync, syncAccount, reauthenticate, getAccounts, getFolders, deleteMessage, deleteMessages, undeleteMessage, restartServer, getSyncPending, getVersion, getSettings, saveSettings, getAutocompleteSettings, saveAutocompleteSettings, repairAccounts, updateFlags, markAsSpamMessages, logClientEvent, sendMessage as apiSendMessage, subscribeStore, cancelServerSearch, installConsoleCapture, getAttachment } from "./lib/api-client.js";
|
|
11
11
|
import * as messageState from "./lib/message-state.js";
|
|
12
12
|
import { editMenuItems } from "./components/edit-menu.js";
|
|
@@ -6511,61 +6511,21 @@ document.addEventListener("mailx-popout-message", (async (e) => {
|
|
|
6511
6511
|
showComposeOverlay(msg.subject ? `Edit: ${msg.subject}` : "Edit draft");
|
|
6512
6512
|
return;
|
|
6513
6513
|
}
|
|
6514
|
-
|
|
6515
|
-
|
|
6516
|
-
|
|
6517
|
-
|
|
6518
|
-
|
|
6519
|
-
|
|
6520
|
-
|
|
6521
|
-
|
|
6522
|
-
|
|
6523
|
-
|
|
6524
|
-
|
|
6525
|
-
|
|
6526
|
-
|
|
6527
|
-
|
|
6528
|
-
|
|
6529
|
-
meta.style.cssText = "padding:8px 12px;border-bottom:1px solid var(--color-border);font-size:0.9rem;color:var(--color-text-muted);";
|
|
6530
|
-
meta.innerHTML = `<div><b>From:</b> ${escapeHtmlBasic(msg.from?.name || "")} <${escapeHtmlBasic(msg.from?.address || "")}></div>
|
|
6531
|
-
<div><b>To:</b> ${(msg.to || []).map((a) => escapeHtmlBasic(`${a.name || ""} <${a.address}>`)).join(", ")}</div>
|
|
6532
|
-
${msg.cc?.length ? `<div><b>Cc:</b> ${msg.cc.map((a) => escapeHtmlBasic(`${a.name || ""} <${a.address}>`)).join(", ")}</div>` : ""}
|
|
6533
|
-
<div><b>Date:</b> ${new Date(msg.date).toLocaleString()}</div>`;
|
|
6534
|
-
const body = document.createElement("iframe");
|
|
6535
|
-
body.style.cssText = "flex:1;border:none;width:100%;background:#fff;";
|
|
6536
|
-
body.sandbox.add("allow-same-origin");
|
|
6537
|
-
wrapper.appendChild(header);
|
|
6538
|
-
wrapper.appendChild(meta);
|
|
6539
|
-
wrapper.appendChild(body);
|
|
6540
|
-
document.body.appendChild(wrapper);
|
|
6541
|
-
// Use the same wrapHtmlBody styling as the inline preview pane so the
|
|
6542
|
-
// popout's typography matches the preview's typography. Earlier the
|
|
6543
|
-
// popout fed bodyHtml DIRECTLY into srcdoc with no CSS wrapping, so
|
|
6544
|
-
// the browser used its default font (Times serif) while the preview
|
|
6545
|
-
// pane used system-ui sans-serif (Bob 2026-05-12: "double clicking on
|
|
6546
|
-
// the summary shows in a different font than in preview").
|
|
6547
|
-
body.srcdoc = msg.bodyHtml
|
|
6548
|
-
? wrapHtmlBody(msg.bodyHtml, !!msg.remoteAllowed)
|
|
6549
|
-
: `<!DOCTYPE html><html><head><style>body{font-family:system-ui,sans-serif;font-size:17.5px;line-height:1.5;color:#1a1a2e;padding:1rem;margin:0;}pre{white-space:pre-wrap;word-break:break-word;font-family:inherit;font-size:inherit;margin:0;}</style></head><body><pre>${escapeHtmlBasic(msg.bodyText || "(no body)")}</pre></body></html>`;
|
|
6550
|
-
// Drag-to-move.
|
|
6551
|
-
let dragX = 0, dragY = 0, dragging = false;
|
|
6552
|
-
header.addEventListener("mousedown", (de) => {
|
|
6553
|
-
if (de.target.tagName === "BUTTON")
|
|
6554
|
-
return;
|
|
6555
|
-
dragging = true;
|
|
6556
|
-
const rect = wrapper.getBoundingClientRect();
|
|
6557
|
-
dragX = de.clientX - rect.left;
|
|
6558
|
-
dragY = de.clientY - rect.top;
|
|
6559
|
-
de.preventDefault();
|
|
6560
|
-
});
|
|
6561
|
-
document.addEventListener("mousemove", (de) => {
|
|
6562
|
-
if (!dragging)
|
|
6563
|
-
return;
|
|
6564
|
-
wrapper.style.left = `${de.clientX - dragX}px`;
|
|
6565
|
-
wrapper.style.top = `${de.clientY - dragY}px`;
|
|
6566
|
-
wrapper.style.right = "auto";
|
|
6567
|
-
});
|
|
6568
|
-
document.addEventListener("mouseup", () => { dragging = false; });
|
|
6514
|
+
// ONE read-only popout, not three. This handler used to build its own
|
|
6515
|
+
// `.popout-overlay` — header, meta block, body iframe — with NO action
|
|
6516
|
+
// buttons at all, which is what a double-click on a message opened:
|
|
6517
|
+
// "I wanted to pop this out for editing but I don't see any controls.
|
|
6518
|
+
// It's just a view without even the reply etc." (Bob 2026-08-09). The
|
|
6519
|
+
// other two popout surfaces (the ⧉ overlay in message-viewer.ts and the
|
|
6520
|
+
// native msger window in popout-server.ts) have had a Reply/Reply-All/
|
|
6521
|
+
// Forward/Edit-as-new/Flag/Delete toolbar since 2026-05-16; this copy
|
|
6522
|
+
// never got one, and the handler's own comment noted it was "missing
|
|
6523
|
+
// every action button" while working around it for drafts only.
|
|
6524
|
+
//
|
|
6525
|
+
// Deleting the copy is the fix: double-click now opens the SAME overlay
|
|
6526
|
+
// the toolbar button does, so there is one surface to keep working.
|
|
6527
|
+
const { spawnDesktopPopout } = await import("./components/message-viewer.js");
|
|
6528
|
+
spawnDesktopPopout(msg, accountId);
|
|
6569
6529
|
}));
|
|
6570
6530
|
function escapeHtmlBasic(s) {
|
|
6571
6531
|
return (s || "").replace(/[&<>"']/g, c => ({ "&": "&", "<": "<", ">": ">", "\"": """, "'": "'" }[c]));
|