mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-09-04 15:07:02 +03:00
179 lines
8.7 KiB
HTML
179 lines
8.7 KiB
HTML
<header class="g-ui-user-select-none" data-bind="css: {'loading': saving() || sending()}">
|
||
<a class="btn" data-bind="command: sendCommand, tooltipErrorTip: sendErrorDesc, css: {'btn-success': sendButtonSuccess, 'btn-danger': sendError, 'btn-warning': sendSuccessButSaveError }">
|
||
<i data-bind="css: {'icon-paper-plane': !sending(), 'icon-spinner': sending()}"></i>
|
||
<span class="hide-mobile" data-i18n="COMPOSE/BUTTON_SEND"></span>
|
||
</a>
|
||
<a class="btn button-save" data-bind="command: saveCommand, tooltipErrorTip: savedErrorDesc, css: {'btn-danger': savedError }">
|
||
<i class="fontastic" data-bind="css: {'icon-spinner': saving()}">💾</i>
|
||
<span class="hide-mobile" data-i18n="GLOBAL/SAVE"></span>
|
||
</a>
|
||
|
||
<a class="btn btn-danger button-delete fontastic" data-bind="command: deleteCommand">🗑</a>
|
||
<span class="saved-text hide-mobile" data-bind="text: savedTimeText"></span>
|
||
|
||
<div class="pull-right">
|
||
<a class="btn hide-mobile" data-i18n="GLOBAL/BCC" data-bind="visible: !showBcc(), click: function () { showBcc(true); }"></a>
|
||
<a class="btn hide-mobile" data-i18n="GLOBAL/CC" data-bind="visible: !showCc(), click: function () { showCc(true); }"></a>
|
||
<a class="btn fontastic" data-bind="visible: allowContacts, command: contactsCommand" data-i18n="[title]GLOBAL/CONTACTS">📇</a>
|
||
<div class="btn-group dropdown" data-bind="registerBootstrapDropdown: true" style="display:inline-block;vertical-align:top">
|
||
<a class="btn dropdown-toggle fontastic">☰</a>
|
||
<ul class="dropdown-menu right-edge" role="menu">
|
||
<li data-bind="click: function () { showBcc(!showBcc()); }">
|
||
<a>
|
||
<i class="fontastic" data-bind="text: showBcc() ? '☑' : '☐'"></i>
|
||
<span data-i18n="GLOBAL/BCC"></span>
|
||
</a>
|
||
</li>
|
||
<li data-bind="click: function () { showCc(!showCc()); }">
|
||
<a>
|
||
<i class="fontastic" data-bind="text: showCc() ? '☑' : '☐'"></i>
|
||
<span data-i18n="GLOBAL/CC"></span>
|
||
</a>
|
||
</li>
|
||
<li data-bind="click: function () { showReplyTo(!showReplyTo()); }">
|
||
<a>
|
||
<i class="fontastic" data-bind="text: showReplyTo() ? '☑' : '☐'"></i>
|
||
<span data-i18n="GLOBAL/REPLY_TO"></span>
|
||
</a>
|
||
</li>
|
||
<li data-bind="click: function () { requestReadReceipt(!requestReadReceipt()); }">
|
||
<a>
|
||
<i class="fontastic" data-bind="text: requestReadReceipt() ? '☑' : '☐'"></i>
|
||
<span data-i18n="COMPOSE/BUTTON_REQUEST_READ_RECEIPT"></span>
|
||
</a>
|
||
</li>
|
||
<li data-bind="click: function () { requestDsn(!requestDsn()); }">
|
||
<a>
|
||
<i class="fontastic" data-bind="text: requestDsn() ? '☑' : '☐'"></i>
|
||
<span data-i18n="COMPOSE/BUTTON_REQUEST_DSN"></span>
|
||
</a>
|
||
</li>
|
||
<li data-bind="click: function () { markAsImportant(!markAsImportant()); }">
|
||
<a>
|
||
<i class="fontastic" data-bind="text: markAsImportant() ? '☑' : '☐'"></i>
|
||
<span data-i18n="COMPOSE/BUTTON_MARK_AS_IMPORTANT"></span>
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<a class="minimize-custom" data-bind="click: skipCommand" data-i18n="[title]COMPOSE/BUTTON_MINIMIZE"></a>
|
||
<a class="close" data-bind="click: tryToClosePopup" data-i18n="[title]GLOBAL/CANCEL">×</a>
|
||
</div>
|
||
</header>
|
||
<div class="modal-body">
|
||
<div class="b-header g-ui-user-select-none">
|
||
<table>
|
||
<tr>
|
||
<td data-i18n="GLOBAL/FROM"></td>
|
||
<td>
|
||
<!-- ko if: allowIdentities -->
|
||
<input type="text" data-bind="textInput: from" style="width:calc(100% - 20px)">
|
||
<!-- /ko -->
|
||
<span class="e-identity" data-bind="hidden: allowIdentities, text: from"></span>
|
||
<!-- ko if: 1 < identitiesOptions().length -->
|
||
<div class="dropdown" style="display:inline-block" data-bind="registerBootstrapDropdown: true, openDropdownTrigger: identitiesDropdownTrigger">
|
||
<a class="dropdown-toggle" href="#" tabindex="-1" id="identity-toggle" role="button"></a>
|
||
<ul class="dropdown-menu right-edge" role="menu" aria-labelledby="identity-toggle" data-bind="foreach: identitiesOptions">
|
||
<li role="presentation">
|
||
<a tabindex="-1" href="#" data-bind="click: function (oIdentity) { $root.selectIdentity(oIdentity); return true; }, text: optText"></a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<!-- /ko -->
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td>
|
||
<label data-bind="css: {'error-to': emptyToError}, tooltipErrorTip: emptyToErrorTooltip"
|
||
data-i18n="GLOBAL/TO"></label>
|
||
</td>
|
||
<td>
|
||
<input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" data-bind="emailsTags: to, autoCompleteSource: emailsSource">
|
||
</td>
|
||
</tr>
|
||
<tr class="cc-row" data-bind="visible: showCc">
|
||
<td data-i18n="GLOBAL/CC"></div>
|
||
<td>
|
||
<input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" data-bind="emailsTags: cc, autoCompleteSource: emailsSource">
|
||
</td>
|
||
</tr>
|
||
<tr class="bcc-row" data-bind="visible: showBcc">
|
||
<td data-i18n="GLOBAL/BCC"></div>
|
||
<td>
|
||
<input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" data-bind="emailsTags: bcc, autoCompleteSource: emailsSource">
|
||
</td>
|
||
</tr>
|
||
<tr class="reply-to-row" data-bind="visible: showReplyTo">
|
||
<td data-i18n="GLOBAL/REPLY_TO"></div>
|
||
<td>
|
||
<input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" data-bind="emailsTags: replyTo, autoCompleteSource: emailsSource">
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td data-i18n="GLOBAL/SUBJECT"></div>
|
||
<td>
|
||
<input type="text" size="70" autocomplete="off" data-bind="textInput: subject">
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
<div style="display:flex">
|
||
<div class="btn-group" style="flex-grow:1" id="area-toggle">
|
||
<button type="button" class="btn" data-bind="click: bodyArea,
|
||
css: { 'active': 'body' == viewArea() }">
|
||
<i class="icon-file-text"></i>
|
||
</button>
|
||
<button type="button" class="btn" data-bind="click: attachmentsArea,
|
||
css: { 'btn-danger': attachmentsInErrorCount(), 'active': 'attachments' == viewArea() },
|
||
tooltipErrorTip: attachmentsErrorTooltip">
|
||
<span data-bind="visible: attachmentsCount()">
|
||
<b data-bind="text: attachmentsCount"></b>
|
||
|
||
</span>
|
||
<i data-bind="css: { 'icon-attachment': !attachmentsInProcessCount(), 'icon-spinner': attachmentsInProcessCount()}"></i>
|
||
</button>
|
||
<button type="button" class="btn" data-bind="visible: canMailvelope, click: mailvelopeArea, css: { 'active': 'mailvelope' == viewArea() }">
|
||
<i class="mailvelope-icon"></i>
|
||
</button>
|
||
</div>
|
||
<div class="btn-group">
|
||
<a class="btn" data-bind="click: togglePgpSign, visible: canPgpSign, css: {'btn-success': pgpSign()}">
|
||
<i class="fontastic" data-bind="text: pgpSign() ? '☑' : '☐'"></i>
|
||
<span data-i18n="OPENPGP/LABEL_SIGN"></span>
|
||
</a>
|
||
<a class="btn" data-bind="click: togglePgpEncrypt, visible: canPgpEncrypt, css: {'btn-success': pgpEncrypt() || 'mailvelope' == viewArea()}">
|
||
<i class="fontastic" data-bind="text: pgpEncrypt() || 'mailvelope' == viewArea() ? '☑' : '☐'"></i>
|
||
<span data-i18n="OPENPGP/LABEL_ENCRYPT"></span>
|
||
</a>
|
||
<a class="btn fontastic" style="padding-left: 10px; padding-right: 10px;" id="composeUploadButton"
|
||
data-bind="visible: addAttachmentEnabled()" data-i18n="[title]COMPOSE/ATTACH_FILES">
|
||
⁺📎
|
||
</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="attachmentAreaParent" data-bind="visible: 'attachments' == viewArea()">
|
||
<div class="b-attachment-place" data-bind="visible: addAttachmentEnabled() && dragAndDropVisible(), css: {'dragAndDropOver': dragAndDropOver}"
|
||
data-i18n="COMPOSE/ATTACH_DROP_FILES_DESC"></div>
|
||
<ul class="attachmentList" data-bind="foreach: attachments">
|
||
<li class="attachmentItem" data-bind="attr: { 'title': title }, css: { 'waiting': waiting, 'error': '' !== error() }">
|
||
<div class="attachmentIconParent">
|
||
<i class="iconMain" data-bind="css: iconClass(), visible: !uploading() || 0 === progress()"></i>
|
||
<div class="iconProgress" data-bind="attr: { 'style': progressStyle }, visible: uploading"></div>
|
||
<div class="iconBG" data-bind="text: progressText, visible: uploading"></div>
|
||
</div>
|
||
<div class="attachmentNameParent">
|
||
<a href="#" class="close pull-right" style="margin-top:-4px;" data-bind="click: cancel">×</a>
|
||
<div class="attachmentName" data-bind="text: fileName"></div>
|
||
<span class="attachmentSize" data-bind="text: friendlySize"></span>
|
||
</div>
|
||
</li>
|
||
</ul>
|
||
<div class="no-attachments-desc" data-bind="visible: 0 === attachments().length"
|
||
data-i18n="COMPOSE/NO_ATTACHMENTS_HERE_DESC"></div>
|
||
</div>
|
||
|
||
<div class="textAreaParent" data-bind="visible: 'body' == viewArea(), initDom: editorArea"></div>
|
||
|
||
<div class="textAreaParent" id="mailvelope-editor" data-bind="visible: 'mailvelope' == viewArea()"></div>
|
||
</div>
|