Added knockoutjs components

Added material design checkbox component
Added lang changing animation
This commit is contained in:
RainLoop Team 2014-10-30 01:08:53 +04:00
parent c2b7632c13
commit 1423b88839
48 changed files with 1213 additions and 256 deletions

View file

@ -1020,11 +1020,14 @@ class Actions
'UseImapThread' => (bool) $oConfig->Get('labs', 'use_imap_thread', false),
'UseImapSubscribe' => (bool) $oConfig->Get('labs', 'use_imap_list_subscribe', true),
'AllowAppendMessage' => (bool) $oConfig->Get('labs', 'allow_message_append', false),
'MaterialDesign' => (bool) $oConfig->Get('labs', 'use_material_design', true),
'PremType' => $this->PremType(),
'Capa' => array(),
'Plugins' => array()
);
// $aResult['MaterialDesign'] = false;
if ($aResult['UseRsaEncryption'] &&
\file_exists(APP_PRIVATE_DATA.'rsa/public') && \file_exists(APP_PRIVATE_DATA.'rsa/private'))
{

View file

@ -164,6 +164,7 @@ class Service
if (0 === \strlen($sResult))
{
// $aTemplateParameters['{{BaseTemplates}}'] = $this->oServiceActions->compileTemplates($bAdmin, false);
$sResult = \strtr(\file_get_contents(APP_VERSION_ROOT_PATH.'app/templates/Index.html'), $aTemplateParameters);
$sResult = \RainLoop\Utils::ClearHtmlOutput($sResult);

View file

@ -1066,10 +1066,11 @@ class ServiceActions
/**
* @param bool $bAdmin = false
* @param bool $bJsOutput = true
*
* @return string
*/
private function compileTemplates($bAdmin = false)
public function compileTemplates($bAdmin = false, $bJsOutput = true)
{
$sHtml =
\RainLoop\Utils::CompileTemplates(APP_VERSION_ROOT_PATH.'app/templates/Views/Components', $this->oActions, 'Component').
@ -1077,7 +1078,7 @@ class ServiceActions
\RainLoop\Utils::CompileTemplates(APP_VERSION_ROOT_PATH.'app/templates/Views/Common', $this->oActions).
$this->oActions->Plugins()->CompileTemplate($bAdmin);
return 'window.rainloopTEMPLATES='.\MailSo\Base\Utils::Php2js(array($sHtml), $this->Logger()).';';
return $bJsOutput ? 'window.rainloopTEMPLATES='.\MailSo\Base\Utils::Php2js(array($sHtml), $this->Logger()).';' : $sHtml;
}
/**

View file

@ -45,20 +45,21 @@
</div>
</div>
<script data-cfasync="false">
var
oE = window.document.getElementById('rl-loading'),
oElDesc = window.document.getElementById('rl-loading-desc')
;
if (oElDesc && window.rainloopAppData['LoadingDescriptionEsc']) {
oElDesc.innerHTML = window.rainloopAppData['LoadingDescriptionEsc'];
}
if (oE && oE.style) {
oE.style.opacity = 0;
window.setTimeout(function () {
oE.style.opacity = 1;
}, 300);
}
(function (window) {
var
oE = window.document.getElementById('rl-loading'),
oElDesc = window.document.getElementById('rl-loading-desc')
;
if (oElDesc && window.rainloopAppData['LoadingDescriptionEsc']) {
oElDesc.innerHTML = window.rainloopAppData['LoadingDescriptionEsc'];
}
if (oE && oE.style) {
oE.style.opacity = 0;
window.setTimeout(function () {
oE.style.opacity = 1;
}, 300);
}
}(window));
</script>
<div id="rl-loading-error" class="thm-loading">
An Error occurred,

View file

@ -12,18 +12,19 @@
data-bind="value: value, attr: {placeholder: placeholder}" />
<!-- /ko -->
<!-- ko if: 2 === Type -->
<textarea autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: value, attr: {placeholder: placeholder}"></textarea>
<div data-bind="component: {
name: 'TextArea',
params: { value: value, placeholder: placeholder }
}"></div>
<!-- /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>
<div data-bind="component: {
name: 'Checkbox',
params: { value: value, label: Label }
}"></div>
<!-- /ko -->
<span class="help-block" style="color: #ccc" data-bind="text: Desc, visible: '' !== Desc"></span>
</div>

View file

@ -48,21 +48,26 @@
<option value="2">STARTTLS</option>
</select>
&nbsp;&nbsp;&nbsp;&nbsp;
<label class="inline" data-bind="visible: '1' === imapSecure() && false, click: function () { imapVerifySsl(!imapVerifySsl()); }">
<i data-bind="css: imapVerifySsl() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
&nbsp;&nbsp;
Verify ssl certificate
</label>
<div data-bind="visible: '1' === imapSecure() && false, component: {
name: 'Checkbox',
params: {
label: 'Verify ssl certificate',
value: imapVerifySsl
}
}"></div>
</div>
</div>
<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
&nbsp;&nbsp;
<span style="color: #aaa">(user@domain.com &rarr; user)</span>
</label>
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'Use short login form',
value: imapShortLogin,
inline: true
}
}"></div>
&nbsp;
<span style="color: #aaa">(user@domain.com &rarr; user)</span>
</div>
<div class="span5" data-bind="css: { 'testing-done': testingDone, 'testing-error': testingSmtpError }">
<div class="legend smtp-header">
@ -95,26 +100,34 @@
<option value="2">STARTTLS</option>
</select>
&nbsp;&nbsp;&nbsp;&nbsp;
<label class="inline" data-bind="visible: '1' === smtpSecure() && false, click: function () { smtpVerifySsl(!smtpVerifySsl()); }">
<i data-bind="css: smtpVerifySsl() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
&nbsp;&nbsp;
Verify ssl certificate
</label>
<div data-bind="visible: '1' === smtpSecure() && false, component: {
name: 'Checkbox',
params: {
label: 'Verify ssl certificate',
value: smtpVerifySsl
}
}"></div>
</div>
</div>
<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
&nbsp;&nbsp;
<span style="color: #aaa">(user@domain.com &rarr; user)</span>
</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 data-bind="component: {
name: 'Checkbox',
params: {
label: 'Use short login form',
value: smtpShortLogin,
inline: true
}
}"></div>
&nbsp;
<span style="color: #aaa">(user@domain.com &rarr; user)</span>
<br />
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'Use authentication',
value: smtpAuth
}
}"></div>
</div>
<div class="span10">
<div class="legend white-list-header">

View file

@ -1,4 +1,10 @@
<label data-bind="click: toggle, css: {'inline': inline}">
<i data-bind="css: value() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
&nbsp;<span class="i18n" data-bind="attr: {'data-i18n-text': label}"></span>
<label class="e-component e-checkbox" data-bind="click: click, css: {'inline': inline, 'disabled': disable() || !enable() }">
<i data-bind="css: value() ?
(inverted ? 'icon-checkbox-unchecked' : 'icon-checkbox-checked') :
(inverted ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked')
"></i>
<!-- ko if: labeled -->
&nbsp;
<span class="sub-label i18n" data-bind="attr: {'data-i18n-text': label}"></span>
<!-- /ko -->
</label>

View file

@ -0,0 +1,11 @@
<label class="e-component e-checkbox material-design" data-bind="click: click, css: {'inline': inline, 'disabled': disable() || !enable() }">
<div class="sub-checkbox-container">
<div class="sub-checkbox" data-bind="css: {'checked': (value() && !inverted) || (!value() && inverted),
'unchecked': (!value() && !inverted) || (value() && inverted),
'box': animationBox, 'checkmark': animationCheckmark}"></div>
</div>
<!-- ko if: labeled -->
&nbsp;
<span class="sub-label i18n" data-bind="attr: {'data-i18n-text': label}"></span>
<!-- /ko -->
</label>

View file

@ -1,14 +1,14 @@
<input class="i18n" type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" placeholder=""
data-bind="value: value, attr: {'data-i18n-placeholder': placeholder}, enable: enable, css: className" />
<!-- ko if: labeled -->
&nbsp;
<span class="i18n" data-bind="attr: {'data-i18n-text': label}"></span>
&nbsp;
&nbsp;
<span class="i18n" data-bind="attr: {'data-i18n-text': label}"></span>
&nbsp;
<!-- /ko -->
<!-- ko if: triggered -->
&nbsp;
<div data-bind="component: {
name: 'SaveTrigger',
params: { value: trigger }
}"></div>
&nbsp;
<div data-bind="component: {
name: 'SaveTrigger',
params: { value: trigger }
}"></div>
<!-- /ko -->

View file

@ -0,0 +1,7 @@
<div class="e-component e-radio" data-bind="foreach: values">
<label data-bind="click: $parent.click, css: {'inline': $parent.inline}">
<i data-bind="css: $parent.value() === value ? 'icon-radio-checked' : 'icon-radio-unchecked'"></i>
&nbsp;&nbsp;
<span class="sub-label i18n" data-bind="attr: {'data-i18n-text': label}"></span>
</label>
</div>

View file

@ -1,3 +1,3 @@
<div class="settings-saved-trigger">
<i class="icon-spinner animated"></i><i class="icon-remove error"></i><i class="icon-ok success"></i>
<div class="e-component settings-saved-trigger">
<i class="icon-spinner animated"></i><i class="icon-remove error"></i><i class="icon-ok success"></i>
</div>

View file

@ -1,11 +1,12 @@
<select data-bind="options: options, value: value, optionsText: optionsText, optionsValue: optionsValue, css: className"></select>
<select data-bind="options: options, value: value, optionsText: optionsText, optionsValue: optionsValue,
css: className, optionsAfterRender: defautOptionsAfterRender"></select>
<!-- ko if: labeled -->
&nbsp;
<span class="i18n" data-bind="attr: {'data-i18n-text': label}"></span>
&nbsp;
<!-- /ko -->
<!-- ko if: triggered -->
&nbsp;&nbsp;
&nbsp;
<div data-bind="component: {
name: 'SaveTrigger',
params: { value: trigger }

View file

@ -1,9 +1,9 @@
<textarea class="i18n" rows="5" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="true"
data-bind="value: value, enable: enable, attr: { rows: rows }, css: className"></textarea>
<textarea class="i18n" rows="5" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" placeholder=""
data-bind="value: value, enable: enable, attr: { placeholder: placeholder, rows: rows, spellcheck: spellcheck ? 'true' : 'false' }, css: className"></textarea>
<!-- ko if: triggered -->
&nbsp;
<div data-bind="component: {
name: 'SaveTrigger',
params: { value: trigger, verticalAlign: 'top' }
}"></div>
&nbsp;
<div data-bind="component: {
name: 'SaveTrigger',
params: { value: trigger, verticalAlign: 'top' }
}"></div>
<!-- /ko -->

View file

@ -58,14 +58,14 @@
<div class="control-group">
<button type="submit" class="btn btn-large span4 buttonLogin" data-bind="command: submitCommand">
<i class="icon-spinner animated" data-bind="visible: submitRequest"></i>
<span class="i18n" data-i18n-text="LOGIN/BUTTON_SIGN_IN" data-bind="visible: !submitRequest()"></span>
<span class="i18n i18n-animation" 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>
<span class="i18n i18n-animation" data-i18n-text="LOGIN/LABEL_SIGN_ME"></span>
</label>
<div class="pull-right">
<div class="btn-group dropdown" data-bind="registrateBootstrapDropdown: true, visible: socialLoginEnabled() || allowLanguagesOnLogin()">

View file

@ -69,21 +69,27 @@
<label class="control-label">
</label>
<div class="controls">
<label data-bind="click: function () { unseen(!unseen()); }">
<i data-bind="css: unseen() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="SEARCH/LABEL_ADV_UNSEEN"></span>
</label>
<label data-bind="click: function () { starred(!starred()); }">
<i data-bind="css: starred() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="SEARCH/LABEL_ADV_FLAGGED"></span>
</label>
<label data-bind="click: function () { hasAttachment(!hasAttachment()); }">
<i data-bind="css: hasAttachment() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="SEARCH/LABEL_ADV_HAS_ATTACHMENT"></span>
</label>
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'SEARCH/LABEL_ADV_UNSEEN',
value: unseen
}
}"></div>
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'SEARCH/LABEL_ADV_FLAGGED',
value: starred
}
}"></div>
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'SEARCH/LABEL_ADV_HAS_ATTACHMENT',
value: hasAttachment
}
}"></div>
</div>
</div>
</div>

View file

@ -15,16 +15,20 @@
<br />
<div class="control-group">
<div class="controls">
<label data-bind="click: function () { sign(!sign()); }">
<i data-bind="css: sign() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="POPUPS_COMPOSE_OPEN_PGP/LABEL_SIGN"></span>
</label>
<label data-bind="click: function () { encrypt(!encrypt()); }">
<i data-bind="css: encrypt() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="POPUPS_COMPOSE_OPEN_PGP/LABEL_ENCRYPT"></span>
</label>
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'POPUPS_COMPOSE_OPEN_PGP/LABEL_SIGN',
value: sign
}
}"></div>
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'POPUPS_COMPOSE_OPEN_PGP/LABEL_ENCRYPT',
value: encrypt
}
}"></div>
</div>
</div>
<div class="control-group">

View file

@ -41,17 +41,21 @@
<hr />
<div data-bind="template: {'name': actionTemplate()}"></div>
<label data-bind="visible: actionMarkAsReadVisiblity, click: function () { actionMarkAsRead(!actionMarkAsRead()); }">
<i data-bind="css: actionMarkAsRead() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
&nbsp;&nbsp;
<span>Mark as read</span>
</label>
<div data-bind="visible: actionMarkAsReadVisiblity, component: {
name: 'Checkbox',
params: {
label: 'Mark as read',
value: actionMarkAsRead
}
}"></div>
<label data-bind="click: function () { actionSkipOtherFilters(!actionSkipOtherFilters()); }">
<i data-bind="css: actionSkipOtherFilters() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
&nbsp;&nbsp;
<span>Skip other filters</span>
</label>
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'Skip other filters',
value: actionSkipOtherFilters
actionSkipOtherFilters
}"></div>
</div>
</div>
</div>

View file

@ -5,11 +5,13 @@
</div>
<div class="control-group">
<div class="controls">
<label data-bind="click: function () { contactsAutosave(!contactsAutosave()); }">
<i data-bind="css: contactsAutosave() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="SETTINGS_CONTACTS/LABEL_CONTACTS_AUTOSAVE"></span>
</label>
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'SETTINGS_CONTACTS/LABEL_CONTACTS_AUTOSAVE',
value: contactsAutosave
}
}"></div>
</div>
</div>
</div>
@ -20,11 +22,13 @@
</div>
<div class="control-group">
<div class="controls">
<label data-bind="click: function () { enableContactsSync(!enableContactsSync()); }">
<i data-bind="css: enableContactsSync() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="SETTINGS_CONTACTS/LABEL_CONTACTS_SYNC_ENABLE"></span>
</label>
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'SETTINGS_CONTACTS/LABEL_CONTACTS_SYNC_ENABLE',
value: enableContactsSync
}
}"></div>
</div>
</div>
<div class="control-group">

View file

@ -1,7 +1,7 @@
<div class="b-settings-general g-ui-user-select-none">
<div class="form-horizontal">
<div class="legend">
<span class="i18n" data-i18n-text="SETTINGS_GENERAL/LEGEND_GENERAL"></span>
<span class="i18n i18n-animation" data-i18n-text="SETTINGS_GENERAL/LEGEND_GENERAL"></span>
</div>
<div class="control-group" data-bind="visible: allowLanguagesOnSettings">
<label class="control-label">
@ -26,24 +26,22 @@
<span class="i18n" data-i18n-text="SETTINGS_GENERAL/LABEL_EDITOR"></span>
</label>
<div class="controls">
<label for="richTextEditorTypeID1">
<input type="radio" id="richTextEditorTypeID1" name="richTextEditorType" value="Html" data-bind="checked: editorDefaultType" style="position: absolute; left: -10000px" />
<i data-bind="css: 'Html' === editorDefaultType() ? ' icon-radio-checked' : 'icon-radio-unchecked'"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="SETTINGS_GENERAL/LABEL_EDITOR_HTML_AS_DEFAULT"></span>
</label>
<label for="richTextEditorTypeID2">
<input type="radio" id="richTextEditorTypeID2" name="richTextEditorType" value="Plain" data-bind="checked: editorDefaultType" style="position: absolute; left: -10000px" />
<i data-bind="css: 'Plain' === editorDefaultType() ? ' icon-radio-checked' : 'icon-radio-unchecked'"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="SETTINGS_GENERAL/LABEL_EDITOR_PLAIN_AS_DEFAULT"></span>
</label>
<div data-bind="component: {
name: 'Radio',
params: {
value: editorDefaultType,
values: {
'Html': 'SETTINGS_GENERAL/LABEL_EDITOR_HTML_AS_DEFAULT',
'Plain': 'SETTINGS_GENERAL/LABEL_EDITOR_PLAIN_AS_DEFAULT'
}
}
}"></div>
</div>
</div>
</div>
<div class="form-horizontal">
<div class="legend">
<span class="i18n" data-i18n-text="SETTINGS_GENERAL/LABEL_VIEW_OPTIONS"></span>
<span class="i18n i18n-animation" data-i18n-text="SETTINGS_GENERAL/LABEL_VIEW_OPTIONS"></span>
</div>
<div class="control-group">
<div class="controls">
@ -102,17 +100,24 @@
</div>
<div class="form-horizontal" data-bind="visible: isDesktopNotificationsSupported()">
<div class="legend">
<span class="i18n" data-i18n-text="SETTINGS_GENERAL/LABEL_CHROME_NOTIFICATION"></span>
<span class="i18n i18n-animation" 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 data-bind="component: {
name: 'Checkbox',
params: {
label: 'SETTINGS_GENERAL/LABEL_CHROME_NOTIFICATION_DESC',
value: useDesktopNotifications,
disable: isDesktopNotificationsDenied,
inline: true
}
}"></div>
&nbsp;
<span data-bind="visible: isDesktopNotificationsDenied">
<span class="i18n" style="color: #999" data-i18n-text="SETTINGS_GENERAL/LABEL_CHROME_NOTIFICATION_DESC_DENIED"></span>
</span>
</div>
</div>
</div>

View file

@ -8,9 +8,16 @@
<span class="i18n" data-i18n-text="SETTINGS_IDENTITIES/LABEL_DEFAULT"></span>
</label>
<div class="controls">
<select data-bind="options: identitiesOptions, value: defaultIdentityID,
optionsText: 'name', optionsValue: 'id', optionsAfterRender: $root.defautOptionsAfterRender, saveTrigger: defaultIdentityIDTrigger"></select>
<div data-bind="saveTrigger: defaultIdentityIDTrigger"></div>
<div data-bind="component: {
name: 'Select',
params: {
options: identitiesOptions,
value: defaultIdentityID,
optionsText: 'name',
optionsValue: 'id',
trigger: defaultIdentityIDTrigger
}
}"></div>
</div>
</div>
<div class="control-group g-ui-user-select-none">
@ -18,38 +25,52 @@
<span class="i18n" data-i18n-text="SETTINGS_IDENTITIES/LABEL_DISPLAY_NAME"></span>
</label>
<div class="controls">
<input type="text" class="input-xlarge"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: displayName, saveTrigger: displayNameTrigger" />
<div data-bind="saveTrigger: displayNameTrigger"></div>
<div data-bind="component: {
name: 'Input',
params: {
value: displayName,
size: 4,
trigger: displayNameTrigger
}
}"></div>
</div>
</div>
<div class="control-group g-ui-user-select-none" style="display: none">
<!-- <div class="control-group g-ui-user-select-none" style="display: none">
<label class="control-label">
<span class="i18n" data-i18n-text="SETTINGS_IDENTITIES/LABEL_REPLY_TO"></span>
</label>
<div class="controls">
<input type="text" class="input-xlarge"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: replyTo" />
<div data-bind="component: {
name: 'Input',
params: {
value: replyTo,
size: 4
}
}"></div>
</div>
</div>
</div>-->
<div class="control-group">
<label class="control-label g-ui-user-select-none">
<span class="i18n" data-i18n-text="SETTINGS_IDENTITIES/LABEL_SIGNATURE"></span>
</label>
<div class="controls">
<div class="e-signature-place" data-bind="initDom: signatureDom"></div>
<div style="vertical-align: top;" data-bind="saveTrigger: signatureTrigger"></div>
&nbsp;&nbsp;
<div data-bind="component: {
name: 'SaveTrigger',
params: { value: signatureTrigger, verticalAlign: 'top' }
}"></div>
</div>
</div>
<div class="control-group g-ui-user-select-none">
<div class="controls">
<label data-bind="click: function () { signatureToAll(!signatureToAll()); }">
<i data-bind="css: signatureToAll() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="SETTINGS_IDENTITIES/LABEL_ADD_SIGNATURE_TO_ALL"></span>
</label>
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'SETTINGS_IDENTITIES/LABEL_ADD_SIGNATURE_TO_ALL',
value: signatureToAll
}
}"></div>
</div>
</div>
</div>

View file

@ -8,38 +8,52 @@
<span class="i18n" data-i18n-text="SETTINGS_IDENTITY/LABEL_DISPLAY_NAME"></span>
</label>
<div class="controls">
<input type="text" class="input-xlarge"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: displayName, saveTrigger: displayNameTrigger" />
<div data-bind="saveTrigger: displayNameTrigger"></div>
<div data-bind="component: {
name: 'Input',
params: {
value: displayName,
size: 4,
trigger: displayNameTrigger
}
}"></div>
</div>
</div>
<div class="control-group g-ui-user-select-none" style="display: none">
<!-- <div class="control-group g-ui-user-select-none" style="display: none">
<label class="control-label">
<span class="i18n" data-i18n-text="SETTINGS_IDENTITY/LABEL_REPLY_TO"></span>
</label>
<div class="controls">
<input type="text" class="input-xlarge"
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="value: replyTo" />
<div data-bind="component: {
name: 'Input',
params: {
value: replyTo,
size: 4
}
}"></div>
</div>
</div>
</div>-->
<div class="control-group">
<label class="control-label g-ui-user-select-none">
<span class="i18n" data-i18n-text="SETTINGS_IDENTITY/LABEL_SIGNATURE"></span>
</label>
<div class="controls">
<div class="e-signature-place" data-bind="initDom: signatureDom"></div>
<div style="vertical-align: top;" data-bind="saveTrigger: signatureTrigger"></div>
&nbsp;&nbsp;
<div data-bind="component: {
name: 'SaveTrigger',
params: { value: signatureTrigger, verticalAlign: 'top' }
}"></div>
</div>
</div>
<div class="control-group g-ui-user-select-none">
<div class="controls">
<label data-bind="click: function () { signatureToAll(!signatureToAll()); }">
<i data-bind="css: signatureToAll() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="SETTINGS_IDENTITIES/LABEL_ADD_SIGNATURE_TO_ALL"></span>
</label>
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'SETTINGS_IDENTITIES/LABEL_ADD_SIGNATURE_TO_ALL',
value: signatureToAll
}
}"></div>
</div>
</div>
</div>

View file

@ -4,7 +4,7 @@
<a class="btn button-back" data-bind="click: backToMailBoxClick">
<i class="icon-left"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="SETTINGS_LABELS/BUTTON_BACK"></span>
<span class="i18n i18n-animation" data-i18n-text="SETTINGS_LABELS/BUTTON_BACK"></span>
</a>
</div>
</div>

View file

@ -5,11 +5,13 @@
</div>
<div class="control-group">
<div class="controls">
<label data-bind="click: function () { viewEnable(!viewEnable()); }">
<i data-bind="css: viewEnable() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
&nbsp;&nbsp;
<span class="i18n" data-i18n-text="SETTINGS_SECURITY/LABEL_ENABLE_TWO_FACTOR"></span>
</label>
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'SETTINGS_SECURITY/LABEL_ENABLE_TWO_FACTOR',
value: viewEnable
}
}"></div>
</div>
</div>
<div class="control-group">