Small fixes

This commit is contained in:
RainLoop Team 2016-07-17 18:03:38 +03:00
parent 278e98561d
commit 786873041f
8 changed files with 561 additions and 507 deletions

View file

@ -247,7 +247,7 @@ class MessageModel extends AbstractModel
this.bcc = emailArrayFromJson(json.Bcc); this.bcc = emailArrayFromJson(json.Bcc);
this.replyTo = emailArrayFromJson(json.ReplyTo); this.replyTo = emailArrayFromJson(json.ReplyTo);
this.deliveredTo = emailArrayFromJson(json.DeliveredTo); this.deliveredTo = emailArrayFromJson(json.DeliveredTo);
this.unsubsribeLinks = json.UnsubsribeLinks; this.unsubsribeLinks = isNonEmptyArray(json.UnsubsribeLinks) ? json.UnsubsribeLinks : [];
this.subject(json.Subject); this.subject(json.Subject);
if (isArray(json.SubjectParts)) if (isArray(json.SubjectParts))
@ -358,6 +358,20 @@ class MessageModel extends AbstractModel
return result; return result;
} }
/**
* @returns {boolean}
*/
hasUnsubsribeLinks() {
return this.unsubsribeLinks && 0 < this.unsubsribeLinks.length;
}
/**
* @returns {string}
*/
getFirstUnsubsribeLink() {
return this.unsubsribeLinks && 0 < this.unsubsribeLinks.length ? (this.unsubsribeLinks[0] || '') : '';
}
/** /**
* @param {AjaxJsonMessage} json * @param {AjaxJsonMessage} json
* @returns {boolean} * @returns {boolean}

View file

@ -4,7 +4,7 @@ import ko from 'ko';
import {createCommand, trim, boolToAjax} from 'Common/Utils'; import {createCommand, trim, boolToAjax} from 'Common/Utils';
import {phpInfo} from 'Common/Links'; import {phpInfo} from 'Common/Links';
import {StorageResultType} from 'Common/Enums'; import {StorageResultType, Magics} from 'Common/Enums';
import {settingsGet} from 'Storage/Settings'; import {settingsGet} from 'Storage/Settings';
@ -42,6 +42,10 @@ class SecurityAdminSettings
} }
}); });
this.isTwoFactorDropperShown = ko.observable(false);
this.twoFactorDropperUser = ko.observable('');
this.twoFactorDropperUser.focused = ko.observable(false);
this.adminLogin = ko.observable(settingsGet('AdminLogin')); this.adminLogin = ko.observable(settingsGet('AdminLogin'));
this.adminLoginError = ko.observable(false); this.adminLoginError = ko.observable(false);
this.adminPassword = ko.observable(''); this.adminPassword = ko.observable('');
@ -102,6 +106,15 @@ class SecurityAdminSettings
this.onNewAdminPasswordResponse = _.bind(this.onNewAdminPasswordResponse, this); this.onNewAdminPasswordResponse = _.bind(this.onNewAdminPasswordResponse, this);
} }
showTwoFactorDropper() {
this.twoFactorDropperUser('');
this.isTwoFactorDropperShown(true);
_.delay(() => {
this.twoFactorDropperUser.focused(true);
}, Magics.Time50ms);
}
onNewAdminPasswordResponse(result, data) { onNewAdminPasswordResponse(result, data) {
if (StorageResultType.Success === result && data && data.Result) if (StorageResultType.Success === result && data && data.Result)
{ {
@ -161,6 +174,10 @@ class SecurityAdminSettings
this.adminPassword(''); this.adminPassword('');
this.adminPasswordNew(''); this.adminPasswordNew('');
this.adminPasswordNew2(''); this.adminPasswordNew2('');
this.isTwoFactorDropperShown(false);
this.twoFactorDropperUser('');
this.twoFactorDropperUser.focused(false);
} }
/** /**

View file

@ -1,14 +1,14 @@
.popups { .popups {
.b-activate-content { .b-activate-content {
width: 700px; width: 700px;
.modal-header { .modal-header {
background-color: #fff; background-color: #fff;
} }
.help-inline { .help-inline {
padding-left: 0px; padding-left: 0px;
} }
} }
} }

View file

@ -1,30 +1,30 @@
.b-plugin-content { .b-plugin-content {
&.modal { &.modal {
width: 660px; width: 660px;
.modal-body { .modal-body {
overflow: auto; overflow: auto;
} }
} }
.modal-header { .modal-header {
background-color: #fff; background-color: #fff;
} }
.information { .information {
display: inline-block; display: inline-block;
background-color: #ddd; background-color: #ddd;
border-radius: 10px; border-radius: 10px;
cursor: pointer; cursor: pointer;
height: 25px; height: 25px;
width: 30px; width: 30px;
text-align: center; text-align: center;
padding-top: 5px; padding-top: 5px;
} }
textarea { textarea {
width: 400px; width: 400px;
height: 70px; height: 70px;
} }
} }

View file

@ -1,16 +1,16 @@
.popups { .popups {
.b-advanced-search-content { .b-advanced-search-content {
&.modal { &.modal {
width: 750px; width: 750px;
.control-label { .control-label {
width: 100px; width: 100px;
} }
.controls { .controls {
margin-left: 110px; margin-left: 110px;
} }
} }
.modal-header { .modal-header {
background-color: #fff; background-color: #fff;
} }
} }
} }

View file

@ -375,7 +375,7 @@ function MessageViewMailBoxUserView()
this.viewSize(oMessage.friendlySize()); this.viewSize(oMessage.friendlySize());
this.viewLineAsCss(oMessage.lineAsCss()); this.viewLineAsCss(oMessage.lineAsCss());
this.viewViewLink(oMessage.viewLink()); this.viewViewLink(oMessage.viewLink());
this.viewUnsubscribeLink(oMessage.unsubsribeLinks[0]); this.viewUnsubscribeLink(oMessage.getFirstUnsubsribeLink());
this.viewDownloadLink(oMessage.downloadLink()); this.viewDownloadLink(oMessage.downloadLink());
this.viewIsImportant(oMessage.isImportant()); this.viewIsImportant(oMessage.isImportant());
this.viewIsFlagged(oMessage.flagged()); this.viewIsFlagged(oMessage.flagged());

View file

@ -1,6 +1,6 @@
<div class="adminSecurity g-ui-user-select-none"> <div class="adminSecurity g-ui-user-select-none">
<div class="legend" data-i18n="TAB_SECURITY/LEGEND_SECURITY"></div>
<div class="form-horizontal"> <div class="form-horizontal">
<div class="legend" data-i18n="TAB_SECURITY/LEGEND_SECURITY"></div>
<div class="control-group"> <div class="control-group">
<div class="controls"> <div class="controls">
<div data-bind="component: { <div data-bind="component: {
@ -21,8 +21,34 @@
inline: true inline: true
} }
}"></div> }"></div>
<br /> </div>
<br /> </div>
</div>
<!--
<div class="form-horizontal">
<div class="control-group" data-bind="visible: isTwoFactorDropperShown()">
<div class="controls">
<div class="input-append">
<input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
data-bind="textInput: twoFactorDropperUser, hasfocus: twoFactorDropperUser.focused" placeholder="Email"/>
<button class="btn">
<i class="icon-spinner animated" data-bind="visible: true"></i>
<span data-bind="visible: false">OK</span>
</button>
</div>
</div>
</div>
<div class="control-group" data-bind="visible: !isTwoFactorDropperShown()">
<div class="controls">
<span class="g-ui-link" data-bind="click: showTwoFactorDropper">Drop user keys</span>
</div>
</div>
</div>
<br />
-->
<div class="form-horizontal">
<div class="control-group">
<div class="controls">
<div data-bind="component: { <div data-bind="component: {
name: 'Checkbox', name: 'Checkbox',
params: { params: {
@ -38,14 +64,11 @@
inline: true inline: true
} }
}"></div> }"></div>
&nbsp;&nbsp;
<span style="color:red">(<span data-i18n="HINTS/BETA"></span>)</span>
</div> </div>
</div> </div>
<div class="control-group"> <div class="control-group">
<div class="controls"> <div class="controls">
<a href="#" target="_blank" class="g-ui-link" data-bind="link: phpInfoLink()" <a href="#" target="_blank" class="g-ui-link" data-bind="link: phpInfoLink()" data-i18n="TAB_SECURITY/LABEL_SHOW_PHP_INFO"></a>
data-i18n="TAB_SECURITY/LABEL_SHOW_PHP_INFO"></a>
</div> </div>
</div> </div>
</div> </div>

View file

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