@@ -13,6 +13,7 @@ describe('draggable directive', () => {
13
13
<div
14
14
mwlDraggable
15
15
[dragAxis]="dragAxis"
16
+ [snapGrid]="snapGrid"
16
17
(dragStart)="dragStart($event)"
17
18
(dragging)="dragging($event)"
18
19
(dragEnd)="dragEnd($event)">
@@ -26,6 +27,7 @@ describe('draggable directive', () => {
26
27
public dragging : sinon . SinonSpy = sinon . spy ( ) ;
27
28
public dragEnd : sinon . SinonSpy = sinon . spy ( ) ;
28
29
public dragAxis : any = { x : true , y : true } ;
30
+ public snapGrid : any = { } ;
29
31
30
32
}
31
33
@@ -118,4 +120,38 @@ describe('draggable directive', () => {
118
120
expect ( fixture . componentInstance . dragEnd ) . to . have . been . calledWith ( { x : 0 , y : 0 } ) ;
119
121
} ) ;
120
122
123
+ it ( 'should snap all horizontal drags to a grid' , ( ) => {
124
+ fixture . componentInstance . snapGrid = { x : 10 } ;
125
+ fixture . detectChanges ( ) ;
126
+ const draggableElement : HTMLElement = fixture . componentInstance . draggable . element . nativeElement ;
127
+ triggerDomEvent ( 'mousedown' , draggableElement , { clientX : 5 , clientY : 10 } ) ;
128
+ triggerDomEvent ( 'mousemove' , draggableElement , { clientX : 7 , clientY : 12 } ) ;
129
+ expect ( fixture . componentInstance . dragging ) . to . have . been . calledWith ( { x : 0 , y : 2 } ) ;
130
+ triggerDomEvent ( 'mousemove' , draggableElement , { clientX : 14 , clientY : 18 } ) ;
131
+ expect ( fixture . componentInstance . dragging ) . to . have . been . calledWith ( { x : 0 , y : 8 } ) ;
132
+ triggerDomEvent ( 'mousemove' , draggableElement , { clientX : 15 , clientY : 20 } ) ;
133
+ expect ( fixture . componentInstance . dragging ) . to . have . been . calledWith ( { x : 10 , y : 10 } ) ;
134
+ triggerDomEvent ( 'mousemove' , draggableElement , { clientX : 16 , clientY : 22 } ) ;
135
+ expect ( fixture . componentInstance . dragging ) . to . have . been . calledWith ( { x : 10 , y : 12 } ) ;
136
+ triggerDomEvent ( 'mouseup' , draggableElement , { clientX : 16 , clientY : 22 } ) ;
137
+ expect ( fixture . componentInstance . dragEnd ) . to . have . been . calledWith ( { x : 10 , y : 12 } ) ;
138
+ } ) ;
139
+
140
+ it ( 'should snap all vertical drags to a grid' , ( ) => {
141
+ fixture . componentInstance . snapGrid = { y : 10 } ;
142
+ fixture . detectChanges ( ) ;
143
+ const draggableElement : HTMLElement = fixture . componentInstance . draggable . element . nativeElement ;
144
+ triggerDomEvent ( 'mousedown' , draggableElement , { clientX : 10 , clientY : 5 } ) ;
145
+ triggerDomEvent ( 'mousemove' , draggableElement , { clientX : 12 , clientY : 7 } ) ;
146
+ expect ( fixture . componentInstance . dragging ) . to . have . been . calledWith ( { x : 2 , y : 0 } ) ;
147
+ triggerDomEvent ( 'mousemove' , draggableElement , { clientX : 18 , clientY : 14 } ) ;
148
+ expect ( fixture . componentInstance . dragging ) . to . have . been . calledWith ( { x : 8 , y : 0 } ) ;
149
+ triggerDomEvent ( 'mousemove' , draggableElement , { clientX : 20 , clientY : 15 } ) ;
150
+ expect ( fixture . componentInstance . dragging ) . to . have . been . calledWith ( { x : 10 , y : 10 } ) ;
151
+ triggerDomEvent ( 'mousemove' , draggableElement , { clientX : 22 , clientY : 16 } ) ;
152
+ expect ( fixture . componentInstance . dragging ) . to . have . been . calledWith ( { x : 12 , y : 10 } ) ;
153
+ triggerDomEvent ( 'mouseup' , draggableElement , { clientX : 22 , clientY : 16 } ) ;
154
+ expect ( fixture . componentInstance . dragEnd ) . to . have . been . calledWith ( { x : 12 , y : 10 } ) ;
155
+ } ) ;
156
+
121
157
} ) ;
0 commit comments