diff options
| author | syuilo <syuilotan@yahoo.co.jp> | 2018-02-27 06:25:17 +0900 |
|---|---|---|
| committer | syuilo <syuilotan@yahoo.co.jp> | 2018-02-27 06:25:17 +0900 |
| commit | c6118c7bc80d2866f45d85a309e1ca40dfe3554e (patch) | |
| tree | f65647bb35d781a61cb61b3537da3e80fa471ea4 /src/web/app/desktop/views/components/drive.nav-folder.vue | |
| parent | v3908 (diff) | |
| download | misskey-c6118c7bc80d2866f45d85a309e1ca40dfe3554e.tar.gz misskey-c6118c7bc80d2866f45d85a309e1ca40dfe3554e.tar.bz2 misskey-c6118c7bc80d2866f45d85a309e1ca40dfe3554e.zip | |
Improve drag and drop
Diffstat (limited to 'src/web/app/desktop/views/components/drive.nav-folder.vue')
| -rw-r--r-- | src/web/app/desktop/views/components/drive.nav-folder.vue | 56 |
1 files changed, 28 insertions, 28 deletions
diff --git a/src/web/app/desktop/views/components/drive.nav-folder.vue b/src/web/app/desktop/views/components/drive.nav-folder.vue index 4c51285881..a5677dcb4d 100644 --- a/src/web/app/desktop/views/components/drive.nav-folder.vue +++ b/src/web/app/desktop/views/components/drive.nav-folder.vue @@ -41,13 +41,17 @@ export default Vue.extend({ // このフォルダがルートかつカレントディレクトリならドロップ禁止 if (this.folder == null && this.browser.folder == null) { e.dataTransfer.dropEffect = 'none'; - // ドラッグされてきたものがファイルだったら - } else if (e.dataTransfer.effectAllowed == 'all') { - e.dataTransfer.dropEffect = 'copy'; + } + + const isFile = e.dataTransfer.items[0].kind == 'file'; + const isDriveFile = e.dataTransfer.types[0] == 'mk_drive_file'; + const isDriveFolder = e.dataTransfer.types[0] == 'mk_drive_folder'; + + if (isFile || isDriveFile || isDriveFolder) { + e.dataTransfer.dropEffect = e.dataTransfer.effectAllowed == 'all' ? 'copy' : 'move'; } else { - e.dataTransfer.dropEffect = 'move'; + e.dataTransfer.dropEffect = 'none'; } - return false; }, onDragenter() { if (this.folder || this.browser.folder) this.draghover = true; @@ -63,38 +67,34 @@ export default Vue.extend({ Array.from(e.dataTransfer.files).forEach(file => { this.browser.upload(file, this.folder); }); - return false; - }; - - // データ取得 - const data = e.dataTransfer.getData('text'); - if (data == null) return false; - - // パース - // TODO: Validate JSON - const obj = JSON.parse(data); + return; + } - // (ドライブの)ファイルだったら - if (obj.type == 'file') { - const file = obj.id; - this.browser.removeFile(file); + //#region ドライブのファイル + const driveFile = e.dataTransfer.getData('mk_drive_file'); + if (driveFile != null && driveFile != '') { + const file = JSON.parse(driveFile); + this.browser.removeFile(file.id); (this as any).api('drive/files/update', { - file_id: file, + file_id: file.id, folder_id: this.folder ? this.folder.id : null }); - // (ドライブの)フォルダーだったら - } else if (obj.type == 'folder') { - const folder = obj.id; + } + //#endregion + + //#region ドライブのフォルダ + const driveFolder = e.dataTransfer.getData('mk_drive_folder'); + if (driveFolder != null && driveFolder != '') { + const folder = JSON.parse(driveFolder); // 移動先が自分自身ならreject - if (this.folder && folder == this.folder.id) return false; - this.browser.removeFolder(folder); + if (this.folder && folder.id == this.folder.id) return; + this.browser.removeFolder(folder.id); (this as any).api('drive/folders/update', { - folder_id: folder, + folder_id: folder.id, parent_id: this.folder ? this.folder.id : null }); } - - return false; + //#endregion } } }); |