@bobfrankston/rmfmail 1.2.98 → 1.2.101

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.
Files changed (46) hide show
  1. package/TODO.md +1 -0
  2. package/client/android-bootstrap.bundle.js +85 -22
  3. package/client/android-bootstrap.bundle.js.map +2 -2
  4. package/client/app.bundle.js +57 -0
  5. package/client/app.bundle.js.map +2 -2
  6. package/client/app.js +63 -0
  7. package/client/app.js.map +1 -1
  8. package/client/app.ts +58 -0
  9. package/client/components/message-viewer.js +23 -0
  10. package/client/components/message-viewer.js.map +1 -1
  11. package/client/components/message-viewer.ts +19 -0
  12. package/client/index.html +1 -0
  13. package/client/styles/components.css +50 -0
  14. package/docs/preferences.md +1 -0
  15. package/package.json +7 -7
  16. package/packages/mailx-imap/index.d.ts.map +1 -1
  17. package/packages/mailx-imap/index.js +6 -2
  18. package/packages/mailx-imap/index.js.map +1 -1
  19. package/packages/mailx-imap/index.ts +6 -2
  20. package/packages/mailx-imap/package-lock.json +2 -2
  21. package/packages/mailx-imap/package.json +1 -1
  22. package/packages/mailx-settings/docs/preferences.md +1 -0
  23. package/packages/mailx-store/db.d.ts +7 -0
  24. package/packages/mailx-store/db.d.ts.map +1 -1
  25. package/packages/mailx-store/db.js +13 -1
  26. package/packages/mailx-store/db.js.map +1 -1
  27. package/packages/mailx-store/db.ts +19 -1
  28. package/packages/mailx-store/package.json +1 -1
  29. package/packages/mailx-store-web/android-bootstrap.d.ts.map +1 -1
  30. package/packages/mailx-store-web/android-bootstrap.js +74 -19
  31. package/packages/mailx-store-web/android-bootstrap.js.map +1 -1
  32. package/packages/mailx-store-web/android-bootstrap.ts +71 -16
  33. package/packages/mailx-store-web/db.d.ts +1 -0
  34. package/packages/mailx-store-web/db.d.ts.map +1 -1
  35. package/packages/mailx-store-web/db.js +21 -5
  36. package/packages/mailx-store-web/db.js.map +1 -1
  37. package/packages/mailx-store-web/db.ts +20 -7
  38. package/packages/mailx-store-web/imap-web-provider.d.ts.map +1 -1
  39. package/packages/mailx-store-web/imap-web-provider.js +1 -0
  40. package/packages/mailx-store-web/imap-web-provider.js.map +1 -1
  41. package/packages/mailx-store-web/imap-web-provider.ts +1 -0
  42. package/packages/mailx-store-web/package.json +1 -1
  43. package/packages/mailx-store-web/sync-manager.d.ts.map +1 -1
  44. package/packages/mailx-store-web/sync-manager.js +4 -0
  45. package/packages/mailx-store-web/sync-manager.js.map +1 -1
  46. package/packages/mailx-store-web/sync-manager.ts +4 -0
@@ -1597,6 +1597,22 @@ async function showMessage(accountId, uid, folderId, specialUse, isRetry = false
1597
1597
  });
1598
1598
  return;
1599
1599
  }
1600
+ if (msg.bodyError && !msg.bodyHtml && !msg.bodyText) {
1601
+ try {
1602
+ renderHeaderFromEnvelope(headerEl, msg);
1603
+ headerEl.hidden = false;
1604
+ } catch {
1605
+ }
1606
+ const transient = msg.bodyErrorTransient;
1607
+ bodyEl.innerHTML = `<div class="mv-system-message mv-system-error">
1608
+ <div class="mv-system-tag">mailx</div>
1609
+ <div class="mv-system-title">Body fetch failed</div>
1610
+ <div class="mv-system-body">${escapeHtml2(msg.bodyError)}<br><span style="color:var(--color-text-muted);font-size:0.9em">${transient ? "Reopen this message to retry." : "Permanent \u2014 the message may have been deleted on the server."}</span></div>
1611
+ </div>`;
1612
+ currentMessage = msg;
1613
+ currentAccountId = accountId;
1614
+ return;
1615
+ }
1600
1616
  if (!cachedMsg)
1601
1617
  parsedCachePut(accountId, folderId, uid, msg);
1602
1618
  currentMessage = msg;
@@ -8096,6 +8112,20 @@ var backToList = (e) => {
8096
8112
  };
8097
8113
  document.getElementById("btn-back")?.addEventListener("click", backToList);
8098
8114
  document.getElementById("btn-back")?.addEventListener("touchend", backToList);
8115
+ var narrowMq = window.matchMedia("(max-width: 768px), (max-height: 600px)");
8116
+ narrowMq.addEventListener("change", () => {
8117
+ const viewer = document.getElementById("message-viewer");
8118
+ const list = document.getElementById("message-list");
8119
+ if (narrowMq.matches) {
8120
+ if (getCurrentMessage()) {
8121
+ viewer?.classList.add("narrow-active");
8122
+ list?.classList.add("narrow-hidden");
8123
+ }
8124
+ } else {
8125
+ viewer?.classList.remove("narrow-active");
8126
+ list?.classList.remove("narrow-hidden");
8127
+ }
8128
+ });
8099
8129
  document.getElementById("mv-popout")?.addEventListener("click", () => popOutCurrentMessage());
8100
8130
  document.getElementById("mv-popout-window")?.addEventListener("click", () => popOutToWindow());
8101
8131
  document.getElementById("btn-print")?.addEventListener("click", () => printCurrentMessage());
@@ -10443,6 +10473,7 @@ function openShortcutsDialog() {
10443
10473
  var viewBtn = document.getElementById("btn-view");
10444
10474
  var viewDropdown = document.getElementById("view-dropdown");
10445
10475
  var optTwoLine = document.getElementById("opt-two-line");
10476
+ var optEleanor = document.getElementById("opt-eleanor");
10446
10477
  var optPreview = document.getElementById("opt-preview");
10447
10478
  var optSnippet = document.getElementById("opt-snippet");
10448
10479
  var optFlagStars = document.getElementById("opt-flag-stars");
@@ -10570,6 +10601,7 @@ document.addEventListener("keydown", (e) => {
10570
10601
  }
10571
10602
  });
10572
10603
  var savedTwoLine = localStorage.getItem("mailx-two-line") === "true";
10604
+ var savedEleanor = localStorage.getItem("mailx-eleanor-view") === "true";
10573
10605
  var savedPreview = localStorage.getItem("mailx-preview") !== "false";
10574
10606
  var savedSnippet = localStorage.getItem("mailx-snippet") !== "false";
10575
10607
  var savedFlagStars = localStorage.getItem("mailx-flag-stars") !== "false";
@@ -10581,6 +10613,7 @@ try {
10581
10613
  }
10582
10614
  var savedFolderCounts = localStorage.getItem("mailx-folder-counts") === "true";
10583
10615
  if (optTwoLine) optTwoLine.checked = savedTwoLine;
10616
+ if (optEleanor) optEleanor.checked = savedEleanor;
10584
10617
  if (optPreview) optPreview.checked = savedPreview;
10585
10618
  if (optSnippet) optSnippet.checked = savedSnippet;
10586
10619
  if (optFlagStars) optFlagStars.checked = savedFlagStars;
@@ -10588,6 +10621,7 @@ if (optThreaded) optThreaded.checked = savedThreaded;
10588
10621
  if (optFlagged) optFlagged.checked = savedFlagged;
10589
10622
  if (optFolderCounts) optFolderCounts.checked = savedFolderCounts;
10590
10623
  if (savedTwoLine) document.getElementById("message-list")?.classList.add("two-line");
10624
+ if (savedEleanor) document.getElementById("message-list")?.classList.add("eleanor-view");
10591
10625
  if (!savedPreview) document.querySelector(".main-area")?.classList.add("no-preview");
10592
10626
  if (!savedSnippet) document.getElementById("message-list")?.classList.add("no-snippets");
10593
10627
  if (!savedFlagStars) document.getElementById("message-list")?.classList.add("no-empty-stars");
@@ -10735,6 +10769,29 @@ optTwoLine?.addEventListener("change", () => {
10735
10769
  }
10736
10770
  localStorage.setItem("mailx-two-line", String(optTwoLine.checked));
10737
10771
  });
10772
+ function applyEleanorView(on) {
10773
+ document.getElementById("message-list")?.classList.toggle("eleanor-view", on);
10774
+ if (optEleanor) optEleanor.checked = on;
10775
+ try {
10776
+ localStorage.setItem("mailx-eleanor-view", String(on));
10777
+ } catch {
10778
+ }
10779
+ }
10780
+ optEleanor?.addEventListener("change", () => {
10781
+ applyEleanorView(optEleanor.checked);
10782
+ getSettings().then((settings) => {
10783
+ settings.ui = { ...settings.ui, eleanorView: optEleanor.checked };
10784
+ saveSettings(settings);
10785
+ }).catch(() => {
10786
+ });
10787
+ });
10788
+ getSettings().then((s) => {
10789
+ const pref = s.ui?.eleanorView;
10790
+ if (typeof pref === "boolean" && pref !== (localStorage.getItem("mailx-eleanor-view") === "true")) {
10791
+ applyEleanorView(pref);
10792
+ }
10793
+ }).catch(() => {
10794
+ });
10738
10795
  optPreview?.addEventListener("change", () => {
10739
10796
  const main = document.querySelector(".main-area");
10740
10797
  if (optPreview.checked) {