@@ -27,6 +27,7 @@ QueryBuilder.define('sortable', function(options) {
27
27
var placeholder ;
28
28
var ghost ;
29
29
var src ;
30
+ var moved ;
30
31
31
32
// Init drag and drop
32
33
this . on ( 'afterAddRule afterAddGroup' , function ( e , node ) {
@@ -50,6 +51,8 @@ QueryBuilder.define('sortable', function(options) {
50
51
. draggable ( {
51
52
allowForm : QueryBuilder . selectors . drag_handle ,
52
53
onstart : function ( event ) {
54
+ moved = false ;
55
+
53
56
// get model of dragged element
54
57
src = self . getModel ( event . target ) ;
55
58
@@ -73,7 +76,13 @@ QueryBuilder.define('sortable', function(options) {
73
76
ghost [ 0 ] . style . top = event . clientY - 15 + 'px' ;
74
77
ghost [ 0 ] . style . left = event . clientX - 15 + 'px' ;
75
78
} ,
76
- onend : function ( ) {
79
+ onend : function ( event ) {
80
+ // starting from Interact 1.3.3, onend is called before ondrop
81
+ if ( event . dropzone ) {
82
+ moveSortableToTarget ( src , $ ( event . relatedTarget ) , self ) ;
83
+ moved = true ;
84
+ }
85
+
77
86
// remove ghost
78
87
ghost . remove ( ) ;
79
88
ghost = undefined ;
@@ -107,7 +116,9 @@ QueryBuilder.define('sortable', function(options) {
107
116
moveSortableToTarget ( placeholder , $ ( event . target ) , self ) ;
108
117
} ,
109
118
ondrop : function ( event ) {
110
- moveSortableToTarget ( src , $ ( event . target ) , self ) ;
119
+ if ( ! moved ) {
120
+ moveSortableToTarget ( src , $ ( event . target ) , self ) ;
121
+ }
111
122
}
112
123
} ) ;
113
124
@@ -120,7 +131,9 @@ QueryBuilder.define('sortable', function(options) {
120
131
moveSortableToTarget ( placeholder , $ ( event . target ) , self ) ;
121
132
} ,
122
133
ondrop : function ( event ) {
123
- moveSortableToTarget ( src , $ ( event . target ) , self ) ;
134
+ if ( ! moved ) {
135
+ moveSortableToTarget ( src , $ ( event . target ) , self ) ;
136
+ }
124
137
}
125
138
} ) ;
126
139
}
0 commit comments