groundworkcss-rails 0.2.3 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (21) hide show
  1. data/lib/groundworkcss/rails/version.rb +1 -1
  2. data/lib/groundworkcss/rails/version.rb~ +1 -1
  3. data/vendor/assets/javascripts/groundworkcss/groundwork.all.js +96 -20
  4. data/vendor/assets/javascripts/groundworkcss/groundwork.js +51 -12
  5. data/vendor/assets/javascripts/groundworkcss/plugins/cycle/jquery.cycle2.caption2.js +67 -0
  6. data/vendor/assets/javascripts/groundworkcss/plugins/cycle/jquery.cycle2.carousel.js +265 -0
  7. data/vendor/assets/javascripts/groundworkcss/plugins/cycle/jquery.cycle2.center.js +63 -0
  8. data/vendor/assets/javascripts/groundworkcss/plugins/cycle/jquery.cycle2.ie-fade.js +46 -0
  9. data/vendor/assets/javascripts/groundworkcss/plugins/cycle/jquery.cycle2.scrollVert.js +15 -0
  10. data/vendor/assets/javascripts/groundworkcss/plugins/cycle/jquery.cycle2.shuffle.js +62 -0
  11. data/vendor/assets/javascripts/groundworkcss/plugins/cycle/jquery.cycle2.swipe.js +70 -0
  12. data/vendor/assets/javascripts/groundworkcss/plugins/cycle/jquery.cycle2.tile.js +131 -0
  13. data/vendor/assets/javascripts/groundworkcss/plugins/cycle/jquery.cycle2.video.js +66 -0
  14. data/vendor/assets/javascripts/groundworkcss/plugins/jquery.cycle2.js +1426 -0
  15. data/vendor/assets/stylesheets/groundworkcss-scss/_buttons.scss +4 -3
  16. data/vendor/assets/stylesheets/groundworkcss-scss/_cycle.scss +20 -0
  17. data/vendor/assets/stylesheets/groundworkcss-scss/_modals.scss +2 -1
  18. data/vendor/assets/stylesheets/groundworkcss-scss/_navigation.scss +9 -3
  19. data/vendor/assets/stylesheets/groundworkcss-scss/_tabs.scss +5 -0
  20. data/vendor/assets/stylesheets/groundworkcss-scss/groundwork.scss +2 -2
  21. metadata +25 -14
@@ -0,0 +1,1426 @@
1
+ /*!
2
+ * jQuery Cycle2 - Version: 20130307
3
+ * http://malsup.com/jquery/cycle2/
4
+ * Copyright (c) 2012 M. Alsup; Dual licensed: MIT/GPL
5
+ * Requires: jQuery v1.7 or later
6
+ */
7
+ ;(function($) {
8
+ "use strict";
9
+
10
+ var version = '20130307';
11
+
12
+ $.fn.cycle = function( options ) {
13
+ // fix mistakes with the ready state
14
+ var o;
15
+ if ( this.length === 0 && !$.isReady ) {
16
+ o = { s: this.selector, c: this.context };
17
+ $.fn.cycle.log('requeuing slideshow (dom not ready)');
18
+ $(function() {
19
+ $( o.s, o.c ).cycle(options);
20
+ });
21
+ return this;
22
+ }
23
+
24
+ return this.each(function() {
25
+ var data, opts, shortName, val;
26
+ var container = $(this);
27
+ var log = $.fn.cycle.log;
28
+
29
+ if ( container.data('cycle.opts') )
30
+ return; // already initialized
31
+
32
+ if ( container.data('cycle-log') === false ||
33
+ ( options && options.log === false ) ||
34
+ ( opts && opts.log === false) ) {
35
+ log = $.noop;
36
+ }
37
+
38
+ log('--c2 init--');
39
+ data = container.data();
40
+ for (var p in data) {
41
+ // allow props to be accessed sans 'cycle' prefix and log the overrides
42
+ if (data.hasOwnProperty(p) && /^cycle[A-Z]+/.test(p) ) {
43
+ val = data[p];
44
+ shortName = p.match(/^cycle(.*)/)[1].replace(/^[A-Z]/, lowerCase);
45
+ log(shortName+':', val, '('+typeof val +')');
46
+ data[shortName] = val;
47
+ }
48
+ }
49
+
50
+ opts = $.extend( {}, $.fn.cycle.defaults, data, options || {});
51
+
52
+ opts.timeoutId = 0;
53
+ opts.paused = opts.paused || false; // #57
54
+ opts.container = container;
55
+ opts._maxZ = opts.maxZ;
56
+
57
+ opts.API = $.extend ( { _container: container }, $.fn.cycle.API );
58
+ opts.API.log = log;
59
+ opts.API.trigger = function( eventName, args ) {
60
+ opts.container.trigger( eventName, args );
61
+ return opts.API;
62
+ };
63
+
64
+ container.data( 'cycle.opts', opts );
65
+ container.data( 'cycle.API', opts.API );
66
+
67
+ // opportunity for plugins to modify opts and API
68
+ opts.API.trigger('cycle-bootstrap', [ opts, opts.API ]);
69
+
70
+ opts.API.addInitialSlides();
71
+ opts.API.preInitSlideshow();
72
+
73
+ if ( opts.slides.length )
74
+ opts.API.initSlideshow();
75
+ });
76
+ };
77
+
78
+ $.fn.cycle.API = {
79
+ opts: function() {
80
+ return this._container.data( 'cycle.opts' );
81
+ },
82
+ addInitialSlides: function() {
83
+ var opts = this.opts();
84
+ var slides = opts.slides;
85
+ opts.slideCount = 0;
86
+ opts.slides = $(); // empty set
87
+
88
+ // add slides that already exist
89
+ slides = slides.jquery ? slides : opts.container.find( slides );
90
+
91
+ if ( opts.random ) {
92
+ slides.sort(function() {return Math.random() - 0.5;});
93
+ }
94
+
95
+ opts.API.add( slides );
96
+ },
97
+
98
+ preInitSlideshow: function() {
99
+ var opts = this.opts();
100
+ opts.API.trigger('cycle-pre-initialize', [ opts ]);
101
+ var tx = $.fn.cycle.transitions[opts.fx];
102
+ if (tx && $.isFunction(tx.preInit))
103
+ tx.preInit( opts );
104
+ opts._preInitialized = true;
105
+ },
106
+
107
+ postInitSlideshow: function() {
108
+ var opts = this.opts();
109
+ opts.API.trigger('cycle-post-initialize', [ opts ]);
110
+ var tx = $.fn.cycle.transitions[opts.fx];
111
+ if (tx && $.isFunction(tx.postInit))
112
+ tx.postInit( opts );
113
+ },
114
+
115
+ initSlideshow: function() {
116
+ var opts = this.opts();
117
+ var pauseObj = opts.container;
118
+ var slideOpts;
119
+ opts.API.calcFirstSlide();
120
+
121
+ if ( opts.container.css('position') == 'static' )
122
+ opts.container.css('position', 'relative');
123
+
124
+ $(opts.slides[opts.currSlide]).css('opacity',1).show();
125
+ opts.API.stackSlides( opts.slides[opts.currSlide], opts.slides[opts.nextSlide], !opts.reverse );
126
+
127
+ if ( opts.pauseOnHover ) {
128
+ // allow pauseOnHover to specify an element
129
+ if ( opts.pauseOnHover !== true )
130
+ pauseObj = $( opts.pauseOnHover );
131
+
132
+ pauseObj.hover(
133
+ function(){
134
+ opts.hoverPaused = true;
135
+ if ( ! opts.paused )
136
+ opts.API.trigger('cycle-paused', [ opts ] );
137
+ },
138
+ function(){
139
+ opts.hoverPaused = false;
140
+ if ( ! opts.paused )
141
+ opts.API.trigger('cycle-resumed', [ opts ] );
142
+ }
143
+ );
144
+ }
145
+
146
+ // stage initial transition
147
+ if ( opts.timeout ) {
148
+ slideOpts = opts.API.getSlideOpts( opts.nextSlide );
149
+ opts.API.queueTransition( slideOpts );
150
+ }
151
+
152
+ opts._initialized = true;
153
+ opts.API.updateView( true );
154
+ opts.container.on('cycle-paused cycle-resumed', function(e) {
155
+ opts.container[ e.type === 'cycle-paused' ? 'addClass' : 'removeClass' ]('cycle-paused');
156
+ });
157
+ opts.API.trigger('cycle-initialized', [ opts ]);
158
+ opts.API.postInitSlideshow();
159
+ },
160
+
161
+
162
+ add: function( slides, prepend ) {
163
+ var opts = this.opts();
164
+ var oldSlideCount = opts.slideCount;
165
+ var startSlideshow = false;
166
+ var len;
167
+
168
+ if ( $.type(slides) == 'string')
169
+ slides = $.trim( slides );
170
+
171
+ $( slides ).each(function(i) {
172
+ var slideOpts;
173
+ var slide = $(this);
174
+
175
+ if ( prepend )
176
+ opts.container.prepend( slide );
177
+ else
178
+ opts.container.append( slide );
179
+
180
+ opts.slideCount++;
181
+ slideOpts = opts.API.buildSlideOpts( slide );
182
+
183
+ if ( prepend )
184
+ opts.slides = $( slide ).add( opts.slides );
185
+ else
186
+ opts.slides = opts.slides.add( slide );
187
+
188
+ opts.API.initSlide( slideOpts, slide, --opts._maxZ );
189
+
190
+ slide.data('cycle.opts', slideOpts);
191
+ opts.API.trigger('cycle-slide-added', [ opts, slideOpts, slide ]);
192
+ });
193
+
194
+ opts.API.updateView( true );
195
+
196
+ startSlideshow = opts._preInitialized && (oldSlideCount < 2 && opts.slideCount >= 1);
197
+ if ( startSlideshow ) {
198
+ if ( !opts._initialized )
199
+ opts.API.initSlideshow();
200
+ else if ( opts.timeout ) {
201
+ len = opts.slides.length;
202
+ opts.nextSlide = opts.reverse ? len - 1 : 1;
203
+ if ( !opts.timeoutId ) {
204
+ opts.API.queueTransition( opts );
205
+ }
206
+ }
207
+ }
208
+ },
209
+
210
+ calcFirstSlide: function() {
211
+ var opts = this.opts();
212
+ var firstSlideIndex;
213
+ firstSlideIndex = parseInt( opts.startingSlide || 0, 10 );
214
+ if (firstSlideIndex >= opts.slides.length || firstSlideIndex < 0)
215
+ firstSlideIndex = 0;
216
+
217
+ opts.currSlide = firstSlideIndex;
218
+ if ( opts.reverse ) {
219
+ opts.nextSlide = firstSlideIndex - 1;
220
+ if (opts.nextSlide < 0)
221
+ opts.nextSlide = opts.slides.length - 1;
222
+ }
223
+ else {
224
+ opts.nextSlide = firstSlideIndex + 1;
225
+ if (opts.nextSlide == opts.slides.length)
226
+ opts.nextSlide = 0;
227
+ }
228
+ },
229
+
230
+ calcNextSlide: function() {
231
+ var opts = this.opts();
232
+ var roll;
233
+ if ( opts.reverse ) {
234
+ roll = (opts.nextSlide - 1) < 0;
235
+ opts.nextSlide = roll ? opts.slideCount - 1 : opts.nextSlide-1;
236
+ opts.currSlide = roll ? 0 : opts.nextSlide+1;
237
+ }
238
+ else {
239
+ roll = (opts.nextSlide + 1) == opts.slides.length;
240
+ opts.nextSlide = roll ? 0 : opts.nextSlide+1;
241
+ opts.currSlide = roll ? opts.slides.length-1 : opts.nextSlide-1;
242
+ }
243
+ },
244
+
245
+ calcTx: function( slideOpts, manual ) {
246
+ var opts = slideOpts;
247
+ var tx;
248
+ if ( manual && opts.manualFx )
249
+ tx = $.fn.cycle.transitions[opts.manualFx];
250
+ if ( !tx )
251
+ tx = $.fn.cycle.transitions[opts.fx];
252
+
253
+ if (!tx) {
254
+ tx = $.fn.cycle.transitions.fade;
255
+ opts.API.log('Transition "' + opts.fx + '" not found. Using fade.');
256
+ }
257
+ return tx;
258
+ },
259
+
260
+ prepareTx: function( manual, fwd ) {
261
+ var opts = this.opts();
262
+ var after, curr, next, slideOpts, tx;
263
+
264
+ if ( opts.slideCount < 2 ) {
265
+ opts.timeoutId = 0;
266
+ return;
267
+ }
268
+ if ( manual && ( !opts.busy || opts.manualTrump ) ) {
269
+ opts.API.stopTransition();
270
+ opts.busy = false;
271
+ clearTimeout(opts.timeoutId);
272
+ opts.timeoutId = 0;
273
+ }
274
+ if ( opts.busy )
275
+ return;
276
+ if ( opts.timeoutId === 0 && !manual )
277
+ return;
278
+
279
+ curr = opts.slides[opts.currSlide];
280
+ next = opts.slides[opts.nextSlide];
281
+ slideOpts = opts.API.getSlideOpts( opts.nextSlide );
282
+ tx = opts.API.calcTx( slideOpts, manual );
283
+
284
+ opts._tx = tx;
285
+
286
+ if ( manual && slideOpts.manualSpeed !== undefined )
287
+ slideOpts.speed = slideOpts.manualSpeed;
288
+
289
+ // if ( opts.nextSlide === opts.currSlide )
290
+ // opts.API.calcNextSlide();
291
+
292
+ // ensure that:
293
+ // 1. advancing to a different slide
294
+ // 2. this is either a manual event (prev/next, pager, cmd) or
295
+ // a timer event and slideshow is not paused
296
+ if ( opts.nextSlide != opts.currSlide &&
297
+ (manual || (!opts.paused && !opts.hoverPaused && opts.timeout) )) { // #62
298
+
299
+ opts.API.trigger('cycle-before', [ slideOpts, curr, next, fwd ]);
300
+ if ( tx.before )
301
+ tx.before( slideOpts, curr, next, fwd );
302
+
303
+ after = function() {
304
+ opts.busy = false;
305
+ // #76; bail if slideshow has been destroyed
306
+ if (! opts.container.data( 'cycle.opts' ) )
307
+ return;
308
+
309
+ if (tx.after)
310
+ tx.after( slideOpts, curr, next, fwd );
311
+ opts.API.trigger('cycle-after', [ slideOpts, curr, next, fwd ]);
312
+ opts.API.queueTransition( slideOpts);
313
+ opts.API.updateView( true );
314
+ };
315
+
316
+ opts.busy = true;
317
+ if (tx.transition)
318
+ tx.transition(slideOpts, curr, next, fwd, after);
319
+ else
320
+ opts.API.doTransition( slideOpts, curr, next, fwd, after);
321
+
322
+ opts.API.calcNextSlide();
323
+ opts.API.updateView();
324
+ } else {
325
+ opts.API.queueTransition( slideOpts );
326
+ }
327
+ },
328
+
329
+ // perform the actual animation
330
+ doTransition: function( slideOpts, currEl, nextEl, fwd, callback) {
331
+ var opts = slideOpts;
332
+ var curr = $(currEl), next = $(nextEl);
333
+ var fn = function() {
334
+ // make sure animIn has something so that callback doesn't trigger immediately
335
+ next.animate(opts.animIn || { opacity: 1}, opts.speed, opts.easeIn || opts.easing, callback);
336
+ };
337
+
338
+ next.css(opts.cssBefore || {});
339
+ curr.animate(opts.animOut || {}, opts.speed, opts.easeOut || opts.easing, function() {
340
+ curr.css(opts.cssAfter || {});
341
+ if (!opts.sync) {
342
+ fn();
343
+ }
344
+ });
345
+ if (opts.sync) {
346
+ fn();
347
+ }
348
+ },
349
+
350
+ queueTransition: function( slideOpts ) {
351
+ var opts = this.opts();
352
+ if (opts.nextSlide === 0 && --opts.loop === 0) {
353
+ opts.API.log('terminating; loop=0');
354
+ opts.timeout = 0;
355
+ if (slideOpts.timeout) {
356
+ setTimeout(function() {
357
+ opts.API.trigger('cycle-finished', [ opts ]);
358
+ }, slideOpts.timeout);
359
+ }
360
+ else {
361
+ opts.API.trigger('cycle-finished', [ opts ]);
362
+ }
363
+ // reset nextSlide
364
+ opts.nextSlide = opts.currSlide;
365
+ return;
366
+ }
367
+ if (slideOpts.timeout) {
368
+ opts.timeoutId = setTimeout(function() {
369
+ opts.API.prepareTx( false, !opts.reverse );
370
+ }, slideOpts.timeout );
371
+ }
372
+ },
373
+
374
+ stopTransition: function() {
375
+ var opts = this.opts();
376
+ if ( opts.slides.filter(':animated').length ) {
377
+ opts.slides.stop(false, true);
378
+ opts.API.trigger('cycle-transition-stopped', [ opts ]);
379
+ }
380
+
381
+ if ( opts._tx && opts._tx.stopTransition )
382
+ opts._tx.stopTransition( opts );
383
+ },
384
+
385
+ // advance slide forward or back
386
+ advanceSlide: function( val ) {
387
+ var opts = this.opts();
388
+ clearTimeout(opts.timeoutId);
389
+ opts.timeoutId = 0;
390
+ opts.nextSlide = opts.currSlide + val;
391
+
392
+ if (opts.nextSlide < 0)
393
+ opts.nextSlide = opts.slides.length - 1;
394
+ else if (opts.nextSlide >= opts.slides.length)
395
+ opts.nextSlide = 0;
396
+
397
+ opts.API.prepareTx( true, val >= 0 );
398
+ return false;
399
+ },
400
+
401
+ buildSlideOpts: function( slide ) {
402
+ var opts = this.opts();
403
+ var val, shortName;
404
+ var slideOpts = slide.data() || {};
405
+ for (var p in slideOpts) {
406
+ // allow props to be accessed sans 'cycle' prefix and log the overrides
407
+ if (slideOpts.hasOwnProperty(p) && /^cycle[A-Z]+/.test(p) ) {
408
+ val = slideOpts[p];
409
+ shortName = p.match(/^cycle(.*)/)[1].replace(/^[A-Z]/, lowerCase);
410
+ opts.API.log('['+(opts.slideCount-1)+']', shortName+':', val, '('+typeof val +')');
411
+ slideOpts[shortName] = val;
412
+ }
413
+ }
414
+
415
+ slideOpts = $.extend( {}, $.fn.cycle.defaults, opts, slideOpts );
416
+ slideOpts.slideNum = opts.slideCount;
417
+
418
+ try {
419
+ // these props should always be read from the master state object
420
+ delete slideOpts.API;
421
+ delete slideOpts.slideCount;
422
+ delete slideOpts.currSlide;
423
+ delete slideOpts.nextSlide;
424
+ delete slideOpts.slides;
425
+ } catch(e) {
426
+ // no op
427
+ }
428
+ return slideOpts;
429
+ },
430
+
431
+ getSlideOpts: function( index ) {
432
+ var opts = this.opts();
433
+ if ( index === undefined )
434
+ index = opts.currSlide;
435
+
436
+ var slide = opts.slides[index];
437
+ var slideOpts = $(slide).data('cycle.opts');
438
+ return $.extend( {}, opts, slideOpts );
439
+ },
440
+
441
+ initSlide: function( slideOpts, slide, suggestedZindex ) {
442
+ var opts = this.opts();
443
+ slide.css( slideOpts.slideCss || {} );
444
+ if ( suggestedZindex > 0 )
445
+ slide.css( 'zIndex', suggestedZindex );
446
+
447
+ // ensure that speed settings are sane
448
+ if ( isNaN( slideOpts.speed ) )
449
+ slideOpts.speed = $.fx.speeds[slideOpts.speed] || $.fx.speeds._default;
450
+ if ( !slideOpts.sync )
451
+ slideOpts.speed = slideOpts.speed / 2;
452
+
453
+ slide.addClass( opts.slideClass );
454
+ },
455
+
456
+ updateView: function( isAfter ) {
457
+ var opts = this.opts();
458
+ if ( !opts._initialized )
459
+ return;
460
+ var slideOpts = opts.API.getSlideOpts();
461
+ var currSlide = opts.slides[ opts.currSlide ];
462
+
463
+ if ( ! isAfter ) {
464
+ opts.API.trigger('cycle-update-view-before', [ opts, slideOpts, currSlide ]);
465
+ if ( opts.updateView < 0 )
466
+ return;
467
+ }
468
+
469
+ if ( opts.slideActiveClass ) {
470
+ opts.slides.removeClass( opts.slideActiveClass )
471
+ .eq( opts.currSlide ).addClass( opts.slideActiveClass );
472
+ }
473
+
474
+ if ( isAfter && opts.hideNonActive )
475
+ opts.slides.filter( ':not(.' + opts.slideActiveClass + ')' ).hide();
476
+
477
+ opts.API.trigger('cycle-update-view', [ opts, slideOpts, currSlide, isAfter ]);
478
+ opts.API.trigger('cycle-update-view-after', [ opts, slideOpts, currSlide ]);
479
+ },
480
+
481
+ getComponent: function( name ) {
482
+ var opts = this.opts();
483
+ var selector = opts[name];
484
+ if (typeof selector === 'string') {
485
+ // if selector is a child selector then use find, otherwise query full dom
486
+ return (/^\s*\>/).test( selector ) ? opts.container.find( selector ) : $( selector );
487
+ }
488
+ if (selector.jquery)
489
+ return selector;
490
+
491
+ return $(selector);
492
+ },
493
+
494
+ stackSlides: function( curr, next, fwd ) {
495
+ var opts = this.opts();
496
+ if ( !curr ) {
497
+ curr = opts.slides[opts.currSlide];
498
+ next = opts.slides[opts.nextSlide];
499
+ fwd = !opts.reverse;
500
+ }
501
+
502
+ // reset the zIndex for the common case:
503
+ // curr slide on top, next slide beneath, and the rest in order to be shown
504
+ $(curr).css('zIndex', opts.maxZ);
505
+
506
+ var i;
507
+ var z = opts.maxZ - 2;
508
+ var len = opts.slideCount;
509
+ if (fwd) {
510
+ for ( i = opts.currSlide + 1; i < len; i++ )
511
+ $( opts.slides[i] ).css( 'zIndex', z-- );
512
+ for ( i = 0; i < opts.currSlide; i++ )
513
+ $( opts.slides[i] ).css( 'zIndex', z-- );
514
+ }
515
+ else {
516
+ for ( i = opts.currSlide - 1; i >= 0; i-- )
517
+ $( opts.slides[i] ).css( 'zIndex', z-- );
518
+ for ( i = len - 1; i > opts.currSlide; i-- )
519
+ $( opts.slides[i] ).css( 'zIndex', z-- );
520
+ }
521
+
522
+ $(next).css('zIndex', opts.maxZ - 1);
523
+ },
524
+
525
+ getSlideIndex: function( el ) {
526
+ return this.opts().slides.index( el );
527
+ }
528
+
529
+ }; // API
530
+
531
+ // default logger
532
+ $.fn.cycle.log = function log() {
533
+ /*global console:true */
534
+ if (window.console && console.log)
535
+ console.log('[cycle2] ' + Array.prototype.join.call(arguments, ' ') );
536
+ };
537
+
538
+ $.fn.cycle.version = function() { return 'Cycle2: ' + version; };
539
+
540
+ // helper functions
541
+
542
+ function lowerCase(s) {
543
+ return (s || '').toLowerCase();
544
+ }
545
+
546
+ // expose transition object
547
+ $.fn.cycle.transitions = {
548
+ custom: {
549
+ },
550
+ none: {
551
+ before: function( opts, curr, next, fwd ) {
552
+ opts.API.stackSlides( next, curr, fwd );
553
+ opts.cssBefore = { opacity: 1, display: 'block' };
554
+ }
555
+ },
556
+ fade: {
557
+ before: function( opts, curr, next, fwd ) {
558
+ var css = opts.API.getSlideOpts( opts.nextSlide ).slideCss || {};
559
+ opts.API.stackSlides( curr, next, fwd );
560
+ opts.cssBefore = $.extend(css, { opacity: 0, display: 'block' });
561
+ opts.animIn = { opacity: 1 };
562
+ opts.animOut = { opacity: 0 };
563
+ }
564
+ },
565
+ fadeout: {
566
+ before: function( opts , curr, next, fwd ) {
567
+ var css = opts.API.getSlideOpts( opts.nextSlide ).slideCss || {};
568
+ opts.API.stackSlides( curr, next, fwd );
569
+ opts.cssBefore = $.extend(css, { opacity: 1, display: 'block' });
570
+ opts.animOut = { opacity: 0 };
571
+ }
572
+ },
573
+ scrollHorz: {
574
+ before: function( opts, curr, next, fwd ) {
575
+ opts.API.stackSlides( curr, next, fwd );
576
+ var w = opts.container.css('overflow','hidden').width();
577
+ opts.cssBefore = { left: fwd ? w : - w, top: 0, opacity: 1, display: 'block' };
578
+ opts.cssAfter = { zIndex: opts._maxZ - 2, left: 0 };
579
+ opts.animIn = { left: 0 };
580
+ opts.animOut = { left: fwd ? -w : w };
581
+ }
582
+ }
583
+ };
584
+
585
+ // @see: http://jquery.malsup.com/cycle2/api
586
+ $.fn.cycle.defaults = {
587
+ allowWrap: true,
588
+ autoSelector: '.cycle-slideshow[data-cycle-auto-init!=false]',
589
+ delay: 0,
590
+ easing: null,
591
+ fx: 'fade',
592
+ hideNonActive: true,
593
+ loop: 0,
594
+ manualFx: undefined,
595
+ manualSpeed: undefined,
596
+ manualTrump: true,
597
+ maxZ: 100,
598
+ pauseOnHover: false,
599
+ reverse: false,
600
+ slideActiveClass: 'cycle-slide-active',
601
+ slideClass: 'cycle-slide',
602
+ slideCss: { position: 'absolute', top: 0, left: 0 },
603
+ slides: '> img',
604
+ speed: 500,
605
+ startingSlide: 0,
606
+ sync: true,
607
+ timeout: 4000,
608
+ updateView: -1
609
+ };
610
+
611
+ // automatically find and run slideshows
612
+ $(document).ready(function() {
613
+ $( $.fn.cycle.defaults.autoSelector ).cycle();
614
+ });
615
+
616
+ })(jQuery);
617
+
618
+ /*! Cycle2 autoheight plugin; Copyright (c) M.Alsup, 2012; version: 20130322 */
619
+ (function($) {
620
+ "use strict";
621
+
622
+ $.extend($.fn.cycle.defaults, {
623
+ autoHeight: 0 // setting this option to -1 disables autoHeight logic
624
+ });
625
+
626
+ $(document).on( 'cycle-initialized cycle-slide-added cycle-slide-removed', initAutoHeight);
627
+ $(document).on( 'cycle-destroyed', cleanup);
628
+
629
+ function initAutoHeight(e, opts) {
630
+ var autoHeight = opts.autoHeight;
631
+ var clone, ratio, timeout;
632
+
633
+ cleanup( e, opts );
634
+
635
+ $(window).on( 'resize orientationchange', onResize );
636
+ opts._autoHeightOnResize = onResize;
637
+
638
+ if ( autoHeight === 'calc' || ( $.type( autoHeight ) == 'number' && autoHeight >= 0 ) ) {
639
+ if ( autoHeight === 'calc' ) {
640
+ autoHeight = calcSentinelIndex( opts );
641
+ }
642
+ else if ( autoHeight >= opts.slides.length ) {
643
+ autoHeight = 0;
644
+ }
645
+
646
+ // clone existing slide as sentinel
647
+ clone = $( opts.slides[ autoHeight ] ).clone();
648
+
649
+ // #50; remove special attributes from cloned content
650
+ clone.removeAttr( 'id name rel' ).find( '[id],[name],[rel]' ).removeAttr( 'id name rel' );
651
+
652
+ clone.css({
653
+ position: 'static',
654
+ visibility: 'hidden',
655
+ display: 'block'
656
+ }).prependTo( opts.container ).addClass('cycle-sentinel cycle-slide');
657
+ clone.find( '*' ).css( 'visibility', 'hidden' );
658
+
659
+ opts._sentinel = clone;
660
+ }
661
+ else if ( $.type( autoHeight ) == 'string' && /\d+\:\d+/.test( autoHeight ) ) {
662
+ // use ratio
663
+ ratio = autoHeight.match(/(\d+)\:(\d+)/);
664
+ ratio = ratio[1] / ratio[2];
665
+ opts._autoHeightRatio = ratio;
666
+ setTimeout(function() {
667
+ $(window).triggerHandler('resize');
668
+ },15);
669
+ }
670
+
671
+ function onResize() {
672
+ if ( opts._autoHeightRatio ) {
673
+ opts.container.height( opts.container.width() / ratio );
674
+ }
675
+ else {
676
+ clearTimeout( timeout );
677
+ timeout = setTimeout(function() {
678
+ initAutoHeight(e, opts);
679
+ }, 50);
680
+ }
681
+ }
682
+ }
683
+
684
+ function cleanup( e, opts ) {
685
+ if ( opts._sentinel ) {
686
+ opts._sentinel.remove();
687
+ opts._sentinel = null;
688
+ }
689
+ if ( opts._autoHeightOnResize ) {
690
+ $(window).off( 'resize orientationchange', opts._autoHeightOnResize );
691
+ opts._autoHeightOnResize = null;
692
+ }
693
+ }
694
+
695
+ function calcSentinelIndex( opts ) {
696
+ var index = 0, max = -1;
697
+
698
+ // calculate tallest slide index
699
+ opts.slides.each(function(i) {
700
+ var h = $(this).height();
701
+ if ( h > max ) {
702
+ max = h;
703
+ index = i;
704
+ }
705
+ });
706
+ return index;
707
+ }
708
+
709
+ })(jQuery);
710
+
711
+ /*! caption plugin for Cycle2; version: 20130306 */
712
+ (function($) {
713
+ "use strict";
714
+
715
+ $.extend($.fn.cycle.defaults, {
716
+ caption: '> .cycle-caption',
717
+ captionTemplate: '{{slideNum}} / {{slideCount}}',
718
+ overlay: '> .cycle-overlay',
719
+ overlayTemplate: '<div>{{title}}</div><div>{{desc}}</div>',
720
+ captionModule: 'caption'
721
+ });
722
+
723
+ $(document).on( 'cycle-update-view', function( e, opts, slideOpts, currSlide ) {
724
+ if ( opts.captionModule !== 'caption' )
725
+ return;
726
+ var el;
727
+ $.each(['caption','overlay'], function() {
728
+ var name = this;
729
+ var template = slideOpts[name+'Template'];
730
+ var el = opts.API.getComponent( name );
731
+ if( el.length && template ) {
732
+ el.html( opts.API.tmpl( template, slideOpts, opts, currSlide ) );
733
+ el.show();
734
+ }
735
+ else {
736
+ el.hide();
737
+ }
738
+ });
739
+ });
740
+
741
+ $(document).on( 'cycle-destroyed', function( e, opts ) {
742
+ var el;
743
+ $.each(['caption','overlay'], function() {
744
+ var name = this, template = opts[name+'Template'];
745
+ if ( opts[name] && template ) {
746
+ el = opts.API.getComponent( 'caption' );
747
+ el.empty();
748
+ }
749
+ });
750
+ });
751
+
752
+ })(jQuery);
753
+
754
+ /*! command plugin for Cycle2; version: 20130203 */
755
+ (function($) {
756
+ "use strict";
757
+
758
+ var c2 = $.fn.cycle;
759
+
760
+ $.fn.cycle = function( options ) {
761
+ var cmd, cmdFn, opts;
762
+ var args = $.makeArray( arguments );
763
+
764
+ if ( $.type( options ) == 'number' ) {
765
+ return this.cycle( 'goto', options );
766
+ }
767
+
768
+ if ( $.type( options ) == 'string' ) {
769
+ return this.each(function() {
770
+ var cmdArgs;
771
+ cmd = options;
772
+ opts = $(this).data('cycle.opts');
773
+
774
+ if ( opts === undefined ) {
775
+ c2.log('slideshow must be initialized before sending commands; "' + cmd + '" ignored');
776
+ return;
777
+ }
778
+ else {
779
+ cmd = cmd == 'goto' ? 'jump' : cmd; // issue #3; change 'goto' to 'jump' internally
780
+ cmdFn = opts.API[ cmd ];
781
+ if ( $.isFunction( cmdFn )) {
782
+ cmdArgs = $.makeArray( args );
783
+ cmdArgs.shift();
784
+ return cmdFn.apply( opts.API, cmdArgs );
785
+ }
786
+ else {
787
+ c2.log( 'unknown command: ', cmd );
788
+ }
789
+ }
790
+ });
791
+ }
792
+ else {
793
+ return c2.apply( this, arguments );
794
+ }
795
+ };
796
+
797
+ // copy props
798
+ $.extend( $.fn.cycle, c2 );
799
+
800
+ $.extend( c2.API, {
801
+ next: function() {
802
+ var opts = this.opts();
803
+ if ( opts.busy && ! opts.manualTrump )
804
+ return;
805
+
806
+ var count = opts.reverse ? -1 : 1;
807
+ if ( opts.allowWrap === false && ( opts.currSlide + count ) >= opts.slideCount )
808
+ return;
809
+
810
+ opts.API.advanceSlide( count );
811
+ opts.API.trigger('cycle-next', [ opts ]).log('cycle-next');
812
+ },
813
+
814
+ prev: function() {
815
+ var opts = this.opts();
816
+ if ( opts.busy && ! opts.manualTrump )
817
+ return;
818
+ var count = opts.reverse ? 1 : -1;
819
+ if ( opts.allowWrap === false && ( opts.currSlide + count ) < 0 )
820
+ return;
821
+
822
+ opts.API.advanceSlide( count );
823
+ opts.API.trigger('cycle-prev', [ opts ]).log('cycle-prev');
824
+ },
825
+
826
+ destroy: function() {
827
+ var opts = this.opts();
828
+ clearTimeout(opts.timeoutId);
829
+ opts.timeoutId = 0;
830
+ opts.API.stop();
831
+ opts.API.trigger( 'cycle-destroyed', [ opts ] ).log('cycle-destroyed');
832
+ opts.container.removeData( 'cycle.opts' );
833
+
834
+ // #75; remove inline styles
835
+ if ( ! opts.retainStylesOnDestroy ) {
836
+ opts.container.removeAttr( 'style' );
837
+ opts.slides.removeAttr( 'style' );
838
+ opts.slides.removeClass( 'cycle-slide-active' );
839
+ }
840
+ },
841
+
842
+ jump: function( index ) {
843
+ // go to the requested slide
844
+ var fwd;
845
+ var opts = this.opts();
846
+ if ( opts.busy && ! opts.manualTrump )
847
+ return;
848
+ var num = parseInt( index, 10 );
849
+ if (isNaN(num) || num < 0 || num >= opts.slides.length) {
850
+ opts.API.log('goto: invalid slide index: ' + num);
851
+ return;
852
+ }
853
+ if (num == opts.currSlide) {
854
+ opts.API.log('goto: skipping, already on slide', num);
855
+ return;
856
+ }
857
+ opts.nextSlide = num;
858
+ clearTimeout(opts.timeoutId);
859
+ opts.timeoutId = 0;
860
+ opts.API.log('goto: ', num, ' (zero-index)');
861
+ fwd = opts.currSlide < opts.nextSlide;
862
+ opts.API.prepareTx( true, fwd );
863
+ },
864
+
865
+ stop: function() {
866
+ var opts = this.opts();
867
+ var pauseObj = opts.container;
868
+ clearTimeout(opts.timeoutId);
869
+ opts.timeoutId = 0;
870
+ opts.API.stopTransition();
871
+ if ( opts.pauseOnHover ) {
872
+ if ( opts.pauseOnHover !== true )
873
+ pauseObj = $( opts.pauseOnHover );
874
+ pauseObj.off('mouseenter mouseleave');
875
+ }
876
+ opts.API.trigger('cycle-stopped', [ opts ]).log('cycle-stopped');
877
+ },
878
+
879
+ pause: function() {
880
+ var opts = this.opts();
881
+ opts.paused = true;
882
+ opts.API.trigger('cycle-paused', [ opts ]).log('cycle-paused');
883
+ },
884
+
885
+ resume: function() {
886
+ var opts = this.opts();
887
+ opts.paused = false;
888
+ opts.API.trigger('cycle-resumed', [ opts ]).log('cycle-resumed');
889
+ },
890
+
891
+ reinit: function() {
892
+ var opts = this.opts();
893
+ opts.API.destroy();
894
+ opts.container.cycle();
895
+ },
896
+
897
+ remove: function( index ) {
898
+ var opts = this.opts();
899
+ var slide, slideToRemove, slides = [], slideNum = 1;
900
+ for ( var i=0; i < opts.slides.length; i++ ) {
901
+ slide = opts.slides[i];
902
+ if ( i == index ) {
903
+ slideToRemove = slide;
904
+ }
905
+ else {
906
+ slides.push( slide );
907
+ $( slide ).data('cycle.opts').slideNum = slideNum;
908
+ slideNum++;
909
+ }
910
+ }
911
+ if ( slideToRemove ) {
912
+ opts.slides = $( slides );
913
+ opts.slideCount--;
914
+ $( slideToRemove ).remove();
915
+ if (index == opts.currSlide) {
916
+ opts.API.advanceSlide( 1 );
917
+ }
918
+
919
+ opts.API.trigger('cycle-slide-removed', [ opts, index, slideToRemove ]).log('cycle-slide-removed');
920
+ opts.API.updateView();
921
+ }
922
+ }
923
+
924
+ });
925
+
926
+ // listen for clicks on elements with data-cycle-cmd attribute
927
+ $(document).on('click.cycle', '[data-cycle-cmd]', function(e) {
928
+ // issue cycle command
929
+ e.preventDefault();
930
+ var el = $(this);
931
+ var command = el.data('cycle-cmd');
932
+ var context = el.data('cycle-context') || '.cycle-slideshow';
933
+ $(context).cycle(command, el.data('cycle-arg'));
934
+ });
935
+
936
+
937
+ })(jQuery);
938
+
939
+ /*! hash plugin for Cycle2; version: 20121120 */
940
+ (function($) {
941
+ "use strict";
942
+
943
+ $(document).on( 'cycle-pre-initialize', function( e, opts ) {
944
+ onHashChange( opts, true );
945
+
946
+ opts._onHashChange = function() {
947
+ onHashChange( opts, false );
948
+ };
949
+
950
+ $( window ).on( 'hashchange', opts._onHashChange);
951
+ });
952
+
953
+ $(document).on( 'cycle-update-view', function( e, opts, slideOpts ) {
954
+ if ( slideOpts.hash ) {
955
+ opts._hashFence = true;
956
+ window.location.hash = slideOpts.hash;
957
+ }
958
+ });
959
+
960
+ $(document).on( 'cycle-destroyed', function( e, opts) {
961
+ if ( opts._onHashChange ) {
962
+ $( window ).off( 'hashchange', opts._onHashChange );
963
+ }
964
+ });
965
+
966
+ function onHashChange( opts, setStartingSlide ) {
967
+ var hash;
968
+ if ( opts._hashFence ) {
969
+ opts._hashFence = false;
970
+ return;
971
+ }
972
+
973
+ hash = window.location.hash.substring(1);
974
+
975
+ opts.slides.each(function(i) {
976
+ if ( $(this).data( 'cycle-hash' ) == hash ) {
977
+ if ( setStartingSlide === true ) {
978
+ opts.startingSlide = i;
979
+ }
980
+ else {
981
+ opts.nextSlide = i;
982
+ opts.API.prepareTx( true, false );
983
+ }
984
+ return false;
985
+ }
986
+ });
987
+ }
988
+
989
+ })(jQuery);
990
+
991
+ /*! loader plugin for Cycle2; version: 20130307 */
992
+ (function($) {
993
+ "use strict";
994
+
995
+ $.extend($.fn.cycle.defaults, {
996
+ loader: false
997
+ });
998
+
999
+ $(document).on( 'cycle-bootstrap', function( e, opts ) {
1000
+ var addFn;
1001
+
1002
+ if ( !opts.loader )
1003
+ return;
1004
+
1005
+ // override API.add for this slideshow
1006
+ addFn = opts.API.add;
1007
+ opts.API.add = add;
1008
+
1009
+ function add( slides, prepend ) {
1010
+ var slideArr = [];
1011
+ if ( $.type( slides ) == 'string' )
1012
+ slides = $.trim( slides );
1013
+ else if ( $.type( slides) === 'array' ) {
1014
+ for (var i=0; i < slides.length; i++ )
1015
+ slides[i] = $(slides[i])[0];
1016
+ }
1017
+
1018
+ slides = $( slides );
1019
+ var slideCount = slides.length;
1020
+
1021
+ if ( ! slideCount )
1022
+ return;
1023
+
1024
+ slides.hide().appendTo('body').each(function(i) { // appendTo fixes #56
1025
+ var count = 0;
1026
+ var slide = $(this);
1027
+ var images = slide.is('img') ? slide : slide.find('img');
1028
+ slide.data('index', i);
1029
+ // allow some images to be marked as unimportant (and filter out images w/o src value)
1030
+ images = images.filter(':not(.cycle-loader-ignore)').filter(':not([src=""])');
1031
+ if ( ! images.length ) {
1032
+ --slideCount;
1033
+ slideArr.push( slide );
1034
+ return;
1035
+ }
1036
+
1037
+ count = images.length;
1038
+ images.each(function() {
1039
+ // add images that are already loaded
1040
+ if ( this.complete ) {
1041
+ imageLoaded();
1042
+ }
1043
+ else {
1044
+ $(this).load(function() {
1045
+ imageLoaded();
1046
+ }).error(function() {
1047
+ if ( --count === 0 ) {
1048
+ // ignore this slide
1049
+ opts.API.log('slide skipped; img not loaded:', this.src);
1050
+ if ( --slideCount === 0 && opts.loader == 'wait') {
1051
+ addFn.apply( opts.API, [ slideArr, prepend ] );
1052
+ }
1053
+ }
1054
+ });
1055
+ }
1056
+ });
1057
+
1058
+ function imageLoaded() {
1059
+ if ( --count === 0 ) {
1060
+ --slideCount;
1061
+ addSlide( slide );
1062
+ }
1063
+ }
1064
+ });
1065
+
1066
+ if ( slideCount )
1067
+ opts.container.addClass('cycle-loading');
1068
+
1069
+
1070
+ function addSlide( slide ) {
1071
+ var curr;
1072
+ if ( opts.loader == 'wait' ) {
1073
+ slideArr.push( slide );
1074
+ if ( slideCount === 0 ) {
1075
+ // #59; sort slides into original markup order
1076
+ slideArr.sort( sorter );
1077
+ addFn.apply( opts.API, [ slideArr, prepend ] );
1078
+ opts.container.removeClass('cycle-loading');
1079
+ }
1080
+ }
1081
+ else {
1082
+ curr = $(opts.slides[opts.currSlide]);
1083
+ addFn.apply( opts.API, [ slide, prepend ] );
1084
+ curr.show();
1085
+ opts.container.removeClass('cycle-loading');
1086
+ }
1087
+ }
1088
+
1089
+ function sorter(a, b) {
1090
+ return a.data('index') - b.data('index');
1091
+ }
1092
+ }
1093
+ });
1094
+
1095
+ })(jQuery);
1096
+
1097
+ /*! pager plugin for Cycle2; version: 20130203 */
1098
+ (function($) {
1099
+ "use strict";
1100
+
1101
+ $.extend($.fn.cycle.defaults, {
1102
+ pager: '> .cycle-pager',
1103
+ pagerActiveClass: 'cycle-pager-active',
1104
+ pagerEvent: 'click.cycle',
1105
+ pagerTemplate: '<span>&bull;</span>'
1106
+ });
1107
+
1108
+ $(document).on( 'cycle-bootstrap', function( e, opts, API ) {
1109
+ // add method to API
1110
+ API.buildPagerLink = buildPagerLink;
1111
+ });
1112
+
1113
+ $(document).on( 'cycle-slide-added', function( e, opts, slideOpts, slideAdded ) {
1114
+ if ( opts.pager ) {
1115
+ opts.API.buildPagerLink ( opts, slideOpts, slideAdded );
1116
+ opts.API.page = page;
1117
+ }
1118
+ });
1119
+
1120
+ $(document).on( 'cycle-slide-removed', function( e, opts, index, slideRemoved ) {
1121
+ if ( opts.pager ) {
1122
+ var pagers = opts.API.getComponent( 'pager' );
1123
+ pagers.each(function() {
1124
+ var pager = $(this);
1125
+ $( pager.children()[index] ).remove();
1126
+ });
1127
+ }
1128
+ });
1129
+
1130
+ $(document).on( 'cycle-update-view', function( e, opts, slideOpts ) {
1131
+ var pagers;
1132
+
1133
+ if ( opts.pager ) {
1134
+ pagers = opts.API.getComponent( 'pager' );
1135
+ pagers.each(function() {
1136
+ $(this).children().removeClass( opts.pagerActiveClass )
1137
+ .eq( opts.currSlide ).addClass( opts.pagerActiveClass );
1138
+ });
1139
+ }
1140
+ });
1141
+
1142
+ $(document).on( 'cycle-destroyed', function( e, opts ) {
1143
+ var pagers;
1144
+ if (opts.pager && opts.pagerTemplate) {
1145
+ pagers = opts.API.getComponent( 'pager' );
1146
+ pagers.empty();
1147
+ }
1148
+ });
1149
+
1150
+ function buildPagerLink( opts, slideOpts, slide ) {
1151
+ var pagerLink;
1152
+ var pagers = opts.API.getComponent( 'pager' );
1153
+ pagers.each(function() {
1154
+ var pager = $(this);
1155
+ if ( slideOpts.pagerTemplate ) {
1156
+ var markup = opts.API.tmpl( slideOpts.pagerTemplate, slideOpts, opts, slide[0] );
1157
+ pagerLink = $( markup ).appendTo( pager );
1158
+ }
1159
+ else {
1160
+ pagerLink = pager.children().eq( opts.slideCount - 1 );
1161
+ }
1162
+ pagerLink.on( opts.pagerEvent, function(e) {
1163
+ e.preventDefault();
1164
+ opts.API.page( pager, e.currentTarget);
1165
+ });
1166
+ });
1167
+ }
1168
+
1169
+ function page( pager, target ) {
1170
+ /*jshint validthis:true */
1171
+ var opts = this.opts();
1172
+ if ( opts.busy && ! opts.manualTrump )
1173
+ return;
1174
+
1175
+ var index = pager.children().index( target );
1176
+ var nextSlide = index;
1177
+ var fwd = opts.currSlide < nextSlide;
1178
+ if (opts.currSlide == nextSlide) {
1179
+ return; // no op, clicked pager for the currently displayed slide
1180
+ }
1181
+ opts.nextSlide = nextSlide;
1182
+ opts.API.prepareTx( true, fwd );
1183
+ opts.API.trigger('cycle-pager-activated', [opts, pager, target ]);
1184
+ }
1185
+
1186
+ })(jQuery);
1187
+
1188
+
1189
+ /*! prevnext plugin for Cycle2; version: 20130307 */
1190
+ (function($) {
1191
+ "use strict";
1192
+
1193
+ $.extend($.fn.cycle.defaults, {
1194
+ next: '> .cycle-next',
1195
+ nextEvent: 'click.cycle',
1196
+ disabledClass: 'disabled',
1197
+ prev: '> .cycle-prev',
1198
+ prevEvent: 'click.cycle',
1199
+ swipe: false
1200
+ });
1201
+
1202
+ $(document).on( 'cycle-initialized', function( e, opts ) {
1203
+ opts.API.getComponent( 'next' ).on( opts.nextEvent, function(e) {
1204
+ e.preventDefault();
1205
+ opts.API.next();
1206
+ });
1207
+
1208
+ opts.API.getComponent( 'prev' ).on( opts.prevEvent, function(e) {
1209
+ e.preventDefault();
1210
+ opts.API.prev();
1211
+ });
1212
+
1213
+ if ( opts.swipe ) {
1214
+ var nextEvent = opts.swipeVert ? 'swipeUp.cycle' : 'swipeLeft.cycle swipeleft.cycle';
1215
+ var prevEvent = opts.swipeVert ? 'swipeDown.cycle' : 'swipeRight.cycle swiperight.cycle';
1216
+ opts.container.on( nextEvent, function(e) {
1217
+ opts.API.next();
1218
+ });
1219
+ opts.container.on( prevEvent, function() {
1220
+ opts.API.prev();
1221
+ });
1222
+ }
1223
+ });
1224
+
1225
+ $(document).on( 'cycle-update-view', function( e, opts, slideOpts, currSlide ) {
1226
+ if ( opts.allowWrap )
1227
+ return;
1228
+
1229
+ var cls = opts.disabledClass;
1230
+ var next = opts.API.getComponent( 'next' );
1231
+ var prev = opts.API.getComponent( 'prev' );
1232
+ var prevBoundry = opts._prevBoundry || 0;
1233
+ var nextBoundry = opts._nextBoundry || opts.slideCount - 1;
1234
+
1235
+ if ( opts.currSlide == nextBoundry )
1236
+ next.addClass( cls ).prop( 'disabled', true );
1237
+ else
1238
+ next.removeClass( cls ).prop( 'disabled', false );
1239
+
1240
+ if ( opts.currSlide === prevBoundry )
1241
+ prev.addClass( cls ).prop( 'disabled', true );
1242
+ else
1243
+ prev.removeClass( cls ).prop( 'disabled', false );
1244
+ });
1245
+
1246
+
1247
+ $(document).on( 'cycle-destroyed', function( e, opts ) {
1248
+ opts.API.getComponent( 'prev' ).off( opts.nextEvent );
1249
+ opts.API.getComponent( 'next' ).off( opts.prevEvent );
1250
+ opts.container.off( 'swipeleft.cycle swiperight.cycle swipeLeft.cycle swipeRight.cycle swipeUp.cycle swipeDown.cycle' );
1251
+ });
1252
+
1253
+ })(jQuery);
1254
+
1255
+ /*! progressive loader plugin for Cycle2; version: 20130315 */
1256
+ (function($) {
1257
+ "use strict";
1258
+
1259
+ $.extend($.fn.cycle.defaults, {
1260
+ progressive: false
1261
+ });
1262
+
1263
+ $(document).on( 'cycle-pre-initialize', function( e, opts ) {
1264
+ if ( !opts.progressive )
1265
+ return;
1266
+
1267
+ var API = opts.API;
1268
+ var nextFn = API.next;
1269
+ var prevFn = API.prev;
1270
+ var prepareTxFn = API.prepareTx;
1271
+ var type = $.type( opts.progressive );
1272
+ var slides, scriptEl;
1273
+
1274
+ if ( type == 'array' ) {
1275
+ slides = opts.progressive;
1276
+ }
1277
+ else if ($.isFunction( opts.progressive ) ) {
1278
+ slides = opts.progressive( opts );
1279
+ }
1280
+ else if ( type == 'string' ) {
1281
+ scriptEl = $( opts.progressive );
1282
+ slides = $.trim( scriptEl.html() );
1283
+ if ( !slides )
1284
+ return;
1285
+ // is it json array?
1286
+ if ( /^(\[)/.test( slides ) ) {
1287
+ try {
1288
+ slides = $.parseJSON( slides );
1289
+ }
1290
+ catch(err) {
1291
+ API.log( 'error parsing progressive slides', err );
1292
+ return;
1293
+ }
1294
+ }
1295
+ else {
1296
+ // plain text, split on delimeter
1297
+ slides = slides.split( new RegExp( scriptEl.data('cycle-split') || '\n') );
1298
+
1299
+ // #95; look for empty slide
1300
+ if ( ! slides[ slides.length - 1 ] )
1301
+ slides.pop();
1302
+ }
1303
+ }
1304
+
1305
+
1306
+
1307
+ if ( prepareTxFn ) {
1308
+ API.prepareTx = function( manual, fwd ) {
1309
+ var index, slide;
1310
+
1311
+ if ( manual || slides.length === 0 ) {
1312
+ prepareTxFn.apply( opts.API, [ manual, fwd ] );
1313
+ return;
1314
+ }
1315
+
1316
+ if ( fwd && opts.currSlide == ( opts.slideCount-1) ) {
1317
+ slide = slides[ 0 ];
1318
+ slides = slides.slice( 1 );
1319
+ opts.container.one('cycle-slide-added', function(e, opts ) {
1320
+ setTimeout(function() {
1321
+ opts.API.advanceSlide( 1 );
1322
+ },50);
1323
+ });
1324
+ opts.API.add( slide );
1325
+ }
1326
+ else if ( !fwd && opts.currSlide === 0 ) {
1327
+ index = slides.length-1;
1328
+ slide = slides[ index ];
1329
+ slides = slides.slice( 0, index );
1330
+ opts.container.one('cycle-slide-added', function(e, opts ) {
1331
+ setTimeout(function() {
1332
+ opts.currSlide = 1;
1333
+ opts.API.advanceSlide( -1 );
1334
+ },50);
1335
+ });
1336
+ opts.API.add( slide, true );
1337
+ }
1338
+ else {
1339
+ prepareTxFn.apply( opts.API, [ manual, fwd ] );
1340
+ }
1341
+ };
1342
+ }
1343
+
1344
+ if ( nextFn ) {
1345
+ API.next = function() {
1346
+ var opts = this.opts();
1347
+ if ( slides.length && opts.currSlide == ( opts.slideCount - 1 ) ) {
1348
+ var slide = slides[ 0 ];
1349
+ slides = slides.slice( 1 );
1350
+ opts.container.one('cycle-slide-added', function(e, opts ) {
1351
+ nextFn.apply( opts.API );
1352
+ opts.container.removeClass('cycle-loading');
1353
+ });
1354
+ opts.container.addClass('cycle-loading');
1355
+ opts.API.add( slide );
1356
+ }
1357
+ else {
1358
+ nextFn.apply( opts.API );
1359
+ }
1360
+ };
1361
+ }
1362
+
1363
+ if ( prevFn ) {
1364
+ API.prev = function() {
1365
+ var opts = this.opts();
1366
+ if ( slides.length && opts.currSlide === 0 ) {
1367
+ var index = slides.length-1;
1368
+ var slide = slides[ index ];
1369
+ slides = slides.slice( 0, index );
1370
+ opts.container.one('cycle-slide-added', function(e, opts ) {
1371
+ opts.currSlide = 1;
1372
+ opts.API.advanceSlide( -1 );
1373
+ opts.container.removeClass('cycle-loading');
1374
+ });
1375
+ opts.container.addClass('cycle-loading');
1376
+ opts.API.add( slide, true );
1377
+ }
1378
+ else {
1379
+ prevFn.apply( opts.API );
1380
+ }
1381
+ };
1382
+ }
1383
+ });
1384
+
1385
+ })(jQuery);
1386
+
1387
+ /*! tmpl plugin for Cycle2; version: 20121227 */
1388
+ (function($) {
1389
+ "use strict";
1390
+
1391
+ $.extend($.fn.cycle.defaults, {
1392
+ tmplRegex: '{{((.)?.*?)}}'
1393
+ });
1394
+
1395
+ $.extend($.fn.cycle.API, {
1396
+ tmpl: function( str, opts /*, ... */) {
1397
+ var regex = new RegExp( opts.tmplRegex || $.fn.cycle.defaults.tmplRegex, 'g' );
1398
+ var args = $.makeArray( arguments );
1399
+ args.shift();
1400
+ return str.replace(regex, function(_, str) {
1401
+ var i, j, obj, prop, names = str.split('.');
1402
+ for (i=0; i < args.length; i++) {
1403
+ obj = args[i];
1404
+ if ( ! obj )
1405
+ continue;
1406
+ if (names.length > 1) {
1407
+ prop = obj;
1408
+ for (j=0; j < names.length; j++) {
1409
+ obj = prop;
1410
+ prop = prop[ names[j] ] || str;
1411
+ }
1412
+ } else {
1413
+ prop = obj[str];
1414
+ }
1415
+
1416
+ if ($.isFunction(prop))
1417
+ return prop.apply(obj, args);
1418
+ if (prop !== undefined && prop !== null && prop != str)
1419
+ return prop;
1420
+ }
1421
+ return str;
1422
+ });
1423
+ }
1424
+ });
1425
+
1426
+ })(jQuery);