flexslider 2.0.0 → 2.0.1

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.
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