mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-08-30 20:49:20 +03:00
Improved drag&drop of local EML files
This commit is contained in:
parent
a6bf2abaff
commit
d706793e56
3 changed files with 80 additions and 57 deletions
|
|
@ -14,11 +14,13 @@ import { computedPaginatorHelper, showMessageComposer, populateMessageBody } fro
|
|||
import { FileInfo } from 'Common/File';
|
||||
import { isFullscreen, toggleFullscreen } from 'Common/Fullscreen';
|
||||
|
||||
import { mailBox, serverRequest } from 'Common/Links';
|
||||
import { mailBox } from 'Common/Links';
|
||||
import { Selector } from 'Common/Selector';
|
||||
|
||||
import { i18n } from 'Common/Translator';
|
||||
|
||||
import { dropFilesInFolder } from 'Common/Folders';
|
||||
|
||||
import {
|
||||
getFolderFromCacheList,
|
||||
MessageFlagsCache
|
||||
|
|
@ -507,33 +509,53 @@ export class MailMessageList extends AbstractViewRight {
|
|||
// initUploaderForAppend
|
||||
|
||||
if (Settings.app('allowAppendMessage')) {
|
||||
const oJua = new Jua({
|
||||
action: serverRequest('Append'),
|
||||
name: 'AppendFile',
|
||||
limit: 1,
|
||||
hidden: {
|
||||
Folder: () => FolderUserStore.currentFolderFullName()
|
||||
},
|
||||
dragAndDropElement: dom.querySelector('.listDragOver'),
|
||||
dragAndDropBodyElement: b_content
|
||||
});
|
||||
|
||||
this.dragOver.subscribe(value => value && this.selector.scrollToTop());
|
||||
|
||||
oJua
|
||||
.on('onDragEnter', () => this.dragOverEnter(true))
|
||||
.on('onDragLeave', () => this.dragOverEnter(false))
|
||||
.on('onBodyDragEnter', () => this.dragOver(true))
|
||||
.on('onBodyDragLeave', () => this.dragOver(false))
|
||||
.on('onSelect', (sUid, oData) => {
|
||||
if (sUid && oData && 'message/rfc822' === oData.Type) {
|
||||
MessagelistUserStore.loading(true);
|
||||
return true;
|
||||
const dropZone = dom.querySelector('.listDragOver'),
|
||||
validFiles = oEvent => {
|
||||
for (const item of oEvent.dataTransfer.items) {
|
||||
if ('file' === item.kind && 'message/rfc822' === item.type) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
})
|
||||
.on('onComplete', () => MessagelistUserStore.reload(true, true));
|
||||
};
|
||||
addEventsListeners(dropZone, {
|
||||
dragover: oEvent => {
|
||||
if (validFiles(oEvent)) {
|
||||
oEvent.dataTransfer.dropEffect = 'copy';
|
||||
oEvent.preventDefault();
|
||||
}
|
||||
},
|
||||
});
|
||||
addEventsListeners(b_content, {
|
||||
dragenter: oEvent => {
|
||||
if (validFiles(oEvent)) {
|
||||
if (b_content.contains(oEvent.target)) {
|
||||
this.dragOver(true);
|
||||
}
|
||||
if (oEvent.target == dropZone) {
|
||||
oEvent.dataTransfer.dropEffect = 'copy';
|
||||
this.dragOverEnter(true);
|
||||
}
|
||||
}
|
||||
},
|
||||
dragleave: oEvent => {
|
||||
if (oEvent.target == dropZone) {
|
||||
this.dragOverEnter(false);
|
||||
}
|
||||
let related = oEvent.relatedTarget;
|
||||
if (!related || !b_content.contains(related)) {
|
||||
this.dragOver(false);
|
||||
}
|
||||
},
|
||||
drop: oEvent => {
|
||||
oEvent.preventDefault();
|
||||
if (oEvent.target == dropZone && validFiles(oEvent)) {
|
||||
MessagelistUserStore.loading(true);
|
||||
dropFilesInFolder(FolderUserStore.currentFolderFullName(), oEvent.dataTransfer.files);
|
||||
}
|
||||
this.dragOverEnter(false);
|
||||
this.dragOver(false);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// initShortcuts
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue