1 parent
a238ff5e23
commit
93762fe9ef
65 files changed
+5420
-2792
No files matched your search
+86
-45
@@ -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>
|
||||
|
||||
Reference in new issue
Block a user