locomotivecms_wagon 1.3.0 → 1.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (118) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -3
  3. data/generators/blank/config/site.yml.tt +20 -6
  4. data/generators/bootstrap/config/site.yml.tt +20 -6
  5. data/generators/{bootstrap → bootstrap2}/Gemfile.tt +0 -0
  6. data/generators/{bootstrap → bootstrap2}/app/content_types/.empty_directory +0 -0
  7. data/generators/{bootstrap → bootstrap2}/app/views/pages/404.liquid +0 -0
  8. data/generators/{bootstrap → bootstrap2}/app/views/pages/404.liquid.haml +0 -0
  9. data/generators/{bootstrap → bootstrap2}/app/views/pages/index.liquid +1 -1
  10. data/generators/{bootstrap → bootstrap2}/app/views/pages/index.liquid.haml +0 -0
  11. data/generators/{bootstrap → bootstrap2}/app/views/snippets/footer.liquid +0 -0
  12. data/generators/{bootstrap → bootstrap2}/app/views/snippets/footer.liquid.haml +0 -0
  13. data/generators/{bootstrap → bootstrap2}/config/deploy.yml +0 -0
  14. data/generators/bootstrap2/config/site.yml.tt +34 -0
  15. data/generators/{bootstrap → bootstrap2}/config/translations.yml +0 -0
  16. data/generators/{bootstrap → bootstrap2}/config.ru +0 -0
  17. data/generators/{bootstrap → bootstrap2}/data/.empty_directory +0 -0
  18. data/generators/bootstrap2/public/fonts/FontAwesome.otf +0 -0
  19. data/generators/bootstrap2/public/fonts/fontawesome-webfont.eot +0 -0
  20. data/generators/bootstrap2/public/fonts/fontawesome-webfont.svg +399 -0
  21. data/generators/bootstrap2/public/fonts/fontawesome-webfont.ttf +0 -0
  22. data/generators/bootstrap2/public/fonts/fontawesome-webfont.woff +0 -0
  23. data/generators/{bootstrap → bootstrap2}/public/javascripts/bootstrap.js +230 -109
  24. data/generators/bootstrap2/public/javascripts/bootstrap.min.js +6 -0
  25. data/generators/{bootstrap → bootstrap2}/public/samples/.empty_directory +0 -0
  26. data/generators/{bootstrap → bootstrap2}/public/stylesheets/application.css.scss +0 -0
  27. data/generators/{bootstrap → bootstrap2}/public/stylesheets/bootstrap-responsive.css +26 -9
  28. data/generators/bootstrap2/public/stylesheets/bootstrap-responsive.min.css +9 -0
  29. data/generators/{bootstrap → bootstrap2}/public/stylesheets/bootstrap.css +2961 -3045
  30. data/generators/bootstrap2/public/stylesheets/bootstrap.min.css +9 -0
  31. data/generators/{bootstrap → bootstrap2}/public/stylesheets/fonts/awesome.css.scss +0 -0
  32. data/generators/bootstrap2/public/stylesheets/fonts/font-awesome-ie7.css +1203 -0
  33. data/generators/bootstrap2/public/stylesheets/fonts/font-awesome-ie7.min.css +384 -0
  34. data/generators/bootstrap2/public/stylesheets/fonts/font-awesome.css +1470 -0
  35. data/generators/bootstrap2/public/stylesheets/fonts/font-awesome.min.css +403 -0
  36. data/generators/bootstrap3/Gemfile.tt +23 -0
  37. data/generators/bootstrap3/app/content_types/.empty_directory +1 -0
  38. data/generators/bootstrap3/app/views/pages/404.liquid +13 -0
  39. data/generators/bootstrap3/app/views/pages/404.liquid.haml +10 -0
  40. data/generators/bootstrap3/app/views/pages/index.liquid +779 -0
  41. data/generators/bootstrap3/app/views/pages/index.liquid.haml +1058 -0
  42. data/generators/bootstrap3/app/views/snippets/footer.liquid +3 -0
  43. data/generators/bootstrap3/app/views/snippets/footer.liquid.haml +2 -0
  44. data/generators/bootstrap3/config/deploy.yml +15 -0
  45. data/generators/bootstrap3/config/site.yml.tt +19 -0
  46. data/generators/bootstrap3/config/translations.yml +8 -0
  47. data/generators/bootstrap3/config.ru +3 -0
  48. data/generators/bootstrap3/data/.empty_directory +1 -0
  49. data/generators/bootstrap3/public/fonts/glyphicons-halflings-regular.eot +0 -0
  50. data/generators/bootstrap3/public/fonts/glyphicons-halflings-regular.svg +228 -0
  51. data/generators/bootstrap3/public/fonts/glyphicons-halflings-regular.ttf +0 -0
  52. data/generators/bootstrap3/public/fonts/glyphicons-halflings-regular.woff +0 -0
  53. data/generators/bootstrap3/public/javascripts/bootstrap.js +1999 -0
  54. data/generators/bootstrap3/public/javascripts/bootstrap.min.js +6 -0
  55. data/generators/bootstrap3/public/samples/apple-touch-icon-114-precomposed.png +0 -0
  56. data/generators/bootstrap3/public/samples/apple-touch-icon-144-precomposed.png +0 -0
  57. data/generators/bootstrap3/public/samples/apple-touch-icon-57-precomposed.png +0 -0
  58. data/generators/bootstrap3/public/samples/apple-touch-icon-72-precomposed.png +0 -0
  59. data/generators/bootstrap3/public/samples/favicon.png +0 -0
  60. data/generators/bootstrap3/public/stylesheets/bootstrap-theme.css +384 -0
  61. data/generators/bootstrap3/public/stylesheets/bootstrap-theme.min.css +1 -0
  62. data/generators/bootstrap3/public/stylesheets/bootstrap.css +6805 -0
  63. data/generators/bootstrap3/public/stylesheets/bootstrap.min.css +9 -0
  64. data/generators/foundation/app/views/pages/index.liquid +13 -18
  65. data/generators/foundation/app/views/pages/index.liquid.haml +51 -58
  66. data/generators/foundation/app/views/snippets/footer.liquid +12 -12
  67. data/generators/foundation/app/views/snippets/footer.liquid.haml +4 -5
  68. data/generators/foundation/config/site.yml.tt +20 -6
  69. data/generators/foundation/public/javascripts/foundation/foundation.abide.js +194 -0
  70. data/generators/foundation/public/javascripts/foundation/foundation.alerts.js +11 -6
  71. data/generators/foundation/public/javascripts/foundation/foundation.clearing.js +6 -6
  72. data/generators/foundation/public/javascripts/foundation/foundation.cookie.js +1 -1
  73. data/generators/foundation/public/javascripts/foundation/foundation.dropdown.js +19 -14
  74. data/generators/foundation/public/javascripts/foundation/foundation.forms.js +77 -37
  75. data/generators/foundation/public/javascripts/foundation/foundation.interchange.js +33 -24
  76. data/generators/foundation/public/javascripts/foundation/foundation.joyride.js +17 -9
  77. data/generators/foundation/public/javascripts/foundation/foundation.js +30 -13
  78. data/generators/foundation/public/javascripts/foundation/foundation.magellan.js +9 -5
  79. data/generators/foundation/public/javascripts/foundation/foundation.orbit.js +361 -319
  80. data/generators/foundation/public/javascripts/foundation/foundation.placeholder.js +426 -159
  81. data/generators/foundation/public/javascripts/foundation/foundation.reveal.js +42 -19
  82. data/generators/foundation/public/javascripts/foundation/foundation.section.js +322 -308
  83. data/generators/foundation/public/javascripts/foundation/foundation.tooltips.js +5 -4
  84. data/generators/foundation/public/javascripts/foundation/foundation.topbar.js +144 -71
  85. data/generators/foundation/public/javascripts/foundation.min.js +15 -32
  86. data/generators/foundation/public/javascripts/vendor/custom.modernizr.js +1 -1
  87. data/generators/foundation/public/javascripts/vendor/jquery.js +4389 -4197
  88. data/generators/foundation/public/javascripts/vendor/zepto.js +117 -1
  89. data/generators/foundation/public/stylesheets/foundation.css +1145 -668
  90. data/generators/foundation/public/stylesheets/foundation.min.css +1 -440
  91. data/generators/foundation/public/stylesheets/normalize.css +162 -91
  92. data/lib/locomotive/wagon/exceptions.rb +1 -1
  93. data/lib/locomotive/wagon/generators/site/bootstrap2.rb +35 -0
  94. data/lib/locomotive/wagon/generators/site/{bootstrap.rb → bootstrap3.rb} +3 -3
  95. data/lib/locomotive/wagon/generators/site/foundation.rb +1 -1
  96. data/lib/locomotive/wagon/generators/site.rb +2 -1
  97. data/lib/locomotive/wagon/liquid/drops/base.rb +4 -2
  98. data/lib/locomotive/wagon/liquid/drops/content_entry.rb +4 -4
  99. data/lib/locomotive/wagon/liquid/drops/page.rb +3 -3
  100. data/lib/locomotive/wagon/liquid/drops/site.rb +3 -3
  101. data/lib/locomotive/wagon/liquid/tags/link_to.rb +2 -1
  102. data/lib/locomotive/wagon/misc/better_errors.rb +1 -1
  103. data/lib/locomotive/wagon/server/renderer.rb +9 -2
  104. data/lib/locomotive/wagon/server.rb +1 -3
  105. data/lib/locomotive/wagon/version.rb +1 -1
  106. data/locomotivecms_wagon.gemspec +2 -2
  107. data/spec/integration/server/basic_spec.rb +7 -0
  108. metadata +68 -35
  109. data/generators/bootstrap/public/fonts/FontAwesome.otf +0 -0
  110. data/generators/bootstrap/public/fonts/fontawesome-webfont.eot +0 -0
  111. data/generators/bootstrap/public/fonts/fontawesome-webfont.ttf +0 -0
  112. data/generators/bootstrap/public/fonts/fontawesome-webfont.woff +0 -0
  113. data/generators/bootstrap/public/javascripts/bootstrap.min.js +0 -6
  114. data/generators/bootstrap/public/stylesheets/bootstrap-responsive.min.css +0 -9
  115. data/generators/bootstrap/public/stylesheets/bootstrap.min.css +0 -726
  116. data/generators/bootstrap/public/stylesheets/fonts/font-awesome-ie7.min.css +0 -23
  117. data/generators/bootstrap/public/stylesheets/fonts/font-awesome.css +0 -460
  118. data/lib/locomotive/wagon/server/not_found.rb +0 -19
@@ -1,214 +1,219 @@
1
1
  ;(function ($, window, document, undefined) {
2
2
  'use strict';
3
3
 
4
- Foundation.libs = Foundation.libs || {};
4
+ var noop = function() {};
5
5
 
6
- Foundation.libs.orbit = {
7
- name: 'orbit',
6
+ var Orbit = function(el, settings) {
7
+ // Don't reinitialize plugin
8
+ if (el.hasClass(settings.slides_container_class)) {
9
+ return this;
10
+ }
8
11
 
9
- version: '4.2.0',
12
+ var self = this,
13
+ container,
14
+ slides_container = el,
15
+ number_container,
16
+ bullets_container,
17
+ timer_container,
18
+ idx = 0,
19
+ animate,
20
+ timer,
21
+ locked = false,
22
+ adjust_height_after = false;
23
+
24
+ slides_container.children().first().addClass(settings.active_slide_class);
25
+
26
+ self.update_slide_number = function(index) {
27
+ if (settings.slide_number) {
28
+ number_container.find('span:first').text(parseInt(index)+1);
29
+ number_container.find('span:last').text(slides_container.children().length);
30
+ }
31
+ if (settings.bullets) {
32
+ bullets_container.children().removeClass(settings.bullets_active_class);
33
+ $(bullets_container.children().get(index)).addClass(settings.bullets_active_class);
34
+ }
35
+ };
36
+
37
+ self.update_active_link = function(index) {
38
+ var link = $('a[data-orbit-link="'+slides_container.children().eq(index).attr('data-orbit-slide')+'"]');
39
+ link.parents('ul').find('[data-orbit-link]').removeClass(settings.bullets_active_class);
40
+ link.addClass(settings.bullets_active_class);
41
+ };
42
+
43
+ self.build_markup = function() {
44
+ slides_container.wrap('<div class="'+settings.container_class+'"></div>');
45
+ container = slides_container.parent();
46
+ slides_container.addClass(settings.slides_container_class);
47
+
48
+ if (settings.navigation_arrows) {
49
+ container.append($('<a href="#"><span></span></a>').addClass(settings.prev_class));
50
+ container.append($('<a href="#"><span></span></a>').addClass(settings.next_class));
51
+ }
10
52
 
11
- settings: {
12
- timer_speed: 10000,
13
- pause_on_hover: true,
14
- resume_on_mouseout: false,
15
- animation_speed: 500,
16
- bullets: true,
17
- stack_on_small: true,
18
- navigation_arrows: true,
19
- slide_number: true,
20
- container_class: 'orbit-container',
21
- stack_on_small_class: 'orbit-stack-on-small',
22
- next_class: 'orbit-next',
23
- prev_class: 'orbit-prev',
24
- timer_container_class: 'orbit-timer',
25
- timer_paused_class: 'paused',
26
- timer_progress_class: 'orbit-progress',
27
- slides_container_class: 'orbit-slides-container',
28
- bullets_container_class: 'orbit-bullets',
29
- bullets_active_class: 'active',
30
- slide_number_class: 'orbit-slide-number',
31
- caption_class: 'orbit-caption',
32
- active_slide_class: 'active',
33
- orbit_transition_class: 'orbit-transitioning'
34
- },
53
+ if (settings.timer) {
54
+ timer_container = $('<div>').addClass(settings.timer_container_class);
55
+ timer_container.append('<span>');
56
+ timer_container.append($('<div>').addClass(settings.timer_progress_class));
57
+ timer_container.addClass(settings.timer_paused_class);
58
+ container.append(timer_container);
59
+ }
35
60
 
36
- init: function (scope, method, options) {
37
- var self = this;
38
- Foundation.inherit(self, 'data_options');
61
+ if (settings.slide_number) {
62
+ number_container = $('<div>').addClass(settings.slide_number_class);
63
+ number_container.append('<span></span> ' + settings.slide_number_text + ' <span></span>');
64
+ container.append(number_container);
65
+ }
39
66
 
40
- if (typeof method === 'object') {
41
- $.extend(true, self.settings, method);
67
+ if (settings.bullets) {
68
+ bullets_container = $('<ol>').addClass(settings.bullets_container_class);
69
+ container.append(bullets_container);
70
+ slides_container.children().each(function(idx, el) {
71
+ var bullet = $('<li>').attr('data-orbit-slide', idx);
72
+ bullets_container.append(bullet);
73
+ });
42
74
  }
43
75
 
44
- if ($(scope).is('[data-orbit]')) {
45
- var scoped_self = $.extend(true, {}, self);
46
- scoped_self._init(idx, el);
76
+ if (settings.stack_on_small) {
77
+ container.addClass(settings.stack_on_small_class);
47
78
  }
48
79
 
49
- $('[data-orbit]', scope).each(function(idx, el) {
50
- var scoped_self = $.extend(true, {}, self);
51
- scoped_self._init(idx, el);
52
- });
53
- },
80
+ self.update_slide_number(0);
81
+ self.update_active_link(0);
82
+ };
83
+
84
+ self._goto = function(next_idx, start_timer) {
85
+ // if (locked) {return false;}
86
+ if (next_idx === idx) {return false;}
87
+ if (typeof timer === 'object') {timer.restart();}
88
+ var slides = slides_container.children();
89
+
90
+ var dir = 'next';
91
+ locked = true;
92
+ if (next_idx < idx) {dir = 'prev';}
93
+ if (next_idx >= slides.length) {next_idx = 0;}
94
+ else if (next_idx < 0) {next_idx = slides.length - 1;}
95
+
96
+ var current = $(slides.get(idx));
97
+ var next = $(slides.get(next_idx));
54
98
 
55
- _container_html: function() {
56
- var self = this;
57
- return '<div class="' + self.settings.container_class + '"></div>';
58
- },
99
+ current.css('zIndex', 2);
100
+ current.removeClass(settings.active_slide_class);
101
+ next.css('zIndex', 4).addClass(settings.active_slide_class);
59
102
 
60
- _bullets_container_html: function($slides) {
61
- var self = this,
62
- $list = $('<ol class="' + self.settings.bullets_container_class + '"></ol>');
63
- $slides.each(function(idx, slide) {
64
- var $item = $('<li data-orbit-slide-number="' + (idx+1) + '" class=""></li>');
65
- if (idx === 0) {
66
- $item.addClass(self.settings.bullets_active_class);
103
+ slides_container.trigger('orbit:before-slide-change');
104
+ settings.before_slide_change();
105
+ self.update_active_link(next_idx);
106
+
107
+ var callback = function() {
108
+ var unlock = function() {
109
+ idx = next_idx;
110
+ locked = false;
111
+ if (start_timer === true) {timer = self.create_timer(); timer.start();}
112
+ self.update_slide_number(idx);
113
+ slides_container.trigger('orbit:after-slide-change',[{slide_number: idx, total_slides: slides.length}]);
114
+ settings.after_slide_change(idx, slides.length);
115
+ };
116
+ if (slides_container.height() != next.height() && settings.variable_height) {
117
+ slides_container.animate({'height': next.height()}, 250, 'linear', unlock);
118
+ } else {
119
+ unlock();
67
120
  }
68
- $list.append($item);
69
- });
70
- return $list;
71
- },
121
+ };
72
122
 
73
- _slide_number_html: function(slide_number, total_slides) {
74
- var self = this,
75
- $container = $('<div class="' + self.settings.slide_number_class + '"></div>');
76
- $container.append('<span>' + slide_number + '</span> of <span>' + total_slides + '</span>');
77
- return $container;
78
- },
123
+ if (slides.length === 1) {callback(); return false;}
79
124
 
80
- _timer_html: function() {
81
- var self = this;
82
- if (typeof self.settings.timer_speed === 'number' && self.settings.timer_speed > 0) {
83
- return '<div class="' + self.settings.timer_container_class
84
- + '"><span></span><div class="' + self.settings.timer_progress_class
85
- + '"></div></div>';
125
+ var start_animation = function() {
126
+ if (dir === 'next') {animate.next(current, next, callback);}
127
+ if (dir === 'prev') {animate.prev(current, next, callback);}
128
+ };
129
+
130
+ if (next.height() > slides_container.height() && settings.variable_height) {
131
+ slides_container.animate({'height': next.height()}, 250, 'linear', start_animation);
86
132
  } else {
87
- return '';
133
+ start_animation();
88
134
  }
89
- },
90
-
91
- _next_html: function() {
92
- var self = this;
93
- return '<a href="#" class="' + self.settings.next_class + '">Next <span></span></a>';
94
- },
95
-
96
- _prev_html: function() {
97
- var self = this;
98
- return '<a href="#" class="' + self.settings.prev_class + '">Prev <span></span></a>';
99
- },
100
-
101
- _init: function (idx, slider) {
102
- var self = this,
103
- $slides_container = $(slider),
104
- $container = $slides_container.wrap(self._container_html()).parent(),
105
- $slides = $slides_container.children();
106
-
107
- $.extend(true, self.settings, self.data_options($slides_container));
135
+ };
136
+
137
+ self.next = function(e) {
138
+ e.stopImmediatePropagation();
139
+ e.preventDefault();
140
+ self._goto(idx + 1);
141
+ };
142
+
143
+ self.prev = function(e) {
144
+ e.stopImmediatePropagation();
145
+ e.preventDefault();
146
+ self._goto(idx - 1);
147
+ };
148
+
149
+ self.link_custom = function(e) {
150
+ e.preventDefault();
151
+ var link = $(this).attr('data-orbit-link');
152
+ if ((typeof link === 'string') && (link = $.trim(link)) != "") {
153
+ var slide = container.find('[data-orbit-slide='+link+']');
154
+ if (slide.index() != -1) {self._goto(slide.index());}
155
+ }
156
+ };
108
157
 
109
- if (self.settings.navigation_arrows) {
110
- $container.append(self._prev_html());
111
- $container.append(self._next_html());
158
+ self.link_bullet = function(e) {
159
+ var index = $(this).attr('data-orbit-slide');
160
+ if ((typeof index === 'string') && (index = $.trim(index)) != "") {
161
+ self._goto(parseInt(index));
112
162
  }
113
- $slides_container.addClass(self.settings.slides_container_class);
114
- if (self.settings.stack_on_small) {
115
- $container.addClass(self.settings.stack_on_small_class);
163
+ }
164
+
165
+ self.timer_callback = function() {
166
+ self._goto(idx + 1, true);
167
+ }
168
+
169
+ self.compute_dimensions = function() {
170
+ var current = $(slides_container.children().get(idx));
171
+ var h = current.height();
172
+ if (!settings.variable_height) {
173
+ slides_container.children().each(function(){
174
+ if ($(this).height() > h) { h = $(this).height(); }
175
+ });
116
176
  }
117
- if (self.settings.slide_number) {
118
- $container.append(self._slide_number_html(1, $slides.length));
177
+ slides_container.height(h);
178
+ };
179
+
180
+ self.create_timer = function() {
181
+ var t = new Timer(
182
+ container.find('.'+settings.timer_container_class),
183
+ settings,
184
+ self.timer_callback
185
+ );
186
+ return t;
187
+ };
188
+
189
+ self.stop_timer = function() {
190
+ if (typeof timer === 'object') timer.stop();
191
+ };
192
+
193
+ self.toggle_timer = function() {
194
+ var t = container.find('.'+settings.timer_container_class);
195
+ if (t.hasClass(settings.timer_paused_class)) {
196
+ if (typeof timer === 'undefined') {timer = self.create_timer();}
197
+ timer.start();
119
198
  }
120
- $container.append(self._timer_html());
121
- if (self.settings.bullets) {
122
- $container.after(self._bullets_container_html($slides));
199
+ else {
200
+ if (typeof timer === 'object') {timer.stop();}
123
201
  }
124
- // To better support the "sliding" effect it's easier
125
- // if we just clone the first and last slides
126
- $slides_container.append($slides.first().clone().attr('data-orbit-slide',''));
127
- $slides_container.prepend($slides.last().clone().attr('data-orbit-slide',''));
128
- // Make the first "real" slide active
129
- $slides_container.css(Foundation.rtl ? 'marginRight' : 'marginLeft', '-100%');
130
- $slides.first().addClass(self.settings.active_slide_class);
131
-
132
- self._init_events($slides_container);
133
- self._init_dimensions($slides_container);
134
- self._start_timer($slides_container);
135
- },
136
-
137
- _init_events: function ($slides_container) {
138
- var self = this,
139
- $container = $slides_container.parent();
140
-
141
- $(window)
142
- .on('load.fndtn.orbit', function() {
143
- $slides_container.height('');
144
- $slides_container.height($slides_container.height($container.height()));
145
- $slides_container.trigger('orbit:ready');
146
- })
147
- .on('resize.fndtn.orbit', function() {
148
- $slides_container.height('');
149
- $slides_container.height($slides_container.height($container.height()));
150
- });
151
-
152
- $(document).on('click.fndtn.orbit', '[data-orbit-link]', function(e) {
153
- e.preventDefault();
154
- var id = $(e.currentTarget).attr('data-orbit-link'),
155
- $slide = $slides_container.find('[data-orbit-slide=' + id + ']').first();
156
-
157
- if ($slide.length === 1) {
158
- self._reset_timer($slides_container, true);
159
- self._goto($slides_container, $slide.index(), function() {});
160
- }
161
- });
162
-
163
- $container.siblings('.' + self.settings.bullets_container_class)
164
- .on('click.fndtn.orbit', '[data-orbit-slide-number]', function(e) {
165
- e.preventDefault();
166
- self._reset_timer($slides_container, true);
167
- self._goto($slides_container, $(e.currentTarget).data('orbit-slide-number'),function() {});
168
- });
169
-
170
- $container
171
- .on('mouseenter.fndtn.orbit', function(e) {
172
- if (self.settings.pause_on_hover) {
173
- self._stop_timer($slides_container);
174
- }
175
- })
176
- .on('mouseleave.fndtn.orbit', function(e) {
177
- if (self.settings.resume_on_mouseout) {
178
- self._start_timer($slides_container);
179
- }
180
- })
181
- .on('orbit:after-slide-change.fndtn.orbit', function(e, orbit) {
182
- var $slide_number = $container.find('.' + self.settings.slide_number_class);
183
-
184
- if ($slide_number.length === 1) {
185
- $slide_number.replaceWith(self._slide_number_html(orbit.slide_number, orbit.total_slides));
186
- }
187
- })
188
- .on('orbit:next-slide.fndtn.orbit click.fndtn.orbit', '.' + self.settings.next_class, function(e) {
189
- e.preventDefault();
190
- self._reset_timer($slides_container, true);
191
- self._goto($slides_container, 'next', function() {});
192
- })
193
- .on('orbit:prev-slide.fndtn.orbit click.fndtn.orbit', '.' + self.settings.prev_class, function(e) {
194
- e.preventDefault();
195
- self._reset_timer($slides_container, true);
196
- self._goto($slides_container, 'prev', function() {});
197
- })
198
- .on('orbit:toggle-play-pause.fndtn.orbit click.fndtn.orbit touchstart.fndtn.orbit', '.' + self.settings.timer_container_class, function(e) {
199
- e.preventDefault();
200
- var $timer = $(e.currentTarget).toggleClass(self.settings.timer_paused_class),
201
- $slides_container = $timer.closest('.' + self.settings.container_class)
202
- .find('.' + self.settings.slides_container_class);
203
-
204
- if ($timer.hasClass(self.settings.timer_paused_class)) {
205
- self._stop_timer($slides_container);
206
- } else {
207
- self._start_timer($slides_container);
208
- }
209
- })
210
- .on('touchstart.fndtn.orbit', function(e) {
211
- if (!e.touches) { e = e.originalEvent; }
202
+ };
203
+
204
+ self.init = function() {
205
+ self.build_markup();
206
+ if (settings.timer) {timer = self.create_timer(); timer.start();}
207
+ animate = new FadeAnimation(settings, slides_container);
208
+ if (settings.animation === 'slide')
209
+ animate = new SlideAnimation(settings, slides_container);
210
+ container.on('click', '.'+settings.next_class, self.next);
211
+ container.on('click', '.'+settings.prev_class, self.prev);
212
+ container.on('click', '[data-orbit-slide]', self.link_bullet);
213
+ container.on('click', self.toggle_timer);
214
+ if (settings.swipe) {
215
+ container.on('touchstart.fndtn.orbit', function(e) {
216
+ if (!e.touches) {e = e.originalEvent;}
212
217
  var data = {
213
218
  start_page_x: e.touches[0].pageX,
214
219
  start_page_y: e.touches[0].pageY,
@@ -216,7 +221,7 @@
216
221
  delta_x: 0,
217
222
  is_scrolling: undefined
218
223
  };
219
- $container.data('swipe-transition', data);
224
+ container.data('swipe-transition', data);
220
225
  e.stopPropagation();
221
226
  })
222
227
  .on('touchmove.fndtn.orbit', function(e) {
@@ -224,10 +229,8 @@
224
229
  // Ignore pinch/zoom events
225
230
  if(e.touches.length > 1 || e.scale && e.scale !== 1) return;
226
231
 
227
- var data = $container.data('swipe-transition');
228
- if (typeof data === 'undefined') {
229
- data = {};
230
- }
232
+ var data = container.data('swipe-transition');
233
+ if (typeof data === 'undefined') {data = {};}
231
234
 
232
235
  data.delta_x = e.touches[0].pageX - data.start_page_x;
233
236
 
@@ -237,154 +240,193 @@
237
240
 
238
241
  if (!data.is_scrolling && !data.active) {
239
242
  e.preventDefault();
240
- self._stop_timer($slides_container);
241
- var direction = (data.delta_x < 0) ? 'next' : 'prev';
243
+ var direction = (data.delta_x < 0) ? (idx+1) : (idx-1);
242
244
  data.active = true;
243
- self._goto($slides_container, direction, function() {});
245
+ self._goto(direction);
244
246
  }
245
247
  })
246
248
  .on('touchend.fndtn.orbit', function(e) {
247
- $container.data('swipe-transition', {});
249
+ container.data('swipe-transition', {});
248
250
  e.stopPropagation();
249
- });
250
- },
251
+ })
252
+ }
253
+ container.on('mouseenter.fndtn.orbit', function(e) {
254
+ if (settings.timer && settings.pause_on_hover) {
255
+ self.stop_timer();
256
+ }
257
+ })
258
+ .on('mouseleave.fndtn.orbit', function(e) {
259
+ if (settings.timer && settings.resume_on_mouseout) {
260
+ timer.start();
261
+ }
262
+ });
263
+
264
+ $(document).on('click', '[data-orbit-link]', self.link_custom);
265
+ $(window).on('resize', self.compute_dimensions);
266
+ $(window).on('load', self.compute_dimensions);
267
+ $(window).on('load', function(){
268
+ container.prev('.preloader').css('display', 'none');
269
+ });
270
+ slides_container.trigger('orbit:ready');
271
+ };
251
272
 
252
- _init_dimensions: function ($slides_container) {
253
- var $container = $slides_container.parent(),
254
- $slides = $slides_container.children();
273
+ self.init();
274
+ };
255
275
 
256
- $slides_container.css('width', $slides.length * 100 + '%');
257
- $slides.css('width', 100 / $slides.length + '%');
258
- $slides_container.height($container.height());
259
- $slides_container.css('width', $slides.length * 100 + '%');
260
- },
276
+ var Timer = function(el, settings, callback) {
277
+ var self = this,
278
+ duration = settings.timer_speed,
279
+ progress = el.find('.'+settings.timer_progress_class),
280
+ start,
281
+ timeout,
282
+ left = -1;
283
+
284
+ this.update_progress = function(w) {
285
+ var new_progress = progress.clone();
286
+ new_progress.attr('style', '');
287
+ new_progress.css('width', w+'%');
288
+ progress.replaceWith(new_progress);
289
+ progress = new_progress;
290
+ };
291
+
292
+ this.restart = function() {
293
+ clearTimeout(timeout);
294
+ el.addClass(settings.timer_paused_class);
295
+ left = -1;
296
+ self.update_progress(0);
297
+ };
298
+
299
+ this.start = function() {
300
+ if (!el.hasClass(settings.timer_paused_class)) {return true;}
301
+ left = (left === -1) ? duration : left;
302
+ el.removeClass(settings.timer_paused_class);
303
+ start = new Date().getTime();
304
+ progress.animate({'width': '100%'}, left, 'linear');
305
+ timeout = setTimeout(function() {
306
+ self.restart();
307
+ callback();
308
+ }, left);
309
+ el.trigger('orbit:timer-started')
310
+ };
311
+
312
+ this.stop = function() {
313
+ if (el.hasClass(settings.timer_paused_class)) {return true;}
314
+ clearTimeout(timeout);
315
+ el.addClass(settings.timer_paused_class);
316
+ var end = new Date().getTime();
317
+ left = left - (end - start);
318
+ var w = 100 - ((left / duration) * 100);
319
+ self.update_progress(w);
320
+ el.trigger('orbit:timer-stopped');
321
+ };
322
+ };
323
+
324
+ var SlideAnimation = function(settings, container) {
325
+ var duration = settings.animation_speed;
326
+ var is_rtl = ($('html[dir=rtl]').length === 1);
327
+ var margin = is_rtl ? 'marginRight' : 'marginLeft';
328
+ var animMargin = {};
329
+ animMargin[margin] = '0%';
330
+
331
+ this.next = function(current, next, callback) {
332
+ next.animate(animMargin, duration, 'linear', function() {
333
+ current.css(margin, '100%');
334
+ callback();
335
+ });
336
+ };
261
337
 
262
- _start_timer: function ($slides_container) {
263
- var self = this,
264
- $container = $slides_container.parent();
338
+ this.prev = function(current, prev, callback) {
339
+ prev.css(margin, '-100%');
340
+ prev.animate(animMargin, duration, 'linear', function() {
341
+ current.css(margin, '100%');
342
+ callback();
343
+ });
344
+ };
345
+ };
265
346
 
266
- var callback = function() {
267
- self._reset_timer($slides_container, false);
268
- self._goto($slides_container, 'next', function() {
269
- self._start_timer($slides_container);
270
- });
271
- };
347
+ var FadeAnimation = function(settings, container) {
348
+ var duration = settings.animation_speed;
349
+ var is_rtl = ($('html[dir=rtl]').length === 1);
350
+ var margin = is_rtl ? 'marginRight' : 'marginLeft';
272
351
 
273
- var $timer = $container.find('.' + self.settings.timer_container_class),
274
- $progress = $timer.find('.' + self.settings.timer_progress_class),
275
- progress_pct = ($progress.width() / $timer.width()),
276
- delay = self.settings.timer_speed - (progress_pct * self.settings.timer_speed);
352
+ this.next = function(current, next, callback) {
353
+ next.css({'margin':'0%', 'opacity':'0.01'});
354
+ next.animate({'opacity':'1'}, duration, 'linear', function() {
355
+ current.css('margin', '100%');
356
+ callback();
357
+ });
358
+ };
277
359
 
278
- $progress.animate({'width': '100%'}, delay, 'linear', callback);
279
- $slides_container.trigger('orbit:timer-started');
280
- },
360
+ this.prev = function(current, prev, callback) {
361
+ prev.css({'margin':'0%', 'opacity':'0.01'});
362
+ prev.animate({'opacity':'1'}, duration, 'linear', function() {
363
+ current.css('margin', '100%');
364
+ callback();
365
+ });
366
+ };
367
+ };
281
368
 
282
- _stop_timer: function ($slides_container) {
283
- var self = this,
284
- $container = $slides_container.parent(),
285
- $timer = $container.find('.' + self.settings.timer_container_class),
286
- $progress = $timer.find('.' + self.settings.timer_progress_class),
287
- progress_pct = $progress.width() / $timer.width();
288
- self._rebuild_timer($container, progress_pct * 100 + '%');
289
- // $progress.stop();
290
- $slides_container.trigger('orbit:timer-stopped');
291
- $timer = $container.find('.' + self.settings.timer_container_class);
292
- $timer.addClass(self.settings.timer_paused_class);
293
- },
294
369
 
295
- _reset_timer: function($slides_container, is_paused) {
296
- var self = this,
297
- $container = $slides_container.parent();
298
- self._rebuild_timer($container, '0%');
299
- if (typeof is_paused === 'boolean' && is_paused) {
300
- var $timer = $container.find('.' + self.settings.timer_container_class);
301
- $timer.addClass(self.settings.timer_paused_class);
302
- }
303
- },
370
+ Foundation.libs = Foundation.libs || {};
304
371
 
305
- _rebuild_timer: function ($container, width_pct) {
306
- // Zepto is unable to stop animations since they
307
- // are css-based. This is a workaround for that
308
- // limitation, which rebuilds the dom element
309
- // thus stopping the animation
310
- var self = this,
311
- $timer = $container.find('.' + self.settings.timer_container_class),
312
- $new_timer = $(self._timer_html()),
313
- $new_timer_progress = $new_timer.find('.' + self.settings.timer_progress_class);
314
-
315
- if (typeof Zepto === 'function') {
316
- $timer.remove();
317
- $container.append($new_timer);
318
- $new_timer_progress.css('width', width_pct);
319
- } else if (typeof jQuery === 'function') {
320
- var $progress = $timer.find('.' + self.settings.timer_progress_class);
321
- $progress.css('width', width_pct);
322
- $progress.stop();
323
- }
372
+ Foundation.libs.orbit = {
373
+ name: 'orbit',
374
+
375
+ version: '4.3.2',
376
+
377
+ settings: {
378
+ animation: 'slide',
379
+ timer_speed: 10000,
380
+ pause_on_hover: true,
381
+ resume_on_mouseout: false,
382
+ animation_speed: 500,
383
+ stack_on_small: false,
384
+ navigation_arrows: true,
385
+ slide_number: true,
386
+ slide_number_text: 'of',
387
+ container_class: 'orbit-container',
388
+ stack_on_small_class: 'orbit-stack-on-small',
389
+ next_class: 'orbit-next',
390
+ prev_class: 'orbit-prev',
391
+ timer_container_class: 'orbit-timer',
392
+ timer_paused_class: 'paused',
393
+ timer_progress_class: 'orbit-progress',
394
+ slides_container_class: 'orbit-slides-container',
395
+ bullets_container_class: 'orbit-bullets',
396
+ bullets_active_class: 'active',
397
+ slide_number_class: 'orbit-slide-number',
398
+ caption_class: 'orbit-caption',
399
+ active_slide_class: 'active',
400
+ orbit_transition_class: 'orbit-transitioning',
401
+ bullets: true,
402
+ timer: true,
403
+ variable_height: false,
404
+ swipe: true,
405
+ before_slide_change: noop,
406
+ after_slide_change: noop
324
407
  },
325
408
 
326
- _goto: function($slides_container, index_or_direction, callback) {
327
- var self = this,
328
- $container = $slides_container.parent(),
329
- $slides = $slides_container.children(),
330
- $active_slide = $slides_container.find('.' + self.settings.active_slide_class),
331
- active_index = $active_slide.index(),
332
- margin_position = Foundation.rtl ? 'marginRight' : 'marginLeft';
409
+ init: function (scope, method, options) {
410
+ var self = this;
411
+ Foundation.inherit(self, 'data_options');
333
412
 
334
- if ($container.hasClass(self.settings.orbit_transition_class)) {
335
- return false;
413
+ if (typeof method === 'object') {
414
+ $.extend(true, self.settings, method);
336
415
  }
337
416
 
338
- if (index_or_direction === 'prev') {
339
- if (active_index === 0) {
340
- active_index = $slides.length - 1;
341
- }
342
- else {
343
- active_index--;
344
- }
345
- }
346
- else if (index_or_direction === 'next') {
347
- active_index = (active_index+1) % $slides.length;
348
- }
349
- else if (typeof index_or_direction === 'number') {
350
- active_index = (index_or_direction % $slides.length);
351
- }
352
- if (active_index === ($slides.length - 1) && index_or_direction === 'next') {
353
- $slides_container.css(margin_position, '0%');
354
- active_index = 1;
355
- }
356
- else if (active_index === 0 && index_or_direction === 'prev') {
357
- $slides_container.css(margin_position, '-' + ($slides.length - 1) * 100 + '%');
358
- active_index = $slides.length - 2;
359
- }
360
- // Start transition, make next slide active
361
- $container.addClass(self.settings.orbit_transition_class);
362
- $active_slide.removeClass(self.settings.active_slide_class);
363
- $($slides[active_index]).addClass(self.settings.active_slide_class);
364
- // Make next bullet active
365
- var $bullets = $container.siblings('.' + self.settings.bullets_container_class);
366
- if ($bullets.length === 1) {
367
- $bullets.children().removeClass(self.settings.bullets_active_class);
368
- $($bullets.children()[active_index-1]).addClass(self.settings.bullets_active_class);
417
+ if ($(scope).is('[data-orbit]')) {
418
+ var $el = $(scope);
419
+ var opts = self.data_options($el);
420
+ new Orbit($el, $.extend({},self.settings, opts));
369
421
  }
370
- var new_margin_left = '-' + (active_index * 100) + '%';
371
- // Check to see if animation will occur, otherwise perform
372
- // callbacks manually
373
- $slides_container.trigger('orbit:before-slide-change');
374
- if ($slides_container.css(margin_position) === new_margin_left) {
375
- $container.removeClass(self.settings.orbit_transition_class);
376
- $slides_container.trigger('orbit:after-slide-change', [{slide_number: active_index, total_slides: $slides_container.children().length - 2}]);
377
- callback();
378
- } else {
379
- var properties = {};
380
- properties[margin_position] = new_margin_left;
381
422
 
382
- $slides_container.animate(properties, self.settings.animation_speed, 'linear', function() {
383
- $container.removeClass(self.settings.orbit_transition_class);
384
- $slides_container.trigger('orbit:after-slide-change', [{slide_number: active_index, total_slides: $slides_container.children().length - 2}]);
385
- callback();
386
- });
387
- }
423
+ $('[data-orbit]', scope).each(function(idx, el) {
424
+ var $el = $(el);
425
+ var opts = self.data_options($el);
426
+ new Orbit($el, $.extend({},self.settings, opts));
427
+ });
388
428
  }
389
429
  };
430
+
431
+
390
432
  }(Foundation.zj, this, this.document));