Interface optimizations

This commit is contained in:
RainLoop Team 2014-04-29 19:31:49 +04:00
parent 7552ffe241
commit d430de9e93
68 changed files with 276 additions and 110 deletions

View file

@ -12,6 +12,8 @@ function AdminSecurity()
this.adminLogin = ko.observable(RL.settingsGet('AdminLogin'));
this.adminPassword = ko.observable('');
this.adminPasswordNew = ko.observable('');
this.adminPasswordNew2 = ko.observable('');
this.adminPasswordNewError = ko.observable(false);
this.adminPasswordUpdateError = ko.observable(false);
this.adminPasswordUpdateSuccess = ko.observable(false);
@ -24,10 +26,23 @@ function AdminSecurity()
this.adminPasswordNew.subscribe(function () {
this.adminPasswordUpdateError(false);
this.adminPasswordUpdateSuccess(false);
this.adminPasswordNewError(false);
}, this);
this.adminPasswordNew2.subscribe(function () {
this.adminPasswordUpdateError(false);
this.adminPasswordUpdateSuccess(false);
this.adminPasswordNewError(false);
}, this);
this.saveNewAdminPasswordCommand = Utils.createCommand(this, function () {
if (this.adminPasswordNew() !== this.adminPasswordNew2())
{
this.adminPasswordNewError(true);
return false;
}
this.adminPasswordUpdateError(false);
this.adminPasswordUpdateSuccess(false);
@ -37,7 +52,7 @@ function AdminSecurity()
});
}, function () {
return '' !== this.adminPassword() && '' !== this.adminPasswordNew();
return '' !== this.adminPassword() && '' !== this.adminPasswordNew() && '' !== this.adminPasswordNew2();
});
this.onNewAdminPasswordResponse = _.bind(this.onNewAdminPasswordResponse, this);
@ -51,6 +66,7 @@ AdminSecurity.prototype.onNewAdminPasswordResponse = function (sResult, oData)
{
this.adminPassword('');
this.adminPasswordNew('');
this.adminPasswordNew2('');
this.adminPasswordUpdateSuccess(true);
}
@ -85,6 +101,7 @@ AdminSecurity.prototype.onHide = function ()
{
this.adminPassword('');
this.adminPasswordNew('');
this.adminPasswordNew2('');
};
/**

View file

@ -51,6 +51,11 @@ AbstractSystemDropDownViewModel.prototype.settingsClick = function ()
kn.setHash(RL.link().settings());
};
AbstractSystemDropDownViewModel.prototype.settingsHelp = function ()
{
kn.showScreenPopup(PopupsKeyboardShortcutsHelpViewModel);
};
AbstractSystemDropDownViewModel.prototype.addAccountClick = function ()
{
if (this.allowAddAccount)
@ -80,4 +85,13 @@ AbstractSystemDropDownViewModel.prototype.onBuild = function ()
self.accountMenuDropdownTrigger(true);
}
});
// shortcuts help
key('shift+/', [Enums.KeyState.MessageList, Enums.KeyState.MessageView, Enums.KeyState.Settings], function () {
if (self.viewModelVisibility())
{
kn.showScreenPopup(PopupsKeyboardShortcutsHelpViewModel);
return false;
}
});
};

View file

@ -737,12 +737,6 @@ MailBoxMessageListViewModel.prototype.initShortcuts = function ()
return false;
});
// shortcuts help
key('shift+/', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () {
kn.showScreenPopup(PopupsKeyboardShortcutsHelpViewModel);
return false;
});
key('shift+f', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () {
self.multyForwardCommand();
return false;

View file

@ -1,7 +1,7 @@
{
"name": "RainLoop",
"title": "RainLoop Webmail",
"version": "1.6.5",
"version": "1.6.6",
"release": "911",
"description": "Simple, modern & fast web-based email client",
"homepage": "http://rainloop.net",

View file

@ -8,7 +8,7 @@
<form class="form-horizontal span4 wrapper loginForm thm-login" action="#/" onsubmit="return false;" data-bind="command: submitCommand">
<div class="control-group" data-bind="css: {'error': loginError}">
<div class="input-append">
<input class="inputLogin span4" placeholder="Login" type="text"
<input type="text" class="inputLogin span4" placeholder="Login"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: login, hasFocus: loginFocus" />
<span class="add-on">
@ -18,7 +18,7 @@
</div>
<div class="control-group" data-bind="css: {'error': passwordError}">
<div class="input-append">
<input class="inputPassword span4" placeholder="Password" type="password"
<input type="password" class="inputPassword span4" placeholder="Password"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: password" />
<span class="add-on">

View file

@ -8,7 +8,8 @@
Page Title
</label>
<div class="controls">
<input type="text" class="span5" data-bind="value: title, saveTrigger: title.trigger" />
<input type="text" class="span5" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: title, saveTrigger: title.trigger" />
<div data-bind="saveTrigger: title.trigger"></div>
</div>
</div>
@ -17,7 +18,8 @@
Loading Description
</label>
<div class="controls">
<input type="text" class="span5" data-bind="value: loadingDesc, saveTrigger: loadingDesc.trigger" />
<input type="text" class="span5" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: loadingDesc, saveTrigger: loadingDesc.trigger" />
<div data-bind="saveTrigger: loadingDesc.trigger"></div>
</div>
</div>
@ -30,7 +32,8 @@
Logo
</label>
<div class="controls">
<input type="text" class="span5" placeholder="http://" data-bind="value: loginLogo, saveTrigger: loginLogo.trigger" />
<input type="text" class="span5" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
placeholder="https://" data-bind="value: loginLogo, saveTrigger: loginLogo.trigger" />
<div data-bind="saveTrigger: loginLogo.trigger"></div>
</div>
</div>
@ -39,7 +42,8 @@
Description
</label>
<div class="controls">
<input type="text" class="span5" data-bind="value: loginDescription, saveTrigger: loginDescription.trigger" />
<input type="text" class="span5" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: loginDescription, saveTrigger: loginDescription.trigger" />
<div data-bind="saveTrigger: loginDescription.trigger"></div>
</div>
</div>

View file

@ -50,7 +50,8 @@
Dsn
</label>
<div class="controls">
<input type="text" class="span6" data-bind="value: pdoDsn, saveTrigger: pdoDsnTrigger" />
<input type="text" class="span6" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: pdoDsn, saveTrigger: pdoDsnTrigger" />
<div data-bind="saveTrigger: pdoDsnTrigger"></div>
<blockquote style="margin: 10px 0 0 0">
<p class="muted">
@ -66,7 +67,8 @@
User
</label>
<div class="controls">
<input type="text" data-bind="value: pdoUser, saveTrigger: pdoUserTrigger" />
<input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: pdoUser, saveTrigger: pdoUserTrigger" />
<div data-bind="saveTrigger: pdoUserTrigger"></div>
</div>
</div>
@ -75,7 +77,8 @@
Password
</label>
<div class="controls">
<input type="password" data-bind="value: pdoPassword, saveTrigger: pdoPasswordTrigger" />
<input type="password" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: pdoPassword, saveTrigger: pdoPasswordTrigger" />
<div data-bind="saveTrigger: pdoPasswordTrigger"></div>
</div>
</div>

View file

@ -8,7 +8,8 @@
Default Domain
</label>
<div class="controls">
<input type="text" class="span3" data-bind="value: defaultDomain, saveTrigger: defaultDomainTrigger" />
<input type="text" class="span3" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: defaultDomain, saveTrigger: defaultDomainTrigger" />
<div data-bind="saveTrigger: defaultDomainTrigger"></div>
</div>
</div>

View file

@ -4,13 +4,13 @@
</label>
<div class="controls">
<!-- ko if: 0 === Type || 1 === Type -->
<input type="text" data-bind="value: value" />
<input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" data-bind="value: value" />
<!-- /ko -->
<!-- ko if: 3 === Type -->
<input type="password" data-bind="value: value" />
<input type="password" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" data-bind="value: value" />
<!-- /ko -->
<!-- ko if: 2 === Type -->
<textarea data-bind="value: value"></textarea>
<textarea autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" data-bind="value: value"></textarea>
<!-- /ko -->
<!-- ko if: 4 === Type -->
<select data-bind="options: Default, value: value"></select>

View file

@ -45,15 +45,26 @@
Current password
</label>
<div class="controls">
<input type="password" data-bind="value: adminPassword, valueUpdate: 'afterkeydown'" />
<input type="password" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: adminPassword, valueUpdate: 'afterkeydown'" />
</div>
</div>
<div class="control-group">
<div class="control-group" data-bind="css: {'error': adminPasswordNewError}">
<label class="control-label">
New password
</label>
<div class="controls">
<input type="password" data-bind="value: adminPasswordNew, valueUpdate: 'afterkeydown'" />
<input type="password" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: adminPasswordNew, valueUpdate: 'afterkeydown'" />
</div>
</div>
<div class="control-group" data-bind="css: {'error': adminPasswordNewError}">
<label class="control-label">
Repeat new password
</label>
<div class="controls">
<input type="password" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: adminPasswordNew2, valueUpdate: 'afterkeydown'" />
</div>
</div>
<div class="control-group">

View file

@ -22,7 +22,8 @@
Client ID
</label>
<div class="controls">
<input type="text" class="span5" data-bind="value: googleClientID, saveTrigger: googleTrigger1" />
<input type="text" class="span5" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: googleClientID, saveTrigger: googleTrigger1" />
<div data-bind="saveTrigger: googleTrigger1"></div>
</div>
</div>
@ -31,7 +32,8 @@
Client Secret
</label>
<div class="controls">
<input type="text" class="span5" data-bind="value: googleClientSecret, saveTrigger: googleTrigger2" />
<input type="text" class="span5" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: googleClientSecret, saveTrigger: googleTrigger2" />
<div data-bind="saveTrigger: googleTrigger2"></div>
</div>
</div>
@ -51,7 +53,8 @@
App ID
</label>
<div class="controls">
<input type="text" class="span5" data-bind="value: facebookAppID, saveTrigger: facebookTrigger1" />
<input type="text" class="span5" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: facebookAppID, saveTrigger: facebookTrigger1" />
<div data-bind="saveTrigger: facebookTrigger1"></div>
</div>
</div>
@ -60,7 +63,8 @@
App Secret
</label>
<div class="controls">
<input type="text" class="span5" data-bind="value: facebookAppSecret, saveTrigger: facebookTrigger2" />
<input type="text" class="span5" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: facebookAppSecret, saveTrigger: facebookTrigger2" />
<div data-bind="saveTrigger: facebookTrigger2"></div>
</div>
</div>
@ -80,7 +84,8 @@
Consumer Key
</label>
<div class="controls">
<input type="text" class="span5" data-bind="value: twitterConsumerKey, saveTrigger: twitterTrigger1" />
<input type="text" class="span5" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: twitterConsumerKey, saveTrigger: twitterTrigger1" />
<div data-bind="saveTrigger: twitterTrigger1"></div>
</div>
</div>
@ -89,7 +94,8 @@
Consumer Secret
</label>
<div class="controls">
<input type="text" class="span5" data-bind="value: twitterConsumerSecret, saveTrigger: twitterTrigger2" />
<input type="text" class="span5" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: twitterConsumerSecret, saveTrigger: twitterTrigger2" />
<div data-bind="saveTrigger: twitterTrigger2"></div>
</div>
</div>
@ -109,7 +115,8 @@
Api Key
</label>
<div class="controls">
<input type="text" class="span5" data-bind="value: dropboxApiKey, saveTrigger: dropboxTrigger1" />
<input type="text" class="span5" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: dropboxApiKey, saveTrigger: dropboxTrigger1" />
<div data-bind="saveTrigger: dropboxTrigger1"></div>
</div>
</div>

View file

@ -20,7 +20,7 @@
{{INCLUDE/TopControlGroup/PLACE}}
<div class="control-group" data-bind="css: {'error': emailError}">
<div class="input-append">
<input class="i18n inputEmail span4" type="email" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
<input type="email" class="i18n inputEmail span4" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: email, hasFocus: emailFocus" data-i18n-placeholder="LOGIN/LABEL_EMAIL" />
<span class="add-on">
<i class="icon-mail"></i>
@ -29,7 +29,7 @@
</div>
<div class="control-group" data-bind="css: {'error': loginError}, visible: allowCustomLogin()">
<div class="input-append">
<input class="i18n inputLogin span4" type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
<input type="email" class="i18n inputLogin span4" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: login, hasFocus: loginFocus" data-i18n-placeholder="LOGIN/LABEL_LOGIN" />
<span class="add-on">
<i class="icon-user"></i>
@ -38,7 +38,7 @@
</div>
<div class="control-group" data-bind="css: {'error': passwordError}">
<div class="input-append">
<input class="i18n inputPassword span4" type="password" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
<input type="password" class="i18n inputPassword span4" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: password" data-i18n-placeholder="LOGIN/LABEL_PASSWORD" />
<span class="add-on">
<i class="icon-key"></i>
@ -47,7 +47,7 @@
</div>
<div class="control-group" data-bind="visible: additionalCode.visibility(), css: {'error': additionalCode.error}">
<div class="input-append">
<input class="i18n inputAdditionalCode span4" type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
<input type="text" class="i18n inputAdditionalCode span4" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: additionalCode, hasFocus: additionalCode.focused" data-i18n-placeholder="LOGIN/LABEL_VERIFICATION_CODE" />
<span class="add-on">
<i class="icon-key"></i>
@ -75,37 +75,37 @@
<span class="i18n" data-i18n-text="LOGIN/LABEL_SIGN_ME"></span>
</label>
<div class="pull-right">
<div class="btn-group" data-bind="visible: socialLoginEnabled() || allowLanguagesOnLogin()">
<a class="btn dropdown-toggle buttonLoginMore" data-toggle="dropdown">
<div class="btn-group dropdown" data-bind="registrateBootstrapDropdown: true, visible: socialLoginEnabled() || allowLanguagesOnLogin()">
<a id="login-more-dropdown-id" href="#" tabindex="-1" class="btn dropdown-toggle buttonLoginMore" data-toggle="dropdown">
<i data-bind="css: langRequest() ? 'icon-spinner animated' : 'icon-list'"></i>
</a>
<ul class="dropdown-menu g-ui-menu">
<ul class="dropdown-menu g-ui-menu" tabindex="-1" role="menu" aria-labelledby="login-more-dropdown-id">
{{INCLUDE/MenuDropdownTop/PLACE}}
<li class="e-item" data-bind="visible: facebookLoginEnabled">
<a class="e-link" data-bind="command: facebookCommand">
<li class="e-item" role="presentation" data-bind="visible: facebookLoginEnabled">
<a class="e-link menuitem" href="#" tabindex="-1" data-bind="command: facebookCommand">
<i class="icon-facebook-alt"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="LOGIN/TITLE_SIGN_IN_FACEBOOK"></span>
</a>
</li>
<li class="e-item" data-bind="visible: googleLoginEnabled">
<a class="e-link" data-bind="command: googleCommand">
<li class="e-item" role="presentation" data-bind="visible: googleLoginEnabled">
<a class="e-link menuitem" href="#" tabindex="-1" data-bind="command: googleCommand">
<i class="icon-google"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="LOGIN/TITLE_SIGN_IN_GOOGLE"></span>
</a>
</li>
<li class="e-item" data-bind="visible: twitterLoginEnabled">
<a class="e-link" data-bind="command: twitterCommand">
<li class="e-item" role="presentation" data-bind="visible: twitterLoginEnabled">
<a class="e-link menuitem" href="#" tabindex="-1" data-bind="command: twitterCommand">
<i class="icon-twitter"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="LOGIN/TITLE_SIGN_IN_TWITTER"></span>
</a>
</li>
{{INCLUDE/MenuDropdownMiddle/PLACE}}
<li class="divider" data-bind="visible: socialLoginEnabled() && allowLanguagesOnLogin()"></li>
<li class="e-item" data-bind="visible: allowLanguagesOnLogin">
<a class="e-link" data-bind="click: selectLanguage">
<li class="divider" role="presentation" data-bind="visible: socialLoginEnabled() && allowLanguagesOnLogin()"></li>
<li class="e-item" role="presentation" data-bind="visible: allowLanguagesOnLogin">
<a class="e-link menuitem" href="#" tabindex="-1" data-bind="click: selectLanguage">
<label class="flag-selector">
<span class="flag-wrapper">
<span data-bind="css: 'flag flag-' + mainLanguage()" style=""></span>

View file

@ -111,7 +111,9 @@
<div class="second-toolbar thm-message-list-top-toolbar">
<div class="form-inline">
<div class="input-append pull-right">
<input class="i18n span4 inputSearch" type="text" tabindex="-1" placeholder="" data-i18n-placeholder="SEARCH/MAIN_INPUT_PLACEHOLDER" data-bind="value: inputProxyMessageListSearch, onEnter: searchEnterAction, hasfocus: inputMessageListSearchFocus" />
<input type="search" class="i18n span4 inputSearch" tabindex="-1"
placeholder="Search" autocorrect="off" autocapitalize="off"
data-i18n-placeholder="SEARCH/MAIN_INPUT_PLACEHOLDER" data-bind="value: inputProxyMessageListSearch, onEnter: searchEnterAction, hasfocus: inputMessageListSearchFocus" />
<a class="btn buttonMoreSearch" data-bind="click: advancedSearchClick">
<span class="caret"></span>
</a>

View file

@ -239,7 +239,9 @@
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="MESSAGE/PGP_ENCRYPTED_MESSAGE_DESC" data-bind="click: function() { decryptPgpEncryptedMessage(message()); }"></span>
&nbsp;&nbsp;
<input type="password" class="i18n span3 inputPgpPassword" style="margin-bottom: 0" data-i18n-placeholder="MESSAGE/PGP_PASSWORD_INPUT_PLACEHOLDER" data-bind="value: viewPgpPassword, onEnter: function() { decryptPgpEncryptedMessage(message()); }" />
<input type="password" class="i18n span3 inputPgpPassword"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
style="margin-bottom: 0" data-i18n-placeholder="MESSAGE/PGP_PASSWORD_INPUT_PLACEHOLDER" data-bind="value: viewPgpPassword, onEnter: function() { decryptPgpEncryptedMessage(message()); }" />
</div>
<div class="attachmentsPlace" data-bind="visible: message() && message().hasVisibleAttachments()">
<ul class="attachmentList" data-bind="foreach: message() ? message().attachments() : []">

View file

@ -23,7 +23,8 @@
Subscription Key
</label>
<div class="controls ">
<input type="text" class="span5" data-bind="visible: !activateProcess() && !activationSuccessed(), value: key, valueUpdate: 'afterkeydown', hasFocus: key.focus"></input>
<input type="text" class="span5" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="visible: !activateProcess() && !activationSuccessed(), value: key, valueUpdate: 'afterkeydown', hasFocus: key.focus"></input>
<h4 class="help-inline" style="margin-top: 5px;" data-bind="text: key, visible: activateProcess() || activationSuccessed()"></h4>
<div class="help-block" data-bind="text: activateText"></div>
</div>

View file

@ -17,21 +17,21 @@
<div class="control-group" data-bind="css: {'error': emailError}">
<label class="i18n control-label" data-i18n-text="LOGIN/LABEL_EMAIL"></label>
<div class="controls">
<input class="inputEmail input-large" type="email" autocomplete="off"
<input type="email" class="inputEmail input-large" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: email, valueUpdate: 'afterkeydown', onEnter: addAccountCommand, hasfocus: emailFocus" />
</div>
</div>
<div class="control-group" data-bind="css: {'error': loginError}, visible: allowCustomLogin()">
<label class="i18n control-label" data-i18n-text="LOGIN/LABEL_LOGIN"></label>
<div class="controls">
<input class="inputLogin input-large" type="text" autocomplete="off"
<input type="email" class="inputLogin input-large" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: login, onEnter: addAccountCommand, hasfocus: loginFocus" />
</div>
</div>
<div class="control-group" data-bind="css: {'error': passwordError}">
<label class="i18n control-label" data-i18n-text="LOGIN/LABEL_PASSWORD"></label>
<div class="controls">
<input class="inputPassword input-large" type="password" autocomplete="off"
<input type="password" class="inputPassword input-large" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: password, onEnter: addAccountCommand" />
</div>
</div>

View file

@ -16,7 +16,8 @@
<span class="i18n" data-i18n-text="SEARCH/LABEL_ADV_FROM"></span>
</label>
<div class="controls">
<input class="uiInput inputFrom" type="text" data-bind="value: from, onEnter: searchCommand, hasfocus: fromFocus, onEsc: cancelCommand" />
<input type="text" class="uiInput inputFrom" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: from, onEnter: searchCommand, hasfocus: fromFocus, onEsc: cancelCommand" />
</div>
</div>
<div class="control-group">
@ -24,7 +25,8 @@
<span class="i18n" data-i18n-text="SEARCH/LABEL_ADV_TO"></span>
</label>
<div class="controls">
<input class="uiInput inputFrom" type="text" data-bind="value: to, onEnter: searchCommand, onEsc: cancelCommand" />
<input type="text" class="uiInput inputFrom" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: to, onEnter: searchCommand, onEsc: cancelCommand" />
</div>
</div>
<div class="control-group">
@ -32,7 +34,8 @@
<span class="i18n" data-i18n-text="SEARCH/LABEL_ADV_SUBJECT"></span>
</label>
<div class="controls">
<input class="uiInput inputFrom" type="text" data-bind="value: subject, onEnter: searchCommand, onEsc: cancelCommand" />
<input type="text" class="uiInput inputFrom" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: subject, onEnter: searchCommand, onEsc: cancelCommand" />
</div>
</div>
<div class="control-group">
@ -40,7 +43,8 @@
<span class="i18n" data-i18n-text="SEARCH/LABEL_ADV_TEXT"></span>
</label>
<div class="controls">
<input class="uiInput inputFrom" type="text" data-bind="value: text, onEnter: searchCommand, onEsc: cancelCommand" />
<input type="text" class="uiInput inputFrom" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: text, onEnter: searchCommand, onEsc: cancelCommand" />
</div>
</div>
</div>

View file

@ -57,7 +57,7 @@
</label>
</div>
<div class="e-cell e-value">
<input type="text" data-bind="emailsTags: to" />
<input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" data-bind="emailsTags: to" />
<span class="help-block error-desc" data-bind="visible: emptyToError">
<span class="i18n" data-i18n-text="COMPOSE/EMPTY_TO_ERROR_DESC"></span>
</span>
@ -68,7 +68,7 @@
<span class="i18n" data-i18n-text="COMPOSE/TITLE_CC"></span>
</div>
<div class="e-cell e-value">
<input type="text" data-bind="emailsTags: cc" />
<input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" data-bind="emailsTags: cc" />
</div>
</div>
<div class="e-row bcc-row" data-bind="visible: showCcAndBcc">
@ -76,7 +76,7 @@
<span class="i18n" data-i18n-text="COMPOSE/TITLE_BCC"></span>
</div>
<div class="e-cell e-value">
<input type="text" data-bind="emailsTags: bcc" />
<input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" data-bind="emailsTags: bcc" />
</div>
</div>
<div class="e-row reply-to-row" data-bind="visible: false">
@ -84,7 +84,7 @@
<span class="i18n" data-i18n-text="COMPOSE/TITLE_REPLY_TO"></span>
</div>
<div class="e-cell e-value">
<input type="text" data-bind="emailsTags: replyTo" />
<input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" data-bind="emailsTags: replyTo" />
</div>
</div>
<div class="e-row">
@ -92,7 +92,7 @@
<span class="i18n" data-i18n-text="COMPOSE/TITLE_SUBJECT"></span>
</div>
<div class="e-cell e-value">
<input type="text" size="70" data-bind="value: subject, valueUpdate: 'afterkeydown'" />
<input type="text" size="70" autocomplete="off" data-bind="value: subject, valueUpdate: 'afterkeydown'" />
</div>
</div>
<div class="e-row">

View file

@ -30,7 +30,7 @@
<div class="control-group">
<label class="i18n control-label" data-i18n-text="POPUPS_COMPOSE_OPEN_PGP/LABEL_PASSWORD"></label>
<div class="controls">
<input class="inputPassword input-large" type="password" autocomplete="off"
<input type="password" class="inputPassword input-large" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: password, hasfocus: password.focus, onEnter: doCommand" />
</div>
</div>

View file

@ -67,7 +67,8 @@
</div>
<div class="modal-body" style="position: relative">
<div class="b-list-toopbar">
<input class="i18n span3 e-search" type="text" placeholder="Search" data-i18n-placeholder="CONTACTS/SEARCH_INPUT_PLACEHOLDER" data-bind="value: search" />
<input type="search" class="i18n span3 e-search" placeholder="Search" autocorrect="off" autocapitalize="off"
data-i18n-placeholder="CONTACTS/SEARCH_INPUT_PLACEHOLDER" data-bind="value: search" />
</div>
<div class="b-list-content g-ui-user-select-none" data-bind="nano: true, css: {'hideContactListCheckbox': !useCheckboxesInList()}">
<div class="content g-scrollbox">
@ -127,7 +128,9 @@
<div class="controls fix-width" data-bind="foreach: viewPropertiesNames">
<div class="property-line">
<span class="contactValueStatic" data-bind="text: value" />
<input type="text" class="contactValueInput" placeholder="" data-bind="value: value, hasFocus: focused, valueUpdate: 'keyup', attr: {'placeholder': placeholderValue}" />
<input type="text" class="contactValueInput" placeholder=""
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: value, hasFocus: focused, valueUpdate: 'keyup', attr: {'placeholder': placeholderValue}" />
</div>
</div>
</div>
@ -139,7 +142,9 @@
<div data-bind="foreach: viewPropertiesEmails">
<div class="property-line">
<span class="contactValueStatic" data-bind="text: value" />
<input type="email" class="contactValueInput" data-bind="value: value, hasFocus: focused, valueUpdate: 'keyup'" />
<input type="email" class="contactValueInput"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: value, hasFocus: focused, valueUpdate: 'keyup'" />
</div>
</div>
<a href="javascript:void(0);" class="g-ui-link add-link i18n" data-bind="visible: !viewReadOnly(), click: addNewEmail" data-i18n-text="CONTACTS/LINK_ADD_EMAIL"></a>
@ -153,7 +158,9 @@
<div data-bind="foreach: viewPropertiesPhones">
<div class="property-line">
<span class="contactValueStatic" data-bind="text: value" />
<input type="text" class="contactValueInput" data-bind="value: value, hasFocus: focused, valueUpdate: 'keyup'" />
<input type="text" class="contactValueInput"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: value, hasFocus: focused, valueUpdate: 'keyup'" />
</div>
</div>
<a href="javascript:void(0);" class="g-ui-link add-link i18n" data-bind="visible: !viewReadOnly(), click: addNewPhone" data-i18n-text="CONTACTS/LINK_ADD_PHONE"></a>

View file

@ -10,7 +10,8 @@
<div class="span8">
Name <span style="color: #aaa">(wildcard supported)</span>
<br />
<input type="text" data-bind="value: name, hasfocus: name.focused, valueUpdate: 'afterkeydown'" />
<input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: name, hasfocus: name.focused, valueUpdate: 'afterkeydown'" />
<span class="error-desc" data-bind="text: savingError"></span>
</div>
</div>
@ -22,12 +23,14 @@
</div>
Server
<br />
<input type="text" data-bind="value: imapServer, valueUpdate: 'afterkeydown', hasfocus: imapServerFocus" />
<input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: imapServer, valueUpdate: 'afterkeydown', hasfocus: imapServerFocus" />
<br />
<br />
Port
<br />
<input type="text" data-bind="value: imapPort, valueUpdate: 'afterkeydown'" />
<input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: imapPort, valueUpdate: 'afterkeydown'" />
<br />
<br />
Secure
@ -51,12 +54,14 @@
</div>
Server
<br />
<input type="text" data-bind="value: smtpServer, valueUpdate: 'afterkeydown', hasfocus: smtpServerFocus" />
<input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: smtpServer, valueUpdate: 'afterkeydown', hasfocus: smtpServerFocus" />
<br />
<br />
Port
<br />
<input type="text" data-bind="value: smtpPort, valueUpdate: 'afterkeydown'" />
<input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: smtpPort, valueUpdate: 'afterkeydown'" />
<br />
<br />
Secure

View file

@ -15,7 +15,8 @@
<span class="i18n" data-i18n-text="POPUPS_CREATE_FOLDER/LABEL_NAME"></span>
</label>
<div class="controls">
<input class="uiInput inputName" type="text" data-bind="value: folderName, hasfocus: folderName.focused, valueUpdate: 'afterkeydown', onEnter: createFolder" />
<input type="text" class="uiInput inputName" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: folderName, hasfocus: folderName.focused, valueUpdate: 'afterkeydown', onEnter: createFolder" />
</div>
</div>
<div class="control-group">

View file

@ -12,21 +12,24 @@
<div class="control-group" data-bind="css: {'error': email.error}">
<label class="i18n control-label" data-i18n-text="POPUPS_GENERATE_OPEN_PGP_KEYS/LABEL_EMAIL"></label>
<div class="controls">
<input class="inputEmail input-large" type="email" autocomplete="off"
<input type="email" class="inputEmail input-large"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: email, hasfocus: email.focus" />
</div>
</div>
<div class="control-group">
<label class="i18n control-label" data-i18n-text="POPUPS_GENERATE_OPEN_PGP_KEYS/LABEL_NAME"></label>
<div class="controls">
<input class="inputName input-large" type="text" autocomplete="off"
<input type="text" class="inputName input-large"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: name" />
</div>
</div>
<div class="control-group">
<label class="i18n control-label" data-i18n-text="POPUPS_GENERATE_OPEN_PGP_KEYS/LABEL_PASSWORD"></label>
<div class="controls">
<input class="inputPassword input-large" type="password" autocomplete="off"
<input type="password" class="inputPassword input-large"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: password" />
</div>
</div>

View file

@ -17,7 +17,8 @@
<div class="control-group" data-bind="visible: !owner(), css: {'error': email.hasError}">
<label class="i18n control-label" data-i18n-text="POPUPS_IDENTITIES/LABEL_EMAIL"></label>
<div class="controls">
<input class="inputEmail input-large" type="email" autocomplete="off"
<input type="email" class="inputEmail input-large"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: email, onEnter: addOrEditIdentityCommand, hasfocus: email.focused" />
</div>
</div>
@ -30,21 +31,24 @@
<div class="control-group">
<label class="i18n control-label" data-i18n-text="POPUPS_IDENTITIES/LABEL_NAME"></label>
<div class="controls">
<input class="inputName input-large" type="text" autocomplete="off"
<input type="text" class="inputName input-large"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: name, onEnter: addOrEditIdentityCommand, hasfocus: name.focused" />
</div>
</div>
<div class="control-group" data-bind="css: {'error': replyTo.hasError}" style="display: none">
<label class="i18n control-label" data-i18n-text="POPUPS_IDENTITIES/LABEL_REPLY_TO"></label>
<div class="controls">
<input class="inputReplyTo input-large" type="text" autocomplete="off"
<input type="text" class="inputReplyTo input-large"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: replyTo, onEnter: addOrEditIdentityCommand, hasfocus: replyTo.focused" />
</div>
</div>
<div class="control-group" data-bind="css: {'error': bcc.hasError}" style="display: none">
<label class="i18n control-label" data-i18n-text="POPUPS_IDENTITIES/LABEL_BCC"></label>
<div class="controls">
<input class="inputBcc input-large" type="text" autocomplete="off"
<input type="text" class="inputBcc input-large"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: bcc, onEnter: addOrEditIdentityCommand, hasfocus: bcc.focused" />
</div>
</div>

View file

@ -15,7 +15,9 @@
<span class="i18n" data-i18n-text="POPUPS_TWO_FACTOR_TEST/LABEL_CODE"></span>
</label>
<div class="controls">
<input class="uiInput inputName" type="text" data-bind="value: code, hasfocus: code.focused, valueUpdate: 'afterkeydown', onEnter: testCode" />
<input type="text" class="uiInput inputName"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: code, hasfocus: code.focused, valueUpdate: 'afterkeydown', onEnter: testCode" />
</div>
</div>
</div>

View file

@ -10,7 +10,8 @@
<span class="i18n" data-i18n-text="SETTINGS_CHANGE_PASSWORD/LABEL_CURRENT_PASSWORD"></span>
</label>
<div class="controls">
<input type="password" data-bind="value: currentPassword, valueUpdate: 'afterkeydown'" />
<input type="password" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: currentPassword, valueUpdate: 'afterkeydown'" />
</div>
</div>
<div class="control-group" data-bind="css: {'error': passwordMismatch}">
@ -18,7 +19,8 @@
<span class="i18n" data-i18n-text="SETTINGS_CHANGE_PASSWORD/LABEL_NEW_PASSWORD"></span>
</label>
<div class="controls">
<input type="password" data-bind="value: newPassword, valueUpdate: 'afterkeydown'" />
<input type="password" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: newPassword, valueUpdate: 'afterkeydown'" />
</div>
</div>
<div class="control-group" data-bind="css: {'error': passwordMismatch}">
@ -26,7 +28,8 @@
<span class="i18n" data-i18n-text="SETTINGS_CHANGE_PASSWORD/LABEL_REPEAT_PASSWORD"></span>
</label>
<div class="controls">
<input type="password" data-bind="value: newPassword2, valueUpdate: 'afterkeydown'" />
<input type="password" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: newPassword2, valueUpdate: 'afterkeydown'" />
</div>
</div>
<div class="control-group">

View file

@ -32,7 +32,9 @@
<span class="i18n" data-i18n-text="SETTINGS_CONTACTS/LABEL_CONTACTS_SYNC_AB_URL"></span>
</label>
<div class="controls">
<input class="input-xxlarge" type="text" data-bind="value: contactsSyncUrl" placeholder="https://" />
<input type="text" class="input-xxlarge"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: contactsSyncUrl" placeholder="https://" />
</div>
</div>
<div class="control-group">
@ -40,7 +42,8 @@
<span class="i18n" data-i18n-text="SETTINGS_CONTACTS/LABEL_CONTACTS_SYNC_USER"></span>
</label>
<div class="controls">
<input type="text" data-bind="value: contactsSyncUser" />
<input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: contactsSyncUser" />
</div>
</div>
<div class="control-group">
@ -48,7 +51,8 @@
<span class="i18n" data-i18n-text="SETTINGS_CONTACTS/LABEL_CONTACTS_SYNC_PASSWORD"></span>
</label>
<div class="controls">
<input type="password" data-bind="value: contactsSyncPass" />
<input type="password" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: contactsSyncPass" />
</div>
</div>

View file

@ -4,7 +4,10 @@
<span class="folder-name" data-bind="text: name, visible: !edited(), css: { 'e-action': canBeEdited, 'can-be-edited': canBeEdited }, click: function (oFolder) { $root.folderForEdit(oFolder); }"></span>
&nbsp;
<span class="folder-system-name" data-bind="text: manageFolderSystemName, visible: isSystemFolder"></span>
<input type="text" class="folder-name-input" data-bind="value: nameForEdit, visible: edited, hasfocus: edited, onEnter: function () { $root.folderEditOnEnter($data); }, onEsc: function () { $root.folderEditOnEsc($data); }" />
<input type="text" class="folder-name-input"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: nameForEdit, visible: edited, hasfocus: edited, onEnter: function () { $root.folderEditOnEnter($data); }, onEsc: function () { $root.folderEditOnEsc($data); }" />
<a class="btn btn-small btn-small-small btn-danger pull-right button-delete button-delete-transitions" data-bind="css: {'delete-access': deleteAccess()}, click: function() { $root.deleteFolder($data); }">
<span class="i18n" data-i18n-text="SETTINGS_FOLDERS/DELETING_ASK"></span>
</a>

View file

@ -23,13 +23,13 @@
</label>
<div class="controls">
<label for="richTextEditorTypeID1">
<input id="richTextEditorTypeID1" type="radio" name="richTextEditorType" value="Html" data-bind="checked: editorDefaultType" style="position: absolute; left: -10000px" />
<input type="radio" id="richTextEditorTypeID1" name="richTextEditorType" value="Html" data-bind="checked: editorDefaultType" style="position: absolute; left: -10000px" />
<i data-bind="css: 'Html' === editorDefaultType() ? ' icon-radio-checked' : 'icon-radio-unchecked'"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="SETTINGS_GENERAL/LABEL_EDITOR_HTML_AS_DEFAULT"></span>
</label>
<label for="richTextEditorTypeID2">
<input id="richTextEditorTypeID2" type="radio" name="richTextEditorType" value="Plain" data-bind="checked: editorDefaultType" style="position: absolute; left: -10000px" />
<input type="radio" id="richTextEditorTypeID2" name="richTextEditorType" value="Plain" data-bind="checked: editorDefaultType" style="position: absolute; left: -10000px" />
<i data-bind="css: 'Plain' === editorDefaultType() ? ' icon-radio-checked' : 'icon-radio-unchecked'"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="SETTINGS_GENERAL/LABEL_EDITOR_PLAIN_AS_DEFAULT"></span>

View file

@ -8,7 +8,9 @@
<span class="i18n" data-i18n-text="SETTINGS_IDENTITIES/LABEL_DISPLAY_NAME"></span>
</label>
<div class="controls">
<input class="input-xlarge" type="text" data-bind="value: displayName, saveTrigger: displayNameTrigger" />
<input type="text" class="input-xlarge"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: displayName, saveTrigger: displayNameTrigger" />
<div data-bind="saveTrigger: displayNameTrigger"></div>
</div>
</div>
@ -17,7 +19,9 @@
<span class="i18n" data-i18n-text="SETTINGS_IDENTITIES/LABEL_REPLY_TO"></span>
</label>
<div class="controls">
<input class="input-xlarge" type="text" data-bind="value: replyTo" />
<input type="text" class="input-xlarge"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: replyTo" />
</div>
</div>
<div class="control-group">

View file

@ -8,7 +8,9 @@
<span class="i18n" data-i18n-text="SETTINGS_IDENTITY/LABEL_DISPLAY_NAME"></span>
</label>
<div class="controls">
<input class="input-xlarge" type="text" data-bind="value: displayName, saveTrigger: displayNameTrigger" />
<input type="text" class="input-xlarge"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: displayName, saveTrigger: displayNameTrigger" />
<div data-bind="saveTrigger: displayNameTrigger"></div>
</div>
</div>
@ -17,7 +19,9 @@
<span class="i18n" data-i18n-text="SETTINGS_IDENTITY/LABEL_REPLY_TO"></span>
</label>
<div class="controls">
<input class="input-xlarge" type="text" data-bind="value: replyTo" />
<input type="text" class="input-xlarge"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: replyTo" />
</div>
</div>
<div class="control-group">

View file

@ -23,13 +23,13 @@
</label>
<div class="controls">
<label for="customThemeTypeID1">
<input id="customThemeTypeID1" type="radio" name="customThemeType" value="Light" data-bind="checked: customThemeType" style="position: absolute; left: -10000px" />
<input type="radio" id="customThemeTypeID1" name="customThemeType" value="Light" data-bind="checked: customThemeType" style="position: absolute; left: -10000px" />
<i data-bind="css: 'Light' === customThemeType() ? ' icon-radio-checked' : 'icon-radio-unchecked'"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="SETTINGS_THEMES/LABEL_CUSTOM_TYPE_LIGHT"></span>
</label>
<label for="customThemeTypeID2">
<input id="customThemeTypeID2" type="radio" name="customThemeType" value="Dark" data-bind="checked: customThemeType" style="position: absolute; left: -10000px" />
<input type="radio" id="customThemeTypeID2" name="customThemeType" value="Dark" data-bind="checked: customThemeType" style="position: absolute; left: -10000px" />
<i data-bind="css: 'Dark' === customThemeType() ? ' icon-radio-checked' : 'icon-radio-unchecked'"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="SETTINGS_THEMES/LABEL_CUSTOM_TYPE_DARK"></span>

View file

@ -48,7 +48,13 @@
<span class="i18n" data-i18n-text="TOP_TOOLBAR/BUTTON_SETTINGS"></span>
</a>
</li>
<li class="e-item" role="presentation">
<a class="e-link menuitem" href="#" tabindex="-1" data-bind="click: settingsHelp">
<i class="icon-help"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="TOP_TOOLBAR/BUTTON_HELP"></span>
</a>
</li>
<li class="divider" role="presentation"></li>
<li class="e-item" role="presentation">
<a class="e-link menuitem" href="#" tabindex="-1" data-bind="click: logoutClick">

View file

@ -13,6 +13,7 @@ TITLE_SIGN_IN_TWITTER = "Mit Twitter anmelden"
[TOP_TOOLBAR]
BUTTON_ADD_ACCOUNT = "Konto hinzufügen"
BUTTON_SETTINGS = "Einstellungen"
BUTTON_HELP = "Help"
BUTTON_LOGOUT = "Abmelden"
[SEARCH]

View file

@ -13,6 +13,7 @@ TITLE_SIGN_IN_TWITTER = "Sign In using Twitter"
[TOP_TOOLBAR]
BUTTON_ADD_ACCOUNT = "Add Account"
BUTTON_SETTINGS = "Settings"
BUTTON_HELP = "Help"
BUTTON_LOGOUT = "Logout"
[SEARCH]

View file

@ -13,6 +13,7 @@ TITLE_SIGN_IN_TWITTER = "Ingresar usando Twitter"
[TOP_TOOLBAR]
BUTTON_ADD_ACCOUNT = "Añadir cuenta"
BUTTON_SETTINGS = "Configuraciones"
BUTTON_HELP = "Help"
BUTTON_LOGOUT = "Salir"
[SEARCH]

View file

@ -13,6 +13,7 @@ TITLE_SIGN_IN_TWITTER = "Se connecter avec Twitter"
[TOP_TOOLBAR]
BUTTON_ADD_ACCOUNT = "Ajouter un compte"
BUTTON_SETTINGS = "Paramètres"
BUTTON_HELP = "Help"
BUTTON_LOGOUT = "Déconnexion"
[SEARCH]

View file

@ -13,6 +13,7 @@ TITLE_SIGN_IN_TWITTER = "Belépés Twitter használatával"
[TOP_TOOLBAR]
BUTTON_ADD_ACCOUNT = "Új fiók"
BUTTON_SETTINGS = "Beállítások"
BUTTON_HELP = "Help"
BUTTON_LOGOUT = "Kilépés"
[SEARCH]

View file

@ -13,6 +13,7 @@ TITLE_SIGN_IN_TWITTER = "Innskráning með Twitter"
[TOP_TOOLBAR]
BUTTON_ADD_ACCOUNT = "Bæta við aðgangi"
BUTTON_SETTINGS = "Stillingar"
BUTTON_HELP = "Help"
BUTTON_LOGOUT = "Útskrá"
[SEARCH]

View file

@ -13,6 +13,7 @@ TITLE_SIGN_IN_TWITTER = "Accedi usando Twitter"
[TOP_TOOLBAR]
BUTTON_ADD_ACCOUNT = "Aggiungi account"
BUTTON_SETTINGS = "Impostazioni"
BUTTON_HELP = "Help"
BUTTON_LOGOUT = "Esci"
[SEARCH]

View file

@ -13,6 +13,7 @@ TITLE_SIGN_IN_TWITTER = "Twitterアカウントでログイン"
[TOP_TOOLBAR]
BUTTON_ADD_ACCOUNT = "アカウントを追加"
BUTTON_SETTINGS = "アカウント設定"
BUTTON_HELP = "Help"
BUTTON_LOGOUT = "ログアウト"
[SEARCH]

View file

@ -13,6 +13,7 @@ TITLE_SIGN_IN_TWITTER = "트위터 계정으로 로그인"
[TOP_TOOLBAR]
BUTTON_ADD_ACCOUNT = "계정 추가"
BUTTON_SETTINGS = "설정"
BUTTON_HELP = "Help"
BUTTON_LOGOUT = "로그아웃"
[SEARCH]

View file

@ -13,6 +13,7 @@ TITLE_SIGN_IN_TWITTER = "Ielogoties izmantojot Twitter"
[TOP_TOOLBAR]
BUTTON_ADD_ACCOUNT = "Pievienot kontu"
BUTTON_SETTINGS = "Uzstādijumi"
BUTTON_HELP = "Help"
BUTTON_LOGOUT = "Izlogoties"
[SEARCH]

View file

@ -13,6 +13,7 @@ TITLE_SIGN_IN_TWITTER = "Aanmelden met Twitter"
[TOP_TOOLBAR]
BUTTON_ADD_ACCOUNT = "Account toevoegen"
BUTTON_SETTINGS = "Instellingen"
BUTTON_HELP = "Help"
BUTTON_LOGOUT = "Afmelden"
[SEARCH]

View file

@ -13,6 +13,7 @@ TITLE_SIGN_IN_TWITTER = "Logg inn MED Twitter"
[TOP_TOOLBAR]
BUTTON_ADD_ACCOUNT = "Legg til konto"
BUTTON_SETTINGS = "Innstillinger"
BUTTON_HELP = "Help"
BUTTON_LOGOUT = "Logg ut"
[SEARCH]

View file

@ -13,6 +13,7 @@ TITLE_SIGN_IN_TWITTER = "Zaloguj się przez Twitter"
[TOP_TOOLBAR]
BUTTON_ADD_ACCOUNT = "Dodaj konto"
BUTTON_SETTINGS = "Ustawienia"
BUTTON_HELP = "Help"
BUTTON_LOGOUT = "Wyloguj się"
[SEARCH]

View file

@ -13,6 +13,7 @@ TITLE_SIGN_IN_TWITTER = "Entre com a conta do Twitter"
[TOP_TOOLBAR]
BUTTON_ADD_ACCOUNT = "Adicionar Conta"
BUTTON_SETTINGS = "Configurações"
BUTTON_HELP = "Help"
BUTTON_LOGOUT = "Sair"
[SEARCH]

View file

@ -13,6 +13,7 @@ TITLE_SIGN_IN_TWITTER = "Entre com a conta do Twitter"
[TOP_TOOLBAR]
BUTTON_ADD_ACCOUNT = "Adicionar Conta"
BUTTON_SETTINGS = "Configurações"
BUTTON_HELP = "Help"
BUTTON_LOGOUT = "Sair"
[SEARCH]

View file

@ -13,6 +13,7 @@ TITLE_SIGN_IN_TWITTER = "Войти, используя Twitter"
[TOP_TOOLBAR]
BUTTON_ADD_ACCOUNT = "Adaugă un cont"
BUTTON_SETTINGS = "Opțiuni"
BUTTON_HELP = "Help"
BUTTON_LOGOUT = "Deconectare"
[SEARCH]

View file

@ -13,6 +13,7 @@ TITLE_SIGN_IN_TWITTER = "Войти, используя Twitter"
[TOP_TOOLBAR]
BUTTON_ADD_ACCOUNT = "Добавить ещё аккаунт"
BUTTON_SETTINGS = "Настройки"
BUTTON_HELP = "Помощь"
BUTTON_LOGOUT = "Выйти"
[SEARCH]

View file

@ -13,6 +13,7 @@ TITLE_SIGN_IN_TWITTER = "Prihlásiť pomocou Twitter"
[TOP_TOOLBAR]
BUTTON_ADD_ACCOUNT = "Pridať Účet"
BUTTON_SETTINGS = "Nastavenia"
BUTTON_HELP = "Help"
BUTTON_LOGOUT = "Odhlásiť"
[SEARCH]

View file

@ -13,6 +13,7 @@ TITLE_SIGN_IN_TWITTER = "Sign In using Twitter"
[TOP_TOOLBAR]
BUTTON_ADD_ACCOUNT = "添加账户"
BUTTON_SETTINGS = "设置"
BUTTON_HELP = "Help"
BUTTON_LOGOUT = "注销"
[SEARCH]

View file

@ -1504,6 +1504,9 @@ table {
.icon-export:before {
content: "\e06a";
}
.icon-help:before {
content: "\e06b";
}
/** initial setup **/
.nano {

File diff suppressed because one or more lines are too long

View file

@ -114,4 +114,5 @@
<glyph unicode="&#57448;" d="M341 247c0 3 0 5-2 7-2 1-4 2-6 2l-60 0 0 94c0 2-1 4-2 6-2 2-4 2-6 2l-52 0c-2 0-4 0-6-2-1-2-2-4-2-6l0-94-60 0c-2 0-4-1-6-3-2-1-2-3-2-6 0-2 0-4 2-6l94-94c1-1 3-2 6-2 2 0 4 1 6 2l94 94c1 2 2 4 2 6z m171-59c0-29-10-53-30-73-20-20-44-30-72-30l-291 0c-32 0-61 12-84 35-23 24-35 52-35 85 0 23 6 44 19 64 12 19 29 34 50 44-1 5-1 9-1 11 0 38 14 70 40 97 27 26 59 40 97 40 28 0 53-8 76-23 23-16 40-36 50-62 13 11 28 17 44 17 19 0 35-7 49-20 13-14 20-30 20-49 0-13-4-26-11-37 23-5 42-17 57-36 15-18 22-39 22-63z"/>
<glyph unicode="&#57449;" d="M375 256c0-5-2-9-6-13l-155-155c-4-4-8-6-13-6-5 0-9 2-13 6-3 3-5 8-5 13l0 82-128 0c-5 0-9 2-13 5-4 4-5 8-5 13l0 110c0 5 1 9 5 13 4 3 8 5 13 5l128 0 0 82c0 5 2 10 5 13 4 4 8 6 13 6 5 0 9-2 13-6l155-155c4-4 6-8 6-13z m100 101l0-202c0-22-8-42-24-58-16-16-35-24-58-24l-91 0c-3 0-5 1-7 3-2 2-2 4-2 6 0 1-1 3-1 6 0 3 0 6 0 8 0 2 1 4 1 6 0 3 1 5 3 6 1 1 3 2 6 2l91 0c13 0 23 4 32 13 9 9 14 20 14 32l0 202c0 12-5 23-14 32-9 9-19 13-32 13l-89 0c0 0-1 0-3 1-2 0-4 0-4 0 0 1 0 1-2 2-1 1-2 2-2 3 0 1 0 2 0 3 0 1-1 3-1 6 0 3 0 6 0 8 0 2 1 4 1 6 0 3 1 5 3 6 1 1 3 2 6 2l91 0c23 0 42-8 58-24 16-16 24-36 24-58z"/>
<glyph unicode="&#57450;" d="M201 101c0-1 0-3 0-6 1-3 1-6 1-8-1-2-1-4-1-6-1-3-2-5-3-6-2-1-4-2-6-2l-91 0c-23 0-42 8-59 24-16 16-24 36-24 58l0 202c0 22 8 42 24 58 17 16 36 24 59 24l91 0c2 0 5-1 6-3 2-2 3-4 3-6 0-1 0-3 0-6 1-3 1-6 1-8-1-2-1-4-1-6-1-3-2-5-3-6-2-1-4-2-6-2l-91 0c-13 0-24-4-33-13-9-9-13-20-13-32l0-202c0-12 4-23 13-32 9-9 20-13 33-13l89 0c0 0 1 0 3-1 2 0 3 0 3 0 0-1 1-1 3-2 1-1 2-2 2-3-1-1 0-2 0-3z m265 155c0-5-2-9-5-13l-156-155c-3-4-7-6-12-6-5 0-10 2-13 6-4 3-6 8-6 13l0 82-128 0c-5 0-9 2-13 5-3 4-5 8-5 13l0 110c0 5 2 9 5 13 4 3 8 5 13 5l128 0 0 82c0 5 2 10 6 13 3 4 8 6 13 6 5 0 9-2 12-6l156-155c3-4 5-8 5-13z"/>
<glyph unicode="&#57451;" d="M253 492c65 0 120-22 167-67 46-45 70-100 72-165 0-65-22-121-68-167-45-47-100-71-165-73-65 0-121 22-167 68-47 45-71 100-72 165-1 65 21 121 67 167 46 47 101 71 166 72m0-31c-32 0-63-8-91-23 0 0 32-53 32-53 19 10 39 14 62 14 23 0 43-4 62-14 0 0 32 53 32 53-30 16-62 23-97 23m-126-267c-10 20-14 41-14 62 0 22 4 43 14 63 0 0-52 32-52 32-16-30-24-62-24-97 1-33 9-64 24-92 0 0 52 32 52 32m132-143c34 2 64 9 91 24 0 0-32 53-32 53-20-10-41-15-62-15-21 0-42 5-62 15 0 0-32-53-32-53 29-16 62-24 97-24m-3 92c31 0 58 11 80 34 22 22 33 48 33 79 0 31-11 58-33 80-22 22-49 33-80 33-31 0-58-11-80-33-22-22-33-49-33-80 0-31 11-57 33-79 22-23 49-34 80-34m129 51c0 0 53-32 53-32 16 33 23 65 23 97 0 33-8 64-23 92 0 0-53-32-53-32 10-20 14-41 14-63 0-21-4-42-14-62"/>
</font></defs></svg>

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Before After
Before After

View file

@ -6224,6 +6224,8 @@ function AdminSecurity()
this.adminLogin = ko.observable(RL.settingsGet('AdminLogin'));
this.adminPassword = ko.observable('');
this.adminPasswordNew = ko.observable('');
this.adminPasswordNew2 = ko.observable('');
this.adminPasswordNewError = ko.observable(false);
this.adminPasswordUpdateError = ko.observable(false);
this.adminPasswordUpdateSuccess = ko.observable(false);
@ -6236,10 +6238,23 @@ function AdminSecurity()
this.adminPasswordNew.subscribe(function () {
this.adminPasswordUpdateError(false);
this.adminPasswordUpdateSuccess(false);
this.adminPasswordNewError(false);
}, this);
this.adminPasswordNew2.subscribe(function () {
this.adminPasswordUpdateError(false);
this.adminPasswordUpdateSuccess(false);
this.adminPasswordNewError(false);
}, this);
this.saveNewAdminPasswordCommand = Utils.createCommand(this, function () {
if (this.adminPasswordNew() !== this.adminPasswordNew2())
{
this.adminPasswordNewError(true);
return false;
}
this.adminPasswordUpdateError(false);
this.adminPasswordUpdateSuccess(false);
@ -6249,7 +6264,7 @@ function AdminSecurity()
});
}, function () {
return '' !== this.adminPassword() && '' !== this.adminPasswordNew();
return '' !== this.adminPassword() && '' !== this.adminPasswordNew() && '' !== this.adminPasswordNew2();
});
this.onNewAdminPasswordResponse = _.bind(this.onNewAdminPasswordResponse, this);
@ -6263,6 +6278,7 @@ AdminSecurity.prototype.onNewAdminPasswordResponse = function (sResult, oData)
{
this.adminPassword('');
this.adminPasswordNew('');
this.adminPasswordNew2('');
this.adminPasswordUpdateSuccess(true);
}
@ -6297,6 +6313,7 @@ AdminSecurity.prototype.onHide = function ()
{
this.adminPassword('');
this.adminPasswordNew('');
this.adminPasswordNew2('');
};
/**

File diff suppressed because one or more lines are too long

View file

@ -11734,6 +11734,11 @@ AbstractSystemDropDownViewModel.prototype.settingsClick = function ()
kn.setHash(RL.link().settings());
};
AbstractSystemDropDownViewModel.prototype.settingsHelp = function ()
{
kn.showScreenPopup(PopupsKeyboardShortcutsHelpViewModel);
};
AbstractSystemDropDownViewModel.prototype.addAccountClick = function ()
{
if (this.allowAddAccount)
@ -11763,6 +11768,15 @@ AbstractSystemDropDownViewModel.prototype.onBuild = function ()
self.accountMenuDropdownTrigger(true);
}
});
// shortcuts help
key('shift+/', [Enums.KeyState.MessageList, Enums.KeyState.MessageView, Enums.KeyState.Settings], function () {
if (self.viewModelVisibility())
{
kn.showScreenPopup(PopupsKeyboardShortcutsHelpViewModel);
return false;
}
});
};
/**
@ -12719,12 +12733,6 @@ MailBoxMessageListViewModel.prototype.initShortcuts = function ()
return false;
});
// shortcuts help
key('shift+/', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () {
kn.showScreenPopup(PopupsKeyboardShortcutsHelpViewModel);
return false;
});
key('shift+f', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () {
self.multyForwardCommand();
return false;

File diff suppressed because one or more lines are too long

Binary file not shown.

View file

@ -114,4 +114,5 @@
<glyph unicode="&#57448;" d="M341 247c0 3 0 5-2 7-2 1-4 2-6 2l-60 0 0 94c0 2-1 4-2 6-2 2-4 2-6 2l-52 0c-2 0-4 0-6-2-1-2-2-4-2-6l0-94-60 0c-2 0-4-1-6-3-2-1-2-3-2-6 0-2 0-4 2-6l94-94c1-1 3-2 6-2 2 0 4 1 6 2l94 94c1 2 2 4 2 6z m171-59c0-29-10-53-30-73-20-20-44-30-72-30l-291 0c-32 0-61 12-84 35-23 24-35 52-35 85 0 23 6 44 19 64 12 19 29 34 50 44-1 5-1 9-1 11 0 38 14 70 40 97 27 26 59 40 97 40 28 0 53-8 76-23 23-16 40-36 50-62 13 11 28 17 44 17 19 0 35-7 49-20 13-14 20-30 20-49 0-13-4-26-11-37 23-5 42-17 57-36 15-18 22-39 22-63z"/>
<glyph unicode="&#57449;" d="M375 256c0-5-2-9-6-13l-155-155c-4-4-8-6-13-6-5 0-9 2-13 6-3 3-5 8-5 13l0 82-128 0c-5 0-9 2-13 5-4 4-5 8-5 13l0 110c0 5 1 9 5 13 4 3 8 5 13 5l128 0 0 82c0 5 2 10 5 13 4 4 8 6 13 6 5 0 9-2 13-6l155-155c4-4 6-8 6-13z m100 101l0-202c0-22-8-42-24-58-16-16-35-24-58-24l-91 0c-3 0-5 1-7 3-2 2-2 4-2 6 0 1-1 3-1 6 0 3 0 6 0 8 0 2 1 4 1 6 0 3 1 5 3 6 1 1 3 2 6 2l91 0c13 0 23 4 32 13 9 9 14 20 14 32l0 202c0 12-5 23-14 32-9 9-19 13-32 13l-89 0c0 0-1 0-3 1-2 0-4 0-4 0 0 1 0 1-2 2-1 1-2 2-2 3 0 1 0 2 0 3 0 1-1 3-1 6 0 3 0 6 0 8 0 2 1 4 1 6 0 3 1 5 3 6 1 1 3 2 6 2l91 0c23 0 42-8 58-24 16-16 24-36 24-58z"/>
<glyph unicode="&#57450;" d="M201 101c0-1 0-3 0-6 1-3 1-6 1-8-1-2-1-4-1-6-1-3-2-5-3-6-2-1-4-2-6-2l-91 0c-23 0-42 8-59 24-16 16-24 36-24 58l0 202c0 22 8 42 24 58 17 16 36 24 59 24l91 0c2 0 5-1 6-3 2-2 3-4 3-6 0-1 0-3 0-6 1-3 1-6 1-8-1-2-1-4-1-6-1-3-2-5-3-6-2-1-4-2-6-2l-91 0c-13 0-24-4-33-13-9-9-13-20-13-32l0-202c0-12 4-23 13-32 9-9 20-13 33-13l89 0c0 0 1 0 3-1 2 0 3 0 3 0 0-1 1-1 3-2 1-1 2-2 2-3-1-1 0-2 0-3z m265 155c0-5-2-9-5-13l-156-155c-3-4-7-6-12-6-5 0-10 2-13 6-4 3-6 8-6 13l0 82-128 0c-5 0-9 2-13 5-3 4-5 8-5 13l0 110c0 5 2 9 5 13 4 3 8 5 13 5l128 0 0 82c0 5 2 10 6 13 3 4 8 6 13 6 5 0 9-2 12-6l156-155c3-4 5-8 5-13z"/>
<glyph unicode="&#57451;" d="M253 492c65 0 120-22 167-67 46-45 70-100 72-165 0-65-22-121-68-167-45-47-100-71-165-73-65 0-121 22-167 68-47 45-71 100-72 165-1 65 21 121 67 167 46 47 101 71 166 72m0-31c-32 0-63-8-91-23 0 0 32-53 32-53 19 10 39 14 62 14 23 0 43-4 62-14 0 0 32 53 32 53-30 16-62 23-97 23m-126-267c-10 20-14 41-14 62 0 22 4 43 14 63 0 0-52 32-52 32-16-30-24-62-24-97 1-33 9-64 24-92 0 0 52 32 52 32m132-143c34 2 64 9 91 24 0 0-32 53-32 53-20-10-41-15-62-15-21 0-42 5-62 15 0 0-32-53-32-53 29-16 62-24 97-24m-3 92c31 0 58 11 80 34 22 22 33 48 33 79 0 31-11 58-33 80-22 22-49 33-80 33-31 0-58-11-80-33-22-22-33-49-33-80 0-31 11-57 33-79 22-23 49-34 80-34m129 51c0 0 53-32 53-32 16 33 23 65 23 97 0 33-8 64-23 92 0 0-53-32-53-32 10-20 14-41 14-63 0-21-4-42-14-62"/>
</font></defs></svg>

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Before After
Before After

Binary file not shown.

Binary file not shown.

View file

@ -473,6 +473,10 @@ h2{font-size:18px;padding:0 0 21px 5px;margin:45px 0 0 0;text-transform:uppercas
<div data-icon="&#xe06a;" class="icon"></div>
<input type="text" readonly="readonly" value="&amp;#xe06a;">
</li>
<li>
<div data-icon="&#xe06b;" class="icon"></div>
<input type="text" readonly="readonly" value="&amp;#xe06b;">
</li>
</ul>
<h2>CSS mapping</h2>
<ul class="glyphs css-mapping">
@ -904,6 +908,10 @@ h2{font-size:18px;padding:0 0 21px 5px;margin:45px 0 0 0;text-transform:uppercas
<div class="icon icon-export"></div>
<input type="text" readonly="readonly" value="export">
</li>
<li>
<div class="icon icon-help"></div>
<input type="text" readonly="readonly" value="help">
</li>
</ul>
</div><script type="text/javascript">
(function() {

View file

@ -359,3 +359,6 @@
.icon-export:before {
content: "\e06a";
}
.icon-help:before {
content: "\e06b";
}