Security: disable spellcheck everywhere by default due to Chrome/Edge sending data you enter to their servers.

This commit is contained in:
the-djmaze 2022-09-20 12:26:12 +02:00
parent 9ed52fd070
commit e35fbea415
24 changed files with 97 additions and 100 deletions

View file

@ -18,7 +18,7 @@ export class EmailAddressesComponent {
const self = this, const self = this,
input = createElement('input',{type:"text", list:datalist.id, input = createElement('input',{type:"text", list:datalist.id,
autocomplete:"off", autocorrect:"off", autocapitalize:"off", spellcheck:"false"}), autocomplete:"off", autocorrect:"off", autocapitalize:"off"}),
// In Chrome we have no access to dataTransfer.getData unless it's the 'drop' event // In Chrome we have no access to dataTransfer.getData unless it's the 'drop' event
// In Chrome Mobile dataTransfer.types.includes(contentType) fails, only text/plain is set // In Chrome Mobile dataTransfer.types.includes(contentType) fails, only text/plain is set
validDropzone = () => dragAddress?.li.parentNode !== self.ul, validDropzone = () => dragAddress?.li.parentNode !== self.ul,

View file

@ -8,6 +8,5 @@ export class TextAreaComponent extends AbstractInput {
super(params); super(params);
this.rows = params.rows || 5; this.rows = params.rows || 5;
this.spellcheck = !!params.spellcheck;
} }
} }

View file

@ -1,19 +1,19 @@
<div class="b-settings-general g-ui-user-select-none"> <div class="b-settings-general g-ui-user-select-none">
<div class="form-horizontal change-password"> <form class="form-horizontal change-password" spellcheck="false">
<div class="legend" data-i18n="SETTINGS_CHANGE_PASSWORD/LEGEND_CHANGE_PASSWORD"></div> <div class="legend" data-i18n="SETTINGS_CHANGE_PASSWORD/LEGEND_CHANGE_PASSWORD"></div>
<div class="row"> <div class="row">
<div class="span6"> <div class="span6">
<div class="control-group" data-bind="css: {'error': currentPasswordError}"> <div class="control-group" data-bind="css: {'error': currentPasswordError}">
<label class="control-label" data-i18n="SETTINGS_CHANGE_PASSWORD/LABEL_CURRENT_PASSWORD"></label> <label class="control-label" data-i18n="SETTINGS_CHANGE_PASSWORD/LABEL_CURRENT_PASSWORD"></label>
<div class="controls"> <div class="controls">
<input type="password" autocomplete="current-password" autocorrect="off" autocapitalize="off" spellcheck="false" <input type="password" autocomplete="current-password" autocorrect="off" autocapitalize="off"
data-bind="textInput: currentPassword" /> data-bind="textInput: currentPassword" />
</div> </div>
</div> </div>
<div class="control-group" data-bind="css: {'error': passwordMismatch}"> <div class="control-group" data-bind="css: {'error': passwordMismatch}">
<label class="control-label" data-i18n="SETTINGS_CHANGE_PASSWORD/LABEL_NEW_PASSWORD"></label> <label class="control-label" data-i18n="SETTINGS_CHANGE_PASSWORD/LABEL_NEW_PASSWORD"></label>
<div class="controls"> <div class="controls">
<input style="margin:0" class="new-password" type="password" autocomplete="new-password" autocorrect="off" autocapitalize="off" spellcheck="false" <input style="margin:0" class="new-password" type="password" autocomplete="new-password" autocorrect="off" autocapitalize="off"
data-bind="textInput: newPassword" /> data-bind="textInput: newPassword" />
<br/> <br/>
<meter style="width:210px" class="new-password-meter" min="0" low="35" optimum="85" high="70" max="100" value="0"></meter> <meter style="width:210px" class="new-password-meter" min="0" low="35" optimum="85" high="70" max="100" value="0"></meter>
@ -22,7 +22,7 @@
<div class="control-group" data-bind="css: {'error': passwordMismatch}"> <div class="control-group" data-bind="css: {'error': passwordMismatch}">
<label class="control-label" data-i18n="SETTINGS_CHANGE_PASSWORD/LABEL_REPEAT_PASSWORD"></label> <label class="control-label" data-i18n="SETTINGS_CHANGE_PASSWORD/LABEL_REPEAT_PASSWORD"></label>
<div class="controls"> <div class="controls">
<input type="password" autocomplete="new-password" autocorrect="off" autocapitalize="off" spellcheck="false" <input type="password" autocomplete="new-password" autocorrect="off" autocapitalize="off"
data-bind="textInput: newPassword2" /> data-bind="textInput: newPassword2" />
</div> </div>
</div> </div>
@ -37,5 +37,5 @@
</div> </div>
<div class="span4 alert alert-error alert-null-left-margin" data-bind="visible: '' !== errorDescription(), text: errorDescription"></div> <div class="span4 alert alert-error alert-null-left-margin" data-bind="visible: '' !== errorDescription(), text: errorDescription"></div>
</div> </div>
</div> </form>
</div> </div>

View file

@ -7,8 +7,8 @@ class TwoFactorAuthPlugin extends \RainLoop\Plugins\AbstractPlugin
{ {
const const
NAME = 'Two Factor Authentication', NAME = 'Two Factor Authentication',
VERSION = '2.16', VERSION = '2.16.1',
RELEASE = '2022-05-20', RELEASE = '2022-09-20',
REQUIRED = '2.15.2', REQUIRED = '2.15.2',
CATEGORY = 'Login', CATEGORY = 'Login',
DESCRIPTION = 'Provides support for TOTP 2FA'; DESCRIPTION = 'Provides support for TOTP 2FA';

View file

@ -17,7 +17,7 @@
+ '<span class="fontastic">⏱</span>' + '<span class="fontastic">⏱</span>'
+ '<input name="totp_code" type="text" class="input-block-level"' + '<input name="totp_code" type="text" class="input-block-level"'
+ ' pattern="[0-9]*" inputmode="numeric"' + ' pattern="[0-9]*" inputmode="numeric"'
+ ' autocomplete="off" autocorrect="off" autocapitalize="none" spellcheck="false"' + ' autocomplete="off" autocorrect="off" autocapitalize="none"'
+ ' data-bind="textInput: totp, disable: submitRequest" data-i18n="[placeholder]'+placeholder + ' data-bind="textInput: totp, disable: submitRequest" data-i18n="[placeholder]'+placeholder
+ '" placeholder="'+rl.i18n(placeholder)+'">' + '" placeholder="'+rl.i18n(placeholder)+'">'
+ '</div>')); + '</div>'));

View file

@ -20,7 +20,7 @@
{{BaseAppFaviconTouchLinkTag}} {{BaseAppFaviconTouchLinkTag}}
</head> </head>
<body id="rl-app" data-admin='{{BaseAppAdmin}}'> <body id="rl-app" data-admin='{{BaseAppAdmin}}' spellcheck="false">
<div id="rl-loading"> <div id="rl-loading">
<div id="rl-loading-desc">{{LoadingDescriptionEsc}}</div> <div id="rl-loading-desc">{{LoadingDescriptionEsc}}</div>
<i class="icon-spinner"></i> <i class="icon-spinner"></i>

View file

@ -2,25 +2,25 @@
<a href="#" class="close" data-bind="click: function () { submitError('') }">×</a> <a href="#" class="close" data-bind="click: function () { submitError('') }">×</a>
<span data-bind="text: submitError"></span> <span data-bind="text: submitError"></span>
</div> </div>
<form action="#/" data-bind="submit: submitForm, css: {'errorAnimated': formError, 'submitting': submitRequest()}"> <form action="#/" spellcheck="false" data-bind="submit: submitForm, css: {'errorAnimated': formError, 'submitting': submitRequest()}">
<div class="controls" data-bind="css: {'error': loginError}"> <div class="controls" data-bind="css: {'error': loginError}">
<span class="fontastic">👤</span> <span class="fontastic">👤</span>
<input name="Login" required="" type="text" class="input-block-level" <input name="Login" required="" type="text" class="input-block-level"
autofocus="" autocomplete="username" autocorrect="off" autocapitalize="off" spellcheck="false" autofocus="" autocomplete="username" autocorrect="off" autocapitalize="off"
data-bind="textInput: login, disable: submitRequest" data-bind="textInput: login, disable: submitRequest"
data-i18n="[placeholder]LOGIN/LABEL_LOGIN"> data-i18n="[placeholder]LOGIN/LABEL_LOGIN">
</div> </div>
<div class="controls" data-bind="css: {'error': passwordError}"> <div class="controls" data-bind="css: {'error': passwordError}">
<span class="fontastic">🔑</span> <span class="fontastic">🔑</span>
<input name="Password" required="" type="password" class="input-block-level" <input name="Password" required="" type="password" class="input-block-level"
autocomplete="current-password" autocorrect="off" autocapitalize="off" spellcheck="false" autocomplete="current-password" autocorrect="off" autocapitalize="off"
data-bind="textInput: password, disable: submitRequest" data-bind="textInput: password, disable: submitRequest"
data-i18n="[placeholder]LOGIN/LABEL_PASSWORD"> data-i18n="[placeholder]LOGIN/LABEL_PASSWORD">
</div> </div>
<div class="controls"> <div class="controls">
<span class="fontastic"></span> <span class="fontastic"></span>
<input name="TOTP" type="text" pattern="[0-9]*" inputmode="numeric" class="input-block-level" <input name="TOTP" type="text" pattern="[0-9]*" inputmode="numeric" class="input-block-level"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" autocomplete="off" autocorrect="off" autocapitalize="off"
data-bind="textInput: totp, disable: submitRequest" data-bind="textInput: totp, disable: submitRequest"
data-i18n="[placeholder]LOGIN/LABEL_TOTP"> data-i18n="[placeholder]LOGIN/LABEL_TOTP">
</div> </div>

View file

@ -4,7 +4,7 @@
<div data-i18n="[html]TAB_CONTACTS/HTML_ALERT_DOES_NOT_SUPPORTED"></div> <div data-i18n="[html]TAB_CONTACTS/HTML_ALERT_DOES_NOT_SUPPORTED"></div>
</div> </div>
</div> </div>
<div class="form-horizontal" data-bind="visible: contactsSupported"> <form class="form-horizontal" spellcheck="false" data-bind="visible: contactsSupported">
<div class="legend" data-i18n="TAB_CONTACTS/LEGEND_CONTACTS"></div> <div class="legend" data-i18n="TAB_CONTACTS/LEGEND_CONTACTS"></div>
<div class="control-group"> <div class="control-group">
<div> <div>
@ -18,8 +18,8 @@
}"></div> }"></div>
</div> </div>
</div> </div>
</div> </form>
<div class="form-horizontal" data-bind="visible: contactsSupported"> <form class="form-horizontal" spellcheck="false" data-bind="visible: contactsSupported">
<div class="legend" data-i18n="TAB_CONTACTS/LEGEND_STORAGE"></div> <div class="legend" data-i18n="TAB_CONTACTS/LEGEND_STORAGE"></div>
<div class="control-group"> <div class="control-group">
<label data-i18n="TAB_CONTACTS/LABEL_STORAGE_TYPE"></label> <label data-i18n="TAB_CONTACTS/LABEL_STORAGE_TYPE"></label>
@ -38,21 +38,21 @@
<div class="control-group"> <div class="control-group">
<label data-i18n="TAB_CONTACTS/LABEL_STORAGE_DSN"></label> <label data-i18n="TAB_CONTACTS/LABEL_STORAGE_DSN"></label>
<div> <div>
<input type="text" class="span6" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" <input type="text" class="span6" autocomplete="off" autocorrect="off" autocapitalize="off"
data-bind="value: contactsPdoDsn, saveTrigger: contactsPdoDsnTrigger" placeholder="mysql:host=127.0.0.1;port=3306;dbname=snappymail"> data-bind="value: contactsPdoDsn, saveTrigger: contactsPdoDsnTrigger" placeholder="mysql:host=127.0.0.1;port=3306;dbname=snappymail">
</div> </div>
</div> </div>
<div class="control-group"> <div class="control-group">
<label data-i18n="TAB_CONTACTS/LABEL_STORAGE_USER"></label> <label data-i18n="TAB_CONTACTS/LABEL_STORAGE_USER"></label>
<div> <div>
<input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" <input type="text" autocomplete="off" autocorrect="off" autocapitalize="off"
data-bind="value: contactsPdoUser, saveTrigger: contactsPdoUserTrigger"> data-bind="value: contactsPdoUser, saveTrigger: contactsPdoUserTrigger">
</div> </div>
</div> </div>
<div class="control-group"> <div class="control-group">
<label data-i18n="TAB_CONTACTS/LABEL_STORAGE_PASSWORD"></label> <label data-i18n="TAB_CONTACTS/LABEL_STORAGE_PASSWORD"></label>
<div> <div>
<input type="password" autocomplete="current-password" autocorrect="off" autocapitalize="off" spellcheck="false" <input type="password" autocomplete="current-password" autocorrect="off" autocapitalize="off"
data-bind="value: contactsPdoPassword, saveTrigger: contactsPdoPasswordTrigger"> data-bind="value: contactsPdoPassword, saveTrigger: contactsPdoPasswordTrigger">
</div> </div>
</div> </div>
@ -80,4 +80,4 @@
</div> </div>
</div> </div>
<div class="alert span8" data-bind="text: testContactsErrorMessage, visible: '' !== testContactsErrorMessage()"></div> <div class="alert span8" data-bind="text: testContactsErrorMessage, visible: '' !== testContactsErrorMessage()"></div>
</div> </form>

View file

@ -1,4 +1,4 @@
<div class="form-horizontal"> <form class="form-horizontal" spellcheck="false">
<div class="legend" data-i18n="TAB_LOGIN/LEGEND_LOGIN_SCREEN"></div> <div class="legend" data-i18n="TAB_LOGIN/LEGEND_LOGIN_SCREEN"></div>
<div class="control-group"> <div class="control-group">
<label data-i18n="TAB_LOGIN/LABEL_DEFAULT_DOMAIN"></label> <label data-i18n="TAB_LOGIN/LABEL_DEFAULT_DOMAIN"></label>
@ -28,4 +28,4 @@
}"></div> }"></div>
</div> </div>
</div> </div>
</div> </form>

View file

@ -1,6 +1,6 @@
<label data-bind="text: Label, visible: 5 !== Type"></label> <label data-bind="text: Label, visible: 5 !== Type"></label>
<!-- ko if: 0 === Type --> <!-- ko if: 0 === Type -->
<input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" <input type="text" autocomplete="off" autocorrect="off" autocapitalize="off"
data-bind="value: value, attr: {placeholder: placeholder}"> data-bind="value: value, attr: {placeholder: placeholder}">
<!-- /ko --> <!-- /ko -->
<!-- ko if: 1 === Type --> <!-- ko if: 1 === Type -->
@ -8,14 +8,12 @@
data-bind="value: value, attr: {placeholder: placeholder}"> data-bind="value: value, attr: {placeholder: placeholder}">
<!-- /ko --> <!-- /ko -->
<!-- ko if: 3 === Type --> <!-- ko if: 3 === Type -->
<input type="password" autocomplete="current-password" autocorrect="off" autocapitalize="off" spellcheck="false" <input type="password" autocomplete="off" autocorrect="off" autocapitalize="off"
data-bind="value: value, attr: {placeholder: placeholder}"> data-bind="value: value, attr: {placeholder: placeholder}">
<!-- /ko --> <!-- /ko -->
<!-- ko if: 2 === Type --> <!-- ko if: 2 === Type -->
<div data-bind="component: { <textarea rows="5" autocomplete="off" autocorrect="off" autocapitalize="off"
name: 'TextArea', data-bind="value: value, attr: {placeholder: placeholder }"></textarea>
params: { value: value, placeholder: placeholder }
}"></div>
<!-- /ko --> <!-- /ko -->
<!-- ko if: 4 === Type --> <!-- ko if: 4 === Type -->
<select data-bind="options: Default, value: value"></select> <select data-bind="options: Default, value: value"></select>

View file

@ -20,31 +20,31 @@
</div> </div>
</div> </div>
</div> </div>
<div class="form-horizontal"> <form class="form-horizontal" spellcheck="false">
<div class="legend" data-i18n="TAB_SECURITY/LEGEND_ADMIN_PANEL_ACCESS_CREDENTIALS"></div> <div class="legend" data-i18n="TAB_SECURITY/LEGEND_ADMIN_PANEL_ACCESS_CREDENTIALS"></div>
<div class="control-group" data-bind="css: {'error': adminLoginError}"> <div class="control-group" data-bind="css: {'error': adminLoginError}">
<label data-i18n="GLOBAL/USERNAME"></label> <label data-i18n="GLOBAL/USERNAME"></label>
<input type="text" autocomplete="username" autocorrect="off" autocapitalize="off" spellcheck="false" <input type="text" autocomplete="username" autocorrect="off" autocapitalize="off"
data-bind="textInput: adminLogin"> data-bind="textInput: adminLogin">
</div> </div>
<div class="control-group"> <div class="control-group">
<label data-i18n="TAB_SECURITY/LABEL_CURRENT_PASSWORD"></label> <label data-i18n="TAB_SECURITY/LABEL_CURRENT_PASSWORD"></label>
<input type="password" autocomplete="current-password" autocorrect="off" autocapitalize="off" spellcheck="false" <input type="password" autocomplete="current-password" autocorrect="off" autocapitalize="off"
data-bind="textInput: adminPassword"> data-bind="textInput: adminPassword">
</div> </div>
<div class="control-group" data-bind="css: {'error': adminPasswordNewError}"> <div class="control-group" data-bind="css: {'error': adminPasswordNewError}">
<label data-i18n="TAB_SECURITY/LABEL_NEW_PASSWORD"></label> <label data-i18n="TAB_SECURITY/LABEL_NEW_PASSWORD"></label>
<input type="password" autocomplete="new-password" autocorrect="off" autocapitalize="off" spellcheck="false" <input type="password" autocomplete="new-password" autocorrect="off" autocapitalize="off"
data-bind="textInput: adminPasswordNew"> data-bind="textInput: adminPasswordNew">
</div> </div>
<div class="control-group" data-bind="css: {'error': adminPasswordNewError}"> <div class="control-group" data-bind="css: {'error': adminPasswordNewError}">
<label data-i18n="TAB_SECURITY/LABEL_REPEAT_PASSWORD"></label> <label data-i18n="TAB_SECURITY/LABEL_REPEAT_PASSWORD"></label>
<input type="password" autocomplete="new-password" autocorrect="off" autocapitalize="off" spellcheck="false" <input type="password" autocomplete="new-password" autocorrect="off" autocapitalize="off"
data-bind="textInput: adminPasswordNew2"> data-bind="textInput: adminPasswordNew2">
</div> </div>
<div class="control-group"> <div class="control-group">
<label data-i18n="LOGIN/LABEL_TOTP"></label> <label data-i18n="LOGIN/LABEL_TOTP"></label>
<input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" <input type="text" autocomplete="off" autocorrect="off" autocapitalize="off"
pattern="[A-Z2-7]{16,}" pattern="[A-Z2-7]{16,}"
data-bind="textInput: adminTOTP"> data-bind="textInput: adminTOTP">
</div> </div>
@ -56,7 +56,7 @@
<a class="btn" data-bind="command: saveAdminUserCommand, css: { 'btn-success': saveSuccess, 'btn-danger': saveError }" <a class="btn" data-bind="command: saveAdminUserCommand, css: { 'btn-success': saveSuccess, 'btn-danger': saveError }"
data-icon="🔑" data-i18n="GLOBAL/SAVE"></a> data-icon="🔑" data-i18n="GLOBAL/SAVE"></a>
</div> </div>
</div> </form>
<div class="form-horizontal"> <div class="form-horizontal">
<div class="legend" data-i18n="TAB_SECURITY/LEGEND_SSL"></div> <div class="legend" data-i18n="TAB_SECURITY/LEGEND_SSL"></div>
<div class="control-group"> <div class="control-group">

View file

@ -2,20 +2,20 @@
<a href="#" class="close" data-bind="click: close">×</a> <a href="#" class="close" data-bind="click: close">×</a>
<h3 data-bind="text: headerText"></h3> <h3 data-bind="text: headerText"></h3>
</header> </header>
<div class="modal-body"> <form class="modal-body" action="#/" spellcheck="false" onsubmit="return false;">
<div class="row" data-bind="visible: !edit()" style="margin-bottom: 20px;"> <div class="row" data-bind="hidden: edit" style="margin-bottom: 20px;">
<div class="span5"> <div class="span5">
<span data-i18n="POPUPS_DOMAIN/LABEL_NAME"></span> <span data-i18n="POPUPS_DOMAIN/LABEL_NAME"></span>
<span style="opacity:0.7"> (<span data-i18n="POPUPS_DOMAIN/NAME_HELPER"></span>)</span> <span style="opacity:0.7"> (<span data-i18n="POPUPS_DOMAIN/NAME_HELPER"></span>)</span>
<br> <br>
<input type="text" class="span4" autofocus="" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" <input type="text" class="span4" autofocus="" autocomplete="off" autocorrect="off" autocapitalize="off"
data-bind="textInput: name"> data-bind="textInput: name">
<div class="alert-error" data-bind="visible: '' !== savingError(), text: savingError"></div> <div class="alert-error" data-bind="visible: savingError, text: savingError"></div>
</div> </div>
<div class="span5 domain-desc" data-bind="visible: '' !== domainDesc(), html: domainDesc"></div> <div class="span5 domain-desc" data-bind="visible: domainDesc, html: domainDesc"></div>
</div> </div>
<form class="form-horizontal domain-form" action="#/" onsubmit="return false;"> <div class="form-horizontal domain-form">
<div class="tabs"> <div class="tabs">
<input type="radio" name="helptabs" id="tab-help1" checked> <input type="radio" name="helptabs" id="tab-help1" checked>
@ -27,7 +27,7 @@
<div class="span3"> <div class="span3">
<span data-i18n="POPUPS_DOMAIN/LABEL_SERVER"></span> <span data-i18n="POPUPS_DOMAIN/LABEL_SERVER"></span>
<br> <br>
<input type="text" class="span3" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" <input type="text" class="span3" autocomplete="off" autocorrect="off" autocapitalize="off"
data-bind="textInput: imapHost, hasfocus: imapHostFocus"> data-bind="textInput: imapHost, hasfocus: imapHostFocus">
</div> </div>
<div class="span2"> <div class="span2">
@ -42,7 +42,7 @@
<div class="span2"> <div class="span2">
<span data-i18n="POPUPS_DOMAIN/LABEL_PORT"></span> <span data-i18n="POPUPS_DOMAIN/LABEL_PORT"></span>
<br> <br>
<input type="number" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" <input type="number" autocomplete="off" autocorrect="off" autocapitalize="off"
style="width:6em" data-bind="textInput: imapPort"> style="width:6em" data-bind="textInput: imapPort">
</div> </div>
</div> </div>
@ -68,7 +68,7 @@
<div class="span3"> <div class="span3">
<span data-i18n="POPUPS_DOMAIN/LABEL_SERVER"></span> <span data-i18n="POPUPS_DOMAIN/LABEL_SERVER"></span>
<br> <br>
<input type="text" class="span3" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" <input type="text" class="span3" autocomplete="off" autocorrect="off" autocapitalize="off"
data-bind="textInput: smtpHost, hasfocus: smtpHostFocus"> data-bind="textInput: smtpHost, hasfocus: smtpHostFocus">
</div> </div>
<div class="span2"> <div class="span2">
@ -83,7 +83,7 @@
<div class="span2"> <div class="span2">
<span data-i18n="POPUPS_DOMAIN/LABEL_PORT"></span> <span data-i18n="POPUPS_DOMAIN/LABEL_PORT"></span>
<br> <br>
<input type="number" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" <input type="number" autocomplete="off" autocorrect="off" autocapitalize="off"
style="width:6em" data-bind="textInput: smtpPort"> style="width:6em" data-bind="textInput: smtpPort">
</div> </div>
</div> </div>
@ -147,7 +147,7 @@
<div class="span3"> <div class="span3">
<span data-i18n="POPUPS_DOMAIN/LABEL_SERVER"></span> <span data-i18n="POPUPS_DOMAIN/LABEL_SERVER"></span>
<br> <br>
<input type="text" class="span3" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" <input type="text" class="span3" autocomplete="off" autocorrect="off" autocapitalize="off"
data-bind="textInput: sieveHost, hasfocus: sieveHostFocus"> data-bind="textInput: sieveHost, hasfocus: sieveHostFocus">
</div> </div>
<div class="span2"> <div class="span2">
@ -162,7 +162,7 @@
<div class="span2"> <div class="span2">
<span data-i18n="POPUPS_DOMAIN/LABEL_PORT"></span> <span data-i18n="POPUPS_DOMAIN/LABEL_PORT"></span>
<br> <br>
<input type="number" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" <input type="number" autocomplete="off" autocorrect="off" autocapitalize="off"
style="width:6em" data-bind="textInput: sievePort"> style="width:6em" data-bind="textInput: sievePort">
</div> </div>
</div> </div>
@ -176,8 +176,8 @@
<textarea class="input-xxlarge" style="width: 100%" rows="8" data-bind="value: whiteList" tabindex="-1"></textarea> <textarea class="input-xxlarge" style="width: 100%" rows="8" data-bind="value: whiteList" tabindex="-1"></textarea>
</div> </div>
</div> </div>
</form> </div>
</div> </form>
<footer> <footer>
<a class="btn" data-bind="command: testConnectionCommand, css: { <a class="btn" data-bind="command: testConnectionCommand, css: {
'btn-success': testingDone() && !testingImapError() && !testingSmtpError(), 'btn-success': testingDone() && !testingImapError() && !testingSmtpError(),

View file

@ -7,7 +7,7 @@
<span data-bind="visible: hasReadme, text: readme"></span> <span data-bind="visible: hasReadme, text: readme"></span>
</header> </header>
<div class="modal-body"> <div class="modal-body">
<form class="form-horizontal plugin-form" action="#/" onsubmit="return false;"> <form class="form-horizontal plugin-form" action="#/" spellcheck="false" onsubmit="return false;">
<div class="alert alert-info" 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()"> <div class="alert" data-bind="visible: '' !== saveError()">
<a href="#" class="close" data-bind="click: function () { saveError('') }">×</a> <a href="#" class="close" data-bind="click: function () { saveError('') }">×</a>

View file

@ -1,5 +1,5 @@
<textarea rows="5" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" <textarea rows="5" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: value, enable: enable, attr: { 'placeholder': placeholder, 'rows': rows, 'spellcheck': spellcheck ? 'true' : 'false' }, css: className"></textarea> data-bind="value: value, enable: enable, attr: { 'placeholder': placeholder, 'rows': rows }, css: className"></textarea>
<!-- ko if: trigger --> <!-- ko if: trigger -->
<span data-bind="saveTrigger: trigger"></span> <span data-bind="saveTrigger: trigger"></span>
<!-- /ko --> <!-- /ko -->

View file

@ -7,19 +7,19 @@
<!-- ko text: submitErrorAdditional --><!-- /ko --> <!-- ko text: submitErrorAdditional --><!-- /ko -->
</p> </p>
</div> </div>
<form action="#/" <form action="#/" spellcheck="false"
data-bind="submit: submitForm, css: {'errorAnimated': formError, 'submitting': submitRequest()}"> data-bind="submit: submitForm, css: {'errorAnimated': formError, 'submitting': submitRequest()}">
<div class="controls" data-bind="css: {'error': emailError}"> <div class="controls" data-bind="css: {'error': emailError}">
<span class="fontastic"></span> <span class="fontastic"></span>
<input name="Email" required="" type="text" class="input-block-level" pattern="[^@\s]+(@[^\s]+)?" inputmode="email" <input name="Email" required="" type="text" class="input-block-level" pattern="[^@\s]+(@[^\s]+)?" inputmode="email"
autofocus="" autocomplete="email" autocorrect="off" autocapitalize="off" spellcheck="false" autofocus="" autocomplete="email" autocorrect="off" autocapitalize="off"
data-bind="textInput: email, disable: submitRequest" data-bind="textInput: email, disable: submitRequest"
data-i18n="[placeholder]GLOBAL/EMAIL"> data-i18n="[placeholder]GLOBAL/EMAIL">
</div> </div>
<div class="controls" data-bind="css: {'error': passwordError}"> <div class="controls" data-bind="css: {'error': passwordError}">
<span class="fontastic">🔑</span> <span class="fontastic">🔑</span>
<input name="Password" required="" type="password" class="input-block-level" <input name="Password" required="" type="password" class="input-block-level"
autocomplete="current-password" autocorrect="off" autocapitalize="off" spellcheck="false" autocomplete="current-password" autocorrect="off" autocapitalize="off"
data-bind="textInput: password, disable: submitRequest" data-bind="textInput: password, disable: submitRequest"
data-i18n="[placeholder]GLOBAL/PASSWORD"> data-i18n="[placeholder]GLOBAL/PASSWORD">
</div> </div>

View file

@ -5,7 +5,7 @@
<span data-bind="visible: !isNew()" data-i18n="POPUPS_ADD_ACCOUNT/TITLE_UPDATE_ACCOUNT"></span> <span data-bind="visible: !isNew()" data-i18n="POPUPS_ADD_ACCOUNT/TITLE_UPDATE_ACCOUNT"></span>
</h3> </h3>
</header> </header>
<form id="accountform" class="modal-body form-horizontal" autocomplete="off" data-bind="submit: submitForm"> <form id="accountform" class="modal-body form-horizontal" autocomplete="off" spellcheck="false" data-bind="submit: submitForm">
<div class="alert" data-bind="visible: '' !== submitError()"> <div class="alert" data-bind="visible: '' !== submitError()">
<a href="#" class="close" data-bind="click: function () { submitError('') }">×</a> <a href="#" class="close" data-bind="click: function () { submitError('') }">×</a>
<span data-bind="text: submitError"></span> <span data-bind="text: submitError"></span>
@ -15,12 +15,12 @@
<label data-i18n="GLOBAL/EMAIL"></label> <label data-i18n="GLOBAL/EMAIL"></label>
<strong style="margin-top: 5px;" data-bind="visible: !isNew(), text: email"></strong> <strong style="margin-top: 5px;" data-bind="visible: !isNew(), text: email"></strong>
<input type="text" class="input-xlarge" <input type="text" class="input-xlarge"
autofocus="" autocorrect="off" autocapitalize="off" spellcheck="false" autofocus="" autocorrect="off" autocapitalize="off"
data-bind="visible: isNew, textInput: email"> data-bind="visible: isNew, textInput: email">
</div> </div>
<div class="control-group" data-bind="css: {'error': passwordError}"> <div class="control-group" data-bind="css: {'error': passwordError}">
<label data-i18n="GLOBAL/PASSWORD"></label> <label data-i18n="GLOBAL/PASSWORD"></label>
<input type="password" class="input-xlarge" autocomplete="new-password" autocorrect="off" autocapitalize="off" spellcheck="false" <input type="password" class="input-xlarge" autocomplete="new-password" autocorrect="off" autocapitalize="off"
required="" data-bind="value: password"> required="" data-bind="value: password">
</div> </div>
</form> </form>

View file

@ -2,27 +2,27 @@
<a href="#" class="close" data-bind="click: close">×</a> <a href="#" class="close" data-bind="click: close">×</a>
<h3 data-i18n="SEARCH/TITLE_ADV"></h3> <h3 data-i18n="SEARCH/TITLE_ADV"></h3>
</header> </header>
<form id="advancedsearchform" class="modal-body form-horizontal" action="#/" autocomplete="off" data-bind="submit: submitForm"> <form id="advancedsearchform" class="modal-body form-horizontal" action="#/" autocomplete="off" spellcheck="false" data-bind="submit: submitForm">
<div class="row"> <div class="row">
<div class="span4"> <div class="span4">
<div class="control-group"> <div class="control-group">
<label data-i18n="GLOBAL/FROM"></label> <label data-i18n="GLOBAL/FROM"></label>
<input type="text" autofocus="" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" <input type="text" autofocus="" autocomplete="off" autocorrect="off" autocapitalize="off"
data-bind="value: from"> data-bind="value: from">
</div> </div>
<div class="control-group"> <div class="control-group">
<label data-i18n="GLOBAL/TO"></label> <label data-i18n="GLOBAL/TO"></label>
<input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" <input type="text" autocomplete="off" autocorrect="off" autocapitalize="off"
data-bind="value: to"> data-bind="value: to">
</div> </div>
<div class="control-group"> <div class="control-group">
<label data-i18n="GLOBAL/SUBJECT"></label> <label data-i18n="GLOBAL/SUBJECT"></label>
<input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" <input type="text" autocomplete="off" autocorrect="off" autocapitalize="off"
data-bind="value: subject"> data-bind="value: subject">
</div> </div>
<div class="control-group"> <div class="control-group">
<label data-i18n="SEARCH/LABEL_TEXT"></label> <label data-i18n="SEARCH/LABEL_TEXT"></label>
<input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" <input type="text" autocomplete="off" autocorrect="off" autocapitalize="off"
data-bind="value: text"> data-bind="value: text">
</div> </div>
</div> </div>

View file

@ -44,7 +44,7 @@
</header> </header>
<div class="modal-body"> <div class="modal-body">
<div class="b-list-toolbar"> <div class="b-list-toolbar">
<input type="search" class="e-search" placeholder="Search" autofocus="" autocorrect="off" autocapitalize="off" data-i18n="[placeholder]GLOBAL/SEARCH" data-bind="value: search"> <input type="search" class="e-search" placeholder="Search" autofocus="" autocorrect="off" autocapitalize="off" spellcheck="false" data-i18n="[placeholder]GLOBAL/SEARCH" data-bind="value: search">
</div> </div>
<div class="b-list-content g-ui-user-select-none" data-bind="css: {'hideContactListCheckbox': !useCheckboxesInList()}"> <div class="b-list-content g-ui-user-select-none" data-bind="css: {'hideContactListCheckbox': !useCheckboxesInList()}">
<div class="content"> <div class="content">
@ -72,7 +72,7 @@
<!-- ko template: { name: 'Paginator', data: contactsPaginator } --><!-- /ko --> <!-- ko template: { name: 'Paginator', data: contactsPaginator } --><!-- /ko -->
</div> </div>
</div> </div>
<div class="b-view-content" data-bind="css: {'read-only': contact() && contact().readOnly()}"> <form class="b-view-content" spellcheck="false" data-bind="css: {'read-only': contact() && contact().readOnly()}">
<div class="b-contact-view-desc" data-bind="visible: !contact()" <div class="b-contact-view-desc" data-bind="visible: !contact()"
data-i18n="CONTACTS/CONTACT_VIEW_DESC"></div> data-i18n="CONTACTS/CONTACT_VIEW_DESC"></div>
<div class="tabs" data-bind="visible: contact, i18nUpdate: contact"> <div class="tabs" data-bind="visible: contact, i18nUpdate: contact">
@ -91,39 +91,39 @@
<div class="property-line" data-i18n="[title]CONTACTS/PLACEHOLDER_ENTER_FIRST_NAME"> <div class="property-line" data-i18n="[title]CONTACTS/PLACEHOLDER_ENTER_FIRST_NAME">
<span data-bind="text: givenName"></span> <span data-bind="text: givenName"></span>
<input type="text" <input type="text"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" autocomplete="off" autocorrect="off" autocapitalize="off"
data-bind="textInput: givenName" data-i18n="[placeholder]CONTACTS/PLACEHOLDER_ENTER_FIRST_NAME"> data-bind="textInput: givenName" data-i18n="[placeholder]CONTACTS/PLACEHOLDER_ENTER_FIRST_NAME">
</div> </div>
<div class="property-line" data-i18n="[title]CONTACTS/PLACEHOLDER_ENTER_LAST_NAME"> <div class="property-line" data-i18n="[title]CONTACTS/PLACEHOLDER_ENTER_LAST_NAME">
<span data-bind="text: surName"></span> <span data-bind="text: surName"></span>
<input type="text" <input type="text"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" autocomplete="off" autocorrect="off" autocapitalize="off"
data-bind="textInput: surName" data-i18n="[placeholder]CONTACTS/PLACEHOLDER_ENTER_LAST_NAME"> data-bind="textInput: surName" data-i18n="[placeholder]CONTACTS/PLACEHOLDER_ENTER_LAST_NAME">
</div> </div>
<!-- <!--
<div class="property-line" data-i18n="[title]CONTACTS/PLACEHOLDER_ENTER_MIDDLE_NAME"> <div class="property-line" data-i18n="[title]CONTACTS/PLACEHOLDER_ENTER_MIDDLE_NAME">
<span data-bind="text: middleName"></span> <span data-bind="text: middleName"></span>
<input type="text" <input type="text"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" autocomplete="off" autocorrect="off" autocapitalize="off"
data-bind="textInput: middleName" data-i18n="[placeholder]CONTACTS/PLACEHOLDER_ENTER_MIDDLE_NAME"> data-bind="textInput: middleName" data-i18n="[placeholder]CONTACTS/PLACEHOLDER_ENTER_MIDDLE_NAME">
</div> </div>
<div class="property-line" data-i18n="[title]CONTACTS/PLACEHOLDER_ENTER_NAME_PREFIX"> <div class="property-line" data-i18n="[title]CONTACTS/PLACEHOLDER_ENTER_NAME_PREFIX">
<span data-bind="text: namePrefix"></span> <span data-bind="text: namePrefix"></span>
<input type="text" <input type="text"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" autocomplete="off" autocorrect="off" autocapitalize="off"
data-bind="textInput: namePrefix" data-i18n="[placeholder]CONTACTS/PLACEHOLDER_ENTER_NAME_PREFIX"> data-bind="textInput: namePrefix" data-i18n="[placeholder]CONTACTS/PLACEHOLDER_ENTER_NAME_PREFIX">
</div> </div>
<div class="property-line" data-i18n="[title]CONTACTS/PLACEHOLDER_ENTER_NAME_SUFFIX"> <div class="property-line" data-i18n="[title]CONTACTS/PLACEHOLDER_ENTER_NAME_SUFFIX">
<span data-bind="text: nameSuffix"></span> <span data-bind="text: nameSuffix"></span>
<input type="text" <input type="text"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" autocomplete="off" autocorrect="off" autocapitalize="off"
data-bind="textInput: nameSuffix" data-i18n="[placeholder]CONTACTS/PLACEHOLDER_ENTER_NAME_SUFFIX"> data-bind="textInput: nameSuffix" data-i18n="[placeholder]CONTACTS/PLACEHOLDER_ENTER_NAME_SUFFIX">
</div> </div>
--> -->
<div class="property-line" data-bind="visible: null != nickname()" data-i18n="[title]CONTACTS/ADD_MENU_NICKNAME"> <div class="property-line" data-bind="visible: null != nickname()" data-i18n="[title]CONTACTS/ADD_MENU_NICKNAME">
<span data-bind="text: nickname"></span> <span data-bind="text: nickname"></span>
<input type="text" <input type="text"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" autocomplete="off" autocorrect="off" autocapitalize="off"
data-bind="textInput: nickname" data-i18n="[placeholder]CONTACTS/PLACEHOLDER_ENTER_NICK_NAME"> data-bind="textInput: nickname" data-i18n="[placeholder]CONTACTS/PLACEHOLDER_ENTER_NICK_NAME">
</div> </div>
</div> </div>
@ -135,7 +135,7 @@
<div class="property-line"> <div class="property-line">
<span data-bind="text: value"></span> <span data-bind="text: value"></span>
<input type="text" <input type="text"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" autocomplete="off" autocorrect="off" autocapitalize="off"
data-bind="textInput: value"> data-bind="textInput: value">
</div> </div>
</div> </div>
@ -149,7 +149,7 @@
<div class="property-line"> <div class="property-line">
<span data-bind="text: value"></span> <span data-bind="text: value"></span>
<input type="text" <input type="text"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" autocomplete="off" autocorrect="off" autocapitalize="off"
data-bind="textInput: value"> data-bind="textInput: value">
</div> </div>
</div> </div>
@ -163,7 +163,7 @@
<div class="property-line"> <div class="property-line">
<span data-bind="text: value"></span> <span data-bind="text: value"></span>
<input type="text" placeholder="https://" <input type="text" placeholder="https://"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" autocomplete="off" autocorrect="off" autocapitalize="off"
data-bind="textInput: value"> data-bind="textInput: value">
</div> </div>
</div> </div>
@ -175,7 +175,7 @@
<div class="property-line"> <div class="property-line">
<span data-bind="text: note"></span> <span data-bind="text: note"></span>
<input type="text" <input type="text"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" autocomplete="off" autocorrect="off" autocapitalize="off"
data-bind="textInput: note"> data-bind="textInput: note">
</div> </div>
</div> </div>
@ -216,21 +216,21 @@
<label data-i18n="CONTACTS/LABEL_ORGANIZATION"></label> <label data-i18n="CONTACTS/LABEL_ORGANIZATION"></label>
<span data-bind="text: org"></span> <span data-bind="text: org"></span>
<input type="text" <input type="text"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" autocomplete="off" autocorrect="off" autocapitalize="off"
data-bind="textInput: org"> data-bind="textInput: org">
</div> </div>
<div class="control-group"> <div class="control-group">
<label data-i18n="CONTACTS/LABEL_DEPARTMENT"></label> <label data-i18n="CONTACTS/LABEL_DEPARTMENT"></label>
<span data-bind="text: department"></span> <span data-bind="text: department"></span>
<input type="text" <input type="text"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" autocomplete="off" autocorrect="off" autocapitalize="off"
data-bind="textInput: department"> data-bind="textInput: department">
</div> </div>
<div class="control-group"> <div class="control-group">
<label data-i18n="CONTACTS/LABEL_TITLE"></label> <label data-i18n="CONTACTS/LABEL_TITLE"></label>
<span data-bind="text: title"></span> <span data-bind="text: title"></span>
<input type="text" <input type="text"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" autocomplete="off" autocorrect="off" autocapitalize="off"
data-bind="textInput: title"> data-bind="textInput: title">
</div> </div>
</div> </div>
@ -264,7 +264,7 @@
</div> </div>
<!-- /ko --> <!-- /ko -->
</div> </div>
</div> </form>
<div class="b-view-content-toolbar btn-toolbar" data-bind="i18nUpdate: contact"> <div class="b-view-content-toolbar btn-toolbar" data-bind="i18nUpdate: contact">
<!-- ko with: contact --> <!-- ko with: contact -->
<div class="btn-group"> <div class="btn-group">

View file

@ -5,11 +5,11 @@
<span data-i18n="POPUPS_FILTER/TITLE_EDIT_FILTER" data-bind="visible: !isNew()"></span> <span data-i18n="POPUPS_FILTER/TITLE_EDIT_FILTER" data-bind="visible: !isNew()"></span>
</h3> </h3>
</header> </header>
<div class="modal-body" data-bind="with: filter"> <form class="modal-body" spellcheck="false" data-bind="with: filter">
<div class="control-group" data-bind="css: {'error': nameError}"> <div class="control-group" data-bind="css: {'error': nameError}">
<input type="text" class="span5" <input type="text" class="span5"
data-bind="value: name" data-bind="value: name"
autofocus="" autocorrect="off" autocapitalize="off" spellcheck="false" autofocus="" autocorrect="off" autocapitalize="off"
data-i18n="[placeholder]GLOBAL/NAME"> data-i18n="[placeholder]GLOBAL/NAME">
</div> </div>
@ -38,7 +38,7 @@
<div class="legend" data-i18n="POPUPS_FILTER/LEGEND_ACTIONS"></div> <div class="legend" data-i18n="POPUPS_FILTER/LEGEND_ACTIONS"></div>
<select class="span3" data-bind="options: $root.actionTypeOptions, value: actionType, optionsText: 'name', optionsValue: 'id'"></select> <select class="span3" data-bind="options: $root.actionTypeOptions, value: actionType, optionsText: 'name', optionsValue: 'id'"></select>
<div data-bind="template: {'name': actionTemplate()}, i18nUpdate: actionTemplate"></div> <div data-bind="template: {'name': actionTemplate()}, i18nUpdate: actionTemplate"></div>
</div> </form>
<footer> <footer>
<a class="btn buttonSave" data-bind="click: saveFilter" data-icon="✔" data-i18n="GLOBAL/DONE"></a> <a class="btn buttonSave" data-bind="click: saveFilter" data-icon="✔" data-i18n="GLOBAL/DONE"></a>
</footer> </footer>

View file

@ -2,7 +2,7 @@
<a href="#" class="close" data-bind="click: close">×</a> <a href="#" class="close" data-bind="click: close">×</a>
<h3 data-i18n="POPUPS_CREATE_FOLDER/TITLE_CREATE_FOLDER"></h3> <h3 data-i18n="POPUPS_CREATE_FOLDER/TITLE_CREATE_FOLDER"></h3>
</header> </header>
<form id="createfolderform" class="modal-body form-horizontal" autocomplete="off" data-bind="submit: submitForm"> <form id="createfolderform" class="modal-body form-horizontal" autocomplete="off" spellcheck="false" data-bind="submit: submitForm">
<div class="control-group"> <div class="control-group">
<label data-i18n="POPUPS_CREATE_FOLDER/LABEL_PARENT"></label> <label data-i18n="POPUPS_CREATE_FOLDER/LABEL_PARENT"></label>
<select data-bind="options: parentFolderSelectList, value: selectedParentValue, <select data-bind="options: parentFolderSelectList, value: selectedParentValue,
@ -11,7 +11,7 @@
<div class="control-group"> <div class="control-group">
<label data-i18n="GLOBAL/NAME"></label> <label data-i18n="GLOBAL/NAME"></label>
<input type="text" <input type="text"
autofocus="" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" autofocus="" autocomplete="off" autocorrect="off" autocapitalize="off"
required="" pattern="^[^\\/]+$" data-bind="textInput: folderName"> required="" pattern="^[^\\/]+$" data-bind="textInput: folderName">
</div> </div>
<div class="control-group" data-bind="component: { <div class="control-group" data-bind="component: {

View file

@ -5,7 +5,7 @@
<span data-bind="visible: edit" data-i18n="POPUPS_IDENTITY/TITLE_UPDATE_IDENTITY"></span> <span data-bind="visible: edit" data-i18n="POPUPS_IDENTITY/TITLE_UPDATE_IDENTITY"></span>
</h3> </h3>
</header> </header>
<form id="identityform" class="modal-body" autocomplete="off" data-bind="submit: submitForm"> <form id="identityform" class="modal-body" autocomplete="off" spellcheck="false" data-bind="submit: submitForm">
<div class="form-horizontal g-ui-user-select-none"> <div class="form-horizontal g-ui-user-select-none">
<div class="alert" data-bind="visible: '' !== submitError()"> <div class="alert" data-bind="visible: '' !== submitError()">
<a href="#" class="close" data-bind="click: function () { submitError('') }">×</a> <a href="#" class="close" data-bind="click: function () { submitError('') }">×</a>
@ -16,26 +16,26 @@
<div> <div>
<div class="textEmail" data-bind="text: email, visible: owner"></div> <div class="textEmail" data-bind="text: email, visible: owner"></div>
<input type="email" class="input-xlarge" autofocus="" <input type="email" class="input-xlarge" autofocus=""
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" autocomplete="off" autocorrect="off" autocapitalize="off"
data-bind="visible: !owner(), value: email, hasfocus: emailFocused"> data-bind="visible: !owner(), value: email, hasfocus: emailFocused">
</div> </div>
</div> </div>
<div class="control-group"> <div class="control-group">
<label data-i18n="GLOBAL/NAME"></label> <label data-i18n="GLOBAL/NAME"></label>
<input type="text" class="input-xlarge" <input type="text" class="input-xlarge"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" autocomplete="off" autocorrect="off" autocapitalize="off"
data-bind="value: name"> data-bind="value: name">
</div> </div>
<div class="control-group" data-bind="visible: showReplyTo, css: {'error': replyToHasError}"> <div class="control-group" data-bind="visible: showReplyTo, css: {'error': replyToHasError}">
<label data-i18n="GLOBAL/REPLY_TO"></label> <label data-i18n="GLOBAL/REPLY_TO"></label>
<input type="text" class="inputReplyTo input-xlarge" <input type="text" class="inputReplyTo input-xlarge"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" autocomplete="off" autocorrect="off" autocapitalize="off"
data-bind="value: replyTo, hasfocus: replyToFocused"> data-bind="value: replyTo, hasfocus: replyToFocused">
</div> </div>
<div class="control-group" data-bind="visible: showBcc, css: {'error': bccHasError}"> <div class="control-group" data-bind="visible: showBcc, css: {'error': bccHasError}">
<label data-i18n="GLOBAL/BCC"></label> <label data-i18n="GLOBAL/BCC"></label>
<input type="text" class="inputBcc input-xlarge" <input type="text" class="inputBcc input-xlarge"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" autocomplete="off" autocorrect="off" autocapitalize="off"
data-bind="value: bcc, hasfocus: bccFocused"> data-bind="value: bcc, hasfocus: bccFocused">
</div> </div>
<div class="control-group" data-bind="visible: !showReplyTo() || !showBcc()"> <div class="control-group" data-bind="visible: !showReplyTo() || !showBcc()">

View file

@ -2,7 +2,7 @@
<a href="#" class="close" data-bind="click: close">×</a> <a href="#" class="close" data-bind="click: close">×</a>
<h3 data-i18n="OPENPGP/POPUP_GENERATE_TITLE"></h3> <h3 data-i18n="OPENPGP/POPUP_GENERATE_TITLE"></h3>
</header> </header>
<form id="openpgp-generate" class="modal-body form-horizontal" autocomplete="off" data-bind="submit: submitForm"> <form id="openpgp-generate" class="modal-body form-horizontal" autocomplete="off" spellcheck="false" data-bind="submit: submitForm">
<div class="alert" data-bind="visible: '' !== submitError()"> <div class="alert" data-bind="visible: '' !== submitError()">
<a href="#" class="close" data-bind="click: function () { submitError('') }">×</a> <a href="#" class="close" data-bind="click: function () { submitError('') }">×</a>
<span data-bind="text: submitError"></span> <span data-bind="text: submitError"></span>
@ -12,7 +12,7 @@
<div class="control-group" data-bind="css: {'error': emailError}"> <div class="control-group" data-bind="css: {'error': emailError}">
<label data-i18n="GLOBAL/EMAIL"></label> <label data-i18n="GLOBAL/EMAIL"></label>
<input type="email" required="" class="input-xlarge" <input type="email" required="" class="input-xlarge"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" autocomplete="off" autocorrect="off" autocapitalize="off"
list="emailaddresses" data-bind="value: email"> list="emailaddresses" data-bind="value: email">
<datalist id="emailaddresses"> <datalist id="emailaddresses">
<!-- ko foreach: identities --> <!-- ko foreach: identities -->
@ -23,13 +23,13 @@
<div class="control-group"> <div class="control-group">
<label data-i18n="GLOBAL/NAME"></label> <label data-i18n="GLOBAL/NAME"></label>
<input type="text" required="" class="input-xlarge" <input type="text" required="" class="input-xlarge"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" autocomplete="off" autocorrect="off" autocapitalize="off"
data-bind="value: name"> data-bind="value: name">
</div> </div>
<div class="control-group"> <div class="control-group">
<label data-i18n="GLOBAL/PASSWORD"></label> <label data-i18n="GLOBAL/PASSWORD"></label>
<input type="password" required="" class="input-xlarge" <input type="password" required="" class="input-xlarge"
autocomplete="new-password" autocorrect="off" autocapitalize="off" spellcheck="false" autocomplete="new-password" autocorrect="off" autocapitalize="off"
data-bind="value: password"> data-bind="value: password">
</div> </div>
<div class="control-group"> <div class="control-group">

View file

@ -7,12 +7,12 @@
<span data-bind="visible: exists">: <!-- ko text: name--><!-- /ko --></span> <span data-bind="visible: exists">: <!-- ko text: name--><!-- /ko --></span>
</h3> </h3>
</header> </header>
<div class="modal-body"> <form class="modal-body" spellcheck="false">
<div class="control-group" data-bind="css: {'error': nameError}, hidden: exists"> <div class="control-group" data-bind="css: {'error': nameError}, hidden: exists">
<input type="text" class="span5" <input type="text" class="span5"
data-bind="value: name, hasfocus: !exists()" data-bind="value: name, hasfocus: !exists()"
autocorrect="off" autocapitalize="off" spellcheck="false" autocorrect="off" autocapitalize="off"
data-i18n="[placeholder]GLOBAL/NAME"> data-i18n="[placeholder]GLOBAL/NAME">
</div> </div>
@ -68,7 +68,7 @@
</table> </table>
<a class="btn" data-bind="click: $root.addFilter" data-icon="✚" data-i18n="POPUPS_SIEVE_SCRIPT/BUTTON_ADD_FILTER"></a> <a class="btn" data-bind="click: $root.addFilter" data-icon="✚" data-i18n="POPUPS_SIEVE_SCRIPT/BUTTON_ADD_FILTER"></a>
</div> </div>
</div> </form>
<footer> <footer>
<a class="btn" data-bind="visible: allowFilters(), click: function() { $root.toggleFiltersRaw(); }, css: {'active': $root.rawActive }" data-i18n="[title]POPUPS_SIEVE_SCRIPT/BUTTON_RAW_SCRIPT"> <a class="btn" data-bind="visible: allowFilters(), click: function() { $root.toggleFiltersRaw(); }, css: {'active': $root.rawActive }" data-i18n="[title]POPUPS_SIEVE_SCRIPT/BUTTON_RAW_SCRIPT">
<i class="icon-file-code"></i> <i class="icon-file-code"></i>

View file

@ -10,7 +10,7 @@
}"></div> }"></div>
</div> </div>
</div> </div>
<div class="form-horizontal" data-bind="visible: allowContactsSync"> <form class="form-horizontal" spellcheck="false" data-bind="visible: allowContactsSync">
<div class="legend" data-i18n="SETTINGS_CONTACTS/LEGEND_CONTACTS_SYNC"></div> <div class="legend" data-i18n="SETTINGS_CONTACTS/LEGEND_CONTACTS_SYNC"></div>
<div class="control-group"> <div class="control-group">
<label data-i18n="SETTINGS_CONTACTS/LABEL_CONTACTS_SYNC_ENABLE"></label> <label data-i18n="SETTINGS_CONTACTS/LABEL_CONTACTS_SYNC_ENABLE"></label>
@ -31,7 +31,7 @@
</div> </div>
<div class="control-group"> <div class="control-group">
<label data-i18n="SETTINGS_CONTACTS/LABEL_CONTACTS_SYNC_USER"></label> <label data-i18n="SETTINGS_CONTACTS/LABEL_CONTACTS_SYNC_USER"></label>
<input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" <input type="text" autocomplete="off" autocorrect="off" autocapitalize="off"
data-bind="value: syncUser"> data-bind="value: syncUser">
</div> </div>
<div class="control-group"> <div class="control-group">
@ -39,4 +39,4 @@
<input type="password" autocomplete="current-password" autocorrect="off" autocapitalize="off" <input type="password" autocomplete="current-password" autocorrect="off" autocapitalize="off"
spellcheck="false" data-bind="value: syncPass"> spellcheck="false" data-bind="value: syncPass">
</div> </div>
</div> </form>