mirror of
https://github.com/the-djmaze/snappymail.git
synced 2025-09-29 16:34:21 +08:00
Security: disable spellcheck everywhere by default due to Chrome/Edge sending data you enter to their servers.
This commit is contained in:
parent
9ed52fd070
commit
e35fbea415
24 changed files with 97 additions and 100 deletions
|
@ -18,7 +18,7 @@ export class EmailAddressesComponent {
|
|||
|
||||
const self = this,
|
||||
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 Mobile dataTransfer.types.includes(contentType) fails, only text/plain is set
|
||||
validDropzone = () => dragAddress?.li.parentNode !== self.ul,
|
||||
|
|
|
@ -8,6 +8,5 @@ export class TextAreaComponent extends AbstractInput {
|
|||
super(params);
|
||||
|
||||
this.rows = params.rows || 5;
|
||||
this.spellcheck = !!params.spellcheck;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
<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="row">
|
||||
<div class="span6">
|
||||
<div class="control-group" data-bind="css: {'error': currentPasswordError}">
|
||||
<label class="control-label" data-i18n="SETTINGS_CHANGE_PASSWORD/LABEL_CURRENT_PASSWORD"></label>
|
||||
<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" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group" data-bind="css: {'error': passwordMismatch}">
|
||||
<label class="control-label" data-i18n="SETTINGS_CHANGE_PASSWORD/LABEL_NEW_PASSWORD"></label>
|
||||
<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" />
|
||||
<br/>
|
||||
<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}">
|
||||
<label class="control-label" data-i18n="SETTINGS_CHANGE_PASSWORD/LABEL_REPEAT_PASSWORD"></label>
|
||||
<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" />
|
||||
</div>
|
||||
</div>
|
||||
|
@ -37,5 +37,5 @@
|
|||
</div>
|
||||
<div class="span4 alert alert-error alert-null-left-margin" data-bind="visible: '' !== errorDescription(), text: errorDescription"></div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
|
|
@ -7,8 +7,8 @@ class TwoFactorAuthPlugin extends \RainLoop\Plugins\AbstractPlugin
|
|||
{
|
||||
const
|
||||
NAME = 'Two Factor Authentication',
|
||||
VERSION = '2.16',
|
||||
RELEASE = '2022-05-20',
|
||||
VERSION = '2.16.1',
|
||||
RELEASE = '2022-09-20',
|
||||
REQUIRED = '2.15.2',
|
||||
CATEGORY = 'Login',
|
||||
DESCRIPTION = 'Provides support for TOTP 2FA';
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
+ '<span class="fontastic">⏱</span>'
|
||||
+ '<input name="totp_code" type="text" class="input-block-level"'
|
||||
+ ' 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
|
||||
+ '" placeholder="'+rl.i18n(placeholder)+'">'
|
||||
+ '</div>'));
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
{{BaseAppFaviconTouchLinkTag}}
|
||||
</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-desc">{{LoadingDescriptionEsc}}</div>
|
||||
<i class="icon-spinner"></i>
|
||||
|
|
|
@ -2,25 +2,25 @@
|
|||
<a href="#" class="close" data-bind="click: function () { submitError('') }">×</a>
|
||||
<span data-bind="text: submitError"></span>
|
||||
</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}">
|
||||
<span class="fontastic">👤</span>
|
||||
<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-i18n="[placeholder]LOGIN/LABEL_LOGIN">
|
||||
</div>
|
||||
<div class="controls" data-bind="css: {'error': passwordError}">
|
||||
<span class="fontastic">🔑</span>
|
||||
<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-i18n="[placeholder]LOGIN/LABEL_PASSWORD">
|
||||
</div>
|
||||
<div class="controls">
|
||||
<span class="fontastic">⏱</span>
|
||||
<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-i18n="[placeholder]LOGIN/LABEL_TOTP">
|
||||
</div>
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<div data-i18n="[html]TAB_CONTACTS/HTML_ALERT_DOES_NOT_SUPPORTED"></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="control-group">
|
||||
<div>
|
||||
|
@ -18,8 +18,8 @@
|
|||
}"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-horizontal" data-bind="visible: contactsSupported">
|
||||
</form>
|
||||
<form class="form-horizontal" spellcheck="false" data-bind="visible: contactsSupported">
|
||||
<div class="legend" data-i18n="TAB_CONTACTS/LEGEND_STORAGE"></div>
|
||||
<div class="control-group">
|
||||
<label data-i18n="TAB_CONTACTS/LABEL_STORAGE_TYPE"></label>
|
||||
|
@ -38,21 +38,21 @@
|
|||
<div class="control-group">
|
||||
<label data-i18n="TAB_CONTACTS/LABEL_STORAGE_DSN"></label>
|
||||
<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">
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label data-i18n="TAB_CONTACTS/LABEL_STORAGE_USER"></label>
|
||||
<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">
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label data-i18n="TAB_CONTACTS/LABEL_STORAGE_PASSWORD"></label>
|
||||
<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">
|
||||
</div>
|
||||
</div>
|
||||
|
@ -80,4 +80,4 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="alert span8" data-bind="text: testContactsErrorMessage, visible: '' !== testContactsErrorMessage()"></div>
|
||||
</div>
|
||||
</form>
|
||||
|
|
|
@ -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="control-group">
|
||||
<label data-i18n="TAB_LOGIN/LABEL_DEFAULT_DOMAIN"></label>
|
||||
|
@ -28,4 +28,4 @@
|
|||
}"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<label data-bind="text: Label, visible: 5 !== Type"></label>
|
||||
<!-- 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}">
|
||||
<!-- /ko -->
|
||||
<!-- ko if: 1 === Type -->
|
||||
|
@ -8,14 +8,12 @@
|
|||
data-bind="value: value, attr: {placeholder: placeholder}">
|
||||
<!-- /ko -->
|
||||
<!-- 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}">
|
||||
<!-- /ko -->
|
||||
<!-- ko if: 2 === Type -->
|
||||
<div data-bind="component: {
|
||||
name: 'TextArea',
|
||||
params: { value: value, placeholder: placeholder }
|
||||
}"></div>
|
||||
<textarea rows="5" autocomplete="off" autocorrect="off" autocapitalize="off"
|
||||
data-bind="value: value, attr: {placeholder: placeholder }"></textarea>
|
||||
<!-- /ko -->
|
||||
<!-- ko if: 4 === Type -->
|
||||
<select data-bind="options: Default, value: value"></select>
|
||||
|
|
|
@ -20,31 +20,31 @@
|
|||
</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="control-group" data-bind="css: {'error': adminLoginError}">
|
||||
<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">
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<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">
|
||||
</div>
|
||||
<div class="control-group" data-bind="css: {'error': adminPasswordNewError}">
|
||||
<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">
|
||||
</div>
|
||||
<div class="control-group" data-bind="css: {'error': adminPasswordNewError}">
|
||||
<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">
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<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,}"
|
||||
data-bind="textInput: adminTOTP">
|
||||
</div>
|
||||
|
@ -56,7 +56,7 @@
|
|||
<a class="btn" data-bind="command: saveAdminUserCommand, css: { 'btn-success': saveSuccess, 'btn-danger': saveError }"
|
||||
data-icon="🔑" data-i18n="GLOBAL/SAVE"></a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<div class="form-horizontal">
|
||||
<div class="legend" data-i18n="TAB_SECURITY/LEGEND_SSL"></div>
|
||||
<div class="control-group">
|
||||
|
|
|
@ -2,20 +2,20 @@
|
|||
<a href="#" class="close" data-bind="click: close">×</a>
|
||||
<h3 data-bind="text: headerText"></h3>
|
||||
</header>
|
||||
<div class="modal-body">
|
||||
<div class="row" data-bind="visible: !edit()" style="margin-bottom: 20px;">
|
||||
<form class="modal-body" action="#/" spellcheck="false" onsubmit="return false;">
|
||||
<div class="row" data-bind="hidden: edit" style="margin-bottom: 20px;">
|
||||
<div class="span5">
|
||||
<span data-i18n="POPUPS_DOMAIN/LABEL_NAME"></span>
|
||||
<span style="opacity:0.7"> (<span data-i18n="POPUPS_DOMAIN/NAME_HELPER"></span>)</span>
|
||||
<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">
|
||||
<div class="alert-error" data-bind="visible: '' !== savingError(), text: savingError"></div>
|
||||
<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 class="span5 domain-desc" data-bind="visible: domainDesc, html: domainDesc"></div>
|
||||
</div>
|
||||
|
||||
<form class="form-horizontal domain-form" action="#/" onsubmit="return false;">
|
||||
<div class="form-horizontal domain-form">
|
||||
<div class="tabs">
|
||||
|
||||
<input type="radio" name="helptabs" id="tab-help1" checked>
|
||||
|
@ -27,7 +27,7 @@
|
|||
<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"
|
||||
<input type="text" class="span3" autocomplete="off" autocorrect="off" autocapitalize="off"
|
||||
data-bind="textInput: imapHost, hasfocus: imapHostFocus">
|
||||
</div>
|
||||
<div class="span2">
|
||||
|
@ -42,7 +42,7 @@
|
|||
<div class="span2">
|
||||
<span data-i18n="POPUPS_DOMAIN/LABEL_PORT"></span>
|
||||
<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">
|
||||
</div>
|
||||
</div>
|
||||
|
@ -68,7 +68,7 @@
|
|||
<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"
|
||||
<input type="text" class="span3" autocomplete="off" autocorrect="off" autocapitalize="off"
|
||||
data-bind="textInput: smtpHost, hasfocus: smtpHostFocus">
|
||||
</div>
|
||||
<div class="span2">
|
||||
|
@ -83,7 +83,7 @@
|
|||
<div class="span2">
|
||||
<span data-i18n="POPUPS_DOMAIN/LABEL_PORT"></span>
|
||||
<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">
|
||||
</div>
|
||||
</div>
|
||||
|
@ -147,7 +147,7 @@
|
|||
<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"
|
||||
<input type="text" class="span3" autocomplete="off" autocorrect="off" autocapitalize="off"
|
||||
data-bind="textInput: sieveHost, hasfocus: sieveHostFocus">
|
||||
</div>
|
||||
<div class="span2">
|
||||
|
@ -162,7 +162,7 @@
|
|||
<div class="span2">
|
||||
<span data-i18n="POPUPS_DOMAIN/LABEL_PORT"></span>
|
||||
<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">
|
||||
</div>
|
||||
</div>
|
||||
|
@ -176,8 +176,8 @@
|
|||
<textarea class="input-xxlarge" style="width: 100%" rows="8" data-bind="value: whiteList" tabindex="-1"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<footer>
|
||||
<a class="btn" data-bind="command: testConnectionCommand, css: {
|
||||
'btn-success': testingDone() && !testingImapError() && !testingSmtpError(),
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
<span data-bind="visible: hasReadme, text: readme"></span>
|
||||
</header>
|
||||
<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" data-bind="visible: '' !== saveError()">
|
||||
<a href="#" class="close" data-bind="click: function () { saveError('') }">×</a>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<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 -->
|
||||
<span data-bind="saveTrigger: trigger"></span>
|
||||
<!-- /ko -->
|
||||
|
|
|
@ -7,19 +7,19 @@
|
|||
<!-- ko text: submitErrorAdditional --><!-- /ko -->
|
||||
</p>
|
||||
</div>
|
||||
<form action="#/"
|
||||
<form action="#/" spellcheck="false"
|
||||
data-bind="submit: submitForm, css: {'errorAnimated': formError, 'submitting': submitRequest()}">
|
||||
<div class="controls" data-bind="css: {'error': emailError}">
|
||||
<span class="fontastic">✉</span>
|
||||
<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-i18n="[placeholder]GLOBAL/EMAIL">
|
||||
</div>
|
||||
<div class="controls" data-bind="css: {'error': passwordError}">
|
||||
<span class="fontastic">🔑</span>
|
||||
<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-i18n="[placeholder]GLOBAL/PASSWORD">
|
||||
</div>
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<span data-bind="visible: !isNew()" data-i18n="POPUPS_ADD_ACCOUNT/TITLE_UPDATE_ACCOUNT"></span>
|
||||
</h3>
|
||||
</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()">
|
||||
<a href="#" class="close" data-bind="click: function () { submitError('') }">×</a>
|
||||
<span data-bind="text: submitError"></span>
|
||||
|
@ -15,12 +15,12 @@
|
|||
<label data-i18n="GLOBAL/EMAIL"></label>
|
||||
<strong style="margin-top: 5px;" data-bind="visible: !isNew(), text: email"></strong>
|
||||
<input type="text" class="input-xlarge"
|
||||
autofocus="" autocorrect="off" autocapitalize="off" spellcheck="false"
|
||||
autofocus="" autocorrect="off" autocapitalize="off"
|
||||
data-bind="visible: isNew, textInput: email">
|
||||
</div>
|
||||
<div class="control-group" data-bind="css: {'error': passwordError}">
|
||||
<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">
|
||||
</div>
|
||||
</form>
|
||||
|
|
|
@ -2,27 +2,27 @@
|
|||
<a href="#" class="close" data-bind="click: close">×</a>
|
||||
<h3 data-i18n="SEARCH/TITLE_ADV"></h3>
|
||||
</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="span4">
|
||||
<div class="control-group">
|
||||
<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">
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<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">
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<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">
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<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">
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -44,7 +44,7 @@
|
|||
</header>
|
||||
<div class="modal-body">
|
||||
<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 class="b-list-content g-ui-user-select-none" data-bind="css: {'hideContactListCheckbox': !useCheckboxesInList()}">
|
||||
<div class="content">
|
||||
|
@ -72,7 +72,7 @@
|
|||
<!-- ko template: { name: 'Paginator', data: contactsPaginator } --><!-- /ko -->
|
||||
</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()"
|
||||
data-i18n="CONTACTS/CONTACT_VIEW_DESC"></div>
|
||||
<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">
|
||||
<span data-bind="text: givenName"></span>
|
||||
<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">
|
||||
</div>
|
||||
<div class="property-line" data-i18n="[title]CONTACTS/PLACEHOLDER_ENTER_LAST_NAME">
|
||||
<span data-bind="text: surName"></span>
|
||||
<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">
|
||||
</div>
|
||||
<!--
|
||||
<div class="property-line" data-i18n="[title]CONTACTS/PLACEHOLDER_ENTER_MIDDLE_NAME">
|
||||
<span data-bind="text: middleName"></span>
|
||||
<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">
|
||||
</div>
|
||||
<div class="property-line" data-i18n="[title]CONTACTS/PLACEHOLDER_ENTER_NAME_PREFIX">
|
||||
<span data-bind="text: namePrefix"></span>
|
||||
<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">
|
||||
</div>
|
||||
<div class="property-line" data-i18n="[title]CONTACTS/PLACEHOLDER_ENTER_NAME_SUFFIX">
|
||||
<span data-bind="text: nameSuffix"></span>
|
||||
<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">
|
||||
</div>
|
||||
-->
|
||||
<div class="property-line" data-bind="visible: null != nickname()" data-i18n="[title]CONTACTS/ADD_MENU_NICKNAME">
|
||||
<span data-bind="text: nickname"></span>
|
||||
<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">
|
||||
</div>
|
||||
</div>
|
||||
|
@ -135,7 +135,7 @@
|
|||
<div class="property-line">
|
||||
<span data-bind="text: value"></span>
|
||||
<input type="text"
|
||||
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
|
||||
autocomplete="off" autocorrect="off" autocapitalize="off"
|
||||
data-bind="textInput: value">
|
||||
</div>
|
||||
</div>
|
||||
|
@ -149,7 +149,7 @@
|
|||
<div class="property-line">
|
||||
<span data-bind="text: value"></span>
|
||||
<input type="text"
|
||||
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
|
||||
autocomplete="off" autocorrect="off" autocapitalize="off"
|
||||
data-bind="textInput: value">
|
||||
</div>
|
||||
</div>
|
||||
|
@ -163,7 +163,7 @@
|
|||
<div class="property-line">
|
||||
<span data-bind="text: value"></span>
|
||||
<input type="text" placeholder="https://"
|
||||
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
|
||||
autocomplete="off" autocorrect="off" autocapitalize="off"
|
||||
data-bind="textInput: value">
|
||||
</div>
|
||||
</div>
|
||||
|
@ -175,7 +175,7 @@
|
|||
<div class="property-line">
|
||||
<span data-bind="text: note"></span>
|
||||
<input type="text"
|
||||
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
|
||||
autocomplete="off" autocorrect="off" autocapitalize="off"
|
||||
data-bind="textInput: note">
|
||||
</div>
|
||||
</div>
|
||||
|
@ -216,21 +216,21 @@
|
|||
<label data-i18n="CONTACTS/LABEL_ORGANIZATION"></label>
|
||||
<span data-bind="text: org"></span>
|
||||
<input type="text"
|
||||
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
|
||||
autocomplete="off" autocorrect="off" autocapitalize="off"
|
||||
data-bind="textInput: org">
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label data-i18n="CONTACTS/LABEL_DEPARTMENT"></label>
|
||||
<span data-bind="text: department"></span>
|
||||
<input type="text"
|
||||
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
|
||||
autocomplete="off" autocorrect="off" autocapitalize="off"
|
||||
data-bind="textInput: department">
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label data-i18n="CONTACTS/LABEL_TITLE"></label>
|
||||
<span data-bind="text: title"></span>
|
||||
<input type="text"
|
||||
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
|
||||
autocomplete="off" autocorrect="off" autocapitalize="off"
|
||||
data-bind="textInput: title">
|
||||
</div>
|
||||
</div>
|
||||
|
@ -264,7 +264,7 @@
|
|||
</div>
|
||||
<!-- /ko -->
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<div class="b-view-content-toolbar btn-toolbar" data-bind="i18nUpdate: contact">
|
||||
<!-- ko with: contact -->
|
||||
<div class="btn-group">
|
||||
|
|
|
@ -5,11 +5,11 @@
|
|||
<span data-i18n="POPUPS_FILTER/TITLE_EDIT_FILTER" data-bind="visible: !isNew()"></span>
|
||||
</h3>
|
||||
</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}">
|
||||
<input type="text" class="span5"
|
||||
data-bind="value: name"
|
||||
autofocus="" autocorrect="off" autocapitalize="off" spellcheck="false"
|
||||
autofocus="" autocorrect="off" autocapitalize="off"
|
||||
data-i18n="[placeholder]GLOBAL/NAME">
|
||||
</div>
|
||||
|
||||
|
@ -38,7 +38,7 @@
|
|||
<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>
|
||||
<div data-bind="template: {'name': actionTemplate()}, i18nUpdate: actionTemplate"></div>
|
||||
</div>
|
||||
</form>
|
||||
<footer>
|
||||
<a class="btn buttonSave" data-bind="click: saveFilter" data-icon="✔" data-i18n="GLOBAL/DONE"></a>
|
||||
</footer>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<a href="#" class="close" data-bind="click: close">×</a>
|
||||
<h3 data-i18n="POPUPS_CREATE_FOLDER/TITLE_CREATE_FOLDER"></h3>
|
||||
</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">
|
||||
<label data-i18n="POPUPS_CREATE_FOLDER/LABEL_PARENT"></label>
|
||||
<select data-bind="options: parentFolderSelectList, value: selectedParentValue,
|
||||
|
@ -11,7 +11,7 @@
|
|||
<div class="control-group">
|
||||
<label data-i18n="GLOBAL/NAME"></label>
|
||||
<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">
|
||||
</div>
|
||||
<div class="control-group" data-bind="component: {
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<span data-bind="visible: edit" data-i18n="POPUPS_IDENTITY/TITLE_UPDATE_IDENTITY"></span>
|
||||
</h3>
|
||||
</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="alert" data-bind="visible: '' !== submitError()">
|
||||
<a href="#" class="close" data-bind="click: function () { submitError('') }">×</a>
|
||||
|
@ -16,26 +16,26 @@
|
|||
<div>
|
||||
<div class="textEmail" data-bind="text: email, visible: owner"></div>
|
||||
<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">
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label data-i18n="GLOBAL/NAME"></label>
|
||||
<input type="text" class="input-xlarge"
|
||||
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
|
||||
autocomplete="off" autocorrect="off" autocapitalize="off"
|
||||
data-bind="value: name">
|
||||
</div>
|
||||
<div class="control-group" data-bind="visible: showReplyTo, css: {'error': replyToHasError}">
|
||||
<label data-i18n="GLOBAL/REPLY_TO"></label>
|
||||
<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">
|
||||
</div>
|
||||
<div class="control-group" data-bind="visible: showBcc, css: {'error': bccHasError}">
|
||||
<label data-i18n="GLOBAL/BCC"></label>
|
||||
<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">
|
||||
</div>
|
||||
<div class="control-group" data-bind="visible: !showReplyTo() || !showBcc()">
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<a href="#" class="close" data-bind="click: close">×</a>
|
||||
<h3 data-i18n="OPENPGP/POPUP_GENERATE_TITLE"></h3>
|
||||
</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()">
|
||||
<a href="#" class="close" data-bind="click: function () { submitError('') }">×</a>
|
||||
<span data-bind="text: submitError"></span>
|
||||
|
@ -12,7 +12,7 @@
|
|||
<div class="control-group" data-bind="css: {'error': emailError}">
|
||||
<label data-i18n="GLOBAL/EMAIL"></label>
|
||||
<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">
|
||||
<datalist id="emailaddresses">
|
||||
<!-- ko foreach: identities -->
|
||||
|
@ -23,13 +23,13 @@
|
|||
<div class="control-group">
|
||||
<label data-i18n="GLOBAL/NAME"></label>
|
||||
<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">
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label data-i18n="GLOBAL/PASSWORD"></label>
|
||||
<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">
|
||||
</div>
|
||||
<div class="control-group">
|
||||
|
|
|
@ -7,12 +7,12 @@
|
|||
<span data-bind="visible: exists">: <!-- ko text: name--><!-- /ko --></span>
|
||||
</h3>
|
||||
</header>
|
||||
<div class="modal-body">
|
||||
<form class="modal-body" spellcheck="false">
|
||||
|
||||
<div class="control-group" data-bind="css: {'error': nameError}, hidden: exists">
|
||||
<input type="text" class="span5"
|
||||
data-bind="value: name, hasfocus: !exists()"
|
||||
autocorrect="off" autocapitalize="off" spellcheck="false"
|
||||
autocorrect="off" autocapitalize="off"
|
||||
data-i18n="[placeholder]GLOBAL/NAME">
|
||||
</div>
|
||||
|
||||
|
@ -68,7 +68,7 @@
|
|||
</table>
|
||||
<a class="btn" data-bind="click: $root.addFilter" data-icon="✚" data-i18n="POPUPS_SIEVE_SCRIPT/BUTTON_ADD_FILTER"></a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<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">
|
||||
<i class="icon-file-code"></i>
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
}"></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="control-group">
|
||||
<label data-i18n="SETTINGS_CONTACTS/LABEL_CONTACTS_SYNC_ENABLE"></label>
|
||||
|
@ -31,7 +31,7 @@
|
|||
</div>
|
||||
<div class="control-group">
|
||||
<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">
|
||||
</div>
|
||||
<div class="control-group">
|
||||
|
@ -39,4 +39,4 @@
|
|||
<input type="password" autocomplete="current-password" autocorrect="off" autocapitalize="off"
|
||||
spellcheck="false" data-bind="value: syncPass">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
|
Loading…
Add table
Reference in a new issue