Privacy/GDPR friendly version (removed: Social, Gravatar, Facebook, Google, Twitter, DropBox, OwnCloud)

Also removed: POP3, OAuth2 and update feature
Added: admin password_hash/password_verify
Requires: PHP 7.3+
Replaced: CRLF with LF
Replaced: pclZip with ZipArchive
This commit is contained in:
djmaze 2020-03-09 17:04:17 +01:00
parent 15ceddc202
commit 2cada68f41
293 changed files with 23728 additions and 85420 deletions

View file

@ -1,33 +1,33 @@
<!DOCTYPE html>
<html class="no-js rl-booted-trigger rl-started-trigger glass" dir="{{BaseDir}}">
<head>
<noscript>
<meta http-equiv="refresh" content="0; URL=./?/NoScript" />
</noscript>
<!--[if lte IE 8]>
<meta http-equiv="refresh" content="0; URL=./?/BadBrowser" />
<![endif]-->
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="viewport" content="{{BaseViewport}}">
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="google" content="notranslate" />
<meta name="robots" content="noindex,nofollow,noodp" />
<meta name="AppBootData" content='{{RainloopBootData}}' id="app-boot-data" />
<script type="text/javascript" data-cfasync="false" src="{{BaseAppPolyfillsScriptLink}}"></script>
{{BaseContentSecurityPolicy}}
<title></title>
{{BaseAppHeadScriptLink}}
{{BaseAppFaviconPngLinkTag}}
{{BaseAppFaviconTouchLinkTag}}
<link type="text/css" rel="stylesheet" href="{{BaseAppMainCssLink}}" />
<link type="text/css" rel="stylesheet" href="{{BaseAppThemeCssLink}}" id="app-theme-link" />
<link rel="manifest" href="{{BaseAppManifestLink}}" />
</head>
<body>
<div id="rl-app"></div>
<div id="rl-check"></div>
{{BaseAppBodyScript}}
<script type="text/javascript" data-cfasync="false" src="{{BaseAppBootScriptLink}}"></script>
</body>
</html>
<!DOCTYPE html>
<html class="no-js rl-booted-trigger rl-started-trigger glass" dir="{{BaseDir}}">
<head>
<noscript>
<meta http-equiv="refresh" content="0; URL=./?/NoScript" />
</noscript>
<!--[if lte IE 8]>
<meta http-equiv="refresh" content="0; URL=./?/BadBrowser" />
<![endif]-->
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="viewport" content="{{BaseViewport}}">
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="google" content="notranslate" />
<meta name="robots" content="noindex,nofollow,noodp" />
<meta name="AppBootData" content='{{RainloopBootData}}' id="app-boot-data" />
<script type="text/javascript" data-cfasync="false" src="{{BaseAppPolyfillsScriptLink}}"></script>
{{BaseContentSecurityPolicy}}
<title></title>
{{BaseAppHeadScriptLink}}
{{BaseAppFaviconPngLinkTag}}
{{BaseAppFaviconTouchLinkTag}}
<link type="text/css" rel="stylesheet" href="{{BaseAppMainCssLink}}" />
<link type="text/css" rel="stylesheet" href="{{BaseAppThemeCssLink}}" id="app-theme-link" />
<link rel="manifest" href="{{BaseAppManifestLink}}" />
</head>
<body>
<div id="rl-app"></div>
<div id="rl-check"></div>
{{BaseAppBodyScript}}
<script type="text/javascript" data-cfasync="false" src="{{BaseAppBootScriptLink}}"></script>
</body>
</html>

View file

@ -1,20 +0,0 @@
<!DOCTYPE html>
<html>
<head>
{{RefreshMeta}}
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="google" content="notranslate" />
<meta name="robots" content="noindex,nofollow,noodp" />
<link type="text/css" rel="stylesheet" href="{{Stylesheet}}" />
<title></title>
</head>
<body>
<div class="social-icon-wrp redirecting">
<div class="social-icon">
<i class="icon-{{Icon}}"></i>
</div>
</div>
{{Script}}
</body>
</html>

View file

@ -1,47 +1,47 @@
<div class="b-login-content">
<div class="loginFormWrapper" data-bind="css: {'afterLoginHide': formHidden}">
<center>
<div class="alert alertError" data-bind="visible: '' !== submitError()">
<button type="button" class="close" data-bind="click: function () { submitError('') }">&times;</button>
<span data-bind="text: submitError"></span>
</div>
<div class="wrapper-parent">
<form class="wrapper submitting-pane loginForm thm-login thm-login-text" action="#/" data-bind="submit: submitForm, css: {'errorAnimated': formError, 'submitting': submitRequest()}">
<div class="controls" data-bind="css: {'error': loginError, 'animated': loginErrorAnimation}">
<div class="input-append">
<input type="text" class="input-block-level inputLogin checkAutocomplete"
name="RainLoopAdminLogin" id="RainLoopAdminLogin"
style="padding-right: 35px;"
autocomplete="username" autocorrect="off" autocapitalize="off" spellcheck="false" data-i18n="[placeholder]LOGIN/LABEL_LOGIN"
data-bind="textInput: login, hasFocus: loginFocus, disable: submitRequest" />
<span class="add-on">
<i class="icon-user"></i>
</span>
</div>
</div>
<div class="controls" data-bind="css: {'error': passwordError, 'animated': passwordErrorAnimation}">
<div class="input-append">
<input type="password" class="input-block-level inputPassword checkAutocomplete"
placeholder="Password" name="RainLoopAdminPassword" id="RainLoopAdminPassword"
style="padding-right: 35px;"
autocomplete="current-password" autocorrect="off" autocapitalize="off" spellcheck="false" data-i18n="[placeholder]LOGIN/LABEL_PASSWORD"
data-bind="textInput: password, disable: submitRequest" />
<span class="add-on" tabindex="-1" data-tooltip-join="left" data-bind="command: submitCommand, tooltip: 'LOGIN/BUTTON_LOGIN'">
<i class="icon-key" data-bind="visible: '' === password()"></i>
<button type="submit" class="btn-submit-icon-wrp" data-bind="visible: '' !== password()">
<i class="icon-right-middle login-submit-icon"></i>
</button>
</span>
</div>
</div>
<div class="controls controls-submit-wrp" data-bind="css: {'display-none': hideSubmitButton}">
<button type="submit" class="btn btn-large btn-block buttonLogin" data-bind="command: submitCommand">
<span data-i18n="LOGIN/BUTTON_LOGIN"></span>
</button>
</div>
</form>
</div>
</center>
</div>
<div class="loginAfter"></div>
<div class="b-login-content">
<div class="loginFormWrapper" data-bind="css: {'afterLoginHide': formHidden}">
<center>
<div class="alert alertError" data-bind="visible: '' !== submitError()">
<button type="button" class="close" data-bind="click: function () { submitError('') }">&times;</button>
<span data-bind="text: submitError"></span>
</div>
<div class="wrapper-parent">
<form class="wrapper submitting-pane loginForm thm-login thm-login-text" action="#/" data-bind="submit: submitForm, css: {'errorAnimated': formError, 'submitting': submitRequest()}">
<div class="controls" data-bind="css: {'error': loginError, 'animated': loginErrorAnimation}">
<div class="input-append">
<input type="text" class="input-block-level inputLogin checkAutocomplete"
name="RainLoopAdminLogin" id="RainLoopAdminLogin"
style="padding-right: 35px;"
autocomplete="username" autocorrect="off" autocapitalize="off" spellcheck="false" data-i18n="[placeholder]LOGIN/LABEL_LOGIN"
data-bind="textInput: login, hasFocus: loginFocus, disable: submitRequest" />
<span class="add-on">
<i class="icon-user"></i>
</span>
</div>
</div>
<div class="controls" data-bind="css: {'error': passwordError, 'animated': passwordErrorAnimation}">
<div class="input-append">
<input type="password" class="input-block-level inputPassword checkAutocomplete"
placeholder="Password" name="RainLoopAdminPassword" id="RainLoopAdminPassword"
style="padding-right: 35px;"
autocomplete="current-password" autocorrect="off" autocapitalize="off" spellcheck="false" data-i18n="[placeholder]LOGIN/LABEL_PASSWORD"
data-bind="textInput: password, disable: submitRequest" />
<span class="add-on" tabindex="-1" data-tooltip-join="left" data-bind="command: submitCommand, tooltip: 'LOGIN/BUTTON_LOGIN'">
<i class="icon-key" data-bind="visible: '' === password()"></i>
<button type="submit" class="btn-submit-icon-wrp" data-bind="visible: '' !== password()">
<i class="icon-right-middle login-submit-icon"></i>
</button>
</span>
</div>
</div>
<div class="controls controls-submit-wrp" data-bind="css: {'display-none': hideSubmitButton}">
<button type="submit" class="btn btn-large btn-block buttonLogin" data-bind="command: submitCommand">
<span data-i18n="LOGIN/BUTTON_LOGIN"></span>
</button>
</div>
</form>
</div>
</center>
</div>
<div class="loginAfter"></div>
<div>

View file

@ -1,87 +1,79 @@
<div class="b-admin-about">
<div class="form-horizontal">
<div class="legend" data-i18n="TAB_ABOUT/LEGEND_ABOUT"></div>
<div class="row" style="min-width: 800px;">
<div class="span4">
<div class="rl-logo"></div>
<div style="margin-left: 30px;">
2019 &copy; <span data-i18n="TAB_ABOUT/LABEL_ALL_RIGHTS_RESERVED"></span>
<br />
<a class="g-ui-link" href="http://www.rainloop.net/" target="_blank" style="padding-left: 0">http://rainloop.net/</a>
</div>
</div>
<div class="rl-desc" style="float: left">
<h1 style="margin-bottom: 0;">RainLoop</h1>
<h4 style="margin-top: 0;">
<span data-bind="text: version"></span>
<span data-bind="visible: 'stable' !== coreType()" style="padding-left: 3px; color: red; font-weight: normal">
(<span data-bind="text: coreType"></span> channel)
</span>
</h4>
<h4 style="color: #aaa; font-weight: normal;" data-i18n="TAB_ABOUT/LABEL_TAG_HINT"></h4>
<h5 style="font-weight: normal; margin-top: 40px;" data-bind="visible: !community">
<div data-bind="visible: 'error' === statusType()">
<i class="icon-warning" style="color: red"></i>
&nbsp;&nbsp;
<span data-bind="text: errorDesc"></span>
</div>
<div data-bind="visible: 'available' === statusType()">
<i class="icon-bolt" style="color: red"></i>
&nbsp;&nbsp;
<span data-bind="html: coreRemoteVersionHtmlDesc"></span>
<span data-bind="visible: '' !== coreRemoteRelease()">
(<span data-bind="text: coreRemoteRelease"></span>)
</span>
<br />
<span data-bind="if: coreWarning">
<br />
<i class="icon-warning" style="color: red"></i>
&nbsp;&nbsp;
<b data-i18n="HINTS/WARNING"></b>
&nbsp;&nbsp;
<span data-i18n="TAB_ABOUT/HINT_READ_CHANGE_LOG"></span>
<br />
</span>
<br />
<span data-bind="visible: coreUpdatable() && coreAccess()">
<a class="btn" data-bind="click: updateCoreData">
<i class="icon-sync"></i>
&nbsp;&nbsp;
<span data-i18n="TAB_ABOUT/BUTTON_UPDATE"></span>
</a>
&nbsp;&nbsp;&nbsp;
</span>
<span data-bind="visible: coreAccess()">
<a class="btn" href="http://www.rainloop.net/downloads/" target="_blank">
<i class="icon-download"></i>
&nbsp;&nbsp;
<span data-i18n="TAB_ABOUT/BUTTON_DOWNLOAD"></span>
</a>
&nbsp;&nbsp;&nbsp;
<a class="btn" href="http://www.rainloop.net/changelog/" target="_blank">
<i class="icon-file-text"></i>
&nbsp;&nbsp;
<span data-i18n="TAB_ABOUT/BUTTON_CHANGELOG"></span>
</a>
</span>
</div>
<div data-bind="visible: 'up-to-date' === statusType()">
<i class="icon-ok" style="color: green"></i>
&nbsp;&nbsp;
<span data-i18n="TAB_ABOUT/HINT_IS_UP_TO_DATE"></span>
</div>
<div data-bind="visible: 'updating' === statusType()">
<i class="icon-spinner animated"></i>
&nbsp;&nbsp;
<span data-i18n="TAB_ABOUT/LABEL_UPDATING"></span>&hellip;
</div>
<div data-bind="visible: 'checking' === statusType()">
<i class="icon-spinner animated"></i>
&nbsp;&nbsp;
<span data-i18n="TAB_ABOUT/LABEL_CHECKING"></span>&hellip;
</div>
</h5>
</div>
</div>
</div>
</div>
<div class="b-admin-about">
<div class="form-horizontal">
<div class="legend" data-i18n="TAB_ABOUT/LEGEND_ABOUT"></div>
<div class="row" style="min-width: 800px;">
<div class="span4">
<div class="rl-logo"></div>
<div style="margin-left: 30px;">
2019 &copy; <span data-i18n="TAB_ABOUT/LABEL_ALL_RIGHTS_RESERVED"></span>
<br />
<a class="g-ui-link" href="http://www.rainloop.net/" target="_blank" style="padding-left: 0">http://rainloop.net/</a>
</div>
</div>
<div class="rl-desc" style="float: left">
<h1 style="margin-bottom: 0;">RainLoop</h1>
<h4 style="margin-top: 0;">
<span data-bind="text: version"></span>
<span data-bind="visible: 'stable' !== coreType()" style="padding-left: 3px; color: red; font-weight: normal">
(<span data-bind="text: coreType"></span> channel)
</span>
</h4>
<h4 style="color: #aaa; font-weight: normal;" data-i18n="TAB_ABOUT/LABEL_TAG_HINT"></h4>
<h5 style="font-weight: normal; margin-top: 40px;" data-bind="visible: !community">
<div data-bind="visible: 'error' === statusType()">
<i class="icon-warning" style="color: red"></i>
&nbsp;&nbsp;
<span data-bind="text: errorDesc"></span>
</div>
<div data-bind="visible: 'available' === statusType()">
<i class="icon-bolt" style="color: red"></i>
&nbsp;&nbsp;
<span data-bind="html: coreRemoteVersionHtmlDesc"></span>
<span data-bind="visible: '' !== coreRemoteRelease()">
(<span data-bind="text: coreRemoteRelease"></span>)
</span>
<br />
<span data-bind="if: coreWarning">
<br />
<i class="icon-warning" style="color: red"></i>
&nbsp;&nbsp;
<b data-i18n="HINTS/WARNING"></b>
&nbsp;&nbsp;
<span data-i18n="TAB_ABOUT/HINT_READ_CHANGE_LOG"></span>
<br />
</span>
<br />
<span data-bind="visible: coreAccess()">
<a class="btn" href="http://www.rainloop.net/downloads/" target="_blank">
<i class="icon-download"></i>
&nbsp;&nbsp;
<span data-i18n="TAB_ABOUT/BUTTON_DOWNLOAD"></span>
</a>
&nbsp;&nbsp;&nbsp;
<a class="btn" href="http://www.rainloop.net/changelog/" target="_blank">
<i class="icon-file-text"></i>
&nbsp;&nbsp;
<span data-i18n="TAB_ABOUT/BUTTON_CHANGELOG"></span>
</a>
</span>
</div>
<div data-bind="visible: 'up-to-date' === statusType()">
<i class="icon-ok" style="color: green"></i>
&nbsp;&nbsp;
<span data-i18n="TAB_ABOUT/HINT_IS_UP_TO_DATE"></span>
</div>
<div data-bind="visible: 'updating' === statusType()">
<i class="icon-spinner animated"></i>
&nbsp;&nbsp;
<span data-i18n="TAB_ABOUT/LABEL_UPDATING"></span>&hellip;
</div>
<div data-bind="visible: 'checking' === statusType()">
<i class="icon-spinner animated"></i>
&nbsp;&nbsp;
<span data-i18n="TAB_ABOUT/LABEL_CHECKING"></span>&hellip;
</div>
</h5>
</div>
</div>
</div>
</div>

View file

@ -1,21 +1,21 @@
<tr class="e-item" data-bind="css: {'disabled': disabled }">
<td class="e-action">
<span class="domain-name" data-bind="text: name"></span>
<span class="domain-alias" data-bind="if: alias">(alias)</span>
</td>
<td>
<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(oDomain) { $root.deleteDomain(oDomain); }">
<span data-i18n="TAB_DOMAINS/DELETE_ARE_YOU_SURE"></span>
</a>
</td>
<td>
<span class="delete-domain" data-bind="visible: !deleteAccess(), click: function (oDomain) { $root.domainForDeletion(oDomain); }">
<i class="icon-trash"></i>
</span>
</td>
<td>
<span class="disabled-domain" data-bind="click: function (oDomain) { $root.disableDomain(oDomain); }">
<i data-bind="css: {'icon-checkbox-checked': !disabled(), 'icon-checkbox-unchecked': disabled}"></i>
</span>
</td>
<tr class="e-item" data-bind="css: {'disabled': disabled }">
<td class="e-action">
<span class="domain-name" data-bind="text: name"></span>
<span class="domain-alias" data-bind="if: alias">(alias)</span>
</td>
<td>
<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(oDomain) { $root.deleteDomain(oDomain); }">
<span data-i18n="TAB_DOMAINS/DELETE_ARE_YOU_SURE"></span>
</a>
</td>
<td>
<span class="delete-domain" data-bind="visible: !deleteAccess(), click: function (oDomain) { $root.domainForDeletion(oDomain); }">
<i class="icon-trash"></i>
</span>
</td>
<td>
<span class="disabled-domain" data-bind="click: function (oDomain) { $root.disableDomain(oDomain); }">
<i data-bind="css: {'icon-checkbox-checked': !disabled(), 'icon-checkbox-unchecked': disabled}"></i>
</span>
</td>
</tr>

View file

@ -1,181 +1,172 @@
<div class="b-admin-general">
<div class="row" data-bind="visible: weakPassword">
<div class="alert alert-warning span8" style="margin-top: 10px;">
<h4 data-i18n="TAB_GENERAL/ALERT_WARNING"></h4>
<br />
<div data-i18n="[html]TAB_GENERAL/HTML_ALERT_WEAK_PASSWORD"></div>
</div>
</div>
<div class="row" data-bind="visible: dataFolderAccess">
<div class="alert alert-error span8" style="margin-top: 10px;">
<h4 data-i18n="TAB_GENERAL/ALERT_WARNING"></h4>
<br />
<span data-i18n="TAB_GENERAL/ALERT_DATA_ACCESS"></span>
&nbsp;
<a href="https://www.rainloop.net/docs/installation/#notice"
target="_blank"><strong>https://www.rainloop.net/docs/installation</strong></a>
</div>
</div>
<div class="form-horizontal">
<div class="legend i18n i18n-animation" data-i18n="TAB_GENERAL/LEGEND_INTERFACE"></div>
<div class="control-group" style="margin-bottom: 10px;">
<label class="control-label" data-i18n="TAB_GENERAL/LABEL_LANGUAGE"></label>
<div class="controls">
<div class="flag-selector">
<span class="flag-wrapper">
<span data-bind="css: 'flag flag-' + language().toLowerCase()"></span>
</span>
<span class="flag-name" tabindex="0" data-bind="text: languageFullName, click: selectLanguage, onSpace: selectLanguage, onEnter: selectLanguage"></span>
&nbsp;&nbsp;
<div data-bind="component: {
name: 'SaveTrigger',
params: { value: languageTrigger }
}"></div>
</div>
</div>
</div>
<div class="control-group">
<label class="control-label" data-i18n="TAB_GENERAL/LABEL_LANGUAGE_ADMIN"></label>
<div class="controls">
<div class="flag-selector">
<span class="flag-wrapper">
<span data-bind="css: 'flag flag-' + languageAdmin().toLowerCase()"></span>
</span>
<span class="flag-name" tabindex="0" data-bind="text: languageAdminFullName, click: selectLanguageAdmin, onSpace: selectLanguageAdmin, onEnter: selectLanguageAdmin"></span>
&nbsp;&nbsp;
<div data-bind="component: {
name: 'SaveTrigger',
params: { value: languageAdminTrigger }
}"></div>
</div>
</div>
</div>
<div class="control-group">
<label class="control-label" data-i18n="TAB_GENERAL/LABEL_THEME"></label>
<div class="controls">
<div data-bind="component: {
name: 'Select',
params: {
options: themesOptions,
value: theme,
trigger: themeTrigger,
optionsText: 'optText',
optionsValue: 'optValue',
size: 2
}
}"></div>
</div>
</div>
<div class="control-group">
<div class="controls">
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'TAB_GENERAL/LABEL_ALLOW_LANGUAGES_ON_SETTINGS',
value: allowLanguagesOnSettings
}
}"></div>
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'TAB_GENERAL/LABEL_ALLOW_THEMES_ON_SETTINGS',
value: capaThemes
}
}"></div>
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'TAB_GENERAL/LABEL_ALLOW_BACKGROUND_ON_SETTINGS',
value: capaUserBackground
}
}"></div>
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'TAB_GENERAL/LABEL_NEW_FOLDER_MOVE',
value: newMoveToFolder
}
}"></div>
</div>
</div>
<div class="control-group">
<div class="controls">
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'TAB_GENERAL/LABEL_SHOW_THUMBNAILS',
value: capaAttachmentThumbnails,
inline: false
}
}"></div>
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'TAB_GENERAL/LABEL_ALLOW_GRAVATAR',
value: capaGravatar,
inline: true
}
}"></div>
(<a class="g-ui-link" href="http://en.gravatar.com/" target="_blank">http://en.gravatar.com/</a>)
</div>
</div>
<div class="legend i18n i18n-animation" data-i18n="TAB_GENERAL/LEGEND_MAIN"></div>
<div class="control-group">
<label class="control-label" data-i18n="TAB_GENERAL/LABEL_ATTACHMENT_SIZE_LIMIT"></label>
<div class="controls">
<div data-bind="component: {
name: 'Input',
params: {
label: 'MB',
value: mainAttachmentLimit,
trigger: attachmentLimitTrigger,
size: 1
}
}"></div>
<br />
<br />
<span class="well well-small" data-bind="visible: '' !== uploadDataDesc">
<b>PHP:</b>
&nbsp;
<span data-bind="text: uploadDataDesc"></span>
</span>
&nbsp;&nbsp;&nbsp;
<a href="#" target="_blank" class="btn btn-thin" data-bind="link: phpInfoLink()">
<i class="icon-info"></i>
</a>
</div>
</div>
<br />
<div class="control-group">
<div class="controls">
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'TAB_GENERAL/LABEL_ALLOW_ADDITIONAL_ACCOUNTS',
value: capaAdditionalAccounts
}
}"></div>
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'TAB_GENERAL/LABEL_ALLOW_IDENTITIES',
value: capaIdentities
}
}"></div>
</div>
</div>
<!--
<div class="control-group">
<div class="controls">
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'TAB_GENERAL/LABEL_ALLOW_TEMPLATES',
value: capaTemplates
}
}"></div>
</div>
</div>
-->
</div>
</div>
<div class="b-admin-general">
<div class="row" data-bind="visible: weakPassword">
<div class="alert alert-warning span8" style="margin-top: 10px;">
<h4 data-i18n="TAB_GENERAL/ALERT_WARNING"></h4>
<br />
<div data-i18n="[html]TAB_GENERAL/HTML_ALERT_WEAK_PASSWORD"></div>
</div>
</div>
<div class="row" data-bind="visible: dataFolderAccess">
<div class="alert alert-error span8" style="margin-top: 10px;">
<h4 data-i18n="TAB_GENERAL/ALERT_WARNING"></h4>
<br />
<span data-i18n="TAB_GENERAL/ALERT_DATA_ACCESS"></span>
&nbsp;
<a href="https://www.rainloop.net/docs/installation/#notice"
target="_blank"><strong>https://www.rainloop.net/docs/installation</strong></a>
</div>
</div>
<div class="form-horizontal">
<div class="legend i18n i18n-animation" data-i18n="TAB_GENERAL/LEGEND_INTERFACE"></div>
<div class="control-group" style="margin-bottom: 10px;">
<label class="control-label" data-i18n="TAB_GENERAL/LABEL_LANGUAGE"></label>
<div class="controls">
<div class="flag-selector">
<span class="flag-wrapper">
<span data-bind="css: 'flag flag-' + language().toLowerCase()"></span>
</span>
<span class="flag-name" tabindex="0" data-bind="text: languageFullName, click: selectLanguage, onSpace: selectLanguage, onEnter: selectLanguage"></span>
&nbsp;&nbsp;
<div data-bind="component: {
name: 'SaveTrigger',
params: { value: languageTrigger }
}"></div>
</div>
</div>
</div>
<div class="control-group">
<label class="control-label" data-i18n="TAB_GENERAL/LABEL_LANGUAGE_ADMIN"></label>
<div class="controls">
<div class="flag-selector">
<span class="flag-wrapper">
<span data-bind="css: 'flag flag-' + languageAdmin().toLowerCase()"></span>
</span>
<span class="flag-name" tabindex="0" data-bind="text: languageAdminFullName, click: selectLanguageAdmin, onSpace: selectLanguageAdmin, onEnter: selectLanguageAdmin"></span>
&nbsp;&nbsp;
<div data-bind="component: {
name: 'SaveTrigger',
params: { value: languageAdminTrigger }
}"></div>
</div>
</div>
</div>
<div class="control-group">
<label class="control-label" data-i18n="TAB_GENERAL/LABEL_THEME"></label>
<div class="controls">
<div data-bind="component: {
name: 'Select',
params: {
options: themesOptions,
value: theme,
trigger: themeTrigger,
optionsText: 'optText',
optionsValue: 'optValue',
size: 2
}
}"></div>
</div>
</div>
<div class="control-group">
<div class="controls">
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'TAB_GENERAL/LABEL_ALLOW_LANGUAGES_ON_SETTINGS',
value: allowLanguagesOnSettings
}
}"></div>
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'TAB_GENERAL/LABEL_ALLOW_THEMES_ON_SETTINGS',
value: capaThemes
}
}"></div>
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'TAB_GENERAL/LABEL_ALLOW_BACKGROUND_ON_SETTINGS',
value: capaUserBackground
}
}"></div>
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'TAB_GENERAL/LABEL_NEW_FOLDER_MOVE',
value: newMoveToFolder
}
}"></div>
</div>
</div>
<div class="control-group">
<div class="controls">
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'TAB_GENERAL/LABEL_SHOW_THUMBNAILS',
value: capaAttachmentThumbnails,
inline: false
}
}"></div>
</div>
</div>
<div class="legend i18n i18n-animation" data-i18n="TAB_GENERAL/LEGEND_MAIN"></div>
<div class="control-group">
<label class="control-label" data-i18n="TAB_GENERAL/LABEL_ATTACHMENT_SIZE_LIMIT"></label>
<div class="controls">
<div data-bind="component: {
name: 'Input',
params: {
label: 'MB',
value: mainAttachmentLimit,
trigger: attachmentLimitTrigger,
size: 1
}
}"></div>
<br />
<br />
<span class="well well-small" data-bind="visible: '' !== uploadDataDesc">
<b>PHP:</b>
&nbsp;
<span data-bind="text: uploadDataDesc"></span>
</span>
&nbsp;&nbsp;&nbsp;
<a href="#" target="_blank" class="btn btn-thin" data-bind="link: phpInfoLink()">
<i class="icon-info"></i>
</a>
</div>
</div>
<br />
<div class="control-group">
<div class="controls">
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'TAB_GENERAL/LABEL_ALLOW_ADDITIONAL_ACCOUNTS',
value: capaAdditionalAccounts
}
}"></div>
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'TAB_GENERAL/LABEL_ALLOW_IDENTITIES',
value: capaIdentities
}
}"></div>
</div>
</div>
<!--
<div class="control-group">
<div class="controls">
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'TAB_GENERAL/LABEL_ALLOW_TEMPLATES',
value: capaTemplates
}
}"></div>
</div>
</div>
-->
</div>
</div>

View file

@ -1,87 +0,0 @@
<div class="b-admin-licensing" >
<div class="row">
<div class="alert alert-info span8" style="margin-top: 10px;">
<span data-i18n="[html]TAB_LICENSING/HTML_ALERT_TOP_1"></span>
&nbsp;
<a href=http://www.rainloop.net/licensing/ target=_blank>RainLoop Software License</a>.
</div>
</div>
<br />
<div class="form-horizontal">
<div class="control-group">
<label class="control-label" data-i18n="TAB_LICENSING/LABEL_YOUR_DOMAIN"></label>
<div class="controls">
<span class="help-inline" style="padding-top: 5px;">
<strong data-bind="text: adminDomain"></strong>
</span>
</div>
</div>
<div class="control-group" data-bind="visible: !subscriptionEnabled()">
<label class="control-label" style="padding-top: 14px" data-i18n="TAB_LICENSING/LABEL_VERSION"></label>
<div class="controls">
<div class="alert alert-block span6" style="margin-left: 0">
<h4>Basic</h4>
<br />
<p data-i18n="TAB_LICENSING/TYPE_BASIC_HINT_2"></p>
</div>
</div>
</div>
<div class="control-group" data-bind="visible: subscriptionEnabled">
<label class="control-label" style="padding-top: 20px" data-i18n="TAB_LICENSING/LABEL_VERSION"></label>
<div class="controls">
<div data-bind="visible: licensingProcess()" style="padding-top: 20px">
<i class="icon-spinner animated"></i>
&nbsp;&nbsp;
<span data-i18n="TAB_LICENSING/LABEL_CHECKING"></span>&hellip;
</div>
<div data-bind="visible: !licensingProcess()">
<div class="alert alert-block span6" style="margin-left: 0; padding-top: 20px" data-bind="visible: !licensing()">
<h4>Basic</h4>
<br />
<p data-i18n="TAB_LICENSING/TYPE_BASIC_HINT"></p>
</div>
<div data-bind="visible: licensing()">
<div class="alert alert-success span6" style="margin-left: 0; margin-top: 10px; padding-top: 20px" data-bind="visible: licenseValid() && '' === licenseError()">
<h4>
<snan>Premium</snan>
<span data-bind="visible: licenseIsUnlim()">
&nbsp;
(<snan data-i18n="TAB_LICENSING/TYPE_PREMIUM_LIFETIME"></snan>)
</span>
</h4>
<p data-bind="visible: 0 < licenseExpired()" style="padding-top: 10px">
<b data-i18n="TAB_LICENSING/LABEL_SUB_EXPIRES"></b>:
&nbsp;
<span data-bind="text: licenseExpiredMomentValue()"></span>
</p>
</div>
<div class="alert alert-error span6" style="margin-left: 0; margin-top: 10px;" data-bind="visible: !licenseValid() && '' !== licenseError(), text: licenseError"></div>
</div>
</div>
</div>
</div>
<div class="control-group" data-bind="visible: subscriptionEnabled() && !licensingProcess()">
<div class="controls">
<a class="btn" data-bind="click: showActivationForm">
<i class="icon-happy-smiley"></i>
&nbsp;&nbsp;
<span data-i18n="TAB_LICENSING/BUTTON_ACTIVATE"></span>
</a>
&nbsp;&nbsp;
<a class="btn" href="http://www.rainloop.net/purchase/" target="_black">
<i class="icon-purchase"></i>
&nbsp;&nbsp;
<span data-i18n="TAB_LICENSING/BUTTON_PURCHASE"></span>
</a>
<!--
&nbsp;&nbsp;
<a class="btn" data-bind="click: showTrialForm, visible: !licensing()">
<i class="icon-eye"></i>
&nbsp;&nbsp;
<span data-i18n="TAB_LICENSING/BUTTON_TRIAL"></span>
</a>
-->
</div>
</div>
</div>
</div>

View file

@ -1,202 +0,0 @@
<div class="adminSecurity">
<div class="row">
<div class="alert alert-info span8" style="margin-top: 10px;">
<span data-i18n="TAB_INTEGRATIONS/TOP_ALERT"></span>
&nbsp;
<a href="http://rainloop.net/docs/social/" target="_blank">http://rainloop.net/docs/social/</a>
</div>
</div>
<div class="form-horizontal g-ui-user-select-none">
<div class="legend" data-i18n="TAB_INTEGRATIONS/LEGEND_GOOGLE"></div>
<div class="control-group">
<div class="controls">
<div data-bind="component: {
name: 'Checkbox',
params: { value: googleEnable, label: 'TAB_INTEGRATIONS/LABEL_ENABLE_GOOGLE' }
}"></div>
<div data-bind="visible: googleEnable">
<br />
<blockquote>
<div data-bind="component: {
name: 'Checkbox',
params: {
value: googleEnableAuth,
label: 'TAB_INTEGRATIONS/LABEL_GOOGLE_AUTH'
}
}"></div>
<div data-bind="component: {
name: 'Checkbox',
params: {
value: googleEnableAuthGmail,
label: 'TAB_INTEGRATIONS/LABEL_GOOGLE_AUTH_GMAIL'
}
}"></div>
<div data-bind="component: {
name: 'Checkbox',
params: {
value: googleEnableDrive,
label: 'TAB_INTEGRATIONS/LABEL_GOOGLE_DRIVE'
}
}"></div>
<div data-bind="component: {
name: 'Checkbox',
params: {
value: googleEnablePreview,
label: 'TAB_INTEGRATIONS/LABEL_GOOGLE_PREVIEW'
}
}"></div>
</blockquote>
</div>
</div>
</div>
<div class="control-group">
<label class="control-label" data-i18n="TAB_INTEGRATIONS/LABEL_GOOGLE_CLIENT_ID"></label>
<div class="controls">
<div data-bind="component: {
name: 'Input',
params: {
value: googleClientID,
trigger: googleTrigger1,
enable: googleEnableRequireClientSettings,
size: 5
}
}"></div>
</div>
</div>
<div class="control-group">
<label class="control-label" data-i18n="TAB_INTEGRATIONS/LABEL_GOOGLE_CLIENT_SECRET"></label>
<div class="controls">
<div data-bind="component: {
name: 'Input',
params: {
value: googleClientSecret,
trigger: googleTrigger2,
enable: googleEnableRequireClientSettings,
size: 5
}
}"></div>
</div>
</div>
<br />
<div class="control-group">
<label class="control-label" data-i18n="TAB_INTEGRATIONS/LABEL_GOOGLE_API_KEY"></label>
<div class="controls">
<div data-bind="component: {
name: 'Input',
params: {
value: googleApiKey,
trigger: googleTrigger3,
size: 5,
enable: googleEnableRequireApiKey
}
}"></div>
<blockquote style="margin-top: 10px; margin-bottom: 0">
<p class="muted" data-i18n="TAB_INTEGRATIONS/HINT_GOOGLE_API_KEY"></p>
</blockquote>
</div>
</div>
<div class="legend">
<span data-i18n="TAB_INTEGRATIONS/LEGEND_FACEBOOK"></span>
<span style="color: #ccc; font-size: 14px;" data-bind="visible: !facebookSupported()">(<span
data-i18n="HINTS/REQUIRES_PHP_54"></span>)</span>
</div>
<div data-bind="if: facebookSupported">
<div class="control-group">
<div class="controls">
<div data-bind="component: {
name: 'Checkbox',
params: { value: facebookEnable, label: 'TAB_INTEGRATIONS/LABEL_ENABLE_FACEBOOK' }
}"></div>
</div>
</div>
<div class="control-group">
<label class="control-label" data-i18n="TAB_INTEGRATIONS/LABEL_FACEBOOK_APP_ID"></label>
<div class="controls">
<div data-bind="component: {
name: 'Input',
params: {
value: facebookAppID,
trigger: facebookTrigger1,
enable: facebookEnable,
size: 5
}
}"></div>
</div>
</div>
<div class="control-group">
<label class="control-label" data-i18n="TAB_INTEGRATIONS/LABEL_FACEBOOK_APP_SECRET"></label>
<div class="controls">
<div data-bind="component: {
name: 'Input',
params: {
value: facebookAppSecret,
trigger: facebookTrigger2,
enable: facebookEnable,
size: 5
}
}"></div>
</div>
</div>
</div>
<div class="legend" data-i18n="TAB_INTEGRATIONS/LEGEND_TWITTER"></div>
<div class="control-group">
<div class="controls">
<div data-bind="component: {
name: 'Checkbox',
params: { value: twitterEnable, label: 'TAB_INTEGRATIONS/LABEL_ENABLE_TWITTER' }
}"></div>
</div>
</div>
<div class="control-group">
<label class="control-label" data-i18n="TAB_INTEGRATIONS/LABEL_TWITTER_CONSUMER_KEY"></label>
<div class="controls">
<div data-bind="component: {
name: 'Input',
params: {
value: twitterConsumerKey,
trigger: twitterTrigger1,
enable: twitterEnable,
size: 5
}
}"></div>
</div>
</div>
<div class="control-group">
<label class="control-label" data-i18n="TAB_INTEGRATIONS/LABEL_TWITTER_CONSUMER_SECRET"></label>
<div class="controls">
<div data-bind="component: {
name: 'Input',
params: {
value: twitterConsumerSecret,
trigger: twitterTrigger2,
enable: twitterEnable,
size: 5
}
}"></div>
</div>
</div>
<div class="legend" data-i18n="TAB_INTEGRATIONS/LEGEND_DROPBOX"></div>
<div class="control-group">
<div class="controls">
<div data-bind="component: {
name: 'Checkbox',
params: { value: dropboxEnable, label: 'TAB_INTEGRATIONS/LABEL_ENABLE_DROPBOX' }
}"></div>
</div>
</div>
<div class="control-group">
<label class="control-label" data-i18n="TAB_INTEGRATIONS/LABEL_DROPBOX_API_KEY"></label>
<div class="controls">
<div data-bind="component: {
name: 'Input',
params: {
value: dropboxApiKey,
trigger: dropboxTrigger1,
enable: dropboxEnable,
size: 5
}
}"></div>
</div>
</div>
</div>
</div>

View file

@ -1,10 +1,10 @@
<div class="rl-cmd" data-bind="css: {opened: opened}, click: function() { focused(true) }">
<div class="rl-cmd-wrp">
<div class="rl-cmd-history"><div class="rl-cmd-history-data"></div></div>
<div class="rl-cmd-input-wrp">
<div class="rl-cmd-input-helper" data-bind="text: cmdHelper"></div>
<div class="rl-cmd-input-prefix">#</div>
<input type="text" class="rl-cmd-input" data-bind="textInput: cmd, hasFocus: focused, onEnter: onEnter, onKeyDown: onKeyDown, onEsc: onEsc, onTab: onTab" />
</div>
</div>
<div class="rl-cmd" data-bind="css: {opened: opened}, click: function() { focused(true) }">
<div class="rl-cmd-wrp">
<div class="rl-cmd-history"><div class="rl-cmd-history-data"></div></div>
<div class="rl-cmd-input-wrp">
<div class="rl-cmd-input-helper" data-bind="text: cmdHelper"></div>
<div class="rl-cmd-input-prefix">#</div>
<input type="text" class="rl-cmd-input" data-bind="textInput: cmd, hasFocus: focused, onEnter: onEnter, onKeyDown: onKeyDown, onEsc: onEsc, onTab: onTab" />
</div>
</div>
</div>

View file

@ -1,26 +1,26 @@
<div class="popups">
<div class="modal hide b-ask-content g-ui-user-select-none" data-bind="modal: modalVisibility">
<div>
<div class="modal-body">
<br />
<br />
<span class="desc-place" data-bind="html: askDesc"></span>
<br />
<br />
<br />
</div>
<div class="modal-footer">
<button class="btn buttonYes" data-bind="click: yesClick, hasFocus: yesFocus">
<i class="icon-ok"></i>
&nbsp;&nbsp;
<span data-bind="text: yesButton"></span>
</button>
<button class="btn buttonNo" data-bind="click: noClick, hasFocus: noFocus">
<i class=" icon-remove"></i>
&nbsp;&nbsp;
<span data-bind="text: noButton"></span>
</button>
</div>
</div>
</div>
</div>
<div class="popups">
<div class="modal hide b-ask-content g-ui-user-select-none" data-bind="modal: modalVisibility">
<div>
<div class="modal-body">
<br />
<br />
<span class="desc-place" data-bind="html: askDesc"></span>
<br />
<br />
<br />
</div>
<div class="modal-footer">
<button class="btn buttonYes" data-bind="click: yesClick, hasFocus: yesFocus">
<i class="icon-ok"></i>
&nbsp;&nbsp;
<span data-bind="text: yesButton"></span>
</button>
<button class="btn buttonNo" data-bind="click: noClick, hasFocus: noFocus">
<i class=" icon-remove"></i>
&nbsp;&nbsp;
<span data-bind="text: noButton"></span>
</button>
</div>
</div>
</div>
</div>

View file

@ -1,22 +1,22 @@
<div class="popups">
<div class="modal hide b-languages-content g-ui-user-select-none" data-bind="modal: modalVisibility">
<div class="modal-header">
<button type="button" class="close" data-bind="command: cancelCommand">&times;</button>
<h3>
<span class="i18n" data-i18n="POPUPS_LANGUAGES/TITLE_LANGUAGES"></span>
</h3>
</div>
<div class="modal-body" style="min-height: 150px;">
<div data-bind="foreach: languages">
<label class="lang-item" data-tooltip-i18n="off" data-tooltip-join="right" data-bind="click: function () { $root.changeLanguage(key); }, css: {'selected': selected, 'user': user},
tooltip: function () { return $root.languageTooltipName(key); }">
<span class="flag-wrapper">
<span data-bind="css: 'flag flag-' + key.toLowerCase()" style=""></span>
</span>
<span class="lang-name" data-bind="text: fullName"></span>
<i class="icon-ok pull-right" style="color: green; margin-top: 3px;" data-bind="visible: selected"></i>
</label>
</div>
</div>
</div>
<div class="popups">
<div class="modal hide b-languages-content g-ui-user-select-none" data-bind="modal: modalVisibility">
<div class="modal-header">
<button type="button" class="close" data-bind="command: cancelCommand">&times;</button>
<h3>
<span class="i18n" data-i18n="POPUPS_LANGUAGES/TITLE_LANGUAGES"></span>
</h3>
</div>
<div class="modal-body" style="min-height: 150px;">
<div data-bind="foreach: languages">
<label class="lang-item" data-tooltip-i18n="off" data-tooltip-join="right" data-bind="click: function () { $root.changeLanguage(key); }, css: {'selected': selected, 'user': user},
tooltip: function () { return $root.languageTooltipName(key); }">
<span class="flag-wrapper">
<span data-bind="css: 'flag flag-' + key.toLowerCase()" style=""></span>
</span>
<span class="lang-name" data-bind="text: fullName"></span>
<i class="icon-ok pull-right" style="color: green; margin-top: 3px;" data-bind="visible: selected"></i>
</label>
</div>
</div>
</div>
</div>

View file

@ -1,22 +1,22 @@
<div class="popups">
<div class="modal hide b-welcom-page-content g-ui-user-select-none"
data-bind="modal: modalVisibility" style="width: 600px">
<div class="modal-body" style="height: 450px; padding: 0">
<div data-bind="if: welcomePageURL" style="height: 100%; width: 100%; margin: 0; padding: 0; position: relative">
<iframe src="javascript:1;" tabindex="-1" frameborder="0"
style="border: none; width: 100%; height: 100%; position: absolute; top: 0px; left: 0px; right: 0px; bottom: 0px;"
data-bind="attr: {'src': welcomePageURL}"></iframe>
</div>
</div>
<div class="modal-footer">
<button class="btn" data-bind="command: cancelCommand, hasFocus: closeFocused">
<i class="icon-remove"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="POPUPS_WELCOME_PAGE/BUTTON_CLOSE"></span>
</button>
</div>
</div>
<div class="popups">
<div class="modal hide b-welcom-page-content g-ui-user-select-none"
data-bind="modal: modalVisibility" style="width: 600px">
<div class="modal-body" style="height: 450px; padding: 0">
<div data-bind="if: welcomePageURL" style="height: 100%; width: 100%; margin: 0; padding: 0; position: relative">
<iframe src="javascript:1;" tabindex="-1" frameborder="0"
style="border: none; width: 100%; height: 100%; position: absolute; top: 0px; left: 0px; right: 0px; bottom: 0px;"
data-bind="attr: {'src': welcomePageURL}"></iframe>
</div>
</div>
<div class="modal-footer">
<button class="btn" data-bind="command: cancelCommand, hasFocus: closeFocused">
<i class="icon-remove"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="POPUPS_WELCOME_PAGE/BUTTON_CLOSE"></span>
</button>
</div>
</div>
</div>

View file

@ -1,170 +1,154 @@
<div class="b-login-content">
<div class="loginFormWrapper" data-bind="css: {'afterLoginHide': formHidden}">
<center class="plugin-mark-Login-BeforeLogo">
{{INCLUDE/BeforeLogo/PLACE}}
<!-- ko if: logoImg -->
<div class="logoWrapper plugin-mark-Login-AfterLogo">
<img class="logoImg" data-bind="attr: {'src': logoImg }" />
</div>
<!-- /ko -->
<div class="descWrapper thm-login-desc plugin-mark-Login-AfterLogoDescription"
data-bind="visible: '' !== loginDescription">
<span class="desc" data-bind="text: loginDescription"></span>
</div>
{{INCLUDE/AfterLogo/PLACE}}
<div class="alert alertError" data-bind="visibleAnimated: '' !== submitError()">
<button type="button" class="close" data-bind="click: function () { submitError('') }">&times;</button>
<span data-bind="text: submitError"></span>
<div data-bind="visible: '' !== submitErrorAddidional()">
<br />
<span data-bind="text: submitErrorAddidional"></span>
</div>
</div>
<div class="wrapper-parent">
<div class="wrapper loginWelcomeForm thm-login-text" data-bind="css: {'welcome-on': welcome}">
<!-- ko template: { name: 'LoginWelcome' } -->
<!-- /ko -->
</div>
<form class="wrapper submitting-pane loginForm thm-login thm-login-text" action="#/"
data-bind="submit: submitForm, css: {'errorAnimated': formError, 'welcome-off': welcome, 'submitting': submitRequest()}">
{{INCLUDE/TopControlGroup/PLACE}}
<div class="controls plugin-mark-Login-TopControlGroup"
data-bind="css: {'error': emailError, 'animated': emailErrorAnimation}">
<div class="input-append">
<input type="email" class="i18n input-block-level inputEmail checkAutocomplete"
name="RainLoopEmail" id="RainLoopEmail" style="padding-right: 35px;" autocomplete="email"
autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="textInput: email, hasFocus: emailFocus, disable: submitRequest"
data-i18n="[placeholder]LOGIN/LABEL_EMAIL" />
<span class="add-on">
<i class="icon-mail"></i>
</span>
</div>
</div>
<div class="controls" data-bind="css: {'error': passwordError, 'animated': passwordErrorAnimation}">
<div class="input-append">
<input type="password" class="i18n input-block-level inputPassword checkAutocomplete"
name="RainLoopPassword" id="RainLoopPassword" style="padding-right: 35px;"
autocomplete="current-password" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="textInput: password, hasFocus: passwordFocus, disable: submitRequest"
data-i18n="[placeholder]LOGIN/LABEL_PASSWORD" />
<span class="add-on" tabindex="-1" data-tooltip-join="left"
data-bind="command: submitCommand, tooltip: 'LOGIN/BUTTON_SIGN_IN'">
<i class="icon-key" data-bind="visible: '' === password()"></i>
<button type="submit" class="btn-submit-icon-wrp" data-bind="visible: '' !== password()">
<i class="icon-right-middle login-submit-icon"></i>
</button>
</span>
</div>
</div>
<div class="controls"
data-bind="visible: additionalCode.visibility(), css: {'error': additionalCode.error, 'animated': additionalCode.errorAnimation}">
<div class="input-append">
<input type="text" class="i18n input-block-level inputAdditionalCode" autocomplete="off"
autocorrect="off" autocapitalize="off" spellcheck="false" style="padding-right: 35px;"
data-bind="textInput: additionalCode, hasFocus: additionalCode.focused, disable: submitRequest"
data-i18n="[placeholder]LOGIN/LABEL_VERIFICATION_CODE" />
<span class="add-on">
<i class="icon-key"></i>
</span>
</div>
</div>
<div class="controls plugin-mark-Login-BottomControlGroup"
data-bind="visible: additionalCode.visibility()">
<div class="additionalCodeSignMeLabel" data-bind="component: {
name: 'CheckboxSimple',
params: {
label: 'LOGIN/LABEL_DONT_ASK_VERIFICATION_CODE',
value: additionalCodeSignMe
}
}"></div>
</div>
{{INCLUDE/BottomControlGroup/PLACE}}
<div class="controls controls-submit-wrp" data-bind="css: {'display-none': hideSubmitButton}">
<button type="submit" class="btn btn-large btn-block buttonLogin" data-bind="command: submitCommand">
<span class="i18n i18n-animation" data-i18n="LOGIN/BUTTON_SIGN_IN"></span>
</button>
</div>
<div class="controls clearfix" style="margin-bottom: 10px">
<div class="pull-right social-buttons">
<a href="#" tabindex="-1" class="social-button"
data-bind="visible: googleGmailLoginEnabled, command: googleGmailCommand, tooltip: 'LOGIN/TITLE_SIGN_IN_GMAIL'">
<i class="icon-mail"></i>
</a>
<a href="#" tabindex="-1" class="social-button"
data-bind="visible: googleLoginEnabled, command: googleCommand, tooltip: 'LOGIN/TITLE_SIGN_IN_GOOGLE'">
<i class="icon-google"></i>
</a>
<a href="#" tabindex="-1" class="social-button"
data-bind="visible: facebookLoginEnabled, command: facebookCommand, tooltip: 'LOGIN/TITLE_SIGN_IN_FACEBOOK'">
<i class="icon-facebook-alt"></i>
</a>
<a href="#" tabindex="-1" class="social-button"
data-bind="visible: twitterLoginEnabled, command: twitterCommand, tooltip: 'LOGIN/TITLE_SIGN_IN_TWITTER'">
<i class="icon-twitter"></i>
</a>
<a href="#" tabindex="-1" class="language-button"
data-bind="visible: allowLanguagesOnLogin() && !socialLoginEnabled(), click: selectLanguage, tooltip: 'POPUPS_LANGUAGES/TITLE_LANGUAGES'">
<i data-bind="css: langRequest() ? 'icon-spinner animated' : 'icon-world'"></i>
</a>
</div>
<div class="signMeLabel" data-bind="visible: signMeVisibility, component: {
name: 'CheckboxSimple',
params: {
label: 'LOGIN/LABEL_SIGN_ME',
labelAnimated: true,
value: signMe
}
}"></div>
</div>
<div class="controls clearfix"
data-bind="visible: '' !== forgotPasswordLinkUrl || '' !== registrationLinkUrl">
<div class="forgot-link thm-forgot pull-left" data-bind="visible: '' !== forgotPasswordLinkUrl"
style="text-align: center">
<a href="#" target="_blank" class="g-ui-link"
data-bind="attr: {href: forgotPasswordLinkUrl}, css: {'pull-right': '' !== registrationLinkUrl}"><span
class="i18n" data-i18n="LOGIN/LABEL_FORGOT_PASSWORD"></span></a>
</div>
&nbsp;
<div class="registration-link thm-registration pull-right"
data-bind="visible: '' !== registrationLinkUrl" style="text-align: center">
<a href="#" target="_blank" class="g-ui-link"
data-bind="attr: {href: registrationLinkUrl}, css: {'pull-left': '' !== forgotPasswordLinkUrl}"><span
class="i18n" data-i18n="LOGIN/LABEL_REGISTRATION"></span></a>
</div>
</div>
</form>
</div>
<div class="e-mobile-switcher thm-mobile-switcher">
<span data-bind="visible: !mobile">
<i class="icon-mobile"></i>
&nbsp;
<a href="./?/MobileVersion/" tabindex="-1">
<span class="i18n" data-i18n="MOBILE/BUTTON_MOBILE_VERSION"></span>
</a>
</span>
<span data-bind="visible: mobile">
<i class="icon-laptop"></i>
&nbsp;
<a href="./?/DesktopVersion/" tabindex="-1">
<span class="i18n" data-i18n="MOBILE/BUTTON_DESKTOP_VERSION"></span>
</a>
</span>
</div>
<div class="e-languages thm-languages plugin-mark-Login-BottomFooter"
data-bind="visible: allowLanguagesOnLogin() && socialLoginEnabled()">
<label class="flag-selector">
<i data-bind="css: langRequest() ? 'icon-spinner animated' : 'icon-world'"></i>
&nbsp;&nbsp;
<span class="flag-name" tabindex="0"
data-bind="text: languageFullName, click: selectLanguage, onSpace: selectLanguage, onEnter: selectLanguage, onTab: selectLanguageOnTab"></span>
</label>
</div>
{{INCLUDE/BottomFooter/PLACE}}
</center>
</div>
<a href="#" onclick="return false;"></a>
<div class="loginAfter"></div>
</div>
<div class="b-login-content">
<div class="loginFormWrapper" data-bind="css: {'afterLoginHide': formHidden}">
<center class="plugin-mark-Login-BeforeLogo">
{{INCLUDE/BeforeLogo/PLACE}}
<!-- ko if: logoImg -->
<div class="logoWrapper plugin-mark-Login-AfterLogo">
<img class="logoImg" data-bind="attr: {'src': logoImg }" />
</div>
<!-- /ko -->
<div class="descWrapper thm-login-desc plugin-mark-Login-AfterLogoDescription"
data-bind="visible: '' !== loginDescription">
<span class="desc" data-bind="text: loginDescription"></span>
</div>
{{INCLUDE/AfterLogo/PLACE}}
<div class="alert alertError" data-bind="visibleAnimated: '' !== submitError()">
<button type="button" class="close" data-bind="click: function () { submitError('') }">&times;</button>
<span data-bind="text: submitError"></span>
<div data-bind="visible: '' !== submitErrorAddidional()">
<br />
<span data-bind="text: submitErrorAddidional"></span>
</div>
</div>
<div class="wrapper-parent">
<div class="wrapper loginWelcomeForm thm-login-text" data-bind="css: {'welcome-on': welcome}">
<!-- ko template: { name: 'LoginWelcome' } -->
<!-- /ko -->
</div>
<form class="wrapper submitting-pane loginForm thm-login thm-login-text" action="#/"
data-bind="submit: submitForm, css: {'errorAnimated': formError, 'welcome-off': welcome, 'submitting': submitRequest()}">
{{INCLUDE/TopControlGroup/PLACE}}
<div class="controls plugin-mark-Login-TopControlGroup"
data-bind="css: {'error': emailError, 'animated': emailErrorAnimation}">
<div class="input-append">
<input type="email" class="i18n input-block-level inputEmail checkAutocomplete"
name="RainLoopEmail" id="RainLoopEmail" style="padding-right: 35px;" autocomplete="email"
autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="textInput: email, hasFocus: emailFocus, disable: submitRequest"
data-i18n="[placeholder]LOGIN/LABEL_EMAIL" />
<span class="add-on">
<i class="icon-mail"></i>
</span>
</div>
</div>
<div class="controls" data-bind="css: {'error': passwordError, 'animated': passwordErrorAnimation}">
<div class="input-append">
<input type="password" class="i18n input-block-level inputPassword checkAutocomplete"
name="RainLoopPassword" id="RainLoopPassword" style="padding-right: 35px;"
autocomplete="current-password" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="textInput: password, hasFocus: passwordFocus, disable: submitRequest"
data-i18n="[placeholder]LOGIN/LABEL_PASSWORD" />
<span class="add-on" tabindex="-1" data-tooltip-join="left"
data-bind="command: submitCommand, tooltip: 'LOGIN/BUTTON_SIGN_IN'">
<i class="icon-key" data-bind="visible: '' === password()"></i>
<button type="submit" class="btn-submit-icon-wrp" data-bind="visible: '' !== password()">
<i class="icon-right-middle login-submit-icon"></i>
</button>
</span>
</div>
</div>
<div class="controls"
data-bind="visible: additionalCode.visibility(), css: {'error': additionalCode.error, 'animated': additionalCode.errorAnimation}">
<div class="input-append">
<input type="text" class="i18n input-block-level inputAdditionalCode" autocomplete="off"
autocorrect="off" autocapitalize="off" spellcheck="false" style="padding-right: 35px;"
data-bind="textInput: additionalCode, hasFocus: additionalCode.focused, disable: submitRequest"
data-i18n="[placeholder]LOGIN/LABEL_VERIFICATION_CODE" />
<span class="add-on">
<i class="icon-key"></i>
</span>
</div>
</div>
<div class="controls plugin-mark-Login-BottomControlGroup"
data-bind="visible: additionalCode.visibility()">
<div class="additionalCodeSignMeLabel" data-bind="component: {
name: 'CheckboxSimple',
params: {
label: 'LOGIN/LABEL_DONT_ASK_VERIFICATION_CODE',
value: additionalCodeSignMe
}
}"></div>
</div>
{{INCLUDE/BottomControlGroup/PLACE}}
<div class="controls controls-submit-wrp" data-bind="css: {'display-none': hideSubmitButton}">
<button type="submit" class="btn btn-large btn-block buttonLogin" data-bind="command: submitCommand">
<span class="i18n i18n-animation" data-i18n="LOGIN/BUTTON_SIGN_IN"></span>
</button>
</div>
<div class="controls clearfix" style="margin-bottom: 10px">
<div class="pull-right social-buttons">
<a href="#" tabindex="-1" class="language-button"
data-bind="visible: allowLanguagesOnLogin(), click: selectLanguage, tooltip: 'POPUPS_LANGUAGES/TITLE_LANGUAGES'">
<i data-bind="css: langRequest() ? 'icon-spinner animated' : 'icon-world'"></i>
</a>
</div>
<div class="signMeLabel" data-bind="visible: signMeVisibility, component: {
name: 'CheckboxSimple',
params: {
label: 'LOGIN/LABEL_SIGN_ME',
labelAnimated: true,
value: signMe
}
}"></div>
</div>
<div class="controls clearfix"
data-bind="visible: '' !== forgotPasswordLinkUrl || '' !== registrationLinkUrl">
<div class="forgot-link thm-forgot pull-left" data-bind="visible: '' !== forgotPasswordLinkUrl"
style="text-align: center">
<a href="#" target="_blank" class="g-ui-link"
data-bind="attr: {href: forgotPasswordLinkUrl}, css: {'pull-right': '' !== registrationLinkUrl}"><span
class="i18n" data-i18n="LOGIN/LABEL_FORGOT_PASSWORD"></span></a>
</div>
&nbsp;
<div class="registration-link thm-registration pull-right"
data-bind="visible: '' !== registrationLinkUrl" style="text-align: center">
<a href="#" target="_blank" class="g-ui-link"
data-bind="attr: {href: registrationLinkUrl}, css: {'pull-left': '' !== forgotPasswordLinkUrl}"><span
class="i18n" data-i18n="LOGIN/LABEL_REGISTRATION"></span></a>
</div>
</div>
</form>
</div>
<div class="e-mobile-switcher thm-mobile-switcher">
<span data-bind="visible: !mobile">
<i class="icon-mobile"></i>
&nbsp;
<a href="./?/MobileVersion/" tabindex="-1">
<span class="i18n" data-i18n="MOBILE/BUTTON_MOBILE_VERSION"></span>
</a>
</span>
<span data-bind="visible: mobile">
<i class="icon-laptop"></i>
&nbsp;
<a href="./?/DesktopVersion/" tabindex="-1">
<span class="i18n" data-i18n="MOBILE/BUTTON_DESKTOP_VERSION"></span>
</a>
</span>
</div>
<div class="e-languages thm-languages plugin-mark-Login-BottomFooter"
data-bind="visible: allowLanguagesOnLogin()">
<label class="flag-selector">
<i data-bind="css: langRequest() ? 'icon-spinner animated' : 'icon-world'"></i>
&nbsp;&nbsp;
<span class="flag-name" tabindex="0"
data-bind="text: languageFullName, click: selectLanguage, onSpace: selectLanguage, onEnter: selectLanguage, onTab: selectLanguageOnTab"></span>
</label>
</div>
{{INCLUDE/BottomFooter/PLACE}}
</center>
</div>
<a href="#" onclick="return false;"></a>
<div class="loginAfter"></div>
</div>

View file

@ -1,6 +1,4 @@
<div class="b-login--welcome-content">
<i class="icon-google iconsize50" style="cursor: pointer; padding-right: 20px"
data-bind="command: googleGmailCommand, visible: googleGmailLoginEnabled"></i>
<i class="icon-mail iconsize50" style="cursor: pointer" data-bind="click: displayMainForm"></i>
<br /><br />
</div>
</div>

View file

@ -1,39 +1,39 @@
<div class="b-folders g-ui-user-select-none thm-folders" data-bind="css: {'focused': folderListFocused, 'single-root-inbox': foldersListWithSingleInboxRootFolder, 'inbox-is-starred': isInboxStarred}">
<div class="b-toolbar btn-toolbar hide-on-mobile">
<a class="btn buttonCompose pull-left" data-tooltip-join="top" data-bind="visible: allowComposer, click: composeClick, tooltip: 'FOLDER_LIST/BUTTON_NEW_MESSAGE', css: {'btn-warning': composeInEdit, 'btn-success': !composeInEdit()}">
<i class="icon-paper-plane"></i>
<span class="btn-text-wrp buttonComposeText">
<span class="i18n" data-i18n="FOLDER_LIST/BUTTON_NEW_MESSAGE"></span>
</span>
</a>
<a class="btn buttonContacts pull-left" data-tooltip-join="top" data-bind="visible: allowContacts, click: contactsClick, tooltip: 'FOLDER_LIST/BUTTON_CONTACTS'">
<i class="icon-address-book"></i>
</a>
</div>
<div class="b-content opacity-on-panel-disabled" data-bind="visible: allowFolders, nano: true, scrollerShadows: true, css: {'inbox-is-starred': isInboxStarred}">
<div class="content g-scrollbox" data-scroller-shadows-content>
<div class="content-wrapper">
<div class="b-folders-system" data-bind="template: { name: 'MailFolderListSystemItem', foreach: folderListSystem }"></div>
<hr class="b-list-delimiter" />
<div class="b-folders-user" data-bind="template: { name: 'MailFolderListItem', foreach: folderList }"></div>
<div class="move-action-content-wrapper" data-bind="visible: moveAction"></div>
</div>
</div>
</div>
<div class="b-content show-on-panel-disabled" data-bind="click: function () { leftPanelDisabled(false); }"></div>
<div class="b-footer btn-toolbar hide-on-mobile" data-bind="visible: allowFolders">
<div class="btn-group">
<a class="btn single buttonResize" data-bind="click: function () { leftPanelDisabled(!leftPanelDisabled()); }">
<i data-bind="css: {'icon-resize-out': leftPanelDisabled(), 'icon-resize-in': !leftPanelDisabled()}"></i>
</a>
</div>
<div class="btn-group hide-on-panel-disabled">
<a class="btn first" data-bind="click: createFolder">
<i data-bind="css: {'icon-folder-add': !foldersChanging(), 'icon-spinner animated': foldersChanging()}"></i>
</a>
<a class="btn last" data-bind="click: configureFolders">
<i class="icon-cog"></i>
</a>
</div>
</div>
<div class="b-folders g-ui-user-select-none thm-folders" data-bind="css: {'focused': folderListFocused, 'single-root-inbox': foldersListWithSingleInboxRootFolder, 'inbox-is-starred': isInboxStarred}">
<div class="b-toolbar btn-toolbar hide-on-mobile">
<a class="btn buttonCompose pull-left" data-tooltip-join="top" data-bind="visible: allowComposer, click: composeClick, tooltip: 'FOLDER_LIST/BUTTON_NEW_MESSAGE', css: {'btn-warning': composeInEdit, 'btn-success': !composeInEdit()}">
<i class="icon-paper-plane"></i>
<span class="btn-text-wrp buttonComposeText">
<span class="i18n" data-i18n="FOLDER_LIST/BUTTON_NEW_MESSAGE"></span>
</span>
</a>
<a class="btn buttonContacts pull-left" data-tooltip-join="top" data-bind="visible: allowContacts, click: contactsClick, tooltip: 'FOLDER_LIST/BUTTON_CONTACTS'">
<i class="icon-address-book"></i>
</a>
</div>
<div class="b-content opacity-on-panel-disabled" data-bind="visible: allowFolders, nano: true, scrollerShadows: true, css: {'inbox-is-starred': isInboxStarred}">
<div class="content g-scrollbox" data-scroller-shadows-content>
<div class="content-wrapper">
<div class="b-folders-system" data-bind="template: { name: 'MailFolderListSystemItem', foreach: folderListSystem }"></div>
<hr class="b-list-delimiter" />
<div class="b-folders-user" data-bind="template: { name: 'MailFolderListItem', foreach: folderList }"></div>
<div class="move-action-content-wrapper" data-bind="visible: moveAction"></div>
</div>
</div>
</div>
<div class="b-content show-on-panel-disabled" data-bind="click: function () { leftPanelDisabled(false); }"></div>
<div class="b-footer btn-toolbar hide-on-mobile" data-bind="visible: allowFolders">
<div class="btn-group">
<a class="btn single buttonResize" data-bind="click: function () { leftPanelDisabled(!leftPanelDisabled()); }">
<i data-bind="css: {'icon-resize-out': leftPanelDisabled(), 'icon-resize-in': !leftPanelDisabled()}"></i>
</a>
</div>
<div class="btn-group hide-on-panel-disabled">
<a class="btn first" data-bind="click: createFolder">
<i data-bind="css: {'icon-folder-add': !foldersChanging(), 'icon-spinner animated': foldersChanging()}"></i>
</a>
<a class="btn last" data-bind="click: configureFolders">
<i class="icon-cog"></i>
</a>
</div>
</div>
</div>

View file

@ -1,218 +1,218 @@
<div id="rl-sub-left">
<div class="messageList g-ui-user-select-none"
data-bind="css: {'message-selected': isMessageSelected, 'message-focused': !messageListFocused(), 'loading': messageListCompleteLoadingThrottle, 'hideMessageListCheckbox': !useCheckboxesInList() }">
<div class="toolbar">
<div class="btn-toolbar">
<!-- ko if: allowFolders && mobile -->
<div class="btn-group" data-bind="visible: leftPanelDisabled()">
<a class="btn btn-thin-2 single" data-bind="click: showLeft">
<i class="icon-right-middle"></i>
</a>
</div>
<div class="btn-group" data-bind="visible: !leftPanelDisabled()">
<a class="btn btn-thin-2 single" data-bind="click: hideLeft">
<i class="icon-left-middle"></i>
</a>
</div>
<div class="btn-group">&nbsp;</div>
<!-- /ko -->
<div class="btn-group" data-bind="visible: mobile && allowComposer && mobileCheckedStateHide()">
<a class="btn single buttonCompose" data-tooltip-join="top" data-bind="click: composeClick, tooltip: 'FOLDER_LIST/BUTTON_NEW_MESSAGE', css: {'btn-warning': composeInEdit, 'btn-success': !composeInEdit()}">
<i class="icon-paper-plane"></i>
</a>
</div>
<div class="btn-group" data-bind="visible: mobileCheckedStateHide()">&nbsp;</div>
<div class="btn-group" data-bind="visible: allowReload && mobileCheckedStateHide()">
<a class="btn single btn-dark-disabled-border buttonReload" data-tooltip-join="top" data-bind="command: reloadCommand, tooltip: 'MESSAGE_LIST/BUTTON_RELOAD'">
<i class="icon-spinner" data-bind="css: {'animated': messageListCompleteLoadingThrottleForAnimation}"></i>
</a>
</div>
<div class="btn-group" data-bind="visible: allowReload && mobileCheckedStateHide()">&nbsp;</div>
<!-- ko if: !newMoveToFolder() -->
<div class="btn-group dropdown colored-toggle hide-on-mobile" data-bind="visible: allowMessageListActions, registrateBootstrapDropdown: true, openDropdownTrigger: moveDropdownTrigger">
<a id="move-dropdown-id" href="#" tabindex="-1" class="btn single btn-dark-disabled-border dropdown-toggle buttonMove" data-toggle="dropdown" data-tooltip-join="top" data-bind="command: moveCommand, tooltip: 'MESSAGE_LIST/BUTTON_MOVE_TO'">
<i class="icon-copy visible-on-ctrl-btn"></i>
<i class="icon-folder hidden-on-ctrl-btn"></i>
&nbsp;&nbsp;
<span class="caret"></span>
</a>
<ul class="dropdown-menu g-ui-menu" role="menu" aria-labelledby="move-dropdown-id" role="menu" data-bind="foreach: folderMenuForMove">
<!-- ko if: seporator -->
<li class="divider" role="presentation" data-bind="visible: seporator"></li>
<!-- /ko -->
<!-- ko if: !seporator -->
<li class="e-item" role="presentation" data-bind="css: { 'disabled': disabled }, click: function (mdata, oEvent) { if (!disabled) $root.moveSelectedMessagesToFolder(id, oEvent && !!oEvent.ctrlKey); }">
<a class="e-link menuitem" href="#" tabindex="-1" data-bind="text: name"></a>
</li>
<!-- /ko -->
</ul>
</div>
<!-- /ko -->
<!-- ko if: newMoveToFolder() -->
<div class="btn-group" data-bind="visible: allowMessageListActions && mobileCheckedStateShow()">
<a id="move-dropdown-id" href="#" tabindex="-1" class="btn single btn-dark-disabled-border buttonMove" data-tooltip-join="top" data-bind="command: moveNewCommand, tooltip: 'MESSAGE_LIST/BUTTON_MOVE_TO'">
<i class="icon-copy visible-on-ctrl-btn"></i>
<i class="icon-folder hidden-on-ctrl-btn"></i>
</a>
</div>
<!-- /ko -->
<div class="btn-group" data-bind="visible: allowMessageListActions && mobileCheckedStateHide()">&nbsp;</div>
<div class="btn-group" data-bind="visible: allowMessageListActions && mobileCheckedStateShow()">
<a class="btn first btn-dark-disabled-border button-archive" data-tooltip-join="top"
data-bind="visible: isArchiveVisible, command: archiveCommand, tooltip: 'MESSAGE_LIST/BUTTON_ARCHIVE'">
<i class="icon-archive"></i>
</a>
<a class="btn btn-dark-disabled-border button-spam" data-tooltip-join="top"
data-bind="visible: isSpamVisible, command: spamCommand, tooltip: 'MESSAGE_LIST/BUTTON_SPAM',
css: {'first': !isArchiveVisible()}">
<i class="icon-warning"></i>
</a>
<a class="btn btn-dark-disabled-border button-not-spam" data-tooltip-join="top"
data-bind="visible: isUnSpamVisible, command: notSpamCommand, tooltip: 'MESSAGE_LIST/BUTTON_NOT_SPAM',
css: {'first': !isArchiveVisible()}">
<i class="icon-check-mark-circle-two"></i>
</a>
<a class="btn last btn-dark-disabled-border button-delete" data-tooltip-join="top"
data-bind="command: deleteCommand, tooltip: 'MESSAGE_LIST/BUTTON_DELETE',
css: {'first': !isArchiveVisible() && !isSpamVisible() && !isUnSpamVisible()}">
<i class="icon-trash"></i>
<!--<span data-bind="text: printableMessageCountForDeletion()"></span>-->
</a>
</div>
<div class="btn-group hide-on-mobile" data-bind="visible: allowMessageListActions">&nbsp;</div>
<div class="btn-group dropdown colored-toggle hide-on-mobile" data-bind="visible: allowComposer || allowMessageListActions || allowDangerousActions, registrateBootstrapDropdown: true, openDropdownTrigger: moreDropdownTrigger">
<a id="more-list-dropdown-id" class="btn single btn-dark-disabled-border dropdown-toggle buttonMore" href="#" tabindex="-1" data-toggle="dropdown" data-tooltip-join="top" data-bind="tooltip: 'MESSAGE_LIST/BUTTON_MORE'">
<i class="icon-list animate-this-icon-on-open"></i>
</a>
<ul class="dropdown-menu pull-right g-ui-menu" role="menu" aria-labelledby="more-list-dropdown-id">
<div data-bind="visible: allowMessageListActions">
<li class="e-item" role="presentation" data-bind="click: listUnsetSeen, css: {'disabled': !hasCheckedOrSelectedLines()}">
<a class="e-link menuitem" href="#" tabindex="-1">
<i class="icon-none"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE_LIST/MENU_UNSET_SEEN"></span>
</a>
</li>
<li class="e-item" role="presentation" data-bind="click: listSetSeen, css: {'disabled': !hasCheckedOrSelectedLines()}">
<a class="e-link menuitem" href="#" tabindex="-1">
<i class="icon-none"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE_LIST/MENU_SET_SEEN"></span>
</a>
</li>
<li class="e-item" role="presentation" data-bind="click: listSetFlags, css: {'disabled': !hasCheckedOrSelectedLines()}">
<a class="e-link menuitem" href="#" tabindex="-1">
<i class="icon-none"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE_LIST/MENU_SET_FLAG"></span>
</a>
</li>
<li class="e-item" role="presentation" data-bind="click: listUnsetFlags, css: {'disabled': !hasCheckedOrSelectedLines()}">
<a class="e-link menuitem" href="#" tabindex="-1">
<i class="icon-none"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE_LIST/MENU_UNSET_FLAG"></span>
</a>
</li>
<li class="e-item" role="presentation" data-bind="click: listSetAllSeen, css: {'disabled': !hasMessages()}">
<a class="e-link menuitem" href="#" tabindex="-1">
<i class="icon-none"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE_LIST/MENU_SET_ALL_SEEN"></span>
</a>
</li>
</div>
<li class="divider" role="presentation" data-bind="visible: allowComposer && allowMessageListActions"></li>
<li class="e-item" role="presentation" data-bind="visible: allowComposer, command: multyForwardCommand">
<a class="e-link menuitem" href="#" tabindex="-1">
<i class="icon-reply-all"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE_LIST/BUTTON_MULTY_FORWARD"></span>
</a>
</li>
<li class="divider" role="presentation" data-bind="visible: allowDangerousActions"></li>
<li class="e-item" role="presentation" data-bind="visible: allowDangerousActions, command: deleteWithoutMoveCommand">
<a class="e-link menuitem" href="#" tabindex="-1">
<i class="icon-trash"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE_LIST/BUTTON_DELETE_WITHOUT_MOVE"></span>
</a>
</li>
<li class="e-item" role="presentation" data-bind="visible: allowDangerousActions, command: clearCommand">
<a class="e-link menuitem" href="#" tabindex="-1">
<i class="icon-fire"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE_LIST/BUTTON_EMPTY_FOLDER"></span>
</a>
</li>
</ul>
</div>
</div>
</div>
<div class="b-message-list-wrapper">
<div class="second-toolbar thm-message-list-top-toolbar">
<div class="form-inline">
<div class="input-append pull-right" data-bind="visible: allowSearch">
<div class="close-input-wrp">
<a class="close" data-bind="click: cancelSearch, visible: '' !== messageListSearchDesc()">&times;</a>
<input type="text" 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" />
</div>
<a class="btn buttonMoreSearch" data-bind="visible: allowSearchAdv, click: advancedSearchClick">
<span class="caret"></span>
</a>
</div>
<i class="checkboxCkeckAll" data-bind="css: checkAll() ? (isIncompleteChecked() ? 'icon-checkbox-partial' : 'icon-checkbox-checked') : 'icon-checkbox-unchecked'"></i>
</div>
</div>
<div class="line-loading e-strip-animation" data-bind="visible: messageListCompleteLoadingThrottle"></div>
<div class="mainDelimiter toolbarDelimiter"></div>
<div class="b-content" data-bind="nano: true, scrollerShadows: true, initDom: dragOverBodyArea">
<div class="content g-scrollbox" data-scroller-shadows-content>
<div class="content-wrapper">
<div class="listThreadUidDesc" data-bind="visible: '' !== messageListEndThreadUid(), click: cancelThreadUid">
<i class="icon-left" data-bind="click: cancelThreadUid"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE_LIST/BACK_TO_MESSAGE_LIST"></span>
</div>
<div class="listSearchDesc" data-bind="visible: '' !== messageListSearchDesc()">
<span data-bind="text: messageListSearchDesc"></span>
</div>
<div class="listDragOver" data-bind="css: {'viewAppendArea': dragOver() && '' === messageListError() && !popupVisibility(), 'dragOverEnter': dragOverEnter }, initDom: dragOverArea">
<i class="icon-down e-icon"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE_LIST/PUT_MESSAGE_HERE"></span>
</div>
<div class="listClear" data-bind="visible: clearListIsVisible()">
<span class="g-ui-link i18n" data-i18n="MESSAGE_LIST/BUTTON_EMPTY_FOLDER" data-bind="command: clearCommand"></span>
</div>
<div class="listError" data-bind="visible: !dragOver() && '' !== messageListError()">
<span class="error" data-bind="text: messageListError"></span>
</div>
<div class="listEmptyList" data-bind="visible: !dragOver() && 0 === messageList().length && !messageListCompleteLoadingThrottle() && '' === messageListError() && '' === messageListSearch()">
<span class="i18n" data-i18n="MESSAGE_LIST/EMPTY_LIST"></span>
</div>
<div class="listEmptyListLoading" data-bind="visible: !dragOver() && 0 === messageList().length &&
messageListCompleteLoadingThrottle() && '' === messageListError()">
<span class="i18n" data-i18n="MESSAGE_LIST/LIST_LOADING"></span><span class="textLoadingAnimationD1">.</span><span class="textLoadingAnimationD2">.</span><span class="textLoadingAnimationD3">.</span>
</div>
<div class="listEmptySearchList" data-bind="visible: !dragOver() && 0 === messageList().length && !messageListCompleteLoadingThrottle() && '' === messageListError() && '' !== messageListSearch()">
<span class="i18n" data-i18n="MESSAGE_LIST/EMPTY_SEARCH_LIST"></span>
</div>
<div data-bind="draggable: dragAndDronHelper, droppableSelector: '.b-folders .content.g-scrollbox'">
<div class="messageListPlace" data-bind="template: { name: messageListItemTemplate(), foreach: messageList }"></div>
</div>
</div>
</div>
</div>
<div class="mainDelimiter footerDelimiter"></div>
<div class="b-footer thm-message-list-bottom-toolbar">
<span data-tooltip-i18n="off" data-tooltip-mobile="on" data-bind="visible: 0 < userUsageProc(), tooltip: quotaTooltip" class="e-quota">
<span data-bind="text: userUsageProc"></span>%
</span>
<div class="pull-right">
<!-- ko template: { name: 'Pagenator', data: messageListPagenator } --><!-- /ko -->
</div>
</div>
</div>
</div>
<div id="rl-sub-left">
<div class="messageList g-ui-user-select-none"
data-bind="css: {'message-selected': isMessageSelected, 'message-focused': !messageListFocused(), 'loading': messageListCompleteLoadingThrottle, 'hideMessageListCheckbox': !useCheckboxesInList() }">
<div class="toolbar">
<div class="btn-toolbar">
<!-- ko if: allowFolders && mobile -->
<div class="btn-group" data-bind="visible: leftPanelDisabled()">
<a class="btn btn-thin-2 single" data-bind="click: showLeft">
<i class="icon-right-middle"></i>
</a>
</div>
<div class="btn-group" data-bind="visible: !leftPanelDisabled()">
<a class="btn btn-thin-2 single" data-bind="click: hideLeft">
<i class="icon-left-middle"></i>
</a>
</div>
<div class="btn-group">&nbsp;</div>
<!-- /ko -->
<div class="btn-group" data-bind="visible: mobile && allowComposer && mobileCheckedStateHide()">
<a class="btn single buttonCompose" data-tooltip-join="top" data-bind="click: composeClick, tooltip: 'FOLDER_LIST/BUTTON_NEW_MESSAGE', css: {'btn-warning': composeInEdit, 'btn-success': !composeInEdit()}">
<i class="icon-paper-plane"></i>
</a>
</div>
<div class="btn-group" data-bind="visible: mobileCheckedStateHide()">&nbsp;</div>
<div class="btn-group" data-bind="visible: allowReload && mobileCheckedStateHide()">
<a class="btn single btn-dark-disabled-border buttonReload" data-tooltip-join="top" data-bind="command: reloadCommand, tooltip: 'MESSAGE_LIST/BUTTON_RELOAD'">
<i class="icon-spinner" data-bind="css: {'animated': messageListCompleteLoadingThrottleForAnimation}"></i>
</a>
</div>
<div class="btn-group" data-bind="visible: allowReload && mobileCheckedStateHide()">&nbsp;</div>
<!-- ko if: !newMoveToFolder() -->
<div class="btn-group dropdown colored-toggle hide-on-mobile" data-bind="visible: allowMessageListActions, registrateBootstrapDropdown: true, openDropdownTrigger: moveDropdownTrigger">
<a id="move-dropdown-id" href="#" tabindex="-1" class="btn single btn-dark-disabled-border dropdown-toggle buttonMove" data-toggle="dropdown" data-tooltip-join="top" data-bind="command: moveCommand, tooltip: 'MESSAGE_LIST/BUTTON_MOVE_TO'">
<i class="icon-copy visible-on-ctrl-btn"></i>
<i class="icon-folder hidden-on-ctrl-btn"></i>
&nbsp;&nbsp;
<span class="caret"></span>
</a>
<ul class="dropdown-menu g-ui-menu" role="menu" aria-labelledby="move-dropdown-id" role="menu" data-bind="foreach: folderMenuForMove">
<!-- ko if: seporator -->
<li class="divider" role="presentation" data-bind="visible: seporator"></li>
<!-- /ko -->
<!-- ko if: !seporator -->
<li class="e-item" role="presentation" data-bind="css: { 'disabled': disabled }, click: function (mdata, oEvent) { if (!disabled) $root.moveSelectedMessagesToFolder(id, oEvent && !!oEvent.ctrlKey); }">
<a class="e-link menuitem" href="#" tabindex="-1" data-bind="text: name"></a>
</li>
<!-- /ko -->
</ul>
</div>
<!-- /ko -->
<!-- ko if: newMoveToFolder() -->
<div class="btn-group" data-bind="visible: allowMessageListActions && mobileCheckedStateShow()">
<a id="move-dropdown-id" href="#" tabindex="-1" class="btn single btn-dark-disabled-border buttonMove" data-tooltip-join="top" data-bind="command: moveNewCommand, tooltip: 'MESSAGE_LIST/BUTTON_MOVE_TO'">
<i class="icon-copy visible-on-ctrl-btn"></i>
<i class="icon-folder hidden-on-ctrl-btn"></i>
</a>
</div>
<!-- /ko -->
<div class="btn-group" data-bind="visible: allowMessageListActions && mobileCheckedStateHide()">&nbsp;</div>
<div class="btn-group" data-bind="visible: allowMessageListActions && mobileCheckedStateShow()">
<a class="btn first btn-dark-disabled-border button-archive" data-tooltip-join="top"
data-bind="visible: isArchiveVisible, command: archiveCommand, tooltip: 'MESSAGE_LIST/BUTTON_ARCHIVE'">
<i class="icon-archive"></i>
</a>
<a class="btn btn-dark-disabled-border button-spam" data-tooltip-join="top"
data-bind="visible: isSpamVisible, command: spamCommand, tooltip: 'MESSAGE_LIST/BUTTON_SPAM',
css: {'first': !isArchiveVisible()}">
<i class="icon-warning"></i>
</a>
<a class="btn btn-dark-disabled-border button-not-spam" data-tooltip-join="top"
data-bind="visible: isUnSpamVisible, command: notSpamCommand, tooltip: 'MESSAGE_LIST/BUTTON_NOT_SPAM',
css: {'first': !isArchiveVisible()}">
<i class="icon-check-mark-circle-two"></i>
</a>
<a class="btn last btn-dark-disabled-border button-delete" data-tooltip-join="top"
data-bind="command: deleteCommand, tooltip: 'MESSAGE_LIST/BUTTON_DELETE',
css: {'first': !isArchiveVisible() && !isSpamVisible() && !isUnSpamVisible()}">
<i class="icon-trash"></i>
<!--<span data-bind="text: printableMessageCountForDeletion()"></span>-->
</a>
</div>
<div class="btn-group hide-on-mobile" data-bind="visible: allowMessageListActions">&nbsp;</div>
<div class="btn-group dropdown colored-toggle hide-on-mobile" data-bind="visible: allowComposer || allowMessageListActions || allowDangerousActions, registrateBootstrapDropdown: true, openDropdownTrigger: moreDropdownTrigger">
<a id="more-list-dropdown-id" class="btn single btn-dark-disabled-border dropdown-toggle buttonMore" href="#" tabindex="-1" data-toggle="dropdown" data-tooltip-join="top" data-bind="tooltip: 'MESSAGE_LIST/BUTTON_MORE'">
<i class="icon-list animate-this-icon-on-open"></i>
</a>
<ul class="dropdown-menu pull-right g-ui-menu" role="menu" aria-labelledby="more-list-dropdown-id">
<div data-bind="visible: allowMessageListActions">
<li class="e-item" role="presentation" data-bind="click: listUnsetSeen, css: {'disabled': !hasCheckedOrSelectedLines()}">
<a class="e-link menuitem" href="#" tabindex="-1">
<i class="icon-none"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE_LIST/MENU_UNSET_SEEN"></span>
</a>
</li>
<li class="e-item" role="presentation" data-bind="click: listSetSeen, css: {'disabled': !hasCheckedOrSelectedLines()}">
<a class="e-link menuitem" href="#" tabindex="-1">
<i class="icon-none"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE_LIST/MENU_SET_SEEN"></span>
</a>
</li>
<li class="e-item" role="presentation" data-bind="click: listSetFlags, css: {'disabled': !hasCheckedOrSelectedLines()}">
<a class="e-link menuitem" href="#" tabindex="-1">
<i class="icon-none"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE_LIST/MENU_SET_FLAG"></span>
</a>
</li>
<li class="e-item" role="presentation" data-bind="click: listUnsetFlags, css: {'disabled': !hasCheckedOrSelectedLines()}">
<a class="e-link menuitem" href="#" tabindex="-1">
<i class="icon-none"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE_LIST/MENU_UNSET_FLAG"></span>
</a>
</li>
<li class="e-item" role="presentation" data-bind="click: listSetAllSeen, css: {'disabled': !hasMessages()}">
<a class="e-link menuitem" href="#" tabindex="-1">
<i class="icon-none"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE_LIST/MENU_SET_ALL_SEEN"></span>
</a>
</li>
</div>
<li class="divider" role="presentation" data-bind="visible: allowComposer && allowMessageListActions"></li>
<li class="e-item" role="presentation" data-bind="visible: allowComposer, command: multyForwardCommand">
<a class="e-link menuitem" href="#" tabindex="-1">
<i class="icon-reply-all"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE_LIST/BUTTON_MULTY_FORWARD"></span>
</a>
</li>
<li class="divider" role="presentation" data-bind="visible: allowDangerousActions"></li>
<li class="e-item" role="presentation" data-bind="visible: allowDangerousActions, command: deleteWithoutMoveCommand">
<a class="e-link menuitem" href="#" tabindex="-1">
<i class="icon-trash"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE_LIST/BUTTON_DELETE_WITHOUT_MOVE"></span>
</a>
</li>
<li class="e-item" role="presentation" data-bind="visible: allowDangerousActions, command: clearCommand">
<a class="e-link menuitem" href="#" tabindex="-1">
<i class="icon-fire"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE_LIST/BUTTON_EMPTY_FOLDER"></span>
</a>
</li>
</ul>
</div>
</div>
</div>
<div class="b-message-list-wrapper">
<div class="second-toolbar thm-message-list-top-toolbar">
<div class="form-inline">
<div class="input-append pull-right" data-bind="visible: allowSearch">
<div class="close-input-wrp">
<a class="close" data-bind="click: cancelSearch, visible: '' !== messageListSearchDesc()">&times;</a>
<input type="text" 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" />
</div>
<a class="btn buttonMoreSearch" data-bind="visible: allowSearchAdv, click: advancedSearchClick">
<span class="caret"></span>
</a>
</div>
<i class="checkboxCkeckAll" data-bind="css: checkAll() ? (isIncompleteChecked() ? 'icon-checkbox-partial' : 'icon-checkbox-checked') : 'icon-checkbox-unchecked'"></i>
</div>
</div>
<div class="line-loading e-strip-animation" data-bind="visible: messageListCompleteLoadingThrottle"></div>
<div class="mainDelimiter toolbarDelimiter"></div>
<div class="b-content" data-bind="nano: true, scrollerShadows: true, initDom: dragOverBodyArea">
<div class="content g-scrollbox" data-scroller-shadows-content>
<div class="content-wrapper">
<div class="listThreadUidDesc" data-bind="visible: '' !== messageListEndThreadUid(), click: cancelThreadUid">
<i class="icon-left" data-bind="click: cancelThreadUid"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE_LIST/BACK_TO_MESSAGE_LIST"></span>
</div>
<div class="listSearchDesc" data-bind="visible: '' !== messageListSearchDesc()">
<span data-bind="text: messageListSearchDesc"></span>
</div>
<div class="listDragOver" data-bind="css: {'viewAppendArea': dragOver() && '' === messageListError() && !popupVisibility(), 'dragOverEnter': dragOverEnter }, initDom: dragOverArea">
<i class="icon-down e-icon"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE_LIST/PUT_MESSAGE_HERE"></span>
</div>
<div class="listClear" data-bind="visible: clearListIsVisible()">
<span class="g-ui-link i18n" data-i18n="MESSAGE_LIST/BUTTON_EMPTY_FOLDER" data-bind="command: clearCommand"></span>
</div>
<div class="listError" data-bind="visible: !dragOver() && '' !== messageListError()">
<span class="error" data-bind="text: messageListError"></span>
</div>
<div class="listEmptyList" data-bind="visible: !dragOver() && 0 === messageList().length && !messageListCompleteLoadingThrottle() && '' === messageListError() && '' === messageListSearch()">
<span class="i18n" data-i18n="MESSAGE_LIST/EMPTY_LIST"></span>
</div>
<div class="listEmptyListLoading" data-bind="visible: !dragOver() && 0 === messageList().length &&
messageListCompleteLoadingThrottle() && '' === messageListError()">
<span class="i18n" data-i18n="MESSAGE_LIST/LIST_LOADING"></span><span class="textLoadingAnimationD1">.</span><span class="textLoadingAnimationD2">.</span><span class="textLoadingAnimationD3">.</span>
</div>
<div class="listEmptySearchList" data-bind="visible: !dragOver() && 0 === messageList().length && !messageListCompleteLoadingThrottle() && '' === messageListError() && '' !== messageListSearch()">
<span class="i18n" data-i18n="MESSAGE_LIST/EMPTY_SEARCH_LIST"></span>
</div>
<div data-bind="draggable: dragAndDronHelper, droppableSelector: '.b-folders .content.g-scrollbox'">
<div class="messageListPlace" data-bind="template: { name: messageListItemTemplate(), foreach: messageList }"></div>
</div>
</div>
</div>
</div>
<div class="mainDelimiter footerDelimiter"></div>
<div class="b-footer thm-message-list-bottom-toolbar">
<span data-tooltip-i18n="off" data-tooltip-mobile="on" data-bind="visible: 0 < userUsageProc(), tooltip: quotaTooltip" class="e-quota">
<span data-bind="text: userUsageProc"></span>%
</span>
<div class="pull-right">
<!-- ko template: { name: 'Pagenator', data: messageListPagenator } --><!-- /ko -->
</div>
</div>
</div>
</div>
</div>

View file

@ -1,447 +1,423 @@
<div id="rl-sub-right">
<div class="messageView" data-bind="css: {'message-selected': isMessageSelected, 'message-focused': messageFocused}">
<div class="toolbar top-toolbar g-ui-user-select-none" data-bind="visible: !usePreviewPane()">
<nobr>
<div class="messageButtons btn-toolbar">
<div class="btn-group" data-tooltip-join="top" data-bind="tooltip: 'MESSAGE/BUTTON_CLOSE'">
<a class="btn single btn-dark-disabled-border buttonClose" data-bind="command: closeMessageCommand">
<i class="icon-remove"></i>
</a>
</div>
<div class="btn-group">&nbsp;</div>
<div class="btn-group" data-tooltip-join="top" data-bind="visible: isDraftFolder(), tooltip: 'MESSAGE/BUTTON_EDIT'">
<a class="btn single btn-success buttonEdit" data-bind="command: messageEditCommand">
<i class="icon-pencil icon-white"></i>
</a>
</div>
<div class="btn-group" data-bind="visible: !usePreviewPane()">&nbsp;</div>
<div class="btn-group" data-bind="visible: !usePreviewPane()">
<a class="btn first btn-dark-disabled-border button-archive" data-tooltip-join="top" data-bind="visible: !isDraftFolder() && !isArchiveFolder() && !isArchiveDisabled(), command: archiveCommand, tooltip: 'MESSAGE/BUTTON_ARCHIVE'">
<i class="icon-archive"></i>
</a>
<a class="btn btn-dark-disabled-border button-spam" data-tooltip-join="top" data-bind="visible: !isDraftFolder() && !isSentFolder() && !isSpamFolder() && !isSpamDisabled(), command: spamCommand, tooltip: 'MESSAGE/BUTTON_SPAM'">
<i class="icon-warning"></i>
</a>
<a class="btn btn-dark-disabled-border button-not-spam" data-tooltip-join="top" data-bind="visible: !isDraftFolder() && !isSentFolder() && isSpamFolder() && !isSpamDisabled(), command: notSpamCommand, tooltip: 'MESSAGE/BUTTON_NOT_SPAM'">
<i class="icon-check-mark-circle-two"></i>
</a>
<a class="btn last btn-dark-disabled-border button-delete" data-tooltip-join="top" data-bind="command: deleteCommand, tooltip: 'MESSAGE/BUTTON_DELETE'">
<i class="icon-trash"></i>
</a>
</div>
<div class="btn-group">&nbsp;</div>
<div class="btn-group hide-on-mobile" data-bind="visible: !usePreviewPane()">
<a class="btn btn-thin first btn-dark-disabled-border buttonUp" data-bind="command: goUpCommand">
<i class="icon-left-middle"></i>
</a>
<a class="btn btn-thin last btn-dark-disabled-border buttonDown" data-bind="command: goDownCommand">
<i class="icon-right-middle"></i>
</a>
</div>
</div>
</nobr>
</div>
<div class="b-content b-message-view-wrapper thm-message-view-background-color">
<div style="height: 100%">
<div class="b-message-view-backdrop" data-bind="visible: moveAction">
<div class="backdrop-message-wrp">
<div class="backdrop-message">
<i class="icon-folder" style="padding: 0 7px; font-size: 24px; width: 24px; line-height: 24px;"></i>
<span class="i18n" style="vertical-align: middle; padding: 0 7px" data-i18n="MESSAGE/MESSAGE_VIEW_MOVE_DESC"></span>
</div>
</div>
</div>
<div class="b-message-view-checked-helper" data-bind="visible: !message() && '' === messageError() && hasCheckedMessages()">
<span data-bind="text: printableCheckedMessageCount()"></span>
<i class="icon-mail"></i>
</div>
<div class="b-message-view-desc error" data-bind="visible: !message() && '' !== messageError() && !hasCheckedMessages()">
<span class="text" data-bind="text: messageError()"></span>
</div>
<div data-bind="visible: !message() && '' === messageError() && !hasCheckedMessages()" style="height: 100%">
<div class="b-message-view-desc" data-bind="visible: !logoIframe">
<span class="i18n" data-bind="visible: !logoImg" data-i18n="MESSAGE/MESSAGE_VIEW_DESC"></span>
<div class="logoPlace" data-bind="visible: logoImg, if: logoImg">
<img style="height: 99%" data-bind="attr: { 'src': logoImg }" />
</div>
</div>
<div class="b-message-view-iframe" data-bind="visible: logoIframe, if: logoIframe" style="position: relative; height: 100%">
<iframe src="javascript:1;" tabindex="-1" frameborder="0"
style="border: none; width: 100%; height: 100%; position: absolute; top: 0px; left: 0px; right: 0px; bottom: 0px;"
data-bind="attr: {'src': logoIframe}"></iframe>
<div class="b-message-view-iframe-backdrop"></div>
</div>
</div>
<div class="message-fixed-button-toolbar clearfix" data-bind="visible: message">
<nobr>
<div class="btn-group pull-right" style="margin-right: -11px;">
<div class="btn-group pull-right" data-bind="registrateBootstrapDropdown: true, visible: allowComposer || allowMessageListActions || allowMessageActions">
<a class="btn btn-thin-2 btn-transparent last btn-dark-disabled-border dropdown-toggle buttonMore" id="more-view-dropdown-id" href="#" tabindex="-1" data-toggle="dropdown" data-tooltip-join="bottom" style="margin-left: -4px; margin-right: 2px" data-bind="command: messageVisibilityCommand, css: {'first': !allowComposer}">
<span data-bind="visible: !allowComposer" class="icon-ellipsis-alt"></span>
<span data-bind="visible: allowComposer" class="caret"></span>
</a>
<ul class="dropdown-menu g-ui-menu" role="menu" aria-labelledby="more-view-dropdown-id">
<div data-bind="visible: allowComposer && !isDraftFolder()">
<li class="e-item" role="presentation">
<a class="e-link menuitem" href="#" tabindex="-1" data-bind="command: replyCommand">
<i class="icon-reply"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE/BUTTON_REPLY"></span>
</a>
</li>
<li class="e-item" role="presentation">
<a class="e-link menuitem" href="#" tabindex="-1" data-bind="command: replyAllCommand">
<i class="icon-reply-all"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE/BUTTON_REPLY_ALL"></span>
</a>
</li>
<li class="e-item" role="presentation">
<a class="e-link menuitem" href="#" tabindex="-1" data-bind="command: forwardCommand">
<i class="icon-forward"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE/BUTTON_FORWARD"></span>
</a>
</li>
<li class="e-item" role="presentation">
<a class="e-link menuitem" href="#" tabindex="-1" data-bind="command: editAsNewCommand">
<i class="icon-pencil"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE/BUTTON_EDIT_AS_NEW"></span>
</a>
</li>
<li class="e-item" role="presentation">
<a class="e-link menuitem" href="#" tabindex="-1" data-bind="command: forwardAsAttachmentCommand">
<i class="icon-forward"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE/BUTTON_FORWARD_AS_ATTACHMENT"></span>
</a>
</li>
</div>
<div data-bind="visible: allowMessageListActions && usePreviewPane()">
<li class="divider" role="presentation" data-bind="visible: allowComposer && !isDraftFolder()"></li>
<li class="e-item" role="presentation" data-bind="visible: !isDraftFolder() && !isArchiveFolder() && !isArchiveDisabled()">
<a target="_blank" class="e-link menuitem" href="#" tabindex="-1" data-bind="command: archiveCommand">
<i class="icon-archive"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE/BUTTON_ARCHIVE"></span>
</a>
</li>
<li class="e-item" role="presentation" data-bind="visible: !isDraftFolder() && !isSentFolder() && !isSpamFolder() && !isSpamDisabled()">
<a target="_blank" class="e-link menuitem" href="#" tabindex="-1" data-bind="command: spamCommand">
<i class="icon-warning"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE/BUTTON_SPAM"></span>
</a>
</li>
<li class="e-item" role="presentation" data-bind="visible: !isDraftFolder() && !isSentFolder() && isSpamFolder() && !isSpamDisabled()">
<a target="_blank" class="e-link menuitem" href="#" tabindex="-1" data-bind="command: notSpamCommand">
<i class="icon-check-mark-circle-two"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE/BUTTON_NOT_SPAM"></span>
</a>
</li>
<li class="e-item" role="presentation">
<a target="_blank" class="e-link menuitem" href="#" tabindex="-1" data-bind="command: deleteCommand">
<i class="icon-trash"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE/BUTTON_DELETE"></span>
</a>
</li>
<li class="e-item" role="presentation" data-bind="visible: message() && message().hasUnsubsribeLinks()">
<a target="_blank" class="e-link menuitem" href="#" tabindex="-1" data-bind="link: viewUnsubscribeLink()">
<i class="icon-remove"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE/BUTTON_UNSUBSCRIBE"></span>
</a>
</li>
</div>
<div data-bind="visible: allowMessageActions">
<li class="divider" role="presentation"
data-bind="visible: (allowComposer && !isDraftFolder()) || (allowMessageListActions && usePreviewPane())"></li>
<li class="e-item" role="presentation">
<a target="_blank" class="e-link menuitem" href="#" tabindex="-1" data-bind="click: function () { if (message()) { message().printMessage(); }} ">
<i class="icon-print"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE/MENU_PRINT"></span>
</a>
</li>
<li class="e-item" role="presentation">
<a target="_blank" class="e-link menuitem" href="#" tabindex="-1" data-bind="click: function () { if (message()) { message().viewPopupMessage(); }}">
<i class="icon-popup"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE/BUTTON_IN_NEW_WINDOW"></span>
</a>
</li>
<li class="divider" role="presentation"></li>
<li class="e-item" role="presentation">
<a target="_blank" class="e-link menuitem" href="#" tabindex="-1" data-bind="link: viewViewLink()">
<i class="icon-file-code"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE/MENU_VIEW_ORIGINAL"></span>
</a>
</li>
<li class="e-item" role="presentation">
<a target="_blank" class="e-link menuitem" href="#" tabindex="-1" data-bind="link: viewDownloadLink()">
<i class="icon-download"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE/MENU_DOWNLOAD_ORIGINAL"></span>
</a>
</li>
</div>
</ul>
</div>
<a class="btn btn-thin-2 btn-transparent first btn-dark-disabled-border buttonReply pull-right" data-tooltip-join="bottom"
data-bind="visible: 'reply' === lastReplyAction() && allowComposer, command: replyCommand, tooltip: 'MESSAGE/BUTTON_REPLY'">
<i class="icon-reply"></i>
</a>
<a class="btn btn-thin-2 btn-transparent first btn-dark-disabled-border buttonReplyAll pull-right" data-tooltip-join="bottom"
data-bind="visible: 'replyall' === lastReplyAction() && allowComposer, command: replyAllCommand, tooltip: 'MESSAGE/BUTTON_REPLY_ALL'">
<i class="icon-reply-all"></i>
</a>
<a class="btn btn-thin-2 btn-transparent first btn-dark-disabled-border buttonForward pull-right" data-tooltip-join="bottom"
data-bind="visible: 'forward' === lastReplyAction() && allowComposer, command: forwardCommand, tooltip: 'MESSAGE/BUTTON_FORWARD'">
<i class="icon-forward"></i>
</a>
</div>
<div class="btn-group pull-right hide-on-mobile" data-tooltip-join="right" data-bind="visible: isDraftFolder(), tooltip: 'MESSAGE/BUTTON_EDIT'" style="margin-right: 5px">
<a class="btn single btn-success buttonEdit" data-bind="command: messageEditCommand">
<i class="icon-pencil icon-white"></i>
</a>
</div>
</nobr>
</div>
<div data-bind="visible: message">
<div class="messageItemHeader" data-bind="css: {'emptySubject': '' === viewSubject()}">
<div class="subjectParent">
<button class="close" data-bind="command: closeMessageCommand" style="margin-top: -2px;">&times;</button>
<span class="infoParent g-ui-user-select-none" data-bind="click: function() { showFullInfo(!showFullInfo()); }">
<i class="icon-info" style="padding-top: 1px;"></i>
</span>
<span class="flagParent g-ui-user-select-none">
<i class="icon-star-empty flagOff" data-bind="css: {'icon-star flagOn': viewIsFlagged, 'icon-star-empty flagOff': !viewIsFlagged()}" style="padding-top: 2px;"></i>
</span>
<b style="color: red; margin-right: 5px" data-bind="visible: viewIsImportant">!</b>
<span class="subject" data-bind="text: viewSubject, title: viewSubject, event: { 'dblclick': toggleFullScreen }"></span>
<span class="i18n emptySubjectText" data-i18n="MESSAGE/EMPTY_SUBJECT_TEXT" data-bind="event: { 'dblclick': toggleFullScreen }"></span>
</div>
<div>
<div>
<img class="fromPic" data-bind="visible: viewUserPicVisible, attr: {'src': viewUserPic() }">
<div style="overflow: hidden;">
<div class="informationShort" data-bind="event: { 'dblclick': toggleFullScreen }">
<span>
<span class="from" data-bind="html: viewFromShort, title: viewFrom"></span>
<span data-bind="visible: viewFromDkimVisibility">
&nbsp;
<i data-bind="css: viewFromDkimStatusIconClass, title: viewFromDkimStatusTitle"></i>
</span>
</span>
<span data-bind="visible: 0 < viewTimeStamp()">
(<span class="date" data-moment-format="FULL" data-bind="moment: viewTimeStamp"></span>)
</span>
</div>
<div class="informationShortWrp">
<div class="informationShort" data-bind="visible: viewTo, event: { 'dblclick': toggleFullScreen }">
<span>
<span class="i18n uiLabel labelTo" data-i18n="MESSAGE/LABEL_TO"
></span>:&nbsp;<span class="to" data-bind="text: viewTo"></span>
</span>
</div>
<div class="informationShort" data-bind="visible: viewCc, event: { 'dblclick': toggleFullScreen }">
<span>
<span class="i18n uiLabel labelTo" data-i18n="MESSAGE/LABEL_CC"
></span>:&nbsp;<span class="to" data-bind="text: viewCc"></span>
</span>
</div>
</div>
</div>
<div class="clearfix"></div>
</div>
<div class="informationFull" data-bind="visible: showFullInfo()">
<table>
<tr data-bind="visible: '' !== viewFrom()">
<td><span class="i18n uiLabel" data-i18n="MESSAGE/LABEL_FROM"></span></td>
<td>
<span class="pull-right size" data-bind="text: viewSize"></span>
<span class="from uiLabelValue" data-bind="text: viewFrom, title: viewFrom"></span>
</div>
</td>
</tr>
<tr data-bind="visible: '' !== viewTo()">
<td><span class="i18n uiLabel" data-i18n="MESSAGE/LABEL_TO"></span></td>
<td><span class="to uiLabelValue" data-bind="text: viewTo, title: viewTo"></span></td>
</tr>
<tr data-bind="visible: '' !== viewCc()">
<td><span class="i18n uiLabel" data-i18n="MESSAGE/LABEL_CC"></span></td>
<td><span class="cc uiLabelValue" data-bind="text: viewCc, title: viewCc"></span></td>
</tr>
<tr data-bind="visible: '' !== viewBcc()">
<td><span class="i18n uiLabel" data-i18n="MESSAGE/LABEL_BCC"></span></td>
<td><span class="bcc uiLabelValue" data-bind="text: viewBcc, title: viewBcc"></span></td>
</tr>
<tr data-bind="visible: '' !== viewReplyTo()">
<td><span class="i18n uiLabel" data-i18n="MESSAGE/LABEL_REPLY_TO"></span></td>
<td><span class="replyTo uiLabelValue" data-bind="text: viewReplyTo, title: viewReplyTo"></span></td>
</tr>
<tr data-bind="visible: 0 < viewTimeStamp()">
<td><span class="i18n uiLabel" data-i18n="MESSAGE/LABEL_DATE"></span></td>
<td>
<span class="date uiLabelValue" data-moment-format="FULL" data-bind="moment: viewTimeStamp"></span>
&nbsp;
(<span class="date uiLabelValue" data-moment-format="FROMNOW" data-bind="moment: viewTimeStamp"></span>)
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="messageItem fixIndex" data-bind="css: viewLineAsCss(), nano: true, scrollerShadows: true, attr: {'style': 'top:' + viewBodyTopValue() + 'px' }">
<div class="content g-scrollbox" tabindex="0" data-scroller-shadows-content data-bind="hasfocus: messageDomFocused, css: { 'focused': messageDomFocused },
style: {'background-color': messageLoadingThrottle() ? '' : bodyBackgroundColor()}">
<div class="content-wrapper">
<div>
<span class="buttonUp" data-bind="click: scrollMessageToTop">
<i class="icon-up"></i>
</span>
<span class="buttonFull" data-bind="click: fullScreen">
<i class="icon-arrows-out"></i>
</span>
<span class="buttonUnFull" data-bind="click: unFullScreen">
<i class="icon-arrows-in"></i>
</span>
<div class="line-loading e-strip-animation" data-bind="visible: messageLoadingThrottle()"></div>
<div class="loading g-ui-min-height-300" data-bind="visible: messageLoadingThrottle()">
<span class="i18n text" data-i18n="MESSAGE/MESSAGE_LOADING"></span><span class="textLoadingAnimationD1">.</span><span class="textLoadingAnimationD2">.</span><span class="textLoadingAnimationD3">.</span>
</div>
</div>
<div class="g-ui-min-height-300 content-content" data-bind="visible: !messageLoadingThrottle()">
<div class="bodySubHeader">
<div class="showImages" data-bind="visible: message() && message().hasImages(), click: function() { showImages(message()); }">
<i class="icon-image"></i>
&nbsp;&nbsp;
<span class="i18n text" data-i18n="MESSAGE/BUTTON_SHOW_IMAGES"></span>
</div>
<div class="readReceipt" data-bind="visible: message() && !isDraftOrSentFolder() && '' !== message().readReceipt() && !message().isReadReceipt(), click: function() { readReceipt(message()); }">
<i class="icon-mail"></i>
&nbsp;&nbsp;
<span class="i18n text" data-i18n="MESSAGE/BUTTON_NOTIFY_READ_RECEIPT"></span>
</div>
<div class="attachmentsPlace" data-bind="visible: message() && message().hasVisibleAttachments(),
css: {'selection-mode' : showAttachmnetControls, 'unselectedAttachmentsError': highlightUnselectedAttachments}">
<ul class="attachmentList" data-bind="foreach: message() ? message().attachments() : []">
<li class="attachmentItem clearfix" draggable="true" data-tooltip-join="top"
data-bind="visible: !isLinked, event: { 'dragstart': eventDragStart }, attr: { 'title': fileName }, css: {'checked': checked}">
<div class="attachmentIconParent pull-left" data-bind="css: { 'hasPreview': hasPreview(), 'hasPreplay': hasPreplay(), 'isImage': isImage() }">
<div class="hidePreview">
<div class="iconMain">
<i class="attachmentIcon attachmentMainIcon" data-bind="css: iconClass()"></i>
<i class="attachmentIconText attachmentMainIconText" data-bind="text: iconText()"></i>
</div>
</div>
<div class="showPreview">
<a data-bind="click: $root.attachmentPreview, css: {'attachmentImagePreview': isImage(), 'visible': !isLinked}, attr: { 'title': fileName, 'href': linkPreviewMain() }" target="_blank">
<div class="iconMain">
<i class="attachmentIcon attachmentMainIcon" data-bind="css: iconClass()"></i>
<i class="attachmentIconText attachmentMainIconText" data-bind="text: iconText()"></i>
</div>
<div class="iconBG" data-bind="attr: { 'style': linkThumbnailPreviewStyle() }"></div>
<div class="iconPreview">
<i class="attachmentIcon icon-eye show-hover"></i>
</div>
</a>
</div>
<div class="showPreplay">
<div class="iconMain">
<i class="attachmentIcon attachmentMainIcon" data-bind="css: iconClass()"></i>
</div>
<div class="iconPreview">
<i class="attachmentIcon icon-play show-hover"></i>
</div>
</div>
</div>
<div class="attachmentNameParent">
<div style="white-space: nowrap; text-overflow: ellipsis; overflow: hidden;">
<span class="attachmentName" data-bind="text: fileName"></span>&nbsp;
</div>
<div>
<span class="attachmentSize" data-bind="text: friendlySize"></span>&nbsp;
</div>
</div>
<div class="checkedParent">
<i class="checkboxAttachment icon-checkbox-unchecked"
data-bind="css: checked() ? 'checkboxMessage icon-checkbox-checked' : 'checkboxMessage icon-checkbox-unchecked',
click: function () { checked(!checked()); return false }"></i>
</div>
</li>
</ul>
<i class="icon-cog controls-handle" data-bind="visible: allowAttachmnetControls() && !showAttachmnetControls(), click: function () { showAttachmnetControls(true); showAttachmnetControlsState(true); }"></i>
</div>
<div class="attachmentsControls"
data-bind="visible: showAttachmnetControls() && message() && message().hasVisibleAttachments()">
<span data-bind="visible: downloadAsZipAllowed">
<i class="icon-remove iconcolor-red" data-bind="visible: downloadAsZipError"></i>
<i class="icon-file-zip" data-bind="visible: !downloadAsZipError(),
css: {'icon-file-zip': !downloadAsZipLoading(), 'icon-spinner animated': downloadAsZipLoading()}"></i>
&nbsp;&nbsp;
<span class="g-ui-link" data-bind="click: downloadAsZip">
<span class="i18n" data-i18n="MESSAGE/LINK_DOWNLOAD_AS_ZIP"></span>
</span>
</span>
<span data-bind="visible: saveToOwnCloudAllowed">
&nbsp;&nbsp;&nbsp;&nbsp;
<i class="icon-remove iconcolor-red" data-bind="visible: saveToOwnCloudError"></i>
<i class="icon-ok iconcolor-green" data-bind="visible: saveToOwnCloudSuccess"></i>
<i class="icon-cloud-up" data-bind="visible: !saveToOwnCloudSuccess() && !saveToOwnCloudError(),
css: {'icon-cloud-up': !saveToOwnCloudLoading(), 'icon-spinner animated': saveToOwnCloudLoading()}"></i>
&nbsp;&nbsp;
<span class="g-ui-link" data-bind="click: saveToOwnCloud">
<span class="i18n" data-i18n="MESSAGE/LINK_SAVE_TO_CLOUD"></span>
</span>
</span>
<span data-bind="visible: saveToDropboxAllowed">
&nbsp;&nbsp;&nbsp;&nbsp;
<i class="icon-remove iconcolor-red" data-bind="visible: saveToDropboxError"></i>
<i class="icon-ok iconcolor-green" data-bind="visible: saveToDropboxSuccess"></i>
<i class="icon-dropbox" data-bind="visible: !saveToDropboxSuccess() && !saveToDropboxError(),
css: {'icon-dropbox': !saveToDropboxLoading(), 'icon-spinner animated': saveToDropboxLoading()}"></i>
&nbsp;&nbsp;
<span class="g-ui-link" data-bind="click: saveToDropbox">
<span class="i18n" data-i18n="MESSAGE/LINK_SAVE_TO_DROPBOX"></span>
</span>
</span>
<button type="button" class="close" style="margin-right: 5px;"
data-bind="click: function () { showAttachmnetControls(false); showAttachmnetControlsState(false); }">×</button>
</div>
</div>
<div class="bodyText g-ui-min-height-300 rl-mv-root"
data-bind="initDom: messagesBodiesDom"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="rl-sub-right">
<div class="messageView" data-bind="css: {'message-selected': isMessageSelected, 'message-focused': messageFocused}">
<div class="toolbar top-toolbar g-ui-user-select-none" data-bind="visible: !usePreviewPane()">
<nobr>
<div class="messageButtons btn-toolbar">
<div class="btn-group" data-tooltip-join="top" data-bind="tooltip: 'MESSAGE/BUTTON_CLOSE'">
<a class="btn single btn-dark-disabled-border buttonClose" data-bind="command: closeMessageCommand">
<i class="icon-remove"></i>
</a>
</div>
<div class="btn-group">&nbsp;</div>
<div class="btn-group" data-tooltip-join="top" data-bind="visible: isDraftFolder(), tooltip: 'MESSAGE/BUTTON_EDIT'">
<a class="btn single btn-success buttonEdit" data-bind="command: messageEditCommand">
<i class="icon-pencil icon-white"></i>
</a>
</div>
<div class="btn-group" data-bind="visible: !usePreviewPane()">&nbsp;</div>
<div class="btn-group" data-bind="visible: !usePreviewPane()">
<a class="btn first btn-dark-disabled-border button-archive" data-tooltip-join="top" data-bind="visible: !isDraftFolder() && !isArchiveFolder() && !isArchiveDisabled(), command: archiveCommand, tooltip: 'MESSAGE/BUTTON_ARCHIVE'">
<i class="icon-archive"></i>
</a>
<a class="btn btn-dark-disabled-border button-spam" data-tooltip-join="top" data-bind="visible: !isDraftFolder() && !isSentFolder() && !isSpamFolder() && !isSpamDisabled(), command: spamCommand, tooltip: 'MESSAGE/BUTTON_SPAM'">
<i class="icon-warning"></i>
</a>
<a class="btn btn-dark-disabled-border button-not-spam" data-tooltip-join="top" data-bind="visible: !isDraftFolder() && !isSentFolder() && isSpamFolder() && !isSpamDisabled(), command: notSpamCommand, tooltip: 'MESSAGE/BUTTON_NOT_SPAM'">
<i class="icon-check-mark-circle-two"></i>
</a>
<a class="btn last btn-dark-disabled-border button-delete" data-tooltip-join="top" data-bind="command: deleteCommand, tooltip: 'MESSAGE/BUTTON_DELETE'">
<i class="icon-trash"></i>
</a>
</div>
<div class="btn-group">&nbsp;</div>
<div class="btn-group hide-on-mobile" data-bind="visible: !usePreviewPane()">
<a class="btn btn-thin first btn-dark-disabled-border buttonUp" data-bind="command: goUpCommand">
<i class="icon-left-middle"></i>
</a>
<a class="btn btn-thin last btn-dark-disabled-border buttonDown" data-bind="command: goDownCommand">
<i class="icon-right-middle"></i>
</a>
</div>
</div>
</nobr>
</div>
<div class="b-content b-message-view-wrapper thm-message-view-background-color">
<div style="height: 100%">
<div class="b-message-view-backdrop" data-bind="visible: moveAction">
<div class="backdrop-message-wrp">
<div class="backdrop-message">
<i class="icon-folder" style="padding: 0 7px; font-size: 24px; width: 24px; line-height: 24px;"></i>
<span class="i18n" style="vertical-align: middle; padding: 0 7px" data-i18n="MESSAGE/MESSAGE_VIEW_MOVE_DESC"></span>
</div>
</div>
</div>
<div class="b-message-view-checked-helper" data-bind="visible: !message() && '' === messageError() && hasCheckedMessages()">
<span data-bind="text: printableCheckedMessageCount()"></span>
<i class="icon-mail"></i>
</div>
<div class="b-message-view-desc error" data-bind="visible: !message() && '' !== messageError() && !hasCheckedMessages()">
<span class="text" data-bind="text: messageError()"></span>
</div>
<div data-bind="visible: !message() && '' === messageError() && !hasCheckedMessages()" style="height: 100%">
<div class="b-message-view-desc" data-bind="visible: !logoIframe">
<span class="i18n" data-bind="visible: !logoImg" data-i18n="MESSAGE/MESSAGE_VIEW_DESC"></span>
<div class="logoPlace" data-bind="visible: logoImg, if: logoImg">
<img style="height: 99%" data-bind="attr: { 'src': logoImg }" />
</div>
</div>
<div class="b-message-view-iframe" data-bind="visible: logoIframe, if: logoIframe" style="position: relative; height: 100%">
<iframe src="javascript:1;" tabindex="-1" frameborder="0"
style="border: none; width: 100%; height: 100%; position: absolute; top: 0px; left: 0px; right: 0px; bottom: 0px;"
data-bind="attr: {'src': logoIframe}"></iframe>
<div class="b-message-view-iframe-backdrop"></div>
</div>
</div>
<div class="message-fixed-button-toolbar clearfix" data-bind="visible: message">
<nobr>
<div class="btn-group pull-right" style="margin-right: -11px;">
<div class="btn-group pull-right" data-bind="registrateBootstrapDropdown: true, visible: allowComposer || allowMessageListActions || allowMessageActions">
<a class="btn btn-thin-2 btn-transparent last btn-dark-disabled-border dropdown-toggle buttonMore" id="more-view-dropdown-id" href="#" tabindex="-1" data-toggle="dropdown" data-tooltip-join="bottom" style="margin-left: -4px; margin-right: 2px" data-bind="command: messageVisibilityCommand, css: {'first': !allowComposer}">
<span data-bind="visible: !allowComposer" class="icon-ellipsis-alt"></span>
<span data-bind="visible: allowComposer" class="caret"></span>
</a>
<ul class="dropdown-menu g-ui-menu" role="menu" aria-labelledby="more-view-dropdown-id">
<div data-bind="visible: allowComposer && !isDraftFolder()">
<li class="e-item" role="presentation">
<a class="e-link menuitem" href="#" tabindex="-1" data-bind="command: replyCommand">
<i class="icon-reply"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE/BUTTON_REPLY"></span>
</a>
</li>
<li class="e-item" role="presentation">
<a class="e-link menuitem" href="#" tabindex="-1" data-bind="command: replyAllCommand">
<i class="icon-reply-all"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE/BUTTON_REPLY_ALL"></span>
</a>
</li>
<li class="e-item" role="presentation">
<a class="e-link menuitem" href="#" tabindex="-1" data-bind="command: forwardCommand">
<i class="icon-forward"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE/BUTTON_FORWARD"></span>
</a>
</li>
<li class="e-item" role="presentation">
<a class="e-link menuitem" href="#" tabindex="-1" data-bind="command: editAsNewCommand">
<i class="icon-pencil"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE/BUTTON_EDIT_AS_NEW"></span>
</a>
</li>
<li class="e-item" role="presentation">
<a class="e-link menuitem" href="#" tabindex="-1" data-bind="command: forwardAsAttachmentCommand">
<i class="icon-forward"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE/BUTTON_FORWARD_AS_ATTACHMENT"></span>
</a>
</li>
</div>
<div data-bind="visible: allowMessageListActions && usePreviewPane()">
<li class="divider" role="presentation" data-bind="visible: allowComposer && !isDraftFolder()"></li>
<li class="e-item" role="presentation" data-bind="visible: !isDraftFolder() && !isArchiveFolder() && !isArchiveDisabled()">
<a target="_blank" class="e-link menuitem" href="#" tabindex="-1" data-bind="command: archiveCommand">
<i class="icon-archive"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE/BUTTON_ARCHIVE"></span>
</a>
</li>
<li class="e-item" role="presentation" data-bind="visible: !isDraftFolder() && !isSentFolder() && !isSpamFolder() && !isSpamDisabled()">
<a target="_blank" class="e-link menuitem" href="#" tabindex="-1" data-bind="command: spamCommand">
<i class="icon-warning"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE/BUTTON_SPAM"></span>
</a>
</li>
<li class="e-item" role="presentation" data-bind="visible: !isDraftFolder() && !isSentFolder() && isSpamFolder() && !isSpamDisabled()">
<a target="_blank" class="e-link menuitem" href="#" tabindex="-1" data-bind="command: notSpamCommand">
<i class="icon-check-mark-circle-two"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE/BUTTON_NOT_SPAM"></span>
</a>
</li>
<li class="e-item" role="presentation">
<a target="_blank" class="e-link menuitem" href="#" tabindex="-1" data-bind="command: deleteCommand">
<i class="icon-trash"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE/BUTTON_DELETE"></span>
</a>
</li>
<li class="e-item" role="presentation" data-bind="visible: message() && message().hasUnsubsribeLinks()">
<a target="_blank" class="e-link menuitem" href="#" tabindex="-1" data-bind="link: viewUnsubscribeLink()">
<i class="icon-remove"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE/BUTTON_UNSUBSCRIBE"></span>
</a>
</li>
</div>
<div data-bind="visible: allowMessageActions">
<li class="divider" role="presentation"
data-bind="visible: (allowComposer && !isDraftFolder()) || (allowMessageListActions && usePreviewPane())"></li>
<li class="e-item" role="presentation">
<a target="_blank" class="e-link menuitem" href="#" tabindex="-1" data-bind="click: function () { if (message()) { message().printMessage(); }} ">
<i class="icon-print"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE/MENU_PRINT"></span>
</a>
</li>
<li class="e-item" role="presentation">
<a target="_blank" class="e-link menuitem" href="#" tabindex="-1" data-bind="click: function () { if (message()) { message().viewPopupMessage(); }}">
<i class="icon-popup"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE/BUTTON_IN_NEW_WINDOW"></span>
</a>
</li>
<li class="divider" role="presentation"></li>
<li class="e-item" role="presentation">
<a target="_blank" class="e-link menuitem" href="#" tabindex="-1" data-bind="link: viewViewLink()">
<i class="icon-file-code"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE/MENU_VIEW_ORIGINAL"></span>
</a>
</li>
<li class="e-item" role="presentation">
<a target="_blank" class="e-link menuitem" href="#" tabindex="-1" data-bind="link: viewDownloadLink()">
<i class="icon-download"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="MESSAGE/MENU_DOWNLOAD_ORIGINAL"></span>
</a>
</li>
</div>
</ul>
</div>
<a class="btn btn-thin-2 btn-transparent first btn-dark-disabled-border buttonReply pull-right" data-tooltip-join="bottom"
data-bind="visible: 'reply' === lastReplyAction() && allowComposer, command: replyCommand, tooltip: 'MESSAGE/BUTTON_REPLY'">
<i class="icon-reply"></i>
</a>
<a class="btn btn-thin-2 btn-transparent first btn-dark-disabled-border buttonReplyAll pull-right" data-tooltip-join="bottom"
data-bind="visible: 'replyall' === lastReplyAction() && allowComposer, command: replyAllCommand, tooltip: 'MESSAGE/BUTTON_REPLY_ALL'">
<i class="icon-reply-all"></i>
</a>
<a class="btn btn-thin-2 btn-transparent first btn-dark-disabled-border buttonForward pull-right" data-tooltip-join="bottom"
data-bind="visible: 'forward' === lastReplyAction() && allowComposer, command: forwardCommand, tooltip: 'MESSAGE/BUTTON_FORWARD'">
<i class="icon-forward"></i>
</a>
</div>
<div class="btn-group pull-right hide-on-mobile" data-tooltip-join="right" data-bind="visible: isDraftFolder(), tooltip: 'MESSAGE/BUTTON_EDIT'" style="margin-right: 5px">
<a class="btn single btn-success buttonEdit" data-bind="command: messageEditCommand">
<i class="icon-pencil icon-white"></i>
</a>
</div>
</nobr>
</div>
<div data-bind="visible: message">
<div class="messageItemHeader" data-bind="css: {'emptySubject': '' === viewSubject()}">
<div class="subjectParent">
<button class="close" data-bind="command: closeMessageCommand" style="margin-top: -2px;">&times;</button>
<span class="infoParent g-ui-user-select-none" data-bind="click: function() { showFullInfo(!showFullInfo()); }">
<i class="icon-info" style="padding-top: 1px;"></i>
</span>
<span class="flagParent g-ui-user-select-none">
<i class="icon-star-empty flagOff" data-bind="css: {'icon-star flagOn': viewIsFlagged, 'icon-star-empty flagOff': !viewIsFlagged()}" style="padding-top: 2px;"></i>
</span>
<b style="color: red; margin-right: 5px" data-bind="visible: viewIsImportant">!</b>
<span class="subject" data-bind="text: viewSubject, title: viewSubject, event: { 'dblclick': toggleFullScreen }"></span>
<span class="i18n emptySubjectText" data-i18n="MESSAGE/EMPTY_SUBJECT_TEXT" data-bind="event: { 'dblclick': toggleFullScreen }"></span>
</div>
<div>
<div>
<img class="fromPic" data-bind="visible: viewUserPicVisible, attr: {'src': viewUserPic() }">
<div style="overflow: hidden;">
<div class="informationShort" data-bind="event: { 'dblclick': toggleFullScreen }">
<span>
<span class="from" data-bind="html: viewFromShort, title: viewFrom"></span>
<span data-bind="visible: viewFromDkimVisibility">
&nbsp;
<i data-bind="css: viewFromDkimStatusIconClass, title: viewFromDkimStatusTitle"></i>
</span>
</span>
<span data-bind="visible: 0 < viewTimeStamp()">
(<span class="date" data-moment-format="FULL" data-bind="moment: viewTimeStamp"></span>)
</span>
</div>
<div class="informationShortWrp">
<div class="informationShort" data-bind="visible: viewTo, event: { 'dblclick': toggleFullScreen }">
<span>
<span class="i18n uiLabel labelTo" data-i18n="MESSAGE/LABEL_TO"
></span>:&nbsp;<span class="to" data-bind="text: viewTo"></span>
</span>
</div>
<div class="informationShort" data-bind="visible: viewCc, event: { 'dblclick': toggleFullScreen }">
<span>
<span class="i18n uiLabel labelTo" data-i18n="MESSAGE/LABEL_CC"
></span>:&nbsp;<span class="to" data-bind="text: viewCc"></span>
</span>
</div>
</div>
</div>
<div class="clearfix"></div>
</div>
<div class="informationFull" data-bind="visible: showFullInfo()">
<table>
<tr data-bind="visible: '' !== viewFrom()">
<td><span class="i18n uiLabel" data-i18n="MESSAGE/LABEL_FROM"></span></td>
<td>
<span class="pull-right size" data-bind="text: viewSize"></span>
<span class="from uiLabelValue" data-bind="text: viewFrom, title: viewFrom"></span>
</div>
</td>
</tr>
<tr data-bind="visible: '' !== viewTo()">
<td><span class="i18n uiLabel" data-i18n="MESSAGE/LABEL_TO"></span></td>
<td><span class="to uiLabelValue" data-bind="text: viewTo, title: viewTo"></span></td>
</tr>
<tr data-bind="visible: '' !== viewCc()">
<td><span class="i18n uiLabel" data-i18n="MESSAGE/LABEL_CC"></span></td>
<td><span class="cc uiLabelValue" data-bind="text: viewCc, title: viewCc"></span></td>
</tr>
<tr data-bind="visible: '' !== viewBcc()">
<td><span class="i18n uiLabel" data-i18n="MESSAGE/LABEL_BCC"></span></td>
<td><span class="bcc uiLabelValue" data-bind="text: viewBcc, title: viewBcc"></span></td>
</tr>
<tr data-bind="visible: '' !== viewReplyTo()">
<td><span class="i18n uiLabel" data-i18n="MESSAGE/LABEL_REPLY_TO"></span></td>
<td><span class="replyTo uiLabelValue" data-bind="text: viewReplyTo, title: viewReplyTo"></span></td>
</tr>
<tr data-bind="visible: 0 < viewTimeStamp()">
<td><span class="i18n uiLabel" data-i18n="MESSAGE/LABEL_DATE"></span></td>
<td>
<span class="date uiLabelValue" data-moment-format="FULL" data-bind="moment: viewTimeStamp"></span>
&nbsp;
(<span class="date uiLabelValue" data-moment-format="FROMNOW" data-bind="moment: viewTimeStamp"></span>)
</td>
</tr>
</table>
</div>
</div>
</div>
<div class="messageItem fixIndex" data-bind="css: viewLineAsCss(), nano: true, scrollerShadows: true, attr: {'style': 'top:' + viewBodyTopValue() + 'px' }">
<div class="content g-scrollbox" tabindex="0" data-scroller-shadows-content data-bind="hasfocus: messageDomFocused, css: { 'focused': messageDomFocused },
style: {'background-color': messageLoadingThrottle() ? '' : bodyBackgroundColor()}">
<div class="content-wrapper">
<div>
<span class="buttonUp" data-bind="click: scrollMessageToTop">
<i class="icon-up"></i>
</span>
<span class="buttonFull" data-bind="click: fullScreen">
<i class="icon-arrows-out"></i>
</span>
<span class="buttonUnFull" data-bind="click: unFullScreen">
<i class="icon-arrows-in"></i>
</span>
<div class="line-loading e-strip-animation" data-bind="visible: messageLoadingThrottle()"></div>
<div class="loading g-ui-min-height-300" data-bind="visible: messageLoadingThrottle()">
<span class="i18n text" data-i18n="MESSAGE/MESSAGE_LOADING"></span><span class="textLoadingAnimationD1">.</span><span class="textLoadingAnimationD2">.</span><span class="textLoadingAnimationD3">.</span>
</div>
</div>
<div class="g-ui-min-height-300 content-content" data-bind="visible: !messageLoadingThrottle()">
<div class="bodySubHeader">
<div class="showImages" data-bind="visible: message() && message().hasImages(), click: function() { showImages(message()); }">
<i class="icon-image"></i>
&nbsp;&nbsp;
<span class="i18n text" data-i18n="MESSAGE/BUTTON_SHOW_IMAGES"></span>
</div>
<div class="readReceipt" data-bind="visible: message() && !isDraftOrSentFolder() && '' !== message().readReceipt() && !message().isReadReceipt(), click: function() { readReceipt(message()); }">
<i class="icon-mail"></i>
&nbsp;&nbsp;
<span class="i18n text" data-i18n="MESSAGE/BUTTON_NOTIFY_READ_RECEIPT"></span>
</div>
<div class="attachmentsPlace" data-bind="visible: message() && message().hasVisibleAttachments(),
css: {'selection-mode' : showAttachmnetControls, 'unselectedAttachmentsError': highlightUnselectedAttachments}">
<ul class="attachmentList" data-bind="foreach: message() ? message().attachments() : []">
<li class="attachmentItem clearfix" draggable="true" data-tooltip-join="top"
data-bind="visible: !isLinked, event: { 'dragstart': eventDragStart }, attr: { 'title': fileName }, css: {'checked': checked}">
<div class="attachmentIconParent pull-left" data-bind="css: { 'hasPreview': hasPreview(), 'hasPreplay': hasPreplay(), 'isImage': isImage() }">
<div class="hidePreview">
<div class="iconMain">
<i class="attachmentIcon attachmentMainIcon" data-bind="css: iconClass()"></i>
<i class="attachmentIconText attachmentMainIconText" data-bind="text: iconText()"></i>
</div>
</div>
<div class="showPreview">
<a data-bind="click: $root.attachmentPreview, css: {'attachmentImagePreview': isImage(), 'visible': !isLinked}, attr: { 'title': fileName, 'href': linkPreviewMain() }" target="_blank">
<div class="iconMain">
<i class="attachmentIcon attachmentMainIcon" data-bind="css: iconClass()"></i>
<i class="attachmentIconText attachmentMainIconText" data-bind="text: iconText()"></i>
</div>
<div class="iconBG" data-bind="attr: { 'style': linkThumbnailPreviewStyle() }"></div>
<div class="iconPreview">
<i class="attachmentIcon icon-eye show-hover"></i>
</div>
</a>
</div>
<div class="showPreplay">
<div class="iconMain">
<i class="attachmentIcon attachmentMainIcon" data-bind="css: iconClass()"></i>
</div>
<div class="iconPreview">
<i class="attachmentIcon icon-play show-hover"></i>
</div>
</div>
</div>
<div class="attachmentNameParent">
<div style="white-space: nowrap; text-overflow: ellipsis; overflow: hidden;">
<span class="attachmentName" data-bind="text: fileName"></span>&nbsp;
</div>
<div>
<span class="attachmentSize" data-bind="text: friendlySize"></span>&nbsp;
</div>
</div>
<div class="checkedParent">
<i class="checkboxAttachment icon-checkbox-unchecked"
data-bind="css: checked() ? 'checkboxMessage icon-checkbox-checked' : 'checkboxMessage icon-checkbox-unchecked',
click: function () { checked(!checked()); return false }"></i>
</div>
</li>
</ul>
<i class="icon-cog controls-handle" data-bind="visible: allowAttachmnetControls() && !showAttachmnetControls(), click: function () { showAttachmnetControls(true); showAttachmnetControlsState(true); }"></i>
</div>
<div class="attachmentsControls"
data-bind="visible: showAttachmnetControls() && message() && message().hasVisibleAttachments()">
<span data-bind="visible: downloadAsZipAllowed">
<i class="icon-remove iconcolor-red" data-bind="visible: downloadAsZipError"></i>
<i class="icon-file-zip" data-bind="visible: !downloadAsZipError(),
css: {'icon-file-zip': !downloadAsZipLoading(), 'icon-spinner animated': downloadAsZipLoading()}"></i>
&nbsp;&nbsp;
<span class="g-ui-link" data-bind="click: downloadAsZip">
<span class="i18n" data-i18n="MESSAGE/LINK_DOWNLOAD_AS_ZIP"></span>
</span>
</span>
<button type="button" class="close" style="margin-right: 5px;"
data-bind="click: function () { showAttachmnetControls(false); showAttachmnetControlsState(false); }">×</button>
</div>
</div>
<div class="bodyText g-ui-min-height-300 rl-mv-root"
data-bind="initDom: messagesBodiesDom"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>

View file

@ -1,50 +1,50 @@
<div class="popups">
<div class="modal hide b-account-add-content g-ui-user-select-none" data-bind="modal: modalVisibility">
<div>
<div class="modal-header">
<button type="button" class="close" data-bind="command: cancelCommand">&times;</button>
<h3>
<span data-bind="visible: isNew" class="i18n" data-i18n="POPUPS_ADD_ACCOUNT/TITLE_ADD_ACCOUNT"></span>
<span data-bind="visible: !isNew()" class="i18n" data-i18n="POPUPS_ADD_ACCOUNT/TITLE_UPDATE_ACCOUNT"></span>
</h3>
</div>
<div class="modal-body">
<div class="form-horizontal">
<div class="alert" data-bind="visible: '' !== submitError()">
<button type="button" class="close-custom" data-bind="click: function () { submitError('') }">&times;</button>
<span data-bind="text: submitError"></span>
<div data-bind="visible: submitErrorAdditional">
<br />
<span data-bind="text: submitErrorAdditional"></span>
</div>
</div>
<br />
<div class="control-group" data-bind="css: {'error': emailError}">
<label class="i18n control-label" data-i18n="LOGIN/LABEL_EMAIL"></label>
<div class="controls">
<label style="margin-top: 5px;" data-bind="visible: !isNew()"><strong data-bind="text: email"></strong></label>
<input type="email" class="inputEmail input-xlarge" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="visible: isNew, textInput: email, onEnter: addAccountCommand, hasfocus: emailFocus" />
</div>
</div>
<div class="control-group" data-bind="css: {'error': passwordError}">
<label class="i18n control-label" data-i18n="LOGIN/LABEL_PASSWORD"></label>
<div class="controls">
<input type="password" class="inputPassword input-xlarge" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: password, onEnter: addAccountCommand" />
</div>
</div>
</div>
</div>
<div class="modal-footer">
<a class="btn buttonAddAccount" data-bind="command: addAccountCommand">
<i data-bind="visible: isNew, css: {'icon-user-add': !submitRequest(), 'icon-spinner animated': submitRequest()}"></i>
<i data-bind="visible: !isNew(), css: {'icon-ok': !submitRequest(), 'icon-spinner animated': submitRequest()}"></i>
&nbsp;&nbsp;
<span data-bind="visible: isNew" class="i18n" data-i18n="POPUPS_ADD_ACCOUNT/BUTTON_ADD_ACCOUNT"></span>
<span data-bind="visible: !isNew()" class="i18n" data-i18n="POPUPS_ADD_ACCOUNT/BUTTON_UPDATE_ACCOUNT"></span>
</a>
</div>
</div>
</div>
</div>
<div class="popups">
<div class="modal hide b-account-add-content g-ui-user-select-none" data-bind="modal: modalVisibility">
<div>
<div class="modal-header">
<button type="button" class="close" data-bind="command: cancelCommand">&times;</button>
<h3>
<span data-bind="visible: isNew" class="i18n" data-i18n="POPUPS_ADD_ACCOUNT/TITLE_ADD_ACCOUNT"></span>
<span data-bind="visible: !isNew()" class="i18n" data-i18n="POPUPS_ADD_ACCOUNT/TITLE_UPDATE_ACCOUNT"></span>
</h3>
</div>
<div class="modal-body">
<div class="form-horizontal">
<div class="alert" data-bind="visible: '' !== submitError()">
<button type="button" class="close-custom" data-bind="click: function () { submitError('') }">&times;</button>
<span data-bind="text: submitError"></span>
<div data-bind="visible: submitErrorAdditional">
<br />
<span data-bind="text: submitErrorAdditional"></span>
</div>
</div>
<br />
<div class="control-group" data-bind="css: {'error': emailError}">
<label class="i18n control-label" data-i18n="LOGIN/LABEL_EMAIL"></label>
<div class="controls">
<label style="margin-top: 5px;" data-bind="visible: !isNew()"><strong data-bind="text: email"></strong></label>
<input type="email" class="inputEmail input-xlarge" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="visible: isNew, textInput: email, onEnter: addAccountCommand, hasfocus: emailFocus" />
</div>
</div>
<div class="control-group" data-bind="css: {'error': passwordError}">
<label class="i18n control-label" data-i18n="LOGIN/LABEL_PASSWORD"></label>
<div class="controls">
<input type="password" class="inputPassword input-xlarge" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: password, onEnter: addAccountCommand" />
</div>
</div>
</div>
</div>
<div class="modal-footer">
<a class="btn buttonAddAccount" data-bind="command: addAccountCommand">
<i data-bind="visible: isNew, css: {'icon-user-add': !submitRequest(), 'icon-spinner animated': submitRequest()}"></i>
<i data-bind="visible: !isNew(), css: {'icon-ok': !submitRequest(), 'icon-spinner animated': submitRequest()}"></i>
&nbsp;&nbsp;
<span data-bind="visible: isNew" class="i18n" data-i18n="POPUPS_ADD_ACCOUNT/BUTTON_ADD_ACCOUNT"></span>
<span data-bind="visible: !isNew()" class="i18n" data-i18n="POPUPS_ADD_ACCOUNT/BUTTON_UPDATE_ACCOUNT"></span>
</a>
</div>
</div>
</div>
</div>

View file

@ -1,27 +1,27 @@
<div class="popups">
<div class="modal hide b-open-pgp-key-add-content g-ui-user-select-none" data-bind="modal: modalVisibility">
<div>
<div class="modal-header">
<button type="button" class="close" data-bind="command: cancelCommand">&times;</button>
<h3>
<span class="i18n" data-i18n="POPUPS_IMPORT_OPEN_PGP_KEY/TITLE_IMPORT_OPEN_PGP_KEY"></span>
</h3>
</div>
<div class="modal-body">
<div class="alert" data-bind="visible: key.error() && key.errorMessage(), text: key.errorMessage"></div>
<div class="form-horizontal">
<div class="control-group" data-bind="css: {'error': key.error}">
<textarea class="inputKey input-xxlarge" rows="14" autocomplete="off" data-bind="value: key, hasfocus: key.focus"></textarea>
</div>
</div>
</div>
<div class="modal-footer">
<a class="btn buttonAddAccount" data-bind="command: addOpenPgpKeyCommand">
<i class="icon-list-add"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="POPUPS_IMPORT_OPEN_PGP_KEY/BUTTON_IMPORT_OPEN_PGP_KEY"></span>
</a>
</div>
</div>
</div>
</div>
<div class="popups">
<div class="modal hide b-open-pgp-key-add-content g-ui-user-select-none" data-bind="modal: modalVisibility">
<div>
<div class="modal-header">
<button type="button" class="close" data-bind="command: cancelCommand">&times;</button>
<h3>
<span class="i18n" data-i18n="POPUPS_IMPORT_OPEN_PGP_KEY/TITLE_IMPORT_OPEN_PGP_KEY"></span>
</h3>
</div>
<div class="modal-body">
<div class="alert" data-bind="visible: key.error() && key.errorMessage(), text: key.errorMessage"></div>
<div class="form-horizontal">
<div class="control-group" data-bind="css: {'error': key.error}">
<textarea class="inputKey input-xxlarge" rows="14" autocomplete="off" data-bind="value: key, hasfocus: key.focus"></textarea>
</div>
</div>
</div>
<div class="modal-footer">
<a class="btn buttonAddAccount" data-bind="command: addOpenPgpKeyCommand">
<i class="icon-list-add"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="POPUPS_IMPORT_OPEN_PGP_KEY/BUTTON_IMPORT_OPEN_PGP_KEY"></span>
</a>
</div>
</div>
</div>
</div>

View file

@ -175,19 +175,9 @@
<a class="btn first" data-tooltip-join="bottom"
style="padding-left: 10px; padding-right: 10px;"
data-bind="visible: addAttachmentEnabled(), initDom: composeUploaderButton, tooltip: 'COMPOSE/ATTACH_FILES',
css: {'last': !(driveEnabled() && driveVisible()) && !(dropboxEnabled())}">
css: {'last': !(driveEnabled() && driveVisible())}">
<sup style="font-weight: bold; font-size: 100%; top: -0.3em;">+</sup><i class="icon-attachment"></i>
</a>
<a class="btn" data-tooltip-join="bottom"
data-bind="visible: dropboxEnabled, command: dropboxCommand, tooltip: 'COMPOSE/DROPBOX',
css: {'first': !addAttachmentEnabled(), 'last': !(driveEnabled() && driveVisible())}">
<i class="icon-dropbox"></i>
</a>
<a class="btn last" data-tooltip-join="bottom"
data-bind="visible: driveEnabled() && driveVisible(), command: driveCommand, tooltip: 'COMPOSE/GOOGLE_DRIVE',
css: {'first': !addAttachmentEnabled() && !(driveEnabled() && driveVisible())}">
<i class="icon-google-drive"></i>
</a>
</div>
</div>
</div>

View file

@ -1,64 +1,64 @@
<div class="popups">
<div class="modal hide b-filter-content g-ui-user-select-none" data-bind="modal: modalVisibility">
<div>
<div class="modal-header">
<button type="button" class="close" data-bind="command: cancelCommand">&times;</button>
<h3>
<span class="i18n" data-i18n="POPUPS_FILTER/TITLE_CREATE_FILTER" data-bind="visible: isNew"></span>
<span class="i18n" data-i18n="POPUPS_FILTER/TITLE_EDIT_FILTER" data-bind="visible: !isNew()"></span>
</h3>
</div>
<div class="modal-body">
<div class="row filter" data-bind="with: filter, i18nInit: filter">
<div class="span9" data-bind="i18nInit: true">
<div class="control-group" data-bind="css: {'error': name.error}">
<div class="controls">
<input type="text" class="i18n span5"
data-bind="value: name, hasFocus: name.focused"
autocorrect="off" autocapitalize="off" spellcheck="false"
data-i18n="[placeholder]POPUPS_FILTER/FILTER_NAME"
/>
</div>
</div>
<div class="legend i18n" data-i18n="POPUPS_FILTER/LEGEND_CONDITIONS"></div>
<div>
<div data-bind="visible: 1 < conditions().length">
<select class="span4" data-bind="value: conditionsType">
<option value="Any" class="i18n"
data-i18n="POPUPS_FILTER/SELECT_MATCH_ANY"></option>
<option value="All" class="i18n"
data-i18n="POPUPS_FILTER/SELECT_MATCH_ALL"></option>
</select>
</div>
<div data-bind="visible: 0 < conditions().length, foreach: conditions">
<div data-bind="template: {'name': template(), 'data': $data}"></div>
</div>
<div data-bind="visible: 0 === conditions().length">
<span class="i18n" data-i18n="POPUPS_FILTER/ALL_INCOMING_MESSAGES_DESC"></span>
</div>
<br />
<a class="btn" data-bind="click: addCondition, i18nInit: true">
<i class="icon-plus"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="POPUPS_FILTER/BUTTON_ADD_CONDITION"></span>
</a>
</div>
<br />
<div class="legend i18n" 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>
</div>
</div>
<div class="modal-footer">
<a class="btn buttonSave" data-bind="command: saveFilterCommand">
<i class="icon-ok"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="POPUPS_FILTER/BUTTON_DONE"></span>
</a>
</div>
</div>
</div>
</div>
<div class="popups">
<div class="modal hide b-filter-content g-ui-user-select-none" data-bind="modal: modalVisibility">
<div>
<div class="modal-header">
<button type="button" class="close" data-bind="command: cancelCommand">&times;</button>
<h3>
<span class="i18n" data-i18n="POPUPS_FILTER/TITLE_CREATE_FILTER" data-bind="visible: isNew"></span>
<span class="i18n" data-i18n="POPUPS_FILTER/TITLE_EDIT_FILTER" data-bind="visible: !isNew()"></span>
</h3>
</div>
<div class="modal-body">
<div class="row filter" data-bind="with: filter, i18nInit: filter">
<div class="span9" data-bind="i18nInit: true">
<div class="control-group" data-bind="css: {'error': name.error}">
<div class="controls">
<input type="text" class="i18n span5"
data-bind="value: name, hasFocus: name.focused"
autocorrect="off" autocapitalize="off" spellcheck="false"
data-i18n="[placeholder]POPUPS_FILTER/FILTER_NAME"
/>
</div>
</div>
<div class="legend i18n" data-i18n="POPUPS_FILTER/LEGEND_CONDITIONS"></div>
<div>
<div data-bind="visible: 1 < conditions().length">
<select class="span4" data-bind="value: conditionsType">
<option value="Any" class="i18n"
data-i18n="POPUPS_FILTER/SELECT_MATCH_ANY"></option>
<option value="All" class="i18n"
data-i18n="POPUPS_FILTER/SELECT_MATCH_ALL"></option>
</select>
</div>
<div data-bind="visible: 0 < conditions().length, foreach: conditions">
<div data-bind="template: {'name': template(), 'data': $data}"></div>
</div>
<div data-bind="visible: 0 === conditions().length">
<span class="i18n" data-i18n="POPUPS_FILTER/ALL_INCOMING_MESSAGES_DESC"></span>
</div>
<br />
<a class="btn" data-bind="click: addCondition, i18nInit: true">
<i class="icon-plus"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="POPUPS_FILTER/BUTTON_ADD_CONDITION"></span>
</a>
</div>
<br />
<div class="legend i18n" 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>
</div>
</div>
<div class="modal-footer">
<a class="btn buttonSave" data-bind="command: saveFilterCommand">
<i class="icon-ok"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="POPUPS_FILTER/BUTTON_DONE"></span>
</a>
</div>
</div>
</div>
</div>

View file

@ -1,42 +1,42 @@
<div class="popups">
<div class="modal hide b-folder-create-content g-ui-user-select-none" data-bind="modal: modalVisibility">
<div>
<div class="modal-header">
<button type="button" class="close" data-bind="command: cancelCommand">&times;</button>
<h3>
<span class="i18n" data-i18n="POPUPS_CREATE_FOLDER/TITLE_CREATE_FOLDER"></span>
</h3>
</div>
<div class="modal-body">
<div class="form-horizontal">
<br />
<div class="control-group">
<label class="control-label">
<span class="i18n" data-i18n="POPUPS_CREATE_FOLDER/LABEL_NAME"></span>
</label>
<div class="controls">
<input type="text" class="uiInput inputName" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="textInput: folderName, hasfocus: folderName.focused, onEnter: createFolderCommand" />
</div>
</div>
<div class="control-group">
<label class="control-label">
<span class="i18n" data-i18n="POPUPS_CREATE_FOLDER/LABEL_PARENT"></span>
</label>
<div class="controls">
<select data-bind="options: parentFolderSelectList, value: selectedParentValue,
optionsText: 'name', optionsValue: 'id', optionsAfterRender: defautOptionsAfterRender"></select>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<a class="btn buttonCreate" data-bind="command: createFolderCommand">
<i class="icon-folder-add"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="POPUPS_CREATE_FOLDER/BUTTON_CREATE"></span>
</a>
</div>
</div>
</div>
</div>
<div class="popups">
<div class="modal hide b-folder-create-content g-ui-user-select-none" data-bind="modal: modalVisibility">
<div>
<div class="modal-header">
<button type="button" class="close" data-bind="command: cancelCommand">&times;</button>
<h3>
<span class="i18n" data-i18n="POPUPS_CREATE_FOLDER/TITLE_CREATE_FOLDER"></span>
</h3>
</div>
<div class="modal-body">
<div class="form-horizontal">
<br />
<div class="control-group">
<label class="control-label">
<span class="i18n" data-i18n="POPUPS_CREATE_FOLDER/LABEL_NAME"></span>
</label>
<div class="controls">
<input type="text" class="uiInput inputName" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="textInput: folderName, hasfocus: folderName.focused, onEnter: createFolderCommand" />
</div>
</div>
<div class="control-group">
<label class="control-label">
<span class="i18n" data-i18n="POPUPS_CREATE_FOLDER/LABEL_PARENT"></span>
</label>
<div class="controls">
<select data-bind="options: parentFolderSelectList, value: selectedParentValue,
optionsText: 'name', optionsValue: 'id', optionsAfterRender: defautOptionsAfterRender"></select>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<a class="btn buttonCreate" data-bind="command: createFolderCommand">
<i class="icon-folder-add"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="POPUPS_CREATE_FOLDER/BUTTON_CREATE"></span>
</a>
</div>
</div>
</div>
</div>

View file

@ -1,34 +1,34 @@
<div class="popups">
<div class="modal hide b-two-factor-test-content g-ui-user-select-none" data-bind="modal: modalVisibility">
<div>
<div class="modal-header">
<button type="button" class="close" data-bind="command: cancelCommand">&times;</button>
<h3>
<span class="i18n" data-i18n="POPUPS_TWO_FACTOR_TEST/TITLE_TEST_CODE"></span>
</h3>
</div>
<div class="modal-body">
<div class="form-horizontal">
<br />
<div class="control-group">
<label class="control-label">
<span class="i18n" data-i18n="POPUPS_TWO_FACTOR_TEST/LABEL_CODE"></span>
</label>
<div class="controls">
<input type="text" class="uiInput inputName"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="textInput: code, hasfocus: code.focused, onEnter: testCodeCommand" />
</div>
</div>
</div>
</div>
<div class="modal-footer">
<a class="btn" data-bind="command: testCodeCommand, css: { 'btn-success': true === code.status(), 'btn-danger': false === code.status() }">
<i data-bind="css: {'icon-ok': !testing(), 'icon-spinner animated': testing(), 'icon-white': true === code.status() || false === code.status() }"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="POPUPS_TWO_FACTOR_TEST/BUTTON_TEST"></span>
</a>
</div>
</div>
</div>
</div>
<div class="popups">
<div class="modal hide b-two-factor-test-content g-ui-user-select-none" data-bind="modal: modalVisibility">
<div>
<div class="modal-header">
<button type="button" class="close" data-bind="command: cancelCommand">&times;</button>
<h3>
<span class="i18n" data-i18n="POPUPS_TWO_FACTOR_TEST/TITLE_TEST_CODE"></span>
</h3>
</div>
<div class="modal-body">
<div class="form-horizontal">
<br />
<div class="control-group">
<label class="control-label">
<span class="i18n" data-i18n="POPUPS_TWO_FACTOR_TEST/LABEL_CODE"></span>
</label>
<div class="controls">
<input type="text" class="uiInput inputName"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="textInput: code, hasfocus: code.focused, onEnter: testCodeCommand" />
</div>
</div>
</div>
</div>
<div class="modal-footer">
<a class="btn" data-bind="command: testCodeCommand, css: { 'btn-success': true === code.status(), 'btn-danger': false === code.status() }">
<i data-bind="css: {'icon-ok': !testing(), 'icon-spinner animated': testing(), 'icon-white': true === code.status() || false === code.status() }"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="POPUPS_TWO_FACTOR_TEST/BUTTON_TEST"></span>
</a>
</div>
</div>
</div>
</div>

View file

@ -1,106 +1,106 @@
<div class="b-settings-filters g-ui-user-select-none">
<div class="form-horizontal">
<div class="legend">
<span class="i18n" data-i18n="SETTINGS_FILTERS/LEGEND_FILTERS"></span>
&nbsp;&nbsp;&nbsp;
<i class="icon-spinner animated" style="margin-top: 5px" data-bind="visible: filters.loading"></i>
</div>
</div>
<div class="row" data-bind="visible: inited() && !serverError()">
<div class="span5 width100-on-mobile">
<a class="btn" data-bind="click: addFilter">
<i class="icon-plus"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="SETTINGS_FILTERS/BUTTON_ADD_FILTER"></span>
</a>
&nbsp;&nbsp;
<a class="btn" data-tooltip-join="top" data-bind="visible: filterRaw.allow, click: function () { filterRaw.active(!filterRaw.active()) },
css: {'active': filterRaw.active }, tooltip: 'SETTINGS_FILTERS/BUTTON_RAW_SCRIPT'">
<i class="icon-file-code"></i>
</a>
&nbsp;&nbsp;
<a class="btn hide-on-disabled-command" data-placement="bottom" data-join="top"
data-bind="command: saveChangesCommand, tooltipErrorTip: saveErrorText, css: {'btn-danger': '' !== saveErrorText()}">
<i data-bind="css: {'icon-floppy': !filters.saving(), 'icon-spinner animated': filters.saving()}"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="SETTINGS_FILTERS/BUTTON_SAVE"></span>
</a>
</div>
</div>
<div class="row" data-bind="visible: haveChanges">
<div class="span8 width100-on-mobile">
<br />
<div class="alert g-ui-user-select-none" style="margin-bottom: 0">
<i class="icon-warning"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="SETTINGS_FILTERS/CHACHES_NEED_TO_BE_SAVED_DESC"></span>
</div>
</div>
</div>
<div class="row" data-bind="visible: serverError">
<div class="span8 width100-on-mobile">
<div class="alert alert-error g-ui-user-select-none" style="margin-bottom: 0">
<i class="icon-warning"></i>
&nbsp;&nbsp;
<span data-bind="text: serverErrorDesc"></span>
</div>
</div>
</div>
<br />
<br />
<div class="row">
<div class="span8 width100-on-mobile">
<div class="control-group" data-bind="css: {'error': filterRaw.error}, visible: inited() && filterRaw.allow() && filterRaw.active()">
<div class="controls">
<pre style="word-break: break-word;" data-bind="visible: '' !== filterRaw.capa()">
<b class="i18n" data-i18n="SETTINGS_FILTERS/CAPABILITY_LABEL"></b>:
<span data-bind="text: filterRaw.capa"></span>
</pre>
<textarea class="span8" style="height: 300px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;"
data-bind="value: filterRaw, valueUpdate: 'afterkeydown'"></textarea>
</div>
</div>
<div class="filters-list-wrp">
<div class="filters-list-top-padding"></div>
<table class="table table-hover list-table filters-list g-ui-user-select-none"
data-bind="visible: inited() && (!filterRaw.active() || !filterRaw.active()), i18nUpdate: filters">
<colgroup>
<col style="width: 30px" />
<col style="width: 16px" />
<col />
<col style="width: 140px" />
<col style="width: 1%" />
</colgroup>
<tbody data-bind="sortable: {data: filters, options: scrollableOptions('.filters-list-wrp')}" style="width: 600px">
<tr class="filter-item">
<td>
<span class="disabled-filter" data-bind="click: function () { $root.haveChanges(true); enabled(!enabled()); }">
<i data-bind="css: {'icon-checkbox-checked': enabled, 'icon-checkbox-unchecked': !enabled()}"></i>
</span>
</td>
<td class="drag-wrapper">
<i class="icon-braille drag-handle"></i>
</td>
<td class="e-action">
<span class="filter-name" data-bind="text: name()"></span>
&nbsp;&nbsp;
<span class="filter-sub-name" data-bind="text: nameSub()"></span>
</td>
<td>
<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(oFilter) { $root.deleteFilter(oFilter); }">
<span class="i18n" data-i18n="SETTINGS_FILTERS/DELETING_ASK"></span>
</a>
</td>
<td>
<span class="delete-filter" data-bind="visible: !deleteAccess() && canBeDeleted(), click: function (oFilter) { $root.filterForDeletion(oFilter); }">
<i class="icon-trash"></i>
</span>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="b-settings-filters g-ui-user-select-none">
<div class="form-horizontal">
<div class="legend">
<span class="i18n" data-i18n="SETTINGS_FILTERS/LEGEND_FILTERS"></span>
&nbsp;&nbsp;&nbsp;
<i class="icon-spinner animated" style="margin-top: 5px" data-bind="visible: filters.loading"></i>
</div>
</div>
<div class="row" data-bind="visible: inited() && !serverError()">
<div class="span5 width100-on-mobile">
<a class="btn" data-bind="click: addFilter">
<i class="icon-plus"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="SETTINGS_FILTERS/BUTTON_ADD_FILTER"></span>
</a>
&nbsp;&nbsp;
<a class="btn" data-tooltip-join="top" data-bind="visible: filterRaw.allow, click: function () { filterRaw.active(!filterRaw.active()) },
css: {'active': filterRaw.active }, tooltip: 'SETTINGS_FILTERS/BUTTON_RAW_SCRIPT'">
<i class="icon-file-code"></i>
</a>
&nbsp;&nbsp;
<a class="btn hide-on-disabled-command" data-placement="bottom" data-join="top"
data-bind="command: saveChangesCommand, tooltipErrorTip: saveErrorText, css: {'btn-danger': '' !== saveErrorText()}">
<i data-bind="css: {'icon-floppy': !filters.saving(), 'icon-spinner animated': filters.saving()}"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="SETTINGS_FILTERS/BUTTON_SAVE"></span>
</a>
</div>
</div>
<div class="row" data-bind="visible: haveChanges">
<div class="span8 width100-on-mobile">
<br />
<div class="alert g-ui-user-select-none" style="margin-bottom: 0">
<i class="icon-warning"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="SETTINGS_FILTERS/CHACHES_NEED_TO_BE_SAVED_DESC"></span>
</div>
</div>
</div>
<div class="row" data-bind="visible: serverError">
<div class="span8 width100-on-mobile">
<div class="alert alert-error g-ui-user-select-none" style="margin-bottom: 0">
<i class="icon-warning"></i>
&nbsp;&nbsp;
<span data-bind="text: serverErrorDesc"></span>
</div>
</div>
</div>
<br />
<br />
<div class="row">
<div class="span8 width100-on-mobile">
<div class="control-group" data-bind="css: {'error': filterRaw.error}, visible: inited() && filterRaw.allow() && filterRaw.active()">
<div class="controls">
<pre style="word-break: break-word;" data-bind="visible: '' !== filterRaw.capa()">
<b class="i18n" data-i18n="SETTINGS_FILTERS/CAPABILITY_LABEL"></b>:
<span data-bind="text: filterRaw.capa"></span>
</pre>
<textarea class="span8" style="height: 300px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace;"
data-bind="value: filterRaw, valueUpdate: 'afterkeydown'"></textarea>
</div>
</div>
<div class="filters-list-wrp">
<div class="filters-list-top-padding"></div>
<table class="table table-hover list-table filters-list g-ui-user-select-none"
data-bind="visible: inited() && (!filterRaw.active() || !filterRaw.active()), i18nUpdate: filters">
<colgroup>
<col style="width: 30px" />
<col style="width: 16px" />
<col />
<col style="width: 140px" />
<col style="width: 1%" />
</colgroup>
<tbody data-bind="sortable: {data: filters, options: scrollableOptions('.filters-list-wrp')}" style="width: 600px">
<tr class="filter-item">
<td>
<span class="disabled-filter" data-bind="click: function () { $root.haveChanges(true); enabled(!enabled()); }">
<i data-bind="css: {'icon-checkbox-checked': enabled, 'icon-checkbox-unchecked': !enabled()}"></i>
</span>
</td>
<td class="drag-wrapper">
<i class="icon-braille drag-handle"></i>
</td>
<td class="e-action">
<span class="filter-name" data-bind="text: name()"></span>
&nbsp;&nbsp;
<span class="filter-sub-name" data-bind="text: nameSub()"></span>
</td>
<td>
<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(oFilter) { $root.deleteFilter(oFilter); }">
<span class="i18n" data-i18n="SETTINGS_FILTERS/DELETING_ASK"></span>
</a>
</td>
<td>
<span class="delete-filter" data-bind="visible: !deleteAccess() && canBeDeleted(), click: function (oFilter) { $root.filterForDeletion(oFilter); }">
<i class="icon-trash"></i>
</span>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>

View file

@ -1,99 +1,99 @@
<div class="b-settings-open-pgp g-ui-user-select-none">
<div class="form-horizontal">
<div class="legend">
<span class="i18n" data-i18n="SETTINGS_OPEN_PGP/LEGEND_OPEN_PGP"></span>
</div>
</div>
<button class="btn" data-bind="click: addOpenPgpKey">
<i class="icon-list-add"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="SETTINGS_OPEN_PGP/BUTTON_ADD_OPEN_PGP_KEY"></span>
</button>
&nbsp;&nbsp;
<div style="display: inline-block" data-tooltip-join="left" data-bind="tooltip: isHttps ? '' : 'SETTINGS_OPEN_PGP/GENERATE_ONLY_HTTPS'">
<button class="btn" data-bind="click: generateOpenPgpKey, disable: !isHttps">
<i class="icon-key"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="SETTINGS_OPEN_PGP/BUTTON_GENERATE_OPEN_PGP_KEYS"></span>
</button>
</div>
<br />
<br />
<div class="control-group">
<div class="controls">
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'SETTINGS_OPEN_PGP/LABEL_ALLOW_DRAFT_AUTOSAVE',
value: allowDraftAutosave
}
}"></div>
</div>
</div>
<br />
<table class="table table-hover list-table" data-bind="i18nUpdate: openpgpkeys">
<colgroup>
<col />
<col style="width: 1%" />
<col style="width: 1%" />
</colgroup>
<tbody>
<!-- ko foreach: openpgpkeysPrivate -->
<tr class="open-pgp-key-item">
<td>
<span class="open-pgp-key-img i18n" data-i18n="[title]SETTINGS_OPEN_PGP/TITLE_PRIVATE">
<i class="icon-lock"></i>
</span>
<span class="open-pgp-key-user">
<!-- ko foreach: users -->
<div class="open-pgp-key-user-address" data-bind="text: $data"></div>
<!-- /ko -->
</span>
<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(openPgpKey) { $root.deleteOpenPgpKey(openPgpKey); }">
<span class="i18n" data-i18n="SETTINGS_OPEN_PGP/DELETING_ASK"></span>
</a>
</td>
<td>
<span class="delete-open-pgp-key" data-bind="visible: !deleteAccess(), click: function (openPgpKey) { $root.openPgpKeyForDeletion(openPgpKey); }">
<i class="icon-trash"></i>
</span>
</td>
<td>
<span class="view-open-pgp-key" data-bind="click: function (openPgpKey) { $root.viewOpenPgpKey(openPgpKey); }">
<i class="icon-eye"></i>
</span>
</td>
</tr>
<!-- /ko -->
<!-- ko foreach: openpgpkeysPublic -->
<tr class="open-pgp-key-item">
<td>
<span class="open-pgp-key-img i18n" data-i18n="[title]SETTINGS_OPEN_PGP/TITLE_PUBLIC">
<i class="icon-key"></i>
</span>
<span class="open-pgp-key-user">
<!-- ko foreach: users -->
<div class="open-pgp-key-user-address">
<span data-bind="text: $data"></span> (<span class="open-pgp-key-id" data-bind="text: $parent.id"></span>)
</div>
<!-- /ko -->
</span>
<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(oOpenPGP) { $root.deleteOpenPgpKey(oOpenPGP); }">
<span class="i18n" data-i18n="SETTINGS_OPEN_PGP/DELETING_ASK"></span>
</a>
</td>
<td>
<span class="delete-open-pgp-key" data-bind="visible: !deleteAccess(), click: function (openPgpKey) { $root.openPgpKeyForDeletion(openPgpKey); }">
<i class="icon-trash"></i>
</span>
</td>
<td>
<span class="view-open-pgp-key" data-bind="click: function (openPgpKey) { $root.viewOpenPgpKey(openPgpKey); }">
<i class="icon-eye"></i>
</span>
</td>
</tr>
<!-- /ko -->
</tbody>
</table>
</div>
<div class="b-settings-open-pgp g-ui-user-select-none">
<div class="form-horizontal">
<div class="legend">
<span class="i18n" data-i18n="SETTINGS_OPEN_PGP/LEGEND_OPEN_PGP"></span>
</div>
</div>
<button class="btn" data-bind="click: addOpenPgpKey">
<i class="icon-list-add"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="SETTINGS_OPEN_PGP/BUTTON_ADD_OPEN_PGP_KEY"></span>
</button>
&nbsp;&nbsp;
<div style="display: inline-block" data-tooltip-join="left" data-bind="tooltip: isHttps ? '' : 'SETTINGS_OPEN_PGP/GENERATE_ONLY_HTTPS'">
<button class="btn" data-bind="click: generateOpenPgpKey, disable: !isHttps">
<i class="icon-key"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="SETTINGS_OPEN_PGP/BUTTON_GENERATE_OPEN_PGP_KEYS"></span>
</button>
</div>
<br />
<br />
<div class="control-group">
<div class="controls">
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'SETTINGS_OPEN_PGP/LABEL_ALLOW_DRAFT_AUTOSAVE',
value: allowDraftAutosave
}
}"></div>
</div>
</div>
<br />
<table class="table table-hover list-table" data-bind="i18nUpdate: openpgpkeys">
<colgroup>
<col />
<col style="width: 1%" />
<col style="width: 1%" />
</colgroup>
<tbody>
<!-- ko foreach: openpgpkeysPrivate -->
<tr class="open-pgp-key-item">
<td>
<span class="open-pgp-key-img i18n" data-i18n="[title]SETTINGS_OPEN_PGP/TITLE_PRIVATE">
<i class="icon-lock"></i>
</span>
<span class="open-pgp-key-user">
<!-- ko foreach: users -->
<div class="open-pgp-key-user-address" data-bind="text: $data"></div>
<!-- /ko -->
</span>
<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(openPgpKey) { $root.deleteOpenPgpKey(openPgpKey); }">
<span class="i18n" data-i18n="SETTINGS_OPEN_PGP/DELETING_ASK"></span>
</a>
</td>
<td>
<span class="delete-open-pgp-key" data-bind="visible: !deleteAccess(), click: function (openPgpKey) { $root.openPgpKeyForDeletion(openPgpKey); }">
<i class="icon-trash"></i>
</span>
</td>
<td>
<span class="view-open-pgp-key" data-bind="click: function (openPgpKey) { $root.viewOpenPgpKey(openPgpKey); }">
<i class="icon-eye"></i>
</span>
</td>
</tr>
<!-- /ko -->
<!-- ko foreach: openpgpkeysPublic -->
<tr class="open-pgp-key-item">
<td>
<span class="open-pgp-key-img i18n" data-i18n="[title]SETTINGS_OPEN_PGP/TITLE_PUBLIC">
<i class="icon-key"></i>
</span>
<span class="open-pgp-key-user">
<!-- ko foreach: users -->
<div class="open-pgp-key-user-address">
<span data-bind="text: $data"></span> (<span class="open-pgp-key-id" data-bind="text: $parent.id"></span>)
</div>
<!-- /ko -->
</span>
<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(oOpenPGP) { $root.deleteOpenPgpKey(oOpenPGP); }">
<span class="i18n" data-i18n="SETTINGS_OPEN_PGP/DELETING_ASK"></span>
</a>
</td>
<td>
<span class="delete-open-pgp-key" data-bind="visible: !deleteAccess(), click: function (openPgpKey) { $root.openPgpKeyForDeletion(openPgpKey); }">
<i class="icon-trash"></i>
</span>
</td>
<td>
<span class="view-open-pgp-key" data-bind="click: function (openPgpKey) { $root.viewOpenPgpKey(openPgpKey); }">
<i class="icon-eye"></i>
</span>
</td>
</tr>
<!-- /ko -->
</tbody>
</table>
</div>

View file

@ -1,101 +0,0 @@
<div class="b-settings-social g-ui-user-select-none">
<div class="form-horizontal" data-bind="visible: googleEnable() && googleEnableAuth()">
<div class="legend">
<span class="i18n" data-i18n="SETTINGS_SOCIAL/LEGEND_GOOGLE"></span>
</div>
<div class="control-group" data-bind="visible: !googleLoggined()">
<button class="btn" data-bind="command: connectGoogleCommand">
<i class="icon-google" data-bind="visible: !googleActions()"></i>
<i class="icon-spinner animated" data-bind="visible: googleActions()"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="SETTINGS_SOCIAL/BUTTON_GOOGLE_CONNECT"></span>
</button>
<br />
<br />
<blockquote>
<p class="i18n muted" style="width: 500px" data-i18n="SETTINGS_SOCIAL/MAIN_GOOGLE_DESC"></p>
</blockquote>
</div>
<div class="control-group" data-bind="visible: googleLoggined">
<strong>
<i class="icon-google"></i>
&nbsp;&nbsp;
<span data-bind="text: googleUserName"></span>
</strong>
<br />
<br />
<button class="btn" data-bind="command: disconnectGoogleCommand">
<i class="icon-remove" data-bind="visible: !googleActions()"></i>
<i class="icon-spinner animated" data-bind="visible: googleActions()"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="SETTINGS_SOCIAL/BUTTON_GOOGLE_DISCONNECT"></span>
</button>
</div>
</div>
<div class="form-horizontal" data-bind="visible: facebookEnable">
<div class="legend">
<span class="i18n" data-i18n="SETTINGS_SOCIAL/LEGEND_FACEBOOK"></span>
</div>
<div class="control-group" data-bind="visible: !facebookLoggined()">
<button class="btn" data-bind="command: connectFacebookCommand">
<i class="icon-facebook" data-bind="visible: !facebookActions()"></i>
<i class="icon-spinner animated" data-bind="visible: facebookActions()"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="SETTINGS_SOCIAL/BUTTON_FACEBOOK_CONNECT"></span>
</button>
<br />
<br />
<blockquote>
<p class="i18n muted" style="width: 500px" data-i18n="SETTINGS_SOCIAL/MAIN_FACEBOOK_DESC"></p>
</blockquote>
</div>
<div class="control-group" data-bind="visible: facebookLoggined">
<strong>
<i class="icon-facebook"></i>
&nbsp;&nbsp;
<span data-bind="text: facebookUserName"></span>
</strong>
<br />
<br />
<button class="btn" data-bind="command: disconnectFacebookCommand">
<i class="icon-remove" data-bind="visible: !facebookActions()"></i>
<i class="icon-spinner animated" data-bind="visible: facebookActions()"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="SETTINGS_SOCIAL/BUTTON_FACEBOOK_DISCONNECT"></span>
</button>
</div>
</div>
<div class="form-horizontal" data-bind="visible: twitterEnable">
<div class="legend">
<span class="i18n" data-i18n="SETTINGS_SOCIAL/LEGEND_TWITTER"></span>
</div>
<div class="control-group" data-bind="visible: !twitterLoggined()">
<button class="btn" data-bind="command: connectTwitterCommand">
<i class="icon-twitter" data-bind="visible: !twitterActions()"></i>
<i class="icon-spinner animated" data-bind="visible: twitterActions()"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="SETTINGS_SOCIAL/BUTTON_TWITTER_CONNECT"></span>
</button>
<br />
<br />
<blockquote>
<p class="i18n muted" style="width: 500px" data-i18n="SETTINGS_SOCIAL/MAIN_TWITTER_DESC"></p>
</blockquote>
</div>
<div class="control-group" data-bind="visible: twitterLoggined">
<strong>
<i class="icon-twitter"></i>
&nbsp;&nbsp;
<span data-bind="text: twitterUserName"></span>
</strong>
<br />
<br />
<button class="btn" data-bind="command: disconnectTwitterCommand">
<i class="icon-remove" data-bind="visible: !twitterActions()"></i>
<i class="icon-spinner animated" data-bind="visible: twitterActions()"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n="SETTINGS_SOCIAL/BUTTON_TWITTER_DISCONNECT"></span>
</button>
</div>
</div>
</div>