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,
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,

View file

@ -8,6 +8,5 @@ export class TextAreaComponent extends AbstractInput {
super(params);
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="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>

View file

@ -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';

View file

@ -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>'));

View file

@ -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>

View file

@ -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>

View file

@ -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>

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="control-group">
<label data-i18n="TAB_LOGIN/LABEL_DEFAULT_DOMAIN"></label>
@ -28,4 +28,4 @@
}"></div>
</div>
</div>
</div>
</form>

View file

@ -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>

View file

@ -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">

View file

@ -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(),

View file

@ -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>

View file

@ -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 -->

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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">

View file

@ -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>

View file

@ -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: {

View file

@ -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()">

View file

@ -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">

View file

@ -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>

View file

@ -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>