Drop bootstrap .well and .pull-left

Reduce bootstrap .pull-right usage
This commit is contained in:
djmaze 2021-11-09 00:53:42 +01:00
parent d64cfb96ad
commit 99c72ad9e6
29 changed files with 348 additions and 391 deletions

View file

@ -15,7 +15,6 @@
@import "../../vendors/bootstrap/less/button-groups.less";
@import "../../vendors/bootstrap/less/alerts.less";
@import "../../vendors/bootstrap/less/utilities.less";
@import "../../vendors/bootstrap/less/wells.less";
@import "_FontasticToBoot.less";
@import "_BootstrapFix.less";

View file

@ -10,33 +10,32 @@
opacity: 0.5;
}
}
table {
.b-admin-packages-list-table {
width: 700px;
width: 700px;
.package-img {
font-size: 12px;
margin-right: 2px;
div:first-child {
display: flex;
}
}
.package-name {
flex-grow: 1;
}
.package-name.core {
font-weight: bold;
}
.package-desc {
color: #999;
font-size: 12px;
opacity: 0.7;
}
.package-release, .package-actions {
td + td {
text-align: center;
}
.package-actions {
vertical-align: middle;
}
.package-configure, .package-active {
a {
cursor: pointer;
margin-right: 1em;
}

View file

@ -16,29 +16,21 @@
transition: left 0.3s ease-out, right 0.3s ease-out;
}
@media screen and (min-width: 1000px) {
html.rl-started-trigger .LoginView {
/*transform: scale(1.1);*/
transform: translateY(-20px);
opacity: 0.5;
}
.LoginView .errorAnimated {
animation: login-form-shake 400ms ease-in-out;
}
.LoginView .errorAnimated .buttonLogin {
color: #b94a48;
font-weight: bold;
}
.LoginView {
transition: all 0.3s ease-out;
}
.button-delete-transitions {
transition: all 0.2s linear;
}
html.rl-started-trigger .LoginView {
/*transform: scale(1.1);*/
transform: translateY(-20px);
opacity: 0.5;
}
.LoginView .errorAnimated {
animation: login-form-shake 400ms ease-in-out;
}
.LoginView .errorAnimated .buttonLogin {
color: #b94a48;
font-weight: bold;
}
.LoginView {
transition: all 0.3s ease-out;
}

View file

@ -76,6 +76,7 @@ textarea + .settings-save-trigger {
}
.button-confirm-delete {
transition: all 0.2s linear;
white-space: nowrap;
}
.button-confirm-delete:not(.delete-access) {

View file

@ -12,10 +12,6 @@
@media screen and (min-width: 1000px) {
.button-delete-transitions {
transition: all 0.2s linear;
}
.b-folders li .anim-action-class {
animation: highlight-folder-row 0.5s linear;
}

View file

@ -31,6 +31,7 @@ html.rl-no-preview-pane {
flex-direction: column;
.b-footer {
display: flex;
flex-shrink: 0;
padding: 7px;
@ -51,6 +52,11 @@ html.rl-no-preview-pane {
}
}
.b-footer nav {
flex-grow: 1;
text-align: right;
}
.btn.buttonMoreSearch {
font-size: 11px;
padding-left: 8px;
@ -58,6 +64,7 @@ html.rl-no-preview-pane {
}
.second-toolbar {
display: flex;
flex-shrink: 0;
padding: 10px 8px 10px 11px;
white-space: nowrap;
@ -68,26 +75,35 @@ html.rl-no-preview-pane {
border-top-right-radius: @rlMainBorderRadius;
border-top-left-radius: @rlMainBorderRadius;
border-bottom: 1px solid #bbb;
}
.checkboxCheckAll {
cursor: pointer;
vertical-align: middle
}
.checkboxCheckAll {
cursor: pointer;
margin: 0.5em 0.5em 0 0;
}
.input-append {
margin-left: 14px;
text-align: right;
width: calc(100% - 30px);
.search-input-wrp {
flex-grow: 1;
position: relative;
text-align: right;
}
.close-input-wrp {
width: 90%;
min-width: 200px;
max-width: 300px;
}
.inputSearch {
display: inline-block;
max-width: 300px;
width: 100%;
}
.inputSearch {
width: 100%;
}
.closeSearch {
position: absolute;
right: 0;
top: 5px;
margin: 0 7px;
z-index: 100;
vertical-align: middle;
opacity: .4;
&:hover {
opacity: .6;
}
}

View file

@ -80,10 +80,6 @@
border-radius: @rlMainBorderRadius;
}
html.rl-mobile #rl-settings-subscreen > * {
margin-right: 15px;
}
.firefox-drag #rl-settings-subscreen,
.firefox-drag .modal-body {
overflow: hidden;

View file

@ -26,10 +26,10 @@
}
td + td {
width: 150px;
text-align: right;
}
td + td + td {
width: 1%;
width: 1em;
}
.delete {

View file

@ -10,6 +10,7 @@
}
td + td {
white-space: nowrap;
width: 1em;
}

View file

@ -93,7 +93,7 @@
blockquote {
border: 0;
border-left: solid 2px #444;
border-left: 2px solid #444;
margin: 5px 0 5px 5px;
padding-left: 5px;
}

View file

@ -59,25 +59,3 @@ label.inline, span.inline {
}
}
}
.close-input-wrp {
display: inline-block;
position: relative;
input {
padding-right: 15px;
}
.close {
position: absolute;
right: 0;
top: 5px;
margin: 0 7px;
z-index: 100;
vertical-align: middle;
opacity: .4;
&:hover {
opacity: .6;
}
}
}

View file

@ -1,94 +1,92 @@
<div class="b-settings-two-factor">
<div class="b-settings-two-factor form-horizontal">
<div class="legend" data-i18n="POPUPS_TWO_FACTOR_CFG/LEGEND_TWO_FACTOR_AUTH"></div>
<div class="form-horizontal">
<div class="legend" data-i18n="POPUPS_TWO_FACTOR_CFG/LEGEND_TWO_FACTOR_AUTH"></div>
<div class="form-horizontal">
<div class="control-group" data-bind="visible: twoFactorStatus">
<div class="controls">
<div style="display: inline-block" data-bind="attr:{title: viewTwoFactorEnableTooltip}">
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'POPUPS_TWO_FACTOR_CFG/LABEL_ENABLE_TWO_FACTOR',
enable: twoFactorAllowedEnable,
value: viewEnable,
inline: true
}
}"></div>
</div>
&nbsp;&nbsp;&nbsp;
<span class="g-ui-link" data-bind="click: testTwoFactor, visible: twoFactorStatus"
data-i18n="POPUPS_TWO_FACTOR_CFG/LINK_TEST"></span>
<div class="control-group" data-bind="visible: twoFactorStatus">
<div class="controls">
<div style="display: inline-block" data-bind="attr:{title: viewTwoFactorEnableTooltip}">
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'POPUPS_TWO_FACTOR_CFG/LABEL_ENABLE_TWO_FACTOR',
enable: twoFactorAllowedEnable,
value: viewEnable,
inline: true
}
}"></div>
</div>
&nbsp;&nbsp;&nbsp;
<span class="g-ui-link" data-bind="click: testTwoFactor, visible: twoFactorStatus"
data-i18n="POPUPS_TWO_FACTOR_CFG/LINK_TEST"></span>
</div>
<div class="control-group">
<label class="control-label">
<span data-i18n="POPUPS_TWO_FACTOR_CFG/LABEL_TWO_FACTOR_USER"></span>
</label>
<div class="controls" style="padding-top: 5px;">
<strong><span data-bind="text: viewUser"></span></strong>
<div style="padding-top: 15px;" data-bind="visible: lock">
<blockquote>
<p class="muted width100-on-mobile" style="width: 550px" data-i18n="POPUPS_TWO_FACTOR_CFG/TWO_FACTOR_REQUIRE_DESC"></p>
</blockquote>
</div>
</div>
</div>
<div class="control-group" data-bind="visible: '' === viewSecret() && twoFactorStatus() && !clearing()">
<div class="controls" style="padding-top: 5px;">
<strong data-bind="visible: secreting">...</strong>
<span class="g-ui-link" data-bind="click: showSecret, visible: !secreting()"
data-i18n="POPUPS_TWO_FACTOR_CFG/BUTTON_SHOW_SECRET"></span>
</div>
</div>
<div class="control-group" data-bind="visible: '' !== viewSecret()">
<label class="control-label">
<span data-i18n="POPUPS_TWO_FACTOR_CFG/LABEL_TWO_FACTOR_SECRET"></span>
</label>
<div class="controls" style="padding-top: 5px;">
<strong data-bind="text: viewSecret"></strong>
&nbsp;&nbsp;
<span class="g-ui-link" data-bind="click: hideSecret" data-i18n="POPUPS_TWO_FACTOR_CFG/BUTTON_HIDE_SECRET"></span>
<br />
<br />
</div>
<div class="control-group">
<label class="control-label">
<span data-i18n="POPUPS_TWO_FACTOR_CFG/LABEL_TWO_FACTOR_USER"></span>
</label>
<div class="controls" style="padding-top: 5px;">
<strong><span data-bind="text: viewUser"></span></strong>
<div style="padding-top: 15px;" data-bind="visible: lock">
<blockquote>
<p class="muted width100-on-mobile" style="width: 550px" data-i18n="POPUPS_TWO_FACTOR_CFG/TWO_FACTOR_SECRET_DESC"></p>
</blockquote>
<!-- ko if: '' !== viewUrl() -->
<img style="margin-left: -7px;" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQIW2P8DwQACgAD/il4QJ8AAAAASUVORK5CYII=" data-bind="attr: {'src': viewUrl}" />
<!-- /ko -->
</div>
</div>
<div class="control-group" data-bind="visible: '' !== viewBackupCodes()">
<label class="control-label">
<span data-i18n="POPUPS_TWO_FACTOR_CFG/LABEL_TWO_FACTOR_BACKUP_CODES"></span>
</label>
<div class="controls" style="padding-top: 5px;">
<pre data-bind="text: viewBackupCodes" style="width: 230px; word-break: break-word;"></pre>
<br />
<blockquote>
<p class="muted width100-on-mobile" style="width: 550px" data-i18n="POPUPS_TWO_FACTOR_CFG/TWO_FACTOR_BACKUP_CODES_DESC"></p>
<p class="muted width100-on-mobile" style="width: 550px" data-i18n="POPUPS_TWO_FACTOR_CFG/TWO_FACTOR_REQUIRE_DESC"></p>
</blockquote>
</div>
</div>
</div>
<a class="btn pull-left" data-bind="visible: lock, click: logout">
<i class="fontastic"></i>
<span data-i18n="GLOBAL/LOGOUT"></span>
</a>
<a class="btn btn-danger" data-bind="click: clearTwoFactor, visible: twoFactorStatus">
<i class="fontastic" data-bind="css: {'icon-spinner': clearing()}"></i>
<span data-i18n="GLOBAL/CLEAR"></span>
</a>
<a class="btn" data-bind="click: createTwoFactor, visible: !twoFactorStatus()">
<i class="fontastic" data-bind="css: {'icon-spinner': processing()}"></i>
<span data-i18n="POPUPS_TWO_FACTOR_CFG/BUTTON_ACTIVATE"></span>
</a>
<!--
<a class="btn" data-bind="command: cancelCommand, visible: viewEnable() || !lock()">
<i class="icon-ok" ></i>
<span data-i18n="GLOBAL/DONE"></span>
</a>
-->
<div class="control-group" data-bind="visible: '' === viewSecret() && twoFactorStatus() && !clearing()">
<div class="controls" style="padding-top: 5px;">
<strong data-bind="visible: secreting">...</strong>
<span class="g-ui-link" data-bind="click: showSecret, visible: !secreting()"
data-i18n="POPUPS_TWO_FACTOR_CFG/BUTTON_SHOW_SECRET"></span>
</div>
</div>
<div class="control-group" data-bind="visible: '' !== viewSecret()">
<label class="control-label">
<span data-i18n="POPUPS_TWO_FACTOR_CFG/LABEL_TWO_FACTOR_SECRET"></span>
</label>
<div class="controls" style="padding-top: 5px;">
<strong data-bind="text: viewSecret"></strong>
&nbsp;&nbsp;
<span class="g-ui-link" data-bind="click: hideSecret" data-i18n="POPUPS_TWO_FACTOR_CFG/BUTTON_HIDE_SECRET"></span>
<br />
<br />
<blockquote>
<p class="muted width100-on-mobile" style="width: 550px" data-i18n="POPUPS_TWO_FACTOR_CFG/TWO_FACTOR_SECRET_DESC"></p>
</blockquote>
<!-- ko if: '' !== viewUrl() -->
<img style="margin-left: -7px;" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQIW2P8DwQACgAD/il4QJ8AAAAASUVORK5CYII=" data-bind="attr: {'src': viewUrl}" />
<!-- /ko -->
</div>
</div>
<div class="control-group" data-bind="visible: '' !== viewBackupCodes()">
<label class="control-label">
<span data-i18n="POPUPS_TWO_FACTOR_CFG/LABEL_TWO_FACTOR_BACKUP_CODES"></span>
</label>
<div class="controls" style="padding-top: 5px;">
<pre data-bind="text: viewBackupCodes" style="width: 230px; word-break: break-word;"></pre>
<br />
<blockquote>
<p class="muted width100-on-mobile" style="width: 550px" data-i18n="POPUPS_TWO_FACTOR_CFG/TWO_FACTOR_BACKUP_CODES_DESC"></p>
</blockquote>
</div>
</div>
</div>
<a class="btn" data-bind="visible: lock, click: logout">
<i class="fontastic"></i>
<span data-i18n="GLOBAL/LOGOUT"></span>
</a>
<a class="btn btn-danger" data-bind="click: clearTwoFactor, visible: twoFactorStatus">
<i class="fontastic" data-bind="css: {'icon-spinner': clearing()}"></i>
<span data-i18n="GLOBAL/CLEAR"></span>
</a>
<a class="btn" data-bind="click: createTwoFactor, visible: !twoFactorStatus()">
<i class="fontastic" data-bind="css: {'icon-spinner': processing()}"></i>
<span data-i18n="POPUPS_TWO_FACTOR_CFG/BUTTON_ACTIVATE"></span>
</a>
<!--
<a class="btn" data-bind="command: cancelCommand, visible: viewEnable() || !lock()">
<i class="icon-ok" ></i>
<span data-i18n="GLOBAL/DONE"></span>
</a>
-->
</div>

View file

@ -294,7 +294,7 @@ trait UserAuth
$this->ClearSignMeData($oAccount);
$uuid = \SnappyMail\UUID::generate();
$salt = \sha1(\microtime(true));
$salt = \sha1(\random_bytes(16));
Utils::SetCookie(self::AUTH_SIGN_ME_TOKEN_KEY,
Utils::EncodeKeyValuesQ(array(
'e' => $oAccount->Email(),

View file

@ -30,7 +30,7 @@
<span class="domain-alias" data-bind="if: alias">(alias)</span>
</td>
<td>
<a class="btn btn-small btn-small-small btn-danger button-confirm-delete button-delete-transitions" data-bind="css: {'delete-access': deleteAccess()}, click: function(oDomain) { $root.deleteDomain(oDomain); }"
<a class="btn btn-small btn-small-small btn-danger button-confirm-delete" data-bind="css: {'delete-access': deleteAccess()}, click: function(oDomain) { $root.deleteDomain(oDomain); }"
data-i18n="TAB_DOMAINS/DELETE_ARE_YOU_SURE"></a>
</td>
<td>

View file

@ -101,7 +101,7 @@
<span data-bind="saveTrigger: attachmentLimitTrigger"></span>
<br />
<br />
<span class="well" data-bind="visible: '' !== uploadDataDesc">
<span class="alert alert-info" data-bind="visible: '' !== uploadDataDesc">
<b>PHP:</b>
&nbsp;
<span data-bind="text: uploadDataDesc"></span>

View file

@ -8,7 +8,7 @@
<!-- ko text: packages.error() --><!-- /ko -->
</div>
<div class="alert" style="margin-top: 10px;" data-bind="visible: '' !== packagesError()">
<div class="alert" style="margin-top: 10px;" data-bind="visible: packagesError()">
<button type="button" class="close" data-bind="click: function () { packagesError('') }">×</button>
<span data-bind="text: packagesError"></span>
</div>
@ -20,7 +20,7 @@
<br />
<div data-bind="visible: 0 < packagesAvailableForUpdate().length">
<div data-bind="visible: packagesAvailableForUpdate().length">
<div class="legend">
<span data-i18n="TAB_PACKAGES/LEGEND_AVAILABLE_FOR_UPDATE"></span>&nbsp;
(<span data-bind="text: packagesAvailableForUpdate().length"></span>)
@ -29,13 +29,13 @@
<br />
</div>
<div id="packages-installed" data-bind="visible: 0 < packagesCurrent().length, css: {'disabled': !enabledPlugins()}">
<div id="packages-installed" data-bind="visible: packagesCurrent().length, css: {'disabled': !enabledPlugins()}">
<div class="legend" data-i18n="TAB_PACKAGES/LEGEND_INSTALLED_PACKAGES"></div>
<div data-bind="template: { name: 'AdminSettingsPackagesTable', data: {f: packagesCurrent} }"></div>
<br />
</div>
<div data-bind="visible: 0 < packagesAvailableForInstallation().length">
<div data-bind="visible: packagesAvailableForInstallation().length">
<div class="legend" data-i18n="TAB_PACKAGES/LEGEND_AVAILABLE_FOR_INSTALLATION"></div>
<div data-bind="template: { name: 'AdminSettingsPackagesTable', data: {f: packagesAvailableForInstallation} }"></div>
<br />

View file

@ -1,4 +1,4 @@
<table class="table table-hover table-bordered b-admin-packages-list-table" data-bind="i18nUpdate: f">
<table class="table table-hover table-bordered" data-bind="i18nUpdate: f">
<colgroup>
<col />
<col style="width: 100px" />
@ -7,17 +7,19 @@
<tbody data-bind="foreach: f">
<tr data-bind="css: {'disabled': !enabled() }">
<td>
<span class="package-name" data-bind="text: name"></span>
<span class="package-installed pull-right" data-bind="text: installed"></span>
<span class="package-active pull-right fontastic" data-bind="visible: installed, text: enabled() ? '☑' : '☐'"></span>
<span class="package-configure pull-right fontastic" data-bind="visible: installed"></span>
<div>
<span class="package-name" data-bind="text: name"></span>
<a class="package-configure fontastic" data-bind="visible: installed"></a>
<a class="package-active fontastic" data-bind="visible: installed, text: enabled() ? '☑' : '☐'"></a>
<span class="package-installed" data-bind="text: installed"></span>
</div>
<div class="package-desc" data-bind="text: desc"></div>
</td>
<td class="package-version" data-bind="text: version"></td>
<td class="package-actions">
<i class="icon-download e-action button-download" data-bind="visible: !loading() && canBeUpdated, click: function () { $root.installPackage($data); }"></i>
<td data-bind="text: version"></td>
<td>
<a class="icon-download button-download" data-bind="visible: !loading() && canBeUpdated, click: function () { $root.installPackage($data); }"></a>
&nbsp;
<i class="fontastic e-action button-delete" data-bind="visible: !loading() && canBeDeleted, click: function () { $root.deletePackage($data); }">🗑</i>
<a class="fontastic button-delete" data-bind="visible: !loading() && canBeDeleted, click: function () { $root.deletePackage($data); }">🗑</a>
<i class="icon-spinner" data-bind="visible: loading"></i>
</td>
</tr>

View file

@ -1,41 +1,82 @@
<div data-bind="css: {'domain-edit': edit}">
<header>
<button type="button" class="close" data-bind="command: cancelCommand">×</button>
<h3 data-bind="text: headerText"></h3>
</header>
<div class="modal-body">
<div class="row" data-bind="visible: !edit()" style="margin-bottom: 20px;">
<div class="span5">
<span data-i18n="POPUPS_DOMAIN/LABEL_NAME"></span>
&nbsp;
<span style="color: #aaa">(<span data-i18n="POPUPS_DOMAIN/NAME_HELPER"></span>)</span>
<br />
<input type="text" class="span4" autofocus="" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="textInput: name" />
<div class="alert-error" data-bind="visible: '' !== savingError(), text: savingError"></div>
</div>
<div class="span5 domain-desc" data-bind="visible: '' !== domainDesc(), html: domainDesc"></div>
<header>
<button type="button" class="close" data-bind="command: cancelCommand">×</button>
<h3 data-bind="text: headerText"></h3>
</header>
<div class="modal-body">
<div class="row" data-bind="visible: !edit()" style="margin-bottom: 20px;">
<div class="span5">
<span data-i18n="POPUPS_DOMAIN/LABEL_NAME"></span>
&nbsp;
<span style="color: #aaa">(<span data-i18n="POPUPS_DOMAIN/NAME_HELPER"></span>)</span>
<br />
<input type="text" class="span4" autofocus="" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="textInput: name" />
<div class="alert-error" data-bind="visible: '' !== savingError(), text: savingError"></div>
</div>
<div class="span5 domain-desc" data-bind="visible: '' !== domainDesc(), html: domainDesc"></div>
</div>
<form class="form-horizontal domain-form" action="#/" onsubmit="return false;">
<div class="tabs">
<form class="form-horizontal domain-form" action="#/" onsubmit="return false;">
<div class="tabs">
<input type="radio" name="helptabs" id="tab-help1" checked />
<label for="tab-help1" role="tab" tabindex="0"
data-bind="css: { 'testing-done': testingDone, 'testing-error': testingImapError }, tooltipErrorTip: testingImapErrorDesc"
data-i18n="POPUPS_DOMAIN/LABEL_IMAP"></label>
<div class="tab-content" role="tabpanel" aria-hidden="false">
<input type="radio" name="helptabs" id="tab-help1" checked />
<label for="tab-help1" role="tab" tabindex="0"
data-bind="css: { 'testing-done': testingDone, 'testing-error': testingImapError }, tooltipErrorTip: testingImapErrorDesc"
data-i18n="POPUPS_DOMAIN/LABEL_IMAP"></label>
<div class="tab-content" role="tabpanel" aria-hidden="false">
<div class="row">
<div class="span3">
<span data-i18n="POPUPS_DOMAIN/LABEL_SERVER"></span>
<br />
<input type="text" class="span3" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="textInput: imapServer, hasfocus: imapServerFocus" />
</div>
<div class="span2">
<span data-i18n="POPUPS_DOMAIN/LABEL_SECURE"></span>
<br />
<select class="span2" data-bind="value: imapSecure">
<option value="0" data-i18n="POPUPS_DOMAIN/SECURE_OPTION_NONE"></option>
<option value="1" data-i18n="POPUPS_DOMAIN/SECURE_OPTION_SSL"></option>
<option value="2" data-i18n="POPUPS_DOMAIN/SECURE_OPTION_STARTTLS"></option>
</select>
</div>
<div class="span2">
<span data-i18n="POPUPS_DOMAIN/LABEL_PORT"></span>
<br />
<input type="number" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
style="width:6em" data-bind="textInput: imapPort" />
</div>
</div>
<br />
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'POPUPS_DOMAIN/LABEL_USE_SHORT_LOGIN',
value: imapShortLogin,
inline: true
}
}"></div>
&nbsp;&nbsp;
<span style="color: #aaa">(user@domain.com → user)</span>
</div>
<input type="radio" name="helptabs" id="tab-help2" />
<label for="tab-help2" role="tab" tabindex="0"
data-bind="css: { 'testing-done': testingDone, 'testing-error': testingSmtpError }, tooltipErrorTip: testingSmtpErrorDesc"
data-i18n="POPUPS_DOMAIN/LABEL_SMTP"></label>
<div class="tab-content" role="tabpanel" aria-hidden="true">
<div data-bind="visible: !smtpPhpMail()">
<div class="row">
<div class="span3">
<span data-i18n="POPUPS_DOMAIN/LABEL_SERVER"></span>
<br />
<input type="text" class="span3" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="textInput: imapServer, hasfocus: imapServerFocus" />
data-bind="textInput: smtpServer, hasfocus: smtpServerFocus" />
</div>
<div class="span2">
<span data-i18n="POPUPS_DOMAIN/LABEL_SECURE"></span>
<br />
<select class="span2" data-bind="value: imapSecure">
<select class="span2" data-bind="value: smtpSecure">
<option value="0" data-i18n="POPUPS_DOMAIN/SECURE_OPTION_NONE"></option>
<option value="1" data-i18n="POPUPS_DOMAIN/SECURE_OPTION_SSL"></option>
<option value="2" data-i18n="POPUPS_DOMAIN/SECURE_OPTION_STARTTLS"></option>
@ -45,7 +86,7 @@
<span data-i18n="POPUPS_DOMAIN/LABEL_PORT"></span>
<br />
<input type="number" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
style="width:6em" data-bind="textInput: imapPort" />
style="width:6em" data-bind="textInput: smtpPort" />
</div>
</div>
<br />
@ -53,157 +94,114 @@
name: 'Checkbox',
params: {
label: 'POPUPS_DOMAIN/LABEL_USE_SHORT_LOGIN',
value: imapShortLogin,
value: smtpShortLogin,
inline: true
}
}"></div>
&nbsp;&nbsp;
<span style="color: #aaa">(user@domain.com → user)</span>
</div>
<input type="radio" name="helptabs" id="tab-help2" />
<label for="tab-help2" role="tab" tabindex="0"
data-bind="css: { 'testing-done': testingDone, 'testing-error': testingSmtpError }, tooltipErrorTip: testingSmtpErrorDesc"
data-i18n="POPUPS_DOMAIN/LABEL_SMTP"></label>
<div class="tab-content" role="tabpanel" aria-hidden="true">
<div data-bind="visible: !smtpPhpMail()">
<div class="row">
<div class="span3">
<span data-i18n="POPUPS_DOMAIN/LABEL_SERVER"></span>
<br />
<input type="text" class="span3" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="textInput: smtpServer, hasfocus: smtpServerFocus" />
</div>
<div class="span2">
<span data-i18n="POPUPS_DOMAIN/LABEL_SECURE"></span>
<br />
<select class="span2" data-bind="value: smtpSecure">
<option value="0" data-i18n="POPUPS_DOMAIN/SECURE_OPTION_NONE"></option>
<option value="1" data-i18n="POPUPS_DOMAIN/SECURE_OPTION_SSL"></option>
<option value="2" data-i18n="POPUPS_DOMAIN/SECURE_OPTION_STARTTLS"></option>
</select>
</div>
<div class="span2">
<span data-i18n="POPUPS_DOMAIN/LABEL_PORT"></span>
<br />
<input type="number" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
style="width:6em" data-bind="textInput: smtpPort" />
</div>
</div>
<br />
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'POPUPS_DOMAIN/LABEL_USE_SHORT_LOGIN',
value: smtpShortLogin,
inline: true
}
}"></div>
&nbsp;&nbsp;
<span style="color: #aaa">(user@domain.com → user)</span>
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'POPUPS_DOMAIN/LABEL_USE_AUTH',
value: smtpAuth
}
}"></div>
<br />
</div>
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'POPUPS_DOMAIN/LABEL_SET_SENDER',
value: smtpSetSender,
inline: true
label: 'POPUPS_DOMAIN/LABEL_USE_AUTH',
value: smtpAuth
}
}"></div>
<br />
<div data-bind="component: {
</div>
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'POPUPS_DOMAIN/LABEL_SET_SENDER',
value: smtpSetSender,
inline: true
}
}"></div>
<br />
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'POPUPS_DOMAIN/LABEL_USE_PHP_MAIL',
value: smtpPhpMail,
inline: true
}
}"></div>
&nbsp;&nbsp;
<span style="color:red">(<span data-i18n="HINTS/BETA"></span>)</span>
</div>
<input type="radio" name="helptabs" id="tab-help3" />
<label for="tab-help3" role="tab" tabindex="0"
data-bind="css: { 'testing-done': testingDone, 'testing-error': testingSieveError }, tooltipErrorTip: testingSieveErrorDesc">
<i class="icon-filter"></i>
<span data-i18n="POPUPS_DOMAIN/LABEL_SIEVE"></span>
</label>
<div class="tab-content" role="tabpanel" aria-hidden="true">
<div class="row">
<div class="span5" data-bind="component: {
name: 'Checkbox',
params: {
label: 'POPUPS_DOMAIN/LABEL_USE_PHP_MAIL',
value: smtpPhpMail,
inline: true
label: 'POPUPS_DOMAIN/LABEL_ALLOW_SIEVE_SCRIPTS',
value: useSieve
}
}"></div>
&nbsp;&nbsp;
<span style="color:red">(<span data-i18n="HINTS/BETA"></span>)</span>
</div>
<input type="radio" name="helptabs" id="tab-help3" />
<label for="tab-help3" role="tab" tabindex="0"
data-bind="css: { 'testing-done': testingDone, 'testing-error': testingSieveError }, tooltipErrorTip: testingSieveErrorDesc">
<i class="icon-filter"></i>
<span data-i18n="POPUPS_DOMAIN/LABEL_SIEVE"></span>
</label>
<div class="tab-content" role="tabpanel" aria-hidden="true">
<div data-bind="visible: useSieve">
<div class="row">
<div class="span5" data-bind="component: {
name: 'Checkbox',
params: {
label: 'POPUPS_DOMAIN/LABEL_ALLOW_SIEVE_SCRIPTS',
value: useSieve
}
}"></div>
</div>
<div data-bind="visible: useSieve">
<div class="row">
<div class="span3">
<span data-i18n="POPUPS_DOMAIN/LABEL_SERVER"></span>
<br />
<input type="text" class="span3" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="textInput: sieveServer, hasfocus: sieveServerFocus" />
</div>
<div class="span2">
<span data-i18n="POPUPS_DOMAIN/LABEL_SECURE"></span>
<br />
<select class="span2" data-bind="value: sieveSecure">
<option value="0" data-i18n="POPUPS_DOMAIN/SECURE_OPTION_NONE"></option>
<option value="1" data-i18n="POPUPS_DOMAIN/SECURE_OPTION_SSL"></option>
<option value="2" data-i18n="POPUPS_DOMAIN/SECURE_OPTION_STARTTLS"></option>
</select>
</div>
<div class="span2">
<span data-i18n="POPUPS_DOMAIN/LABEL_PORT"></span>
<br />
<input type="number" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
style="width:6em" data-bind="textInput: sievePort" />
</div>
<div class="span3">
<span data-i18n="POPUPS_DOMAIN/LABEL_SERVER"></span>
<br />
<input type="text" class="span3" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="textInput: sieveServer, hasfocus: sieveServerFocus" />
</div>
<div class="span2">
<span data-i18n="POPUPS_DOMAIN/LABEL_SECURE"></span>
<br />
<select class="span2" data-bind="value: sieveSecure">
<option value="0" data-i18n="POPUPS_DOMAIN/SECURE_OPTION_NONE"></option>
<option value="1" data-i18n="POPUPS_DOMAIN/SECURE_OPTION_SSL"></option>
<option value="2" data-i18n="POPUPS_DOMAIN/SECURE_OPTION_STARTTLS"></option>
</select>
</div>
<div class="span2">
<span data-i18n="POPUPS_DOMAIN/LABEL_PORT"></span>
<br />
<input type="number" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
style="width:6em" data-bind="textInput: sievePort" />
</div>
</div>
</div>
<input type="radio" name="helptabs" id="tab-help4" />
<label for="tab-help4" role="tab" tabindex="0">
<i class="fontastic">👥</i>
<span data-i18n="POPUPS_DOMAIN/BUTTON_WHITE_LIST"></span>
</label>
<div class="tab-content" role="tabpanel" aria-hidden="true">
<div class="alert alert-block" data-i18n="POPUPS_DOMAIN/WHITE_LIST_ALERT"></div>
<textarea class="input-xxlarge" style="width: 100%" rows="8" data-bind="value: whiteList" tabindex="-1"></textarea>
</div>
</div>
</form>
</div>
<footer>
<a class="btn button-test-connection pull-left" data-bind="command: testConnectionCommand, css: {
'btn-success': testingDone() && !testingImapError() && !testingSmtpError(),
'btn-danger': testingDone() && (testingImapError() || testingSmtpError()) }">
<i class="fontastic" data-bind="css: {'icon-spinner': testing()}"></i>
<span data-i18n="POPUPS_DOMAIN/BUTTON_TEST"></span>
</a>
<a class="btn buttonClose" data-bind="command: cancelCommand">
<i class="fontastic"></i>
<span data-i18n="POPUPS_DOMAIN/BUTTON_CLOSE"></span>
</a>
<a class="btn" data-bind="command: createOrAddCommand, visible: edit()">
<i class="fontastic" data-bind="css: {'icon-spinner': saving()}"></i>
<span data-i18n="POPUPS_DOMAIN/BUTTON_UPDATE"></span>
</a>
<a class="btn" data-bind="command: createOrAddCommand, visible: !edit()">
<i class="fontastic" data-bind="css: {'icon-spinner': saving()}"></i>
<span data-i18n="POPUPS_DOMAIN/BUTTON_ADD"></span>
</a>
</footer>
<input type="radio" name="helptabs" id="tab-help4" />
<label for="tab-help4" role="tab" tabindex="0">
<i class="fontastic">👥</i>
<span data-i18n="POPUPS_DOMAIN/BUTTON_WHITE_LIST"></span>
</label>
<div class="tab-content" role="tabpanel" aria-hidden="true">
<div class="alert alert-block" data-i18n="POPUPS_DOMAIN/WHITE_LIST_ALERT"></div>
<textarea class="input-xxlarge" style="width: 100%" rows="8" data-bind="value: whiteList" tabindex="-1"></textarea>
</div>
</div>
</form>
</div>
<footer>
<a class="btn button-test-connection" data-bind="command: testConnectionCommand, css: {
'btn-success': testingDone() && !testingImapError() && !testingSmtpError(),
'btn-danger': testingDone() && (testingImapError() || testingSmtpError()) }">
<i class="fontastic" data-bind="css: {'icon-spinner': testing()}"></i>
<span data-i18n="POPUPS_DOMAIN/BUTTON_TEST"></span>
</a>
<a class="btn buttonClose" data-bind="command: cancelCommand">
<i class="fontastic"></i>
<span data-i18n="POPUPS_DOMAIN/BUTTON_CLOSE"></span>
</a>
<a class="btn" data-bind="command: createOrAddCommand, visible: edit()">
<i class="fontastic" data-bind="css: {'icon-spinner': saving()}"></i>
<span data-i18n="POPUPS_DOMAIN/BUTTON_UPDATE"></span>
</a>
<a class="btn" data-bind="command: createOrAddCommand, visible: !edit()">
<i class="fontastic" data-bind="css: {'icon-spinner': saving()}"></i>
<span data-i18n="POPUPS_DOMAIN/BUTTON_ADD"></span>
</a>
</footer>

View file

@ -9,7 +9,7 @@
</header>
<div class="modal-body">
<form class="form-horizontal plugin-form" action="#/" onsubmit="return false;">
<div class="well" data-bind="visible: !hasConfiguration()" data-i18n="POPUPS_PLUGIN/DESC_NOTHING_TO_CONFIGURE"></div>
<div class="alert alert-info" data-bind="visible: !hasConfiguration()" data-i18n="POPUPS_PLUGIN/DESC_NOTHING_TO_CONFIGURE"></div>
<div class="alert" data-bind="visible: '' !== saveError()">
<button type="button" class="close" data-bind="click: function () { saveError('') }">×</button>
<span data-bind="text: saveError"></span>

View file

@ -153,19 +153,17 @@
<div class="messageList g-ui-user-select-none" data-bind="css: {'hideMessageListCheckbox': !useCheckboxesInList() }">
<div class="second-toolbar thm-message-list-top-toolbar">
<div class="form-inline">
<i class="checkboxCheckAll fontastic" data-bind="text: checkAll() ? (isIncompleteChecked() ? '▣' : '☑') : '☐'"></i>
<div class="input-append" data-bind="visible: allowSearch">
<div class="close-input-wrp">
<a class="close" data-bind="click: cancelSearch, visible: '' !== messageListSearchDesc()">×</a>
<input type="search" class="span4 inputSearch" tabindex="-1" placeholder="Search" autocorrect="off" autocapitalize="off" data-i18n="[placeholder]GLOBAL/SEARCH" data-bind="value: inputProxyMessageListSearch, onEnter: searchEnterAction, hasfocus: inputMessageListSearchFocus" />
</div>
<a class="btn buttonMoreSearch" data-bind="visible: allowSearchAdv, click: advancedSearchClick"></a>
</div>
<i class="checkboxCheckAll fontastic" data-bind="text: checkAll() ? (isIncompleteChecked() ? '▣' : '☑') : '☐'"></i>
<!-- ko if: allowSearch -->
<div class="search-input-wrp">
<input type="search" class="inputSearch" tabindex="-1" placeholder="Search" autocorrect="off" autocapitalize="off" data-i18n="[placeholder]GLOBAL/SEARCH" data-bind="value: inputProxyMessageListSearch, onEnter: searchEnterAction, hasfocus: inputMessageListSearchFocus" />
<a class="closeSearch" data-bind="click: cancelSearch, visible: messageListSearchDesc()">×</a>
</div>
<a class="btn buttonMoreSearch" data-bind="visible: allowSearchAdv, click: advancedSearchClick"></a>
<!-- /ko -->
</div>
<div class="b-content" data-bind="initDom: dragOverBodyArea">
<div class="listThreadUidDesc" data-bind="visible: 0 < messageListEndThreadUid(), click: cancelThreadUid">
<div class="listThreadUidDesc" data-bind="visible: messageListEndThreadUid(), click: cancelThreadUid">
<i class="fontastic"></i>
<span data-i18n="MESSAGE_LIST/BACK_TO_MESSAGE_LIST"></span>
</div>
@ -224,13 +222,11 @@
<div id="messagesDragImage"><span class="text"></span>&nbsp;<i class="icon-mail"></i></div>
</div>
<div class="b-footer thm-message-list-bottom-toolbar">
<!-- ko if: 0 < userUsageProc() -->
<!-- ko if: userUsageProc() -->
<span data-bind="attr: { title: quotaTooltip() }" class="e-quota">
<!-- ko text: userUsageProc --><!-- /ko -->%
</span>
<!-- /ko -->
<div class="pull-right">
<!-- ko template: { name: 'Paginator', data: messageListPaginator } --><!-- /ko -->
</div>
<!-- ko template: { name: 'Paginator', data: messageListPaginator } --><!-- /ko -->
</div>
</div>

View file

@ -11,7 +11,7 @@
<a class="close" data-bind="click: tryToClosePopup" data-i18n="[title]GLOBAL/CANCEL">×</a>
<a class="minimize-custom" data-bind="click: skipCommand" data-i18n="[title]COMPOSE/BUTTON_MINIMIZE"></a>
<a class="btn btn-danger button-delete button-delete-transitions" data-bind="command: deleteCommand">
<a class="btn btn-danger button-delete" data-bind="command: deleteCommand">
<i class="fontastic">🗑</i>
</a>
<span class="saved-text hide-mobile" data-bind="text: savedTimeText"></span>
@ -124,8 +124,8 @@
</tr>
<tr>
<td></td>
<td>
<div class="btn-group pull-left">
<td style="display:flex">
<div class="btn-group" style="flex-grow:1">
<button type="button" class="btn" data-bind="click: function () { attachmentsPlace(false); },
css: { 'active': !attachmentsPlace() }">
<i class="icon-file-text"></i>
@ -140,7 +140,7 @@
<i data-bind="css: { 'icon-attachment': 0 === attachmentsInProcessCount(), 'icon-spinner': 0 < attachmentsInProcessCount()}"></i>
</button>
</div>
<div class="btn-group pull-right">
<div class="btn-group">
<a class="btn"
style="padding-left: 10px; padding-right: 10px;"
data-bind="visible: addAttachmentEnabled(), initDom: composeUploaderButton" data-i18n="[title]COMPOSE/ATTACH_FILES">

View file

@ -45,7 +45,7 @@
<col style="width: 16px" />
<col />
<col style="width: 140px" />
<col style="width: 1%" />
<col style="width: 1em" />
</colgroup>
<tbody data-bind="foreach: filters">
<tr class="filter-item" draggable="true" data-bind="sortableItem: { list: $parent.filters }">
@ -57,7 +57,7 @@
<span class="filter-sub-name" data-bind="text: nameSub()"></span>
</td>
<td>
<a class="btn btn-small btn-small-small btn-danger pull-right button-confirm-delete button-delete-transitions" data-bind="css: {'delete-access': deleteAccess()}, click: function(oFilter) { $root.deleteFilter(oFilter); }"
<a class="btn btn-small btn-small-small btn-danger button-confirm-delete" data-bind="css: {'delete-access': deleteAccess()}, click: function(oFilter) { $root.deleteFilter(oFilter); }"
data-i18n="GLOBAL/ARE_YOU_SURE"></a>
</td>
<td>

View file

@ -16,7 +16,7 @@
<span class="account-name" data-bind="text: email"></span>
</td>
<td>
<a class="btn btn-small btn-small-small btn-danger pull-right button-confirm-delete button-delete-transitions" data-bind="visible: canBeDeleted, css: {'delete-access': deleteAccess}, click: function(oAccount) { $root.deleteAccount(oAccount); }"
<a class="btn btn-small btn-small-small btn-danger button-confirm-delete" data-bind="visible: canBeDeleted, css: {'delete-access': deleteAccess}, click: function(oAccount) { $root.deleteAccount(oAccount); }"
data-i18n="GLOBAL/ARE_YOU_SURE"></a>
</td>
<td>
@ -42,7 +42,7 @@
<span class="identity-default" data-bind="visible: 0 === $index()" data-i18n="SETTINGS_ACCOUNTS/DEFAULT_IDENTITY_LABEL"></span>
</td>
<td>
<a class="btn btn-small btn-small-small btn-danger pull-right button-confirm-delete button-delete-transitions" data-bind="visible: canBeDeleted, css: {'delete-access': deleteAccess}, click: function(oIdentity) { $root.deleteIdentity(oIdentity); }"
<a class="btn btn-small btn-small-small btn-danger button-confirm-delete" data-bind="visible: canBeDeleted, css: {'delete-access': deleteAccess}, click: function(oIdentity) { $root.deleteIdentity(oIdentity); }"
data-i18n="GLOBAL/ARE_YOU_SURE"></a>
</td>
<td>

View file

@ -15,7 +15,7 @@
<col style="width: 30px" />
<col />
<col style="width: 140px" />
<col style="width: 1%" />
<col style="width: 1em" />
</colgroup>
<tbody data-bind="foreach: scripts">
<tr class="script-item">
@ -24,7 +24,7 @@
</td>
<td class="e-action" class="script-name" data-bind="text: name()"></td>
<td>
<a class="btn btn-small btn-small-small btn-danger pull-right button-confirm-delete button-delete-transitions" data-bind="css: {'delete-access': deleteAccess()}, click: function(oScript) { $root.deleteScript(oScript); }"
<a class="btn btn-small btn-small-small btn-danger button-confirm-delete" data-bind="css: {'delete-access': deleteAccess()}, click: function(oScript) { $root.deleteScript(oScript); }"
data-i18n="GLOBAL/ARE_YOU_SURE"></a>
</td>
<td>

View file

@ -6,10 +6,10 @@
data-bind="value: nameForEdit, visible: edited, hasfocus: edited, onEnter: function () { $root.folderEditOnEnter($data); }, onEsc: function () { $root.folderEditOnEsc($data); }" />
&nbsp;
<span class="folder-system-name" data-bind="text: manageFolderSystemName, visible: isSystemFolder"></span>
<a class="btn btn-small btn-small-small btn-danger pull-right button-confirm-delete button-delete-transitions" data-bind="css: {'delete-access': deleteAccess()}, click: $root.deleteFolder"
data-i18n="GLOBAL/ARE_YOU_SURE"></a>
</td>
<td data-i18n="[title]SETTINGS_FOLDERS/HELP_DELETE_FOLDER">
<a class="btn btn-small btn-small-small btn-danger button-confirm-delete" data-bind="css: {'delete-access': deleteAccess()}, click: $root.deleteFolder"
data-i18n="GLOBAL/ARE_YOU_SURE"></a>
<span class="delete-folder e-action fontastic" data-bind="visible: canBeDeleted() && !deleteAccess(), click: $root.folderForDeletion">🗑</span>
</td>
<td data-i18n="[title]SETTINGS_FOLDERS/HELP_SHOW_HIDE_FOLDER">

View file

@ -30,7 +30,7 @@
<span class="open-pgp-key-user" data-bind="foreach: users">
<div class="open-pgp-key-user-address" data-bind="text: $data"></div>
</span>
<a class="btn btn-small btn-small-small btn-danger pull-right button-confirm-delete button-delete-transitions" data-bind="css: {'delete-access': deleteAccess()}, click: function(openPgpKey) { $root.deleteOpenPgpKey(openPgpKey); }"
<a class="btn btn-small btn-small-small btn-danger pull-right button-confirm-delete" data-bind="css: {'delete-access': deleteAccess()}, click: function(openPgpKey) { $root.deleteOpenPgpKey(openPgpKey); }"
data-i18n="GLOBAL/ARE_YOU_SURE"></a>
</td>
<td>
@ -47,7 +47,7 @@
<span data-bind="text: $data"></span> (<span class="open-pgp-key-id" data-bind="text: $parent.id"></span>)
</div>
</span>
<a class="btn btn-small btn-small-small btn-danger pull-right button-confirm-delete button-delete-transitions" data-bind="css: {'delete-access': deleteAccess()}, click: function(oOpenPGP) { $root.deleteOpenPgpKey(oOpenPGP); }"
<a class="btn btn-small btn-small-small btn-danger pull-right button-confirm-delete" data-bind="css: {'delete-access': deleteAccess()}, click: function(oOpenPGP) { $root.deleteOpenPgpKey(oOpenPGP); }"
data-i18n="GLOBAL/ARE_YOU_SURE"></a>
</td>
<td>

View file

@ -71,11 +71,11 @@
border-top-color: var(--main-color);
}
.well,
#rl-popups > dialog,
#rl-settings-subscreen,
.messageList,
.messageView,
.alert-info,
#V-PopupsCompose .b-attachment-place {
background-color: #000;
border-color: #555;

View file

@ -7,9 +7,6 @@
.pull-right {
float: right;
}
.pull-left {
float: left;
}
// Toggling content
.show {

View file

@ -1,12 +0,0 @@
//
// Wells
// --------------------------------------------------
// Base class
.well {
background-color: @wellBackground;
border: 1px solid darken(@wellBackground, 7%);
border-radius: 4px;
padding: 9px;
}