flexslider 2.0.0 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -6,7 +6,7 @@ Flexslider 2 by Woo Themes - https://github.com/woothemes/FlexSlider
6
6
 
7
7
  Add this line to your application's Gemfile:
8
8
 
9
- gem 'flexslider'
9
+ gem 'flexslider', :git => 'https://github.com/constantm/Flexslider-2-Rails-Gem.git'
10
10
 
11
11
  And then execute:
12
12
 
@@ -1,3 +1,3 @@
1
1
  module Flexslider
2
- VERSION = "2.0.0"
2
+ VERSION = "2.0.1"
3
3
  end
@@ -0,0 +1,874 @@
1
+ /*
2
+ * jQuery FlexSlider v2.0
3
+ * http://www.woothemes.com/flexslider/
4
+ *
5
+ * Copyright 2012 WooThemes
6
+ * Free to use under the GPLv2 license.
7
+ * http://www.gnu.org/licenses/gpl-2.0.html
8
+ *
9
+ * Contributing author: Tyler Smith (@mbmufffin)
10
+ */
11
+
12
+ ;(function ($) {
13
+
14
+ //FlexSlider: Object Instance
15
+ $.flexslider = function(el, options) {
16
+ var slider = $(el),
17
+ vars = $.extend({}, $.flexslider.defaults, options),
18
+ namespace = vars.namespace,
19
+ touch = ("ontouchstart" in window) || window.DocumentTouch && document instanceof DocumentTouch,
20
+ eventType = (touch) ? "touchend" : "click",
21
+ vertical = vars.direction === "vertical",
22
+ reverse = vars.reverse,
23
+ carousel = (vars.itemWidth > 0),
24
+ fade = vars.animation === "fade",
25
+ asNav = vars.asNavFor !== "",
26
+ methods = {};
27
+
28
+ // Store a reference to the slider object
29
+ $.data(el, "flexslider", slider);
30
+
31
+ // Privat slider methods
32
+ methods = {
33
+ init: function() {
34
+ slider.animating = false;
35
+ slider.currentSlide = vars.startAt;
36
+ slider.animatingTo = slider.currentSlide;
37
+ slider.atEnd = (slider.currentSlide === 0 || slider.currentSlide === slider.last);
38
+ slider.containerSelector = vars.selector.substr(0,vars.selector.search(' '));
39
+ slider.slides = $(vars.selector, slider);
40
+ slider.container = $(slider.containerSelector, slider);
41
+ slider.count = slider.slides.length;
42
+ // SYNC:
43
+ slider.syncExists = $(vars.sync).length > 0;
44
+ // SLIDE:
45
+ if (vars.animation === "slide") vars.animation = "swing";
46
+ slider.prop = (vertical) ? "top" : "marginLeft";
47
+ slider.args = {};
48
+ // SLIDESHOW:
49
+ slider.manualPause = false;
50
+ // TOUCH/USECSS:
51
+ slider.transitions = !vars.video && !fade && vars.useCSS && (function() {
52
+ var obj = document.createElement('div'),
53
+ props = ['perspectiveProperty', 'WebkitPerspective', 'MozPerspective', 'OPerspective', 'msPerspective'];
54
+ for (var i in props) {
55
+ if ( obj.style[ props[i] ] !== undefined ) {
56
+ slider.pfx = props[i].replace('Perspective','').toLowerCase();
57
+ slider.prop = "-" + slider.pfx + "-transform";
58
+ return true;
59
+ }
60
+ }
61
+ return false;
62
+ }());
63
+ // CONTROLSCONTAINER:
64
+ if (vars.controlsContainer !== "") slider.controlsContainer = $(vars.controlsContainer).length > 0 && $(vars.controlsContainer);
65
+ // MANUAL:
66
+ if (vars.manualControls !== "") slider.manualControls = $(vars.manualControls).length > 0 && $(vars.manualControls);
67
+
68
+ // RANDOMIZE:
69
+ if (vars.randomize) {
70
+ slider.slides.sort(function() { return (Math.round(Math.random())-0.5); });
71
+ slider.container.empty().append(slider.slides);
72
+ }
73
+
74
+ slider.doMath();
75
+
76
+ // ASNAV:
77
+ if (asNav) methods.asNav.setup();
78
+
79
+ // INIT
80
+ slider.setup("init");
81
+
82
+ // CONTROLNAV:
83
+ if (vars.controlNav) methods.controlNav.setup();
84
+
85
+ // DIRECTIONNAV:
86
+ if (vars.directionNav) methods.directionNav.setup();
87
+
88
+ // KEYBOARD:
89
+ if (vars.keyboard && ($(slider.containerSelector).length === 1 || vars.multipleKeyboard)) {
90
+ $(document).bind('keyup', function(event) {
91
+ var keycode = event.keyCode;
92
+ if (!slider.animating && (keycode === 39 || keycode === 37)) {
93
+ var target = (keycode === 39) ? slider.getTarget('next') :
94
+ (keycode === 37) ? slider.getTarget('prev') : false;
95
+ slider.flexAnimate(target, vars.pauseOnAction);
96
+ }
97
+ });
98
+ }
99
+ // MOUSEWHEEL:
100
+ if (vars.mousewheel) {
101
+ slider.bind('mousewheel', function(event, delta, deltaX, deltaY) {
102
+ event.preventDefault();
103
+ var target = (delta < 0) ? slider.getTarget('next') : slider.getTarget('prev');
104
+ slider.flexAnimate(target, vars.pauseOnAction);
105
+ });
106
+ }
107
+
108
+ // PAUSEPLAY
109
+ if (vars.pausePlay) methods.pausePlay.setup();
110
+
111
+ // SLIDSESHOW
112
+ if (vars.slideshow) {
113
+ if (vars.pauseOnHover) {
114
+ slider.hover(function() {
115
+ slider.pause();
116
+ }, function() {
117
+ if (!slider.manualPause) slider.play();
118
+ });
119
+ }
120
+ // initialize animation
121
+ (vars.initDelay > 0) ? setTimeout(slider.play, vars.initDelay) : slider.play();
122
+ }
123
+
124
+ // TOUCH
125
+ if (touch && vars.touch) methods.touch();
126
+
127
+ // FADE&&SMOOTHHEIGHT || SLIDE:
128
+ if (!fade || (fade && vars.smoothHeight)) $(window).bind("resize focus", methods.resize);
129
+
130
+
131
+ // API: start() Callback
132
+ setTimeout(function(){
133
+ vars.start(slider);
134
+ }, 200);
135
+ },
136
+ asNav: {
137
+ setup: function() {
138
+ slider.asNav = true;
139
+ slider.animatingTo = Math.floor(slider.currentSlide/slider.move);
140
+ slider.currentItem = slider.currentSlide;
141
+ slider.slides.removeClass(namespace + "active-slide").eq(slider.currentItem).addClass(namespace + "active-slide");
142
+ slider.slides.click(function(e){
143
+ e.preventDefault();
144
+ var $slide = $(this),
145
+ target = $slide.index();
146
+ if (!$(vars.asNavFor).data('flexslider').animating && !$slide.hasClass('active')) {
147
+ slider.direction = (slider.currentItem < target) ? "next" : "prev";
148
+ slider.flexAnimate(target, vars.pauseOnAction, false, true, true);
149
+ }
150
+ });
151
+ }
152
+ },
153
+ controlNav: {
154
+ setup: function() {
155
+ if (!slider.manualControls) {
156
+ methods.controlNav.setupPaging();
157
+ } else { // MANUALCONTROLS:
158
+ methods.controlNav.setupManual();
159
+ }
160
+ },
161
+ setupPaging: function() {
162
+ var type = (vars.controlNav === "thumbnails") ? 'control-thumbs' : 'control-paging',
163
+ j = 1,
164
+ item;
165
+
166
+ slider.controlNavScaffold = $('<ol class="'+ namespace + 'control-nav ' + namespace + type + '"></ol>');
167
+
168
+ if (slider.pagingCount > 1) {
169
+ for (var i = 0; i < slider.pagingCount; i++) {
170
+ item = (vars.controlNav === "thumbnails") ? '<img src="' + slider.slides.eq(i).attr("data-thumb") + '"/>' : '<a>' + j + '</a>';
171
+ slider.controlNavScaffold.append('<li>' + item + '</li>');
172
+ j++;
173
+ }
174
+ }
175
+
176
+ // CONTROLSCONTAINER:
177
+ (slider.controlsContainer) ? $(slider.controlsContainer).append(slider.controlNavScaffold) : slider.append(slider.controlNavScaffold);
178
+ methods.controlNav.set();
179
+
180
+ methods.controlNav.active();
181
+
182
+ slider.controlNavScaffold.delegate('a, img', eventType, function(event) {
183
+ event.preventDefault();
184
+ var $this = $(this),
185
+ target = slider.controlNav.index($this);
186
+
187
+ if (!$this.hasClass(namespace + 'active')) {
188
+ slider.direction = (target > slider.currentSlide) ? "next" : "prev";
189
+ slider.flexAnimate(target, vars.pauseOnAction);
190
+ }
191
+ });
192
+ // Prevent iOS click event bug
193
+ if (touch) {
194
+ slider.controlNavScaffold.delegate('a', "click touchstart", function(event) {
195
+ event.preventDefault();
196
+ });
197
+ }
198
+ },
199
+ setupManual: function() {
200
+ slider.controlNav = slider.manualControls;
201
+ methods.controlNav.active();
202
+
203
+ slider.controlNav.live(eventType, function(event) {
204
+ event.preventDefault();
205
+ var $this = $(this),
206
+ target = slider.controlNav.index($this);
207
+
208
+ if (!$this.hasClass(namespace + 'active')) {
209
+ (target > slider.currentSlide) ? slider.direction = "next" : slider.direction = "prev";
210
+ slider.flexAnimate(target, vars.pauseOnAction);
211
+ }
212
+ });
213
+ // Prevent iOS click event bug
214
+ if (touch) {
215
+ slider.controlNav.live("click touchstart", function(event) {
216
+ event.preventDefault();
217
+ });
218
+ }
219
+ },
220
+ set: function() {
221
+ var selector = (vars.controlNav === "thumbnails") ? 'img' : 'a';
222
+ slider.controlNav = $('.' + namespace + 'control-nav li ' + selector, (slider.controlsContainer) ? slider.controlsContainer : slider);
223
+ },
224
+ active: function() {
225
+ slider.controlNav.removeClass(namespace + "active").eq(slider.animatingTo).addClass(namespace + "active");
226
+ },
227
+ update: function(action, pos) {
228
+ if (slider.pagingCount > 1 && action === "add") {
229
+ slider.controlNavScaffold.append($('<li><a>' + slider.count + '</a></li>'));
230
+ } else if (slider.pagingCount === 1) {
231
+ slider.controlNavScaffold.find('li').remove();
232
+ } else {
233
+ slider.controlNav.eq(pos).closest('li').remove();
234
+ }
235
+ methods.controlNav.set();
236
+ (slider.pagingCount > 1 && slider.pagingCount !== slider.controlNav.length) ? slider.update(pos, action) : methods.controlNav.active();
237
+ }
238
+ },
239
+ directionNav: {
240
+ setup: function() {
241
+ var directionNavScaffold = $('<ul class="' + namespace + 'direction-nav"><li><a class="' + namespace + 'prev" href="#">' + vars.prevText + '</a></li><li><a class="' + namespace + 'next" href="#">' + vars.nextText + '</a></li></ul>');
242
+
243
+ // CONTROLSCONTAINER:
244
+ if (slider.controlsContainer) {
245
+ $(slider.controlsContainer).append(directionNavScaffold);
246
+ slider.directionNav = $('.' + namespace + 'direction-nav li a', slider.controlsContainer);
247
+ } else {
248
+ slider.append(directionNavScaffold);
249
+ slider.directionNav = $('.' + namespace + 'direction-nav li a', slider);
250
+ }
251
+
252
+ methods.directionNav.update();
253
+
254
+ slider.directionNav.bind(eventType, function(event) {
255
+ event.preventDefault();
256
+ var target = ($(this).hasClass(namespace + 'next')) ? slider.getTarget('next') : slider.getTarget('prev');
257
+ slider.flexAnimate(target, vars.pauseOnAction);
258
+ });
259
+ // Prevent iOS click event bug
260
+ if (touch) {
261
+ slider.directionNav.bind("click touchstart", function(event) {
262
+ event.preventDefault();
263
+ });
264
+ }
265
+ },
266
+ update: function() {
267
+ var disabledClass = namespace + 'disabled';
268
+ if (!vars.animationLoop) {
269
+ if (slider.pagingCount === 1) {
270
+ slider.directionNav.addClass(disabledClass);
271
+ } else if (slider.animatingTo === 0) {
272
+ slider.directionNav.removeClass(disabledClass).filter('.' + namespace + "prev").addClass(disabledClass);
273
+ } else if (slider.animatingTo === slider.last) {
274
+ slider.directionNav.removeClass(disabledClass).filter('.' + namespace + "next").addClass(disabledClass);
275
+ } else {
276
+ slider.directionNav.removeClass(disabledClass);
277
+ }
278
+ }
279
+ }
280
+ },
281
+ pausePlay: {
282
+ setup: function() {
283
+ var pausePlayScaffold = $('<div class="' + namespace + 'pauseplay"><a></a></div>');
284
+
285
+ // CONTROLSCONTAINER:
286
+ if (slider.controlsContainer) {
287
+ slider.controlsContainer.append(pausePlayScaffold);
288
+ slider.pausePlay = $('.' + namespace + 'pauseplay a', slider.controlsContainer);
289
+ } else {
290
+ slider.append(pausePlayScaffold);
291
+ slider.pausePlay = $('.' + namespace + 'pauseplay a', slider);
292
+ }
293
+
294
+ // slider.pausePlay.addClass(pausePlayState).text((pausePlayState == 'pause') ? vars.pauseText : vars.playText);
295
+ methods.pausePlay.update((vars.slideshow) ? namespace + 'pause' : namespace + 'play');
296
+
297
+ slider.pausePlay.bind(eventType, function(event) {
298
+ event.preventDefault();
299
+ if ($(this).hasClass(namespace + 'pause')) {
300
+ slider.pause();
301
+ slider.manualPause = true;
302
+ } else {
303
+ slider.play();
304
+ slider.manualPause = false;
305
+ }
306
+ });
307
+ // Prevent iOS click event bug
308
+ if (touch) {
309
+ slider.pausePlay.bind("click touchstart", function(event) {
310
+ event.preventDefault();
311
+ });
312
+ }
313
+ },
314
+ update: function(state) {
315
+ (state === "play") ? slider.pausePlay.removeClass(namespace + 'pause').addClass(namespace + 'play').text(vars.playText) : slider.pausePlay.removeClass(namespace + 'play').addClass(namespace + 'pause').text(vars.pauseText);
316
+ }
317
+ },
318
+ touch: function() {
319
+ var startX,
320
+ startY,
321
+ offset,
322
+ cwidth,
323
+ dx,
324
+ startT,
325
+ scrolling = false;
326
+
327
+ el.addEventListener('touchstart', onTouchStart, false);
328
+ function onTouchStart(e) {
329
+ if (slider.animating) {
330
+ e.preventDefault();
331
+ } else if (e.touches.length === 1) {
332
+ slider.pause();
333
+ // CAROUSEL:
334
+ cwidth = (vertical) ? slider.h : slider. w;
335
+ startT = Number(new Date());
336
+ // CAROUSEL:
337
+ offset = (carousel && reverse && slider.animatingTo === slider.last) ? 0 :
338
+ (carousel && reverse) ? slider.limit - (((slider.itemW + vars.itemMargin) * slider.move) * slider.animatingTo) :
339
+ (carousel && slider.currentSlide === slider.last) ? slider.limit :
340
+ (carousel) ? ((slider.itemW + vars.itemMargin) * slider.move) * slider.currentSlide :
341
+ (reverse) ? (slider.last - slider.currentSlide + slider.cloneOffset) * cwidth : (slider.currentSlide + slider.cloneOffset) * cwidth;
342
+ startX = (vertical) ? e.touches[0].pageY : e.touches[0].pageX;
343
+ startY = (vertical) ? e.touches[0].pageX : e.touches[0].pageY;
344
+
345
+ el.addEventListener('touchmove', onTouchMove, false);
346
+ el.addEventListener('touchend', onTouchEnd, false);
347
+ }
348
+ }
349
+
350
+ function onTouchMove(e) {
351
+ dx = (vertical) ? startX - e.touches[0].pageY : startX - e.touches[0].pageX;
352
+ scrolling = (vertical) ? (Math.abs(dx) < Math.abs(e.touches[0].pageX - startY)) : (Math.abs(dx) < Math.abs(e.touches[0].pageY - startY));
353
+
354
+ if (!scrolling || Number(new Date()) - startT > 500) {
355
+ e.preventDefault();
356
+ if (!fade && slider.transitions) {
357
+ if (!vars.animationLoop) {
358
+ dx = dx/((slider.currentSlide === 0 && dx < 0 || slider.currentSlide === slider.last && dx > 0) ? (Math.abs(dx)/cwidth+2) : 1);
359
+ }
360
+ slider.setProps(offset + dx, "setTouch");
361
+ }
362
+ }
363
+ }
364
+
365
+ function onTouchEnd(e) {
366
+ if (slider.animatingTo === slider.currentSlide && !scrolling && !(dx === null)) {
367
+ var updateDx = (reverse) ? -dx : dx,
368
+ target = (updateDx > 0) ? slider.getTarget('next') : slider.getTarget('prev');
369
+
370
+ if (slider.canAdvance(target) && (Number(new Date()) - startT < 550 && Math.abs(updateDx) > 20 || Math.abs(updateDx) > cwidth/2)) {
371
+ slider.flexAnimate(target, vars.pauseOnAction);
372
+ } else {
373
+ slider.flexAnimate(slider.currentSlide, vars.pauseOnAction, true);
374
+ }
375
+ }
376
+ // finish the touch by undoing the touch session
377
+ el.removeEventListener('touchmove', onTouchMove, false);
378
+ el.removeEventListener('touchend', onTouchEnd, false);
379
+ startX = null;
380
+ startY = null;
381
+ dx = null;
382
+ offset = null;
383
+ }
384
+ },
385
+ resize: function() {
386
+ if (!slider.animating && slider.is(':visible')) {
387
+ if (!carousel) slider.doMath();
388
+
389
+ if (fade) {
390
+ // SMOOTH HEIGHT:
391
+ methods.smoothHeight();
392
+ } else if (carousel) { //CAROUSEL:
393
+ slider.slides.width(slider.computedW);
394
+ slider.update(slider.pagingCount);
395
+ slider.setProps();
396
+ }
397
+ else if (vertical) { //VERTICAL:
398
+ slider.viewport.height(slider.h);
399
+ slider.setProps(slider.h, "setTotal");
400
+ } else {
401
+ // SMOOTH HEIGHT:
402
+ if (vars.smoothHeight) methods.smoothHeight();
403
+ slider.newSlides.width(slider.computedW);
404
+ slider.setProps(slider.computedW, "setTotal");
405
+ }
406
+ }
407
+ },
408
+ smoothHeight: function(dur) {
409
+ if (!vertical || fade) {
410
+ var $obj = (fade) ? slider : slider.viewport;
411
+ (dur) ? $obj.animate({"height": slider.slides.eq(slider.animatingTo).height()}, dur) : $obj.height(slider.slides.eq(slider.animatingTo).height());
412
+ }
413
+ },
414
+ sync: function(action) {
415
+ var $obj = $(vars.sync).data("flexslider"),
416
+ target = slider.animatingTo;
417
+
418
+ switch (action) {
419
+ case "animate": $obj.flexAnimate(target, vars.pauseOnAction, false, true); break;
420
+ case "play": if (!$obj.playing && !$obj.asNav) { $obj.play(); } break;
421
+ case "pause": $obj.pause(); break;
422
+ }
423
+ }
424
+ }
425
+
426
+ // public methods
427
+ slider.flexAnimate = function(target, pause, override, withSync, fromNav) {
428
+ if (!slider.animating && (slider.canAdvance(target) || override) && slider.is(":visible")) {
429
+ if (asNav && withSync) {
430
+ var master = $(vars.asNavFor).data('flexslider');
431
+ slider.atEnd = target === 0 || target === slider.count - 1;
432
+ master.flexAnimate(target, true, false, true, fromNav);
433
+ slider.direction = (slider.currentItem < target) ? "next" : "prev";
434
+ master.direction = slider.direction;
435
+
436
+ if (Math.ceil((target + 1)/slider.visible) - 1 !== slider.currentSlide && target !== 0) {
437
+ slider.currentItem = target;
438
+ slider.slides.removeClass(namespace + "active-slide").eq(target).addClass(namespace + "active-slide");
439
+ target = Math.floor(target/slider.visible);
440
+ } else {
441
+ slider.currentItem = target;
442
+ slider.slides.removeClass(namespace + "active-slide").eq(target).addClass(namespace + "active-slide");
443
+ return false;
444
+ }
445
+ }
446
+
447
+ slider.animating = true;
448
+ slider.animatingTo = target;
449
+ // API: before() animation Callback
450
+ vars.before(slider);
451
+
452
+ // SLIDESHOW:
453
+ if (pause) slider.pause();
454
+
455
+ // SYNC:
456
+ if (slider.syncExists && !fromNav) methods.sync("animate");
457
+
458
+ // CONTROLNAV
459
+ if (vars.controlNav) methods.controlNav.active();
460
+
461
+ // !CAROUSEL:
462
+ // CANDIDATE: slide active class (for add/remove slide)
463
+ if (!carousel) slider.slides.removeClass(namespace + 'active-slide').eq(target).addClass(namespace + 'active-slide');
464
+
465
+ // INFINITE LOOP:
466
+ // CANDIDATE: atEnd
467
+ slider.atEnd = target === 0 || target === slider.last;
468
+
469
+ // DIRECTIONNAV:
470
+ if (vars.directionNav) methods.directionNav.update();
471
+
472
+ if (target === slider.last) {
473
+ // API: end() of cycle Callback
474
+ vars.end(slider);
475
+ // SLIDESHOW && !INFINITE LOOP:
476
+ if (!vars.animationLoop) slider.pause();
477
+ }
478
+
479
+ // SLIDE:
480
+ if (!fade) {
481
+ var dimension = (vertical) ? slider.slides.filter(':first').height() : slider.computedW,
482
+ margin, slideString, calcNext;
483
+
484
+ // INFINITE LOOP / REVERSE:
485
+ if (carousel) {
486
+ margin = (vars.itemWidth > slider.w) ? vars.itemMargin * 2 : vars.itemMargin;
487
+ calcNext = ((slider.itemW + margin) * slider.move) * slider.animatingTo;
488
+ slideString = (calcNext > slider.limit && slider.visible !== 1) ? slider.limit : calcNext;
489
+ } else if (slider.currentSlide === 0 && target === slider.count - 1 && vars.animationLoop && slider.direction !== "next") {
490
+ slideString = (reverse) ? (slider.count + slider.cloneOffset) * dimension : 0;
491
+ } else if (slider.currentSlide === slider.last && target === 0 && vars.animationLoop && slider.direction !== "prev") {
492
+ slideString = (reverse) ? 0 : (slider.count + 1) * dimension;
493
+ } else {
494
+ slideString = (reverse) ? ((slider.count - 1) - target + slider.cloneOffset) * dimension : (target + slider.cloneOffset) * dimension;
495
+ }
496
+ slider.setProps(slideString, "", vars.animationSpeed);
497
+ if (slider.transitions) {
498
+ if (!vars.animationLoop || !slider.atEnd) {
499
+ slider.animating = false;
500
+ slider.currentSlide = slider.animatingTo;
501
+ }
502
+ slider.container.unbind("webkitTransitionEnd transitionend");
503
+ slider.container.bind("webkitTransitionEnd transitionend", function() {
504
+ slider.wrapup(dimension);
505
+ });
506
+ } else {
507
+ slider.container.animate(slider.args, vars.animationSpeed, vars.easing, function(){
508
+ slider.wrapup(dimension);
509
+ });
510
+ }
511
+ } else { // FADE:
512
+ slider.slides.eq(slider.currentSlide).fadeOut(vars.animationSpeed, vars.easing);
513
+ slider.slides.eq(target).fadeIn(vars.animationSpeed, vars.easing, slider.wrapup);
514
+ }
515
+ // SMOOTH HEIGHT:
516
+ if (vars.smoothHeight) methods.smoothHeight(vars.animationSpeed);
517
+ }
518
+ }
519
+ slider.wrapup = function(dimension) {
520
+ // SLIDE:
521
+ if (!fade && !carousel) {
522
+ if (slider.currentSlide === 0 && slider.animatingTo === slider.last && vars.animationLoop) {
523
+ slider.setProps(dimension, "jumpEnd");
524
+ } else if (slider.currentSlide === slider.last && slider.animatingTo === 0 && vars.animationLoop) {
525
+ slider.setProps(dimension, "jumpStart");
526
+ }
527
+ }
528
+ slider.animating = false;
529
+ slider.currentSlide = slider.animatingTo;
530
+ // API: after() animation Callback
531
+ vars.after(slider);
532
+ }
533
+
534
+ // SLIDESHOW:
535
+ slider.animateSlides = function() {
536
+ if (!slider.animating) slider.flexAnimate(slider.getTarget("next"));
537
+ }
538
+ // SLIDESHOW:
539
+ slider.pause = function() {
540
+ clearInterval(slider.animatedSlides);
541
+ slider.playing = false;
542
+ // PAUSEPLAY:
543
+ if (vars.pausePlay) methods.pausePlay.update("play");
544
+ // SYNC:
545
+ if (slider.syncExists) methods.sync("pause");
546
+ }
547
+ // SLIDESHOW:
548
+ slider.play = function() {
549
+ slider.animatedSlides = setInterval(slider.animateSlides, vars.slideshowSpeed);
550
+ slider.playing = true;
551
+ // PAUSEPLAY:
552
+ if (vars.pausePlay) methods.pausePlay.update("pause");
553
+ // SYNC:
554
+ if (slider.syncExists) methods.sync("play");
555
+ }
556
+ slider.canAdvance = function(target) {
557
+ // ASNAV:
558
+ var last = (asNav) ? slider.pagingCount - 1 : slider.last;
559
+ return (asNav && slider.currentItem === 0 && target === slider.pagingCount - 1 && slider.direction !== "next") ? false :
560
+ (target === slider.currentSlide && !asNav) ? false :
561
+ (vars.animationLoop) ? true :
562
+ (slider.atEnd && slider.currentSlide === 0 && target === last && slider.direction !== "next") ? false :
563
+ (slider.atEnd && slider.currentSlide === last && target === 0 && slider.direction === "next") ? false :
564
+ true;
565
+ }
566
+ slider.getTarget = function(dir) {
567
+ slider.direction = dir;
568
+ if (dir === "next") {
569
+ return (slider.currentSlide === slider.last) ? 0 : slider.currentSlide + 1;
570
+ } else {
571
+ return (slider.currentSlide === 0) ? slider.last : slider.currentSlide - 1;
572
+ }
573
+ }
574
+
575
+ // SLIDE:
576
+ slider.setProps = function(pos, special, dur) {
577
+ var target = (function() {
578
+ var posCheck = (pos) ? pos : ((slider.itemW + vars.itemMargin) * slider.move) * slider.animatingTo,
579
+ posCalc = (function() {
580
+ if (carousel) {
581
+ return (special === "setTouch") ? pos :
582
+ (reverse && slider.animatingTo === slider.last) ? 0 :
583
+ (reverse) ? slider.limit - (((slider.itemW + vars.itemMargin) * slider.move) * slider.animatingTo) :
584
+ (slider.animatingTo === slider.last) ? slider.limit : posCheck;
585
+ } else {
586
+ switch (special) {
587
+ case "setTotal": return (reverse) ? ((slider.count - 1) - slider.currentSlide + slider.cloneOffset) * pos : (slider.currentSlide + slider.cloneOffset) * pos;
588
+ case "setTouch": return (reverse) ? pos : pos;
589
+ case "jumpEnd": return (reverse) ? pos : slider.count * pos;
590
+ case "jumpStart": return (reverse) ? slider.count * pos : pos;
591
+ default: return pos;
592
+ }
593
+ }
594
+ }());
595
+ return (posCalc * -1) + "px";
596
+ }());
597
+
598
+ if (slider.transitions) {
599
+ target = (vertical) ? "translate3d(0," + target + ",0)" : "translate3d(" + target + ",0,0)";
600
+ dur = (dur !== undefined) ? (dur/1000) + "s" : "0s";
601
+ slider.container.css("-" + slider.pfx + "-transition-duration", dur);
602
+ }
603
+
604
+ slider.args[slider.prop] = target;
605
+ if (slider.transitions || dur === undefined) slider.container.css(slider.args);
606
+ }
607
+
608
+ slider.setup = function(type) {
609
+ // SLIDE:
610
+ if (!fade) {
611
+ var sliderOffset, arr;
612
+
613
+ if (type === "init") {
614
+ slider.viewport = $('<div class="flex-viewport"></div>').css({"overflow": "hidden", "position": "relative"}).appendTo(slider).append(slider.container);
615
+ // INFINITE LOOP:
616
+ slider.cloneCount = 0;
617
+ slider.cloneOffset = 0;
618
+ // REVERSE:
619
+ if (reverse) {
620
+ arr = $.makeArray(slider.slides).reverse();
621
+ slider.slides = $(arr);
622
+ slider.container.empty().append(slider.slides);
623
+ }
624
+ }
625
+ // INFINITE LOOP && !CAROUSEL:
626
+ if (vars.animationLoop && !carousel) {
627
+ slider.cloneCount = 2;
628
+ slider.cloneOffset = 1;
629
+ // clear out old clones
630
+ if (type !== "init") slider.container.find('.clone').remove();
631
+ slider.container.append(slider.slides.first().clone().addClass('clone')).prepend(slider.slides.last().clone().addClass('clone'));
632
+ }
633
+ slider.newSlides = $(vars.selector, slider);
634
+
635
+ sliderOffset = (reverse) ? slider.count - 1 - slider.currentSlide + slider.cloneOffset : slider.currentSlide + slider.cloneOffset;
636
+ // VERTICAL:
637
+ if (vertical && !carousel) {
638
+ slider.container.height((slider.count + slider.cloneCount) * 200 + "%").css("position", "absolute").width("100%");
639
+ setTimeout(function(){
640
+ slider.newSlides.css({"display": "block"});
641
+ slider.doMath();
642
+ slider.viewport.height(slider.h);
643
+ slider.setProps(sliderOffset * slider.h, "init");
644
+ }, (type === "init") ? 100 : 0);
645
+ } else {
646
+ slider.container.width((slider.count + slider.cloneCount) * 200 + "%");
647
+ slider.setProps(sliderOffset * slider.computedW, "init");
648
+ setTimeout(function(){
649
+ slider.doMath();
650
+ slider.newSlides.css({"width": slider.computedW, "float": "left", "display": "block"});
651
+ // SMOOTH HEIGHT:
652
+ if (vars.smoothHeight) methods.smoothHeight();
653
+ }, (type === "init") ? 100 : 0);
654
+ }
655
+ } else { // FADE:
656
+ slider.slides.css({"width": "100%", "float": "left", "marginRight": "-100%", "position": "relative"});
657
+ if (type === "init") slider.slides.eq(slider.currentSlide).fadeIn(vars.animationSpeed, vars.easing);
658
+ // SMOOTH HEIGHT:
659
+ if (vars.smoothHeight) methods.smoothHeight();
660
+ }
661
+ // !CAROUSEL:
662
+ // CANDIDATE: active slide
663
+ if (!carousel) slider.slides.removeClass(namespace + "active-slide").eq(slider.currentSlide).addClass(namespace + "active-slide");
664
+ }
665
+
666
+ slider.doMath = function() {
667
+ var slide = slider.slides.first(),
668
+ slideMargin = vars.itemMargin,
669
+ minItems = vars.minItems,
670
+ maxItems = vars.maxItems;
671
+
672
+ slider.w = slider.width();
673
+ slider.h = slide.height();
674
+ slider.boxPadding = slide.outerWidth() - slide.width();
675
+
676
+ // CAROUSEL:
677
+ if (carousel) {
678
+ slider.itemT = vars.itemWidth + slideMargin;
679
+ slider.minW = (minItems) ? minItems * slider.itemT : slider.w;
680
+ slider.maxW = (maxItems) ? maxItems * slider.itemT : slider.w;
681
+ slider.itemW = (slider.minW > slider.w) ? (slider.w - (slideMargin * minItems))/minItems :
682
+ (slider.maxW < slider.w) ? (slider.w - (slideMargin * maxItems))/maxItems :
683
+ (vars.itemWidth > slider.w) ? slider.w : vars.itemWidth;
684
+ slider.visible = Math.floor(slider.w/(slider.itemW + slideMargin));
685
+ slider.move = (vars.move > 0 && vars.move < slider.visible ) ? vars.move : slider.visible;
686
+ slider.pagingCount = Math.ceil(((slider.count - slider.visible)/slider.move) + 1);
687
+ slider.last = slider.pagingCount - 1;
688
+ slider.limit = (slider.pagingCount === 1) ? 0 :
689
+ (vars.itemWidth > slider.w) ? ((slider.itemW + (slideMargin * 2)) * slider.count) - slider.w - slideMargin : ((slider.itemW + slideMargin) * slider.count) - slider.w;
690
+ } else {
691
+ slider.itemW = slider.w;
692
+ slider.pagingCount = slider.count;
693
+ slider.last = slider.count - 1;
694
+ }
695
+ slider.computedW = slider.itemW - slider.boxPadding;
696
+ }
697
+
698
+ slider.update = function(pos, action) {
699
+ slider.doMath();
700
+
701
+ // update currentSlide and slider.animatingTo if necessary
702
+ if (!carousel) {
703
+ if (pos < slider.currentSlide) {
704
+ slider.currentSlide += 1;
705
+ } else if (pos <= slider.currentSlide && pos !== 0) {
706
+ slider.currentSlide -= 1;
707
+ }
708
+ slider.animatingTo = slider.currentSlide;
709
+ }
710
+
711
+ // update controlNav
712
+ if (vars.controlNav && !slider.manualControls) {
713
+ if ((action === "add" && !carousel) || slider.pagingCount > slider.controlNav.length) {
714
+ methods.controlNav.update("add");
715
+ } else if ((action === "remove" && !carousel) || slider.pagingCount < slider.controlNav.length) {
716
+ if (carousel && slider.currentSlide > slider.last) {
717
+ slider.currentSlide -= 1;
718
+ slider.animatingTo -= 1;
719
+ }
720
+ methods.controlNav.update("remove", slider.last);
721
+ }
722
+ }
723
+ // update directionNav
724
+ if (vars.directionNav) methods.directionNav.update();
725
+
726
+ }
727
+
728
+ slider.addSlide = function(obj, pos) {
729
+ var $obj = $(obj);
730
+
731
+ slider.count += 1;
732
+ slider.last = slider.count - 1;
733
+
734
+ // append new slide
735
+ if (vertical && reverse) {
736
+ (pos !== undefined) ? slider.slides.eq(slider.count - pos).after($obj) : slider.container.prepend($obj);
737
+ } else {
738
+ (pos !== undefined) ? slider.slides.eq(pos).before($obj) : slider.container.append($obj);
739
+ }
740
+
741
+ // update currentSlide, animatingTo, controlNav, and directionNav
742
+ slider.update(pos, "add");
743
+
744
+ // update slider.slides
745
+ slider.slides = $(vars.selector + ':not(.clone)', slider);
746
+ // re-setup the slider to accomdate new slide
747
+ slider.setup();
748
+
749
+ //FlexSlider: added() Callback
750
+ vars.added(slider);
751
+ }
752
+ slider.removeSlide = function(obj) {
753
+ var pos = (isNaN(obj)) ? slider.slides.index($(obj)) : obj;
754
+
755
+ // update count
756
+ slider.count -= 1;
757
+ slider.last = slider.count - 1;
758
+
759
+ // remove slide
760
+ if (isNaN(obj)) {
761
+ $(obj, slider.slides).remove();
762
+ } else {
763
+ (vertical && reverse) ? slider.slides.eq(slider.last).remove() : slider.slides.eq(obj).remove();
764
+ }
765
+
766
+ // update currentSlide, animatingTo, controlNav, and directionNav
767
+ slider.doMath();
768
+ slider.update(pos, "remove");
769
+
770
+ // update slider.slides
771
+ slider.slides = $(vars.selector + ':not(.clone)', slider);
772
+ // re-setup the slider to accomdate new slide
773
+ slider.setup();
774
+
775
+ // FlexSlider: removed() Callback
776
+ vars.removed(slider);
777
+ }
778
+
779
+ //FlexSlider: Initialize
780
+ methods.init();
781
+ }
782
+
783
+ //FlexSlider: Default Settings
784
+ $.flexslider.defaults = {
785
+ namespace: "flex-", //{NEW} String: Prefix string attached to the class of every element generated by the plugin
786
+ selector: ".slides > li", //{NEW} Selector: Must match a simple pattern. '{container} > {slide}' -- Ignore pattern at your own peril
787
+ animation: "fade", //String: Select your animation type, "fade" or "slide"
788
+ easing: "swing", //{NEW} String: Determines the easing method used in jQuery transitions. jQuery easing plugin is supported!
789
+ direction: "horizontal", //String: Select the sliding direction, "horizontal" or "vertical"
790
+ reverse: false, //{NEW} Boolean: Reverse the animation direction
791
+ animationLoop: true, //Boolean: Should the animation loop? If false, directionNav will received "disable" classes at either end
792
+ smoothHeight: false, //{NEW} Boolean: Allow height of the slider to animate smoothly in horizontal mode
793
+ startAt: 0, //Integer: The slide that the slider should start on. Array notation (0 = first slide)
794
+ slideshow: true, //Boolean: Animate slider automatically
795
+ slideshowSpeed: 7000, //Integer: Set the speed of the slideshow cycling, in milliseconds
796
+ animationSpeed: 600, //Integer: Set the speed of animations, in milliseconds
797
+ initDelay: 0, //{NEW} Integer: Set an initialization delay, in milliseconds
798
+ randomize: false, //Boolean: Randomize slide order
799
+
800
+ // Usability features
801
+ pauseOnAction: true, //Boolean: Pause the slideshow when interacting with control elements, highly recommended.
802
+ pauseOnHover: false, //Boolean: Pause the slideshow when hovering over slider, then resume when no longer hovering
803
+ useCSS: true, //{NEW} Boolean: Slider will use CSS3 transitions if available
804
+ touch: true, //{NEW} Boolean: Allow touch swipe navigation of the slider on touch-enabled devices
805
+ video: false, //{NEW} Boolean: If using video in the slider, will prevent CSS3 3D Transforms to avoid graphical glitches
806
+
807
+ // Primary Controls
808
+ controlNav: true, //Boolean: Create navigation for paging control of each clide? Note: Leave true for manualControls usage
809
+ directionNav: true, //Boolean: Create navigation for previous/next navigation? (true/false)
810
+ prevText: "Previous", //String: Set the text for the "previous" directionNav item
811
+ nextText: "Next", //String: Set the text for the "next" directionNav item
812
+
813
+ // Secondary Navigation
814
+ keyboard: true, //Boolean: Allow slider navigating via keyboard left/right keys
815
+ multipleKeyboard: false, //{NEW} Boolean: Allow keyboard navigation to affect multiple sliders. Default behavior cuts out keyboard navigation with more than one slider present.
816
+ mousewheel: false, //{UPDATED} Boolean: Requires jquery.mousewheel.js (https://github.com/brandonaaron/jquery-mousewheel) - Allows slider navigating via mousewheel
817
+ pausePlay: false, //Boolean: Create pause/play dynamic element
818
+ pauseText: "Pause", //String: Set the text for the "pause" pausePlay item
819
+ playText: "Play", //String: Set the text for the "play" pausePlay item
820
+
821
+ // Special properties
822
+ controlsContainer: "", //{UPDATED} jQuery Object/Selector: Declare which container the navigation elements should be appended too. Default container is the FlexSlider element. Example use would be $(".flexslider-container"). Property is ignored if given element is not found.
823
+ manualControls: "", //{UPDATED} jQuery Object/Selector: Declare custom control navigation. Examples would be $(".flex-control-nav li") or "#tabs-nav li img", etc. The number of elements in your controlNav should match the number of slides/tabs.
824
+ sync: "", //{NEW} Selector: Mirror the actions performed on this slider with another slider. Use with care.
825
+ asNavFor: "", //{NEW} Selector: Internal property exposed for turning the slider into a thumbnail navigation for another slider
826
+
827
+ // Carousel Options
828
+ itemWidth: 0, //{NEW} Integer: Box-model width of individual carousel items, including horizontal borders and padding.
829
+ itemMargin: 0, //{NEW} Integer: Margin between carousel items.
830
+ minItems: 0, //{NEW} Integer: Minimum number of carousel items that should be visible. Items will resize fluidly when below this.
831
+ maxItems: 0, //{NEW} Integer: Maxmimum number of carousel items that should be visible. Items will resize fluidly when above this limit.
832
+ move: 0, //{NEW} Integer: Number of carousel items that should move on animation. If 0, slider will move all visible items.
833
+
834
+ // Callback API
835
+ start: function(){}, //Callback: function(slider) - Fires when the slider loads the first slide
836
+ before: function(){}, //Callback: function(slider) - Fires asynchronously with each slider animation
837
+ after: function(){}, //Callback: function(slider) - Fires after each slider animation completes
838
+ end: function(){}, //Callback: function(slider) - Fires when the slider reaches the last slide (asynchronous)
839
+ added: function(){}, //{NEW} Callback: function(slider) - Fires after a slide is added
840
+ removed: function(){} //{NEW} Callback: function(slider) - Fires after a slide is removed
841
+ }
842
+
843
+
844
+ //FlexSlider: Plugin Function
845
+ $.fn.flexslider = function(options) {
846
+ options = options || {};
847
+ if (typeof options === "object") {
848
+ return this.each(function() {
849
+ var $this = $(this),
850
+ selector = (options.selector) ? options.selector : ".slides > li",
851
+ $slides = $this.find(selector);
852
+
853
+ if ($slides.length === 1) {
854
+ $slides.fadeIn(400);
855
+ if (options.start) options.start($this);
856
+ } else if ($this.data('flexslider') === undefined) {
857
+ new $.flexslider(this, options);
858
+ }
859
+ });
860
+ } else {
861
+ // Helper strings to quickly perform functions on the slider
862
+ var $slider = $(this).data('flexslider');
863
+ switch (options) {
864
+ case "play": $slider.play(); break;
865
+ case "pause": $slider.pause(); break;
866
+ case "next": $slider.flexAnimate($slider.getTarget("next"), true); break;
867
+ case "prev":
868
+ case "previous": $slider.flexAnimate($slider.getTarget("prev"), true); break;
869
+ default: if (typeof options === "number") $slider.flexAnimate(options, true);
870
+ }
871
+ }
872
+ }
873
+
874
+ })(jQuery);
@@ -0,0 +1,75 @@
1
+ /*
2
+ * jQuery FlexSlider v2.0
3
+ * http://www.woothemes.com/flexslider/
4
+ *
5
+ * Copyright 2012 WooThemes
6
+ * Free to use under the GPLv2 license.
7
+ * http://www.gnu.org/licenses/gpl-2.0.html
8
+ *
9
+ * Contributing author: Tyler Smith (@mbmufffin)
10
+ */
11
+
12
+
13
+ /* Browser Resets */
14
+ .flex-container a:active,
15
+ .flexslider a:active,
16
+ .flex-container a:focus,
17
+ .flexslider a:focus {outline: none;}
18
+ .slides,
19
+ .flex-control-nav,
20
+ .flex-direction-nav {margin: 0; padding: 0; list-style: none;}
21
+
22
+ /* FlexSlider Necessary Styles
23
+ *********************************/
24
+ .flexslider {margin: 0; padding: 0;}
25
+ .flexslider .slides > li {display: none; -webkit-backface-visibility: hidden;} /* Hide the slides before the JS is loaded. Avoids image jumping */
26
+ .flexslider .slides img {width: 100%; display: block;}
27
+ .flex-pauseplay span {text-transform: capitalize;}
28
+
29
+ /* Clearfix for the .slides element */
30
+ .slides:after {content: "."; display: block; clear: both; visibility: hidden; line-height: 0; height: 0;}
31
+ html[xmlns] .slides {display: block;}
32
+ * html .slides {height: 1%;}
33
+
34
+ /* No JavaScript Fallback */
35
+ /* If you are not using another script, such as Modernizr, make sure you
36
+ * include js that eliminates this class on page load */
37
+ .no-js .slides > li:first-child {display: block;}
38
+
39
+
40
+ /* FlexSlider Default Theme
41
+ *********************************/
42
+ .flexslider {margin: 0 0 60px; background: #fff; border: 4px solid #fff; position: relative; -webkit-border-radius: 4px; -moz-border-radius: 4px; -o-border-radius: 4px; border-radius: 4px; box-shadow: 0 1px 4px rgba(0,0,0,.2); -webkit-box-shadow: 0 1px 4px rgba(0,0,0,.2); -moz-box-shadow: 0 1px 4px rgba(0,0,0,.2); -o-box-shadow: 0 1px 4px rgba(0,0,0,.2); zoom: 1;}
43
+ .flex-viewport {max-height: 2000px; -webkit-transition: all 1s ease; -moz-transition: all 1s ease; transition: all 1s ease;}
44
+ .loading .flex-viewport {max-height: 300px;}
45
+ .flexslider .slides {zoom: 1;}
46
+
47
+ .carousel li {margin-right: 5px}
48
+
49
+
50
+ /* Direction Nav */
51
+ .flex-direction-nav a {width: 30px; height: 30px; margin: -20px 0 0; display: block; background: url(images/bg_direction_nav.png) no-repeat 0 0; position: absolute; top: 50%; cursor: pointer; text-indent: -9999px; opacity: 0; -webkit-transition: all .3s ease;}
52
+ .flex-direction-nav .flex-next {background-position: 100% 0; right: -36px; }
53
+ .flex-direction-nav .flex-prev {left: -36px;}
54
+ .flexslider:hover .flex-next {opacity: 0.8; right: 5px;}
55
+ .flexslider:hover .flex-prev {opacity: 0.8; left: 5px;}
56
+ .flexslider:hover .flex-next:hover, .flexslider:hover .flex-prev:hover {opacity: 1;}
57
+ .flex-direction-nav .disabled {opacity: .3!important; filter:alpha(opacity=30); cursor: default;}
58
+
59
+ /* Control Nav */
60
+ .flex-control-nav {width: 100%; position: absolute; bottom: -40px; text-align: center;}
61
+ .flex-control-nav li {margin: 0 6px; display: inline-block; zoom: 1; *display: inline;}
62
+ .flex-control-paging li a {width: 11px; height: 11px; display: block; background: #666; background: rgba(0,0,0,0.5); cursor: pointer; text-indent: -9999px; -webkit-border-radius: 20px; -moz-border-radius: 20px; -o-border-radius: 20px; border-radius: 20px; box-shadow: inset 0 0 3px rgba(0,0,0,0.3);}
63
+ .flex-control-paging li a:hover { background: #333; background: rgba(0,0,0,0.7); }
64
+ .flex-control-paging li a.flex-active { background: #000; background: rgba(0,0,0,0.9); cursor: default; }
65
+
66
+ .flex-control-thumbs {margin: 5px 0 0; position: static; overflow: hidden;}
67
+ .flex-control-thumbs li {width: 25%; float: left; margin: 0;}
68
+ .flex-control-thumbs img {width: 100%; display: block; opacity: .7; cursor: pointer;}
69
+ .flex-control-thumbs img:hover {opacity: 1;}
70
+ .flex-control-thumbs .active {opacity: 1; cursor: default;}
71
+
72
+ @media screen and (max-width: 860px) {
73
+ .flex-direction-nav .flex-prev {opacity: 1; left: 0;}
74
+ .flex-direction-nav .flex-next {opacity: 1; right: 0;}
75
+ }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flexslider
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.0.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-21 00:00:00.000000000Z
12
+ date: 2012-07-21 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Flexslider 2 Rails Gem
15
15
  email:
@@ -18,14 +18,12 @@ executables: []
18
18
  extensions: []
19
19
  extra_rdoc_files: []
20
20
  files:
21
- - .gitignore
22
- - Gemfile
21
+ - lib/flexslider/version.rb
22
+ - lib/flexslider.rb
23
+ - vendor/assets/javascripts/flexslider.js
24
+ - vendor/assets/stylesheets/flexslider.css
23
25
  - LICENSE
24
26
  - README.md
25
- - Rakefile
26
- - flexslider.gemspec
27
- - lib/flexslider.rb
28
- - lib/flexslider/version.rb
29
27
  homepage: http://aisleb.co.za
30
28
  licenses: []
31
29
  post_install_message:
@@ -46,7 +44,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
46
44
  version: '0'
47
45
  requirements: []
48
46
  rubyforge_project:
49
- rubygems_version: 1.8.10
47
+ rubygems_version: 1.8.24
50
48
  signing_key:
51
49
  specification_version: 3
52
50
  summary: Rails wrapper for the Flexslider 2 jQuery carousel by WooThemes
data/.gitignore DELETED
@@ -1,17 +0,0 @@
1
- *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- .yardoc
6
- Gemfile.lock
7
- InstalledFiles
8
- _yardoc
9
- coverage
10
- doc/
11
- lib/bundler/man
12
- pkg
13
- rdoc
14
- spec/reports
15
- test/tmp
16
- test/version_tmp
17
- tmp
data/Gemfile DELETED
@@ -1,4 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in flexslider.gemspec
4
- gemspec
data/Rakefile DELETED
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env rake
2
- require "bundler/gem_tasks"
@@ -1,17 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- require File.expand_path('../lib/flexslider/version', __FILE__)
3
-
4
- Gem::Specification.new do |gem|
5
- gem.authors = ["Constant Meiring"]
6
- gem.email = ["constant@aisleb.co.za"]
7
- gem.description = %q{Flexslider 2 Rails Gem}
8
- gem.summary = %q{Rails wrapper for the Flexslider 2 jQuery carousel by WooThemes}
9
- gem.homepage = "http://aisleb.co.za"
10
-
11
- gem.files = `git ls-files`.split($\)
12
- gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
- gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
- gem.name = "flexslider"
15
- gem.require_paths = ["lib"]
16
- gem.version = Flexslider::VERSION
17
- end