slick_rails 1.2.5.1 → 1.3.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,9 +1,22 @@
1
1
  /*
2
- slick.js
3
- Author: Ken Wheeler
4
- Date: 03/23/14
2
+ _ _ _ _
3
+ ___| (_) ___| | __ (_)___
4
+ / __| | |/ __| |/ / | / __|
5
+ \__ \ | | (__| < _ | \__ \
6
+ |___/_|_|\___|_|\_(_)/ |___/
7
+ |__/
8
+
9
+ Author: Ken Wheeler
10
+ Website: http://kenwheeler.github.io
11
+ Date: 03/23/14
12
+ Docs: http://kenwheeler.github.io/slick
13
+ Repo: http://github.com/kenwheeler/slick
14
+ Issues: http://github.com/kenwheeler/slick/issues
15
+
5
16
  */
6
- /*global window, document, define, jQuery, setInterval, clearInterval */
17
+
18
+ /* global window, document, define, jQuery, setInterval, clearInterval */
19
+
7
20
  (function (factory) {
8
21
  'use strict';
9
22
  if (typeof define === 'function' && define.amd) {
@@ -14,19 +27,7 @@
14
27
 
15
28
  }(function ($) {
16
29
  'use strict';
17
- var Slick = window.Slick || {}, functionBinder;
18
-
19
- /************ Helpers ***********/
20
-
21
- // Function Binder
22
-
23
- functionBinder = function (fn, me) {
24
- return function () {
25
- return fn.apply(me, arguments);
26
- };
27
- };
28
-
29
- /********** End Helpers *********/
30
+ var Slick = window.Slick || {};
30
31
 
31
32
  Slick = (function () {
32
33
 
@@ -35,10 +36,14 @@
35
36
  var _ = this, responsiveSettings, breakpoint;
36
37
 
37
38
  _.defaults = {
39
+ accessibility: true,
38
40
  autoplay: false,
39
41
  autoplaySpeed: 3000,
42
+ cssEase: 'ease',
40
43
  dots: false,
41
44
  draggable: true,
45
+ fade: false,
46
+ easing: 'linear',
42
47
  arrows: true,
43
48
  infinite: true,
44
49
  onBeforeChange: null,
@@ -51,7 +56,8 @@
51
56
  speed: 300,
52
57
  swipe: true,
53
58
  touchMove: true,
54
- touchThreshold: 5
59
+ touchThreshold: 5,
60
+ vertical: false
55
61
  };
56
62
 
57
63
  _.initials = {
@@ -62,6 +68,7 @@
62
68
  direction : 1,
63
69
  dots : null,
64
70
  listWidth : null,
71
+ listHeight : null,
65
72
  loadIndex : 0,
66
73
  nextArrow : null,
67
74
  prevArrow : null,
@@ -81,9 +88,16 @@
81
88
 
82
89
  _.activeBreakpoint = null;
83
90
  _.animType = null;
91
+ _.animProp = null;
84
92
  _.breakpoints = [];
85
93
  _.breakpointSettings = [];
94
+ _.paused = false;
95
+ _.positionProp = null;
86
96
  _.slider = $(element);
97
+ _.slidesCache = null;
98
+ _.cssTransitions = false;
99
+ _.windowWidth = 0;
100
+ _.windowTimer = null;
87
101
 
88
102
  _.options = $.extend({}, _.defaults, settings);
89
103
 
@@ -106,19 +120,21 @@
106
120
  });
107
121
  }
108
122
 
109
- _.autoPlay = functionBinder(_.autoPlay,
123
+ _.autoPlay = $.proxy(_.autoPlay,
124
+ _);
125
+ _.autoPlayClear = $.proxy(_.autoPlayClear,
110
126
  _);
111
- _.autoPlayClear = functionBinder(_.autoPlayClear,
127
+ _.changeSlide = $.proxy(_.changeSlide,
112
128
  _);
113
- _.changeSlide = functionBinder(_.changeSlide,
129
+ _.setPosition = $.proxy(_.setPosition,
114
130
  _);
115
- _.setPosition = functionBinder(_.setPosition,
131
+ _.swipeHandler = $.proxy(_.swipeHandler,
116
132
  _);
117
- _.swipeHandler = functionBinder(_.swipeHandler,
133
+ _.dragHandler = $.proxy(_.dragHandler,
118
134
  _);
119
- _.dragHandler = functionBinder(_.dragHandler,
135
+ _.keyHandler = $.proxy(_.keyHandler,
120
136
  _);
121
- _.autoPlayIterator = functionBinder(_.autoPlayIterator,
137
+ _.autoPlayIterator = $.proxy(_.autoPlayIterator,
122
138
  _);
123
139
 
124
140
  _.init();
@@ -137,7 +153,7 @@
137
153
 
138
154
  $(_.slider).addClass('slick-initialized');
139
155
  _.buildOut();
140
- _.getAnimType();
156
+ _.setProps();
141
157
  _.startLoad();
142
158
  _.loadSlider();
143
159
  _.initializeEvents();
@@ -146,30 +162,119 @@
146
162
 
147
163
  };
148
164
 
149
- Slick.prototype.getAnimType = function () {
165
+ Slick.prototype.addSlide = function (markup) {
166
+
167
+ var _ = this;
168
+
169
+ _.unload();
170
+
171
+ $(markup).appendTo(_.slideTrack);
172
+
173
+ _.slides = _.slideTrack.children(this.options.slide);
174
+
175
+ _.slideTrack.children(this.options.slide).remove();
176
+
177
+ _.slideTrack.append(_.slides);
178
+
179
+ _.reinit();
180
+
181
+ };
182
+
183
+ Slick.prototype.removeSlide = function (index) {
184
+
185
+ var _ = this;
186
+
187
+ _.unload();
188
+
189
+ if(_.slideCount < 1) {
190
+ return false;
191
+ }
192
+
193
+ $(_.slideTrack.children(this.options.slide).get(index)).remove();
194
+
195
+ _.slides = _.slideTrack.children(this.options.slide);
196
+
197
+ _.slideTrack.children(this.options.slide).remove();
198
+
199
+ _.slideTrack.append(_.slides);
200
+
201
+ _.reinit();
202
+
203
+ };
204
+
205
+ Slick.prototype.filterSlides = function (filter) {
150
206
 
151
207
  var _ = this;
152
208
 
153
- if (document.body.style.MozTransform !== undefined) {
209
+ if(filter !== null) {
210
+
211
+ _.unload();
212
+
213
+ _.slideTrack.children(this.options.slide).remove();
214
+
215
+ _.slidesCache.filter(filter).appendTo(_.slideTrack);
216
+
217
+ _.reinit();
218
+
219
+ }
220
+
221
+ };
222
+
223
+ Slick.prototype.unfilterSlides = function () {
224
+
225
+ var _ = this;
154
226
 
155
- _.animType = 'MozTransform';
227
+ if(_.slidesCache !== null) {
156
228
 
157
- } else if (document.body.style.webkitTransform !==
158
- undefined) {
229
+ _.unload();
159
230
 
160
- _.animType = "webkitTransform";
231
+ _.slideTrack.children(this.options.slide).remove();
161
232
 
162
- } else if (document.body.style.msTransform !==
163
- undefined) {
233
+ _.slidesCache.appendTo(_.slideTrack);
164
234
 
165
- _.animType = "msTransform";
235
+ _.reinit();
166
236
 
167
237
  }
168
238
 
169
- if (_.animType !== null) {
239
+ };
170
240
 
171
- _.transformsEnabled = true;
241
+ Slick.prototype.applyTransition = function (slide) {
242
+
243
+ var _ = this, transition,origin;
244
+
245
+ transition = 'all ' + _.options.speed + 'ms ' + _.options.cssEase;
246
+ if (_.options.vertical === false) {
247
+ origin = (_.listWidth / 2) + ' 50%';
248
+ } else {
249
+ origin = '';
250
+ }
172
251
 
252
+ if (_.options.fade === false) {
253
+ _.slideTrack.css({
254
+ transition: transition,
255
+ transformOrigin: origin
256
+ });
257
+ } else {
258
+ $(_.slides.get(slide)).css({
259
+ transition: transition
260
+ });
261
+ }
262
+
263
+ };
264
+
265
+ Slick.prototype.disableTransition = function (slide) {
266
+
267
+ var _ = this;
268
+
269
+ if (_.options.fade === false) {
270
+ _.slideTrack.css({
271
+ transition: '',
272
+ transformOrigin: ''
273
+ });
274
+ } else {
275
+ $(_.slides.get(slide)).css({
276
+ transition: ''
277
+ });
173
278
  }
174
279
 
175
280
  };
@@ -179,13 +284,13 @@
179
284
  var _ = this;
180
285
 
181
286
  if (_.autoPlayTimer) {
182
-
183
287
  clearInterval(_.autoPlayTimer);
184
-
185
288
  }
186
289
 
187
- _.autoPlayTimer = setInterval(_.autoPlayIterator,
188
- _.options.autoplaySpeed);
290
+ if(_.slideCount > _.options.slidesToShow && _.paused !== true) {
291
+ _.autoPlayTimer = setInterval(_.autoPlayIterator,
292
+ _.options.autoplaySpeed);
293
+ }
189
294
 
190
295
  };
191
296
 
@@ -240,7 +345,7 @@
240
345
  var _ = this, breakpoint, targetBreakpoint;
241
346
 
242
347
  if (_.originalSettings.responsive && _.originalSettings
243
- .responsive.length > -1) {
348
+ .responsive.length > -1 && _.originalSettings.responsive !== null) {
244
349
 
245
350
  targetBreakpoint = null;
246
351
 
@@ -287,14 +392,14 @@
287
392
 
288
393
  var _ = this;
289
394
 
290
- if (_.options.arrows === true) {
395
+ if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
291
396
 
292
397
  _.prevArrow.hide();
293
398
  _.nextArrow.hide();
294
399
 
295
400
  }
296
401
 
297
- if (_.options.dots === true) {
402
+ if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
298
403
 
299
404
  _.dots.hide();
300
405
 
@@ -308,14 +413,14 @@
308
413
 
309
414
  var _ = this;
310
415
 
311
- if (_.options.arrows === true) {
416
+ if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
312
417
 
313
418
  _.prevArrow.show();
314
419
  _.nextArrow.show();
315
420
 
316
421
  }
317
422
 
318
- if (_.options.dots === true) {
423
+ if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
319
424
 
320
425
  _.dots.show();
321
426
 
@@ -335,10 +440,8 @@
335
440
 
336
441
  _.setPosition();
337
442
 
338
- _.slideTrack.animate({
443
+ _.slideTrack.css({
339
444
  opacity: 1
340
- }, _.options.speed, function () {
341
- _.setPosition();
342
445
  });
343
446
 
344
447
  if (document.readyState !== "complete") {
@@ -366,6 +469,7 @@
366
469
  var _ = this;
367
470
 
368
471
  _.listWidth = _.list.width();
472
+ _.listHeight = _.list.height();
369
473
  _.slideWidth = Math.ceil(_.listWidth / _.options
370
474
  .slidesToShow);
371
475
 
@@ -375,13 +479,13 @@
375
479
 
376
480
  var _ = this;
377
481
 
378
- if (_.options.arrows === true) {
482
+ if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
379
483
 
380
484
  _.prevArrow = $(
381
- '<a href="javascript:void(0)">Previous</a>').appendTo(
485
+ '<a href="javascript:void(0)" tabIndex="-1">Previous</a>').appendTo(
382
486
  _.slider).addClass('slick-prev');
383
487
  _.nextArrow = $(
384
- '<a href="javascript:void(0)">Next</a>').appendTo(
488
+ '<a href="javascript:void(0)" tabIndex="-1">Next</a>').appendTo(
385
489
  _.slider).addClass('slick-next');
386
490
 
387
491
  if (_.options.infinite !== true) {
@@ -396,13 +500,13 @@
396
500
 
397
501
  var _ = this, i, dotString;
398
502
 
399
- if (_.options.dots === true) {
503
+ if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
400
504
 
401
505
  dotString = '<ul class="slick-dots">';
402
506
 
403
507
  for (i = 1; i <= _.slideCount; i += 1) {
404
508
 
405
- dotString += '<li><a href="javascript:void(0)">' + i +
509
+ dotString += '<li><a href="javascript:void(0)" tabIndex="-1">' + i +
406
510
  '</a></li>';
407
511
 
408
512
  }
@@ -432,50 +536,66 @@
432
536
 
433
537
  var _ = this, i, slideIndex;
434
538
 
435
- if (_.options.infinite === true) {
539
+ if (_.options.infinite === true && _.options.fade === false) {
436
540
 
437
541
  slideIndex = null;
438
542
 
439
- for (i = _.slideCount; i > (_.slideCount -
440
- _.options.slidesToShow); i -= 1) {
441
- slideIndex = i - 1;
442
- $(_.slides[slideIndex]).clone().prependTo(
443
- _.slideTrack).addClass('slick-cloned');
444
- }
445
- for (i = 0; i < _.options.slidesToShow; i += 1) {
446
- slideIndex = i;
447
- $(_.slides[slideIndex]).clone().appendTo(
448
- _.slideTrack).addClass('slick-cloned');
543
+ if (_.slideCount > _.options.slidesToShow) {
544
+
545
+ for (i = _.slideCount; i > (_.slideCount -
546
+ _.options.slidesToShow); i -= 1) {
547
+ slideIndex = i - 1;
548
+ $(_.slides[slideIndex]).clone().prependTo(
549
+ _.slideTrack).addClass('slick-cloned');
550
+ }
551
+ for (i = 0; i < _.options.slidesToShow; i += 1) {
552
+ slideIndex = i;
553
+ $(_.slides[slideIndex]).clone().appendTo(
554
+ _.slideTrack).addClass('slick-cloned');
555
+ }
556
+
449
557
  }
450
558
 
451
559
  }
452
560
 
453
561
  };
454
562
 
455
- Slick.prototype.buildOut = function () {
563
+ Slick.prototype.setupPlaceholders = function () {
456
564
 
457
- var i, _ = this, placeholders;
565
+ var _ = this, i, placeholders;
566
+
567
+ if(_.options.fade === true || _.options.vertical === true) {
568
+ _.options.slidesToShow = 1;
569
+ _.options.slidesToScroll = 1;
570
+ }
458
571
 
459
- _.slides = $(_.options.slide +
460
- ':not(.slick-cloned)', _.slider).addClass(
461
- 'slick-slide');
462
- _.slideCount = _.slides.length;
463
572
  if ((_.slideCount % _.options.slidesToScroll) !==
464
- 0 && _.options.slidesToShow !== 1) {
573
+ 0 && _.slideCount > _.options.slidesToShow) {
465
574
 
466
575
  placeholders = Math.abs(_.options.slidesToScroll -
467
576
  (_.slideCount % _.options.slidesToScroll)
468
577
  );
469
578
  for (i = 0; i < placeholders; i += 1) {
470
- $('<div/>').appendTo(_.slider).addClass(
579
+ $('<div/>').appendTo(_.slideTrack).addClass(
471
580
  'slick-slide slick-placeholder');
472
581
  }
473
582
  _.slides = $('.slick-slide:not(.slick-cloned)',
474
583
  _.slider);
475
584
  _.slideCount = _.slides.length;
476
-
477
585
  }
478
586
 
587
+ };
588
+
589
+ Slick.prototype.buildOut = function () {
590
+
591
+ var _ = this;
592
+
593
+ _.slides = $(_.options.slide +
594
+ ':not(.slick-cloned)', _.slider).addClass(
595
+ 'slick-slide');
596
+ _.slideCount = _.slides.length;
597
+ _.slidesCache = _.slides;
598
+
479
599
  _.slider.addClass("slick-slider");
480
600
  _.slideTrack = _.slides.wrapAll(
481
601
  '<div class="slick-track"/>').parent();
@@ -483,12 +603,18 @@
483
603
  '<div class="slick-list"/>').parent();
484
604
  _.slideTrack.css('opacity', 0);
485
605
 
486
- _.buildArrows();
606
+ if(_.options.accessibility === true) {
607
+ _.list.prop('tabIndex',0);
608
+ }
487
609
 
488
- _.buildDots();
610
+ _.setupPlaceholders();
489
611
 
490
612
  _.setupInfinite();
491
613
 
614
+ _.buildArrows();
615
+
616
+ _.buildDots();
617
+
492
618
  _.setSlideClasses(0);
493
619
 
494
620
  if (_.options.draggable === true) {
@@ -498,41 +624,103 @@
498
624
  };
499
625
 
500
626
  Slick.prototype.setDimensions = function () {
627
+
501
628
  var _ = this;
502
- _.slideWidth = Math.ceil(_.listWidth / _.options
503
- .slidesToShow);
629
+
504
630
  _.list.find('.slick-slide').width(_.slideWidth);
505
- _.slideTrack.width(Math.ceil((_.slideWidth * _
506
- .slider.find('.slick-slide').length)));
631
+ if (_.options.vertical === false) {
632
+ _.slideTrack.width(Math.ceil((_.slideWidth * _
633
+ .slider.find('.slick-slide').length)));
634
+ } else {
635
+ _.list.height(_.slides.first().outerHeight());
636
+ _.slideTrack.height(Math.ceil((_.listHeight * _
637
+ .slider.find('.slick-slide').length)));
638
+ }
639
+
507
640
  };
508
641
 
509
642
  Slick.prototype.setPosition = function () {
510
- var _ = this, animProps = {}, targetLeft;
643
+
644
+ var _ = this, targetPosition;
645
+
511
646
  _.setValues();
512
647
  _.setDimensions();
513
648
 
649
+ _.slideOffset = 0;
650
+
514
651
  if (_.options.infinite === true) {
515
- _.slideOffset = (_.slideWidth * _.options.slidesToShow) * -1;
652
+ if(_.slideCount > _.options.slidesToShow) {
653
+ _.slideOffset = (_.slideWidth * _.options.slidesToShow) * -1;
654
+ }
516
655
  }
517
656
 
518
- targetLeft = ((_.currentSlide *
519
- _.slideWidth) * -1) + _.slideOffset;
657
+ if (_.options.fade === false) {
658
+ if (_.options.vertical === false) {
659
+ targetPosition = ((_.currentSlide *
660
+ _.slideWidth) * -1) + _.slideOffset;
661
+ } else {
662
+ targetPosition = ((_.currentSlide *
663
+ _.listHeight) * -1) - _.listHeight;
664
+ }
665
+ _.setCSS(targetPosition);
666
+ } else {
667
+ _.setFade();
668
+ }
669
+ };
520
670
 
521
- if (_.transformsEnabled === false) {
522
- _.slideTrack.css('left', targetLeft);
671
+ Slick.prototype.setProps = function () {
672
+
673
+ var _ = this;
674
+
675
+ _.positionProp = _.options.vertical === true ? 'top' : 'left';
676
+
677
+ if (_.positionProp === 'top') {
678
+ _.slider.addClass('slick-vertical');
523
679
  } else {
524
- animProps[_.animType] = "translate(" +
525
- targetLeft + "px, 0px)";
526
- _.slideTrack.css(animProps);
680
+ _.slider.removeClass('slick-vertical');
681
+ }
682
+
683
+ if ( document.body.style.WebkitTransition !== undefined ||
684
+ document.body.style.MozTransition !== undefined ||
685
+ document.body.style.msTransition !== undefined ) {
686
+ _.cssTransitions = true;
527
687
  }
528
688
 
689
+ if (document.body.style.MozTransform !== undefined) _.animType = 'MozTransform';
690
+ if (document.body.style.webkitTransform !== undefined) _.animType = 'webkitTransform';
691
+ if (document.body.style.msTransform !== undefined) _.animType = 'msTransform';
692
+
693
+ _.transformsEnabled = (_.animType !== null);
694
+
529
695
  };
530
696
 
531
- Slick.prototype.initializeEvents = function () {
697
+ Slick.prototype.setFade = function () {
698
+
699
+ var _ = this, targetLeft;
700
+
701
+ _.slides.each(function (index,element) {
702
+ targetLeft = (_.slideWidth * index) * -1;
703
+ $(element).css({
704
+ position: 'relative',
705
+ left: targetLeft,
706
+ top: 0,
707
+ zIndex: 800,
708
+ opacity: 0
709
+ });
710
+ });
711
+
712
+ $(_.slides.get(_.currentSlide)).css({
713
+ zIndex: 900,
714
+ opacity: 1
715
+ });
716
+
717
+ };
718
+
719
+ Slick.prototype.initArrowEvents = function () {
532
720
 
533
721
  var _ = this;
534
722
 
535
- if (_.options.arrows === true) {
723
+ if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
536
724
  _.prevArrow.on('click.slick', {
537
725
  message: 'previous'
538
726
  }, _.changeSlide);
@@ -541,12 +729,28 @@
541
729
  }, _.changeSlide);
542
730
  }
543
731
 
544
- if (_.options.dots === true) {
732
+ };
733
+
734
+ Slick.prototype.initDotEvents = function () {
735
+
736
+ var _ = this;
737
+
738
+ if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
545
739
  $('li a', _.dots).on('click.slick', {
546
740
  message: 'index'
547
741
  }, _.changeSlide);
548
742
  }
549
743
 
744
+ };
745
+
746
+ Slick.prototype.initializeEvents = function () {
747
+
748
+ var _ = this;
749
+
750
+ _.initArrowEvents();
751
+
752
+ _.initDotEvents();
753
+
550
754
  if (_.options.swipe === true) {
551
755
  _.list.on('touchstart.slick', {
552
756
  action: 'start',
@@ -560,6 +764,10 @@
560
764
  action: 'end',
561
765
  kind: 'touch'
562
766
  }, _.swipeHandler);
767
+ _.list.on('touchcancel.slick', {
768
+ action: 'end',
769
+ kind: 'touch'
770
+ }, _.swipeHandler);
563
771
  }
564
772
 
565
773
  if (_.options.draggable === true) {
@@ -576,7 +784,7 @@
576
784
  kind: 'drag'
577
785
  }, _.swipeHandler);
578
786
  _.list.on('mouseleave.slick', {
579
- action: 'cancel',
787
+ action: 'end',
580
788
  kind: 'drag'
581
789
  }, _.swipeHandler);
582
790
  }
@@ -586,13 +794,24 @@
586
794
  _.list.on('mouseleave.slick', _.autoPlay);
587
795
  }
588
796
 
589
- $(window).on('orientationchange.slick', _.setPosition);
797
+ _.list.on('keydown.slick', _.keyHandler);
590
798
 
591
- $(window).on('resize.slick', function () {
799
+ $(window).on('orientationchange.slick', function(){
592
800
  _.checkResponsive();
593
801
  _.setPosition();
594
802
  });
595
803
 
804
+ $(window).resize(function () {
805
+ if ($(window).width !== _.windowWidth) {
806
+ clearTimeout(_.windowDelay);
807
+ _.windowDelay = window.setTimeout(function () {
808
+ _.windowWidth = $(window).width();
809
+ _.checkResponsive();
810
+ _.setPosition();
811
+ }, 50);
812
+ }
813
+ });
814
+
596
815
  $(window).on('load.slick', _.setPosition);
597
816
 
598
817
  };
@@ -637,40 +856,128 @@
637
856
 
638
857
  };
639
858
 
859
+ Slick.prototype.updateArrows = function () {
860
+
861
+ var _ = this;
862
+
863
+ if (_.options.arrows === true && _.options.infinite !==
864
+ true && _.slideCount > _.options.slidesToShow) {
865
+ if (_.currentSlide === 0) {
866
+ _.prevArrow.addClass('slick-disabled');
867
+ _.nextArrow.removeClass('slick-disabled');
868
+ } else if (_.currentSlide >= (_.slideCount /
869
+ _.options.slidesToScroll * _.options.slidesToShow
870
+ ) - _.options.slidesToScroll) {
871
+ _.nextArrow.addClass('slick-disabled');
872
+ _.prevArrow.removeClass('slick-disabled');
873
+ } else {
874
+ _.prevArrow.removeClass('slick-disabled');
875
+ _.nextArrow.removeClass('slick-disabled');
876
+ }
877
+ }
878
+
879
+ };
880
+
881
+ Slick.prototype.fadeSlide = function (slideIndex, callback) {
882
+
883
+ var _ = this;
884
+
885
+ if(_.cssTransitions === false) {
886
+
887
+ $(_.slides.get(slideIndex)).css({zIndex: 1000});
888
+
889
+ $(_.slides.get(slideIndex)).animate({
890
+ opacity: 1
891
+ }, _.options.speed,_.options.easing, callback);
892
+
893
+ } else {
894
+
895
+ _.applyTransition(slideIndex);
896
+
897
+ $(_.slides.get(slideIndex)).css({
898
+ opacity: 1,
899
+ zIndex: 1000
900
+ });
901
+
902
+ if(callback) {
903
+ setTimeout(function(){
904
+
905
+ _.disableTransition(slideIndex);
906
+
907
+ callback.call();
908
+ }, _.options.speed);
909
+ }
910
+
911
+ }
912
+
913
+ };
914
+
640
915
  Slick.prototype.animateSlide = function (targetLeft,
641
916
  callback) {
642
917
 
643
918
  var animProps = {}, _ = this;
644
919
 
645
- if (_.options.onBeforeChange !== null) {
646
- _.options.onBeforeChange.call();
647
- }
648
-
649
920
  if (_.transformsEnabled === false) {
650
-
651
- _.slideTrack.animate({
652
- left: targetLeft
653
- }, _.options.speed, callback);
921
+ if (_.options.vertical === false) {
922
+ _.slideTrack.animate({
923
+ left: targetLeft
924
+ }, _.options.speed,_.options.easing, callback);
925
+ } else {
926
+ _.slideTrack.animate({
927
+ top: targetLeft
928
+ }, _.options.speed,_.options.easing, callback);
929
+ }
654
930
 
655
931
  } else {
656
932
 
657
- $({
658
- animStart: _.currentLeft
659
- }).animate({
660
- animStart: targetLeft
661
- }, {
662
- duration: _.options.speed,
663
- step: function (now) {
664
- animProps[_.animType] = "translate(" +
665
- now + "px, 0px)";
666
- _.slideTrack.css(animProps);
667
- },
668
- complete: function () {
669
- if (callback) {
670
- callback.call();
933
+ if(_.cssTransitions === false) {
934
+
935
+ $({
936
+ animStart: _.currentLeft
937
+ }).animate({
938
+ animStart: targetLeft
939
+ }, {
940
+ duration: _.options.speed,
941
+ easing: _.options.easing,
942
+ step: function (now) {
943
+ if (_.options.vertical === false) {
944
+ animProps[_.animType] = "translate(" +
945
+ now + "px, 0px)";
946
+ _.slideTrack.css(animProps);
947
+ } else {
948
+ animProps[_.animType] = "translate(0px," +
949
+ now + "px,0px)";
950
+ _.slideTrack.css(animProps);
951
+ }
952
+ },
953
+ complete: function () {
954
+ if (callback) {
955
+ callback.call();
956
+ }
671
957
  }
958
+ });
959
+
960
+ } else {
961
+
962
+ _.applyTransition();
963
+
964
+ if (_.options.vertical === false) {
965
+ animProps[_.animType] = "translate3d(" + targetLeft + "px, 0px, 0px)";
966
+ } else {
967
+ animProps[_.animType] = "translate3d(0px," + targetLeft + "px, 0px)";
968
+ }
969
+ _.slideTrack.css(animProps);
970
+
971
+ if(callback) {
972
+ setTimeout(function(){
973
+
974
+ _.disableTransition();
975
+
976
+ callback.call();
977
+ }, _.options.speed);
672
978
  }
673
- });
979
+
980
+ }
674
981
 
675
982
  }
676
983
 
@@ -686,6 +993,10 @@
686
993
 
687
994
  var _ = this;
688
995
 
996
+ if (_.options.onAfterChange !== null && index !== _.currentSlide) {
997
+ _.options.onAfterChange.call(_, index);
998
+ }
999
+
689
1000
  _.animating = false;
690
1001
 
691
1002
  _.currentSlide = index;
@@ -696,28 +1007,10 @@
696
1007
 
697
1008
  _.updateDots();
698
1009
 
699
- if (_.options.autoplay === true) {
700
- _.autoPlay();
701
- }
702
-
703
- if (_.options.onAfterChange !== null) {
704
- _.options.onAfterChange.call();
705
- }
1010
+ _.updateArrows();
706
1011
 
707
- if (_.options.arrows === true && _.options.infinite !==
708
- true) {
709
- if (_.currentSlide === 0) {
710
- _.prevArrow.addClass('slick-disabled');
711
- _.nextArrow.removeClass('slick-disabled');
712
- } else if (_.currentSlide >= (_.slideCount /
713
- _.options.slidesToScroll * _.options.slidesToShow
714
- ) - _.options.slidesToScroll) {
715
- _.nextArrow.addClass('slick-disabled');
716
- _.prevArrow.removeClass('slick-disabled');
717
- } else {
718
- _.prevArrow.removeClass('slick-disabled');
719
- _.nextArrow.removeClass('slick-disabled');
720
- }
1012
+ if (_.options.autoplay === true && _.paused === false) {
1013
+ _.autoPlay();
721
1014
  }
722
1015
 
723
1016
  _.setSlideClasses(_.currentSlide);
@@ -726,255 +1019,200 @@
726
1019
 
727
1020
  Slick.prototype.slideHandler = function (index) {
728
1021
 
729
- var targetSlide, slideLeft, targetLeft =
730
- null,
731
- _ = this;
1022
+ var targetSlide, animSlide, slideLeft, targetLeft = null, _ = this;
732
1023
 
733
1024
  if(_.animating === true) {
734
1025
  return false;
735
1026
  }
736
1027
 
737
1028
  targetSlide = index;
738
- targetLeft = ((targetSlide * _.slideWidth) * -1) +
739
- _.slideOffset;
740
- slideLeft = ((_.currentSlide * _.slideWidth) * -1) +
741
- _.slideOffset;
742
-
743
- if (_.options.autoplay === true) {
744
- clearInterval(_.autoPlayTimer);
745
- }
746
1029
 
747
- if (_.swipeLeft === null) {
748
- _.currentLeft = slideLeft;
1030
+ if(_.options.vertical === false) {
1031
+ targetLeft = ((targetSlide * _.slideWidth) * -1) + _.slideOffset;
1032
+ slideLeft = ((_.currentSlide * _.slideWidth) * -1) + _.slideOffset;
749
1033
  } else {
750
- _.currentLeft = _.swipeLeft;
1034
+ targetLeft = ((targetSlide * _.listHeight) * -1) - _.listHeight;
1035
+ slideLeft = ((_.currentSlide * _.listHeight) * -1) - _.listHeight;
751
1036
  }
752
1037
 
753
- if (targetSlide < 0) {
754
-
755
- if (_.options.infinite === true) {
756
-
757
- _.animating = true;
758
-
759
- _.animateSlide(targetLeft, function () {
760
-
761
- _.postSlide(_.slideCount - _.options
762
- .slidesToScroll);
763
-
764
- });
765
-
766
- } else {
767
-
768
- _.animateSlide(slideLeft);
1038
+ if (_.options.infinite === false && (index < 0 || index > (_.slideCount -1))) {
1039
+ targetSlide = _.currentSlide;
1040
+ _.animateSlide(slideLeft, function () {
1041
+ _.postSlide(targetSlide);
1042
+ });
1043
+ return false;
1044
+ }
769
1045
 
770
- return false;
1046
+ if (_.options.autoplay === true) {
1047
+ clearInterval(_.autoPlayTimer);
1048
+ }
771
1049
 
772
- }
1050
+ _.currentLeft = _.swipeLeft === null ? slideLeft : _.swipeLeft;
773
1051
 
1052
+ if (targetSlide < 0) {
1053
+ animSlide = _.slideCount - _.options.slidesToScroll;
774
1054
  } else if (targetSlide > (_.slideCount - 1)) {
775
-
776
- if (_.options.infinite === true) {
777
-
778
- _.animating = true;
779
-
780
- _.animateSlide(targetLeft, function () {
781
-
782
- _.postSlide(0);
783
-
784
- });
785
-
786
- } else {
787
-
788
- _.animateSlide(slideLeft);
789
-
790
- return false;
791
-
792
- }
793
-
1055
+ animSlide = 0;
794
1056
  } else {
1057
+ animSlide = targetSlide;
1058
+ }
795
1059
 
796
- _.animating = true;
797
-
798
- _.animateSlide(targetLeft, function () {
1060
+ _.animating = true;
799
1061
 
800
- _.postSlide(targetSlide);
1062
+ if (_.options.onBeforeChange !== null && index !== _.currentSlide) {
1063
+ _.options.onBeforeChange.call(_, animSlide);
1064
+ }
801
1065
 
1066
+ if (_.options.fade === true) {
1067
+ _.fadeSlide(animSlide, function(){
1068
+ _.postSlide(animSlide);
802
1069
  });
803
-
1070
+ return false;
804
1071
  }
1072
+ _.animateSlide(targetLeft, function () {
1073
+ _.postSlide(animSlide);
1074
+ });
805
1075
 
806
1076
  };
807
1077
 
808
- Slick.prototype.swipeStart = function (event) {
1078
+ Slick.prototype.setCSS = function (position) {
809
1079
 
810
- var _ = this, touches;
1080
+ var _ = this, positionProps = {}, x, y;
811
1081
 
812
- touches = event.originalEvent.touches;
1082
+ x = _.positionProp == 'left' ? position + 'px' : '0px';
1083
+ y = _.positionProp == 'top' ? position + 'px' : '0px';
813
1084
 
814
- if (_.touchObject.fingerCount === 1 || event.data
815
- .kind === 'drag') {
1085
+ positionProps[_.positionProp] = position;
816
1086
 
817
- if (event.data.kind === 'touch') {
818
- _.touchObject.startX = _.touchObject.
819
- curX =touches[0].pageX;
820
- _.touchObject.startY = _.touchObject.
821
- curY =touches[0].pageY;
1087
+ if (_.transformsEnabled === false) {
1088
+ _.slideTrack.css(positionProps);
1089
+ } else {
1090
+ positionProps = {};
1091
+ if(_.cssTransitions === false) {
1092
+ positionProps[_.animType] = "translate(" + x + ", " + y + ")";
1093
+ _.slideTrack.css(positionProps);
822
1094
  } else {
823
- _.list.addClass('dragging');
824
- _.touchObject.startX = _.touchObject.
825
- curX = event.clientX;
826
- _.touchObject.startY = _.touchObject.
827
- curY = event.clientY;
1095
+ positionProps[_.animType] = "translate3d(" + x + ", " + y + ", 0px)";
1096
+ _.slideTrack.css(positionProps);
828
1097
  }
829
-
830
- } else {
831
-
832
- _.touchObject = {};
833
-
834
1098
  }
835
1099
 
836
1100
  };
837
1101
 
838
- Slick.prototype.swipeMove = function (event) {
1102
+ Slick.prototype.swipeStart = function (event) {
839
1103
 
840
- var _ = this, animProps = {}, curLeft, newLeft = null, touches;
1104
+ var _ = this, touches;
841
1105
 
842
- touches = event.originalEvent.touches;
843
1106
 
844
- curLeft = ((_.currentSlide * _.slideWidth) * -1) +
845
- _.slideOffset;
1107
+ if (_.touchObject.fingerCount !== 1 || _.slideCount <= _.options.slidesToShow) {
1108
+ _.touchObject = {};
1109
+ return false;
1110
+ }
846
1111
 
847
- if ((touches && touches.length === 1) || event.
848
- data.kind ==='drag') {
1112
+ if(event.originalEvent !== undefined && event.originalEvent.touches !== undefined) {
1113
+ touches = event.originalEvent.touches[0];
1114
+ }
849
1115
 
850
- if (event.data.kind === 'touch') {
851
- _.touchObject.curX = touches[0].pageX;
852
- _.touchObject.curY = touches[0].pageY;
853
- } else {
854
- _.touchObject.curX = event.clientX;
855
- _.touchObject.curY = event.clientY;
856
- }
1116
+ _.touchObject.startX = _.touchObject.curX = touches !== undefined ? touches.pageX : event.clientX;
1117
+ _.touchObject.startY = _.touchObject.curY = touches !== undefined ? touches.pageY : event.clientY;
857
1118
 
858
- _.touchObject.swipeLength = Math.round(Math.sqrt(
859
- Math.pow(_.touchObject.curX - _.touchObject
860
- .startX, 2)));
1119
+ _.list.addClass('dragging');
861
1120
 
862
- if (_.swipeDirection() !== 'up' && _.swipeDirection() !==
863
- 'down') {
1121
+ };
864
1122
 
865
- event.originalEvent.preventDefault();
1123
+ Slick.prototype.swipeMove = function (event) {
866
1124
 
867
- if (_.touchObject.curX > _.touchObject
868
- .startX) {
1125
+ var _ = this, curLeft, swipeDirection, positionOffset, touches;
869
1126
 
870
- if (_.options.touchMove === true) {
1127
+ touches = event.originalEvent !== undefined ? event.originalEvent.touches : null;
871
1128
 
872
- newLeft = curLeft + _.touchObject
873
- .swipeLength;
874
- if (_.transformsEnabled ===
875
- false) {
876
- _.slideTrack.css('left',
877
- newLeft);
878
- } else {
879
- animProps[_.animType] =
880
- "translate(" + newLeft +
881
- "px, 0px)";
882
- _.slideTrack.css(animProps);
883
- _.swipeLeft = newLeft;
884
- }
1129
+ curLeft = _.options.vertical === false ? ((_.currentSlide * _.slideWidth) * -1) +
1130
+ _.slideOffset : ((_.currentSlide * _.listHeight) * -1) -
1131
+ _.listHeight;
885
1132
 
886
- }
1133
+ if((!_.list.hasClass('dragging') && event.data.kind === 'drag') ||
1134
+ touches && touches.length !== 1){
1135
+ return false;
1136
+ }
887
1137
 
888
- } else {
1138
+ _.touchObject.curX = touches !== undefined ? touches[0].pageX : event.clientX;
1139
+ _.touchObject.curY = touches !== undefined ? touches[0].pageY : event.clientY;
889
1140
 
890
- if (_.options.touchMove === true) {
1141
+ _.touchObject.swipeLength = Math.round(Math.sqrt(
1142
+ Math.pow(_.touchObject.curX - _.touchObject.startX, 2)));
891
1143
 
892
- newLeft = curLeft - _.touchObject
893
- .swipeLength;
894
- if (_.transformsEnabled ===
895
- false) {
896
- _.slideTrack.css('left',
897
- newLeft);
898
- } else {
899
- animProps[_.animType] =
900
- "translate(" + newLeft +
901
- "px, 0px)";
902
- _.slideTrack.css(animProps);
903
- _.swipeLeft = newLeft;
904
- }
1144
+ swipeDirection = _.swipeDirection();
905
1145
 
906
- }
1146
+ if (swipeDirection === 'vertical') {
1147
+ return false;
1148
+ }
907
1149
 
908
- }
1150
+ if(event.originalEvent !== undefined) {
1151
+ event.preventDefault();
1152
+ }
909
1153
 
910
- }
1154
+ positionOffset = _.touchObject.curX > _.touchObject.startX ? 1 : -1;
911
1155
 
1156
+ if(_.options.vertical === false) {
1157
+ _.swipeLeft = curLeft + _.touchObject.swipeLength * positionOffset;
912
1158
  } else {
1159
+ _.swipeLeft = curLeft + (_.touchObject
1160
+ .swipeLength * (_.listHeight / _.listWidth)) * positionOffset;
1161
+ }
913
1162
 
914
- _.touchObject = {};
1163
+ if(_.options.fade === true || _.options.touchMove === false) {
1164
+ return false;
1165
+ }
915
1166
 
1167
+ if (_.animating === true) {
1168
+ _.swipeLeft = null;
1169
+ return false;
916
1170
  }
917
1171
 
1172
+ _.setCSS(_.swipeLeft);
1173
+
918
1174
  };
919
1175
 
920
1176
  Slick.prototype.swipeEnd = function (event) {
921
1177
 
922
1178
  var _ = this;
923
1179
 
924
- if ((_.touchObject.fingerCount === 0 && _.touchObject
925
- .curX !== 0) || event.data.kind === 'drag') {
1180
+ _.list.removeClass('dragging');
926
1181
 
927
- if (_.touchObject.swipeLength >= _.touchObject
928
- .minSwipe) {
1182
+ if ((_.touchObject.fingerCount !== 0) && event.data.kind !== 'drag') {
1183
+ _.touchObject = {};
1184
+ return false;
1185
+ }
929
1186
 
930
- switch (_.swipeDirection()) {
1187
+ if (_.touchObject.swipeLength >= _.touchObject.minSwipe) {
931
1188
 
1189
+ switch (_.swipeDirection()) {
932
1190
  case 'left':
933
-
934
- _.slideHandler(_.currentSlide +
935
- _.options.slidesToScroll);
1191
+ _.slideHandler(_.currentSlide + _.options.slidesToScroll);
936
1192
  _.touchObject = {};
937
-
938
- break;
1193
+ break;
939
1194
 
940
1195
  case 'right':
941
-
942
- _.slideHandler(_.currentSlide -
943
- _.options.slidesToScroll);
1196
+ _.slideHandler(_.currentSlide - _.options.slidesToScroll);
944
1197
  _.touchObject = {};
945
-
946
- break;
947
-
948
- }
949
-
950
- } else {
951
-
952
- _.slideHandler(_.currentSlide);
953
- _.touchObject = {};
954
-
955
- }
956
-
957
- if (event.data.kind === 'drag') {
958
- _.list.removeClass('dragging');
1198
+ break;
959
1199
  }
960
1200
 
961
1201
  } else {
962
-
1202
+ _.slideHandler(_.currentSlide);
963
1203
  _.touchObject = {};
964
-
965
1204
  }
966
1205
 
967
1206
  };
968
1207
 
969
- Slick.prototype.swipeCancel = function () {
1208
+ Slick.prototype.keyHandler = function (event) {
970
1209
 
971
1210
  var _ = this;
972
1211
 
973
- _.list.removeClass('dragging');
974
-
975
- if (_.touchObject.startX) {
976
- _.slideHandler(_.currentSlide);
977
- _.touchObject = {};
1212
+ if (event.keyCode === 37) {
1213
+ _.changeSlide({data: {message: 'previous'}});
1214
+ } else if (event.keyCode === 39) {
1215
+ _.changeSlide({data: {message: 'next'}});
978
1216
  }
979
1217
 
980
1218
  };
@@ -983,38 +1221,26 @@
983
1221
 
984
1222
  var _ = this;
985
1223
 
986
- if (event.data.kind === 'touch') {
987
- _.touchObject.fingerCount = event.originalEvent.touches
988
- .length;
1224
+ if(event.originalEvent !== undefined) {
1225
+ _.touchObject.fingerCount = event.originalEvent.touches !== undefined ?
1226
+ event.originalEvent.touches.length : 1;
989
1227
  }
990
1228
 
991
- _.touchObject.minSwipe = _.slideWidth / _.options
1229
+ _.touchObject.minSwipe = _.listWidth / _.options
992
1230
  .touchThreshold;
993
1231
 
994
1232
  switch (event.data.action) {
995
1233
 
996
1234
  case 'start':
997
-
998
1235
  _.swipeStart(event);
999
-
1000
1236
  break;
1001
1237
 
1002
1238
  case 'move':
1003
-
1004
1239
  _.swipeMove(event);
1005
-
1006
1240
  break;
1007
1241
 
1008
1242
  case 'end':
1009
-
1010
1243
  _.swipeEnd(event);
1011
-
1012
- break;
1013
-
1014
- case 'cancel':
1015
-
1016
- _.swipeCancel();
1017
-
1018
1244
  break;
1019
1245
 
1020
1246
  }
@@ -1043,11 +1269,8 @@
1043
1269
  if ((swipeAngle >= 135) && (swipeAngle <= 225)) {
1044
1270
  return 'right';
1045
1271
  }
1046
- if ((swipeAngle > 45) && (swipeAngle < 135)) {
1047
- return 'down';
1048
- }
1049
1272
 
1050
- return 'up';
1273
+ return 'vertical';
1051
1274
 
1052
1275
  };
1053
1276
 
@@ -1063,8 +1286,67 @@
1063
1286
 
1064
1287
  };
1065
1288
 
1289
+ Slick.prototype.unload = function () {
1290
+ var _ = this;
1291
+ $('.slick-cloned', _.slider).remove();
1292
+ $('.slick-placeholder', _.slider).remove();
1293
+ if (_.dots) {
1294
+ _.dots.remove();
1295
+ }
1296
+ if (_.prevArrow) {
1297
+ _.prevArrow.remove();
1298
+ _.nextArrow.remove();
1299
+ }
1300
+ _.slides.removeClass(
1301
+ 'slick-slide slick-active slick-visible').removeAttr('style');
1302
+ };
1303
+
1304
+ Slick.prototype.reinit = function () {
1305
+
1306
+ var _ = this;
1307
+
1308
+ _.slides = $(_.options.slide +
1309
+ ':not(.slick-cloned)', _.slideTrack).addClass(
1310
+ 'slick-slide');
1311
+
1312
+ _.slideCount = _.slides.length;
1313
+
1314
+ if(_.currentSlide >= _.slideCount && _.currentSlide !== 0) {
1315
+ _.currentSlide = _.currentSlide - _.options.slidesToScroll;
1316
+ }
1317
+
1318
+ _.setProps();
1319
+
1320
+ _.setupPlaceholders();
1321
+
1322
+ _.setupInfinite();
1323
+
1324
+ _.buildArrows();
1325
+
1326
+ _.updateArrows();
1327
+
1328
+ _.initArrowEvents();
1329
+
1330
+ _.buildDots();
1331
+
1332
+ _.updateDots();
1333
+
1334
+ _.initDotEvents();
1335
+
1336
+ _.setSlideClasses(0);
1337
+
1338
+ _.setPosition();
1339
+
1340
+ };
1341
+
1066
1342
  Slick.prototype.destroy = function () {
1343
+
1067
1344
  var _ = this;
1345
+
1346
+ _.autoPlayClear();
1347
+
1348
+ _.touchObject = {};
1349
+
1068
1350
  $('.slick-cloned', _.slider).remove();
1069
1351
  $('.slick-placeholder', _.slider).remove();
1070
1352
  if (_.dots) {
@@ -1076,9 +1358,10 @@
1076
1358
  }
1077
1359
  _.slides.unwrap().unwrap();
1078
1360
  _.slides.removeClass(
1079
- 'slick-slide slick-active slick-visible').width('');
1361
+ 'slick-slide slick-active slick-visible').removeAttr('style');
1080
1362
  _.slider.removeClass('slick-slider');
1081
1363
  _.slider.removeClass('slick-initialized');
1364
+
1082
1365
  };
1083
1366
 
1084
1367
  $.fn.slick = function (options) {
@@ -1090,6 +1373,42 @@
1090
1373
  });
1091
1374
  };
1092
1375
 
1376
+ $.fn.slickAdd = function (slide) {
1377
+ var _ = this;
1378
+ return _.each(function (index, element) {
1379
+
1380
+ element.slick.addSlide(slide);
1381
+
1382
+ });
1383
+ };
1384
+
1385
+ $.fn.slickRemove = function (slide) {
1386
+ var _ = this;
1387
+ return _.each(function (index, element) {
1388
+
1389
+ element.slick.removeSlide(slide);
1390
+
1391
+ });
1392
+ };
1393
+
1394
+ $.fn.slickFilter = function (filter) {
1395
+ var _ = this;
1396
+ return _.each(function (index, element) {
1397
+
1398
+ element.slick.filterSlides(filter);
1399
+
1400
+ });
1401
+ };
1402
+
1403
+ $.fn.slickUnfilter = function () {
1404
+ var _ = this;
1405
+ return _.each(function (index, element) {
1406
+
1407
+ element.slick.unfilterSlides();
1408
+
1409
+ });
1410
+ };
1411
+
1093
1412
  $.fn.slickGoTo = function (slide) {
1094
1413
  var _ = this;
1095
1414
  return _.each(function (index, element) {
@@ -1122,6 +1441,7 @@
1122
1441
  return _.each(function (index, element) {
1123
1442
 
1124
1443
  element.slick.autoPlayClear();
1444
+ element.slick.paused = true;
1125
1445
 
1126
1446
  });
1127
1447
  };
@@ -1130,11 +1450,26 @@
1130
1450
  var _ = this;
1131
1451
  return _.each(function (index, element) {
1132
1452
 
1453
+ element.slick.paused = false;
1133
1454
  element.slick.autoPlay();
1134
1455
 
1135
1456
  });
1136
1457
  };
1137
1458
 
1459
+ $.fn.slickSetOption = function (option, value, refresh) {
1460
+ var _ = this;
1461
+ return _.each(function (index, element) {
1462
+
1463
+ element.slick.options[option] = value;
1464
+
1465
+ if(refresh === true) {
1466
+ element.slick.unload();
1467
+ element.slick.reinit();
1468
+ }
1469
+
1470
+ });
1471
+ };
1472
+
1138
1473
  $.fn.unslick = function () {
1139
1474
  var _ = this;
1140
1475
  return _.each(function (index, element) {