v1.2.7.415

This commit is contained in:
RainLoop Team 2013-09-29 02:02:47 +04:00
parent 5c1e7bc676
commit 54e2645fcf
436 changed files with 407 additions and 347 deletions

View file

@ -0,0 +1,67 @@
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="robots" content="noindex, nofollow, noodp" />
<title>{{ErrorTitle}}</title>
<style>
html, body {
font-family: arial, sans-serif;
font-size: 14px;
}
.content {
position: absolute;
left: 50%;
top: 50%;
text-align: center;
width: 600px;
margin: -200px 0px 0px -250px;
background: #FFF;
line-height: 150%;
border-bottom: 1px solid #E4E4E4;
}
.error-header {
font-size: 16px;
font-weight: bold;
}
.error-desc {
padding: 10px;
background-color: #eee;
}
.browsers {
width: 450px;
height: 115px;
margin: 10px auto 0px;
}
.browsers a {
float: left;
width: 150px;
height: 20px;
padding: 80px 0px 7px;
}
</style>
</head>
<body class="content">
<div class="error-header">
{{ErrorHeader}}
</div>
<br />
<div class="error-desc">
{{ErrorDesc}}
<br />
<div class="browsers">
<a href="http://www.google.com/chrome/" target="_blank" style="background: url('{{BaseWebStaticPath}}browsers/chrome.gif') no-repeat 50% 6px;">Google Chrome</a>
<a href="http://www.mozilla-europe.org/" target="_blank" style="background: url('{{BaseWebStaticPath}}browsers/firefox.gif') no-repeat 50% 7px;">Mozilla Firefox</a>
<a href="http://www.opera.com/" target="_blank" style="background: url('{{BaseWebStaticPath}}browsers/opera.gif') no-repeat 50% 7px;">Opera</a>
</div>
</div>
</body>
</html>

View file

@ -0,0 +1,53 @@
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="robots" content="noindex, nofollow, noodp" />
<title>{{ErrorTitle}}</title>
<style>
html, body {
font-family: arial, sans-serif;
font-size: 14px;
}
.content {
position: absolute;
left: 50%;
top: 50%;
text-align: center;
width: 600px;
margin: -200px 0px 0px -250px;
background: #FFF;
line-height: 150%;
border-bottom: 1px solid #E4E4E4;
}
.error-header {
font-size: 16px;
font-weight: bold;
}
.error-desc {
padding: 10px;
background-color: #eee;
}
</style>
</head>
<body class="content">
<div class="error-header">
{{ErrorHeader}}
</div>
<br />
<div class="error-desc">
{{ErrorDesc}}
<br />
<div style="display: {{BackLinkVisibility}}">
<br />
<a href="{{BackHref}}">{{BackLink}}</a>
</div>
</div>
</body>
</html>

View file

@ -0,0 +1,74 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="viewport" content="user-scalable=no" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<noscript>
<meta http-equiv="refresh" content="0; URL={{BaseIndexFile}}?/NoScript" />
</noscript>
<!--[if lte IE 7]>
<meta http-equiv="refresh" content="0; URL={{BaseIndexFile}}?/BadBrowser" />
<![endif]-->
<script>
if (!navigator || !navigator.cookieEnabled) {
document.location.replace('{{BaseIndexFile}}?/NoCookie');
}
</script>
<meta name="robots" content="noindex, nofollow, noodp" />
<title></title>
<link rel="shortcut icon" href="{{BaseAppFaviconFile}}" />
<link type="text/css" rel="stylesheet" href="{{BaseAppMainCssLink}}" />
<script>
window._headBoot = ['{{BaseAppJqueryScriptLink}}', '{{BaseAppLibsScriptLink}}'];
</script>
<script src="{{BaseAppBootScriptLink}}"></script>
<script>
document.write(unescape('%3Cscript src="{{BaseAppDataScriptLink}}' + (window.__rlah ? window.__rlah() || '0' : '0') + '/"%3E%3C/script%3E'))
</script>
<script>
if (window.rainloopAppData)
{
if (window.rainloopAppData['Theme'] && window.rainloopAppData['NewThemeLink']) {
var sHref = window.rainloopAppData['NewThemeLink'];
if ('Custom' === window.rainloopAppData['Theme']) {
sHref = sHref.replace('/Css/0/User/-/Custom/-/', '/Css/' + (window.__rlah ? window.__rlah() || '0' : '0') + '/User/-/Custom/-/');
}
document.write('<link type="text/css" type="text/css" rel="stylesheet" href="' + sHref + '" id="rlThemeLink" />');
sHref = null;
}
if (window.rainloopAppData['LangLink']) {
window._headBoot.push(window.rainloopAppData['LangLink']);
}
window._headBoot.push('{{BaseAppMainScriptLink}}');
if (window.rainloopAppData['PluginsLink']) {
window._headBoot.push(window.rainloopAppData['PluginsLink']);
}
if (window._headBoot && window.head && window.head.js && 0 < window._headBoot.length)
{
for (var iIndex = 0, iLen = window._headBoot.length; iIndex < iLen; iIndex++) {
window.head.js(window._headBoot[iIndex]);
}
}
}
</script>
</head>
<body class="thm-body">
<div id="rl-loading" class="thm-loading">RainLoop</div>
<div id="rl-content">
<div id="rl-popups"></div>
<div id="rl-center">
<div id="rl-top"></div>
<div id="rl-left"></div>
<div id="rl-right"></div>
<div id="rl-bottom"></div>
</div>
</div>
<div id="rl-hidden">
{{BaseTemplates}}
</div>
</body>
</html>

View file

@ -0,0 +1,56 @@
// MAIN
@main-color: #333;
@main-background-color: #48525C;
@main-background-image: link;
// LOADING
@loading-color: #ddd;
@loading-text-shadow: 0px 1px 0px rgba(0, 0, 0, 0.5);
// LOGIN
@login-color: #eee;
@login-background-color: #2b333d;
@login-rgba-background-color: rgba(0,0,0,0.5);
@login-box-shadow: 0px 2px 10px rgba(0,0,0,0.5);
@login-border: none;
@login-border-radius: 7px;
// MENU
@dropdown-menu-color: #333;
@dropdown-menu-background-color: #fff;
@dropdown-menu-hover-background-color: #48525C;
@dropdown-menu-hover-color: #eee;
@dropdown-menu-disable-color: #999;
// FOLDERS
@folders-color: #fff;
@folders-disabled-color: #aaa;
@folders-selected-color: #fff;
@folders-selected-background-color: #2b333d;
@folders-selected-rgba-background-color: rgba(0,0,0,0.5);
@folders-hover-color: #fff;
@folders-hover-background-color: #2b333d;
@folders-hover-rgba-background-color: rgba(0,0,0,0.5);
@folders-drop-color: #fff;
@folders-drop-background-color: #2b333d;
@folders-drop-rgba-background-color: rgba(0,0,0,0.5);
// SETTINGS
@settings-menu-color: #fff;
@settings-menu-disabled-color: #aaa;
@settings-menu-selected-color: #fff;
@settings-menu-selected-background-color: #2b333d;
@settings-menu-selected-rgba-background-color: rgba(0,0,0,0.5);
@settings-menu-hover-color: #fff;
@settings-menu-hover-background-color: #2b333d;
@settings-menu-hover-rgba-background-color: rgba(0,0,0,0.5);
// MESSAGE LIST
@message-list-toolbar-background-color: #eee;
@message-list-toolbar-gradient-start: #f4f4f4;
@message-list-toolbar-gradient-end: #dfdfdf;
// MESSAGE
@message-background-color: #fff;
@message-rgba-background-color: rgba(255,255,255,0.95);

View file

@ -0,0 +1,55 @@
// MAIN
@main-color: #333;
@main-background-color: #eee;
@main-background-image: link;
// LOADING
@loading-color: #000;
// LOGIN
@login-color: #eee;
@login-background-color: #757575;
@login-rgba-background-color: rgba(0,0,0,0.5);
@login-box-shadow: none;
@login-border: none;
@login-border-radius: 7px;
// MENU
@dropdown-menu-color: #333;
@dropdown-menu-background-color: #fff;
@dropdown-menu-hover-background-color: #757575;
@dropdown-menu-hover-color: #eee;
@dropdown-menu-disable-color: #999;
// FOLDERS
@folders-color: #000;
@folders-disabled-color: #999;
@folders-selected-color: #eee;
@folders-selected-background-color: #757575;
@folders-selected-rgba-background-color: rgba(0,0,0,0.5);
@folders-hover-color: #eee;
@folders-hover-background-color: #757575;
@folders-hover-rgba-background-color: rgba(0,0,0,0.5);
@folders-drop-color: #eee;
@folders-drop-background-color: #757575;
@folders-drop-rgba-background-color: rgba(0,0,0,0.5);
// SETTINGS
@settings-menu-color: #000;
@settings-menu-disabled-color: #999;
@settings-menu-selected-color: #eee;
@settings-menu-selected-background-color: #757575;
@settings-menu-selected-rgba-background-color: rgba(0,0,0,0.5);
@settings-menu-hover-color: #eee;
@settings-menu-hover-background-color: #757575;
@settings-menu-hover-rgba-background-color: rgba(0,0,0,0.5);
// MESSAGE LIST
@message-list-toolbar-background-color: #eee;
@message-list-toolbar-gradient-start: #f4f4f4;
@message-list-toolbar-gradient-end: #dfdfdf;
// MESSAGE
@message-background-color: #fff;
@message-rgba-background-color: rgba(255,255,255,0.95);

View file

@ -0,0 +1,148 @@
// mixins +++
.thm-linear-gradient-mixin(@start, @end) when (iscolor(@start)) and (iscolor(@end)) {
background-color: mix(@start, @end, 60%) !important;
background-image: -moz-linear-gradient(top, @start, @end) !important; // FF 3.6+
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@start), to(@end)) !important; // Safari 4+, Chrome 2+
background-image: -webkit-linear-gradient(top, @start, @end) !important; // Safari 5.1+, Chrome 10+
background-image: -o-linear-gradient(top, @start, @end !important); // Opera 11.10
background-image: linear-gradient(to bottom, @start, @end) !important; // Standard, IE10
background-repeat: repeat-x !important;
filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@start),argb(@end))) !important; // IE9 and down
}
.thm-border-radius(@radius) when (ispixel(@radius)) {
-webkit-border-radius: @radius !important;
-moz-border-radius: @radius !important;
border-radius: @radius !important;
}
.thm-box-shadow(@shadow) {
-webkit-box-shadow: @shadow !important;
-moz-box-shadow: @shadow !important;
box-shadow: @shadow !important;
}
.thm-body-background-image(@value) when (isstring(@value)) {
background-image: url("@{base}@{value}") !important;
}
.thm-body-background-image(@value) when not (isstring(@value)) {
background-image: @value !important;
}
.thm-rgba-background-color(@simple, @rgba) when (@rgba = false) {
background-color: @simple !important;
}
.thm-rgba-background-color(@simple, @rgba) when not (@rgba = false) {
background-color: @simple !important;
background-color: @rgba !important;
}
// --- mixins
.thm-body {
color: @main-color;
background-color: @main-background-color;
.thm-body-background-image(@main-background-image);
}
.thm-loading {
color: @loading-color !important;
text-shadow: @loading-text-shadow !important;
}
.thm-login {
color: @login-color !important;
border: @login-border !important;
.thm-rgba-background-color(@login-background-color, @login-rgba-background-color);
.thm-linear-gradient-mixin(@login-gradient-start, @login-gradient-end);
.thm-border-radius(@login-border-radius);
.thm-box-shadow(@login-box-shadow);
.legend, .checkboxSignMe {
color: @login-color !important;
}
}
.g-ui-menu {
color: @dropdown-menu-color !important;
background-color: @dropdown-menu-background-color !important;
}
.g-ui-menu .e-item > .e-link {
color: @dropdown-menu-color !important;
background-color: @dropdown-menu-background-color !important;
> i {
color: @dropdown-menu-color !important;
}
}
.g-ui-menu .e-item > .e-link:hover {
color: @dropdown-menu-hover-color !important;
background-color: @dropdown-menu-hover-background-color !important;
> i {
color: @dropdown-menu-hover-color !important;
}
}
.g-ui-menu .e-item.disable > .e-link, .g-ui-menu .e-item.disable > .e-link:hover {
color: @dropdown-menu-disable-color !important;
background-color: @dropdown-menu-background-color !important;
> i {
color: @dropdown-menu-disable-color !important;
}
}
.thm-message-list-top-toolbar, .thm-message-list-bottom-toolbar {
.thm-rgba-background-color(@message-list-toolbar-background-color, @message-list-toolbar-rgba-background-color);
.thm-linear-gradient-mixin(@message-list-toolbar-gradient-start, @message-list-toolbar-gradient-end);
}
.thm-folders .e-link {
color: @folders-disabled-color !important;
&.selectable {
color: @folders-color !important;
}
&.selectable:hover {
color: @folders-hover-color !important;
.thm-rgba-background-color(@folders-hover-background-color, @folders-hover-rgba-background-color);
}
&.selectable.selected {
color: @folders-selected-color !important;
.thm-rgba-background-color(@folders-selected-background-color, @folders-selected-rgba-background-color);
}
&.selectable.droppableHover {
color: @folders-drop-color !important;
.thm-rgba-background-color(@folders-drop-background-color, @folders-drop-rgba-background-color);
}
}
.thm-settings-menu .e-item {
.e-link {
color: @settings-menu-disabled-color !important;
}
&.selectable .e-link {
color: @settings-menu-color !important;
}
&.selectable:hover .e-link {
.thm-rgba-background-color(@settings-menu-hover-background-color, @settings-menu-hover-rgba-background-color);
color: @settings-menu-hover-color !important;
}
&.selectable.selected .e-link {
.thm-rgba-background-color(@settings-menu-selected-background-color, @settings-menu-selected-rgba-background-color);
color: @settings-menu-selected-color !important;
}
}
.thm-message-view-background-color {
.thm-rgba-background-color(@message-background-color, @message-rgba-background-color);
}

View file

@ -0,0 +1,59 @@
// MAIN
@main-color: #333;
@main-background-color: #e3e3e3;
@main-background-image: none; // "images/background.png"
// LOADING
@loading-color: #000; // #ddd
@loading-text-shadow: none; // 0px 1px 0px rgba(0, 0, 0, 0.5);
// LOGIN
@login-color: #555;
@login-background-color: #eee;
@login-rgba-background-color: false; // rgba(0,0,0,0.7)
@login-box-shadow: none; // 0px 2px 10px rgba(0,0,0,0.5)
@login-border: 1px solid #ccc;
@login-border-radius: 7px;
@login-gradient-start: none; // #f4f4f4
@login-gradient-end: none; // #dfdfdf
// MENU
@dropdown-menu-color: #333;
@dropdown-menu-background-color: #fff;
@dropdown-menu-hover-background-color: #444;
@dropdown-menu-hover-color: #eee;
@dropdown-menu-disable-color: #999;
// FOLDERS
@folders-color: #333;
@folders-disabled-color: #666;
@folders-selected-color: #eee;
@folders-selected-background-color: #333;
@folders-selected-rgba-background-color: false;
@folders-hover-color: #eee;
@folders-hover-background-color: #333;
@folders-hover-rgba-background-color: false;
@folders-drop-color: #eee;
@folders-drop-background-color: #333;
@folders-drop-rgba-background-color: false;
// SETTINGS
@settings-menu-color: #333;
@settings-menu-disabled-color: #666;
@settings-menu-selected-color: #eee;
@settings-menu-selected-background-color: #333;
@settings-menu-selected-rgba-background-color: false;
@settings-menu-hover-color: #eee;
@settings-menu-hover-background-color: #333;
@settings-menu-hover-rgba-background-color: false;
// MESSAGE LIST
@message-list-toolbar-background-color: #eee;
@message-list-toolbar-rgba-background-color: false;
@message-list-toolbar-gradient-start: none; // #f4f4f4
@message-list-toolbar-gradient-end: none; // #dfdfdf
// MESSAGE
@message-background-color: #fff;
@message-rgba-background-color: false;

View file

@ -0,0 +1,20 @@
<tr class="e-item" data-bind="css: {'disabled': disabled }">
<td class="e-action">
<span class="domain-name" data-bind="text: name"></span>
</td>
<td>
<a class="btn btn-small btn-small-small btn-danger pull-right button-delete" data-bind="css: {'delete-access': deleteAccess()}, click: function(oDomain) { $root.deleteDomain(oDomain); }">
<span>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="disable-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

@ -0,0 +1,31 @@
<div class="b-admin-domains" >
<div class="legend">
Domains
</div>
<div>
<blockquote>
<p class="muted">
List of domains webmail is allowed to access.
</p>
</blockquote>
<a class="btn" data-bind="click: createDomain">
<i class="icon-plus"></i>
&nbsp;&nbsp;
Add Domain
</a>
<div class="process-place" data-bind="style: {'visibility': visibility }">
<i class="icon-spinner-2 animated"></i>
&nbsp;&nbsp;
loading...
</div>
<table class="table table-hover b-admin-domains-list-table" data-bind="i18nUpdate: domains">
<colgroup>
<col />
<col style="width: 140px" />
<col style="width: 1%" />
<col style="width: 1%" />
</colgroup>
<tbody data-bind="template: { name: 'AdminDomainListItem', foreach: domains }"></tbody>
</table>
</div>
</div>

View file

@ -0,0 +1,56 @@
<div class="b-admin-general">
<div class="form-horizontal">
<div class="legend">
General
</div>
<div class="control-group">
<label class="control-label">
Title
</label>
<div class="controls">
<input type="text" data-bind="value: title" />
<div data-bind="saveTrigger: titleTrigger"></div>
</div>
</div>
<div class="control-group">
<label class="control-label">
Language
</label>
<div class="controls">
<select data-bind="options: languagesOptions, value: mainLanguage, optionsText: 'optText', optionsValue: 'optValue'"></select>
<div data-bind="saveTrigger: languageTrigger"></div>
</div>
</div>
<div class="control-group">
<label class="control-label">
Theme
</label>
<div class="controls">
<select data-bind="options: themesOptions, value: mainTheme, optionsText: 'optText', optionsValue: 'optValue'"></select>
<div data-bind="saveTrigger: themeTrigger"></div>
</div>
</div>
<div class="control-group">
<div class="controls">
<label data-bind="click: function () { allowCustomTheme(!allowCustomTheme()); }">
<i data-bind="css: allowCustomTheme() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
Allow customized theme
</label>
<label data-bind="click: function () { allowAdditionalAccounts(!allowAdditionalAccounts()); }">
<i data-bind="css: allowAdditionalAccounts() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
Allow additional accounts
</label>
</div>
</div>
</div>
<div data-bind="visible: !contactsSupported">
<br />
<div class="alert alert-block span8">
<h4>Notice!</h4>
<br />
<strong>Contacts</strong> functions are not supported.
<br />
You need to install or enable <strong>PDO (sqlite)</strong> exstenstion on your server.
</div>
</div>
</div>

View file

@ -0,0 +1,60 @@
<div class="b-admin-licensing" >
<div class="row">
<div class="alert alert-info span10">
RainLoop Webmail is licensed under <strong>Creative Commons Attribution-NonCommercial 3.0 (CC BY-NC 3.0)</strong> license.
<br />
You are free to use it for your personal or non-profit projects.
<br />
<br />
Commercial use of <strong>RainLoop Webmail</strong> requires getting a <a href="http://rainloop.net/purchase/" target="_blank">permission</a>.
</div>
</div>
<div class="form-horizontal">
<div class="control-group">
<label class="control-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">
<div class="controls">
<div data-bind="visible: licensingProcess()">
<i class="icon-spinner-2 animated"></i>
&nbsp;&nbsp;
checking...
</div>
<div data-bind="visible: !licensingProcess()">
<div class="alert alert-block span8" style="margin-left: 0" data-bind="visible: !licensing()">
This domain isn't licensed for commercial use.
</div>
<div data-bind="visible: licensing()">
<div class="alert alert-success span8" style="margin-left: 0" data-bind="visible: licenseValid() && '' === licenseError()">
<p>
This domain is licensed for commercial use
</p>
<p data-bind="visible: 0 < licenseExpired()">
<b>Subscription expires:</b>
&nbsp;
<span data-bind="text: licenseExpiredMomentValue()"></span>
</p>
</div>
<div class="alert alert-error span8" style="margin-left: 0" data-bind="visible: !licenseValid() && '' !== licenseError(), text: licenseError"></div>
</div>
</div>
</div>
</div>
<div class="control-group" data-bind="visible: !licensingProcess()">
<div class="controls">
<button class="btn" data-bind="click: showActivationForm">
<i class="icon-love"></i>
&nbsp;&nbsp;
Activate Subscription Key
</button>
</div>
</div>
</div>
</div>

View file

@ -0,0 +1,35 @@
<div class="b-login-content">
<div class="loginFormWrapper">
<center>
<div class="alert" data-bind="visible: '' !== submitError()">
<button type="button" class="close" data-bind="click: function () { submitError('') }">&times;</button>
<span data-bind="text: submitError"></span>
</div>
<form class="form-horizontal span4 wrapper loginForm thm-login" action="#/" onsubmit="return false;" data-bind="command: submitCommand">
<div class="control-group" data-bind="css: {'error': loginError}">
<div class="input-append">
<input class="inputLogin span4" placeholder="Login" type="text" autocomplete="off" data-bind="value: login, hasFocus: loginFocus" />
<span class="add-on">
<i class="icon-user"></i>
</span>
</div>
</div>
<div class="control-group" data-bind="css: {'error': passwordError}">
<div class="input-append">
<input class="inputPassword span4" placeholder="Password" type="password" autocomplete="off" data-bind="value: password" />
<span class="add-on">
<i class="icon-key"></i>
</span>
</div>
</div>
<div class="control-group">
<button type="submit" class="btn btn-large span4 buttonLogin" data-bind="command: submitCommand">
<i class="icon-spinner-2 animated" data-bind="visible: submitRequest"></i>
<span data-bind="visible: !submitRequest()">Log into the admin panel</span>
</button>
</div>
</form>
</center>
</div>
<div class="loginAfter"></div>
<div>

View file

@ -0,0 +1,17 @@
<div class="b-admin-left g-ui-user-select-none">
<div class="b-toolbar"></div>
<div class="b-content thm-settings-menu">
<div class="b-admin-menu" data-bind="foreach: menu">
<!-- ko if: disabled -->
<span class="e-item disabled">
<span class="i18n e-link" data-bind="attr: { 'data-i18n-text': label }"></span>
</span>
<!-- /ko -->
<!-- ko ifnot: disabled -->
<a class="e-item selectable" href="#" data-bind="css: {'selected': selected }, attr: { 'href': $root.link(route) }">
<span class="i18n e-link" data-bind="attr: { 'data-i18n-text': label }"></span>
</a>
<!-- /ko -->
</div>
</div>
</div>

View file

@ -0,0 +1,46 @@
<div class="b-admin-packages">
<div class="alert" data-bind="visible: !packagesReal() && !packagesLoading()">
Cannot access the repository at the moment.
</div>
<div class="alert" data-bind="visible: !packagesMainUpdatable() && !packagesLoading()">
Unable to update RainLoop Webmail source!
</div>
<div class="alert" data-bind="visible: '' !== packagesError()">
<button type="button" class="close" data-bind="click: function () { packagesError('') }">&times;</button>
<span data-bind="text: packagesError"></span>
</div>
<div class="process-place" data-bind="style: {'visibility': visibility }">
<i class="icon-spinner-2 animated"></i>
&nbsp;&nbsp;
loading...
</div>
<div data-bind="visible: 0 < packagesAvailableForUpdate().length">
<div class="legend">
Available for Update (<span data-bind="text: packagesAvailableForUpdate().length"></span>)
</div>
<div data-bind="template: { name: 'AdminPackagesTable', data: {f: packagesAvailableForUpdate} }"></div>
<br />
</div>
<div data-bind="visible: 0 < packagesCurrent().length">
<div class="legend">
Installed Packages
</div>
<div data-bind="template: { name: 'AdminPackagesTable', data: {f: packagesCurrent} }"></div>
<br />
</div>
<div data-bind="visible: 0 < packagesAvailableForInstallation().length">
<div class="legend">
Available for Installation
</div>
<div data-bind="template: { name: 'AdminPackagesTable', data: {f: packagesAvailableForInstallation} }"></div>
<br />
</div>
</div>

View file

@ -0,0 +1,19 @@
<tr class="e-item">
<td class="package-name-parent">
<span class="package-name" data-bind="text: name, css: {'core': 'core' === type}"></span>
<span class="package-installed pull-right" data-bind="text: installed"></span>
<div class="package-desc" data-bind="text: desc"></div>
</td>
<td class="package-version-parent">
<span class="package-version" data-bind="text: version"></span>
</td>
<td class="package-release-parent">
<span class="package-release" data-bind="text: release"></span>
</td>
<td class="package-actions-parent">
<i class="icon-download e-action button-download" data-bind="visible: !loading() && canBeUpdated, click: function () { $root.installPackage($data); }"></i>
&nbsp;
<i class="icon-trash e-action button-delete" data-bind="visible: !loading() && canBeDeleted, click: function () { $root.deletePackage($data); }"></i>
<i class="icon-spinner-2 animated" data-bind="visible: loading"></i>
</td>
</tr>

View file

@ -0,0 +1,9 @@
<table class="table table-hover table-bordered b-admin-packages-list-table" data-bind="i18nUpdate: f">
<colgroup>
<col />
<col style="width: 100px" />
<col style="width: 100px" />
<col style="width: 80px" />
</colgroup>
<tbody data-bind="template: { name: 'AdminPackagesListItem', foreach: f }"></tbody>
</table>

View file

@ -0,0 +1,23 @@
<div class="b-admin-right g-ui-user-select-none">
<div class="b-toolbar">
<div class="btn-toolbar">
<h4 class="pull-left">
Admin Panel
&nbsp;&nbsp;
(<span data-bind="text: adminDomain"></span>)
</h4>
<div class="btn-group pull-right">
<a class="btn btn-narrow" data-bind="click: logoutClick">
<i class="icon-switch"></i>
</a>
</div>
</div>
</div>
<div class="b-content" data-bind="nano: true">
<div class="content g-scrollbox">
<div class="content-wrapper">
<div id="rl-settings-subscreen" class="b-settings-content"></div>
</div>
</div>
</div>
</div>

View file

@ -0,0 +1,15 @@
<tr class="e-item" data-bind="css: {'disabled': disabled }">
<td>
<span class="plugin-name" data-bind="text: name"></span>
</td>
<td>
<span class="configure-plugin" data-bind="click: function (oPlugin) { $root.configurePlugin(oPlugin); }">
<i class="icon-settings5 e-action"></i>
</span>
</td>
<td>
<span class="disable-plugin" data-bind="click: function (oPlugin) { $root.disablePlugin(oPlugin); }">
<i data-bind="css: {'e-action icon-checkbox-checked': !disabled(), 'e-action icon-checkbox-unchecked': disabled}"></i>
</span>
</td>
</tr>

View file

@ -0,0 +1,28 @@
<div class="b-admin-plugin-property">
<label class="control-label">
<span data-bind="text: Label, visible: 5 !== Type"></span>
</label>
<div class="controls">
<!-- ko if: 0 === Type || 1 === Type -->
<input type="text" data-bind="value: value" />
<!-- /ko -->
<!-- ko if: 3 === Type -->
<input type="password" data-bind="value: value" />
<!-- /ko -->
<!-- ko if: 2 === Type -->
<textarea data-bind="value: value"></textarea>
<!-- /ko -->
<!-- ko if: 4 === Type -->
<select data-bind="options: Default, value: value"></select>
<!-- /ko -->
<!-- ko if: 5 === Type -->
<label data-bind="click: function () { value(!value()); }">
<i data-bind="css: value() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
&nbsp;&nbsp;
<span data-bind="text: Label"></span>
</label>
<!-- /ko -->
<span class="help-block" style="color: #ccc" data-bind="text: Desc, visible: '' !== Desc"></span>
</div>
<br />
</div>

View file

@ -0,0 +1,48 @@
<div class="b-admin-plugins">
<div class="row">
<div class="alert span8" data-bind="visible: '' !== pluginsError()">
<button type="button" class="close" data-bind="click: function () { pluginsError('') }">&times;</button>
<span data-bind="text: pluginsError"></span>
</div>
</div>
<div class="process-place" data-bind="style: {'visibility': visibility }">
<i class="icon-spinner-2 animated"></i>
&nbsp;&nbsp;
loading...
</div>
<div class="legend">
Plugins
</div>
<div>
<label data-bind="click: function () { enabledPlugins(!enabledPlugins()); }">
<i data-bind="css: enabledPlugins() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
&nbsp;&nbsp;
Enable plugins
</label>
</div>
<br />
<div class="row">
<div class="alert alert-info span8" data-bind="visible: 0 === plugins().length">
No plugins have yet been installed.
<br />
<br />
<strong><a href="#/packages">Click here install new!</a></strong>
</div>
</div>
<div class="row">
<div class="span8">
<table class="table table-hover b-admin-plugins-list-table " data-bind="i18nUpdate: plugins, visible: 0 < plugins().length">
<colgroup>
<col />
<col style="width: 30px" />
<col style="width: 30px" />
</colgroup>
<tbody data-bind="template: { name: 'AdminPluginListItem', foreach: plugins }"></tbody>
</table>
</div>
</div>
</div>

View file

@ -0,0 +1,51 @@
<div class="adminSecurity">
<div class="form-horizontal">
<div class="legend">
Security
</div>
<div class="control-group">
<div class="controls">
<label data-bind="click: function () { csrfProtection(!csrfProtection()); }">
<i data-bind="css: csrfProtection() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
&nbsp;&nbsp;
<abbr title="Cross-site request forgery" class="initialism">CSRF</abbr> protection
</label>
</div>
</div>
<div class="control-group">
<div class="controls">
<a href="#" target="_blank" class="g-ui-link" data-bind="link: phpInfoLink()">Show PHP information</a>
</div>
</div>
</div>
<div class="form-horizontal">
<div class="legend">
Changer Admin Password
</div>
<div class="control-group">
<label class="control-label">
Current password
</label>
<div class="controls">
<input type="password" data-bind="value: adminPassword, valueUpdate: 'afterkeydown'" />
</div>
</div>
<div class="control-group">
<label class="control-label">
New password
</label>
<div class="controls">
<input type="password" data-bind="value: adminPasswordNew, valueUpdate: 'afterkeydown'" />
</div>
</div>
<div class="control-group">
<div class="controls">
<a class="btn" data-bind="command: saveNewAdminPasswordCommand, css: { 'btn-success': adminPasswordUpdateSuccess, 'btn-danger': adminPasswordUpdateError }">
<i class="icon-key" data-bind="css: {'icon-white': adminPasswordUpdateSuccess() || adminPasswordUpdateError() }"></i>
&nbsp;&nbsp;
Update Password
</a>
</div>
</div>
</div>
</div>

View file

@ -0,0 +1,117 @@
<div class="adminSecurity">
<div class="row">
<div class="alert alert-info span10">
Detailed information on social integration is found at
<a href="http://rainloop.net/docs/social/" target="_blank">http://rainloop.net/docs/social/</a>
</div>
</div>
<div class="form-horizontal">
<div class="legend">
Google
</div>
<div class="control-group">
<div class="controls">
<label data-bind="click: function () { googleEnable(!googleEnable()); }">
<i data-bind="css: googleEnable() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
Enable Google Integration
</label>
</div>
</div>
<div class="control-group">
<label class="control-label">
Client ID
</label>
<div class="controls">
<input type="text" class="span5" data-bind="value: googleClientID" />
<div data-bind="saveTrigger: googleTrigger1"></div>
</div>
</div>
<div class="control-group">
<label class="control-label">
Client Secret
</label>
<div class="controls">
<input type="text" class="span5" data-bind="value: googleClientSecret" />
<div data-bind="saveTrigger: googleTrigger2"></div>
</div>
</div>
<div class="legend">
Facebook
</div>
<div class="control-group">
<div class="controls">
<label data-bind="click: function () { facebookEnable(!facebookEnable()); }">
<i data-bind="css: facebookEnable() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
Enable Facebook Integration
</label>
</div>
</div>
<div class="control-group">
<label class="control-label">
App ID
</label>
<div class="controls">
<input type="text" class="span5" data-bind="value: facebookAppID" />
<div data-bind="saveTrigger: facebookTrigger1"></div>
</div>
</div>
<div class="control-group">
<label class="control-label">
App Secret
</label>
<div class="controls">
<input type="text" class="span5" data-bind="value: facebookAppSecret" />
<div data-bind="saveTrigger: facebookTrigger2"></div>
</div>
</div>
<div class="legend">
Twitter
</div>
<div class="control-group">
<div class="controls">
<label data-bind="click: function () { twitterEnable(!twitterEnable()); }">
<i data-bind="css: twitterEnable() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
Enable Twitter Integration
</label>
</div>
</div>
<div class="control-group">
<label class="control-label">
Consumer Key
</label>
<div class="controls">
<input type="text" class="span5" data-bind="value: twitterConsumerKey" />
<div data-bind="saveTrigger: twitterTrigger1"></div>
</div>
</div>
<div class="control-group">
<label class="control-label">
Consumer Secret
</label>
<div class="controls">
<input type="text" class="span5" data-bind="value: twitterConsumerSecret" />
<div data-bind="saveTrigger: twitterTrigger2"></div>
</div>
</div>
<div class="legend">
Dropbox
</div>
<div class="control-group">
<div class="controls">
<label data-bind="click: function () { dropboxEnable(!dropboxEnable()); }">
<i data-bind="css: dropboxEnable() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
Enable Dropbox Integration
</label>
</div>
</div>
<div class="control-group">
<label class="control-label">
Api Key
</label>
<div class="controls">
<input type="text" class="span5" data-bind="value: dropboxApiKey" />
<div data-bind="saveTrigger: dropboxTrigger1"></div>
</div>
</div>
</div>
</div>

View file

@ -0,0 +1,9 @@
<div class="b-attacment">
<label>
<input type="checkbox" data-bind="checked: enabled" />
&nbsp;&nbsp;
<span class="name" data-bind="text: fileName"></span>
(<span class="size" data-bind="text: friendlySize"></span>)
</label>
</div>
<br />

View file

@ -0,0 +1,14 @@
<div class="b-attacment-in-process" data-bind="css: {'error': '' !== error(), 'uploading': uploading, 'waiting': waiting }, in18nInit: true">
<a class="close" data-bind="click: cancel">&times;</a>
<span class="uploading"><i class="icon-spinner-2 animated"></i></span>
<span class="namedStr">
<span class="name" data-bind="text: fileName"></span>
&nbsp;&nbsp;
(<span class="size" data-bind="text: friendlySize"></span>)
<span class="upload-progress" data-bind="text: progress"></span>
</span>
<div class="error">
<span data-bind="text: error"></span>
</div>
</div>
<br />

View file

@ -0,0 +1,89 @@
<div class="b-login-content">
<div class="loginFormWrapper">
<center>
<div class="alert" data-bind="visible: '' !== submitError()">
<button type="button" class="close" data-bind="click: function () { submitError('') }">&times;</button>
<span data-bind="text: submitError"></span>
</div>
<form class="form-horizontal span4 wrapper loginForm thm-login" action="#/" onsubmit="return false;" data-bind="command: submitCommand">
{{INCLUDE/TopControlGroup/PLACE}}
<div class="control-group" data-bind="css: {'error': emailError}">
<div class="input-append">
<input class="i18n inputEmail span4" type="email" autocomplete="off"
data-bind="value: email, hasFocus: emailFocus" data-i18n-placeholder="LOGIN/LABEL_EMAIL" />
<span class="add-on">
<i class="icon-envelope"></i>
</span>
</div>
</div>
<div class="control-group" data-bind="css: {'error': loginError}, visible: allowCustomLogin()">
<div class="input-append">
<input class="i18n inputLogin span4" type="text" autocomplete="off"
data-bind="value: login, hasFocus: loginFocus" data-i18n-placeholder="LOGIN/LABEL_LOGIN" />
<span class="add-on">
<i class="icon-user"></i>
</span>
</div>
</div>
<div class="control-group" data-bind="css: {'error': passwordError}">
<div class="input-append">
<input class="i18n inputPassword span4" type="password" autocomplete="off"
data-bind="value: password" data-i18n-placeholder="LOGIN/LABEL_PASSWORD" />
<span class="add-on">
<i class="icon-key"></i>
</span>
</div>
</div>
<center>
{{INCLUDE/BottomControlGroup/PLACE}}
</center>
<div class="control-group">
<button type="submit" class="btn btn-large span4 buttonLogin" data-bind="command: submitCommand">
<i class="icon-spinner-2 animated" data-bind="visible: submitRequest"></i>
<span class="i18n" data-i18n-text="LOGIN/BUTTON_SIGN_IN" data-bind="visible: !submitRequest()"></span>
</button>
</div>
<div class="control-group">
<label class="pull-left signMeLabel" data-bind="click: function () { signMe(!signMe()); }, visible: signMeVisibility">
<i data-bind="css: signMe() ? 'checkboxSignMe icon-checkbox-checked' : 'checkboxSignMe icon-checkbox-unchecked'"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="LOGIN/LABEL_SIGN_ME"></span>
</label>
<div class="pull-right" data-bind="visible: facebookLoginEnabled() || googleLoginEnabled() || twitterLoginEnabled()">
<div class="btn-group">
<a class="btn dropdown-toggle buttonLoginMore" data-toggle="dropdown">
<i class="icon-reorder"></i>
</a>
<ul class="dropdown-menu g-ui-menu">
{{INCLUDE/MenuDropdownTop/PLACE}}
<li class="e-item">
<a class="e-link" data-bind="command: facebookCommand, visible: facebookLoginEnabled">
<i class="icon-facebook-2"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="LOGIN/TITLE_SIGN_IN_FACEBOOK"></span>
</a>
</li>
<li class="e-item">
<a class="e-link" data-bind="command: googleCommand, visible: googleLoginEnabled">
<i class="icon-google"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="LOGIN/TITLE_SIGN_IN_GOOGLE"></span>
</a>
</li>
<li class="e-item">
<a class="e-link" data-bind="command: twitterCommand, visible: twitterLoginEnabled">
<i class="icon-twitter"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="LOGIN/TITLE_SIGN_IN_TWITTER"></span>
</a>
</li>
{{INCLUDE/MenuDropdownBottom/PLACE}}
</ul>
</div>
</div>
</div>
</form>
</div>
</center>
<div class="loginAfter"></div>
</div>

View file

@ -0,0 +1,19 @@
<div class="b-folders g-ui-user-select-none thm-folders">
<div class="b-toolbar btn-toolbar">
<a class="btn buttonCompose" data-placement="bottom" data-bind="click: composeClick, tooltip: 'FOLDER_LIST/BUTTON_COMPOSE'">
<i class="icon-pencil"></i>
</a>
<a class="btn buttonContacts" data-placement="bottom" data-bind="visible: allowContacts, click: contactsClick, tooltip: 'FOLDER_LIST/BUTTON_CONTACTS'">
<i class="icon-phonebook"></i>
</a>
</div>
<div class="b-content" data-bind="nano: true">
<div class="content g-scrollbox">
<div class="content-wrapper">
<div data-bind="template: { name: 'MailFolderListSystemItem', foreach: folderListSystem }"></div>
<hr class="b-list-delimiter" />
<div data-bind="template: { name: 'MailFolderListItem', foreach: folderList }"></div>
</div>
</div>
</div>
</div>

View file

@ -0,0 +1,7 @@
<div class="e-item" data-bind="visible: visible">
<a class="e-link" data-bind="droppable: function (oEvent, oUi) { $root.messagesDrop($data, oUi); }, css: { 'selected': selected() && !isSystemFolder(), 'selectable': selectableForFolderList, 'hidden' : hidden, 'print-count': 0 < printableUnreadCount().length, 'system': isSystemFolder, 'anim-action-class': actionBlink }">
<i data-bind="css: collapsedCss()"></i>
<span class="name" data-bind="text: name"></span><!-- &nbsp;<span class="badge pull-right count" data-bind="text: printableUnreadCount"></span> -->
</a>
<div class="b-sub-folders" data-bind="template: { name: 'MailFolderListItem', foreach: subFolders }, css: { 'unpaddig-folder' : isUnpaddigFolder, 'collapsed': collapsed() }"></div>
</div>

View file

@ -0,0 +1,5 @@
<div class="e-item b-folder-system-item">
<a class="e-link" data-bind="droppable: function (oEvent, oUi) { $root.messagesDrop($data, oUi); }, css: { 'selected': selected, 'selectable': selectable, 'print-count': 0 < printableUnreadCount().length, 'anim-action-class': actionBlink }">
<span class="name" data-bind="text: localName()"></span>&nbsp;<span class="badge pull-right count" data-bind="text: printableUnreadCount"></span>
</a>
</div>

View file

@ -0,0 +1,163 @@
<div id="rl-resizer-left">
<div class="messageList g-ui-user-select-none" data-bind="css: {'message-selected': isMessageSelected, 'loading': messageListCompleteLoadingThrottle, 'hideMessageListCheckbox': !useCheckboxesInList() }">
<div class="toolbar">
<div class="btn-toolbar">
<div class="btn-group">
<a class="btn dropdown-toggle buttonMove" data-toggle="dropdown" data-placement="bottom" data-bind="command: moveCommand, tooltip: 'MESSAGE_LIST/BUTTON_MOVE_TO'">
<i class="icon-legacyfilemanager"></i>
&nbsp;&nbsp;
<span class="caret"></span>
</a>
<ul class="dropdown-menu g-ui-menu" data-bind="foreach: folderMenuForMove">
<li class="e-item" data-bind="css: { 'disable': disable }, click: function () { if (!disable) $root.moveSelectedMessagesToFolder(id); }">
<a class="e-link" data-bind="text: name"></a>
</li>
</ul>
</div>
<div class="btn-group">
<a class="btn btn-danger buttonDelete" data-placement="bottom" data-bind="command: deleteCommand, tooltip: 'MESSAGE_LIST/BUTTON_DELETE'">
<i class="icon-trash icon-white"></i>
<span data-bind="text: 1 < messageListCheckedOrSelectedUidsWithSubMails().length ? ' (' + messageListCheckedOrSelectedUidsWithSubMails().length + ')' : ''"></span>
</a>
</div>
<div class="btn-group" data-placement="bottom" data-bind="visible: !isSpamFolder(), tooltip: 'MESSAGE_LIST/BUTTON_SPAM'">
<a class="btn buttonSpam" data-bind="command: spamCommand">
<i class="icon-bug"></i>
</a>
</div>
<div class="btn-group">
<a class="btn dropdown-toggle buttonMore" data-toggle="dropdown" data-placement="right" data-bind="tooltip: 'MESSAGE_LIST/BUTTON_MORE'">
<i class="icon-reorder"></i>
</a>
<ul class="dropdown-menu g-ui-menu">
<li class="e-item" data-bind="click: listUnsetSeen, css: {'disable': !hasCheckedOrSelectedLines()}">
<a class="e-link">
<i class="icon2-none"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="MESSAGE_LIST/MENU_UNSET_SEEN"></span>
</a>
</li>
<li class="e-item" data-bind="click: listSetSeen, css: {'disable': !hasCheckedOrSelectedLines()}">
<a class="e-link">
<i class="icon2-none"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="MESSAGE_LIST/MENU_SET_SEEN"></span>
</a>
</li>
<li class="e-item" data-bind="click: listSetFlags, css: {'disable': !hasCheckedOrSelectedLines()}">
<a class="e-link">
<i class="icon2-none"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="MESSAGE_LIST/MENU_SET_FLAG"></span>
</a>
</li>
<li class="e-item" data-bind="click: listUnsetFlags, css: {'disable': !hasCheckedOrSelectedLines()}">
<a class="e-link">
<i class="icon2-none"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="MESSAGE_LIST/MENU_UNSET_FLAG"></span>
</a>
</li>
<li class="e-item" data-bind="click: listSetAllSeen, css: {'disable': !hasMessages()}">
<a class="e-link">
<i class="icon2-none"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="MESSAGE_LIST/MENU_SET_ALL_SEEN"></span>
</a>
</li>
<li class="divider"></li>
<li class="e-item" data-bind="command: multyForwardCommand">
<a class="e-link">
<i class="icon-reply-all"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="MESSAGE_LIST/BUTTON_MULTY_FORWARD"></span>
</a>
</li>
<li class="divider"></li>
<li class="e-item" data-bind="command: deleteWithoutMoveCommand">
<a class="e-link">
<i class="icon-trash"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="MESSAGE_LIST/BUTTON_DELETE_WITHOUT_MOVE"></span>
</a>
</li>
<li class="e-item" data-bind="command: clearCommand">
<a class="e-link">
<i class="icon-fire"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="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">
<input class="i18n span4 inputSearch" style="width: 258px;" type="text" tabindex="-1" placeholder="" data-i18n-placeholder="SEARCH/MAIN_INPUT_PLACEHOLDER" data-bind="value: inputProxyMessageListSearch, onEnter: searchEnterAction, hasfocus: inputMessageListSearchFocus" />
<a class="btn buttonMoreSearch" data-bind="click: advancedSearchClick">
<span class="caret"></span>
</a>
</div>
<i class="checkboxCkeckAll" data-bind="css: checkAll() ? (isIncompleteChecked() ? 'icon-checkbox-partial' : 'icon-checkbox-checked') : 'icon-checkbox-unchecked', visible: !messageListCompleteLoadingThrottle()"></i>
<i class="icon-spinner-2 animated" style="margin-top: 4px;" data-bind="visible: messageListCompleteLoadingThrottle"></i>
</div>
</div>
<div class="mainDelimiter toolbarDelimiter"></div>
<div class="b-content" data-bind="nano: true, initDom: dragOverBodyArea">
<div class="content g-scrollbox">
<div class="content-wrapper">
<div class="listSearchDesc" data-bind="visible: '' !== messageListSearchDesc()">
<a class="btn btn-small pull-right searchCancelButton" data-bind="click: cancelSearch">
<i class="icon-remove"></i>
</a>
<span data-bind="text: messageListSearchDesc"></span>:
</div>
<div class="listDragOver" data-bind="css: {'viewAppendArea': dragOver() && '' === messageListError() && !popupVisibility(), 'dragOverEnter': dragOverEnter }, initDom: dragOverArea">
<i class="icon-arrow-down-2 e-icon"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="MESSAGE_LIST/PUT_MESSAGE_HERE"></span>
</div>
<div class="listClear" data-bind="visible: '' === messageListSearchDesc() && '' === messageListError() && 0 < messageList().length && (isSpamFolder() || isTrashFolder())">
<span class="g-ui-link i18n" data-i18n-text="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-text="MESSAGE_LIST/EMPTY_LIST"></span>
</div>
<div class="listEmptyListLoading" data-bind="visible: !dragOver() && 0 === messageList().length &&
messageListCompleteLoadingThrottle() && '' === messageListError()">
<span class="i18n" data-i18n-text="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-text="MESSAGE_LIST/EMPTY_SEARCH_LIST"></span>
</div>
<div data-bind="draggable: dragAndDronHelper">
<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">
<a class="btn buttonReload" data-placement="right" data-bind="command: reloadCommand, tooltip: 'MESSAGE_LIST/BUTTON_RELOAD'">
<i class="icon-spinner-2" data-bind="css: {'animated': messageListCompleteLoadingThrottle}"></i>
</a>
<span data-bind="visible: 0 < userUsageProc(), tooltip2: quotaTooltip" class="e-quota">
<span data-bind="text: userUsageProc"></span>%
</span>
<div class="pull-right">
<div class="pagenator g-ui-user-select-none" data-bind="foreach: messageListPagenator">
<a class="page" data-bind="css: { 'current': current, 'custom': custom }, title: title">
<span class="pageNumber" data-bind="text: name"></span>
</a>
</div>
</div>
</div>
</div>
</div>
</div>

View file

@ -0,0 +1,44 @@
<div class="messageListItem" data-bind="css: lineAsCcc()">
<div class="unseenParent">
&nbsp;
</div>
<div class="delimiter"></div>
<div class="wrapper">
<div class="flagParent">
<span class="flagOn">
<i class="icon-favorite"></i>
</span>
<span class="flagOnHalf">
<i class="icon-favorite2"></i>
</span>
<span class="flagOff">
<i class="icon-favorite2"></i>
</span>
</div>
<div class="dateParent actionHandle dragHandle">
<span class="date" data-bind="text: momentShortDate, title: fullFormatDateValue"></span>
</div>
<div class="checkedParent">
<i class="checkboxMessage" data-bind="css: checked() || selected() ? 'checkboxMessage icon-checkbox-checked' : 'checkboxMessage icon-checkbox-unchecked'"></i>
</div>
<div class="senderParent actionHandle dragHandle">
<span class="threadsCountParent fullThreadHandle" data-bind="visible: '' !== threadsLenResult(), css: { 'lastSelected': !lastInCollapsedThread() }">
<span lass="threadsCount" data-bind="visible: !lastInCollapsedThreadLoading(), text: threadsLenResult"></span>
<i class="icon-spinner-2 animated" data-bind="visible: lastInCollapsedThreadLoading"></i>
</span>
<span class="replyFlag"><i class="icon-reply"></i>&nbsp;</span>
<span class="forwardFlag"><i class="icon-forward"></i>&nbsp;</span>
<span class="sender" data-bind="text: senderEmailsString"></span>
&nbsp;
</div>
<div class="attachmentParent actionHandle dragHandle">
<span class="attachment">
<i class="icon-attachment"></i>
</span>
</div>
<div class="subjectParent actionHandle dragHandle">
<span class="subject" data-bind="text: subject"></span>
<span class="subject emptySubjectText" data-bind="text: $root.emptySubjectValue"></span>
</div>
</div>
</div>

View file

@ -0,0 +1,45 @@
<div class="messageListItem e-single-line" data-bind="css: lineAsCcc()">
<div class="unseenParent">
&nbsp;
</div>
<div class="delimiter"></div>
<div class="wrapper">
<div class="dateParent actionHandle dragHandle">
<span class="date" data-bind="text: momentShortDate, title: fullFormatDateValue"></span>
</div>
<div class="checkedParent">
<i class="checkboxMessage" data-bind="css: checked() || selected() ? 'checkboxMessage icon-checkbox-checked' : 'checkboxMessage icon-checkbox-unchecked'"></i>
</div>
<div class="flagParent">
<span class="flagOn">
<i class="icon-favorite"></i>
</span>
<span class="flagOnHalf">
<i class="icon-favorite2"></i>
</span>
<span class="flagOff">
<i class="icon-favorite2"></i>
</span>
</div>
<div class="senderParent actionHandle dragHandle">
<span class="threadsCountParent fullThreadHandle" data-bind="visible: '' !== threadsLenResult(), css: { 'lastSelected': !lastInCollapsedThread() }">
<span lass="threadsCount" data-bind="visible: !lastInCollapsedThreadLoading(), text: threadsLenResult"></span>
<i class="icon-spinner-2 animated" data-bind="visible: lastInCollapsedThreadLoading"></i>
</span>
<span class="replyFlag"><i class="icon-reply"></i>&nbsp;</span>
<span class="forwardFlag"><i class="icon-forward"></i>&nbsp;</span>
<span class="sender" data-bind="text: senderEmailsString"></span>
&nbsp;
</div>
<div class="attachmentParent actionHandle dragHandle">
<span class="attachment">
<i class="icon-attachment"></i>
</span>
</div>
<div class="subjectParent actionHandle dragHandle">
<span class="subject" data-bind="text: subject"></span>
<span class="subject emptySubjectText" data-bind="text: $root.emptySubjectValue"></span>
</div>
<div class="clearfix"></div>
</div>
</div>

View file

@ -0,0 +1,192 @@
<div id="rl-resizer-right">
<div class="messageView" data-bind="css: {'message-selected': isMessageSelected}">
<div class="toolbar g-ui-user-select-none">
<div class="messageButtons btn-toolbar">
<div class="btn-group" data-placement="bottom" data-bind="visible: !$root.usePreviewPane(), tooltip: 'MESSAGE/BUTTON_CLOSE'">
<a class="btn buttonClose" data-bind="command: $root.closeMessage">
<i class="icon-remove"></i>
</a>
</div>
<div class="btn-group" data-placement="bottom" data-bind="visible: $root.isDraftFolder(), tooltip: 'MESSAGE/BUTTON_EDIT'">
<a class="btn btn-success buttonEdit" data-bind="click: function() { $root.editMessage(); }, command: $root.messageVisibilityCommand">
<i class="icon-edit2 icon-white"></i>
</a>
</div>
<div class="btn-group" data-bind="visible: !$root.isDraftFolder()">
<a class="btn buttonReply" data-placement="bottom" data-bind="command: $root.replyCommand, tooltip: 'MESSAGE/BUTTON_REPLY'">
<i class="icon-reply"></i>
</a>
<a class="btn buttonReplyAll" data-placement="bottom" data-bind="command: $root.replyAllCommand, tooltip: 'MESSAGE/BUTTON_REPLY_ALL'">
<i class="icon-reply-all"></i>
</a>
<a class="btn buttonForward" data-placement="bottom" data-bind=" command: $root.forwardCommand, tooltip: 'MESSAGE/BUTTON_FORWARD'">
<i class="icon-forward"></i>
</a>
</div>
<div class="btn-group">
<a class="btn dropdown-toggle buttonMore" data-placement="right" data-toggle="dropdown" data-bind="command: $root.messageVisibilityCommand, tooltip: 'MESSAGE/BUTTON_MORE'">
<i class="icon-reorder"></i>
</a>
<ul class="dropdown-menu g-ui-menu">
<li class="e-item" data-bind="visible: !$root.isDraftFolder()">
<a class="e-link" data-bind="command: $root.forwardAsAttachmentCommand">
<i class="icon-reply"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="MESSAGE/BUTTON_FORWARD_AS_ATTACHMENT"></span>
</a>
</li>
<li class="divider" data-bind="visible: !$root.isDraftFolder()"></li>
<li class="e-item">
<a target="_blank" class="e-link" data-bind="click: function () { if (message()) { message().viewPopupMessage(); }}">
<i class="icon-opennewwindow"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="MESSAGE/BUTTON_IN_NEW_WINDOW"></span>
</a>
</li>
<li class="e-item">
<a target="_blank" class="e-link" data-bind="click: function () { if (message()) { message().printMessage(); }} ">
<i class="icon-print"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="MESSAGE/MENU_PRINT"></span>
</a>
</li>
<li class="divider"></li>
<li class="e-item">
<a target="_blank" class="e-link" data-bind="link: viewViewLink()">
<i class="icon-file-css"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="MESSAGE/MENU_VIEW_ORIGINAL"></span>
</a>
</li>
<li class="e-item">
<a target="_blank" class="e-link" data-bind="link: viewDownloadLink()">
<i class="icon-download"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="MESSAGE/MENU_DOWNLOAD_ORIGINAL"></span>
</a>
</li>
</ul>
</div>
</div>
</div>
<div class="b-content thm-message-view-background-color">
<div>
<div class="b-message-view-desc" data-bind="visible: !message() && '' === $root.messageError()">
<span class="i18n" data-i18n-text="MESSAGE/MESSAGE_VIEW_DESC"></span>
</div>
<div class="b-message-view-desc error" data-bind="visible: !message() && '' !== $root.messageError()">
<span class="text" data-bind="text: $root.messageError()"></span>
</div>
<div data-bind="visible: message">
<div class="messageItem" data-bind="css: viewLineAsCcc(), nano: true">
<div class="content g-scrollbox">
<div class="content-wrapper">
<div>
<span class="buttonUp" data-bind="click: scrollToTop">
<i class="icon-arrow-up--upload"></i>
</span>
<span class="buttonFull" data-bind="click: fullScreen">
<i class="icon-scaleup"></i>
</span>
<span class="buttonUnFull" data-bind="click: unFullScreen">
<i class="icon-scaledown"></i>
</span>
<div class="messageItemHeader">
<div>
<img class="fromPic" data-bind="visible: viewUserPicVisible, attr: {'src': viewUserPic() }">
<div style="overflow: hidden;">
<div class="subjectParent" data-bind="event: { 'dblclick': toggleFullScreen }">
<span class="subject" data-bind="text: viewSubject, title: viewSubject"></span>
<span class="i18n emptySubjectText" data-i18n-text="MESSAGE/EMPTY_SUBJECT_TEXT"></span>
</div>
<div class="senderParent">
<div class="g-ui-user-select-none" style="float: left; cursor: pointer;" data-bind="click: function() { $root.showFullInfo(!$root.showFullInfo()); }">
<i class="icon-arrow-right" data-bind="css: $root.showFullInfo() ? 'icon-arrow-down' : 'icon-arrow-right'"></i>
</div>
<div class="informationShort" data-bind="event: { 'dblclick': toggleFullScreen }">
<span data-bind="visible: !$root.isDraftOrSentFolder()">
<span class="from" data-bind="html: viewFromShort, title: viewFrom"></span>
</span>
<span data-bind="visible: $root.isDraftOrSentFolder()">
<span class="i18n uiLabel labelTo" data-i18n-text="MESSAGE/LABEL_TO"></span>:
<span class="to" data-bind="html: viewToShort, title: viewTo"></span>
</span>
(<span class="date" data-bind="text: viewDate"></span>)
</div>
<div class="clearfix"></div>
</div>
</div>
<div class="informationFull" data-bind="visible: $root.showFullInfo()">
<div data-bind="visible: '' !== viewFrom()">
<span class="i18n uiLabel labelFrom" data-i18n-text="MESSAGE/LABEL_FROM"></span>:
&nbsp;
<span class="from" data-bind="text: viewFrom, title: viewFrom"></span>
</div>
<div data-bind="visible: '' !== viewTo()">
<span class="i18n uiLabel labelTo" data-i18n-text="MESSAGE/LABEL_TO"></span>:
&nbsp;
<span class="to" data-bind="text: viewTo, title: viewTo"></span>
</div>
<div data-bind="visible: '' !== viewCc()">
<span class="i18n uiLabel labelCc" data-i18n-text="MESSAGE/LABEL_CC"></span>:
&nbsp;
<span class="cc" data-bind="text: viewCc, title: viewCc"></span>
</div>
<div data-bind="visible: '' !== viewBcc()">
<span class="i18n uiLabel labelBcc" data-i18n-text="MESSAGE/LABEL_BCC"></span>:
&nbsp;
<span class="bcc" data-bind="text: viewBcc, title: viewBcc"></span>
</div>
<div>
<span class="i18n uiLabel labelBcc" data-i18n-text="MESSAGE/LABEL_DATE"></span>:
&nbsp;
<span class="date" data-bind="text: viewDate"></span>
&nbsp;
(<span class="date" data-bind="text: viewMoment"></span>)
</div>
</div>
</div>
</div>
<div class="line-loading e-strip-animation" data-bind="visible: $root.messageLoadingThrottle()"></div>
<div class="loading g-ui-min-height-300" data-bind="visible: $root.messageLoadingThrottle()">
<span class="i18n text" data-i18n-text="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" data-bind="visible: !$root.messageLoadingThrottle()">
<div class="showImages" data-bind="visible: message() && message().hasImages(), click: function() { $root.showImages(message()); }">
<i class="icon-image"></i>
&nbsp;&nbsp;
<span class="i18n text" data-i18n-text="MESSAGE/BUTTON_SHOW_IMAGES"></span>
</div>
<div class="attachmentsPlace" data-bind="visible: message() && message().hasVisibleAttachments()">
<ul class="attachmentList" data-bind="foreach: message() ? message().attachments() : []">
<li class="attachmentItem" draggable="true" data-bind="visible: !isLinked, title: fileName, event: { 'dragstart': eventDragStart }">
<div style="white-space: nowrap; text-overflow: ellipsis; overflow: hidden;">
<i class="attachmentIcon" data-bind="css: iconClass()"></i>
&nbsp;&nbsp;
<span class="attachmentName" data-bind="text: fileName"></span>
</div>
<div>
<a class="attachmentPreview magnificPopupImage pull-left"
data-bind="visible: isImage(), attr: {href: linkPreview(), title: fileName}" target="_blank">
<i class="icon-eye"></i>
</a>
<span class="attachmentSize pull-right" data-bind="text: friendlySize"></span>
</div>
</li>
</ul>
<hr />
</div>
<div class="bodyText g-ui-min-height-300" data-bind="initDom: messagesBodiesDom"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>

View file

@ -0,0 +1,62 @@
<div class="popups">
<div class="modal hide b-activate-content" 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: !activateProcess()">Activate Subscription Key?</span>
<span data-bind="visible: activateProcess">Activation...</span>
</h3>
</div>
<div class="modal-body">
<div class="form-horizontal">
<div class="control-group">
<label class="control-label">
Domain
</label>
<div class="controls">
<h4 class="help-inline" data-bind="text: domain" style="margin-top: 5px;"></h4>
</div>
</div>
<div class="control-group" data-bind="css: {'error': '' !== activateText() && activateText.isError(), 'success': '' !== activateText() && !activateText.isError() }">
<label class="control-label">
Subscription Key
</label>
<div class="controls ">
<input type="text" class="span5" data-bind="visible: !activateProcess() && !activationSuccessed(), value: key, valueUpdate: 'afterkeydown', hasFocus: key.focus"></input>
<h4 class="help-inline" style="margin-top: 5px;" data-bind="text: key, visible: activateProcess() || activationSuccessed()"></h4>
<div class="help-block" data-bind="text: activateText"></div>
</div>
</div>
</div>
<br />
<div class="alert">
<p>
After activation, commercial subscription for <strong data-bind="text: domain"></strong> will be extended.
</p>
<p>
Once started, the process of activation cannot be aborted or cancelled.
</p>
</div>
</div>
<div class="modal-footer">
<a class="btn" href="http://rainloop.net/purchase/" target="_black">
<i class="icon-cart"></i>
&nbsp;&nbsp;
Purchase
</a>
<a class="btn buttonActivate" data-bind="visible: !activationSuccessed(), command: activateCommand">
<i class="icon-key" data-bind="css: {'icon-key': !activateProcess(), 'icon-spinner-2 animated': activateProcess()}" ></i>
&nbsp;&nbsp;
Activate
</a>
<span style="color: green" data-bind="visible: activationSuccessed">
&nbsp;&nbsp;&nbsp;
<i class="icon-ok"></i>
&nbsp;&nbsp;
Activated
</span>
</div>
</div>
</div>
</div>

View file

@ -0,0 +1,48 @@
<div class="popups">
<div class="modal hide b-account-add-content" 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-text="POPUPS_ADD_ACCOUNT/TITLE_ADD_ACCOUNT"></span>
</h3>
</div>
<div class="modal-body">
<div class="form-horizontal">
<div class="alert" 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="control-group" data-bind="css: {'error': emailError}">
<label class="i18n control-label" data-i18n-text="LOGIN/LABEL_EMAIL"></label>
<div class="controls">
<input class="inputEmail input-large" type="email" autocomplete="off"
data-bind="value: email, valueUpdate: 'afterkeydown', onEnter: addAccountCommand, hasfocus: emailFocus" />
</div>
</div>
<div class="control-group" data-bind="css: {'error': loginError}, visible: allowCustomLogin()">
<label class="i18n control-label" data-i18n-text="LOGIN/LABEL_LOGIN"></label>
<div class="controls">
<input class="inputLogin input-large" type="text" autocomplete="off"
data-bind="value: login, onEnter: addAccountCommand, hasfocus: loginFocus" />
</div>
</div>
<div class="control-group" data-bind="css: {'error': passwordError}">
<label class="i18n control-label" data-i18n-text="LOGIN/LABEL_PASSWORD"></label>
<div class="controls">
<input class="inputPassword input-large" type="password" autocomplete="off"
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="css: {'icon-user-add': !submitRequest(), 'icon-spinner-2 animated': submitRequest()}"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="POPUPS_ADD_ACCOUNT/BUTTON_ADD_ACCOUNT"></span>
</a>
</div>
</div>
</div>
</div>

View file

@ -0,0 +1,86 @@
<div class="popups">
<div class="modal hide b-advanced-search-content" 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-text="SEARCH/TITLE_ADV"></span>
</h3>
</div>
<div class="modal-body">
<form class="form-horizontal" action="#/" autocomplete="off" onsubmit="return false;" data-bind="command: searchCommand">
<div class="row">
<div class="span4">
<div class="control-group">
<label class="control-label">
<span class="i18n" data-i18n-text="SEARCH/LABEL_ADV_FROM"></span>
</label>
<div class="controls">
<input class="uiInput inputFrom" type="text" data-bind="value: from, onEnter: searchCommand, hasfocus: fromFocus, onEsc: cancelCommand" />
</div>
</div>
<div class="control-group">
<label class="control-label">
<span class="i18n" data-i18n-text="SEARCH/LABEL_ADV_TO"></span>
</label>
<div class="controls">
<input class="uiInput inputFrom" type="text" data-bind="value: to, onEnter: searchCommand, onEsc: cancelCommand" />
</div>
</div>
<div class="control-group">
<label class="control-label">
<span class="i18n" data-i18n-text="SEARCH/LABEL_ADV_SUBJECT"></span>
</label>
<div class="controls">
<input class="uiInput inputFrom" type="text" data-bind="value: subject, onEnter: searchCommand, onEsc: cancelCommand" />
</div>
</div>
</div>
<div class="span4">
<div class="control-group">
<label class="control-label">
<span class="i18n" data-i18n-text="SEARCH/LABEL_ADV_TEXT"></span>
</label>
<div class="controls">
<input class="uiInput inputFrom" type="text" data-bind="value: text, onEnter: searchCommand, onEsc: cancelCommand" />
</div>
</div>
<div class="control-group">
<label class="control-label">
<span class="i18n" data-i18n-text="SEARCH/LABEL_ADV_DATE"></span>
</label>
<div class="controls">
<select data-bind="value: selectedDateValue">
<option value="-1" class="i18n" data-i18n-text="SEARCH/LABEL_ADV_DATE_ALL"></option>
<option value="3" class="i18n" data-i18n-text="SEARCH/LABEL_ADV_DATE_3_DAYS"></option>
<option value="7" class="i18n" data-i18n-text="SEARCH/LABEL_ADV_DATE_7_DAYS"></option>
<option value="30" class="i18n" data-i18n-text="SEARCH/LABEL_ADV_DATE_MONTH"></option>
<option value="90" class="i18n" data-i18n-text="SEARCH/LABEL_ADV_DATE_3_MONTHS"></option>
<option value="180" class="i18n" data-i18n-text="SEARCH/LABEL_ADV_DATE_6_MONTHS"></option>
<option value="365" class="i18n" data-i18n-text="SEARCH/LABEL_ADV_DATE_YEAR"></option>
</select>
</div>
</div>
<div class="control-group">
<label class="control-label">
</label>
<div class="controls">
<label data-bind="click: function () { hasAttachments(!hasAttachments()); }">
<i data-bind="css: hasAttachments() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="SEARCH/LABEL_ADV_HAS_ATTACHMENTS"></span>
</label>
</div>
</div>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="submit" class="btn buttonAdvSearch" data-bind="command: searchCommand">
<i class="icon-search"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="SEARCH/BUTTON_ADV_SEARCH"></span>
</a>
</div>
</div>
</div>

View file

@ -0,0 +1,113 @@
<div class="popups">
<div class="modal hide b-compose" data-backdrop="static" data-bind="modal: modalVisibility, css: {'loading': saving() || sending()}">
<div class="modal-header b-header-toolbar g-ui-user-select-none">
<button type="button" class="close" data-bind="command: cancelCommand">&times;</button>
<a class="btn btn-large button-send" data-bind="command: sendCommand, css: {'btn-danger': sendError, 'btn-warning': sendSuccessButSaveError }">
<i data-bind="css: {'icon-rocket': !sending(), 'icon-spinner-2 animated': sending(), 'icon-white': sendError() || sendSuccessButSaveError()}"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="COMPOSE/BUTTON_SEND"></span>
</a>
<a class="btn button-save" data-bind="command: saveCommand, css: {'btn-danger': savedError }">
<i data-bind="css: {'icon-floppy': !saving(), 'icon-spinner-2 animated': saving(), 'icon-white': savedError()}"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="COMPOSE/BUTTON_SAVE"></span>
</a>
<a class="btn btn-danger button-delete" data-bind="command: deleteCommand">
<i class="icon-trash icon-white"></i>
</a>
<span class="saved-text" data-bind="text: savedOrSendingText, css: { 'errorDesc': savedError }"></span>
</div>
<div class="modal-body">
<div>
<div class="b-header g-ui-user-select-none">
<div class="g-ui-table">
<div class="e-row">
<div class="e-cell e-label">
<label class="control-label">
<span class="i18n" data-i18n-text="COMPOSE/TITLE_FROM"></span>
</label>
</div>
<div class="e-cell e-value">
<strong class="pull-left" data-bind="text: formattedFrom()"></strong>
<span class="pull-right" data-bind="visible: !showCcAndBcc()">
<span class="i18n g-ui-link" data-i18n-text="COMPOSE/LINK_SHOW_INPUTS" data-bind="click: function () { showCcAndBcc(true); }"></span>
</span>
</div>
</div>
<div class="e-row">
<div class="e-cell e-label">
<label class="control-label">
<span class="i18n" data-i18n-text="COMPOSE/TITLE_TO"></span>
</label>
</div>
<div class="e-cell e-value">
<input type="text" data-bind="select2: to" />
<span class="help-block error-desc" data-bind="visible: emptyToError">
<span class="i18n" data-i18n-text="COMPOSE/EMPTY_TO_ERROR_DESC"></span>
</span>
</div>
</div>
<div class="e-row" data-bind="visible: showCcAndBcc">
<div class="e-cell e-label">
<span class="i18n" data-i18n-text="COMPOSE/TITLE_CC"></span>
</div>
<div class="e-cell e-value">
<input type="text" data-bind="select2: cc" />
</div>
</div>
<div class="e-row" data-bind="visible: showCcAndBcc">
<div class="e-cell e-label">
<span class="i18n" data-i18n-text="COMPOSE/TITLE_BCC"></span>
</div>
<div class="e-cell e-value">
<input type="text" data-bind="select2: bcc" />
</div>
</div>
<div class="e-row">
<div class="e-cell e-label">
<span class="i18n" data-i18n-text="COMPOSE/TITLE_SUBJECT"></span>
</div>
<div class="e-cell e-value">
<input type="text" size="70" data-bind="value: subject" />
</div>
</div>
<div class="e-row">
<div class="e-cell e-label"></div>
<div class="e-cell e-value">
<div class="b-appachments pull-left" data-bind="visible: 0 < attachments().length">
<div data-bind="template: { name: 'ComposeAttachment', foreach: attachmentsInReady }"></div>
<div data-bind="template: { name: 'ComposeAttachmentInProcess', foreach: attachmentsInProcess }"></div>
</div>
<div data-bind="visible: addAttachmentEnabled">
<div class="b-attachment-place" data-bind="visible: dragAndDropEnabled() && dragAndDropVisible(), initDom: composeUploaderDropPlace, css: {'dragAndDropOver': dragAndDropOver}">
<span class="i18n" data-i18n-text="COMPOSE/ATTACH_DROP_FILES_DESC"></span>
</div>
<div class="pull-right">
<div class="btn-group">
<a class="btn" data-placement="top" data-bind="initDom: composeUploaderButton, tooltip: 'COMPOSE/ATTACH_FILES'">
<i class="icon-attachment"></i>
</a>
<a class="btn" data-placement="top" data-bind="visible: dropboxEnabled, command: dropboxCommand, tooltip: 'COMPOSE/DROPBOX'">
<i class="icon-dropbox"></i>
</a>
<a class="btn" data-placement="top" data-bind="visible: driveEnabled, command: driveCommand, tooltip: 'COMPOSE/GOOGLE_DRIVE'">
<i class="icon-google-drive"></i>
</a>
</div>
</div>
</div>
</div>
</div>
</div>
<div data-bind="initDom: composeEditorToolbar"></div>
</div>
<div class="textAreaParent" style="height: 200px; min-height: 200px" data-bind="initResizeTrigger: [resizer(), 200, 30]">
<textarea style="height: 100%; width: 100%" data-bind="initDom: composeEditorTextArea"></textarea>
<div style="height: 100%" data-bind="initDom: composeEditorHtmlArea"></div>
</div>
</div>
</div>
</div>
</div>

View file

@ -0,0 +1,104 @@
<div class="popups">
<div class="modal hide b-contacts-content" data-bind="modal: modalVisibility">
<div class="modal-header b-header-toolbar g-ui-user-select-none">
<button type="button" class="close" data-bind="command: cancelCommand">&times;</button>
<a class="btn button-create-contact" data-bind="command: newCommand">
<i class="icon-plus"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="CONTACTS/BUTTON_ADD_CONTACT"></span>
</a>
<a class="btn btn-success button-new-message" data-bind="command: newMessageCommand">
<i class="icon-envelope icon-white"></i>
</a>
<a class="btn btn-danger button-delete" data-bind="command: deleteCommand">
<i class="icon-trash icon-white"></i>
<span data-bind="text: 1 < contactsCheckedOrSelected().length ? ' (' + contactsCheckedOrSelected().length + ')' : ''"></span>
</a>
</div>
<div class="modal-body" style="position: relative">
<div class="b-list-toopbar">
<input class="i18n span3 e-search" type="text" placeholder="Search" data-18n-placeholder="CONTACS/SEARCH_INPUT_PLACEHOLDER" data-bind="value: search" />
</div>
<div class="b-list-content g-ui-user-select-none" data-bind="nano: true, css: {'hideContactListCheckbox': !useCheckboxesInList()}">
<div class="content g-scrollbox">
<div class="content-wrapper">
<div class="listClear" data-bind="visible: viewClearSearch() && '' !== search()">
<span class="g-ui-link i18n" data-i18n-text="CONTACTS/CLEAR_SEARCH" data-bind="command: clearCommand"></span>
</div>
<div class="listEmptyList" data-bind="visible: 0 === contacts().length && '' === search() && !contacts.loading()">
<span class="i18n" data-i18n-text="CONTACTS/EMPTY_LIST"></span>
</div>
<div class="listEmptyListLoading" data-bind="visible: 0 === contacts().length && '' === search() && contacts.loading()">
<span class="i18n" data-i18n-text="CONTACTS/LIST_LOADING"></span><span class="textLoadingAnimationD1">.</span><span class="textLoadingAnimationD2">.</span><span class="textLoadingAnimationD3">.</span>
</div>
<div class="listEmptySearchList" data-bind="visible: 0 === contacts().length && '' !== search() && !contacts.loading()">
<span class="i18n" data-i18n-text="CONTACTS/EMPTY_SEARCH"></span>
</div>
<div class="e-contact-foreach" data-bind="foreach: contacts, visible: 0 < contacts().length">
<div class="e-contact-item g-ui-user-select-none" data-bind="css: lineAsCcc()">
<div class="unseenParent">
&nbsp;
</div>
<div class="delimiter"></div>
<div class="wrapper">
<div class="checkedParent">
<i class="checkboxItem" data-bind="css: checked() || selected() ? 'checkboxMessage icon-checkbox-checked' : 'checkboxMessage icon-checkbox-unchecked'"></i>
</div>
<div class="nameParent actionHandle">
<span class="listName" data-bind="text: listName"></span>
&nbsp;
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="b-view-content" data-bind="nano: true">
<div class="content g-scrollbox">
<div class="content-wrapper">
<div class="b-contact-view-desc" data-bind="visible: emptySelection">
<span class="i18n" data-i18n-text="CONTACTS/CONTACT_VIEW_DESC"></span>
</div>
<div data-bind="visible: !emptySelection()">
<div class="form-horizontal top-part">
<div class="control-group">
<div class="control-label" data-bind="initDom: imageUploader">
<div class="image-wrapper" style="width: 100px; height: 100px;">
<img data-bind="initDom: imageDom" style="width: 100px; height: 100px;" />
</div>
</div>
<div class="controls">
<div class="top-row">
<span class="contactEmptyValueClick" data-bind="visible: !viewName.focused() && '' === viewName(), click: function() { viewName.focused(true); }">display name</span>
<span class="contactValueClick" data-bind="visible: !viewName.focused() && '' !== viewName(), click: function() { viewName.focused(true); }, text: viewName"></span>
<input class="contactValueInput span5" type="text" placeholder="display name" data-bind="value: viewName, visible: viewName.focused, hasfocus: viewName.focused, onEnter: function () { viewName.focused(false); }">
</div>
<div class="top-row" data-bind="css: { hasError: viewEmail.hasError() }">
<span class="contactEmptyValueClick" data-bind="visible: !viewEmail.focused() && '' === viewEmail(), click: function() { viewEmail.focused(true); }">email</span>
<span class="contactValueClick" data-bind="visible: !viewEmail.focused() && !viewEmail.hasError() && '' !== viewEmail(), click: function() { viewEmail.focused(true); }, text: viewEmail"></span>
<input class="contactValueInput span5" type="text" placeholder="email" data-bind="value: viewEmail, visible: viewEmail.hasError() || viewEmail.focused(), hasfocus: viewEmail.focused, onEnter: function () { viewEmail.focused(false); }">
</div>
</div>
</div>
<div class="control-group">
<div class="control-label">
</div>
<div class="controls">
</div>
</div>
</div>
<button class="btn button-save-contact" data-bind="command: saveCommand">
<i data-bind="css: {'icon-ok': !viewSaving(), 'icon-spinner-2 animated': viewSaving()}"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="CONTACTS/BUTTON_CREATE_CONTACT" data-bind="visible: '' === viewID()"></span>
<span class="i18n" data-i18n-text="CONTACTS/BUTTON_UPDATE_CONTACT" data-bind="visible: '' !== viewID()"></span>
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>

View file

@ -0,0 +1,94 @@
<div class="popups">
<div class="modal hide b-domain-content" data-bind="modal: modalVisibility">
<div class="modal-header">
<button type="button" class="close" data-bind="command: cancelCommand">&times;</button>
<h3 data-bind="text: headerText"></h3>
</div>
<div class="modal-body">
<form class="form-horizontal domain-form" action="#/" onsubmit="return false;">
<div class="row" data-bind="visible: !edit()">
<div class="span6">
Name
<br />
<input type="text" data-bind="value: name, valueUpdate: 'afterkeydown'" />
<span class="error-desc" data-bind="text: savingError"></span>
</div>
</div>
<br />
<div class="row">
<div class="span4" data-bind="css: { 'testing-done': testingDone, 'testing-error': testingImapError }">
<div class="legend imap-header">
IMAP
</div>
Server
<br />
<input type="text" data-bind="value: imapServer, valueUpdate: 'afterkeydown', hasfocus: imapServerFocus" />
<br />
<br />
Port
<br />
<input type="text" data-bind="value: imapPort, valueUpdate: 'afterkeydown'" />
<br />
<br />
Secure
<br />
<select class="span2" data-bind="value: imapSecure">
<option value="0">None</option>
<option value="1">SSL</option>
<option value="2">TLS</option>
</select>
</div>
<div class="span4" data-bind="css: { 'testing-done': testingDone, 'testing-error': testingSmtpError }">
<div class="legend smtp-header">
SMTP
</div>
Server
<br />
<input type="text" data-bind="value: smtpServer, valueUpdate: 'afterkeydown', hasfocus: smtpServerFocus" />
<br />
<br />
Port
<br />
<input type="text" data-bind="value: smtpPort, valueUpdate: 'afterkeydown'" />
<br />
<br />
Secure
<br />
<select class="span2" data-bind="value: smtpSecure">
<option value="0">None</option>
<option value="1">SSL</option>
<option value="2">TLS</option>
</select>
<br />
<br />
<label data-bind="click: function () { smtpAuth(!smtpAuth()); }">
<i data-bind="css: smtpAuth() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
&nbsp;&nbsp;
Use authentication
</label>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<a class="btn button-test-connection pull-left" data-bind="command: testConnectionCommand, css: {
'btn-success': testingDone() && !testingImapError() && !testingSmtpError(),
'btn-danger': testingDone() && (testingImapError() || testingSmtpError()) }">
<i data-bind="css: {'icon-info': !testing(), 'icon-spinner-2 animated': testing(), 'icon-white': testingDone()}"></i>
&nbsp;&nbsp;
Test Connection
</a>
<a class="btn buttonClose" data-bind="command: cancelCommand">
<i class="icon-remove"></i>
&nbsp;&nbsp;
Close
</a>
<a class="btn buttonClear" data-bind="command: createOrAddCommand">
<i data-bind="css: edit() ? 'icon-ok' : 'icon-plus', visible: !saving()"></i>
<i class="icon-spinner-2 animated" data-bind="visible: saving"></i>
&nbsp;&nbsp;
<span data-bind="text: edit() ? 'Update' : 'Add'"></span>
</a>
</div>
</div>
</div>

View file

@ -0,0 +1,34 @@
<div class="popups">
<div class="modal hide b-folder-clear-content" 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-text="POPUPS_CLEAR_FOLDER/TITLE_CLEAR_FOLDER" data-bind="visible: !clearingProcess()"></span>
<span class="i18n" data-i18n-text="POPUPS_CLEAR_FOLDER/TITLE_CLEARING_PROCESS" data-bind="visible: clearingProcess"></span>
</h3>
</div>
<div class="modal-body">
<div>
<i class="icon-warning" style="color:red" />
&nbsp;&nbsp;
<strong>
<span class="i18n" data-i18n-html="POPUPS_CLEAR_FOLDER/DANGER_DESC_WARNING"></span>
</strong>
<br />
<br />
<span data-bind="html: dangerDescHtml"></span>
<br />
<span class="i18n" data-i18n-html="POPUPS_CLEAR_FOLDER/DANGER_DESC_HTML_2"></span>
</div>
</div>
<div class="modal-footer">
<a class="btn btn-danger buttonClear" data-bind="command: clearCommand">
<i class="icon-fire" data-bind="css: {'icon-fire': !clearingProcess(), 'icon-spinner-2 animated': clearingProcess()}" ></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="POPUPS_CLEAR_FOLDER/BUTTON_CLEAR"></span>
</a>
</div>
</div>
</div>
</div>

View file

@ -0,0 +1,40 @@
<div class="popups">
<div class="modal hide b-folder-create-content" 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-text="POPUPS_CREATE_FOLDER/TITLE_CREATE_FOLDER"></span>
</h3>
</div>
<div class="modal-body">
<div class="form-horizontal">
<div class="control-group">
<label class="control-label">
<span class="i18n" data-i18n-text="POPUPS_CREATE_FOLDER/LABEL_NAME"></span>
</label>
<div class="controls">
<input class="uiInput inputName" type="text" data-bind="value: folderName, valueUpdate: 'afterkeydown', onEnter: createFolder, hasfocus: focusTrigger" />
</div>
</div>
<div class="control-group">
<label class="control-label">
<span class="i18n" data-i18n-text="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: createFolder">
<i class="icon-add-to-list"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="POPUPS_CREATE_FOLDER/BUTTON_CREATE"></span>
</a>
</div>
</div>
</div>
</div>

View file

@ -0,0 +1,53 @@
<div class="popups">
<div class="modal hide b-folder-system-content" 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-text="POPUPS_SYSTEM_FOLDERS/TITLE_SYSTEM_FOLDERS"></span>
</h3>
</div>
<div class="modal-body">
<div class="form-horizontal">
<div class="alert" data-bind="visible: '' !== notification()">
<span data-bind="text: notification"></span>
</div>
<div class="control-group">
<label class="control-label">
<span class="i18n" data-i18n-text="POPUPS_SYSTEM_FOLDERS/LABEL_SENT"></span>
</label>
<div class="controls">
<select data-bind="options: folderSelectList, value: sentFolder,
optionsText: 'name', optionsValue: 'id', optionsAfterRender: $root.defautOptionsAfterRender"></select>
</div>
</div>
<div class="control-group">
<label class="control-label">
<span class="i18n" data-i18n-text="POPUPS_SYSTEM_FOLDERS/LABEL_DRAFTS"></span>
</label>
<div class="controls">
<select data-bind="options: folderSelectList, value: draftFolder,
optionsText: 'name', optionsValue: 'id', optionsAfterRender: defautOptionsAfterRender"></select>
</div>
</div>
<div class="control-group">
<label class="control-label">
<span class="i18n" data-i18n-text="POPUPS_SYSTEM_FOLDERS/LABEL_SPAM"></span>
</label>
<div class="controls">
<select data-bind="options: folderSelectList, value: spamFolder,
optionsText: 'name', optionsValue: 'id', optionsAfterRender: $root.defautOptionsAfterRender"></select>
</div>
</div>
<div class="control-group">
<label class="control-label">
<span class="i18n" data-i18n-text="POPUPS_SYSTEM_FOLDERS/LABEL_TRASH"></span>
</label>
<div class="controls">
<select data-bind="options: folderSelectList, value: trashFolder,
optionsText: 'name', optionsValue: 'id', optionsAfterRender: $root.defautOptionsAfterRender"></select>
</div>
</div>
</div>
</div>
</div>
</div>

View file

@ -0,0 +1,37 @@
<div class="popups">
<div class="modal hide b-plugin-content" data-bind="modal: modalVisibility">
<div class="modal-header">
<button type="button" class="close" data-bind="command: cancelCommand">&times;</button>
<h4>
Plugin "<span data-bind="text: name"></span>"
</h4>
</div>
<div class="modal-body">
<form class="form-horizontal plugin-form" action="#/" onsubmit="return false;">
<div class="well" data-bind="text: readme, visible: hasReadme()"></div>
<div class="well" data-bind="visible: !hasReadme() && !hasConfiguration()">
Nothing to configure
</div>
<div class="alert" data-bind="visible: '' !== saveError()">
<button type="button" class="close" data-bind="click: function () { saveError('') }">&times;</button>
<span data-bind="text: saveError"></span>
</div>
<div data-bind="foreach: configures, visible: hasConfiguration">
<div data-bind="template: { name: 'AdminPluginProperty' }"></div>
</div>
</form>
</div>
<div class="modal-footer">
<a class="btn buttonClose" data-bind="command: cancelCommand">
<i class="icon-remove"></i>
&nbsp;&nbsp;
Close
</a>
<a class="btn buttonClear" data-bind="command: saveCommand, visible: hasConfiguration">
<i class="icon-ok"></i>
&nbsp;&nbsp;
Save
</a>
</div>
</div>
</div>

View file

@ -0,0 +1,56 @@
<style>
html, body {
margin: 0;
padding: 0;
background-color: #fff;
font-family: arial, sans-serif;
}
.tbl {width:100%;font-family:normal 11px Tahoma, Arial, Helvetica, "sans-serif"}
.tt {padding:5px;border:solid #ddd;border-width:0px 0px 1px 0px}
.tv {padding:5px;border:solid #ddd;border-width:0px 0px 1px 1px}
.tb {padding:15px}
a {color: blue; text-decoration: underline}
a:visited {color: #609}
a:active {color: red}
blockquote {border-left: 2px solid black; margin: 0; padding: 0px 10px}
pre {margin: 0px; padding: 0px; font-family: arial, sans-serif; background: #fff; border: none; white-space: normal}
</style>
<table cellpadding="0" cellspacing="0" class="tbl">
<tbody>
<tr>
<td class="tt i18n" data-i18n-text="MESSAGE/PRINT_LABEL_FROM"></td>
<td class="tv" data-bind="text: popupFrom"></td>
</tr>
<tr>
<td class="tt i18n" data-i18n-text="MESSAGE/PRINT_LABEL_TO"></td>
<td class="tv" data-bind="text: popupTo"></td>
</tr>
<tr data-bind="visible: '' !== popupCc">
<td class="tt i18n" data-i18n-text="MESSAGE/PRINT_LABEL_CC"></td>
<td class="tv" data-bind="text: popupCc"></td>
</tr>
<tr data-bind="visible: '' !== popupBcc">
<td class="tt i18n" data-i18n-text="MESSAGE/PRINT_LABEL_BCC"></td>
<td class="tv" data-bind="text: popupBcc"></td>
</tr>
<tr data-bind="visible: '' !== popupDate">
<td class="tt i18n" data-i18n-text="MESSAGE/PRINT_LABEL_DATE"></td>
<td class="tv" data-bind="text: popupDate"></td>
</tr>
<tr>
<td class="tt i18n" data-i18n-text="MESSAGE/PRINT_LABEL_SUBJECT"></td>
<td class="tv" data-bind="text: popupSubject"></td>
</tr>
<tr data-bind="visible: '' !== popupAttachments">
<td class="tt i18n" data-i18n-text="MESSAGE/PRINT_LABEL_ATTACHMENTS"></td>
<td class="tv" data-bind="text: popupAttachments"></td>
</tr>
<tr>
<td colspan="2" class="tb">
<div data-bind="html: popupBody"></div>
</td>
</tr>
</tbody>
</table>

View file

@ -0,0 +1,38 @@
<div class="b-settings-accounts">
<div class="form-horizontal">
<div class="legend">
<span class="i18n" data-i18n-text="SETTINGS_ACCOUNTS/LEGEND_ACCOUNTS"></span>
</div>
</div>
<a class="btn" data-bind="click: addNewAccount">
<i class="icon-user-add"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="SETTINGS_ACCOUNTS/BUTTON_ADD_ACCOUNT"></span>
</a>
<div class="process-place" data-bind="style: {'visibility': visibility }">
<i class="icon-spinner-2 animated"></i>
&nbsp;&nbsp;
<span data-bind="text: processText"></span>
</div>
<table class="table table-hover list-table" data-bind="i18nUpdate: accounts">
<colgroup>
<col />
<col style="width: 1%" />
</colgroup>
<tbody data-bind="foreach: accounts">
<tr class="account-item">
<td>
<span class="account-name" data-bind="text: email"></span>
<a class="btn btn-small btn-small-small btn-danger pull-right button-delete" data-bind="css: {'delete-access': deleteAccess()}, click: function(oAccount) { $root.deleteAccount(oAccount); }">
<span class="i18n" data-i18n-text="SETTINGS_ACCOUNTS/DELETING_ASK"></span>
</a>
</td>
<td>
<span class="delete-account" data-bind="visible: !deleteAccess() && canBeDalete(), click: function (oAccount) { $root.accountForDeletion(oAccount); }">
<i class="icon-trash"></i>
</span>
</td>
</tr>
</tbody>
</table>
</div>

View file

@ -0,0 +1,32 @@
<div class="b-settings-general">
<div class="form-horizontal">
<div class="legend">
<span class="i18n" data-i18n-text="SETTINGS_CHANGE_PASSWORD/LEGEND_CHANGE_PASSWORD"></span>
</div>
<div class="control-group">
<label class="control-label">
<span class="i18n" data-i18n-text="SETTINGS_CHANGE_PASSWORD/LABEL_CURRENT_PASSWORD"></span>
</label>
<div class="controls">
<input type="password" data-bind="value: currentPassword, valueUpdate: 'afterkeydown'" />
</div>
</div>
<div class="control-group">
<label class="control-label">
<span class="i18n" data-i18n-text="SETTINGS_CHANGE_PASSWORD/LABEL_NEW_PASSWORD"></span>
</label>
<div class="controls">
<input type="password" data-bind="value: newPassword, valueUpdate: 'afterkeydown'" />
</div>
</div>
<div class="control-group">
<div class="controls">
<a class="btn" data-bind="command: saveNewPasswordCommand, css: { 'btn-success': passwordUpdateSuccess, 'btn-danger': passwordUpdateError }">
<i data-bind="css: {'icon-spinner-2 animated': changeProcess(), 'icon-key': !changeProcess(), 'icon-white': passwordUpdateSuccess() || passwordUpdateError() }"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="SETTINGS_CHANGE_PASSWORD/BUTTON_UPDATE_PASSWORD"></span>
</a>
</div>
</div>
</div>
</div>

View file

@ -0,0 +1,3 @@
<div class="settingsCustom">
CUSTOM
</div>

View file

@ -0,0 +1,26 @@
<tr class="folder-item" data-bind="css: { 'selectable': selectable, 'gmailFolder' : isGmailFolder }">
<td>
<span class="folder-padding" data-bind="css: 'deep-' + deep">&nbsp;</span>
<span class="folder-name" data-bind="text: name, visible: !edited(), css: { 'e-action': canBeEdited, 'can-be-edited': canBeEdited }, click: function (oFolder) { $root.folderForEdit(oFolder); }"></span>
&nbsp;
<span class="folder-system-name" data-bind="text: manageFolderSystemName, visible: isSystemFolder"></span>
<input type="text" class="folder-name-input" data-bind="value: nameForEdit, visible: edited, hasfocus: edited, onEnter: function (oFolder) { $root.folderEditOnEnter(oFolder); }, onEsc: function (oFolder) { $root.folderEditOnEsc(oFolder); }" />
<a class="btn btn-small btn-small-small btn-danger pull-right button-delete" data-bind="css: {'delete-access': deleteAccess()}, click: function(oFolder) { $root.deleteFolder(oFolder); }">
<span class="i18n" data-i18n-text="SETTINGS_FOLDERS/DELETING_ASK"></span>
</a>
</td>
<td>
<span class="delete-folder" data-bind="visible: canBeDeleted() && !deleteAccess(), click: function (oFolder) { $root.folderForDeletion(oFolder); }">
<i class="icon-trash"></i>
</span>
</td>
<td>
<span class="unsubscribe-folder" data-bind="visible: canBeSubScribed() && !subScribed(), click: function(oFolder) { $root.subscribeFolder(oFolder); }">
<i class="icon-eye"></i>
</span>
<span class="subscribe-folder" data-bind="visible: canBeSubScribed() && subScribed(), click: function(oFolder) { $root.unSubscribeFolder(oFolder); }">
<i class="icon-eye"></i>
</span>
</td>
</tr>
<!-- ko template: { name: 'SettingsFolderItem', foreach: subFolders } --><!-- /ko -->

View file

@ -0,0 +1,35 @@
<div class="b-settings-folders" data-bind="css: { 'ignore-folder-subscribe': ignoreFolderSubscribe() }">
<div class="form-horizontal">
<div class="legend">
<span class="i18n" data-i18n-text="SETTINGS_FOLDERS/LEGEND_FOLDERS"></span>
</div>
</div>
<a class="btn" data-bind="click: createFolder">
<i class="icon-add-to-list"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="SETTINGS_FOLDERS/BUTTON_CREATE"></span>
</a>
&nbsp;&nbsp;
<a class="btn" data-bind="click: systemFolder">
<i class="icon-wrench"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="SETTINGS_FOLDERS/BUTTON_SYSTEM"></span>
</a>
<div class="alert folders-list-error" data-bind="visible: '' !== foldersListError()">
<button type="button" class="close" data-bind="click: function () { foldersListError(''); }">&times;</button>
<span data-bind="text: foldersListError"></span>
</div>
<div class="process-place" data-bind="style: {'visibility': visibility }">
<i class="icon-spinner-2 animated"></i>
&nbsp;&nbsp;
<span data-bind="text: processText"></span>
</div>
<table class="table table-hover list-table" data-bind="i18nUpdate: folderList">
<colgroup>
<col />
<col style="width: 1%" />
<col style="width: 1%" />
</colgroup>
<tbody data-bind="template: { name: 'SettingsFolderItem', foreach: folderList }"></tbody>
</table>
</div>

View file

@ -0,0 +1,106 @@
<div class="b-settings-general">
<div class="form-horizontal">
<div class="legend">
<span class="i18n" data-i18n-text="SETTINGS_GENERAL/LEGEND_GENERAL"></span>
</div>
<div class="control-group">
<label class="control-label">
<span class="i18n" data-i18n-text="SETTINGS_GENERAL/LABEL_LANGUAGE"></span>
</label>
<div class="controls">
<select data-bind="options: languagesOptions, value: mainLanguage, optionsText: 'optText', optionsValue: 'optValue'"></select>
<div data-bind="saveTrigger: languageTrigger"></div>
</div>
</div>
<div class="control-group">
<label class="control-label" style="padding-top: 0;">
<span class="i18n" data-i18n-text="SETTINGS_GENERAL/LABEL_EDITOR"></span>
</label>
<div class="controls">
<label>
<input type="radio" name="richTextEditorType" value="Html" data-bind="checked: editorDefaultType" style="display: none" />
<i data-bind="css: 'Html' === editorDefaultType() ? ' icon-radio-checked' : 'icon-radio-unchecked'"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="SETTINGS_GENERAL/LABEL_EDITOR_HTML_AS_DEFAULT"></span>
</label>
<label>
<input type="radio" name="richTextEditorType" value="Plain" data-bind="checked: editorDefaultType" style="display: none" />
<i data-bind="css: 'Plain' === editorDefaultType() ? ' icon-radio-checked' : 'icon-radio-unchecked'"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="SETTINGS_GENERAL/LABEL_EDITOR_PLAIN_AS_DEFAULT"></span>
</label>
</div>
</div>
</div>
<div class="form-horizontal">
<div class="legend">
<span class="i18n" data-i18n-text="SETTINGS_GENERAL/LABEL_VIEW_OPTIONS"></span>
</div>
<div class="control-group">
<div class="controls">
<select class="span2" data-bind="value: mainMessagesPerPage" style="width: 70px;">
<option value="10">10</option>
<option value="20">20</option>
<option value="30">30</option>
<option value="50">50</option>
<option value="100">100</option>
</select>
<span class="i18n help-inline" data-i18n-text="SETTINGS_GENERAL/LABEL_MESSAGE_PER_PAGE"></span>
<div data-bind="saveTrigger: mppTrigger"></div>
</div>
</div>
<div class="control-group">
<div class="controls">
<label data-bind="click: function () { showImages(!showImages()); }">
<i data-bind="css: showImages() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="SETTINGS_GENERAL/LABEL_SHOW_IMAGES"></span>
</label>
<label data-bind="click: function () { useCheckboxesInList(!useCheckboxesInList()); }">
<i data-bind="css: useCheckboxesInList() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="SETTINGS_GENERAL/LABEL_USE_CHECKBOXES_IN_LIST"></span>
</label>
<label data-bind="click: function () { usePreviewPane(!usePreviewPane()); }">
<i data-bind="css: usePreviewPane() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="SETTINGS_GENERAL/LABEL_USE_PREVIEW_PANE"></span>
</label>
<label data-bind="click: function () { useThreads(!useThreads()); }">
<i data-bind="css: useThreads() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="SETTINGS_GENERAL/LABEL_USE_THREADS"></span>
</label>
<label data-bind="click: function () { replySameFolder(!replySameFolder()); }">
<i data-bind="css: replySameFolder() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="SETTINGS_GENERAL/LABEL_REPLY_SAME_FOLDER"></span>
</label>
<!--
<label data-bind="click: function () { showAnimation(!showAnimation()); }">
<i data-bind="css: showAnimation() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="SETTINGS_GENERAL/LABEL_SHOW_ANIMATION"></span>
</label>
-->
</div>
</div>
</div>
<div class="form-horizontal" data-bind="visible: isDesctopNotificationsSupported()">
<div class="legend">
<span class="i18n" data-i18n-text="SETTINGS_GENERAL/LABEL_CHROME_NOTIFICATION"></span>
</div>
<div class="control-group">
<div class="controls">
<div data-bind="visible: isDesctopNotificationsSupported">
<label data-bind="css: { 'denied-by-browser': isDesctopNotificationsDenied }, click: function () { if (!isDesctopNotificationsDenied()) { useDesktopNotifications(!useDesktopNotifications()); }}">
<i data-bind="css: useDesktopNotifications() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
&nbsp;&nbsp;
<span class="i18n notification-desc" data-i18n-text="SETTINGS_GENERAL/LABEL_CHROME_NOTIFICATION_DESC"></span>
<span class="i18n notification-desc-denied" data-i18n-text="SETTINGS_GENERAL/LABEL_CHROME_NOTIFICATION_DESC_DENIED"></span>
</label>
</div>
</div>
</div>
</div>
</div>

View file

@ -0,0 +1,18 @@
<div class="b-settins-left g-ui-user-select-none">
<div class="b-toolbar">
</div>
<div class="b-content thm-settings-menu">
<div class="b-settings-menu" data-bind="foreach: menu">
<!-- ko if: disabled -->
<span class="e-item disabled">
<span class="i18n e-link" data-bind="attr: { 'data-i18n-text': label }"></span>
</span>
<!-- /ko -->
<!-- ko ifnot: disabled -->
<a class="e-item selectable" href="#" data-bind="css: {'selected': selected }, attr: { 'href': $root.link(route) }">
<span class="i18n e-link" data-bind="attr: { 'data-i18n-text': label }"></span>
</a>
<!-- /ko -->
</div>
</div>
</div>

View file

@ -0,0 +1,18 @@
<div class="b-settins-right g-ui-user-select-none">
<div class="b-toolbar">
<div class="btn-toolbar">
<a class="btn button-back" data-bind="click: backToMailBoxClick">
<i class="icon-arrow-left"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="SETTINGS_LABELS/BUTTON_BACK"></span>
</a>
</div>
</div>
<div class="b-content" data-bind="nano: true">
<div class="content g-scrollbox">
<div class="content-wrapper">
<div id="rl-settings-subscreen" class="b-settings-content"></div>
</div>
</div>
</div>
</div>

View file

@ -0,0 +1,33 @@
<div class="b-settings-personal">
<div class="form-horizontal">
<div class="legend">
<span class="i18n" data-i18n-text="SETTINGS_PERSONAL/LEGEND_PERSONAL"></span>
</div>
<div class="control-group">
<label class="control-label">
<span class="i18n" data-i18n-text="SETTINGS_PERSONAL/LABEL_DISPLAY_NAME"></span>
</label>
<div class="controls">
<input class="input-xlarge" type="text" data-bind="value: displayName" />
<div data-bind="saveTrigger: nameTrigger"></div>
</div>
</div>
<div class="control-group" style="display: none">
<label class="control-label">
<span class="i18n" data-i18n-text="SETTINGS_PERSONAL/LABEL_REPLY_TO"></span>
</label>
<div class="controls">
<input class="input-xlarge" type="text" data-bind="value: replyTo" />
</div>
</div>
<div class="control-group">
<label class="control-label">
<span class="i18n" data-i18n-text="SETTINGS_PERSONAL/LABEL_SIGNATURE"></span>
</label>
<div class="controls">
<textarea class="input-xxlarge" data-bind="value: signature" rows="7"></textarea>
<div style="vertical-align: top;" data-bind="saveTrigger: signatureTrigger"></div>
</div>
</div>
</div>
</div>

View file

@ -0,0 +1,101 @@
<div class="b-settings-social">
<div class="form-horizontal" data-bind="visible: googleEnable">
<div class="legend">
<span class="i18n" data-i18n-text="SETTINGS_SOCIAL/LEGEND_GOOGLE"></span>
</div>
<div class="control-group" data-bind="visible: !googleLoggined()">
<button class="btn" data-bind="command: connectGoogle">
<i class="icon-google" data-bind="visible: !googleActions()"></i>
<i class="icon-spinner-2 animated" data-bind="visible: googleActions()"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="SETTINGS_SOCIAL/BUTTON_GOOGLE_CONNECT"></span>
</button>
<br />
<br />
<blockquote>
<p class="i18n muted" style="width: 700px" data-i18n-text="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: disconnectGoogle">
<i class="icon-remove" data-bind="visible: !googleActions()"></i>
<i class="icon-spinner-2 animated" data-bind="visible: googleActions()"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="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-text="SETTINGS_SOCIAL/LEGEND_FACEBOOK"></span>
</div>
<div class="control-group" data-bind="visible: !facebookLoggined()">
<button class="btn" data-bind="command: connectFacebook">
<i class="icon-facebook" data-bind="visible: !facebookActions()"></i>
<i class="icon-spinner-2 animated" data-bind="visible: facebookActions()"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="SETTINGS_SOCIAL/BUTTON_FACEBOOK_CONNECT"></span>
</button>
<br />
<br />
<blockquote>
<p class="i18n muted" style="width: 700px" data-i18n-text="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: disconnectFacebook">
<i class="icon-remove" data-bind="visible: !facebookActions()"></i>
<i class="icon-spinner-2 animated" data-bind="visible: facebookActions()"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="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-text="SETTINGS_SOCIAL/LEGEND_TWITTER"></span>
</div>
<div class="control-group" data-bind="visible: !twitterLoggined()">
<button class="btn" data-bind="command: connectTwitter">
<i class="icon-twitter" data-bind="visible: !twitterActions()"></i>
<i class="icon-spinner-2 animated" data-bind="visible: twitterActions()"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="SETTINGS_SOCIAL/BUTTON_TWITTER_CONNECT"></span>
</button>
<br />
<br />
<blockquote>
<p class="i18n muted" style="width: 700px" data-i18n-text="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: disconnectTwitter">
<i class="icon-remove" data-bind="visible: !twitterActions()"></i>
<i class="icon-spinner-2 animated" data-bind="visible: twitterActions()"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="SETTINGS_SOCIAL/BUTTON_TWITTER_DISCONNECT"></span>
</button>
</div>
</div>
</div>

View file

@ -0,0 +1,59 @@
<div class="b-settings-themes">
<div class="form-horizontal">
<div class="legend">
<span class="i18n" data-i18n-text="SETTINGS_THEMES/LEGEND_THEMES"></span>
<div class="themeTrigger" data-bind="saveTrigger: themeTrigger"></div>
</div>
</div>
<div class="b-themes-list" data-bind="foreach: themesObjects">
<div class="e-item" data-bind="click: function () { $root.mainTheme(name); }, css: { 'selected': selected }">
<div class="e-name" data-bind="text: nameDisplay"></div>
<img class="e-image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-bind="attr: { 'src': themePreviewSrc }" />
</div>
</div>
<br />
<br />
<div class="form-horizontal" data-bind="visible: showCustomThemeConfig">
<div class="legend">
<span class="i18n" data-i18n-text="SETTINGS_THEMES/LEGEND_THEMES_CUSTOM"></span>
</div>
<div class="control-group">
<label class="control-label" style="padding-top: 0;">
<span class="i18n" data-i18n-text="SETTINGS_THEMES/LABEL_CUSTOM_TYPE"></span>
</label>
<div class="controls">
<label>
<input type="radio" name="customThemeType" value="Light" data-bind="checked: customThemeType" style="display: none" />
<i data-bind="css: 'Light' === customThemeType() ? ' icon-radio-checked' : 'icon-radio-unchecked'"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="SETTINGS_THEMES/LABEL_CUSTOM_TYPE_LIGHT"></span>
</label>
<label>
<input type="radio" name="customThemeType" value="Dark" data-bind="checked: customThemeType" style="display: none" />
<i data-bind="css: 'Dark' === customThemeType() ? ' icon-radio-checked' : 'icon-radio-unchecked'"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="SETTINGS_THEMES/LABEL_CUSTOM_TYPE_DARK"></span>
</label>
</div>
</div>
<div class="control-group">
<label class="control-label" style="padding-top: 0;">
<span class="i18n" data-i18n-text="SETTINGS_THEMES/LABEL_CUSTOM_BACKGROUND_IMAGE"></span>
</label>
<div class="controls">
<div data-bind="visible: '' !== customThemeImg()">
<strong data-bind="text: customThemeImg"></strong>
&nbsp;&nbsp;
<i class="icon-remove" style="cursor: pointer" data-bind="click: removeCustomThemeImg"></i>
<br />
<br />
</div>
<a class="btn" data-bind="visible: '' === customThemeImg(), initDom: customThemeUploaderButton">
<i data-bind="css: {'icon-image': !customThemeUploaderProgress(), 'icon-spinner-2 animated': customThemeUploaderProgress()}"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="SETTINGS_THEMES/BUTTON_UPLOAD_BACKGROUND_IMAGE"></span>
</a>
</div>
</div>
</div>
</div>

View file

@ -0,0 +1,63 @@
<div class="b-system-drop-down g-ui-user-select-none">
<div class="b-toolbar">
<div class="btn-toolbar">
<div class="btn-group pull-right">
<a class="btn btn-narrow" data-bind="click: logoutClick">
<i class="icon-switch"></i>
</a>
</div>
<div class="btn-group pull-right">
&nbsp;&nbsp;&nbsp;
</div>
<div class="btn-group pull-right">
<a class="btn btn-ellipsis btn-block dropdown-toggle system-dropdown" data-placement="left" data-toggle="dropdown"
data-tooltip-class="tooltip-big" data-bind="tooltip2: emailTitle">
<i data-bind="css: {'icon-user': !loading(), 'icon-spinner-2 animated': loading()}"></i>
&nbsp;&nbsp;
<span class="caret"></span>
</a>
<ul class="dropdown-menu g-ui-menu">
<!-- ko if: accounts().length -->
<!-- ko foreach: accounts -->
<li class="e-item">
<a class="e-link" data-bind="click: $root.accountClick, attr: {'href': changeAccountLink() }">
<i class="icon-ok" data-bind="visible: $root.accountEmail() === email"></i>
<i class="icon-user" data-bind="visible: $root.accountEmail() !== email"></i>
&nbsp;&nbsp;
<span data-bind="text: email"></span>
</a>
</li>
<!-- /ko -->
<li class="divider"></li>
<!-- /ko -->
<!-- ko if: allowAddAccount -->
<li class="e-item">
<a class="e-link" data-bind="click: addAccountClick">
<i class="icon-user-add"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="TOP_TOOLBAR/BUTTON_ADD_ACCOUNT"></span>
</a>
</li>
<!-- /ko -->
<li class="e-item">
<a class="e-link" data-bind="click: settingsClick">
<i class="icon-cog"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="TOP_TOOLBAR/BUTTON_SETTINGS"></span>
</a>
</li>
<!--
<li class="divider"></li>
<li class="e-item">
<a class="e-link" data-bind="click: logoutClick">
<i class="icon-switch"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="TOP_TOOLBAR/BUTTON_LOGOUT"></span>
</a>
</li>
-->
</ul>
</div>
</div>
</div>
</div>