Attachments (redesign)

This commit is contained in:
RainLoop Team 2014-12-27 23:48:55 +04:00
parent 735842bb88
commit f9640b3ffa
40 changed files with 293 additions and 110 deletions

View file

@ -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}
*/

View file

@ -437,6 +437,7 @@
}, this);
// other
this.composeInEdit = ko.observable(false);
this.capaOpenPGP = ko.observable(false);
this.openpgpkeys = ko.observableArray([]);
this.openpgp = null;

View file

@ -41,6 +41,10 @@
margin-left: 8px;
}
.button-close, .button-skip {
margin-left: 8px;
}
.disabled.button-delete {
margin-left: 0px;
}

View file

@ -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;
}
}
}
}

View file

@ -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 ()

View file

@ -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())
;
};

View file

@ -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;

View file

@ -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);

View file

@ -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() {

View file

@ -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": "*",

View file

@ -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);

View file

@ -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;
}
}

View file

@ -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'">

View file

@ -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;">

View file

@ -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">&times;</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>
&nbsp;&nbsp;
@ -12,6 +11,12 @@
&nbsp;&nbsp;
<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>

View file

@ -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 = "Отказ"

View file

@ -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"

View file

@ -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"

View file

@ -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"

View file

@ -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"

View file

@ -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"

View file

@ -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ð"

View file

@ -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"

View file

@ -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 = "キャンセル"

View file

@ -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 = "취소"

View file

@ -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"

View file

@ -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"

View file

@ -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"

View file

@ -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"

View file

@ -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"

View file

@ -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"

View file

@ -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"

View file

@ -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ă"

View file

@ -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 = "Отменить"

View file

@ -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ť"

View file

@ -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"

View file

@ -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ç"

View file

@ -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 = "Відмінити"

View file

@ -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 = "取消"

View file

@ -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 = "取消"