Compare commits

...

7 Commits

Author SHA1 Message Date
muppeth 8f04dbe817 update to roundcube version 1.6.6 (#13)
Co-authored-by: meaz <meaz@disroot.org>
Reviewed-on: #13
Reviewed-by: meaz <meaz@no-reply@disroot.org>
Co-authored-by: muppeth <muppeth@disroot.org>
Co-committed-by: muppeth <muppeth@disroot.org>
2024-03-08 17:59:42 +00:00
antilopa aab2da9c83 initial color adjustments - disroot palette (#12)
Reviewed-on: #12
Reviewed-by: meaz <meaz@no-reply@disroot.org>
Co-authored-by: antilopa <antilopa@disroot.org>
Co-committed-by: antilopa <antilopa@disroot.org>
2024-01-05 11:03:22 +00:00
muppeth 60200b3640 Custom links like link to password reset, TOS or privacy policy for login screen (#10)
Reviewed-on: #10
Reviewed-by: meaz <meaz@no-reply@disroot.org>
Co-authored-by: muppeth <muppeth@disroot.org>
Co-committed-by: muppeth <muppeth@disroot.org>
2023-09-25 20:48:03 +00:00
meaz 01e474b0f3 update to 1.6.2 (#9)
Co-authored-by: meaz <meaz@disroot.org>
Reviewed-on: #9
Reviewed-by: muppeth <muppeth@no-reply@disroot.org>
2023-07-11 18:38:02 +00:00
muppeth 756ac5f477 Change logo to PNG (#8)
Co-authored-by: muppeth <muppeth@disroot.org>
Reviewed-on: #8
Reviewed-by: antilopa <antilopa@no-reply@disroot.org>
Reviewed-by: meaz <meaz@no-reply@disroot.org>
Co-authored-by: muppeth <muppeth@no-reply@disroot.org>
Co-committed-by: muppeth <muppeth@no-reply@disroot.org>
2023-06-25 05:30:07 +00:00
meaz 63edaacd5c fix_border_colors (#7)
Fix Disroot/Disroot-Project#449

Co-authored-by: meaz <meaz@disroot.org>
Reviewed-on: #7
2023-03-08 15:28:27 +00:00
meaz e555a90ab7 Upgrade Roundcube beetroot theme to 1.6.0 (#6)
Co-authored-by: meaz <meaz@disroot.org>
Co-authored-by: muppeth <muppeth@disroot.org>
Reviewed-on: #6
Reviewed-by: muppeth <muppeth@no-reply@disroot.org>
2022-09-06 14:58:42 +00:00
31 changed files with 482 additions and 171 deletions

3
.gitignore vendored
View File

@ -2,3 +2,6 @@ styles/styles.css
styles/print.css
styles/embed.css
deps/*
node_modules/
package-lock.json
package.json

View File

@ -48,8 +48,7 @@ or after installing it on the destination system.
FOR DEVELOPERS
--------------
- Supported browsers: IE11+, Edge, Last 2 versions for Chrome/Firefox/Safari,
Android Browser 5+, iOS Safari 9+.
- Supported browsers: Last 2 versions of Edge/Chrome/Firefox/Safari.
- Skin color palette changes and other css modifications can be done
via _styles.less and _variables.less files. Where you can overwrite all

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 572 B

After

Width:  |  Height:  |  Size: 15 KiB

BIN
images/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 209 KiB

View File

@ -1,23 +1,28 @@
// Beetroot and Darkbeet colors
@color-main: #50162d;
@color-link: #bd139a;
@color-success: #50162d;
@color-warning: #F6609D;
@color-light-main: #61273E;
@color-lighter-main: #72384F;
@color-link: #BD899E;
@color-highlight: #1F5C60;
@color-success: #4F8F93;
@color-warning: #8eb726;
@color-error: #8eb726;
@color-white: #DDDDDD;
@color-link-secondary: lighten(@color-font, 60%);
@color-layout-header-background: #50162d;
// Task menu
@color-taskmenu-background: #50162d;
@color-taskmenu-button-action: #E0548D;
@color-taskmenu-button-action: #72384f;
@color-taskmenu-button-special: @color-taskmenu-button;
@color-taskmenu-button-special-background: @color-taskmenu-background;
@color-taskmenu-button-action-hover: #fff;
@color-taskmenu-button-action-hover: #DDDDDD;
@color-taskmenu-button-special-hover: lighten(@color-taskmenu-button-special, 10%);
// @color-taskmenu-button-special-background-hover:lighten(@color-taskmenu-button-special-background, 10%);
// Toolbar
@color-toolbar-button-background-hover: lighten(@color-layout-header-background, 10%);
@color-searchbar-icon-active: green;
@color-searchbar-icon-active: #8eb726;
// Popovers (menus)
@color-popover-header: @color-black-shade-text;
@ -27,20 +32,26 @@
@color-btn-secondary-background: lighten(@color-main, 10%);
// Dark mode colors
@color-dark-main: darken(@color-main, 10%);
@color-dark-background: #252121;
@color-dark-main: @color-main;
@color-dark-background: #2b2f3b;
@color-darker-background: #1f222b;
@color-dark-font: #DDDDDD;
@color-dark-border: #292525;
@color-dark-border: #1f222b;
@color-dark-taskmenu-button-action: #4F8F93;
@color-dark-taskmenu-button-action-hover: @color-dark-font;
@color-dark-input-background: @color-darker-background;
@color-dark-list-selected: #FFFFFF;
@color-dark-list-selected: #DDDDDD;
@color-dark-list-selected-background: #50162D;
@color-dark-list-droptarget-background: #353131;
@color-dark-list-border: #353131;
@color-dark-input-border: #292525;
@color-dark-input-addon-background: #292525;
@color-dark-popover-background: #201c1c;
@color-dark-list-droptarget-background: #383c4a;
@color-dark-list-border: #383c4a;
@color-dark-input-border: #471328;
@color-dark-input-addon-background: #1f222b;
@color-dark-popover-background: #1f222b;
@color-dark-popover-border: #50162d;
// @color-taskmenu-background: @color-darker-background;
@color-taskmenu-button-action: @color-white;
@color-taskmenu-button-logout: @color-error;
@color-taskmenu-button-logout-hover: @color-error;

View File

@ -1,5 +1,6 @@
// Darkbeet modifications based on elastic skin
@import "_darkc";
@import "_colors";
html.dark-mode {
@ -7,28 +8,51 @@ html.dark-mode {
// .tox {
// .tox-edit-area__iframe {
// background-color: @color-dark-popover-background;
// color: white;
// color: @color-white;
// }
// }
#taskmenu {
a {
&.selected {
color: white;
color: @color-white;
background-color: @color-dark-list-selected-background;
}
}
.action-buttons a {
color: white;
color: @color-white;
}
}
.menu
a.compose::before {
color: white;
color: @color-white;
}
#layout > div > .header,
#layout-menu {
background-color: @color-dark-popover-background;
border: unset;
}
#layout-menu .special-buttons a:not(:focus) {
background: @color-dark-border;
}
// The two following are to get lighter borders when composing message (to: and subject:), when focus
.custom-file-label:focus:not(.is-invalid), .form-control:focus:not(.is-invalid) {
border-color: 3f;
}
.recipient-input.focus {
border-color: @color-light-main !important;
}
// Get dotted line around attachment brighter
.file-upload {
border: .2rem dashed @color-main;
}
#messagelist {
border: @color-dark-border 1px solid;
background-color: @color-darker-background;
}
}

View File

@ -22,10 +22,23 @@
/* login page */
.task-login #logo {
filter: invert(91%) sepia(52%) saturate(2742%) hue-rotate(312deg) brightness(95%) contrast(93%);
}
& when (@dark-mode-enabled = true) {
@import "_dark";
}
/*** Fonts ***/
@font-face {
font-family: 'Icons';
font-style: normal;
font-weight: 900;
src: url("../fonts/fa-solid-900.woff2") format('woff2'),
url("../fonts/fa-solid-900.woff") format('woff');
}
@font-face {
font-family: 'Icons';
font-style: normal;
font-weight: 400;
src: url("../fonts/fa-regular-400.woff2") format('woff2'),
url("../fonts/fa-regular-400.woff") format('woff');
}

View File

@ -267,7 +267,7 @@
@color-dark-message-error: @color-dark-error;
@color-dark-message-loading: lighten(@color-dark-background, 10%);
@color-dark-scrollbar-thumb: @color-dark-main;
@color-dark-scrollbar-thumb: darken(@color-main, 25%);
@color-dark-scrollbar-track: @color-dark-border;
@color-dark-blockquote-0: lighten(@color-main, 10%);

View File

@ -12,41 +12,15 @@
@import (reference) "variables";
html.dark-mode {
& when not (@scrollbar-dark-width = unset) {
scrollbar-color: @color-dark-scrollbar-thumb @color-dark-scrollbar-track;
scrollbar-width: @scrollbar-dark-width;
scrollbar-color: @color-dark-scrollbar-thumb @color-dark-scrollbar-track;
textarea,
select,
.popover-body,
.popupmenu,
.ui-dialog-content,
.frame-content,
.formcontent,
.table-responsive,
.table-responsive-sm,
.scroller {
// Firefox does not inherit scrollbar size from the html element
scrollbar-width: @scrollbar-dark-width;
&:not(.touch) {
::-webkit-scrollbar-track {
background-color: @color-dark-scrollbar-track;
}
&:not(.touch) {
::-webkit-scrollbar when (@scrollbar-dark-width = auto) {
// Note: If we do not set the width a default scrollbar is used in Chrome.
// And the custom colors set below do not work
width: 12px;
}
::-webkit-scrollbar when (@scrollbar-dark-width = thin) {
width: 6px;
}
::-webkit-scrollbar-track {
background-color: @color-dark-scrollbar-track;
}
::-webkit-scrollbar-thumb {
background-color: @color-dark-scrollbar-thumb;
}
::-webkit-scrollbar-thumb {
background-color: @color-dark-scrollbar-thumb;
}
}
@ -781,17 +755,11 @@ html.dark-mode {
}
.tox-menu {
scrollbar-width: @scrollbar-dark-width;
background-color: @color-dark-popover-background;
border-color: @color-dark-popover-border;
box-shadow: none;
}
.tox-dialog__body-nav,
.tox-collection__group {
scrollbar-width: @scrollbar-dark-width;
}
.tox-collection__item-caret svg {
fill: @color-dark-font;
}
@ -985,7 +953,6 @@ html.dark-mode {
}
.ui-menu {
scrollbar-width: @scrollbar-dark-width;
background-color: @color-dark-popover-background;
border-color: @color-dark-popover-border;
box-shadow: none;

View File

@ -93,8 +93,3 @@
.rcmail-inline-buttons {
margin: 0;
}
// Have a black background when writing an email
// & when (@dark-mode-enabled = true) {
// @import "dark";
// }

185
styles/embed.min.css vendored
View File

@ -1 +1,184 @@
@font-face{font-family:'Icons';font-style:normal;font-weight:900;src:url("../fonts/la-solid-900.woff2") format('woff2'),url("../fonts/la-solid-900.woff") format('woff')}@font-face{font-family:'Icons';font-style:normal;font-weight:400;src:url("../fonts/la-regular-400.woff2") format('woff2'),url("../fonts/la-regular-400.woff") format('woff')}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;src:local('Roboto'),local('Roboto-Regular'),url('../fonts/roboto-v29-regular.woff2') format('woff2'),url('../fonts/roboto-v29-regular.woff') format('woff')}@font-face{font-family:'Roboto';font-style:italic;font-weight:400;src:local('Roboto Italic'),local('Roboto-Italic'),url('../fonts/roboto-v29-italic.woff2') format('woff2'),url('../fonts/roboto-v29-italic.woff') format('woff')}@font-face{font-family:'Roboto';font-style:normal;font-weight:700;src:local('Roboto Bold'),local('Roboto-Bold'),url('../fonts/roboto-v29-regular-700.woff2') format('woff2'),url('../fonts/roboto-v29-regular-700.woff') format('woff')}@font-face{font-family:'Roboto';font-style:italic;font-weight:700;src:local('Roboto Bold Italic'),local('Roboto-BoldItalic'),url('../fonts/roboto-v29-italic-700.woff2') format('woff2'),url('../fonts/roboto-v29-italic-700.woff') format('woff')}body,button,input,optgroup,select,textarea,.popover{font-family:Roboto,sans-serif}button,input,select,textarea{line-height:initial}input{vertical-align:middle}a{color:#bd139a}a:hover{color:#8f0e74}a.disabled{pointer-events:none}a.disabled:not(.btn){opacity:.5}html{scrollbar-color:#c1c1c1 #f1f1f1;scrollbar-width:thin}html textarea,html select,html .popover-body,html .popupmenu,html .ui-dialog-content,html .frame-content,html .formcontent,html .table-responsive,html .table-responsive-sm,html .scroller{scrollbar-width:thin}html:not(.touch) ::-webkit-scrollbar{width:6px}html:not(.touch) ::-webkit-scrollbar-track{background-color:#f1f1f1}html:not(.touch) ::-webkit-scrollbar-thumb{background-color:#c1c1c1}.mce-content-body{margin:4px;color:#2c363a}.mce-content-body div.pre{font-family:monospace}.mce-content-body blockquote{border-left:#1010ff 2px solid;margin:0;padding:0 .4em}.rcmail-inline-message{font-family:Roboto,sans-serif;font-size:14px;padding:.5em;margin:0 0 .5em 0;opacity:.95;color:#2c363a;background-color:rgba(246,96,157,0.2);display:flex;align-items:center}.rcmail-inline-message:before{font-size:1.25em;display:block;float:left;margin:0 .25rem 0 0;width:1.18em;height:1em;font-family:'Icons';font-style:normal;font-weight:900;text-decoration:inherit;text-align:center;speak:none;font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-size:1.5em;line-height:1;width:1em;margin-right:.3em;content:"\f071";color:#F6609D}.rcmail-inline-message span{line-height:1.5}.rcmail-inline-message a{color:#bd139a}.rcmail-inline-message a:hover{color:#8f0e74}.rcmail-inline-message button{vertical-align:middle;white-space:nowrap;padding:.375em .75em;margin-left:.5em;font-size:1em;line-height:1.5;border-radius:.25em;border:1px solid transparent;color:#fff;background:#50162d}.rcmail-inline-message button:focus{box-shadow:0 0 0 .2rem rgba(80,22,45,0.5)}.rcmail-inline-message button:hover{background:#300d1b;border-color:#280b17}.rcmail-inline-message button:not([disabled]):not(.disabled):active{background:#240a14;border-color:#1c0810;box-shadow:0 0 0 .2rem rgba(80,22,45,0.53)}.rcmail-inline-buttons{margin:0}
/**
* Roundcube Webmail styles for the Elastic skin
*
* Copyright (c) The Roundcube Dev Team
*
* The contents are subject to the Creative Commons Attribution-ShareAlike
* License. It is allowed to copy, distribute, transmit and to adapt the work
* by keeping credits to the original authors in the README.md file.
* See http://creativecommons.org/licenses/by-sa/3.0/ for details.
*/
/* Style for embedded pages and TinyMCE editor content page */
/**
* Roundcube Webmail styles for the Elastic skin
*
* Copyright (c) The Roundcube Dev Team
*
* The contents are subject to the Creative Commons Attribution-ShareAlike
* License. It is allowed to copy, distribute, transmit and to adapt the work
* by keeping credits to the original authors in the README.md file.
* See http://creativecommons.org/licenses/by-sa/3.0/ for details.
*/
/*** Fonts ***/
@font-face {
font-family: 'Icons';
font-style: normal;
font-weight: 900;
src: url("../fonts/fa-solid-900.woff2") format('woff2'), url("../fonts/fa-solid-900.woff") format('woff');
}
@font-face {
font-family: 'Icons';
font-style: normal;
font-weight: 400;
src: url("../fonts/fa-regular-400.woff2") format('woff2'), url("../fonts/fa-regular-400.woff") format('woff');
}
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 400;
src: local('Roboto'), local('Roboto-Regular'), url('../fonts/roboto-v29-regular.woff2') format('woff2'), url('../fonts/roboto-v29-regular.woff') format('woff');
}
@font-face {
font-family: 'Roboto';
font-style: italic;
font-weight: 400;
src: local('Roboto Italic'), local('Roboto-Italic'), url('../fonts/roboto-v29-italic.woff2') format('woff2'), url('../fonts/roboto-v29-italic.woff') format('woff');
}
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 700;
src: local('Roboto Bold'), local('Roboto-Bold'), url('../fonts/roboto-v29-regular-700.woff2') format('woff2'), url('../fonts/roboto-v29-regular-700.woff') format('woff');
}
@font-face {
font-family: 'Roboto';
font-style: italic;
font-weight: 700;
src: local('Roboto Bold Italic'), local('Roboto-BoldItalic'), url('../fonts/roboto-v29-italic-700.woff2') format('woff2'), url('../fonts/roboto-v29-italic-700.woff') format('woff');
}
/* Reset some Bootstrap style */
body,
button,
input,
optgroup,
select,
textarea,
.popover {
font-family: Roboto, sans-serif;
}
button,
input,
select,
textarea {
line-height: initial;
}
input {
vertical-align: middle;
}
a {
color: #BD899E;
}
a:hover {
color: #ab6883;
}
a.disabled {
pointer-events: none;
}
a.disabled:not(.btn) {
opacity: 0.5;
}
/* Scrollbar styles */
html:not(.touch) ::-webkit-scrollbar {
width: 6px;
}
html {
scrollbar-color: #c1c1c1 #f1f1f1;
}
html:not(.touch) ::-webkit-scrollbar-track {
background-color: #f1f1f1;
}
html:not(.touch) ::-webkit-scrollbar-thumb {
background-color: #c1c1c1;
}
.mce-content-body {
margin: 4px;
color: #2c363a;
}
.mce-content-body div.pre {
font-family: monospace;
}
.mce-content-body blockquote {
border-left: #1010ff 2px solid;
margin: 0;
padding: 0 0.4em;
}
.rcmail-inline-message {
font-family: Roboto, sans-serif;
font-size: 14px;
padding: 0.5em;
margin: 0 0 0.5em 0;
opacity: 0.95;
color: #2c363a;
background-color: rgba(142, 183, 38, 0.2);
display: flex;
align-items: center;
}
.rcmail-inline-message:before {
font-size: 1.25em;
display: block;
float: left;
margin: 0 0.25rem 0 0;
width: 1.18em;
height: 1em;
font-family: 'Icons';
font-style: normal;
font-weight: 900;
text-decoration: inherit;
text-align: center;
speak: none;
font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased;
font-size: 1.5em;
line-height: 1;
width: 1em;
margin-right: 0.3em;
content: "\f071";
color: #8eb726;
}
.rcmail-inline-message span {
line-height: 1.5;
}
.rcmail-inline-message a {
color: #BD899E;
}
.rcmail-inline-message a:hover {
color: #ab6883;
}
.rcmail-inline-message button {
vertical-align: middle;
white-space: nowrap;
padding: 0.375em 0.75em;
margin-left: 0.5em;
font-size: 1em;
line-height: 1.5;
border-radius: 0.25em;
border: 1px solid transparent;
color: #fff;
background: #50162d;
}
.rcmail-inline-message button:focus {
box-shadow: 0 0 0 0.2rem rgba(80, 22, 45, 0.5);
}
.rcmail-inline-message button:hover {
background: #300d1b;
border-color: #280b17;
}
.rcmail-inline-message button:not([disabled]):not(.disabled):active {
background: #240a14;
border-color: #1c0810;
box-shadow: 0 0 0 0.2rem rgba(80, 22, 45, 0.53);
}
.rcmail-inline-buttons {
margin: 0;
}

View File

@ -18,16 +18,16 @@
font-family: 'Icons';
font-style: normal;
font-weight: 900;
src: url("../fonts/la-solid-900.woff2") format('woff2'),
url("../fonts/la-solid-900.woff") format('woff');
src: url("../fonts/fa-solid-900.woff2") format('woff2'),
url("../fonts/fa-solid-900.woff") format('woff');
}
@font-face {
font-family: 'Icons';
font-style: normal;
font-weight: 400;
src: url("../fonts/la-regular-400.woff2") format('woff2'),
url("../fonts/la-regular-400.woff") format('woff');
src: url("../fonts/fa-regular-400.woff2") format('woff2'),
url("../fonts/fa-regular-400.woff") format('woff');
}
@font-face {
@ -99,21 +99,27 @@ a {
/* Scrollbar styles */
html when not (@scrollbar-width = unset) {
scrollbar-color: @color-scrollbar-thumb @color-scrollbar-track;
scrollbar-width: @scrollbar-width;
textarea,
select,
.popover-body,
.popupmenu,
.ui-dialog-content,
.frame-content,
.formcontent,
.table-responsive,
.table-responsive-sm,
.scroller {
// Firefox does not inherit scrollbar size from the html element
// Ignore thin width setting for Firefox, it makes the scrollbar very very thin in Firefox >= 100
& when not (@scrollbar-width = thin) {
scrollbar-width: @scrollbar-width;
textarea,
select,
.popover-body,
.popupmenu,
.ui-menu,
.ui-dialog-content,
.frame-content,
.formcontent,
.table-responsive,
.table-responsive-sm,
.tox-menu,
.tox-dialog__body-nav,
.tox-collection__group,
.scroller {
// Firefox does not inherit scrollbar size from the html element
scrollbar-width: @scrollbar-width;
}
}
&:not(.touch) {
@ -125,7 +131,13 @@ html when not (@scrollbar-width = unset) {
::-webkit-scrollbar when (@scrollbar-width = thin) {
width: 6px;
}
}
}
html {
scrollbar-color: @color-scrollbar-thumb @color-scrollbar-track;
&:not(.touch) {
::-webkit-scrollbar-track {
background-color: @color-scrollbar-track;
}

View File

@ -155,6 +155,7 @@ body {
flex: 6;
flex-direction: column;
background-color: @color-layout-content-background;
width: 100%;
html.iframe & {
height: 100%;

58
styles/print.min.css vendored
View File

@ -1 +1,57 @@
#print-layout #message-header,#print-layout .image-attachment .image-link{margin-bottom:.5rem}body{overflow:auto;height:auto}#print-layout{margin:1rem}#print-layout #logo{max-height:80px}#print-layout .image-attachment .attachment-links{display:none}#print-layout .attachment-size{padding-left:.1rem}#print-layout blockquote{page-break-inside:auto}#print-layout .formcontent{padding:0}#print-layout .formcontent legend{margin-top:.5rem}#print-layout .formcontent .row .form-control-plaintext{padding:.1rem}#print-layout .formcontent .contactfield{padding:.2rem 0}#print-layout .propform.grouped .row.input-group .input-group-text{padding:0;min-width:12rem;background:#fff;border:0}#print-layout .contact-header{margin-bottom:0}
/**
* Roundcube Webmail styles for the Elastic skin
*
* Copyright (c) The Roundcube Dev Team
*
* The contents are subject to the Creative Commons Attribution-ShareAlike
* License. It is allowed to copy, distribute, transmit and to adapt the work
* by keeping credits to the original authors in the README.md file.
* See http://creativecommons.org/licenses/by-sa/3.0/ for details.
*/
/*** Additional styles for printouts ***/
body {
overflow: auto;
height: auto;
}
#print-layout {
margin: 1rem;
}
#print-layout #logo {
max-height: 80px;
}
#print-layout .image-attachment .image-link {
margin-bottom: 0.5rem;
}
#print-layout .image-attachment .attachment-links {
display: none;
}
#print-layout #message-header {
margin-bottom: 0.5rem;
}
#print-layout .attachment-size {
padding-left: 0.1rem;
}
#print-layout blockquote {
page-break-inside: auto;
}
#print-layout .formcontent {
padding: 0;
}
#print-layout .formcontent legend {
margin-top: 0.5rem;
}
#print-layout .formcontent .row .form-control-plaintext {
padding: 0.1rem;
}
#print-layout .formcontent .contactfield {
padding: 0.2rem 0;
}
#print-layout .propform.grouped .row.input-group .input-group-text {
padding: 0;
min-width: 12rem;
background: #fff;
border: 0;
}
#print-layout .contact-header {
margin-bottom: 0;
}

View File

@ -405,6 +405,18 @@ body.task-error-login #layout {
font-family: monospace;
font-size: 13px;
}
// This is needed for proper display of quoted plain text
blockquote {
display: inline-block;
min-width: 100%;
& + br {
// compensate the spacing "removed" by the inline-block style above
display: block;
margin-top: 1em;
}
}
}
#compose-attachments {

File diff suppressed because one or more lines are too long

View File

@ -55,7 +55,6 @@
// Scrollbars
@scrollbar-width: thin; // 'auto' or 'thin' or 'unset'
@scrollbar-dark-width: thin; // 'auto' or 'thin' or 'unset'
// Additional icons
@icon-resize-corner: data-uri("image/svg+xml;charset=utf-8", "../images/corner-handle.svg"); // size: 16x16

View File

@ -128,6 +128,7 @@ html.layout-phone {
a {
display: inline-block;
width: 100%;
color: @color-popover-mobile-header;
}
}

View File

@ -86,12 +86,6 @@ div.tox {
background-color: @color-dialog-overlay-background;
}
.tox-menu,
.tox-dialog__body-nav,
.tox-collection__group {
scrollbar-width: @scrollbar-width;
}
.tox-dialog__header {
height: (@layout-header-height - 1px);
border-bottom: 1px solid @color-dialog-header-border;

View File

@ -959,23 +959,50 @@ html.ms .propform {
.style-input-focus();
}
.recipient {
display: flex;
position: relative;
max-width: ~"calc(50% - 3px)";
border: 1px solid @color-recipient-input-border;
background-color: @color-recipient-input-background;
border-radius: .25em;
padding: 0 .25em;
margin-top: @recipient-input-margin-fix;
margin-right: .2em;
white-space: nowrap;
cursor: default;
li {
max-width: 100%;
@media screen and (max-width: 450px) {
width: 100%;
max-width: 100%;
&:not(.recipient) {
user-select: text;
}
&.input {
flex: 1;
min-width: 100px;
}
}
input {
width: 100%;
background: transparent !important;
border: 0 !important;
margin-top: @recipient-input-margin-fix;
outline: 0;
line-height: 1.5;
&::-ms-clear {
display: none; // removes clear icon in IE11
}
}
}
.recipient-input li.recipient,
body > li.recipient.ui-sortable-helper {
display: flex;
position: relative;
max-width: ~"calc(50% - 3px)";
border: 1px solid @color-recipient-input-border;
background-color: @color-recipient-input-background;
border-radius: .25rem;
padding: 0 .25rem;
margin-top: @recipient-input-margin-fix;
margin-right: .2em;
white-space: nowrap;
cursor: default;
@media screen and (max-width: 450px) {
width: 100%;
max-width: 100%;
}
.name {
@ -1011,30 +1038,9 @@ html.ms .propform {
}
}
li {
max-width: 100%;
&:not(.recipient) {
user-select: text;
}
&.input {
flex: 1;
min-width: 100px;
}
}
input {
width: 100%;
background: transparent !important;
border: 0 !important;
margin-top: @recipient-input-margin-fix;
outline: 0;
line-height: 1.5;
&::-ms-clear {
display: none; // removes clear icon in IE11
}
&.ui-sortable-helper {
// fix element width while dragging
padding: 0 0 0 .25rem !important;
}
}

View File

@ -33,7 +33,6 @@
border-radius: .3rem;
z-index: 240;
position: absolute;
scrollbar-width: @scrollbar-width;
.ui-state-active {
border: 0 !important;

View File

@ -794,7 +794,14 @@ html.touch {
.messagelist {
tr {
position: relative;
display: flex; // Safari fix (#8433)
}
td.selection,
td.threads {
line-height: 3.8em; // because of display:flex above
}
td.flags {
position: absolute;
top: .25rem;
@ -806,6 +813,7 @@ html.touch {
visibility: hidden;
}
}
td.subject {
padding-right: .5em;

View File

@ -1,7 +1,7 @@
<div id="layout-menu">
<h2 id="aria-label-tasknav" class="voice"><roundcube:label name="arialabeltasknav" /></h2>
<div class="popover-header">
<roundcube:object name="logo" src="/images/logo.svg" id="logo" alt="Logo" />
<roundcube:object name="logo" src="/images/logo.png" id="logo" alt="Logo" />
<a class="button icon cancel"><span class="inner"><roundcube:label name="close" /></span></a>
</div>
<div id="taskmenu" class="menu toolbar" role="navigation" aria-labelledby="aria-label-tasknav">

View File

@ -3,7 +3,7 @@
<h1 class="voice"><roundcube:object name="productname" /> <roundcube:label name="login" /></h1>
<div id="layout-content" class="selected no-navbar" role="main">
<roundcube:object name="logo" src="/images/logo.svg" id="logo" alt="Logo" />
<roundcube:object name="logo" src="/images/logo.png" id="logo" alt="Logo" />
<roundcube:form id="login-form" name="login-form" method="post" class="propform">
<roundcube:object name="loginform" form="login-form" size="40" submit=true class="form-control" />
<div id="login-footer" role="contentinfo">
@ -12,6 +12,15 @@
<roundcube:if condition="config:support_url" />
&nbsp;&bull;&nbsp; <a href="<roundcube:var name='config:support_url' />" target="_blank" class="support-link"><roundcube:label name="support" /></a>
<roundcube:endif />
<roundcube:if condition="config:legal_url" />
&nbsp;&#9679;&nbsp; <a href="<roundcube:var name='config:legal_url' />" target="_blank" class="legal-link"><roundcube:label name="legal" /></a>
<roundcube:endif />
<roundcube:if condition="config:privacy_policy_url" />
&nbsp;&#9679;&nbsp; <a href="<roundcube:var name='config:privacy_policy_url' />" target="_blank" class="privacy-link"><roundcube:label name="privacypolicy" /></a>
<roundcube:endif />
<roundcube:if condition="config:password_reset_url" />
&nbsp;&#9679;&nbsp; <a href="<roundcube:var name='config:password_reset_url' />" target="_blank" class="passwordreset-link"><roundcube:label name="passwordreset" /></a>
<roundcube:endif />
<roundcube:container name="loginfooter" id="login-footer" />
</div>
</form>

64
ui.js
View File

@ -870,8 +870,8 @@ function rcube_elastic_ui()
$('.popup', context).addClass('formcontent').append(
$('<div class="form-group row">')
.append(label.attr('for', id).addClass('col-sm-2 col-form-label'))
.append($('<div class="col-sm-10">').append(input))
.append(label.attr('for', id).addClass('col-sm-4 col-form-label text-break'))
.append($('<div class="col-sm-8">').append(input))
);
input.focus();
@ -2428,28 +2428,30 @@ function rcube_elastic_ui()
if (popup_id && menus[popup_id] && popup.is(':visible')) {
menus[popup_id].transitioning = true;
}
})
.on('hidden.bs.popover', function() {
if (/-clone$/.test(popup.attr('id'))) {
popup.remove();
}
else {
popup.attr('aria-hidden', true)
// Some menus aren't being hidden, force that
.addClass('hidden')
// Bootstrap will detach the popup element from
// the DOM (https://github.com/twbs/bootstrap/issues/20219)
// making our menus to not update buttons state.
// Work around this by attaching it back to the DOM tree.
.appendTo(popup.data('popup-parent') || document.body);
}
// close orphaned popovers, for some reason there are sometimes such dummy elements left
$('.popover-body:empty').each(function() { $(this).parent().remove(); });
// Note: We do not use hidden.bs.popover event because it is not always executed (#8602)
setTimeout(function () {
if (/-clone$/.test(popup.attr('id'))) {
popup.remove();
}
else {
popup.attr('aria-hidden', true)
// Some menus aren't being hidden, force that
.addClass('hidden')
// Bootstrap will detach the popup element from
// the DOM (https://github.com/twbs/bootstrap/issues/20219)
// making our menus to not update buttons state.
// Work around this by attaching it back to the DOM tree.
.appendTo(popup.data('popup-parent') || document.body);
}
if (popup_id && menus[popup_id]) {
delete menus[popup_id];
}
// close orphaned popovers, for some reason there are sometimes such dummy elements left
$('.popover-body:empty').each(function() { $(this).parent().remove(); });
if (popup_id && menus[popup_id]) {
delete menus[popup_id];
}
}, 200);
})
// Because Bootstrap does not provide originalEvent in show/shown events
// we have to handle that by our own using click and keydown handlers
@ -2478,7 +2480,11 @@ function rcube_elastic_ui()
$(item).attr('title', title);
}
popup.attr('aria-hidden', 'true').data('button', item);
if (is_mobile() || !popup.is('.toolbar')) {
popup.attr('aria-hidden', 'true');
}
popup.data('button', item);
// stop propagation to e.g. do not hide the popup when
// clicking inside on form elements
@ -2704,7 +2710,7 @@ function rcube_elastic_ui()
return true;
};
dialog = rcmail.simple_dialog(dialog, rcmail.gettext('listoptionstitle'), save_func, {
dialog = rcmail.simple_dialog(dialog, 'listoptionstitle', save_func, {
closeOnEscape: true,
minWidth: 400
});
@ -2762,7 +2768,7 @@ function rcube_elastic_ui()
var props = {_uid: rcmail.env.uid, _mbox: rcmail.env.mailbox, _framed: 1},
dialog = $('<iframe>').attr({id: 'headersframe', src: rcmail.url('headers', props)});
rcmail.simple_dialog(dialog, rcmail.gettext('arialabelmessageheaders'), null, {
rcmail.simple_dialog(dialog, 'arialabelmessageheaders', null, {
cancel_button: 'close',
height: 400
});
@ -2775,7 +2781,7 @@ function rcube_elastic_ui()
{
var dialog = $('#properties-menu').clone();
rcmail.simple_dialog(dialog, rcmail.gettext('properties'), null, {
rcmail.simple_dialog(dialog, 'properties', null, {
cancel_button: 'close',
height: 400
});
@ -2797,7 +2803,7 @@ function rcube_elastic_ui()
return rcmail.command('import-messages', $(dialog.find('form')[0]));
};
rcmail.simple_dialog(dialog, rcmail.gettext('importmessages'), save_func, {
rcmail.simple_dialog(dialog, 'importmessages', save_func, {
button: 'import',
closeOnEscape: true,
minWidth: 400
@ -3152,7 +3158,7 @@ function rcube_elastic_ui()
{
if (!opts) opts = {};
var title = rcmail.gettext(opts.title || 'insertcontact'),
var title = opts.title || 'insertcontact',
dialog = $('#recipient-dialog'),
parent = dialog.parent(),
close_func = function() {
@ -3407,7 +3413,7 @@ function rcube_elastic_ui()
recipients.push({
name: '',
email: email.replace(/(^<|>$)/g, '') // trim < and > characters
.replace(/[^a-z]$/gi, '') // remove trailing comma or any non-letter character at the end (#7899)
.replace(/[^\p{L}]$/giu, '') // remove trailing comma or any non-letter character at the end (#7899, #9257)
});
str = str.replace(email, '').trim();

13
ui.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -21,8 +21,8 @@ html:not(.dark-mode) body:before {
background: rgba(255, 255, 255, .85);
}
html.dark-mode > body {
background-color: #21292c;
background-blend-mode: soft-light;
background-color: #2b2f3b;
background-blend-mode: overlay;
}
</style>
<script>