Uploading and preparing the repository to the dev version.

Original unminified source code (dev folder - js, css, less) (fixes #6)
Grunt build system
Multiple identities correction (fixes #9)
Compose html editor (fixes #12)
New general settings - Loading Description
New warning about default admin password
Split general and login screen settings
This commit is contained in:
RainLoop Team 2013-11-16 02:21:12 +04:00
parent afad45137e
commit 4cc2207513
846 changed files with 99453 additions and 2123 deletions

View file

@ -0,0 +1,39 @@
<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" autocorrect="off" autocapitalize="off" spellcheck="false"
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" autocorrect="off" autocapitalize="off" spellcheck="false"
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,23 @@
<div class="b-settings 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>&nbsp;&ndash;&nbsp;<span data-bind="text: version"></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,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: 'AdminSettingsDomainListItem', foreach: domains }"></tbody>
</table>
</div>
</div>

View file

@ -0,0 +1,92 @@
<div class="b-admin-general">
<div class="row" data-bind="visible: weakPassword">
<div class="alert alert-error span8">
<h4>Warning!</h4>
<br />
You are using the default admin password.
<br />
For security reasons please <strong><a href="#/security">change</a></strong>
password to something else now.
</div>
</div>
<div class="row" data-bind="visible: !contactsSupported">
<div class="alert 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 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, saveTrigger: titleTrigger" />
<div data-bind="saveTrigger: titleTrigger"></div>
</div>
</div>
<div class="control-group">
<label class="control-label">
Loading Description
</label>
<div class="controls">
<input type="text" data-bind="value: loadingDesc, saveTrigger: loadingDescTrigger" />
<div data-bind="saveTrigger: loadingDescTrigger"></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', saveTrigger: languageTrigger"></select>
<div data-bind="saveTrigger: languageTrigger"></div>
<br />
<br />
<label data-bind="click: function () { allowLanguagesOnSettings(!allowLanguagesOnSettings()); }">
<i data-bind="css: allowLanguagesOnSettings() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
Allow language selection on settings screen
</label>
</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', saveTrigger: themeTrigger"></select>
<div data-bind="saveTrigger: themeTrigger"></div>
</div>
</div>
<div class="control-group">
<div class="controls">
<label data-bind="click: function () { allowThemes(!allowThemes()); }">
<i data-bind="css: allowThemes() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
Allow theme selection on settings screen
</label>
<label data-bind="click: function () { allowCustomTheme(!allowCustomTheme()); }">
<i data-bind="css: allowCustomTheme() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
Allow customized theme
</label>
</div>
</div>
<div class="control-group">
<div class="controls">
<label data-bind="click: function () { allowAdditionalAccounts(!allowAdditionalAccounts()); }">
<i data-bind="css: allowAdditionalAccounts() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
Allow additional accounts
</label>
<label data-bind="click: function () { allowIdentities(!allowIdentities()); }">
<i data-bind="css: allowIdentities() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
Allow identities
</label>
</div>
</div>
</div>
</div>

View file

@ -0,0 +1,72 @@
<div class="b-admin-licensing" >
<div class="row">
<div class="alert alert-info span10">
RainLoop Webmail is licensed under <strong>Creative Commons
<br />
Attribution-NonCommercial-ShareAlike 3.0 Unported (CC BY-NC-SA 3.0)</strong> license.
<br />
<br />
You are <strong>free</strong> to use it for your <strong>personal</strong> or <strong>non-profit</strong> projects.
<br />
<br />
Commercial use of <strong>RainLoop Webmail</strong> requires getting a
<!-- <a href="http://rainloop.net/purchase/" target="_blank">permission</a> -->
permission (Coming soon).
</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" data-bind="visible: !subscriptionEnabled()">
<div class="controls">
<div class="alert alert-block span8" style="margin-left: 0">
This domain can't be licensed for commercial use.
</div>
</div>
</div>
<div class="control-group" data-bind="visible: subscriptionEnabled">
<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: subscriptionEnabled() && !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,33 @@
<div class="b-admin-general">
<div class="form-horizontal">
<div class="legend">
Login Screen
</div>
<div class="control-group">
<label class="control-label">
Default Domain
</label>
<div class="controls">
<input type="text" data-bind="value: defaultDomain, saveTrigger: defaultDomainTrigger" />
<div data-bind="saveTrigger: defaultDomainTrigger"></div>
</div>
</div>
<div class="control-group">
<div class="controls">
<label data-bind="click: function () { allowLanguagesOnLogin(!allowLanguagesOnLogin()); }">
<i data-bind="css: allowLanguagesOnLogin() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
Allow language selection on login screen
</label>
<label data-bind="click: function () { determineUserLanguage(!determineUserLanguage()); }">
<i data-bind="css: determineUserLanguage() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
Try to determine user language
</label>
<br />
<label data-bind="click: function () { allowCustomLogin(!allowCustomLogin()); }">
<i data-bind="css: allowCustomLogin() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
Enable additional Login field on login screen
</label>
</div>
</div>
</div>
</div>

View file

@ -0,0 +1,48 @@
<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: 'AdminSettingsPackagesTable', data: {f: packagesAvailableForUpdate} }"></div>
<br />
</div>
<div data-bind="visible: 0 < packagesCurrent().length">
<div class="legend">
Installed Packages
</div>
<div data-bind="template: { name: 'AdminSettingsPackagesTable', 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: 'AdminSettingsPackagesTable', data: {f: packagesAvailableForInstallation} }"></div>
<br />
</div>
</div>

View file

@ -0,0 +1,20 @@
<tr class="e-item">
<td class="package-name-parent">
<i class="package-img" data-bind="css: 'core' === type ? 'icon-fire' : 'icon-lightning'"></i>
<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: 'AdminSettingsPackagesListItem', foreach: f }"></tbody>
</table>

View file

@ -0,0 +1,16 @@
<tr class="e-item" data-bind="css: {'disabled': disabled }">
<td>
<i class="plugin-img icon-lightning"></i>
<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, css: {'disabled': !enabledPlugins()}">
<colgroup>
<col />
<col style="width: 30px" />
<col style="width: 30px" />
</colgroup>
<tbody data-bind="template: { name: 'AdminSettingsPluginListItem', foreach: plugins }"></tbody>
</table>
</div>
</div>
</div>

View file

@ -0,0 +1,60 @@
<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">
<label data-bind="click: function () { usageStatistics(!usageStatistics()); }">
<i data-bind="css: usageStatistics() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
&nbsp;&nbsp;
Automatically send usage statistics to RainLoop team (It does not include any personal information)
</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, saveTrigger: googleTrigger1" />
<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, saveTrigger: googleTrigger2" />
<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, saveTrigger: facebookTrigger1" />
<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, saveTrigger: facebookTrigger2" />
<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, saveTrigger: twitterTrigger1" />
<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, saveTrigger: twitterTrigger2" />
<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, saveTrigger: dropboxTrigger1" />
<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,99 @@
<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" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: email, hasFocus: emailFocus" data-i18n-placeholder="LOGIN/LABEL_EMAIL" />
<span class="add-on">
<i class="icon-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" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: login, hasFocus: loginFocus" data-i18n-placeholder="LOGIN/LABEL_LOGIN" />
<span class="add-on">
<i class="icon-user"></i>
</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" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: password" data-i18n-placeholder="LOGIN/LABEL_PASSWORD" />
<span class="add-on">
<i class="icon-key"></i>
</span>
</div>
</div>
{{INCLUDE/BottomControlGroup/PLACE}}
<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">
<div class="btn-group" data-bind="visible: socialLoginEnabled() || allowLanguagesOnLogin()">
<a class="btn dropdown-toggle buttonLoginMore" data-toggle="dropdown">
<i data-bind="css: langRequest() ? 'icon-spinner-2 animated' : 'icon-reorder'"></i>
</a>
<ul class="dropdown-menu g-ui-menu">
{{INCLUDE/MenuDropdownTop/PLACE}}
<li class="e-item" data-bind="visible: facebookLoginEnabled">
<a class="e-link" data-bind="command: facebookCommand">
<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" data-bind="visible: googleLoginEnabled">
<a class="e-link" data-bind="command: googleCommand">
<i class="icon-google"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="LOGIN/TITLE_SIGN_IN_GOOGLE"></span>
</a>
</li>
<li class="e-item" data-bind="visible: twitterLoginEnabled">
<a class="e-link" data-bind="command: twitterCommand">
<i class="icon-twitter"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="LOGIN/TITLE_SIGN_IN_TWITTER"></span>
</a>
</li>
{{INCLUDE/MenuDropdownMiddle/PLACE}}
<li class="divider" data-bind="visible: socialLoginEnabled() && allowLanguagesOnLogin()"></li>
<li class="e-item" data-bind="visible: allowLanguagesOnLogin">
<a class="e-link" data-bind="click: selectLanguage">
<label class="flag-selector">
<span class="flag-wrapper">
<span data-bind="css: 'flag flag-' + mainLanguage()" style=""></span>
</span>
<span class="flag-name" data-bind="text: mainLanguageFullName"></span>
</label>
</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,10 @@
<div class="e-item" data-bind="visible: visible">
<a class="e-link" data-bind="droppable: function (oEvent, oUi) { $root.messagesDrop($data, oUi); },
droppableOver: function (oEvent, oUi) { $root.messagesDropOver($data, oUi); },
droppableOut: function (oEvent, oUi) { $root.messagesDropOut($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,7 @@
<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="badge pull-right count" data-bind="text: printableUnreadCount"></span>
&nbsp;
<span class="name" data-bind="text: localName()"></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" 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, droppableSelector: '.b-folders .content.g-scrollbox'">
<div class="messageListPlace" data-bind="template: { name: messageListItemTemplate(), foreach: messageList }"></div>
</div>
</div>
</div>
</div>
<div class="mainDelimiter footerDelimiter"></div>
<div class="b-footer thm-message-list-bottom-toolbar">
<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="sidebarParent">
&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 data-bind="css: attachmentIconClass"></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="sidebarParent">
&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 data-bind="css: attachmentIconClass"></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="command: $root.messageEditCommand">
<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,64 @@
<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.
<br />
Note that subscription key can only be activated for a single domain.
</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,49 @@
<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>
<br />
<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,138 @@
<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">
<div class="dropdown pull-left">
<span class="dropdown-toggle g-ui-dropdown e-identity"
id="IdentityLabel" role="button" data-toggle="dropdown"
data-bind="text: currentIdentityString, dropdown: true, css: {'multiply': 1 < identitiesOptions().length }">
</span>
<!-- ko if: 1 < identitiesOptions().length -->
<ul class="dropdown-menu g-ui-menu" role="menu" aria-labelledby="IdentityLabel">
<!-- ko foreach: identitiesOptions -->
<li class="e-item">
<a class="e-link" data-bind="click: function (oIdentity) { $root.selectIdentity(oIdentity); return true; }">
<span data-bind="text: optText"></span>
</a>
</li>
<!-- /ko -->
</ul>
<!-- /ko -->
</div>
<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-delimiter-row" data-bind="visible: showCcAndBcc">&nbsp;</div>
<div class="e-row cc-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 bcc-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 reply-to-row" data-bind="visible: false">
<div class="e-cell e-label">
<span class="i18n" data-i18n-text="COMPOSE/TITLE_REPLY_TO"></span>
</div>
<div class="e-cell e-value">
<input type="text" data-bind="value: replyTo" />
</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" spellcheck="true"></textarea>
<div style="height: 100%" data-bind="initDom: composeEditorHtmlArea" spellcheck="true"></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="sidebarParent">
&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,122 @@
<div class="popups">
<div class="modal hide b-domain-content" data-bind="modal: modalVisibility, css: {'domain-edit': edit, 'domain-white-list-page': whiteListPage}">
<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="span8">
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>
<br />
<br />
<label data-bind="click: function () { imapShortLogin(!imapShortLogin()); }">
<i data-bind="css: imapShortLogin() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
&nbsp;&nbsp;
Use short login form
</label>
</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 () { smtpShortLogin(!smtpShortLogin()); }">
<i data-bind="css: smtpShortLogin() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
&nbsp;&nbsp;
Use short login form
</label>
<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 class="span8">
<div class="legend white-list-header">
White List
</div>
<div class="alert alert-block span6 alert-null-left-margin" style="width: 562px;">
List of users webmail is allowed to access.
Use a space as delimiter.
</div>
<textarea class="input-xxlarge" style="width: 600px" rows="8" data-bind="value: whiteList"></textarea>
</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 button-white-list pull-left" data-bind="command: whiteListCommand">
<i data-bind="css: {'icon-arrow-right-2': !whiteListPage(), 'icon-arrow-left': whiteListPage()}"></i>
&nbsp;&nbsp;
<span data-bind="visible: !whiteListPage()">White List</span>
<span data-bind="visible: whiteListPage()">Back</span>
</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,41 @@
<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">
<br />
<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,54 @@
<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>
<br />
<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,62 @@
<div class="popups">
<div class="modal hide b-identity-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="text: label"></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>
<br />
<div class="control-group" data-bind="visible: !owner(), css: {'error': email.hasError}">
<label class="i18n control-label" data-i18n-text="POPUPS_IDENTITIES/LABEL_EMAIL"></label>
<div class="controls">
<input class="inputEmail input-large" type="email" autocomplete="off"
data-bind="value: email, onEnter: addOrEditIdentityCommand, hasfocus: email.focused" />
</div>
</div>
<div class="control-group" data-bind="visible: owner">
<label class="i18n control-label" data-i18n-text="POPUPS_IDENTITIES/LABEL_EMAIL"></label>
<div class="controls">
<div class="textEmail" data-bind="text: email"></div>
</div>
</div>
<div class="control-group">
<label class="i18n control-label" data-i18n-text="POPUPS_IDENTITIES/LABEL_NAME"></label>
<div class="controls">
<input class="inputName input-large" type="text" autocomplete="off"
data-bind="value: name, onEnter: addOrEditIdentityCommand, hasfocus: name.focused" />
</div>
</div>
<div class="control-group" data-bind="css: {'error': replyTo.hasError}" style="display: none">
<label class="i18n control-label" data-i18n-text="POPUPS_IDENTITIES/LABEL_REPLY_TO"></label>
<div class="controls">
<input class="inputReplyTo input-large" type="text" autocomplete="off"
data-bind="value: replyTo, onEnter: addOrEditIdentityCommand, hasfocus: replyTo.focused" />
</div>
</div>
<div class="control-group" data-bind="css: {'error': bcc.hasError}" style="display: none">
<label class="i18n control-label" data-i18n-text="POPUPS_IDENTITIES/LABEL_BCC"></label>
<div class="controls">
<input class="inputBcc input-large" type="text" autocomplete="off"
data-bind="value: bcc, onEnter: addOrEditIdentityCommand, hasfocus: bcc.focused" />
</div>
</div>
</div>
</div>
<div class="modal-footer">
<a class="btn buttonAddAccount" data-bind="command: addOrEditIdentityCommand">
<i data-bind="css: {'icon-ok': !submitRequest(), 'icon-spinner-2 animated': submitRequest()}"></i>
&nbsp;&nbsp;
<span data-bind="text: button"></span>
</a>
</div>
</div>
</div>
</div>

View file

@ -0,0 +1,20 @@
<div class="popups">
<div class="modal hide b-languages-content" data-bind="modal: modalVisibility, css: {'exp': exp}">
<div class="modal-header">
<button type="button" class="close" data-bind="command: cancelCommand">&times;</button>
<h3>
<span class="i18n" data-i18n-text="POPUPS_LANGUAGES/TITLE_LANGUAGES"></span>
</h3>
</div>
<div class="modal-body">
<div data-bind="foreach: languages">
<label class="lang-item" data-bind="click: function () { $root.changeLanguage(key); }, css: {'selected': selected}">
<span class="flag-wrapper">
<span data-bind="css: 'flag flag-' + key" style=""></span>
</span>
<span class="lang-name" data-bind="text: fullName"></span>
</label>
</div>
</div>
</div>
</div>

View file

@ -0,0 +1,39 @@
<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="visible: !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: 'AdminSettingsPluginProperty' }"></div>
</div>
</form>
</div>
<div class="modal-footer">
<span class="information pull-left" data-bind="visible: hasReadme, popover: readmePopoverConf">
<i class="icon-info"></i>
</span>
<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,39 @@
<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-img icon-user"></span>
<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 () { $root.folderEditOnEnter($data); }, onEsc: function () { $root.folderEditOnEsc($data); }" />
<a class="btn btn-small btn-small-small btn-danger pull-right button-delete" data-bind="css: {'delete-access': deleteAccess()}, click: function() { $root.deleteFolder($data); }">
<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': !useImapSubscribe }">
<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,125 @@
<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" data-bind="visible: allowLanguagesOnSettings">
<label class="control-label">
<span class="i18n" data-i18n-text="SETTINGS_GENERAL/LABEL_LANGUAGE"></span>
</label>
<div class="controls">
<label class="flag-selector">
<span class="flag-wrapper">
<span data-bind="css: 'flag flag-' + mainLanguage()" style=""></span>
</span>
<span class="flag-name" data-bind="text: mainLanguageFullName, click: selectLanguage"></span>
<div data-bind="saveTrigger: languageTrigger"></div>
</label>
</div>
</div>
<!--
<div class="control-group" data-bind="visible: isAnimationSupported">
<label class="control-label" style="padding-top: 0;">
<span class="i18n" data-i18n-text="SETTINGS_GENERAL/LABEL_ANIMATION"></span>
</label>
<div class="controls">
<label>
<input type="radio" name="interfaceAnimation" value="Full" data-bind="checked: interfaceAnimation" style="display: none" />
<i data-bind="css: 'Full' === interfaceAnimation() ? ' icon-radio-checked' : 'icon-radio-unchecked'"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="SETTINGS_GENERAL/LABEL_ANIMATION_FULL"></span>
</label>
<label>
<input type="radio" name="interfaceAnimation" value="Normal" data-bind="checked: interfaceAnimation" style="display: none" />
<i data-bind="css: 'Normal' === interfaceAnimation() ? ' icon-radio-checked' : 'icon-radio-unchecked'"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="SETTINGS_GENERAL/LABEL_ANIMATION_NORMAL"></span>
</label>
<label>
<input type="radio" name="interfaceAnimation" value="None" data-bind="checked: interfaceAnimation" style="display: none" />
<i data-bind="css: 'None' === interfaceAnimation() ? ' icon-radio-checked' : 'icon-radio-unchecked'"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="SETTINGS_GENERAL/LABEL_ANIMATION_NONE"></span>
</label>
</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="options: mainMessagesPerPageArray, value: mainMessagesPerPage, saveTrigger: mppTrigger" style="width: 70px;"></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="visible: threading, 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>
</div>
</div>
</div>
<div class="form-horizontal" data-bind="visible: isDesktopNotificationsSupported()">
<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: isDesktopNotificationsSupported">
<label data-bind="css: { 'denied-by-browser': isDesktopNotificationsDenied }, click: function () { if (!isDesktopNotificationsDenied()) { 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,53 @@
<div class="b-settings-identities">
<div class="form-horizontal">
<div class="legend">
<span class="i18n" data-bind="text: legent"></span>
</div>
</div>
<a class="btn" data-bind="click: addNewIdentity">
<i class="icon-user-add"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="SETTINGS_IDENTITIES/BUTTON_ADD_IDENTITY"></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: identities">
<colgroup>
<col />
<col style="width: 140px" />
<col style="width: 1%" />
</colgroup>
<tbody data-bind="foreach: identities">
<tr class="identity-item">
<td class="e-action">
<span class="identity-img icon-user"></span>
<span class="identity-name" data-bind="text: formattedName()"></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(oIdentity) { $root.deleteIdentity(oIdentity); }">
<span class="i18n" data-i18n-text="SETTINGS_IDENTITIES/DELETING_ASK"></span>
</a>
</td>
<td>
<span class="delete-identity" data-bind="visible: !deleteAccess() && canBeDalete(), click: function (oIdentity) { $root.identityForDeletion(oIdentity); }">
<i class="icon-trash"></i>
</span>
</td>
</tr>
</tbody>
</table>
<br />
<br />
<div class="form-horizontal">
<div class="legend">
<span class="i18n" data-i18n-text="SETTINGS_IDENTITIES/LEGEND_SIGNATURE"></span>
</div>
</div>
<div>
<textarea class="input-xxlarge" data-bind="value: signature, saveTrigger: signatureTrigger" rows="7" spellcheck="true"></textarea>
<div style="vertical-align: top;" data-bind="saveTrigger: signatureTrigger"></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-settings 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, saveTrigger: nameTrigger" />
<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, saveTrigger: signatureTrigger" rows="7" spellcheck="true"></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>