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/common | |
| parent | v3908 (diff) | |
| download | sharkey-c6118c7bc80d2866f45d85a309e1ca40dfe3554e.tar.gz sharkey-c6118c7bc80d2866f45d85a309e1ca40dfe3554e.tar.bz2 sharkey-c6118c7bc80d2866f45d85a309e1ca40dfe3554e.zip | |
Improve drag and drop
Diffstat (limited to 'src/web/app/common')
| -rw-r--r-- | src/web/app/common/views/components/messaging-room.form.vue | 33 | ||||
| -rw-r--r-- | src/web/app/common/views/components/messaging-room.vue | 29 |
2 files changed, 30 insertions, 32 deletions
diff --git a/src/web/app/common/views/components/messaging-room.form.vue b/src/web/app/common/views/components/messaging-room.form.vue index 3698ccd5b2..edcda069a3 100644 --- a/src/web/app/common/views/components/messaging-room.form.vue +++ b/src/web/app/common/views/components/messaging-room.form.vue @@ -1,7 +1,7 @@ <template> <div class="mk-messaging-form" - @dragover.prevent.stop="onDragover" - @drop.prevent.stop="onDrop" + @dragover.stop="onDragover" + @drop.stop="onDrop" > <textarea v-model="text" @@ -89,34 +89,33 @@ export default Vue.extend({ }, onDragover(e) { - e.dataTransfer.dropEffect = e.dataTransfer.effectAllowed == 'all' ? 'copy' : 'move'; + const isFile = e.dataTransfer.items[0].kind == 'file'; + const isDriveFile = e.dataTransfer.types[0] == 'mk_drive_file'; + if (isFile || isDriveFile) { + e.preventDefault(); + e.dataTransfer.dropEffect = e.dataTransfer.effectAllowed == 'all' ? 'copy' : 'move'; + } }, onDrop(e): void { // ファイルだったら if (e.dataTransfer.files.length == 1) { + e.preventDefault(); this.upload(e.dataTransfer.files[0]); return; } else if (e.dataTransfer.files.length > 1) { + e.preventDefault(); alert('メッセージに添付できるのはひとつのファイルのみです'); return; } - // データ取得 - const data = e.dataTransfer.getData('text'); - if (data == null) return; - - try { - // パース - const obj = JSON.parse(data); - - // (ドライブの)ファイルだったら - if (obj.type == 'file') { - this.file = obj.file; - } - } catch (e) { - // not a json, so noop + //#region ドライブのファイル + const driveFile = e.dataTransfer.getData('mk_drive_file'); + if (driveFile != null && driveFile != '') { + this.file = JSON.parse(driveFile); + e.preventDefault(); } + //#endregion }, onKeypress(e) { diff --git a/src/web/app/common/views/components/messaging-room.vue b/src/web/app/common/views/components/messaging-room.vue index fb67d126cb..f7f31c557c 100644 --- a/src/web/app/common/views/components/messaging-room.vue +++ b/src/web/app/common/views/components/messaging-room.vue @@ -88,7 +88,14 @@ export default Vue.extend({ methods: { onDragover(e) { - e.dataTransfer.dropEffect = e.dataTransfer.effectAllowed == 'all' ? 'copy' : 'move'; + const isFile = e.dataTransfer.items[0].kind == 'file'; + const isDriveFile = e.dataTransfer.types[0] == 'mk_drive_file'; + + if (isFile || isDriveFile) { + e.dataTransfer.dropEffect = e.dataTransfer.effectAllowed == 'all' ? 'copy' : 'move'; + } else { + e.dataTransfer.dropEffect = 'none'; + } }, onDrop(e): void { @@ -101,21 +108,13 @@ export default Vue.extend({ return; } - // データ取得 - const data = e.dataTransfer.getData('text'); - if (data == null) return; - - try { - // パース - const obj = JSON.parse(data); - - // (ドライブの)ファイルだったら - if (obj.type == 'file') { - this.form.file = obj.file; - } - } catch (e) { - // not a json, so noop + //#region ドライブのファイル + const driveFile = e.dataTransfer.getData('mk_drive_file'); + if (driveFile != null && driveFile != '') { + const file = JSON.parse(driveFile); + this.form.file = file; } + //#endregion }, fetchMessages() { |