mirror of
https://github.com/the-djmaze/snappymail.git
synced 2024-12-25 00:21:29 +08:00
Attachments (redesign)
This commit is contained in:
parent
735842bb88
commit
f9640b3ffa
40 changed files with 293 additions and 110 deletions
|
@ -192,6 +192,37 @@
|
|||
return Links.attachmentPreviewAsPlain(this.download);
|
||||
};
|
||||
|
||||
/**
|
||||
* @return {string}
|
||||
*/
|
||||
AttachmentModel.prototype.linkPreviewMain = function ()
|
||||
{
|
||||
var sResult = '';
|
||||
switch (true)
|
||||
{
|
||||
case this.isImage():
|
||||
case this.isPdf():
|
||||
sResult = this.linkPreview();
|
||||
break;
|
||||
case this.isText():
|
||||
sResult = this.linkPreviewAsPlain();
|
||||
break;
|
||||
case this.isFramed():
|
||||
sResult = this.linkFramed();
|
||||
break;
|
||||
}
|
||||
|
||||
return sResult;
|
||||
};
|
||||
|
||||
/**
|
||||
* @return {boolean}
|
||||
*/
|
||||
AttachmentModel.prototype.hasPreview = function ()
|
||||
{
|
||||
return this.isImage() || this.isPdf() || this.isText() || this.isFramed();
|
||||
};
|
||||
|
||||
/**
|
||||
* @return {string}
|
||||
*/
|
||||
|
|
|
@ -437,6 +437,7 @@
|
|||
}, this);
|
||||
|
||||
// other
|
||||
this.composeInEdit = ko.observable(false);
|
||||
this.capaOpenPGP = ko.observable(false);
|
||||
this.openpgpkeys = ko.observableArray([]);
|
||||
this.openpgp = null;
|
||||
|
|
|
@ -41,6 +41,10 @@
|
|||
margin-left: 8px;
|
||||
}
|
||||
|
||||
.button-close, .button-skip {
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
.disabled.button-delete {
|
||||
margin-left: 0px;
|
||||
}
|
||||
|
|
|
@ -253,34 +253,52 @@ html.rl-no-preview-pane {
|
|||
border-radius: 2px;
|
||||
|
||||
.attachmentIconParent {
|
||||
|
||||
position: relative;
|
||||
|
||||
height: 56px;
|
||||
width: 60px;
|
||||
|
||||
background: none;
|
||||
|
||||
.iconPreview, .iconBG, .iconMain {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
|
||||
display: inline-block;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.iconPreview {
|
||||
display: none;
|
||||
|
||||
background: #555;
|
||||
background-image: none;
|
||||
background: rgba(0, 0, 0, .5) !important;
|
||||
|
||||
.attachmentIcon {
|
||||
color: #fff;
|
||||
text-shadow: 0 1px 0 #000;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.attachmentNameParent {
|
||||
|
||||
position: relative;
|
||||
|
||||
margin-left: 60px;
|
||||
padding: 4px;
|
||||
padding-left: 6px;
|
||||
min-width: 90px;
|
||||
|
||||
color: #fff;
|
||||
background: #eee;
|
||||
|
||||
color: #333;
|
||||
background: #fafafa;
|
||||
border-left: 1px solid #ddd;
|
||||
}
|
||||
|
||||
&.hasThumbnail .attachmentNameParent {
|
||||
background: rgba(0, 0, 0, .6);
|
||||
|
||||
color: #fff;
|
||||
text-shadow: 0 1px 0 #000;
|
||||
border-left: 0px;
|
||||
}
|
||||
|
||||
.attachmentIcon {
|
||||
margin: 6px 0 0 13px;
|
||||
font-size: 36px;
|
||||
|
@ -289,46 +307,27 @@ html.rl-no-preview-pane {
|
|||
color: #aaa;
|
||||
}
|
||||
|
||||
.attachmentIconParent.hasPreview {
|
||||
.attachmentNonePreview {
|
||||
.attachmentIconParent.hasPreview:hover {
|
||||
.iconPreview {
|
||||
display: inline-block;
|
||||
}
|
||||
.iconMain {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
a.attachmentPreview {
|
||||
display: inline-block;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
.showPreview {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.attachmentIconParent.hasPreview:hover {
|
||||
|
||||
background: #555 !important;
|
||||
background-image: none !important;
|
||||
background: rgba(0, 0, 0, .8) !important;
|
||||
|
||||
color: #fff;
|
||||
|
||||
.attachmentIcon {
|
||||
color: #fff;
|
||||
text-shadow: 0 1px 0 #000;
|
||||
.attachmentIconParent.hasPreview {
|
||||
.showPreview {
|
||||
display: inline;
|
||||
}
|
||||
}
|
||||
|
||||
.attachmentIconParent.hasPreview .show-hover {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.attachmentIconParent.hasPreview:hover .show-hover {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.attachmentIconParent.hasPreview:hover .hide-hover {
|
||||
display: none;
|
||||
}
|
||||
|
||||
&.hasThumbnail .attachmentMainIcon {
|
||||
display: none;
|
||||
.hidePreview {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -33,6 +33,7 @@
|
|||
this.fYesAction = null;
|
||||
this.fNoAction = null;
|
||||
|
||||
this.bFocusYesOnShow = true;
|
||||
this.bDisabeCloseOnEsc = true;
|
||||
this.sDefaultKeyScope = Enums.KeyState.PopupAsk;
|
||||
|
||||
|
@ -81,8 +82,9 @@
|
|||
* @param {Function=} fNoFunc
|
||||
* @param {string=} sYesButton
|
||||
* @param {string=} sNoButton
|
||||
* @param {boolean=} bFocusYesOnShow
|
||||
*/
|
||||
AskPopupView.prototype.onShow = function (sAskDesc, fYesFunc, fNoFunc, sYesButton, sNoButton)
|
||||
AskPopupView.prototype.onShow = function (sAskDesc, fYesFunc, fNoFunc, sYesButton, sNoButton, bFocusYesOnShow)
|
||||
{
|
||||
this.clearPopup();
|
||||
|
||||
|
@ -99,11 +101,16 @@
|
|||
{
|
||||
this.yesButton(sNoButton);
|
||||
}
|
||||
|
||||
this.bFocusYesOnShow = Utils.isUnd(bFocusYesOnShow) ? true : !!bFocusYesOnShow;
|
||||
};
|
||||
|
||||
AskPopupView.prototype.onFocus = function ()
|
||||
{
|
||||
this.yesFocus(true);
|
||||
if (this.bFocusYesOnShow)
|
||||
{
|
||||
this.yesFocus(true);
|
||||
}
|
||||
};
|
||||
|
||||
AskPopupView.prototype.onBuild = function ()
|
||||
|
|
|
@ -43,7 +43,6 @@
|
|||
this.aDraftInfo = null;
|
||||
this.sInReplyTo = '';
|
||||
this.bFromDraft = false;
|
||||
this.bSkipNext = false;
|
||||
this.sReferences = '';
|
||||
|
||||
this.bCapaAdditionalIdentities = Settings.capa(Enums.Capa.AdditionalIdentities);
|
||||
|
@ -58,6 +57,9 @@
|
|||
}
|
||||
;
|
||||
|
||||
this.bSkipNextHide = false;
|
||||
this.composeInEdit = Data.composeInEdit;
|
||||
|
||||
this.capaOpenPGP = Data.capaOpenPGP;
|
||||
|
||||
this.resizer = ko.observable(false).extend({'throttle': 50});
|
||||
|
@ -313,7 +315,7 @@
|
|||
this.savedError(false);
|
||||
this.saving(true);
|
||||
|
||||
this.bSkipNext = true;
|
||||
this.autosaveStart();
|
||||
|
||||
Cache.setFolderHash(Data.draftFolder(), '');
|
||||
|
||||
|
@ -338,11 +340,25 @@
|
|||
|
||||
}, this.canBeSendedOrSaved);
|
||||
|
||||
Events.sub('interval.1m', function () {
|
||||
if (this.modalVisibility() && !Data.draftFolderNotEnabled() && !this.isEmptyForm(false) &&
|
||||
!this.bSkipNext && !this.saving() && !this.sending() && !this.savedError())
|
||||
this.skipCommand = Utils.createCommand(this, function () {
|
||||
|
||||
this.bSkipNextHide = true;
|
||||
|
||||
if (this.modalVisibility() && !this.saving() && !this.sending() &&
|
||||
!Data.draftFolderNotEnabled())
|
||||
{
|
||||
this.saveCommand();
|
||||
}
|
||||
|
||||
this.tryToClosePopup();
|
||||
|
||||
}, this.canBeSendedOrSaved);
|
||||
|
||||
Events.sub('interval.2m', function () {
|
||||
|
||||
if (this.modalVisibility() && !Data.draftFolderNotEnabled() && !this.isEmptyForm(false) &&
|
||||
!this.saving() && !this.sending() && !this.savedError())
|
||||
{
|
||||
this.bSkipNext = false;
|
||||
this.saveCommand();
|
||||
}
|
||||
}, this);
|
||||
|
@ -400,6 +416,9 @@
|
|||
this.tryToClosePopup = _.debounce(_.bind(this.tryToClosePopup, this), 200);
|
||||
|
||||
this.emailsSource = _.bind(this.emailsSource, this);
|
||||
this.autosaveFunction = _.bind(this.autosaveFunction, this);
|
||||
|
||||
this.iTimer = 0;
|
||||
|
||||
kn.constructorEnd(this);
|
||||
}
|
||||
|
@ -407,6 +426,28 @@
|
|||
kn.extendAsViewModel(['View/Popup/Compose', 'PopupsComposeViewModel'], ComposePopupView);
|
||||
_.extend(ComposePopupView.prototype, AbstractView.prototype);
|
||||
|
||||
ComposePopupView.prototype.autosaveFunction = function ()
|
||||
{
|
||||
if (this.modalVisibility() && !Data.draftFolderNotEnabled() && !this.isEmptyForm(false) &&
|
||||
!this.saving() && !this.sending() && !this.savedError())
|
||||
{
|
||||
this.saveCommand();
|
||||
}
|
||||
|
||||
this.autosaveStart();
|
||||
};
|
||||
|
||||
ComposePopupView.prototype.autosaveStart = function ()
|
||||
{
|
||||
window.clearTimeout(this.iTimer);
|
||||
this.iTimer = window.setTimeout(this.autosaveFunction, 1000 * 60 * 1);
|
||||
};
|
||||
|
||||
ComposePopupView.prototype.autosaveStop = function ()
|
||||
{
|
||||
window.clearTimeout(this.iTimer);
|
||||
};
|
||||
|
||||
ComposePopupView.prototype.emailsSource = function (oData, fResponse)
|
||||
{
|
||||
require('App/User').getAutocomplete(oData.term, function (aData) {
|
||||
|
@ -594,6 +635,8 @@
|
|||
{
|
||||
if (oData.Result.NewFolder && oData.Result.NewUid)
|
||||
{
|
||||
bResult = true;
|
||||
|
||||
if (this.bFromDraft)
|
||||
{
|
||||
oMessage = Data.message();
|
||||
|
@ -606,27 +649,22 @@
|
|||
this.draftFolder(oData.Result.NewFolder);
|
||||
this.draftUid(oData.Result.NewUid);
|
||||
|
||||
if (this.modalVisibility())
|
||||
this.savedTime(window.Math.round((new window.Date()).getTime() / 1000));
|
||||
|
||||
this.savedOrSendingText(
|
||||
0 < this.savedTime() ? Utils.i18n('COMPOSE/SAVED_TIME', {
|
||||
'TIME': moment.unix(this.savedTime() - 1).format('LT')
|
||||
}) : ''
|
||||
);
|
||||
|
||||
if (this.bFromDraft)
|
||||
{
|
||||
this.savedTime(window.Math.round((new window.Date()).getTime() / 1000));
|
||||
|
||||
this.savedOrSendingText(
|
||||
0 < this.savedTime() ? Utils.i18n('COMPOSE/SAVED_TIME', {
|
||||
'TIME': moment.unix(this.savedTime() - 1).format('LT')
|
||||
}) : ''
|
||||
);
|
||||
|
||||
bResult = true;
|
||||
|
||||
if (this.bFromDraft)
|
||||
{
|
||||
Cache.setFolderHash(this.draftFolder(), '');
|
||||
}
|
||||
Cache.setFolderHash(this.draftFolder(), '');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!this.modalVisibility() && !bResult)
|
||||
if (!bResult)
|
||||
{
|
||||
this.savedError(true);
|
||||
this.savedOrSendingText(Utils.getNotification(Enums.Notification.CantSaveMessage));
|
||||
|
@ -637,7 +675,16 @@
|
|||
|
||||
ComposePopupView.prototype.onHide = function ()
|
||||
{
|
||||
this.reset();
|
||||
this.autosaveStop();
|
||||
|
||||
if (!this.bSkipNextHide)
|
||||
{
|
||||
this.composeInEdit(false);
|
||||
this.reset();
|
||||
}
|
||||
|
||||
this.bSkipNextHide = false;
|
||||
|
||||
kn.routeOn();
|
||||
};
|
||||
|
||||
|
@ -736,6 +783,41 @@
|
|||
{
|
||||
kn.routeOff();
|
||||
|
||||
this.autosaveStart();
|
||||
|
||||
if (this.composeInEdit())
|
||||
{
|
||||
sType = sType || Enums.ComposeType.Empty;
|
||||
|
||||
var
|
||||
self = this,
|
||||
PopupsAskViewModel = require('View/Popup/Ask')
|
||||
;
|
||||
|
||||
if (Enums.ComposeType.Empty !== sType)
|
||||
{
|
||||
kn.showScreenPopup(PopupsAskViewModel, [Utils.i18n('COMPOSE/DISCARD_UNSAVED_DATA'), function () {
|
||||
self.initOnShow(sType, oMessageOrArray, aToEmails, sCustomSubject, sCustomPlainText);
|
||||
}, null, null, null, false]);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
this.initOnShow(sType, oMessageOrArray, aToEmails, sCustomSubject, sCustomPlainText);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* @param {string=} sType = Enums.ComposeType.Empty
|
||||
* @param {?MessageModel|Array=} oMessageOrArray = null
|
||||
* @param {Array=} aToEmails = null
|
||||
* @param {string=} sCustomSubject = null
|
||||
* @param {string=} sCustomPlainText = null
|
||||
*/
|
||||
ComposePopupView.prototype.initOnShow = function (sType, oMessageOrArray, aToEmails, sCustomSubject, sCustomPlainText)
|
||||
{
|
||||
this.composeInEdit(true);
|
||||
|
||||
var
|
||||
self = this,
|
||||
sFrom = '',
|
||||
|
@ -1033,14 +1115,21 @@
|
|||
PopupsAskViewModel = require('View/Popup/Ask')
|
||||
;
|
||||
|
||||
if (!kn.isPopupVisible(PopupsAskViewModel))
|
||||
if (!kn.isPopupVisible(PopupsAskViewModel) && this.modalVisibility())
|
||||
{
|
||||
kn.showScreenPopup(PopupsAskViewModel, [Utils.i18n('POPUPS_ASK/DESC_WANT_CLOSE_THIS_WINDOW'), function () {
|
||||
if (self.modalVisibility())
|
||||
{
|
||||
Utils.delegateRun(self, 'closeCommand');
|
||||
}
|
||||
}]);
|
||||
if (this.bSkipNextHide || (this.isEmptyForm() && !this.draftUid()))
|
||||
{
|
||||
Utils.delegateRun(self, 'closeCommand');
|
||||
}
|
||||
else
|
||||
{
|
||||
kn.showScreenPopup(PopupsAskViewModel, [Utils.i18n('POPUPS_ASK/DESC_WANT_CLOSE_THIS_WINDOW'), function () {
|
||||
if (self.modalVisibility())
|
||||
{
|
||||
Utils.delegateRun(self, 'closeCommand');
|
||||
}
|
||||
}]);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -1716,14 +1805,14 @@
|
|||
ComposePopupView.prototype.isEmptyForm = function (bIncludeAttachmentInProgress)
|
||||
{
|
||||
bIncludeAttachmentInProgress = Utils.isUnd(bIncludeAttachmentInProgress) ? true : !!bIncludeAttachmentInProgress;
|
||||
var bAttach = bIncludeAttachmentInProgress ?
|
||||
var bWithoutAttach = bIncludeAttachmentInProgress ?
|
||||
0 === this.attachments().length : 0 === this.attachmentsInReady().length;
|
||||
|
||||
return 0 === this.to().length &&
|
||||
0 === this.cc().length &&
|
||||
0 === this.bcc().length &&
|
||||
0 === this.subject().length &&
|
||||
bAttach &&
|
||||
bWithoutAttach &&
|
||||
(!this.oEditor || '' === this.oEditor.getData())
|
||||
;
|
||||
};
|
||||
|
|
|
@ -34,6 +34,8 @@
|
|||
this.oContentVisible = null;
|
||||
this.oContentScrollable = null;
|
||||
|
||||
this.composeInEdit = Data.composeInEdit;
|
||||
|
||||
this.messageList = Data.messageList;
|
||||
this.folderList = Data.folderList;
|
||||
this.folderListSystem = Data.folderListSystem;
|
||||
|
|
|
@ -367,7 +367,7 @@
|
|||
if (this.pswpDom)
|
||||
{
|
||||
oDom
|
||||
.on('click', 'a.attachmentImagePreview[data-index]:visible', function (oEvent) {
|
||||
.on('click', '.attachmentImagePreview[data-index]', function (oEvent) {
|
||||
|
||||
var
|
||||
oPs = null,
|
||||
|
@ -375,7 +375,7 @@
|
|||
aItems = []
|
||||
;
|
||||
|
||||
oDom.find('a.attachmentImagePreview:visible').each(function (index, oSubElement) {
|
||||
oDom.find('.attachmentImagePreview[data-index]').each(function (index, oSubElement) {
|
||||
|
||||
var $oItem = $(oSubElement);
|
||||
|
||||
|
|
|
@ -191,7 +191,8 @@ gulp.task('less:main', function() {
|
|||
}))
|
||||
.pipe(rename(cfg.paths.less.main.name))
|
||||
.pipe(eol('\n', true))
|
||||
.pipe(gulp.dest(cfg.paths.staticCSS));
|
||||
.pipe(gulp.dest(cfg.paths.staticCSS))
|
||||
.on('error', gutil.log);
|
||||
});
|
||||
|
||||
gulp.task('css:main-begin', ['less:main'], function() {
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"name": "RainLoop",
|
||||
"title": "RainLoop Webmail",
|
||||
"version": "1.7.1",
|
||||
"release": "215",
|
||||
"release": "217",
|
||||
"description": "Simple, modern & fast web-based email client",
|
||||
"homepage": "http://rainloop.net",
|
||||
"main": "gulpfile.js",
|
||||
|
@ -52,7 +52,7 @@
|
|||
"gulp-uglify": "*",
|
||||
"gulp-rimraf": "*",
|
||||
"gulp-jshint": "*",
|
||||
"gulp-less": "*",
|
||||
"gulp-less": "1.3.6",
|
||||
"gulp-zip": "*",
|
||||
"gulp-rename": "*",
|
||||
"gulp-replace": "*",
|
||||
|
|
|
@ -241,7 +241,8 @@ class FacebookRedirectLoginHelper
|
|||
}
|
||||
$buf = '';
|
||||
// http://sockpuppet.org/blog/2014/02/25/safely-generate-random-numbers/
|
||||
if (is_readable('/dev/urandom')) {
|
||||
if (false && is_readable('/dev/urandom')) {
|
||||
// if (is_readable('/dev/urandom')) {
|
||||
$fp = fopen('/dev/urandom', 'rb');
|
||||
if ($fp !== FALSE) {
|
||||
$buf = fread($fp, $bytes);
|
||||
|
|
|
@ -7081,7 +7081,7 @@ class Actions
|
|||
$oThumb =@ new \PHPThumb\GD($sFileName);
|
||||
if ($oThumb)
|
||||
{
|
||||
$oThumb->adaptiveResize(220, 80)->show();
|
||||
$oThumb->adaptiveResize(60, 60)->show();
|
||||
$bDone = true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
<div class="b-folders g-ui-user-select-none thm-folders" data-bind="css: {'focused': folderList.focused}">
|
||||
<div class="b-toolbar btn-toolbar">
|
||||
<a class="btn buttonCompose pull-left" data-tooltip-placement="bottom" data-bind="click: composeClick, tooltip: 'FOLDER_LIST/BUTTON_COMPOSE'">
|
||||
<a class="btn buttonCompose pull-left" data-tooltip-placement="bottom"
|
||||
data-bind="click: composeClick, tooltip: 'FOLDER_LIST/BUTTON_COMPOSE', css: {'btn-warning': composeInEdit}">
|
||||
<i class="icon-paper-plane"></i>
|
||||
</a>
|
||||
<a class="btn buttonContacts pull-left" data-tooltip-placement="bottom" data-bind="visible: allowContacts, click: contactsClick, tooltip: 'FOLDER_LIST/BUTTON_CONTACTS'">
|
||||
|
|
|
@ -294,32 +294,24 @@
|
|||
</div>
|
||||
<div class="attachmentsPlace" data-bind="visible: message() && message().hasVisibleAttachments()">
|
||||
<ul class="attachmentList" data-bind="foreach: message() ? message().attachments() : []">
|
||||
<li class="attachmentItem clearfix" draggable="true" data-bind="visible: !isLinked, title: fileName, event: { 'dragstart': eventDragStart },
|
||||
css: { 'hasThumbnail': hasThumbnail() }, attr: { 'style': linkThumbnailPreviewStyle() }">
|
||||
<li class="attachmentItem clearfix" draggable="true" data-bind="visible: !isLinked, title: fileName, event: { 'dragstart': eventDragStart }">
|
||||
<div class="attachmentIconParent pull-left" data-bind="css: { 'hasPreview': hasPreview() }">
|
||||
<div class="attachmentNonePreview">
|
||||
<i class="attachmentIcon attachmentMainIcon" data-bind="css: iconClass()"></i>
|
||||
<div class="hidePreview">
|
||||
<div class="iconMain">
|
||||
<i class="attachmentIcon attachmentMainIcon" data-bind="css: iconClass()"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="showPreview">
|
||||
<a data-bind="css: {'attachmentImagePreview': isImage()}, attr: {'href': linkPreviewMain(), title: fileName, 'data-index': $index}">
|
||||
<div class="iconMain">
|
||||
<i class="attachmentIcon attachmentMainIcon" data-bind="css: iconClass()"></i>
|
||||
</div>
|
||||
<div class="iconBG" data-bind="attr: { 'style': linkThumbnailPreviewStyle() }"></div>
|
||||
<div class="iconPreview">
|
||||
<i class="attachmentIcon icon-eye show-hover"></i>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<a class="attachmentPreview attachmentImagePreview magnificPopupImage"
|
||||
data-bind="visible: isImage(), attr: {href: linkPreview(), title: fileName, 'data-index': $index}" target="_blank">
|
||||
<i class="attachmentIcon icon-eye show-hover"></i>
|
||||
<i class="attachmentIcon attachmentMainIcon hide-hover" data-bind="css: iconClass()"></i>
|
||||
</a>
|
||||
<a class="attachmentPreview"
|
||||
data-bind="visible: isText(), attr: {href: linkPreviewAsPlain(), title: fileName}" target="_blank">
|
||||
<i class="attachmentIcon icon-eye show-hover"></i>
|
||||
<i class="attachmentIcon attachmentMainIcon hide-hover" data-bind="css: iconClass()"></i>
|
||||
</a>
|
||||
<a class="attachmentPreview"
|
||||
data-bind="visible: isPdf(), attr: {href: linkPreview(), title: fileName}" target="_blank">
|
||||
<i class="attachmentIcon icon-eye show-hover"></i>
|
||||
<i class="attachmentIcon attachmentMainIcon hide-hover" data-bind="css: iconClass()"></i>
|
||||
</a>
|
||||
<a class="attachmentPreview"
|
||||
data-bind="visible: isFramed(), attr: {href: linkFramed(), title: fileName}" target="_blank">
|
||||
<i class="attachmentIcon icon-eye show-hover"></i>
|
||||
<i class="attachmentIcon attachmentMainIcon hide-hover" data-bind="css: iconClass()"></i>
|
||||
</a>
|
||||
</div>
|
||||
<div class="attachmentNameParent">
|
||||
<div style="white-space: nowrap; text-overflow: ellipsis; overflow: hidden;">
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
<div class="popups">
|
||||
<div class="modal hide b-compose" data-backdrop="static" data-bind="modal: modalVisibility, css: {'loading': saving() || sending()}">
|
||||
<div class="modal-header b-header-toolbar g-ui-user-select-none">
|
||||
<button type="button" class="close" data-bind="command: cancelCommand">×</button>
|
||||
<a class="btn btn-large button-send" data-bind="command: sendCommand, css: {'btn-danger': sendError, 'btn-warning': sendSuccessButSaveError }">
|
||||
<i data-bind="css: {'icon-paper-plane': !sending(), 'icon-spinner animated': sending(), 'icon-white': sendError() || sendSuccessButSaveError()}"></i>
|
||||
|
||||
|
@ -12,6 +11,12 @@
|
|||
|
||||
<span class="i18n" data-i18n-text="COMPOSE/BUTTON_SAVE"></span>
|
||||
</a>
|
||||
<a class="btn button-close pull-right" data-tooltip-placement="bottom" data-bind="click: tryToClosePopup, tooltip: 'COMPOSE/BUTTON_CANCEL'">
|
||||
<i class="icon-remove"></i>
|
||||
</a>
|
||||
<a class="btn button-skip pull-right" data-tooltip-placement="bottom" data-bind="command: skipCommand, tooltip: 'COMPOSE/BUTTON_MINIMIZE'">
|
||||
<i class="icon-down"></i>
|
||||
</a>
|
||||
<a class="btn btn-danger button-delete button-delete-transitions" data-bind="command: deleteCommand">
|
||||
<i class="icon-trash icon-white"></i>
|
||||
</a>
|
||||
|
|
|
@ -208,8 +208,10 @@ BUTTON_SEND = "Изпрати"
|
|||
BUTTON_SAVE = "Запази"
|
||||
BUTTON_DELETE = "Изтрий"
|
||||
BUTTON_CANCEL = "Отказа"
|
||||
BUTTON_MINIMIZE = "Minimize"
|
||||
SAVED_TIME = "Запазено в %TIME%"
|
||||
SAVED_ERROR_ON_SEND = "Съобщението беше изпратено, но не беше запазено в папката с изпратени съобщения"
|
||||
DISCARD_UNSAVED_DATA = "Discard unsaved data?"
|
||||
ATTACH_FILES = "Прикрепете файлове"
|
||||
ATTACH_DROP_FILES_DESC = "Пуснете файловете тук"
|
||||
ATTACH_ITEM_CANCEL = "Отказ"
|
||||
|
|
|
@ -207,8 +207,10 @@ BUTTON_SEND = "Senden"
|
|||
BUTTON_SAVE = "Speichern"
|
||||
BUTTON_DELETE = "Löschen"
|
||||
BUTTON_CANCEL = "Abbrechen"
|
||||
BUTTON_MINIMIZE = "Minimize"
|
||||
SAVED_TIME = "Gespeichert um %TIME%"
|
||||
SAVED_ERROR_ON_SEND = "Die Nachricht wurde gesendet, konnte aber nicht im Ordner gespeichert werden."
|
||||
DISCARD_UNSAVED_DATA = "Discard unsaved data?"
|
||||
ATTACH_FILES = "Dateien anhängen"
|
||||
ATTACH_DROP_FILES_DESC = "Fügen Sie hier Dateien ein"
|
||||
ATTACH_ITEM_CANCEL = "Abbrechen"
|
||||
|
|
|
@ -208,8 +208,10 @@ BUTTON_SEND = "Send"
|
|||
BUTTON_SAVE = "Save"
|
||||
BUTTON_DELETE = "Delete"
|
||||
BUTTON_CANCEL = "Cancel"
|
||||
BUTTON_MINIMIZE = "Minimize"
|
||||
SAVED_TIME = "Saved at %TIME%"
|
||||
SAVED_ERROR_ON_SEND = "Message was sent but not saved to sent items folder"
|
||||
DISCARD_UNSAVED_DATA = "Discard unsaved data?"
|
||||
ATTACH_FILES = "Attach files"
|
||||
ATTACH_DROP_FILES_DESC = "Drop files here"
|
||||
ATTACH_ITEM_CANCEL = "Cancel"
|
||||
|
|
|
@ -207,8 +207,10 @@ BUTTON_SEND = "Enviar"
|
|||
BUTTON_SAVE = "Guardar"
|
||||
BUTTON_DELETE = "Eliminar"
|
||||
BUTTON_CANCEL = "Cancelar"
|
||||
BUTTON_MINIMIZE = "Minimize"
|
||||
SAVED_TIME = "Guardado a las %TIME%"
|
||||
SAVED_ERROR_ON_SEND = "El Mensaje se envió pero no se guardó en la carpeta de Enviados"
|
||||
DISCARD_UNSAVED_DATA = "Discard unsaved data?"
|
||||
ATTACH_FILES = "Añadir archivos"
|
||||
ATTACH_DROP_FILES_DESC = "Arrastre sus archivos aquí"
|
||||
ATTACH_ITEM_CANCEL = "Cancelar"
|
||||
|
|
|
@ -207,8 +207,10 @@ BUTTON_SEND = "Envoyer"
|
|||
BUTTON_SAVE = "Enregistrer"
|
||||
BUTTON_DELETE = "Supprimer"
|
||||
BUTTON_CANCEL = "Annuler"
|
||||
BUTTON_MINIMIZE = "Minimize"
|
||||
SAVED_TIME = "Enregistré à %TIME%"
|
||||
SAVED_ERROR_ON_SEND = "Le message a été envoyé mais n'a pas été enregistré dans le dossier des messages envoyés"
|
||||
DISCARD_UNSAVED_DATA = "Discard unsaved data?"
|
||||
ATTACH_FILES = "Ajouter des fichiers joints"
|
||||
ATTACH_DROP_FILES_DESC = "Glisser les fichiers ici"
|
||||
ATTACH_ITEM_CANCEL = "Annuler"
|
||||
|
|
|
@ -207,8 +207,10 @@ BUTTON_SEND = "Küldés"
|
|||
BUTTON_SAVE = "Mentés"
|
||||
BUTTON_DELETE = "Törlés"
|
||||
BUTTON_CANCEL = "Mégse"
|
||||
BUTTON_MINIMIZE = "Minimize"
|
||||
SAVED_TIME = "Saved at %TIME%"
|
||||
SAVED_ERROR_ON_SEND = "Message was sent but not saved to sent items folder"
|
||||
DISCARD_UNSAVED_DATA = "Discard unsaved data?"
|
||||
ATTACH_FILES = "Melléklet"
|
||||
ATTACH_DROP_FILES_DESC = "Drop files here"
|
||||
ATTACH_ITEM_CANCEL = "Mégse"
|
||||
|
|
|
@ -207,8 +207,10 @@ BUTTON_SEND = "Senda"
|
|||
BUTTON_SAVE = "Vista"
|
||||
BUTTON_DELETE = "Eyða"
|
||||
BUTTON_CANCEL = "Hætta við"
|
||||
BUTTON_MINIMIZE = "Minimize"
|
||||
SAVED_TIME = "Vistað %TIME%"
|
||||
SAVED_ERROR_ON_SEND = "Bréf var sent en ekki vistað í hluta möppu"
|
||||
DISCARD_UNSAVED_DATA = "Discard unsaved data?"
|
||||
ATTACH_FILES = "Hengja við skrár"
|
||||
ATTACH_DROP_FILES_DESC = "Setja skrár hér"
|
||||
ATTACH_ITEM_CANCEL = "Hætta við"
|
||||
|
|
|
@ -208,8 +208,10 @@ BUTTON_SEND = "Invia"
|
|||
BUTTON_SAVE = "Salva"
|
||||
BUTTON_DELETE = "Cancella"
|
||||
BUTTON_CANCEL = "Annulla"
|
||||
BUTTON_MINIMIZE = "Minimize"
|
||||
SAVED_TIME = "Salvata il %TIME%"
|
||||
SAVED_ERROR_ON_SEND = "Il messaggio è stato inviato ma non è stato salvato nella cartella \"Posta Inviata\""
|
||||
DISCARD_UNSAVED_DATA = "Discard unsaved data?"
|
||||
ATTACH_FILES = "Allega files"
|
||||
ATTACH_DROP_FILES_DESC = "Trascina i file qui"
|
||||
ATTACH_ITEM_CANCEL = "Annulla"
|
||||
|
|
|
@ -207,8 +207,10 @@ BUTTON_SEND = "送信"
|
|||
BUTTON_SAVE = "保存"
|
||||
BUTTON_DELETE = "削除"
|
||||
BUTTON_CANCEL = "キャンセル"
|
||||
BUTTON_MINIMIZE = "Minimize"
|
||||
SAVED_TIME = "%TIME% に保存しました"
|
||||
SAVED_ERROR_ON_SEND = "メールは送信できましたが、送信済みに保存できませんでした"
|
||||
DISCARD_UNSAVED_DATA = "Discard unsaved data?"
|
||||
ATTACH_FILES = "ファイルを添付"
|
||||
ATTACH_DROP_FILES_DESC = "ここにファイルをドロップ"
|
||||
ATTACH_ITEM_CANCEL = "キャンセル"
|
||||
|
|
|
@ -207,8 +207,10 @@ BUTTON_SEND = "보내기"
|
|||
BUTTON_SAVE = "저장"
|
||||
BUTTON_DELETE = "삭제"
|
||||
BUTTON_CANCEL = "취소"
|
||||
BUTTON_MINIMIZE = "Minimize"
|
||||
SAVED_TIME = "%TIME% 에 저장됨"
|
||||
SAVED_ERROR_ON_SEND = "메시지는 전송되었지만, 보낸 보관함에 저장되지 않았습니다."
|
||||
DISCARD_UNSAVED_DATA = "Discard unsaved data?"
|
||||
ATTACH_FILES = "첨부파일"
|
||||
ATTACH_DROP_FILES_DESC = "파일을 드래그해 넣으세요"
|
||||
ATTACH_ITEM_CANCEL = "취소"
|
||||
|
|
|
@ -208,8 +208,10 @@ BUTTON_SEND = "Siųsti"
|
|||
BUTTON_SAVE = "Išsaugoti"
|
||||
BUTTON_DELETE = "Naikinti"
|
||||
BUTTON_CANCEL = "Atšaukti"
|
||||
BUTTON_MINIMIZE = "Minimize"
|
||||
SAVED_TIME = "Išsaugota %TIME%"
|
||||
SAVED_ERROR_ON_SEND = "Pranešimas buvo išsiųstas, bet neišsaugotas išsiųstų kataloge"
|
||||
DISCARD_UNSAVED_DATA = "Discard unsaved data?"
|
||||
ATTACH_FILES = "Prisegti failų"
|
||||
ATTACH_DROP_FILES_DESC = "Įkelkite failus čia"
|
||||
ATTACH_ITEM_CANCEL = "Atšaukti"
|
||||
|
|
|
@ -207,8 +207,10 @@ BUTTON_SEND = "Sūtīt"
|
|||
BUTTON_SAVE = "Saglabāt"
|
||||
BUTTON_DELETE = "Dzēst"
|
||||
BUTTON_CANCEL = "Atcelt"
|
||||
BUTTON_MINIMIZE = "Minimize"
|
||||
SAVED_TIME = "Saglabāts %TIME%"
|
||||
SAVED_ERROR_ON_SEND = "Ziņojums nosūtīts, bet tas nav saglabāts izsūtnē."
|
||||
DISCARD_UNSAVED_DATA = "Discard unsaved data?"
|
||||
ATTACH_FILES = "Pievienot failus"
|
||||
ATTACH_DROP_FILES_DESC = "Iemet failus šeit"
|
||||
ATTACH_ITEM_CANCEL = "Atcelt"
|
||||
|
|
|
@ -207,8 +207,10 @@ BUTTON_SEND = "Verzenden"
|
|||
BUTTON_SAVE = "Concept opslaan"
|
||||
BUTTON_DELETE = "Verwijder"
|
||||
BUTTON_CANCEL = "Annuleer"
|
||||
BUTTON_MINIMIZE = "Minimize"
|
||||
SAVED_TIME = "Bewaard op %TIME%"
|
||||
SAVED_ERROR_ON_SEND = "Bericht is verzonden maar niet bewaard in de VERZONDEN map"
|
||||
DISCARD_UNSAVED_DATA = "Discard unsaved data?"
|
||||
ATTACH_FILES = "Bestand(en) toevoegen"
|
||||
ATTACH_DROP_FILES_DESC = "Sleep bestanden naar hier"
|
||||
ATTACH_ITEM_CANCEL = "Annuleer"
|
||||
|
|
|
@ -206,8 +206,10 @@ BUTTON_SEND = "Send"
|
|||
BUTTON_SAVE = "Lagre"
|
||||
BUTTON_DELETE = "Slett"
|
||||
BUTTON_CANCEL = "Avbryt"
|
||||
BUTTON_MINIMIZE = "Minimize"
|
||||
SAVED_TIME = "Lagret %TIME%"
|
||||
SAVED_ERROR_ON_SEND = "Meldingen ble sendt, men ble ikke lagret i mappen for sendte elementer"
|
||||
DISCARD_UNSAVED_DATA = "Discard unsaved data?"
|
||||
ATTACH_FILES = "Legg ved filer"
|
||||
ATTACH_DROP_FILES_DESC = "Slipp filer her"
|
||||
ATTACH_ITEM_CANCEL = "Avbryt"
|
||||
|
|
|
@ -207,8 +207,10 @@ BUTTON_SEND = "Wyślij"
|
|||
BUTTON_SAVE = "Zapisz"
|
||||
BUTTON_DELETE = "Usuń"
|
||||
BUTTON_CANCEL = "Anuluj"
|
||||
BUTTON_MINIMIZE = "Minimize"
|
||||
SAVED_TIME = "Zapisane o: %TIME%"
|
||||
SAVED_ERROR_ON_SEND = "Wiadomość została wysłana, ale nie została zapisana w folderze: Wysłane"
|
||||
DISCARD_UNSAVED_DATA = "Discard unsaved data?"
|
||||
ATTACH_FILES = "Dołącz pliki"
|
||||
ATTACH_DROP_FILES_DESC = "Przeciągnij pliki tutaj"
|
||||
ATTACH_ITEM_CANCEL = "Anuluj"
|
||||
|
|
|
@ -208,8 +208,10 @@ BUTTON_SEND = "Enviar"
|
|||
BUTTON_SAVE = "Salvar"
|
||||
BUTTON_DELETE = "Excluir"
|
||||
BUTTON_CANCEL = "Cancelar"
|
||||
BUTTON_MINIMIZE = "Minimize"
|
||||
SAVED_TIME = "Salvo as %TIME%"
|
||||
SAVED_ERROR_ON_SEND = "Sua mensagem foi enviada mas não foi salva na pasta de itens enviados."
|
||||
DISCARD_UNSAVED_DATA = "Discard unsaved data?"
|
||||
ATTACH_FILES = "Anexar arquivos"
|
||||
ATTACH_DROP_FILES_DESC = "Arraste os arquivos aqui"
|
||||
ATTACH_ITEM_CANCEL = "Cancelar"
|
||||
|
|
|
@ -207,8 +207,10 @@ BUTTON_SEND = "Enviar"
|
|||
BUTTON_SAVE = "Salvar"
|
||||
BUTTON_DELETE = "Eccluir"
|
||||
BUTTON_CANCEL = "Cancelar"
|
||||
BUTTON_MINIMIZE = "Minimize"
|
||||
SAVED_TIME = "Salvo em %TIME%"
|
||||
SAVED_ERROR_ON_SEND = "Sua mensagem foi enviada, mas não salva a pasta de itens enviados."
|
||||
DISCARD_UNSAVED_DATA = "Discard unsaved data?"
|
||||
ATTACH_FILES = "Anexar arquivos"
|
||||
ATTACH_DROP_FILES_DESC = "Coloque os arquivos aqui"
|
||||
ATTACH_ITEM_CANCEL = "Cancelar"
|
||||
|
|
|
@ -206,8 +206,10 @@ BUTTON_SEND = "Trimite"
|
|||
BUTTON_SAVE = "Salvează"
|
||||
BUTTON_DELETE = "Șterge"
|
||||
BUTTON_CANCEL = "Anulează"
|
||||
BUTTON_MINIMIZE = "Minimize"
|
||||
SAVED_TIME = "Salvat la %TIME%"
|
||||
SAVED_ERROR_ON_SEND = "Mesajul a fost trimis, dar nu a fost slavat"
|
||||
DISCARD_UNSAVED_DATA = "Discard unsaved data?"
|
||||
ATTACH_FILES = "Atașează fișiere"
|
||||
ATTACH_DROP_FILES_DESC = "Puneți fișierele aici"
|
||||
ATTACH_ITEM_CANCEL = "Anulează"
|
||||
|
|
|
@ -207,8 +207,10 @@ BUTTON_SEND = "Отправить"
|
|||
BUTTON_SAVE = "Сохранить"
|
||||
BUTTON_DELETE = "Удалить"
|
||||
BUTTON_CANCEL = "Отменить"
|
||||
BUTTON_MINIMIZE = "Minimize"
|
||||
SAVED_TIME = "Сохранено в %TIME%"
|
||||
SAVED_ERROR_ON_SEND = "Сообщение было отправлено, но не было сохранено"
|
||||
DISCARD_UNSAVED_DATA = "Discard unsaved data?"
|
||||
ATTACH_FILES = "Прикрепить файлы"
|
||||
ATTACH_DROP_FILES_DESC = "Поместите файлы сюда"
|
||||
ATTACH_ITEM_CANCEL = "Отменить"
|
||||
|
|
|
@ -207,8 +207,10 @@ BUTTON_SEND = "Odoslať"
|
|||
BUTTON_SAVE = "Uložiť"
|
||||
BUTTON_DELETE = "Odstrániť"
|
||||
BUTTON_CANCEL = "Zrušiť"
|
||||
BUTTON_MINIMIZE = "Minimize"
|
||||
SAVED_TIME = "Uložené o %TIME%"
|
||||
SAVED_ERROR_ON_SEND = "Správa bola odoslaná ale nebola uložená do priečinka odoslaných správ"
|
||||
DISCARD_UNSAVED_DATA = "Discard unsaved data?"
|
||||
ATTACH_FILES = "Pripojiť súbory"
|
||||
ATTACH_DROP_FILES_DESC = "Súbory pusťte tu"
|
||||
ATTACH_ITEM_CANCEL = "Zrušiť"
|
||||
|
|
|
@ -208,8 +208,10 @@ BUTTON_SEND = "Skicka"
|
|||
BUTTON_SAVE = "Spara"
|
||||
BUTTON_DELETE = "Ta bort"
|
||||
BUTTON_CANCEL = "Avbryt"
|
||||
BUTTON_MINIMIZE = "Minimize"
|
||||
SAVED_TIME = "Sparat kl %TIME%"
|
||||
SAVED_ERROR_ON_SEND = "Meddelandet skickat men inte sparat i skickat-mappen"
|
||||
DISCARD_UNSAVED_DATA = "Discard unsaved data?"
|
||||
ATTACH_FILES = "Bifoga filer"
|
||||
ATTACH_DROP_FILES_DESC = "Släpp filer här"
|
||||
ATTACH_ITEM_CANCEL = "Avbryt"
|
||||
|
|
|
@ -208,8 +208,10 @@ BUTTON_SEND = "Gönder"
|
|||
BUTTON_SAVE = "Kaydet"
|
||||
BUTTON_DELETE = "Sil"
|
||||
BUTTON_CANCEL = "Vazgeç"
|
||||
BUTTON_MINIMIZE = "Minimize"
|
||||
SAVED_TIME = "%TIME% tarihinde kaydedildi"
|
||||
SAVED_ERROR_ON_SEND = "Mesaj gönderildi fakat gönderilenler klasörüne kaydedilmedi"
|
||||
DISCARD_UNSAVED_DATA = "Discard unsaved data?"
|
||||
ATTACH_FILES = "Ek dosyalar"
|
||||
ATTACH_DROP_FILES_DESC = "Dosyaları buraya sürükleyin"
|
||||
ATTACH_ITEM_CANCEL = "Vazgeç"
|
||||
|
|
|
@ -207,8 +207,10 @@ BUTTON_SEND = "Надслати"
|
|||
BUTTON_SAVE = "Зберегти"
|
||||
BUTTON_DELETE = "Видалити"
|
||||
BUTTON_CANCEL = "Відмінити"
|
||||
BUTTON_MINIMIZE = "Minimize"
|
||||
SAVED_TIME = "Збережено в %TIME%"
|
||||
SAVED_ERROR_ON_SEND = "Повідомлення було надіслано, але не збережено"
|
||||
DISCARD_UNSAVED_DATA = "Discard unsaved data?"
|
||||
ATTACH_FILES = "Додати файли"
|
||||
ATTACH_DROP_FILES_DESC = "Помістити файли сюди"
|
||||
ATTACH_ITEM_CANCEL = "Відмінити"
|
||||
|
|
|
@ -207,8 +207,10 @@ BUTTON_SEND = "发送"
|
|||
BUTTON_SAVE = "保存"
|
||||
BUTTON_DELETE = "删除"
|
||||
BUTTON_CANCEL = "取消"
|
||||
BUTTON_MINIMIZE = "Minimize"
|
||||
SAVED_TIME = "保存于 %TIME%"
|
||||
SAVED_ERROR_ON_SEND = "邮件已发送但并未保存在已发邮件列表中。"
|
||||
DISCARD_UNSAVED_DATA = "Discard unsaved data?"
|
||||
ATTACH_FILES = "添加附件"
|
||||
ATTACH_DROP_FILES_DESC = "拖动文件至此"
|
||||
ATTACH_ITEM_CANCEL = "取消"
|
||||
|
|
|
@ -208,8 +208,10 @@ BUTTON_SEND = "發送"
|
|||
BUTTON_SAVE = "保存"
|
||||
BUTTON_DELETE = "刪除"
|
||||
BUTTON_CANCEL = "取消"
|
||||
BUTTON_MINIMIZE = "Minimize"
|
||||
SAVED_TIME = "保存於 %TIME%"
|
||||
SAVED_ERROR_ON_SEND = "郵件已發送但並未保存在已發郵寄清單中。"
|
||||
DISCARD_UNSAVED_DATA = "Discard unsaved data?"
|
||||
ATTACH_FILES = "添加附件"
|
||||
ATTACH_DROP_FILES_DESC = "拖動文件至此"
|
||||
ATTACH_ITEM_CANCEL = "取消"
|
||||
|
|
Loading…
Reference in a new issue