Resolve issue #130

This commit is contained in:
djmaze 2021-08-26 20:31:38 +02:00
parent 637ed9a478
commit c8678953fe
3 changed files with 137 additions and 241 deletions

View file

@ -14,18 +14,6 @@
max-width: 810px;
}
.modal-body {
position: relative;
overflow: hidden;
width: 1600px;
left: 0;
transition: left 500ms ease;
}
&.domain-second-page .modal-body {
left: -800px;
}
.domain-desc {
color: #666;
line-height: 20px;
@ -45,15 +33,16 @@
}
.testing-done {
&.imap-header, &.sieve-header, &.smtp-header {
color: green;
font-weight: bold;
}
color: green !important;
}
.testing-error {
&.imap-header, &.sieve-header, &.smtp-header {
color: red;
}
color: red !important;
}
.tab-content {
grid-column-end: 5;
border: 1px solid #ddd;
padding: 10px;
}
}

View file

@ -80,8 +80,6 @@ class DomainPopupView extends AbstractViewPopup {
testingSieveError: value => value || this.testingSieveErrorDesc(''),
testingSmtpError: value => value || this.testingSmtpErrorDesc(''),
page: () => this.sieveSettings(false),
// smart form improvements
imapServerFocus: value =>
value && this.name() && !this.imapServer() && this.imapServer(this.name().replace(/[.]?[*][.]?/g, '')),
@ -139,10 +137,7 @@ class DomainPopupView extends AbstractViewPopup {
decorateKoCommands(this, {
createOrAddCommand: self => self.canBeSaved(),
testConnectionCommand: self => self.canBeTested(),
whiteListCommand: 1,
backCommand: 1,
sieveCommand: 1
testConnectionCommand: self => self.canBeTested()
});
}
@ -155,8 +150,6 @@ class DomainPopupView extends AbstractViewPopup {
}
testConnectionCommand() {
this.page('main');
this.testingDone(false);
this.testingImapError(false);
this.testingSieveError(false);
@ -170,24 +163,18 @@ class DomainPopupView extends AbstractViewPopup {
this.testingImapError(true);
this.testingSieveError(true);
this.testingSmtpError(true);
this.sieveSettings(false);
} else {
let bImap = false,
bSieve = false;
this.testingDone(true);
this.testingImapError(true !== oData.Result.Imap);
this.testingSieveError(true !== oData.Result.Sieve);
this.testingSmtpError(true !== oData.Result.Smtp);
if (this.testingImapError() && oData.Result.Imap) {
bImap = true;
this.testingImapErrorDesc('');
this.testingImapErrorDesc(oData.Result.Imap);
}
if (this.testingSieveError() && oData.Result.Sieve) {
bSieve = true;
this.testingSieveErrorDesc('');
this.testingSieveErrorDesc(oData.Result.Sieve);
}
@ -196,33 +183,12 @@ class DomainPopupView extends AbstractViewPopup {
this.testingSmtpErrorDesc('');
this.testingSmtpErrorDesc(oData.Result.Smtp);
}
if (this.sieveSettings()) {
if (!bSieve && bImap) {
this.sieveSettings(false);
}
} else if (bSieve && !bImap) {
this.sieveSettings(true);
}
}
},
this
);
}
whiteListCommand() {
this.page('white-list');
}
backCommand() {
this.page('main');
}
sieveCommand() {
this.sieveSettings(!this.sieveSettings());
this.clearTesting();
}
onDomainCreateOrSaveResponse(iError) {
this.saving(false);
if (iError) {
@ -241,17 +207,9 @@ class DomainPopupView extends AbstractViewPopup {
this.testingSmtpError(false);
}
onHide() {
this.page('main');
this.sieveSettings(false);
}
onShow(oDomain) {
this.saving(false);
this.page('main');
this.sieveSettings(false);
this.clearTesting();
this.clearForm();
@ -286,8 +244,6 @@ class DomainPopupView extends AbstractViewPopup {
getDefaults() {
return {
savingError: '',
page: 'main',
sieveSettings: false,
name: '',

View file

@ -1,34 +1,31 @@
<div class="modal fade b-domain-content g-ui-user-select-none"
data-bind="modal: modalVisibility, css: {'domain-edit': edit, 'domain-second-page': 'main' !== page()}">
data-bind="modal: modalVisibility, css: {'domain-edit': edit}">
<div class="modal-header">
<button type="button" class="close" data-bind="command: cancelCommand">×</button>
<h3 data-bind="text: headerText"></h3>
</div>
<div class="modal-body">
<form class="form-horizontal domain-form" action="#/" onsubmit="return false;">
<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 data-bind="visible: '' !== savingError()">
<span class="error-desc" data-bind="text: savingError"></span>
</div>
</div>
<div class="span5 domain-desc" data-bind="visible: '' !== domainDesc()">
<div data-bind="html: domainDesc"></div>
</div>
<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="error-desc" data-bind="visible: '' !== savingError(), text: savingError"></div>
</div>
<div class="row">
<div class="span5">
<div class="legend imap-header" data-bind="visible: !sieveSettings(), css: { 'testing-done': testingDone, 'testing-error': testingImapError }, tooltipErrorTip: testingImapErrorDesc"
data-i18n="POPUPS_DOMAIN/LABEL_IMAP"></div>
<div class="legend sieve-header" data-bind="visible: sieveSettings(), css: { 'testing-done': testingDone, 'testing-error': testingSieveError }, tooltipErrorTip: testingSieveErrorDesc"
data-i18n="POPUPS_DOMAIN/LABEL_SIEVE"></div>
<div data-bind="visible: !sieveSettings()">
<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">
<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>
@ -39,49 +36,105 @@
<div class="span2">
<span data-i18n="POPUPS_DOMAIN/LABEL_PORT"></span>
<br />
<input type="number" class="span1" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="textInput: imapPort" />
<input type="number" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
style="width:6em" data-bind="textInput: imapPort" />
</div>
</div>
<span data-i18n="POPUPS_DOMAIN/LABEL_SECURE"></span>
<br />
<select 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>
<br /><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="span4">
<span data-i18n="POPUPS_DOMAIN/LABEL_SECURE"></span>
<div class="span3">
<span data-i18n="POPUPS_DOMAIN/LABEL_SERVER"></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>
<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_PORT"></span>
<br />
<input type="number" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
style="width:6em" data-bind="textInput: smtpPort" />
</div>
</div>
<span data-i18n="POPUPS_DOMAIN/LABEL_SECURE"></span>
<br />
<div class="row">
<div class="span5">
<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>
</div>
<select 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>
<br /><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 />
<br />
<div class="row">
<div class="span5">
<span data-bind="command: sieveCommand">
<i class="icon-filter"></i>
&nbsp;
<a href="#" class="g-ui-link" data-i18n="POPUPS_DOMAIN/BUTTON_SIEVE_CONFIGURATION"></a>
</span>
</div>
</div>
</div>
<div data-bind="visible: sieveSettings">
<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">
<div data-bind="component: {
@ -104,120 +157,26 @@
<div class="span1">
<span data-i18n="POPUPS_DOMAIN/LABEL_PORT"></span>
<br />
<input type="number" class="span2" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="textInput: sievePort" />
</div>
</div>
<div class="row">
<div class="span4">
<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>
<input type="number" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
style="width:6em" data-bind="textInput: sievePort" />
</div>
</div>
<span data-i18n="POPUPS_DOMAIN/LABEL_SECURE"></span>
<br />
<select 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>
<br />
<div class="row">
<div class="span5">
<span data-bind="command: sieveCommand">
<i class="fontastic"></i>
&nbsp;
<a href="#" class="g-ui-link" data-i18n="POPUPS_DOMAIN/BUTTON_BACK_TO_IMAP"></a>
</span>
</div>
</div>
</div>
</div>
<div class="span5">
<div class="legend smtp-header" data-bind="css: { 'testing-done': testingDone, 'testing-error': testingSmtpError }, tooltipErrorTip: testingSmtpErrorDesc"
data-i18n="POPUPS_DOMAIN/LABEL_SMTP"></div>
<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_PORT"></span>
<br />
<input type="number" class="span1" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="textInput: smtpPort" />
</div>
</div>
<div class="row">
<div class="span4">
<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>
<br />
<div class="row">
<div class="span5">
<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>
</div>
<div class="row">
<div class="span5">
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'POPUPS_DOMAIN/LABEL_USE_AUTH',
value: smtpAuth
}
}"></div>
</div>
</div>
<br />
</div>
<div class="row">
<div class="span5">
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'POPUPS_DOMAIN/LABEL_SET_SENDER',
value: smtpSetSender,
inline: true
}
}"></div>
</div>
</div>
<div class="row">
<div class="span5">
<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>
</div>
</div>
<div class="span10" data-bind="visible: 'white-list' === page()">
<div class="legend white-list-header" data-i18n="POPUPS_DOMAIN/LABEL_WHITE_LIST"></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>
@ -225,20 +184,12 @@
</form>
</div>
<div class="modal-footer">
<a class="btn button-test-connection pull-left" data-bind="visible: 'main' === page(), command: testConnectionCommand, css: {
<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 button-white-list pull-left" data-bind="command: whiteListCommand, visible: 'main' === page()">
<i class="fontastic">👥</i>
<span data-i18n="POPUPS_DOMAIN/BUTTON_WHITE_LIST"></span>
</a>
<a class="btn button-white-list pull-left" data-bind="command: backCommand, visible: 'main' !== page()">
<i class="fontastic"></i>
<span data-i18n="POPUPS_DOMAIN/BUTTON_BACK"></span>
</a>
<a class="btn buttonClose" data-bind="command: cancelCommand">
<i class="fontastic"></i>
<span data-i18n="POPUPS_DOMAIN/BUTTON_CLOSE"></span>