v0.0.5
RustBox CI / rustbox (push) Canceled after 0s

This commit is contained in:
Mateusz Gruszczyński committed 2026-10-30 12:06:44 +01:00
1 parent 96a32ea8fb
commit a643e7e3ab
106 files changed
+2223 -4669

No files matched your search

+27 -8
View File
@@ -1,4 +1,4 @@
/* RustBox UI module: 95-bindings-boot.js */
function bindEditor() {
$$(".editor-toolbar [data-command]").forEach((button) => button.addEventListener("click", () => {
$("#compose-editor").focus();
@@ -66,15 +66,12 @@ function positionToolbarMenu(menu) {
const popover = menu.querySelector(".toolbar-menu-popover");
const summary = menu.querySelector("summary");
if (!popover || !summary) return;
if (matchMedia("(max-width: 560px)").matches) {
Object.assign(popover.style, { left: "8px", right: "8px", top: "auto", bottom: "8px" });
return;
}
Object.assign(popover.style, { right: "auto", bottom: "auto" });
const rect = summary.getBoundingClientRect();
const width = Math.max(164, popover.offsetWidth || 164);
const height = popover.offsetHeight || 80;
const margin = 8;
const mobile = matchMedia("(max-width: 560px)").matches;
const width = Math.min(Math.max(mobile ? 180 : 164, popover.offsetWidth || 164), window.innerWidth - (margin * 2));
const height = popover.offsetHeight || 80;
let left = Math.min(rect.left, window.innerWidth - width - margin);
left = Math.max(margin, left);
let top = rect.bottom + 5;
@@ -256,6 +253,7 @@ function bindEvents() {
$("#reader-back").addEventListener("click", closeReader);
$("#reader-prev").addEventListener("click", () => navigateMessage(-1));
$("#reader-next").addEventListener("click", () => navigateMessage(1));
$("#reader-fullscreen").addEventListener("click", toggleReaderFullscreen);
$("#thread-toggle").addEventListener("click", () => {
state.threadExpanded = !state.threadExpanded;
localStorage.setItem("rustbox.threadExpanded", String(state.threadExpanded));
@@ -484,6 +482,11 @@ function bindEvents() {
else if (event.key === "!") { event.preventDefault(); junkCurrent(); }
else if (event.key === "Delete") { event.preventDefault(); deleteCurrent(); }
}
if (event.key === "Escape" && $("#reader")?.classList.contains("reader-fullscreen")) {
event.preventDefault();
exitReaderFullscreen();
return;
}
if (event.key === "Escape" && innerWidth <= 820) {
if ($("#folder-pane")?.classList.contains("open")) setFolderDrawerOpen(false);
else closeReader();
@@ -494,6 +497,16 @@ function bindEvents() {
else if (state.prefs.theme === "system") applyPreferences();
});
window.addEventListener("resize", () => { if (innerWidth > 820) setFolderDrawerOpen(false); });
window.addEventListener("popstate", async (event) => {
const full = event.state?.rustboxMailFullscreen === true;
if (!full) {
if ($("#reader")?.classList.contains("reader-fullscreen")) setReaderFullscreen(false, { pushHistory: false });
return;
}
const folder = event.state.folder;
const uid = Number(event.state.uid);
if (folder && Number.isFinite(uid)) await openMessageTarget(state.accountId, folder, uid, true);
});
}
async function boot() {
@@ -501,7 +514,13 @@ async function boot() {
bindEvents();
await loadAuthPolicy();
const authenticated = await loadAccounts();
if (authenticated) { await loadPreferences(); await loadMailPreferences(); await loadOpenPgp(); await loadIdentities(); await loadResponseTemplates(); await loadFolders(true); await loadSpecialFolders(); await loadQuota(); await loadTags(); await loadNotificationPreferences(); await loadTrustedSenders(); startCalendarReminderWatcher(); connectRealtime(); } else { await loadTranslations(state.prefs.language); }
if (authenticated) {
await loadPreferences(); await loadMailPreferences(); await loadOpenPgp(); await loadIdentities(); await loadResponseTemplates(); await loadFolders(true); await loadSpecialFolders(); await loadQuota(); await loadTags(); await loadNotificationPreferences(); await loadTrustedSenders(); startCalendarReminderWatcher(); connectRealtime();
const params = new URLSearchParams(location.search);
const folder = params.get("mail_folder");
const uid = Number(params.get("mail_uid"));
if (folder && Number.isFinite(uid) && uid > 0) await openMessageTarget(state.accountId, folder, uid, params.get("mail_fullscreen") === "1");
} else { await loadTranslations(state.prefs.language); }
}
boot();