nexus site path corrected
[portal.git] / ecomp-portal-FE / client / bower_components / jquery.event.drag-new / event.drop / test / tolerance.js
1 ;(function(){
2
3         module("Tolerance Mode");
4         
5         // re-usable test harness object
6         var obj = {
7                 init: function( opts ){
8                         // the drop element
9                         obj.$drop = $('<div />')
10                                 .css({
11                                         position: 'absolute',
12                                         top: 200,
13                                         left: 200,
14                                         height: 100,
15                                         width: 100
16                                 })
17                                 .appendTo( document.body )
18                                 .bind("dropinit",function( event ){
19                                         if ( obj.multidrop )
20                                                 return $( this )
21                                                         .clone( true )
22                                                         .addClass('clone')
23                                                         .appendTo( document.body )
24                                                         .add( this );
25                                 })
26                                 .bind("drop",function( event ){
27                                         obj.count += 1;                                                                                                                          
28                                 });
29                         // the drag element
30                         obj.$drag = $('<div />')
31                                 .css({
32                                         position: 'absolute',
33                                         top: 100,
34                                         left: 100,
35                                         height: 100,
36                                         width: 100
37                                 })
38                                 .appendTo( document.body )
39                                 .bind("draginit", function( event ){
40                                         if ( obj.multidrag )
41                                                 return $( this )
42                                                         .clone( true )
43                                                         .addClass('clone')
44                                                         .appendTo( document.body )
45                                                         .add( this );
46                                 })
47                                 .bind("dragstart",function( ev, dd ){
48                                         if ( obj.proxy )
49                                                 return $( this ).clone()
50                                                         .addClass('clone')
51                                                         .appendTo( document.body );
52                                 })
53                                 .bind("drag",function( ev, dd ){
54                                         if ( obj.move )
55                                                 $( dd.proxy ).css({ 
56                                                         top: dd.offsetY, 
57                                                         left: dd.offsetX 
58                                                 });
59                                 })
60                                 .bind("dragend",function( ev, dd ){
61                                         var $div = $( this ).css({ 
62                                                 top: 100, 
63                                                 left: 100 
64                                         });
65                                         $( document.body ).find('.clone').remove();
66                                 });
67                         // reset test vars
68                         obj.count = 0;
69                         obj.move = obj.proxy = obj.multidrag = obj.multidrop = null;
70                 },
71                 done: function(){
72                         obj.$drag.remove();
73                         obj.$drop.remove();
74                         start();
75                 }
76         };
77         
78         // async iterator
79         function asyncEach( obj, func, after ){
80                 // local refs
81                 var arr = [], i = 0, len;
82                 // translate into a secondary array
83                 $.each( obj, function( index, value ){
84                         len = arr.push({ that:this, index:index, value:value });
85                 });
86                 function next(){
87                         var data = arr[ i++ ], ret;
88                         if ( i <= len ){
89                                 if ( data )
90                                         ret = func.call( data.that, data.index, data.value, next );
91                                         if ( ret === false )
92                                                 done();
93                         }
94                         else done();
95                 };
96                 function done(){
97                         if ( after )
98                                 after();
99                 };
100                 next();
101         }
102
103         // test each mode...
104         $.each({
105                 'mouse':{
106                         'overlap':[0,0,0,0,0], 
107                         'middle':[0,0,0,0,0], 
108                         'fit':[0,0,0,0,0], 
109                         'mouse':[1,1,1,2,4], 
110                         'away':[0,0,0,0,0] 
111                 },
112                 'overlap':{ 
113                         'overlap':[0,1,1,2,4], 
114                         'middle':[0,1,1,2,4], 
115                         'fit':[0,1,1,2,4], 
116                         'mouse':[0,0,0,0,0], 
117                         'away':[0,0,0,0,0] 
118                 }, 
119                 'middle':{ 
120                         'overlap':[0,0,0,0,0], 
121                         'middle':[0,1,1,2,4], 
122                         'fit':[0,1,1,2,4], 
123                         'mouse':[0,0,0,0,0], 
124                         'away':[0,0,0,0,0] 
125                 }, 
126                 'fit':{ 
127                         'overlap':[0,0,0,0,0], 
128                         'middle':[0,0,0,0,0], 
129                         'fit':[0,1,1,2,4], 
130                         'mouse':[0,0,0,0,0], 
131                         'away':[0,0,0,0,0] 
132                 }, 
133                 'intersect':{ 
134                         'overlap':[0,1,1,2,4], 
135                         'middle':[0,1,1,2,4], 
136                         'fit':[0,1,1,2,4], 
137                         'mouse':[1,1,1,2,4], 
138                         'away':[0,0,0,0,0] 
139                 }
140         }, function( mode, expected ){
141                                                                         
142                 // test each mode
143                 asyncTest('"'+ mode +'"',function(){
144                                         
145                         expect( 25 );
146                         
147                         // test prep
148                         obj.init();
149                         $.drop({ 
150                                 mode:mode, 
151                                 multi:true
152                         });
153                         // drag to each position
154                         asyncEach({
155                                 'overlap':{ pageX:33, pageY:33 }, 
156                                 'middle':{ pageX:66, pageY:66 }, 
157                                 'fit':{ pageX:100, pageY:100 }, 
158                                 'mouse':{ pageX:250, pageY:250 }, 
159                                 'away':{ pageX:-1, pageY:-1 } 
160                         }, function( where, coord, next ){
161                                 // execute interaction variants
162                                 asyncEach([
163                                         'dropped '+ where +' (no motion)',
164                                         'dropped '+ where +' (drag motion)',
165                                         'dropped '+ where +' (proxy motion)',
166                                         'dropped '+ where +' (multi drag)',
167                                         'dropped '+ where +' (multi drop)'
168                                 ], function( i, msg, next ){
169                                         // set-up
170                                         obj.count = 0;
171                                         obj.move = ( i > 0 );
172                                         obj.proxy = ( i > 1 );
173                                         obj.multidrag = ( i > 2 );
174                                         obj.multidrop = ( i > 3 );
175                                         // simulate a partial drag
176                                         obj.$drag
177                                                 .fire("mousedown",{ pageX:0, pageY:0 })
178                                                 .fire("mousemove", coord )
179                                                 .fire("mouseup", coord )
180                                                 .fire("click", coord );
181                                         equals( obj.count, expected[where][i], msg );
182                                         next();
183                                 }, next );
184                         }, obj.done );
185                 });
186                         
187         });
188         
189 })();