@@ -5,22 +5,30 @@ Description:
5
5
-->
6
6
7
7
<template >
8
- <section class =" html-queue" >
8
+ <section class =" html-queue" @dragover = " dragOver($event), false " >
9
9
<div
10
10
group =" people"
11
11
class =" list-group"
12
12
>
13
+
13
14
<div
14
- :class =" activeHTML === element[2] ? 'list-group-item-selected' : 'list-group-item'"
15
15
@dblclick.self =" setActiveElement(element)"
16
16
v-for =" (element) in renderList" :key =" element[1] + Date.now()"
17
+ @dragenter =" dragEnter($event, element[2])"
17
18
>
18
- <i v-if =' activeComponent === "" || exceptions.includes(element[0]) ' ></i >
19
- <i v-else class =" fas fa fa-angle-double-down fa-md" @click =" setLayer({text: element[0], id: element[2]})" ></i >
20
- {{ element[0] }}
21
- <i class =" fas fa fa-trash fa-md" @click.self =" deleteElement([element[1],element[2]])" ></i >
19
+ <div
20
+ :class =" activeHTML === element[2] ? 'list-group-item-selected' : 'list-group-item'"
21
+ @dblclick.self =" setActiveElement(element)"
22
+ @dragstart =" startDrag($event, element[2])"
23
+ @dragend =" endDrag($event)"
24
+ draggable =" true"
25
+ >
26
+ <i v-if =' activeComponent === "" || exceptions.includes(element[0]) ' ></i >
27
+ <i v-else class =" fas fa fa-angle-double-down fa-md" @click =" setLayer({text: element[0], id: element[2]})" ></i >
28
+ {{ element[0] }}
29
+ <i class =" fas fa fa-trash fa-md" @click.self =" deleteElement([element[1],element[2]])" ></i >
30
+ </div >
22
31
</div >
23
-
24
32
</div >
25
33
</section >
26
34
</template >
@@ -78,7 +86,7 @@ export default {
78
86
79
87
},
80
88
methods: {
81
- ... mapActions ([' setActiveHTML' , ' setActiveLayer' , ' upOneLayer' ]),
89
+ ... mapActions ([' setActiveHTML' , ' setActiveLayer' , ' upOneLayer' , ' setSelectedIdDrag ' , ' setIdDrag ' , ' setSelectedIdDrop ' , ' setIdDrop ' , ' dragDropSortHtmlElements ' , ' dragDropSortSelectedHtmlElements ' ]),
82
90
deleteElement (id ) {
83
91
if (this .activeComponent === ' ' ) this .$store .dispatch (deleteSelectedElement, id[0 ])
84
92
else this .$store .dispatch (deleteFromComponentHtmlList, id[1 ])
@@ -95,7 +103,33 @@ export default {
95
103
if (this .activeLayer .id !== ' ' ) {
96
104
this .upOneLayer (this .activeLayer .id )
97
105
}
98
- }
106
+ },
107
+ // METHODS FOR DRAG-AND-DROP
108
+ startDrag (event , id ) {
109
+ // add a class of 'currentlyDragging' to the HTML element that you are currently dragging
110
+ event .target .classList .add (' currentlyDragging' )
111
+ const dragId = id;
112
+ if (this .activeComponent === ' ' ) this .setSelectedIdDrag (dragId)
113
+ else this .setIdDrag (dragId)
114
+ },
115
+ dragEnter (event , id ) {
116
+ event .preventDefault ();
117
+ const dropId = id;
118
+ if (this .activeComponent === ' ' ) this .setSelectedIdDrop (dropId)
119
+ else this .setIdDrop (dropId)
120
+ },
121
+ dragOver (event ) {
122
+ // needed stop the dragend animation so endDrag is invoked automatically
123
+ event .preventDefault ();
124
+ },
125
+ endDrag (event ) {
126
+ // remove the 'currentlyDragging' class after the HTML is dropped
127
+ event .preventDefault ();
128
+ event .target .classList .remove (' currentlyDragging' )
129
+ // invoke the action that will use the idDrag and idDrop to sort the HtmlList
130
+ if (this .activeComponent === ' ' ) this .dragDropSortSelectedHtmlElements ()
131
+ else this .dragDropSortHtmlElements ()
132
+ },
99
133
},
100
134
watch: {
101
135
activeComponent : function () {
@@ -135,11 +169,12 @@ li {
135
169
height : 35px ;
136
170
padding-top : 6px ;
137
171
text-align : center ;
172
+ cursor : move ;
138
173
}
139
174
140
175
.list-group-item-selected {
141
176
display : inline-block ;
142
- margin : 2 px 1.5% ;
177
+ margin : 4 px 1.5% ;
143
178
min-width : 175px ;
144
179
width : 30% ;
145
180
border-radius : 0.5cm ;
148
183
height : 35px ;
149
184
padding-top : 6px ;
150
185
text-align : center ;
186
+ cursor : move ;
151
187
}
152
188
153
189
.fa-trash :hover {
@@ -190,4 +226,12 @@ li {
190
226
hr {
191
227
border : 1px solid grey
192
228
}
229
+
230
+ .currentlyDragging {
231
+ opacity : .5 ;
232
+ }
233
+
234
+ .ignoreByDragover {
235
+ pointer-events : none ;
236
+ }
193
237
</style >
0 commit comments