mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-07-09 06:28:28 +03:00
* Cleanup OpenPgpImportPopupView code * update polish translation * small fix * Added Import S/MIME certificate popup And much better handling of the sign and encrypt options * bugfix: store in Passphrases * Resolve #1448 * pre-verify S/MIME opaque signed messages so we have a body to view * Fix timestampToString() for future dates * Move php8.php to /app/libraries/polyfill/ * Improved Settings handling to prevent bugs in outer code * Changed AbstractProvider::IsActive() to be abstract * Example for #1449 * bugfix: previous IsActive() commit * OpenSSL required due to S/MIME * Use get_debug_type() instead of gettype() * update polish translation * Make all Enumerations classes abstract * Added search functionality in Admin -> Config And removed the unused ['capa']['quota'] * Cleanup Quota handling * OPEN_PGP should be OPENPGP as it is one word * Improve Capa handling * Resolve #1451 * Bugfix TypeError: b64Encode(...).match(...) is null * Small StorageType change * Bugfix: mailvelope editor failed * Bugfix: undefined getMailvelopePrivateKeyFor() * Bugfix: MIME parser RegExp didn't escape `boundary` which caused issues * Return detailed info on PgpImportKey * Show GnuPG verify error * Sort PGP keys by email and id * Sort S/MIME certificates on emailAddress else validTo * S/MIME import from signature use `BEGIN PKCS7` * Optionally use existing private key to generate S/MIME certificate * Chaned some error_log() to MailSo Logger() * Force reload of S/MIME certificates list on import * Make better use of SnappyMail\SensitiveString * Fix view PGP key button * Mask all POST data that has a key which contains `pass` * v2.35.1 * Resolve #1455 * Improved GnuPG error handling * Update pt/pt-PT translation * update Polish translation * Drop support for gnupg pecl extension as it fails with "no passphrase" issues * Resolve #1456 * Resolve #1458 * v2.35.2 * fix changelog * Resolve #1461 * Update pt/pt-PT translation * compact-composer plugin v1.0.0 * Resolve #1462 * Fix decrypt error message * `new Error()` to `Error()` * Resolve #1463 * Show url for #1466 * Simplify SignMe/Remember me code * Simplify language Notifications * Bugfix: SetPassword expects \SnappyMail\SensitiveString * https://github.com/the-djmaze/snappymail/issues/1450#issuecomment-1972147950 * improve: fire the 'squire2-toolbar' event after more props are added * improve: add dark theme support and use 'button' element as menu trigger for consistent styling * fix: use compact template in non-destructive way (do not replace the PopupsCompose template if a different wysiwyg is used) * Update admin.json * Update user.json * CSS rainloopErrorTip location * Improved error handling on PGP and S/MIME decrypt * KnockoutJS remove unused `beforeRemove` * KnockoutJS drop unused `as` * KnockoutJS simplify renderMode because only 1 option is used * KnoutJS cleanup templating.js a bit * KnockoutJS drop unused `bindingRewriteValidators` * KnockoutJS drop the twoWayBindings code * KnockoutJS simplify virtualElements binding check * KnockoutJS simplify applyBindingsToNodeInternal * KnockoutJS use Array.isArray * KnockoutJS drop alias `textinput` for `textInput` * KnockoutJS scramble `createChildContext` * KnockoutJS scramble `controlsDescendantBindings` * KnockoutJS scramble `exportDependencies` * KnockoutJS drop unused `throttleEvaluation` * KnockoutJS drop unused `valueAllowUnset` * KnockoutJS drop unused `templateNodes` * KnockoutJS drop unused `optionsCaption` * KnockoutJS drop unused `dontLimitMoves` * KnockoutJS drop unused `uniqueName` * KnockoutJS drop IE leftovers * KnockoutJS drop unused `preprocess` * KnockoutJS drop unused "disposeWhenNodeIsRemoved" and "disposeWhen" * KnockoutJS don't scramble exportDependencies. controlsDescendantBindings, createChildContext * KnockoutJS drop unused `$parentContext` and `$parents` * KnockoutJS drop unused `$rawData` * Knockoutjs built latest * KnockoutJS drop unused template options `nodes`, `if`, `ifnot` * KnockoutJS use more Array.isArray * KnockoutJS cleanup code a bit * KnockoutJS primitiveTypes can just be checked with Object() * KnockoutJS rebuilt * Verify S/MIME signed automatically and log Exception * Automatically verify PGP and S/MIME signed messages * `new Error` to `Error` * By default throw AccountNotAllowed as confused in #1478 * GPG use pinentries for decrypt, sign and export * Better GPG error handling * GPG show error on view/export * OpenPGP fix handling of importing keys * Make "verify signatures automatically" optional, as it requires more IMAP fetching * S/MIME don't post identity key and certificate, just fetch from server * Show error to old browsers, instead of crashing * Automatically verify S/MIME decrypted signed message --------- Co-authored-by: the-djmaze <> Co-authored-by: tinola <tinola@poczta.onet.pl> Co-authored-by: Maarten <3752035+the-djmaze@users.noreply.github.com> Co-authored-by: lmperfis <joint.striker@gmail.com> Co-authored-by: Sergey Mosin <sergey@srgdev.com> Co-authored-by: hguilbert <51283484+hguilbert@users.noreply.github.com>
213 lines
3.6 KiB
Text
213 lines
3.6 KiB
Text
|
|
@folderItemPadding: 7px;
|
|
@subPadding: 15px;
|
|
|
|
#V-MailFolderList,
|
|
#V-MailFolderList .b-content {
|
|
height: 100%;
|
|
}
|
|
|
|
.focused .b-folders a.focused {
|
|
background-color: var(--folders-focused-bg-color, #333);
|
|
border-color: #fff;
|
|
color: var(--folders-focused-color, #eee);
|
|
}
|
|
|
|
#folderSearchInput {
|
|
width: 100%;
|
|
}
|
|
|
|
/* https://github.com/the-djmaze/snappymail/issues/1427 */
|
|
#V-MailFolderList .e-checkbox {
|
|
margin: 0 4px;
|
|
width: calc(100% - 8px);
|
|
}
|
|
#V-MailFolderList .unreadOnly li a:not(.unread-sub):not([data-unread]) {
|
|
display:none;
|
|
}
|
|
|
|
.b-folders {
|
|
display: flex;
|
|
flex-direction: column;
|
|
height: 100%;
|
|
padding-right: 2px;
|
|
|
|
ul {
|
|
margin: 0;
|
|
}
|
|
|
|
.move-action-content-wrapper {
|
|
z-index: -1;
|
|
position: fixed;
|
|
top: 0;
|
|
bottom: 0;
|
|
left: 0;
|
|
right: 0;
|
|
opacity: 0.05;
|
|
background-color: #fff;
|
|
background-size: 60px 60px;
|
|
background-image: linear-gradient(135deg, #000 25%, transparent 25%,
|
|
transparent 50%, #000 50%, #000 75%,
|
|
transparent 75%, transparent);
|
|
}
|
|
|
|
.b-toolbar {
|
|
color: #fff;
|
|
}
|
|
|
|
.b-footer {
|
|
padding: 10px @rlLowMargin;
|
|
overflow: hidden;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.b-content {
|
|
overflow: hidden;
|
|
overflow-y: auto;
|
|
min-width: 100px;
|
|
color: var(--folders-color, #333);
|
|
}
|
|
|
|
hr {
|
|
margin: 10px;
|
|
}
|
|
|
|
li {
|
|
display: block;
|
|
overflow: hidden;
|
|
white-space: nowrap;
|
|
|
|
a {
|
|
background-color: transparent;
|
|
border-left: 3px solid transparent;
|
|
color: var(--folders-color, #333);
|
|
display: block;
|
|
line-height: 34px;
|
|
padding: 0 2em 0 @folderItemPadding;
|
|
position: relative;
|
|
text-decoration: none;
|
|
vertical-align: middle;
|
|
z-index: 1;
|
|
|
|
&.selectable {
|
|
cursor: pointer;
|
|
|
|
&:hover {
|
|
background-color: var(--folders-hover-bg-color, #333);
|
|
color: var(--folders-hover-color, #eee);
|
|
}
|
|
|
|
&.droppableHover {
|
|
background-color: var(--folders-drop-bg-color, #333);
|
|
color: var(--folders-drop-color, #eee);
|
|
}
|
|
|
|
&.droppableHover * {
|
|
pointer-events: none;
|
|
}
|
|
|
|
&.selected {
|
|
background-color: var(--folders-selected-bg-color, #333);
|
|
color: var(--folders-selected-color, #eee);
|
|
}
|
|
}
|
|
&:not(.selectable) {
|
|
color: var(--folders-disabled-color, #666);
|
|
cursor: default;
|
|
font-style: italic;
|
|
}
|
|
|
|
&.unread-sub {
|
|
font-weight: bold;
|
|
}
|
|
|
|
.e-collapsed-sign {
|
|
cursor: pointer;
|
|
font-size: 150%;
|
|
text-indent: 0;
|
|
vertical-align: inherit;
|
|
}
|
|
}
|
|
|
|
a[data-unread] {
|
|
font-weight: bold;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
}
|
|
|
|
ul.collapsed {
|
|
max-height: 0;
|
|
height: 0;
|
|
display: none;
|
|
}
|
|
}
|
|
|
|
.b-folders-system a[data-unread]::after,
|
|
.b-folders-user a[data-unread]:not(.system)::after
|
|
{
|
|
content: attr(data-unread);
|
|
background-color: var(--unread-count-bg-color, #999);
|
|
border-radius: 1em;
|
|
color: var(--unread-count-color, #fff);
|
|
font-size: 80%;
|
|
line-height: 1.5em;
|
|
margin-top: 7px;
|
|
min-width: 1.7em;
|
|
padding: 1px 4px;
|
|
text-align: center;
|
|
text-shadow: 0 -1px 0 rgba(0,0,0,.25);
|
|
position: absolute;
|
|
right: 3px;
|
|
text-indent: 0;
|
|
}
|
|
|
|
.flag-icon {
|
|
margin-left: 7px;
|
|
}
|
|
.flag-icon::after {
|
|
content:'☆';
|
|
opacity: .5;
|
|
}
|
|
.is-flagged {
|
|
.flag-icon::after {
|
|
color: orange;
|
|
content:'★';
|
|
opacity: 1;
|
|
}
|
|
}
|
|
|
|
.b-folders-system {
|
|
font-weight: bold;
|
|
}
|
|
|
|
li li a {
|
|
text-indent: 1em;
|
|
}
|
|
li li li a {
|
|
text-indent: 2em;
|
|
}
|
|
li li li li a {
|
|
text-indent: 3em;
|
|
}
|
|
li li li li li a {
|
|
text-indent: 4em;
|
|
}
|
|
}
|
|
|
|
#rl-left .buttonCompose {
|
|
max-height: 2em;
|
|
max-width: fit-content;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
width: calc(100% - 48px);
|
|
}
|
|
|
|
html.rl-left-panel-disabled {
|
|
.buttonComposeText,
|
|
.buttonContacts {
|
|
display: none;
|
|
}
|
|
#rl-left .buttonCompose {
|
|
width: auto;
|
|
}
|
|
}
|