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

This commit is contained in:
Mateusz Gruszczyński committed 2026-10-30 00:12:09 +01:00
1 parent a238ff5e23
commit 93762fe9ef
65 files changed
+5420 -2792

No files matched your search

+86 -45
View File
@@ -1,5 +1,5 @@
<!doctype html>
<html lang="en" data-base-path="__RUSTBOX_BASE_PATH__" data-theme="dark" data-density="compact" data-preview="right">
<html lang="en" data-base-path="__RUSTBOX_BASE_PATH__" data-default-theme="__RUSTBOX_DEFAULT_THEME__" data-default-interface-skin="__RUSTBOX_DEFAULT_INTERFACE_SKIN__" data-max-attachment-bytes="__RUSTBOX_MAX_ATTACHMENT_BYTES__" data-max-attachment-mb="__RUSTBOX_MAX_ATTACHMENT_MB__" data-max-message-bytes="__RUSTBOX_MAX_MESSAGE_BYTES__" data-max-message-mb="__RUSTBOX_MAX_MESSAGE_MB__" data-theme="dark" data-interface-skin="__RUSTBOX_DEFAULT_INTERFACE_SKIN__" data-density="compact" data-preview="right">
<head>
<meta charset="utf-8">
@@ -7,6 +7,16 @@
<meta name="color-scheme" content="dark light">
<meta name="description" content="RustBox webmail">
<title>RustBox</title>
<script>
(() => {
const root = document.documentElement;
const configured = root.dataset.defaultTheme || "system";
root.dataset.theme = configured === "system"
? (matchMedia("(prefers-color-scheme: light)").matches ? "light" : "dark")
: configured;
root.dataset.interfaceSkin = root.dataset.defaultInterfaceSkin || "rustbox";
})();
</script>
<link rel="icon" href="__RUSTBOX_ASSET_PREFIX__/favicon.svg" type="image/svg+xml">
<link rel="stylesheet" href="__RUSTBOX_ASSET_PREFIX__/assets/app.__RUSTBOX_ASSET_ID__.css">
</head>
@@ -19,7 +29,7 @@
<strong>RustBox</strong>
</div>
<section id="login-view" class="login-view hidden" aria-label="Sign in">
<section id="login-view" class="login-view hidden" data-i18n-scope aria-label="Sign in">
<div class="login-panel">
<header class="login-brand">
<svg class="brand-icon" aria-hidden="true">
@@ -43,7 +53,7 @@
<main id="app-view" class="app-view hidden">
<div id="offline-banner" class="offline-banner hidden" role="status" aria-live="polite"></div>
<header class="appbar">
<header class="appbar" data-i18n-scope>
<div class="app-brand">
<svg class="brand-icon" aria-hidden="true">
<use href="__RUSTBOX_ASSET_PREFIX__/assets/icons.svg#icon-mail"></use>
@@ -82,7 +92,7 @@
<div class="mail-shell">
<button id="folder-drawer-scrim" class="folder-drawer-scrim" type="button" aria-label="Close folders"
tabindex="-1"></button>
<aside id="folder-pane" class="folder-pane">
<aside id="folder-pane" class="folder-pane" data-i18n-scope>
<div class="folder-drawer-header mobile-only">
<button id="folder-drawer-close" class="icon-button folder-drawer-close" type="button"
aria-label="Back to messages" title="Back to messages"><svg>
@@ -105,6 +115,10 @@
<use href="__RUSTBOX_ASSET_PREFIX__/assets/icons.svg#icon-plus"></use>
</svg></button></div>
<nav id="tag-list" class="folder-list tag-list" aria-label="Message labels"></nav>
<div id="folder-quota" class="folder-quota" aria-live="polite">
<div class="folder-quota-label"><span>IMAP storage</span><span id="folder-quota-text">Loading…</span></div>
<div class="folder-quota-track"><span id="folder-quota-bar"></span></div>
</div>
<div class="folder-pane-footer"><span id="mail-server-label">IMAP</span><span>RustBox __RUSTBOX_VERSION__</span>
</div>
<div id="folder-resizer" class="pane-resizer" role="separator" aria-orientation="vertical"
@@ -193,15 +207,22 @@
</svg></button>
<button id="reply-btn" class="button quiet" type="button"><svg>
<use href="__RUSTBOX_ASSET_PREFIX__/assets/icons.svg#icon-reply"></use>
</svg><span>Reply</span></button>
</svg><span data-i18n="reply">Reply</span></button>
<button id="reply-all-btn" class="button quiet" type="button"><svg>
<use href="__RUSTBOX_ASSET_PREFIX__/assets/icons.svg#icon-reply-all"></use>
</svg><span>Reply all</span></button>
</svg><span data-i18n="reply_all">Reply all</span></button>
<button id="forward-btn" class="button quiet" type="button"><svg>
<use href="__RUSTBOX_ASSET_PREFIX__/assets/icons.svg#icon-forward"></use>
</svg><span>Forward</span></button>
<button id="headers-btn" class="button quiet" type="button">Headers</button><button id="source-btn"
class="button quiet" type="button" data-i18n="source">Source</button>
</svg><span data-i18n="forward">Forward</span></button>
<details id="message-details-menu" class="toolbar-menu">
<summary class="button quiet"><svg aria-hidden="true">
<use href="__RUSTBOX_ASSET_PREFIX__/assets/icons.svg#icon-file-text"></use>
</svg><span data-i18n="message_details">Message details</span></summary>
<div class="toolbar-menu-popover" role="menu">
<button id="headers-btn" type="button" role="menuitem" data-i18n="headers">Headers</button>
<button id="source-btn" type="button" role="menuitem" data-i18n="source">Source</button>
</div>
</details>
<button id="quick-filter-btn" class="icon-button" type="button" title="Create filter from sender"
aria-label="Create filter from sender" data-i18n-title="create_filter_sender"
data-i18n-aria-label="create_filter_sender"><svg>
@@ -225,12 +246,15 @@
aria-label="Mark read or unread"><svg>
<use href="__RUSTBOX_ASSET_PREFIX__/assets/icons.svg#icon-mail"></use>
</svg></button>
<label class="move-control"><span class="sr-only">Move to folder</span><select id="move-select">
<option value="">Move to…</option>
</select></label>
<label class="move-control"><span class="sr-only">Copy to folder</span><select id="copy-select">
<option value="">Copy to…</option>
</select></label>
<details id="message-transfer-menu" class="toolbar-menu">
<summary class="button quiet"><svg aria-hidden="true">
<use href="__RUSTBOX_ASSET_PREFIX__/assets/icons.svg#icon-folder"></use>
</svg><span data-i18n="move_copy">Move / copy</span></summary>
<div class="toolbar-menu-popover" role="menu">
<button id="reader-move-action" type="button" role="menuitem" data-i18n="move_to">Move to…</button>
<button id="reader-copy-action" type="button" role="menuitem" data-i18n="copy_to">Copy to…</button>
</div>
</details>
<span class="toolbar-spacer"></span>
<button id="delete-btn" class="icon-button danger" type="button" title="Delete" aria-label="Delete"><svg>
<use href="__RUSTBOX_ASSET_PREFIX__/assets/icons.svg#icon-trash"></use>
@@ -246,7 +270,7 @@
aria-label="Add sender to contacts"><svg>
<use href="__RUSTBOX_ASSET_PREFIX__/assets/icons.svg#icon-user-round"></use>
</svg></button></div>
<div id="reader-to" class="reader-recipients"></div>
<div id="reader-to" class="reader-recipients" role="button" tabindex="0" aria-expanded="false" title="Show full addresses"></div>
</div><time id="reader-date"></time>
</div>
</header>
@@ -275,7 +299,7 @@
</div>
</main>
<dialog id="compose-dialog" class="dialog compose-dialog">
<dialog id="compose-dialog" class="dialog compose-dialog" data-i18n-scope>
<form id="compose-form" class="dialog-card compose-card" method="dialog">
<header class="dialog-header"><strong id="compose-title">New message</strong>
<div class="compose-header-actions"><button type="button" id="compose-recover" class="button quiet small"
@@ -410,28 +434,31 @@
<button type="button" id="compose-response-insert" title="Insert saved response" disabled><svg>
<use href="__RUSTBOX_ASSET_PREFIX__/assets/icons.svg#icon-file-text"></use>
</svg></button>
<label class="compose-mode-control"><span class="sr-only">Compose format</span><select id="compose-mode">
<option value="html">HTML</option>
<option value="text">Plain text</option>
<option value="markdown">Markdown</option>
</select></label>
</div>
<div id="compose-editor" class="compose-editor" contenteditable="true" role="textbox" aria-multiline="true"></div>
<div id="compose-editor" class="compose-editor" contenteditable="true" role="textbox" aria-multiline="true"
data-placeholder="Write a message"></div>
<div id="compose-upload-progress" class="compose-upload-progress hidden" role="status" aria-live="polite">
<div class="compose-upload-track" aria-hidden="true"><span id="compose-upload-bar"></span></div><span
id="compose-upload-label">Uploading…</span>
</div>
<div id="compose-attachments" class="compose-attachments hidden"></div>
<div id="compose-error" class="form-error hidden"></div>
<footer class="dialog-actions"><span id="compose-status" class="muted"></span><button type="button"
class="button quiet close-dialog">Cancel</button><button id="send-btn" type="submit"
class="button primary"><svg>
<use href="__RUSTBOX_ASSET_PREFIX__/assets/icons.svg#icon-send"></use>
</svg><span>Send</span></button></footer>
<footer class="dialog-actions compose-footer">
<label class="compose-mode-control"><span class="sr-only">Compose format</span><select id="compose-mode">
<option value="html">HTML</option>
<option value="text">Plain text</option>
<option value="markdown">Markdown</option>
</select></label>
<span id="compose-status" class="muted"></span><span id="compose-message-size" class="muted compose-message-size" title="Estimated final message size">~0 / __RUSTBOX_MAX_MESSAGE_MB__ MiB</span>
<div class="compose-submit-actions"><button type="button" class="button quiet close-dialog">Cancel</button><button
id="send-btn" type="submit" class="button primary"><svg>
<use href="__RUSTBOX_ASSET_PREFIX__/assets/icons.svg#icon-send"></use>
</svg><span>Send</span></button></div>
</footer>
</form>
</dialog>
<dialog id="markdown-preview-dialog" class="dialog markdown-preview-dialog">
<dialog id="markdown-preview-dialog" class="dialog markdown-preview-dialog" data-i18n-scope>
<div class="dialog-card markdown-preview-card">
<header class="dialog-header"><strong>Markdown preview</strong><button type="button"
class="icon-button close-dialog" aria-label="Close"><svg>
@@ -490,7 +517,7 @@
</form>
</dialog>
<dialog id="folder-dialog" class="dialog">
<dialog id="folder-dialog" class="dialog" data-i18n-scope>
<div class="dialog-card folder-card">
<header class="dialog-header"><strong>Folders</strong><button type="button" class="icon-button close-dialog"
aria-label="Close"><svg>
@@ -509,7 +536,7 @@
</div>
</dialog>
<dialog id="settings-dialog" class="dialog settings-dialog">
<dialog id="settings-dialog" class="dialog settings-dialog" data-i18n-scope>
<div class="dialog-card settings-card">
<header class="dialog-header"><strong>Settings</strong><button type="button" class="icon-button close-dialog"
aria-label="Close"><svg>
@@ -548,15 +575,27 @@
<option value="system">System</option>
</select></label>
<label><span>Interface style</span><select id="pref-interface-skin">
<option value="default">Global default</option>
<option value="rustbox">RustBox (custom)</option>
<option value="roundcube-classic">Roundcube Classic</option>
<option value="roundcube-larry">Roundcube Larry</option>
<option value="roundcube-elastic">Roundcube Elastic</option>
<option value="clean">Clean</option>
<option value="gmail">Gmail inspired</option>
<option value="proton">Proton inspired</option>
<option value="zoho">Zoho inspired</option>
<option value="outlook">Outlook inspired</option>
<option value="minimal">Minimal</option>
<option value="graphite">Graphite</option>
<option value="high-contrast">High contrast</option>
<option value="fastmail">Fastmail inspired</option>
<option value="apple-mail">Apple Mail inspired</option>
<option value="yahoo">Yahoo Mail inspired</option>
<option value="hey">HEY inspired</option>
<option value="nord">Nord</option>
</select><small id="pref-interface-skin-note" class="muted">RustBox is fully customizable: colors,
spacing, panes and typography.</small></label>
<label id="pref-preset-scale-unlocked-row" class="checkbox-row hidden"><input id="pref-preset-scale-unlocked" type="checkbox"><span>Allow UI scaling for predefined style</span><small class="muted">When enabled, the UI size control can override the scale defined by the selected preset.</small></label>
<label><span data-i18n="color_preset">Color preset</span><select id="pref-color-preset">
<option value="sage">Sage</option>
<option value="blue">Blue</option>
@@ -819,6 +858,8 @@
message text suggests a missing attachment</span></label>
<label class="checkbox-row"><input id="compose-pref-spellcheck" type="checkbox"><span>Use browser
spellcheck while composing</span></label>
<label><span>Maximum attachment size</span><output id="compose-pref-max-attachment">__RUSTBOX_MAX_ATTACHMENT_MB__ MiB</output><small class="muted">Per-file upload limit set with <code>max_attachment_size_mb</code> in rustbox.toml.</small></label>
<label><span>Maximum message size</span><output id="compose-pref-max-message">__RUSTBOX_MAX_MESSAGE_MB__ MiB</output><small class="muted">Hard limit for the complete RFC822/MIME message sent to the MTA, including base64/MIME overhead.</small></label>
</div>
<p class="muted">Markdown is stored as source text and sent as a safe rendered HTML alternative with a
plain-text fallback.</p>
@@ -1032,12 +1073,10 @@
</div>
<div class="diagnostics-grid">
<section class="diagnostic-card">
<div class="section-heading"><span>IMAP</span>
<div class="inline-actions"><strong id="diagnostic-imap-status">Not checked</strong><button
id="diagnostic-imap-reconnect" class="button quiet" type="button">Reconnect</button></div>
</div>
<div class="section-heading"><span>IMAP</span><strong id="diagnostic-imap-status">Not checked</strong></div>
<div id="diagnostic-imap-summary" class="capability-grid"></div>
<div id="diagnostic-imap-caps" class="capability-list"></div>
<div class="inline-actions diagnostic-imap-actions"><button id="diagnostic-imap-reconnect" class="button quiet" type="button">Reconnect</button></div>
</section>
<section class="diagnostic-card">
<div class="section-heading"><span>SMTP</span><strong id="diagnostic-smtp-status">Not checked</strong>
@@ -1099,6 +1138,8 @@
<dd>HTML, CSS and vanilla JavaScript embedded at Cargo build time</dd>
<dt>Author</dt>
<dd>@linuxiarz.pl</dd>
<dt>Repository</dt>
<dd><a href="https://git.linuxiarz.pl/gru/RustBox" target="_blank" rel="noopener noreferrer">git.linuxiarz.pl/gru/RustBox</a></dd>
</dl>
<div class="inline-actions"><button id="shortcuts-open" class="button quiet" type="button">Keyboard
shortcuts</button></div>
@@ -1110,7 +1151,7 @@
<dialog id="identity-dialog" class="dialog identity-dialog">
<dialog id="identity-dialog" class="dialog identity-dialog" data-i18n-scope>
<form id="identity-form" class="dialog-card identity-card">
<header class="dialog-header"><strong id="identity-dialog-title">Identity & signature</strong><button
type="button" class="icon-button close-dialog" aria-label="Close"><svg>
@@ -1197,7 +1238,7 @@
</form>
</dialog>
<dialog id="sieve-rule-dialog" class="dialog sieve-rule-dialog">
<dialog id="sieve-rule-dialog" class="dialog sieve-rule-dialog" data-i18n-scope>
<div class="dialog-card sieve-rule-card">
<header class="dialog-header">
<div><strong id="sieve-rule-dialog-title">Create filter</strong><span id="sieve-rule-dialog-subtitle"
@@ -1365,7 +1406,7 @@
</div>
</dialog>
<dialog id="shortcuts-dialog" class="dialog">
<dialog id="shortcuts-dialog" class="dialog" data-i18n-scope>
<div class="dialog-card shortcuts-card">
<header class="dialog-header"><strong>Keyboard shortcuts</strong><button type="button"
class="icon-button close-dialog" aria-label="Close"><svg>
@@ -1415,7 +1456,7 @@
</div>
</dialog>
<dialog id="tag-dialog" class="dialog">
<dialog id="tag-dialog" class="dialog" data-i18n-scope>
<div class="dialog-card tag-card">
<header class="dialog-header"><strong>Label</strong><button type="button" class="icon-button close-dialog"
aria-label="Close"><svg>
@@ -1433,7 +1474,7 @@
</div>
</dialog>
<dialog id="advanced-search-dialog" class="dialog">
<dialog id="advanced-search-dialog" class="dialog" data-i18n-scope>
<div class="dialog-card advanced-search-card">
<header class="dialog-header"><strong>Advanced search</strong><button type="button"
class="icon-button close-dialog" aria-label="Close"><svg>
@@ -1485,7 +1526,7 @@
</div>
</dialog>
<dialog id="contacts-dialog" class="dialog">
<dialog id="contacts-dialog" class="dialog" data-i18n-scope>
<div class="dialog-card contacts-card">
<header class="dialog-header"><strong>Contacts</strong><button type="button" class="icon-button close-dialog"
aria-label="Close"><svg>
@@ -1544,7 +1585,7 @@
</div>
</dialog>
<dialog id="contact-duplicates-dialog" class="dialog">
<dialog id="contact-duplicates-dialog" class="dialog" data-i18n-scope>
<div class="dialog-card duplicates-card">
<header class="dialog-header"><strong>Duplicate contacts</strong><button type="button"
class="icon-button close-dialog" aria-label="Close"><svg>
@@ -1557,7 +1598,7 @@
</div>
</dialog>
<dialog id="calendar-dialog" class="dialog">
<dialog id="calendar-dialog" class="dialog" data-i18n-scope>
<div class="dialog-card calendar-card">
<header class="dialog-header"><strong>Calendar</strong>
<div class="inline-actions"><button id="calendar-today" type="button" class="button quiet">Today</button><button
@@ -1620,7 +1661,7 @@
</form>
</div>
</dialog>
<dialog id="headers-dialog" class="dialog">
<dialog id="headers-dialog" class="dialog" data-i18n-scope>
<div class="dialog-card headers-card">
<header class="dialog-header"><strong>Message headers</strong><button type="button"
class="icon-button close-dialog" aria-label="Close"><svg>
@@ -1634,7 +1675,7 @@
</div>
</dialog>
<dialog id="add-account-dialog" class="dialog">
<dialog id="add-account-dialog" class="dialog" data-i18n-scope>
<div class="dialog-card add-account-card">
<header class="dialog-header"><strong>Add account</strong><button type="button" class="icon-button close-dialog"
aria-label="Close"><svg>