@@ -13,11 +13,12 @@ describe('uiSortable', function() {
13
13
beforeEach ( module ( 'ui.sortable.testHelper' ) ) ;
14
14
beforeEach ( module ( 'ui.sortable.testDirectives' ) ) ;
15
15
16
- var EXTRA_DY_PERCENTAGE , listContent , listInnerContent , beforeLiElement , afterLiElement ;
16
+ var EXTRA_DY_PERCENTAGE , listContent , listFindContent , listInnerContent , beforeLiElement , afterLiElement ;
17
17
18
18
beforeEach ( inject ( function ( sortableTestHelper ) {
19
19
EXTRA_DY_PERCENTAGE = sortableTestHelper . EXTRA_DY_PERCENTAGE ;
20
20
listContent = sortableTestHelper . listContent ;
21
+ listFindContent = sortableTestHelper . listFindContent ;
21
22
listInnerContent = sortableTestHelper . listInnerContent ;
22
23
beforeLiElement = sortableTestHelper . extraElements && sortableTestHelper . extraElements . beforeLiElement ;
23
24
afterLiElement = sortableTestHelper . extraElements && sortableTestHelper . extraElements . afterLiElement ;
@@ -112,6 +113,108 @@ describe('uiSortable', function() {
112
113
} ) ;
113
114
} ) ;
114
115
116
+ it ( 'should work when the items are inside a transcluded directive' , function ( ) {
117
+ inject ( function ( $compile , $rootScope ) {
118
+ var element ;
119
+ element = $compile ( '' . concat (
120
+ '<div ui-sortable="opts" ng-model="items">' ,
121
+ '<ui-sortable-transclusion-test-directive>' ,
122
+ beforeLiElement ,
123
+ '<div ng-repeat="item in items track by $index" id="s-{{$index}}" class="sortable-item">' ,
124
+ '{{ item }}' ,
125
+ '</div>' ,
126
+ afterLiElement ,
127
+ '</ui-sortable-simple-test-directive>' ,
128
+ '</div>' ) ) ( $rootScope ) ;
129
+
130
+ $rootScope . $apply ( function ( ) {
131
+ $rootScope . opts = {
132
+ items : '> * .sortable-item'
133
+ } ;
134
+ $rootScope . items = [ 'One' , 'Two' , 'Three' ] ;
135
+ } ) ;
136
+
137
+ host . append ( element ) ;
138
+
139
+ var li = element . find ( '.sortable-item:eq(1)' ) ;
140
+ var dy = ( 1 + EXTRA_DY_PERCENTAGE ) * li . outerHeight ( ) ;
141
+ li . simulate ( 'drag' , { dy : dy } ) ;
142
+ expect ( $rootScope . items ) . toEqual ( [ 'One' , 'Three' , 'Two' ] ) ;
143
+ expect ( $rootScope . items ) . toEqual ( listFindContent ( element ) ) ;
144
+
145
+ li = element . find ( '.sortable-item:eq(1)' ) ;
146
+ dy = - ( 1 + EXTRA_DY_PERCENTAGE ) * li . outerHeight ( ) ;
147
+ li . simulate ( 'drag' , { dy : dy } ) ;
148
+ expect ( $rootScope . items ) . toEqual ( [ 'Three' , 'One' , 'Two' ] ) ;
149
+ expect ( $rootScope . items ) . toEqual ( listFindContent ( element ) ) ;
150
+
151
+ $ ( element ) . remove ( ) ;
152
+ } ) ;
153
+ } ) ;
154
+
155
+ it ( 'should properly cancel() when the items are inside a transcluded directive' , function ( ) {
156
+ inject ( function ( $compile , $rootScope ) {
157
+ var element ;
158
+ element = $compile ( '' . concat (
159
+ '<div ui-sortable="opts" ng-model="items">' ,
160
+ '<ui-sortable-transclusion-test-directive>' ,
161
+ beforeLiElement ,
162
+ '<div ng-repeat="item in items" id="s-{{$index}}" class="sortable-item">' ,
163
+ '{{ item }}' ,
164
+ '</div>' ,
165
+ afterLiElement ,
166
+ '</ui-sortable-simple-test-directive>' ,
167
+ '</div>' ) ) ( $rootScope ) ;
168
+
169
+ $rootScope . $apply ( function ( ) {
170
+ $rootScope . opts = {
171
+ items : '> * .sortable-item' ,
172
+ update : function ( e , ui ) {
173
+ if ( ui . item . sortable . model === 'Two' ) {
174
+ ui . item . sortable . cancel ( ) ;
175
+ }
176
+ }
177
+ } ;
178
+ $rootScope . items = [ 'One' , 'Two' , 'Three' ] ;
179
+ } ) ;
180
+
181
+ host . append ( element ) ;
182
+
183
+ var li = element . find ( '.sortable-item:eq(1)' ) ;
184
+ var dy = ( 1 + EXTRA_DY_PERCENTAGE ) * li . outerHeight ( ) ;
185
+ li . simulate ( 'drag' , { dy : dy } ) ;
186
+ expect ( $rootScope . items ) . toEqual ( [ 'One' , 'Two' , 'Three' ] ) ;
187
+ expect ( $rootScope . items ) . toEqual ( listFindContent ( element ) ) ;
188
+ // try again
189
+ li = element . find ( '.sortable-item:eq(1)' ) ;
190
+ dy = ( 1 + EXTRA_DY_PERCENTAGE ) * li . outerHeight ( ) ;
191
+ li . simulate ( 'drag' , { dy : dy } ) ;
192
+ expect ( $rootScope . items ) . toEqual ( [ 'One' , 'Two' , 'Three' ] ) ;
193
+ expect ( $rootScope . items ) . toEqual ( listFindContent ( element ) ) ;
194
+ // try again
195
+ li = element . find ( '.sortable-item:eq(1)' ) ;
196
+ dy = ( 1 + EXTRA_DY_PERCENTAGE ) * li . outerHeight ( ) ;
197
+ li . simulate ( 'drag' , { dy : dy } ) ;
198
+ expect ( $rootScope . items ) . toEqual ( [ 'One' , 'Two' , 'Three' ] ) ;
199
+ expect ( $rootScope . items ) . toEqual ( listFindContent ( element ) ) ;
200
+
201
+ li = element . find ( '.sortable-item:eq(0)' ) ;
202
+ dy = ( 1 + EXTRA_DY_PERCENTAGE ) * li . outerHeight ( ) ;
203
+ li . simulate ( 'drag' , { dy : dy } ) ;
204
+ expect ( $rootScope . items ) . toEqual ( [ 'Two' , 'One' , 'Three' ] ) ;
205
+ expect ( $rootScope . items ) . toEqual ( listFindContent ( element ) ) ;
206
+
207
+ li = element . find ( '.sortable-item:eq(2)' ) ;
208
+ dy = - ( 1 + EXTRA_DY_PERCENTAGE ) * li . outerHeight ( ) ;
209
+ li . simulate ( 'drag' , { dy : dy } ) ;
210
+ expect ( $rootScope . items ) . toEqual ( [ 'Two' , 'Three' , 'One' ] ) ;
211
+ expect ( $rootScope . items ) . toEqual ( listFindContent ( element ) ) ;
212
+
213
+
214
+ $ ( element ) . remove ( ) ;
215
+ } ) ;
216
+ } ) ;
217
+
115
218
}
116
219
117
220
[ 0 , 1 ] . forEach ( function ( useExtraElements ) {
0 commit comments