bulk-operations v0.1 add the Drag & Drop UI Ghost , styled scrollbar

This commit is contained in:
Milos Holba
2020-11-28 15:56:12 +01:00
parent f33fe84350
commit 8e01b837a2
6 changed files with 210 additions and 114 deletions
@@ -29,7 +29,6 @@
:class="FilePreviewType"
>
<FileItemList
@drag.native="mousePosition"
@dragstart="dragStart(item)"
@drop.stop.native.prevent="dragFinish(item, $event)"
@contextmenu.native.prevent="contextMenu($event, item)"
@@ -82,7 +81,6 @@
<!--If file info panel empty show message-->
<EmptyMessage v-if="fileInfoDetail.length === 0" :message="$t('messages.nothing_to_preview')" icon="eye-off"/>
</div>
<MultiSelected @click.prevent="" :clone-element="dragInProgress" :style="{ top: positionY + 'px', left: positionX + 'px' }" id="multi-selected" v-if="dragInProgress && this.fileInfoDetail.length > 1" />
</div>
</template>
@@ -138,24 +136,9 @@
draggingId: undefined,
isDragging: false,
mobileMultiSelect: false,
dragInProgress:false,
positionY:undefined,
positionX:undefined
}
},
methods: {
mousePosition() {
let contentLeft = document.getElementById('file-content-id').getBoundingClientRect().left -15
if(event.clientX > contentLeft ) {
this.positionY = event.clientY -85
this.positionX = event.clientX -350
}else if (event.clientX < contentLeft){
this.positionY = event.clientY -15
this.positionX = event.clientX -30
}
// console.log(event.clientX, contentLeft)
},
dropUpload(event) {
// Upload external file
this.$uploadExternalFiles(event, this.currentFolder.unique_id)
@@ -171,25 +154,8 @@
dragStart(data) {
let img = document.createElement('img')
img.src = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"
<<<<<<< HEAD
event.dataTransfer.setDragImage(img, 0, 0)
this.dragInProgress = true
=======
event.dataTransfer.setDragImage(img, 0, 0)
/*let elementClone = event.target.cloneNode(true)
elementClone.className = 'draged-clone'
console.log(elementClone)*/
// elementClone.style.backgroundColor = "red"
// let element = document.getElementsByClassName('file-item')
// element.style.display = "none"
// var crt = this.cloneNode(true);
// crt.style.backgroundColor = "red";
// this.style.display = "none"
>>>>>>> 65f7855703c7a163dc2bf3cc05b23469d76d7453
events.$emit('dragstart', data)
// Store dragged folder
@@ -197,7 +163,6 @@
},
dragFinish(data, event) {
this.dragInProgress = false
if (event.dataTransfer.items.length == 0) {
// Prevent to drop on file or image
@@ -250,8 +215,7 @@
})
events.$on('drop', () => {
this.isDragging = false,
this.dragInProgress = false
this.isDragging = false
})
events.$on('fileItem:deselect', () =>
@@ -1,12 +1,24 @@
<template>
<div :class="[this.moveItem ? 'move-item' : 'wrapper' , this.cloneElement ? 'clone' : '']">
<div :class="[this.moveItem ? 'move-item' : 'wrapper' , this.dragedGhost ? 'ghost' : '']">
<div class="icon-wrapper">
<CheckSquareIcon class="icon" size="21"/>
</div>
<div class="text">
<!-- Multi select for the move item popup and file info -->
<div class="text" v-if="!this.dragedGhost">
<span class="title">{{ $t('file_detail.selected_multiple') }}</span>
<span class="count">{{this.fileInfoDetail.length}} {{ $tc('file_detail.items', this.fileInfoDetail.length) }}</span>
</div>
<!-- Multi select for the Drag & Drop -->
<div class="text" v-if="this.dragedGhost">
<div v-if="this.fileInfoDetail.length > 1 && !noSelectedItem">
<span class="title">{{ $t('file_detail.selected_multiple') }}</span>
<span class="count">{{this.fileInfoDetail.length}} {{ $tc('file_detail.items', this.fileInfoDetail.length) }}</span>
</div>
<div v-if="this.fileInfoDetail.length < 2 || noSelectedItem">
<span class="title">{{ this.dragedItem.name }}</span>
</div>
</div>
</div>
</template>
@@ -16,10 +28,14 @@ import {mapGetters} from 'vuex'
export default {
name:'MultiSelected',
props: ['moveItem' , 'cloneElement'],
props: ['moveItem' , 'dragedGhost' , 'dragedItem'],
components: {CheckSquareIcon},
computed: {
...mapGetters(['fileInfoDetail'])
...mapGetters(['fileInfoDetail']),
// If the draged item is not in selected items
noSelectedItem() {
return !this.fileInfoDetail.includes(this.dragedItem)
}
},
}
@@ -28,8 +44,19 @@ import {mapGetters} from 'vuex'
<style lang="scss" scoped>
@import '@assets/vue-file-manager/_variables';
@import '@assets/vue-file-manager/_mixins';
.clone {
position: relative;
.ghost {
// width: 200px !important;
max-width: 300px;
min-width: 250px;
position: fixed;
z-index: 10;
pointer-events: none;
padding: 10px;
border-radius: 8px;
box-shadow: 0 5px 10px -6px rgba(26, 36, 55, 0.15);
background:$light_background;
}
.wrapper {
@@ -131,5 +158,8 @@ import {mapGetters} from 'vuex'
}
}
}
.ghost {
background: $dark_mode_foreground;
}
}
</style>