mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-07-11 00:14:50 +03:00
Bugfix: compose window kept resizing
This commit is contained in:
parent
5ef3006f4f
commit
a104287aa5
2 changed files with 170 additions and 169 deletions
|
|
@ -5,16 +5,19 @@
|
|||
width: 98%;
|
||||
max-width: 1000px;
|
||||
margin: 10px auto;
|
||||
/* height: calc(100% - 52px);*/
|
||||
min-height: calc(100% - 52px);
|
||||
|
||||
.modal-body {
|
||||
/* height: calc(100% - 60px);*/
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.textAreaParent, .attachmentAreaParent {
|
||||
position: relative;
|
||||
box-sizing: border-box;
|
||||
min-height: 200px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.attachmentAreaParent {
|
||||
|
|
|
|||
|
|
@ -18,187 +18,185 @@
|
|||
<span class="saved-text hide-on-mobile" data-bind="text: savedTimeText"></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" style="height: 40px;">
|
||||
<div class="e-cell e-label">
|
||||
<label class="control-label">
|
||||
<span class="i18n" data-i18n="COMPOSE/TITLE_FROM"></span>
|
||||
</label>
|
||||
<div class="b-header g-ui-user-select-none">
|
||||
<div class="g-ui-table">
|
||||
<div class="e-row" style="height: 40px;">
|
||||
<div class="e-cell e-label">
|
||||
<label class="control-label">
|
||||
<span class="i18n" data-i18n="COMPOSE/TITLE_FROM"></span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="e-cell e-value">
|
||||
<div class="dropdown pull-left" data-bind="registrateBootstrapDropdown: true, openDropdownTrigger: identitiesDropdownTrigger">
|
||||
<a class="dropdown-toggle e-identity" href="#" tabindex="-1"
|
||||
id="identity-label-id" role="button" data-toggle="dropdown"
|
||||
data-bind="text: currentIdentityView, dropdownCloser: true, css: {'multiply': 1 < identitiesOptions().length }">
|
||||
</a>
|
||||
<!-- ko if: 1 < identitiesOptions().length -->
|
||||
<ul class="dropdown-menu g-ui-menu" role="menu" aria-labelledby="identity-label-id">
|
||||
<!-- ko foreach: identitiesOptions -->
|
||||
<li class="e-item" role="presentation">
|
||||
<a class="e-link menuitem" tabindex="-1" href="javascript:void(0);" data-bind="click: function (oIdentity) { $root.selectIdentity(oIdentity); return true; }">
|
||||
<span data-bind="text: optText"></span>
|
||||
</a>
|
||||
</li>
|
||||
<!-- /ko -->
|
||||
</ul>
|
||||
<!-- /ko -->
|
||||
</div>
|
||||
<div class="e-cell e-value">
|
||||
<div class="dropdown pull-left" data-bind="registrateBootstrapDropdown: true, openDropdownTrigger: identitiesDropdownTrigger">
|
||||
<a class="dropdown-toggle e-identity" href="#" tabindex="-1"
|
||||
id="identity-label-id" role="button" data-toggle="dropdown"
|
||||
data-bind="text: currentIdentityView, dropdownCloser: true, css: {'multiply': 1 < identitiesOptions().length }">
|
||||
<div class="pull-right">
|
||||
<div class="btn-group dropdown colored-toggle pull-right" style="margin-right: 4px;">
|
||||
<a class="btn single dropdown-toggle buttonMore" data-toggle="dropdown">
|
||||
<i class="icon-list"></i>
|
||||
</a>
|
||||
<!-- ko if: 1 < identitiesOptions().length -->
|
||||
<ul class="dropdown-menu g-ui-menu" role="menu" aria-labelledby="identity-label-id">
|
||||
<!-- ko foreach: identitiesOptions -->
|
||||
<li class="e-item" role="presentation">
|
||||
<a class="e-link menuitem" tabindex="-1" href="javascript:void(0);" data-bind="click: function (oIdentity) { $root.selectIdentity(oIdentity); return true; }">
|
||||
<span data-bind="text: optText"></span>
|
||||
</a>
|
||||
</li>
|
||||
<!-- /ko -->
|
||||
</ul>
|
||||
<!-- /ko -->
|
||||
</div>
|
||||
<div class="pull-right">
|
||||
<div class="btn-group dropdown colored-toggle pull-right" style="margin-right: 4px;">
|
||||
<a class="btn single dropdown-toggle buttonMore" data-toggle="dropdown">
|
||||
<i class="icon-list"></i>
|
||||
</a>
|
||||
<ul class="dropdown-menu g-ui-menu" role="menu">
|
||||
<li class="e-item" data-bind="click: function () { requestReadReceipt(!requestReadReceipt()); }">
|
||||
<a class="e-link">
|
||||
<i class="icon-checkbox-unchecked" data-bind="css: {'icon-checkbox-checked': requestReadReceipt(), 'icon-checkbox-unchecked': !requestReadReceipt() }"></i>
|
||||
|
||||
<span class="i18n" data-i18n="COMPOSE/BUTTON_REQUEST_READ_RECEIPT"></span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="e-item" data-bind="click: function () { requestDsn(!requestDsn()); }">
|
||||
<a class="e-link">
|
||||
<i class="icon-checkbox-unchecked" data-bind="css: {'icon-checkbox-checked': requestDsn(), 'icon-checkbox-unchecked': !requestDsn() }"></i>
|
||||
|
||||
<span class="i18n" data-i18n="COMPOSE/BUTTON_REQUEST_DSN"></span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="e-item" data-bind="click: function () { markAsImportant(!markAsImportant()); }">
|
||||
<a class="e-link">
|
||||
<i class="icon-checkbox-unchecked" data-bind="css: {'icon-checkbox-checked': markAsImportant(), 'icon-checkbox-unchecked': !markAsImportant() }"></i>
|
||||
|
||||
<span class="i18n" data-i18n="COMPOSE/BUTTON_MARK_AS_IMPORTANT"></span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="divider" data-bind="visible: capaOpenPGP"></li>
|
||||
<li class="e-item" data-bind="visible: capaOpenPGP, click: openOpenPgpPopup, css: {'disabled': isHtml()}">
|
||||
<a class="e-link">
|
||||
<i class="icon-key"></i>
|
||||
|
||||
<span class="i18n" data-i18n="COMPOSE/BUTTON_OPEN_PGP"></span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="btn-group pull-right"> </div>
|
||||
<div class="btn-group pull-right">
|
||||
<a class="btn single" data-tooltip-join="top" data-bind="visible: allowContacts, command: contactsCommand, tooltip: 'FOLDER_LIST/BUTTON_CONTACTS'">
|
||||
<i class="icon-address-book"></i>
|
||||
</a>
|
||||
</div>
|
||||
<div class="btn-group pull-right"> </div>
|
||||
</div>
|
||||
<span class="pull-right">
|
||||
<span class="i18n g-ui-link" data-i18n="COMPOSE/TITLE_CC"
|
||||
data-bind="visible: !showCc(), click: function () { showCc(true); }"></span>
|
||||
|
||||
<span data-bind="visible: !showBcc()">
|
||||
<span class="i18n g-ui-link" data-i18n="COMPOSE/TITLE_BCC"
|
||||
data-bind="click: function () { showBcc(true); }"></span>
|
||||
|
||||
</span>
|
||||
<span class="i18n g-ui-link" data-i18n="COMPOSE/TITLE_REPLY_TO"
|
||||
data-bind="visible: !showReplyTo(), click: function () { showReplyTo(true); }"></span>
|
||||
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="e-row">
|
||||
<div class="e-cell e-label">
|
||||
<label class="control-label" data-bind="css: {'error-to': emptyToError}">
|
||||
<span class="i18n" data-i18n="COMPOSE/TITLE_TO" data-tooltip-join="top"
|
||||
data-bind="tooltipErrorTip: emptyToErrorTooltip"></span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="e-cell e-value">
|
||||
<input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" data-bind="emailsTags: to, emailsTagsFocus: to.focused, autoCompleteSource: emailsSource" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="e-row cc-row" data-bind="visible: showCc">
|
||||
<div class="e-cell e-label">
|
||||
<span class="i18n" data-i18n="COMPOSE/TITLE_CC"></span>
|
||||
</div>
|
||||
<div class="e-cell e-value">
|
||||
<input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" data-bind="emailsTags: cc, autoCompleteSource: emailsSource" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="e-row bcc-row" data-bind="visible: showBcc">
|
||||
<div class="e-cell e-label">
|
||||
<span class="i18n" data-i18n="COMPOSE/TITLE_BCC"></span>
|
||||
</div>
|
||||
<div class="e-cell e-value">
|
||||
<input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" data-bind="emailsTags: bcc, autoCompleteSource: emailsSource" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="e-row reply-to-row" data-bind="visible: showReplyTo">
|
||||
<div class="e-cell e-label">
|
||||
<span class="i18n" data-i18n="COMPOSE/TITLE_REPLY_TO"></span>
|
||||
</div>
|
||||
<div class="e-cell e-value">
|
||||
<input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" data-bind="emailsTags: replyTo, autoCompleteSource: emailsSource" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="e-row">
|
||||
<div class="e-cell e-label">
|
||||
<span class="i18n" data-i18n="COMPOSE/TITLE_SUBJECT"></span>
|
||||
</div>
|
||||
<div class="e-cell e-value">
|
||||
<input type="text" size="70" autocomplete="off" data-bind="textInput: subject, hasFocus: subject.focused" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="e-row">
|
||||
<div class="e-cell e-label"></div>
|
||||
<div class="e-cell e-value">
|
||||
<div>
|
||||
<div class="pull-left">
|
||||
<div class="btn-group" data-toggle="buttons-radio">
|
||||
<button type="button" class="btn first" data-bind="click: function () { attachmentsPlace(false); },
|
||||
css: { 'active': !attachmentsPlace() }">
|
||||
<i class="icon-file-text"></i>
|
||||
</button>
|
||||
<button type="button" class="btn last" data-tooltip-join="left" data-bind="click: function () { attachmentsPlace(true); },
|
||||
css: { 'btn-danger': 0 < attachmentsInErrorCount(), 'active': attachmentsPlace() },
|
||||
tooltipErrorTip: attachmentsErrorTooltip">
|
||||
<span data-bind="visible: 0 < attachmentsCount()">
|
||||
<b data-bind="text: attachmentsCount"></b>
|
||||
|
||||
</span>
|
||||
<i data-bind="css: { 'icon-attachment': 0 === attachmentsInProcessCount(), 'icon-spinner animated': 0 < attachmentsInProcessCount(), 'icon-white': 0 < attachmentsInErrorCount() }"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pull-right" style="margin-right: 4px;">
|
||||
<div class="btn-group pull-right">
|
||||
<a class="btn first" data-tooltip-join="bottom"
|
||||
style="padding-left: 10px; padding-right: 10px;"
|
||||
data-bind="visible: addAttachmentEnabled(), initDom: composeUploaderButton, tooltip: 'COMPOSE/ATTACH_FILES'">
|
||||
<sup style="font-weight: bold; font-size: 100%; top: -0.3em;">+</sup><i class="icon-attachment"></i>
|
||||
<ul class="dropdown-menu g-ui-menu" role="menu">
|
||||
<li class="e-item" data-bind="click: function () { requestReadReceipt(!requestReadReceipt()); }">
|
||||
<a class="e-link">
|
||||
<i class="icon-checkbox-unchecked" data-bind="css: {'icon-checkbox-checked': requestReadReceipt(), 'icon-checkbox-unchecked': !requestReadReceipt() }"></i>
|
||||
|
||||
<span class="i18n" data-i18n="COMPOSE/BUTTON_REQUEST_READ_RECEIPT"></span>
|
||||
</a>
|
||||
</div>
|
||||
</li>
|
||||
<li class="e-item" data-bind="click: function () { requestDsn(!requestDsn()); }">
|
||||
<a class="e-link">
|
||||
<i class="icon-checkbox-unchecked" data-bind="css: {'icon-checkbox-checked': requestDsn(), 'icon-checkbox-unchecked': !requestDsn() }"></i>
|
||||
|
||||
<span class="i18n" data-i18n="COMPOSE/BUTTON_REQUEST_DSN"></span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="e-item" data-bind="click: function () { markAsImportant(!markAsImportant()); }">
|
||||
<a class="e-link">
|
||||
<i class="icon-checkbox-unchecked" data-bind="css: {'icon-checkbox-checked': markAsImportant(), 'icon-checkbox-unchecked': !markAsImportant() }"></i>
|
||||
|
||||
<span class="i18n" data-i18n="COMPOSE/BUTTON_MARK_AS_IMPORTANT"></span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="divider" data-bind="visible: capaOpenPGP"></li>
|
||||
<li class="e-item" data-bind="visible: capaOpenPGP, click: openOpenPgpPopup, css: {'disabled': isHtml()}">
|
||||
<a class="e-link">
|
||||
<i class="icon-key"></i>
|
||||
|
||||
<span class="i18n" data-i18n="COMPOSE/BUTTON_OPEN_PGP"></span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="btn-group pull-right"> </div>
|
||||
<div class="btn-group pull-right">
|
||||
<a class="btn single" data-tooltip-join="top" data-bind="visible: allowContacts, command: contactsCommand, tooltip: 'FOLDER_LIST/BUTTON_CONTACTS'">
|
||||
<i class="icon-address-book"></i>
|
||||
</a>
|
||||
</div>
|
||||
<div class="btn-group pull-right"> </div>
|
||||
</div>
|
||||
<span class="pull-right">
|
||||
<span class="i18n g-ui-link" data-i18n="COMPOSE/TITLE_CC"
|
||||
data-bind="visible: !showCc(), click: function () { showCc(true); }"></span>
|
||||
|
||||
<span data-bind="visible: !showBcc()">
|
||||
<span class="i18n g-ui-link" data-i18n="COMPOSE/TITLE_BCC"
|
||||
data-bind="click: function () { showBcc(true); }"></span>
|
||||
|
||||
</span>
|
||||
<span class="i18n g-ui-link" data-i18n="COMPOSE/TITLE_REPLY_TO"
|
||||
data-bind="visible: !showReplyTo(), click: function () { showReplyTo(true); }"></span>
|
||||
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="e-row">
|
||||
<div class="e-cell e-label">
|
||||
<label class="control-label" data-bind="css: {'error-to': emptyToError}">
|
||||
<span class="i18n" data-i18n="COMPOSE/TITLE_TO" data-tooltip-join="top"
|
||||
data-bind="tooltipErrorTip: emptyToErrorTooltip"></span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="e-cell e-value">
|
||||
<input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" data-bind="emailsTags: to, emailsTagsFocus: to.focused, autoCompleteSource: emailsSource" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="e-row cc-row" data-bind="visible: showCc">
|
||||
<div class="e-cell e-label">
|
||||
<span class="i18n" data-i18n="COMPOSE/TITLE_CC"></span>
|
||||
</div>
|
||||
<div class="e-cell e-value">
|
||||
<input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" data-bind="emailsTags: cc, autoCompleteSource: emailsSource" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="e-row bcc-row" data-bind="visible: showBcc">
|
||||
<div class="e-cell e-label">
|
||||
<span class="i18n" data-i18n="COMPOSE/TITLE_BCC"></span>
|
||||
</div>
|
||||
<div class="e-cell e-value">
|
||||
<input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" data-bind="emailsTags: bcc, autoCompleteSource: emailsSource" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="e-row reply-to-row" data-bind="visible: showReplyTo">
|
||||
<div class="e-cell e-label">
|
||||
<span class="i18n" data-i18n="COMPOSE/TITLE_REPLY_TO"></span>
|
||||
</div>
|
||||
<div class="e-cell e-value">
|
||||
<input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" data-bind="emailsTags: replyTo, autoCompleteSource: emailsSource" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="e-row">
|
||||
<div class="e-cell e-label">
|
||||
<span class="i18n" data-i18n="COMPOSE/TITLE_SUBJECT"></span>
|
||||
</div>
|
||||
<div class="e-cell e-value">
|
||||
<input type="text" size="70" autocomplete="off" data-bind="textInput: subject, hasFocus: subject.focused" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="e-row">
|
||||
<div class="e-cell e-label"></div>
|
||||
<div class="e-cell e-value">
|
||||
<div>
|
||||
<div class="pull-left">
|
||||
<div class="btn-group" data-toggle="buttons-radio">
|
||||
<button type="button" class="btn first" data-bind="click: function () { attachmentsPlace(false); },
|
||||
css: { 'active': !attachmentsPlace() }">
|
||||
<i class="icon-file-text"></i>
|
||||
</button>
|
||||
<button type="button" class="btn last" data-tooltip-join="left" data-bind="click: function () { attachmentsPlace(true); },
|
||||
css: { 'btn-danger': 0 < attachmentsInErrorCount(), 'active': attachmentsPlace() },
|
||||
tooltipErrorTip: attachmentsErrorTooltip">
|
||||
<span data-bind="visible: 0 < attachmentsCount()">
|
||||
<b data-bind="text: attachmentsCount"></b>
|
||||
|
||||
</span>
|
||||
<i data-bind="css: { 'icon-attachment': 0 === attachmentsInProcessCount(), 'icon-spinner animated': 0 < attachmentsInProcessCount(), 'icon-white': 0 < attachmentsInErrorCount() }"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pull-right" style="margin-right: 4px;">
|
||||
<div class="btn-group pull-right">
|
||||
<a class="btn first" data-tooltip-join="bottom"
|
||||
style="padding-left: 10px; padding-right: 10px;"
|
||||
data-bind="visible: addAttachmentEnabled(), initDom: composeUploaderButton, tooltip: 'COMPOSE/ATTACH_FILES'">
|
||||
<sup style="font-weight: bold; font-size: 100%; top: -0.3em;">+</sup><i class="icon-attachment"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="attachmentAreaParent b-content" data-bind="visible: attachmentsPlace">
|
||||
<div class="content g-scrollbox">
|
||||
<div class="content-wrapper">
|
||||
<div class="b-attachment-place" data-bind="visible: addAttachmentEnabled() && dragAndDropEnabled() && dragAndDropVisible(), initDom: composeUploaderDropPlace, css: {'dragAndDropOver': dragAndDropOver}">
|
||||
<span class="i18n" data-i18n="COMPOSE/ATTACH_DROP_FILES_DESC"></span>
|
||||
</div>
|
||||
<ul class="attachmentList" data-bind="template: { name: 'ComposeAttachment', foreach: attachments }"></ul>
|
||||
<div class="no-attachments-desc" data-bind="visible: 0 === attachments().length">
|
||||
<span class="i18n" data-i18n="COMPOSE/NO_ATTACHMENTS_HERE_DESC"></span>
|
||||
</div>
|
||||
<div class="attachmentAreaParent b-content" data-bind="visible: attachmentsPlace">
|
||||
<div class="content g-scrollbox">
|
||||
<div class="content-wrapper">
|
||||
<div class="b-attachment-place" data-bind="visible: addAttachmentEnabled() && dragAndDropEnabled() && dragAndDropVisible(), initDom: composeUploaderDropPlace, css: {'dragAndDropOver': dragAndDropOver}">
|
||||
<span class="i18n" data-i18n="COMPOSE/ATTACH_DROP_FILES_DESC"></span>
|
||||
</div>
|
||||
<ul class="attachmentList" data-bind="template: { name: 'ComposeAttachment', foreach: attachments }"></ul>
|
||||
<div class="no-attachments-desc" data-bind="visible: 0 === attachments().length">
|
||||
<span class="i18n" data-i18n="COMPOSE/NO_ATTACHMENTS_HERE_DESC"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="textAreaParent" data-bind="visible: !attachmentsPlace(), initDom: composeEditorArea"></div>
|
||||
</div>
|
||||
|
||||
<div class="textAreaParent" data-bind="visible: !attachmentsPlace(), initDom: composeEditorArea"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue