@@ -15,8 +15,9 @@ describe('collectionRepeat', function() {
15
15
16
16
var scrollView ;
17
17
var repeaterScope ;
18
+ var scrollCtrl ;
18
19
function setup ( listData , attrs , scrollViewData ) {
19
- var content = angular . element ( '<content>' )
20
+ var content = angular . element ( '<content>' ) ;
20
21
scrollView = angular . extend ( {
21
22
__content : content [ 0 ] ,
22
23
__clientHeight : 100 ,
@@ -34,7 +35,7 @@ describe('collectionRepeat', function() {
34
35
resize : angular . noop ,
35
36
setDimensions : angular . noop
36
37
} , scrollViewData || { } ) ;
37
- var scrollCtrl = {
38
+ scrollCtrl = {
38
39
scrollView : scrollView ,
39
40
$element : content
40
41
} ;
@@ -83,7 +84,7 @@ describe('collectionRepeat', function() {
83
84
function getItems ( ) {
84
85
return [ ] . slice . call ( scrollView . __content . querySelectorAll ( '[collection-repeat]' ) )
85
86
. map ( function ( node ) {
86
- return angular . element ( node ) . data ( '$$collectionRepeatItem' )
87
+ return angular . element ( node ) . data ( '$$collectionRepeatItem' ) ;
87
88
} )
88
89
// make sure we didn't get anything that doesn't actually have the data
89
90
. filter ( function ( item ) {
@@ -97,18 +98,18 @@ describe('collectionRepeat', function() {
97
98
//1. Group items by their primary position (row),
98
99
//2. Sort those groups by secondary position (column),
99
100
//3. Concat them all together.
100
- var activeItems = { } ;
101
+ var itemsByPos = { } ;
101
102
items . forEach ( function ( item ) {
102
- ( activeItems [ item . primaryPos ] || ( activeItems [ item . primaryPos ] = [ ] ) ) . push ( item ) ;
103
+ ( itemsByPos [ item . primaryPos ] || ( itemsByPos [ item . primaryPos ] = [ ] ) ) . push ( item ) ;
103
104
} ) ;
104
105
105
106
var result = [ ] ;
106
- Object . keys ( activeItems )
107
+ Object . keys ( itemsByPos )
107
108
. sort ( function ( pos1 , pos2 ) {
108
109
return ( + pos1 ) > ( + pos2 ) ? 1 : - 1 ;
109
110
} )
110
111
. forEach ( function ( primaryPos ) {
111
- var sortedRow = activeItems [ primaryPos ] . sort ( function ( a , b ) {
112
+ var sortedRow = itemsByPos [ primaryPos ] . sort ( function ( a , b ) {
112
113
return a . secondaryPos > b . secondaryPos ? 1 : - 1 ;
113
114
} ) ;
114
115
result = result . concat ( sortedRow ) ;
@@ -219,6 +220,19 @@ describe('collectionRepeat', function() {
219
220
setup ( 5 , 'item-height="" item-width=""' ) ;
220
221
} ) . toThrow ( ) ;
221
222
} ) ) ;
223
+
224
+ it ( 'should refresh layout on scrollCtrl.resize' , inject ( function ( $timeout , $window ) {
225
+ var el = setup ( 10 , 'item-height="20px"' , {
226
+ __clientHeight : 50 ,
227
+ __clientWidth : 1
228
+ } ) ;
229
+
230
+ expect ( activeItems ( ) . length ) . toEqual ( 3 ) ;
231
+
232
+ scrollView . __clientHeight = 30 ;
233
+ scrollCtrl . $element . triggerHandler ( 'scroll.resize' ) ;
234
+ expect ( activeItems ( ) . length ) . toEqual ( 2 ) ;
235
+ } ) ) ;
222
236
} ) ;
223
237
224
238
describe ( 'horizontal static list' , function ( ) {
@@ -235,24 +249,24 @@ describe('collectionRepeat', function() {
235
249
it ( 'should show initial screen of items' , function ( ) {
236
250
setupHorizontal ( ) ;
237
251
expect ( activeItems ( ) . length ) . toBe ( 3 ) ;
238
- expect ( activeItemContents ( ) ) . toEqual ( [ '0' , '1' , '2' ] )
252
+ expect ( activeItemContents ( ) ) . toEqual ( [ '0' , '1' , '2' ] ) ;
239
253
} ) ;
240
254
it ( 'should switch out as you scroll' , function ( ) {
241
255
setupHorizontal ( ) ;
242
256
expect ( activeItems ( ) . length ) . toBe ( 3 ) ;
243
- expect ( activeItemContents ( ) ) . toEqual ( [ '0' , '1' , '2' ] )
257
+ expect ( activeItemContents ( ) ) . toEqual ( [ '0' , '1' , '2' ] ) ;
244
258
expect ( activeItemIds ( ) ) . toEqual ( [ 'item0' , 'item1' , 'item2' ] ) ;
245
259
246
260
// Item 0 gets sent down to the bottom after scrolling past it
247
261
scrollTo ( 31 ) ;
248
262
expect ( activeItems ( ) . length ) . toBe ( 3 ) ;
249
- expect ( activeItemContents ( ) ) . toEqual ( [ '1' , '2' , '3' ] )
263
+ expect ( activeItemContents ( ) ) . toEqual ( [ '1' , '2' , '3' ] ) ;
250
264
expect ( activeItemIds ( ) ) . toEqual ( [ 'item1' , 'item2' , 'item0' ] ) ;
251
265
252
266
// Item 1 gets sent down
253
267
scrollTo ( 61 ) ;
254
268
expect ( activeItems ( ) . length ) . toBe ( 3 ) ;
255
- expect ( activeItemContents ( ) ) . toEqual ( [ '2' , '3' , '4' ] )
269
+ expect ( activeItemContents ( ) ) . toEqual ( [ '2' , '3' , '4' ] ) ;
256
270
expect ( activeItemIds ( ) ) . toEqual ( [ 'item2' , 'item0' , 'item1' ] ) ;
257
271
} ) ;
258
272
it ( 'should start with the same items when resizing' , inject ( function ( $window ) {
@@ -261,15 +275,15 @@ describe('collectionRepeat', function() {
261
275
scrollTo ( 61 ) ;
262
276
263
277
expect ( activeItems ( ) . length ) . toBe ( 3 ) ;
264
- expect ( activeItemContents ( ) ) . toEqual ( [ '2' , '3' , '4' ] )
278
+ expect ( activeItemContents ( ) ) . toEqual ( [ '2' , '3' , '4' ] ) ;
265
279
expect ( activeItemIds ( ) ) . toEqual ( [ 'item2' , 'item0' , 'item1' ] ) ;
266
280
267
281
scrollView . __clientWidth = 50 ;
268
282
scrollView . __clientHeight = 40 ;
269
283
angular . element ( $window ) . triggerHandler ( 'resize' ) ;
270
284
271
285
expect ( activeItems ( ) . length ) . toBe ( 2 ) ;
272
- expect ( activeItemContents ( ) ) . toEqual ( [ '2' , '3' ] )
286
+ expect ( activeItemContents ( ) ) . toEqual ( [ '2' , '3' ] ) ;
273
287
expect ( activeItemIds ( ) ) . toEqual ( [ 'item2' , 'item0' ] ) ;
274
288
} ) ) ;
275
289
} ) ;
@@ -281,24 +295,24 @@ describe('collectionRepeat', function() {
281
295
282
296
it ( 'should show initial screen of items' , function ( ) {
283
297
expect ( activeItems ( ) . length ) . toBe ( 5 ) ;
284
- expect ( activeItemContents ( ) ) . toEqual ( [ '0' , '1' , '2' , '3' , '4' ] )
298
+ expect ( activeItemContents ( ) ) . toEqual ( [ '0' , '1' , '2' , '3' , '4' ] ) ;
285
299
} ) ;
286
300
287
301
it ( 'should switch out as you scroll' , function ( ) {
288
302
expect ( activeItems ( ) . length ) . toBe ( 5 ) ;
289
- expect ( activeItemContents ( ) ) . toEqual ( [ '0' , '1' , '2' , '3' , '4' ] )
303
+ expect ( activeItemContents ( ) ) . toEqual ( [ '0' , '1' , '2' , '3' , '4' ] ) ;
290
304
expect ( activeItemIds ( ) ) . toEqual ( [ 'item0' , 'item1' , 'item2' , 'item3' , 'item4' ] ) ;
291
305
292
306
// Item 0 gets sent down to the bottom after scrolling past it
293
307
scrollTo ( 26 ) ;
294
308
expect ( activeItems ( ) . length ) . toBe ( 5 ) ;
295
- expect ( activeItemContents ( ) ) . toEqual ( [ '1' , '2' , '3' , '4' , '5' ] )
309
+ expect ( activeItemContents ( ) ) . toEqual ( [ '1' , '2' , '3' , '4' , '5' ] ) ;
296
310
expect ( activeItemIds ( ) ) . toEqual ( [ 'item1' , 'item2' , 'item3' , 'item4' , 'item0' ] ) ;
297
311
298
312
// Item 1 gets sent down
299
313
scrollTo ( 51 ) ;
300
314
expect ( activeItems ( ) . length ) . toBe ( 5 ) ;
301
- expect ( activeItemContents ( ) ) . toEqual ( [ '2' , '3' , '4' , '5' , '6' ] )
315
+ expect ( activeItemContents ( ) ) . toEqual ( [ '2' , '3' , '4' , '5' , '6' ] ) ;
302
316
expect ( activeItemIds ( ) ) . toEqual ( [ 'item2' , 'item3' , 'item4' , 'item0' , 'item1' ] ) ;
303
317
304
318
// scroll to bottom incrementally
@@ -307,7 +321,7 @@ describe('collectionRepeat', function() {
307
321
scrollTo ( 101 ) ;
308
322
scrollTo ( 126 ) ;
309
323
expect ( activeItems ( ) . length ) . toBe ( 5 ) ;
310
- expect ( activeItemContents ( ) ) . toEqual ( [ '5' , '6' , '7' , '8' , '9' ] )
324
+ expect ( activeItemContents ( ) ) . toEqual ( [ '5' , '6' , '7' , '8' , '9' ] ) ;
311
325
expect ( activeItemIds ( ) ) . toEqual ( [ 'item0' , 'item1' , 'item2' , 'item3' , 'item4' ] ) ;
312
326
} ) ;
313
327
@@ -316,15 +330,15 @@ describe('collectionRepeat', function() {
316
330
scrollTo ( 51 ) ;
317
331
318
332
expect ( activeItems ( ) . length ) . toBe ( 5 ) ;
319
- expect ( activeItemContents ( ) ) . toEqual ( [ '2' , '3' , '4' , '5' , '6' ] )
333
+ expect ( activeItemContents ( ) ) . toEqual ( [ '2' , '3' , '4' , '5' , '6' ] ) ;
320
334
expect ( activeItemIds ( ) ) . toEqual ( [ 'item2' , 'item3' , 'item4' , 'item0' , 'item1' ] ) ;
321
335
322
336
scrollView . __clientWidth = 200 ;
323
337
scrollView . __clientHeight = 40 ;
324
338
angular . element ( $window ) . triggerHandler ( 'resize' ) ;
325
339
326
340
expect ( activeItems ( ) . length ) . toBe ( 2 ) ;
327
- expect ( activeItemContents ( ) ) . toEqual ( [ '2' , '3' ] )
341
+ expect ( activeItemContents ( ) ) . toEqual ( [ '2' , '3' ] ) ;
328
342
expect ( activeItemIds ( ) ) . toEqual ( [ 'item2' , 'item3' ] ) ;
329
343
} ) ) ;
330
344
@@ -340,38 +354,38 @@ describe('collectionRepeat', function() {
340
354
341
355
it ( 'should show initial screen of items' , function ( ) {
342
356
expect ( activeItems ( ) . length ) . toBe ( 3 * 2 ) ;
343
- expect ( activeItemContents ( ) ) . toEqual ( [ '0' , '1' , '2' , '3' , '4' , '5' ] )
357
+ expect ( activeItemContents ( ) ) . toEqual ( [ '0' , '1' , '2' , '3' , '4' , '5' ] ) ;
344
358
} ) ;
345
359
346
360
it ( 'should switch out as you scroll' , function ( ) {
347
361
expect ( activeItems ( ) . length ) . toBe ( 6 ) ;
348
- expect ( activeItemContents ( ) ) . toEqual ( [ '0' , '1' , '2' , '3' , '4' , '5' ] )
362
+ expect ( activeItemContents ( ) ) . toEqual ( [ '0' , '1' , '2' , '3' , '4' , '5' ] ) ;
349
363
expect ( activeItemIds ( ) . sort ( ) ) . toEqual ( [ 'item0' , 'item1' , 'item2' , 'item3' , 'item4' , 'item5' ] ) ;
350
364
351
365
scrollTo ( 26 ) ;
352
366
expect ( activeItems ( ) . length ) . toBe ( 6 ) ;
353
- expect ( activeItemContents ( ) ) . toEqual ( [ '3' , '4' , '5' , '6' , '7' , '8' ] )
367
+ expect ( activeItemContents ( ) ) . toEqual ( [ '3' , '4' , '5' , '6' , '7' , '8' ] ) ;
354
368
expect ( activeItemIds ( ) . sort ( ) ) . toEqual ( [ 'item0' , 'item1' , 'item2' , 'item3' , 'item4' , 'item5' ] ) ;
355
369
356
370
scrollTo ( 51 ) ;
357
371
expect ( activeItems ( ) . length ) . toBe ( 4 ) ;
358
- expect ( activeItemContents ( ) ) . toEqual ( [ '6' , '7' , '8' , '9' ] )
372
+ expect ( activeItemContents ( ) ) . toEqual ( [ '6' , '7' , '8' , '9' ] ) ;
359
373
expect ( activeItemIds ( ) . sort ( ) ) . toEqual ( [ 'item0' , 'item1' , 'item2' , 'item5' ] ) ;
360
374
} ) ;
361
375
362
376
it ( 'should start with the same items when resizing' , inject ( function ( $window ) {
363
377
scrollTo ( 26 ) ;
364
378
365
379
expect ( activeItems ( ) . length ) . toBe ( 6 ) ;
366
- expect ( activeItemContents ( ) ) . toEqual ( [ '3' , '4' , '5' , '6' , '7' , '8' ] )
380
+ expect ( activeItemContents ( ) ) . toEqual ( [ '3' , '4' , '5' , '6' , '7' , '8' ] ) ;
367
381
expect ( activeItemIds ( ) . sort ( ) ) . toEqual ( [ 'item0' , 'item1' , 'item2' , 'item3' , 'item4' , 'item5' ] ) ;
368
382
369
383
scrollView . __clientWidth = 200 ;
370
384
scrollView . __clientHeight = 20 ;
371
385
angular . element ( $window ) . triggerHandler ( 'resize' ) ;
372
386
373
387
expect ( activeItems ( ) . length ) . toBe ( 3 ) ;
374
- expect ( activeItemContents ( ) ) . toEqual ( [ '3' , '4' , '5' ] )
388
+ expect ( activeItemContents ( ) ) . toEqual ( [ '3' , '4' , '5' ] ) ;
375
389
expect ( activeItemIds ( ) . sort ( ) ) . toEqual ( [ 'item3' , 'item4' , 'item5' ] ) ;
376
390
} ) ) ;
377
391
} ) ;
@@ -390,7 +404,7 @@ describe('collectionRepeat', function() {
390
404
// row 0, index 0: 50 height, 3 items (widths 16%, 32%, 48%)
391
405
// row 1, index 3: 25 height, 2 items (widths 64%)
392
406
expect ( activeItems ( ) . length ) . toBe ( 4 ) ;
393
- expect ( activeItemContents ( ) ) . toEqual ( [ '0' , '1' , '2' , '3' ] )
407
+ expect ( activeItemContents ( ) ) . toEqual ( [ '0' , '1' , '2' , '3' ] ) ;
394
408
395
409
var dim = activeItemDimensions ( ) ;
396
410
//Row 0
@@ -407,7 +421,7 @@ describe('collectionRepeat', function() {
407
421
// row 1, index 3: 25 height, 1 item (width 64%)
408
422
// row 2, index 4: 50 height, 2 items (width 80%, 16%)
409
423
expect ( activeItems ( ) . length ) . toBe ( 3 ) ;
410
- expect ( activeItemContents ( ) ) . toEqual ( [ '3' , '4' , '5' ] )
424
+ expect ( activeItemContents ( ) ) . toEqual ( [ '3' , '4' , '5' ] ) ;
411
425
expect ( activeItemIds ( ) . sort ( ) ) . toEqual ( [ 'item1' , 'item2' , 'item3' ] ) ;
412
426
413
427
var dim = activeItemDimensions ( ) ;
@@ -424,9 +438,9 @@ describe('collectionRepeat', function() {
424
438
// row 4, index 8: 50 height, 1 item (width 64%)
425
439
// row 5, index 9: 25 height, 2 items (width 80%, 16%)
426
440
expect ( activeItems ( ) . length ) . toBe ( 2 ) ;
427
- expect ( activeItemContents ( ) ) . toEqual ( [ '8' , '9' ] )
441
+ expect ( activeItemContents ( ) ) . toEqual ( [ '8' , '9' ] ) ;
428
442
429
- var dim = activeItemDimensions ( ) ;
443
+ dim = activeItemDimensions ( ) ;
430
444
//Row 3
431
445
expect ( dim [ 0 ] ) . toBe ( 'x:0,y:175,w:64,h:50' ) ;
432
446
//Row 4
@@ -439,15 +453,15 @@ describe('collectionRepeat', function() {
439
453
// row 1, index 3: 25 height, 1 item (width 64%)
440
454
// row 2, index 4: 50 height, 2 items (width 80%, 16%)
441
455
expect ( activeItems ( ) . length ) . toBe ( 3 ) ;
442
- expect ( activeItemContents ( ) ) . toEqual ( [ '3' , '4' , '5' ] )
456
+ expect ( activeItemContents ( ) ) . toEqual ( [ '3' , '4' , '5' ] ) ;
443
457
expect ( activeItemIds ( ) . sort ( ) ) . toEqual ( [ 'item1' , 'item2' , 'item3' ] ) ;
444
458
445
459
scrollView . __clientWidth = 50 ;
446
460
scrollView . __clientHeight = 50 ;
447
461
angular . element ( $window ) . triggerHandler ( 'resize' ) ;
448
462
449
463
expect ( activeItems ( ) . length ) . toBe ( 3 ) ;
450
- expect ( activeItemContents ( ) ) . toEqual ( [ '3' , '4' , '5' ] )
464
+ expect ( activeItemContents ( ) ) . toEqual ( [ '3' , '4' , '5' ] ) ;
451
465
expect ( activeItemIds ( ) . sort ( ) ) . toEqual ( [ 'item1' , 'item2' , 'item3' ] ) ;
452
466
} ) ) ;
453
467
} ) ;
0 commit comments