helios_aim 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. checksums.yaml +15 -0
  2. data/Gemfile +3 -0
  3. data/Gemfile.lock +173 -0
  4. data/LICENSE +19 -0
  5. data/README.md +363 -0
  6. data/Rakefile +10 -0
  7. data/bin/helios +20 -0
  8. data/helios_aim.gemspec +47 -0
  9. data/lib/helios.rb +27 -0
  10. data/lib/helios/backend.rb +64 -0
  11. data/lib/helios/backend/data.rb +40 -0
  12. data/lib/helios/backend/in-app-purchase.rb +43 -0
  13. data/lib/helios/backend/newsstand.rb +97 -0
  14. data/lib/helios/backend/passbook.rb +41 -0
  15. data/lib/helios/backend/push-notification.rb +110 -0
  16. data/lib/helios/commands.rb +4 -0
  17. data/lib/helios/commands/console.rb +21 -0
  18. data/lib/helios/commands/link.rb +19 -0
  19. data/lib/helios/commands/new.rb +76 -0
  20. data/lib/helios/commands/server.rb +52 -0
  21. data/lib/helios/frontend.rb +66 -0
  22. data/lib/helios/frontend/fonts/icons.eot +0 -0
  23. data/lib/helios/frontend/fonts/icons.ttf +0 -0
  24. data/lib/helios/frontend/fonts/icons.woff +0 -0
  25. data/lib/helios/frontend/images/bg.jpg +0 -0
  26. data/lib/helios/frontend/images/helios.svg +33 -0
  27. data/lib/helios/frontend/javascripts/helios.coffee +72 -0
  28. data/lib/helios/frontend/javascripts/helios/collections.coffee +99 -0
  29. data/lib/helios/frontend/javascripts/helios/models.coffee +23 -0
  30. data/lib/helios/frontend/javascripts/helios/router.coffee +50 -0
  31. data/lib/helios/frontend/javascripts/helios/views.coffee +307 -0
  32. data/lib/helios/frontend/javascripts/vendor/backbone.datagrid.js +662 -0
  33. data/lib/helios/frontend/javascripts/vendor/backbone.js +1487 -0
  34. data/lib/helios/frontend/javascripts/vendor/backbone.paginator.js +1046 -0
  35. data/lib/helios/frontend/javascripts/vendor/codemirror.javascript.js +411 -0
  36. data/lib/helios/frontend/javascripts/vendor/codemirror.js +3047 -0
  37. data/lib/helios/frontend/javascripts/vendor/date.js +104 -0
  38. data/lib/helios/frontend/javascripts/vendor/foundation.js +331 -0
  39. data/lib/helios/frontend/javascripts/vendor/foundation/foundation.alerts.js +50 -0
  40. data/lib/helios/frontend/javascripts/vendor/foundation/foundation.clearing.js +478 -0
  41. data/lib/helios/frontend/javascripts/vendor/foundation/foundation.cookie.js +74 -0
  42. data/lib/helios/frontend/javascripts/vendor/foundation/foundation.dropdown.js +122 -0
  43. data/lib/helios/frontend/javascripts/vendor/foundation/foundation.forms.js +403 -0
  44. data/lib/helios/frontend/javascripts/vendor/foundation/foundation.joyride.js +613 -0
  45. data/lib/helios/frontend/javascripts/vendor/foundation/foundation.magellan.js +130 -0
  46. data/lib/helios/frontend/javascripts/vendor/foundation/foundation.orbit.js +355 -0
  47. data/lib/helios/frontend/javascripts/vendor/foundation/foundation.placeholder.js +159 -0
  48. data/lib/helios/frontend/javascripts/vendor/foundation/foundation.reveal.js +272 -0
  49. data/lib/helios/frontend/javascripts/vendor/foundation/foundation.section.js +183 -0
  50. data/lib/helios/frontend/javascripts/vendor/foundation/foundation.tooltips.js +195 -0
  51. data/lib/helios/frontend/javascripts/vendor/foundation/foundation.topbar.js +208 -0
  52. data/lib/helios/frontend/javascripts/vendor/jquery.js +9597 -0
  53. data/lib/helios/frontend/javascripts/vendor/jquery/jquery.fileupload-ui.js +807 -0
  54. data/lib/helios/frontend/javascripts/vendor/jquery/jquery.fileupload.js +1201 -0
  55. data/lib/helios/frontend/javascripts/vendor/jquery/jquery.ui.widget.js +530 -0
  56. data/lib/helios/frontend/javascripts/vendor/linkheaders.js +117 -0
  57. data/lib/helios/frontend/javascripts/vendor/underscore.js +1227 -0
  58. data/lib/helios/frontend/stylesheets/_codemirror.sass +219 -0
  59. data/lib/helios/frontend/stylesheets/_fonts.sass +80 -0
  60. data/lib/helios/frontend/stylesheets/_iphone.sass +141 -0
  61. data/lib/helios/frontend/stylesheets/_settings.scss +989 -0
  62. data/lib/helios/frontend/stylesheets/screen.sass +187 -0
  63. data/lib/helios/frontend/templates/data/entities.jst.tpl +11 -0
  64. data/lib/helios/frontend/templates/in-app-purchase/receipts.jst.tpl +11 -0
  65. data/lib/helios/frontend/templates/navigation.jst.tpl +31 -0
  66. data/lib/helios/frontend/templates/newsstand/issues.jst.tpl +16 -0
  67. data/lib/helios/frontend/templates/newsstand/new.jst.tpl +28 -0
  68. data/lib/helios/frontend/templates/passbook/passes.jst.tpl +11 -0
  69. data/lib/helios/frontend/templates/push-notification/compose.jst.tpl +70 -0
  70. data/lib/helios/frontend/templates/push-notification/devices.jst.tpl +17 -0
  71. data/lib/helios/frontend/views/index.haml +22 -0
  72. data/lib/helios/templates/.env.erb +1 -0
  73. data/lib/helios/templates/.gitignore +3 -0
  74. data/lib/helios/templates/Gemfile.erb +10 -0
  75. data/lib/helios/templates/Procfile.erb +1 -0
  76. data/lib/helios/templates/README.md.erb +4 -0
  77. data/lib/helios/templates/config.ru.erb +11 -0
  78. data/lib/helios/version.rb +3 -0
  79. metadata +475 -0
@@ -0,0 +1,130 @@
1
+ /*jslint unparam: true, browser: true, indent: 2 */
2
+
3
+ ;(function ($, window, document, undefined) {
4
+ 'use strict';
5
+
6
+ Foundation.libs.magellan = {
7
+ name : 'magellan',
8
+
9
+ version : '4.0.0',
10
+
11
+ settings : {
12
+ activeClass: 'active'
13
+ },
14
+
15
+ init : function (scope, method, options) {
16
+ this.scope = scope || this.scope;
17
+ Foundation.inherit(this, 'data_options');
18
+
19
+ if (typeof method === 'object') {
20
+ $.extend(true, this.settings, method);
21
+ }
22
+
23
+ if (typeof method != 'string') {
24
+ if (!this.settings.init) {
25
+ this.fixed_magellan = $("[data-magellan-expedition]");
26
+ this.set_threshold();
27
+ this.last_destination = $('[data-magellan-destination]').last();
28
+ this.events();
29
+ }
30
+
31
+ return this.settings.init;
32
+ } else {
33
+ return this[method].call(this, options);
34
+ }
35
+ },
36
+
37
+ events : function () {
38
+ var self = this;
39
+ $(this.scope).on('arrival.fndtn.magellan', '[data-magellan-arrival]', function (e) {
40
+ var $destination = $(this),
41
+ $expedition = $destination.closest('[data-magellan-expedition]'),
42
+ activeClass = $expedition.attr('data-magellan-active-class')
43
+ || self.settings.activeClass;
44
+
45
+ $destination
46
+ .closest('[data-magellan-expedition]')
47
+ .find('[data-magellan-arrival]')
48
+ .not($destination)
49
+ .removeClass(activeClass);
50
+ $destination.addClass(activeClass);
51
+ });
52
+
53
+ this.fixed_magellan
54
+ .on('update-position.fndtn.magellan', function(){
55
+ var $el = $(this);
56
+ // $el.data("magellan-fixed-position","");
57
+ //$el.data("magellan-top-offset", "");
58
+ })
59
+ .trigger('update-position');
60
+
61
+ $(window)
62
+ .on('resize.fndtn.magellan', function() {
63
+ this.fixed_magellan.trigger('update-position');
64
+ }.bind(this))
65
+
66
+ .on('scroll.fndtn.magellan', function() {
67
+ var windowScrollTop = $(window).scrollTop();
68
+ self.fixed_magellan.each(function() {
69
+ var $expedition = $(this);
70
+ if (typeof $expedition.data('magellan-top-offset') === 'undefined') {
71
+ $expedition.data('magellan-top-offset', $expedition.offset().top);
72
+ }
73
+ if (typeof $expedition.data('magellan-fixed-position') === 'undefined') {
74
+ $expedition.data('magellan-fixed-position', false)
75
+ }
76
+ var fixed_position = (windowScrollTop + self.settings.threshold) > $expedition.data("magellan-top-offset");
77
+ var attr = $expedition.attr('data-magellan-top-offset');
78
+
79
+ if ($expedition.data("magellan-fixed-position") != fixed_position) {
80
+ $expedition.data("magellan-fixed-position", fixed_position);
81
+ if (fixed_position) {
82
+ $expedition.css({position:"fixed", top:0});
83
+ } else {
84
+ $expedition.css({position:"", top:""});
85
+ }
86
+ if (fixed_position && typeof attr != 'undefined' && attr != false) {
87
+ $expedition.css({position:"fixed", top:attr + "px"});
88
+ }
89
+ }
90
+ });
91
+ });
92
+
93
+
94
+ if (this.last_destination.length > 0) {
95
+ $(window).on('scroll.fndtn.magellan', function (e) {
96
+ var windowScrollTop = $(window).scrollTop(),
97
+ scrolltopPlusHeight = windowScrollTop + $(window).height(),
98
+ lastDestinationTop = Math.ceil(self.last_destination.offset().top);
99
+
100
+ $('[data-magellan-destination]').each(function () {
101
+ var $destination = $(this),
102
+ destination_name = $destination.attr('data-magellan-destination'),
103
+ topOffset = $destination.offset().top - windowScrollTop;
104
+
105
+ if (topOffset <= self.settings.threshold) {
106
+ $("[data-magellan-arrival='" + destination_name + "']").trigger('arrival');
107
+ }
108
+ // In large screens we may hit the bottom of the page and dont reach the top of the last magellan-destination, so lets force it
109
+ if (scrolltopPlusHeight >= $(self.scope).height() && lastDestinationTop > windowScrollTop && lastDestinationTop < scrolltopPlusHeight) {
110
+ $('[data-magellan-arrival]').last().trigger('arrival');
111
+ }
112
+ });
113
+ });
114
+ }
115
+
116
+ this.settings.init = true;
117
+ },
118
+
119
+ set_threshold : function () {
120
+ if (!this.settings.threshold) {
121
+ this.settings.threshold = (this.fixed_magellan.length > 0) ?
122
+ this.outerHeight(this.fixed_magellan, true) : 0;
123
+ }
124
+ },
125
+
126
+ off : function () {
127
+ $(this.scope).off('.fndtn.magellan');
128
+ }
129
+ };
130
+ }(Foundation.zj, this, this.document));
@@ -0,0 +1,355 @@
1
+ ;(function ($, window, document, undefined) {
2
+ 'use strict';
3
+
4
+ Foundation.libs = Foundation.libs || {};
5
+
6
+ Foundation.libs.orbit = {
7
+ version: '4.0.0',
8
+
9
+ settings: {
10
+ timer_speed: 10000,
11
+ animation_speed: 500,
12
+ bullets: true,
13
+ stack_on_small: true,
14
+ container_class: 'orbit-container',
15
+ stack_on_small_class: 'orbit-stack-on-small',
16
+ next_class: 'orbit-next',
17
+ prev_class: 'orbit-prev',
18
+ timer_container_class: 'orbit-timer',
19
+ timer_paused_class: 'paused',
20
+ timer_progress_class: 'orbit-progress',
21
+ slides_container_class: 'orbit-slides-container',
22
+ bullets_container_class: 'orbit-bullets',
23
+ bullets_active_class: 'active',
24
+ slide_number_class: 'orbit-slide-number',
25
+ caption_class: 'orbit-caption',
26
+ active_slide_class: 'active',
27
+ orbit_transition_class: 'orbit-transitioning'
28
+ },
29
+
30
+ init: function (scope, method, options) {
31
+ var self = this;
32
+
33
+ if (typeof method === 'object') {
34
+ $.extend(true, self.settings, method);
35
+ }
36
+
37
+ $('[data-orbit]', scope).each($.proxy(self._init, self));
38
+ },
39
+
40
+ _container_html: function() {
41
+ var self = this;
42
+ return '<div class="' + self.settings.container_class + '"></div>';
43
+ },
44
+
45
+ _bullets_container_html: function($slides) {
46
+ var self = this,
47
+ $list = $('<ol class="' + self.settings.bullets_container_class + '"></ol>');
48
+ $slides.each(function(idx, slide) {
49
+ var $item = $('<li data-orbit-slide-number="' + (idx+1) + '" class=""></li>');
50
+ if (idx === 0) {
51
+ $item.addClass(self.settings.bullets_active_class);
52
+ }
53
+ $list.append($item);
54
+ });
55
+ return $list;
56
+ },
57
+
58
+ _slide_number_html: function(slide_number, total_slides) {
59
+ var self = this,
60
+ $container = $('<div class="' + self.settings.slide_number_class + '"></div>');
61
+ $container.append('<span>' + slide_number + '</span> of <span>' + total_slides + '</span>');
62
+ return $container;
63
+ },
64
+
65
+ _timer_html: function() {
66
+ var self = this;
67
+ if (typeof self.settings.timer_speed === 'number' && self.settings.timer_speed > 0) {
68
+ return '<div class="' + self.settings.timer_container_class
69
+ + '"><span></span><div class="' + self.settings.timer_progress_class
70
+ + '"></div></div>';
71
+ } else {
72
+ return '';
73
+ }
74
+ },
75
+
76
+ _next_html: function() {
77
+ var self = this;
78
+ return '<a href="#" class="' + self.settings.next_class + '">Next <span></span></a>';
79
+ },
80
+
81
+ _prev_html: function() {
82
+ var self = this;
83
+ return '<a href="#" class="' + self.settings.prev_class + '">Prev <span></span></a>';
84
+ },
85
+
86
+ _init: function (idx, slider) {
87
+ var self = this,
88
+ $slides_container = $(slider),
89
+ $container = $slides_container.wrap(self._container_html()).parent(),
90
+ $slides = $slides_container.children();
91
+
92
+ $container.append(self._prev_html());
93
+ $container.append(self._next_html());
94
+ $slides_container.addClass(self.settings.slides_container_class);
95
+ if (self.settings.stack_on_small) {
96
+ $container.addClass(self.settings.stack_on_small_class);
97
+ }
98
+ $container.append(self._slide_number_html(1, $slides.length));
99
+ $container.append(self._timer_html());
100
+ if (self.settings.bullets) {
101
+ $container.after(self._bullets_container_html($slides));
102
+ }
103
+ // To better support the "sliding" effect it's easier
104
+ // if we just clone the first and last slides
105
+ $slides_container.append($slides.first().clone().attr('data-orbit-slide',''));
106
+ $slides_container.prepend($slides.last().clone().attr('data-orbit-slide',''));
107
+ // Make the first "real" slide active
108
+ $slides_container.css('marginLeft', '-100%');
109
+ $slides.first().addClass(self.settings.active_slide_class);
110
+
111
+ self._init_events($slides_container);
112
+ self._init_dimensions($slides_container);
113
+ self._start_timer($slides_container);
114
+ },
115
+
116
+ _init_events: function ($slides_container) {
117
+ var self = this,
118
+ $container = $slides_container.parent();
119
+
120
+ $(window)
121
+ .on('load.fndtn.orbit', function() {
122
+ $slides_container.height('');
123
+ $slides_container.height($slides_container.height($container.height()));
124
+ $slides_container.trigger('orbit:ready');
125
+ })
126
+ .on('resize.fndtn.orbit', function() {
127
+ $slides_container.height('');
128
+ $slides_container.height($slides_container.height($container.height()));
129
+ });
130
+
131
+ $(document).on('click.fndtn.orbit', '[data-orbit-link]', function(e) {
132
+ e.preventDefault();
133
+ var id = $(e.currentTarget).attr('data-orbit-link'),
134
+ $slide = $slides_container.find('[data-orbit-slide=' + id + ']').first();
135
+
136
+ if ($slide.length === 1) {
137
+ self._reset_timer($slides_container, true);
138
+ self.goto($slides_container, $slide.index(), function() {});
139
+ }
140
+ });
141
+
142
+ $container.siblings('.' + self.settings.bullets_container_class)
143
+ .on('click.fndtn.orbit', '[data-orbit-slide-number]', function(e) {
144
+ e.preventDefault();
145
+ self._reset_timer($slides_container, true);
146
+ self.goto($slides_container, $(e.currentTarget).data('orbit-slide-number'),function() {});
147
+ });
148
+
149
+ $container
150
+ .on('orbit:after-slide-change.fndtn.orbit', function(e, orbit) {
151
+ var $slide_number = $container.find('.' + self.settings.slide_number_class);
152
+
153
+ if ($slide_number.length === 1) {
154
+ $slide_number.replaceWith(self._slide_number_html(orbit.slide_number, orbit.total_slides));
155
+ }
156
+ })
157
+ .on('orbit:next-slide.fndtn.orbit click.fndtn.orbit', '.' + self.settings.next_class, function(e) {
158
+ e.preventDefault();
159
+ self._reset_timer($slides_container, true);
160
+ self.goto($slides_container, 'next', function() {});
161
+ })
162
+ .on('orbit:prev-slide.fndtn.orbit click.fndtn.orbit', '.' + self.settings.prev_class, function(e) {
163
+ e.preventDefault();
164
+ self._reset_timer($slides_container, true);
165
+ self.goto($slides_container, 'prev', function() {});
166
+ })
167
+ .on('orbit:toggle-play-pause.fndtn.orbit click.fndtn.orbit touchstart.fndtn.orbit', '.' + self.settings.timer_container_class, function(e) {
168
+ e.preventDefault();
169
+ var $timer = $(e.currentTarget).toggleClass(self.settings.timer_paused_class),
170
+ $slides_container = $timer.closest('.' + self.settings.container_class)
171
+ .find('.' + self.settings.slides_container_class);
172
+
173
+ if ($timer.hasClass(self.settings.timer_paused_class)) {
174
+ self._stop_timer($slides_container);
175
+ } else {
176
+ self._start_timer($slides_container);
177
+ }
178
+ })
179
+ .on('touchstart.fndtn.orbit', function(e) {
180
+ var data = {
181
+ start_page_x: e.touches[0].pageX,
182
+ start_page_y: e.touches[0].pageY,
183
+ start_time: (new Date()).getTime(),
184
+ delta_x: 0,
185
+ is_scrolling: undefined
186
+ };
187
+ $container.data('swipe-transition', data);
188
+ e.stopPropagation();
189
+ })
190
+ .on('touchmove.fndtn.orbit', function(e) {
191
+ // Ignore pinch/zoom events
192
+ if(e.touches.length > 1 || e.scale && e.scale !== 1) return;
193
+
194
+ var data = $container.data('swipe-transition');
195
+ if (typeof data === 'undefined') {
196
+ data = {};
197
+ }
198
+
199
+ data.delta_x = e.touches[0].pageX - data.start_page_x;
200
+
201
+ if ( typeof data.is_scrolling === 'undefined') {
202
+ data.is_scrolling = !!( data.is_scrolling || Math.abs(data.delta_x) < Math.abs(e.touches[0].pageY - data.start_page_y) );
203
+ }
204
+
205
+ if (!data.is_scrolling && !data.active) {
206
+ e.preventDefault();
207
+ self._stop_timer($slides_container);
208
+ var direction = (data.delta_x < 0) ? 'next' : 'prev';
209
+ data.active = true;
210
+ self.goto($slides_container, direction, function() {});
211
+ }
212
+ })
213
+ .on('touchend.fndtn.orbit', function(e) {
214
+ $container.data('swipe-transition', {});
215
+ e.stopPropagation();
216
+ });
217
+ },
218
+
219
+ _init_dimensions: function ($slides_container) {
220
+ var $container = $slides_container.parent(),
221
+ $slides = $slides_container.children();
222
+
223
+ $slides_container.css('width', $slides.length * 100 + '%');
224
+ $slides.css('width', 100 / $slides.length + '%');
225
+ $slides_container.height($container.height());
226
+ $slides_container.css('width', $slides.length * 100 + '%');
227
+ },
228
+
229
+ _start_timer: function ($slides_container) {
230
+ var self = this,
231
+ $container = $slides_container.parent();
232
+
233
+ var callback = function() {
234
+ self._reset_timer($slides_container, false);
235
+ self.goto($slides_container, 'next', function() {
236
+ self._start_timer($slides_container);
237
+ });
238
+ };
239
+
240
+ var $timer = $container.find('.' + self.settings.timer_container_class),
241
+ $progress = $timer.find('.' + self.settings.timer_progress_class),
242
+ progress_pct = ($progress.width() / $timer.width()),
243
+ delay = self.settings.timer_speed - (progress_pct * self.settings.timer_speed);
244
+
245
+ $progress.animate({'width': '100%'}, delay, 'linear', callback).data('is-original', 'beans?');
246
+ $slides_container.trigger('orbit:timer-started');
247
+ },
248
+
249
+ _stop_timer: function ($slides_container) {
250
+ var self = this,
251
+ $container = $slides_container.parent(),
252
+ $timer = $container.find('.' + self.settings.timer_container_class),
253
+ $progress = $timer.find('.' + self.settings.timer_progress_class),
254
+ progress_pct = $progress.width() / $timer.width()
255
+ self._rebuild_timer($container, progress_pct * 100 + '%');
256
+ // $progress.stop();
257
+ $slides_container.trigger('orbit:timer-stopped');
258
+ $timer = $container.find('.' + self.settings.timer_container_class);
259
+ $timer.addClass(self.settings.timer_paused_class);
260
+ },
261
+
262
+ _reset_timer: function($slides_container, is_paused) {
263
+ var self = this,
264
+ $container = $slides_container.parent();
265
+ self._rebuild_timer($container, '0%');
266
+ if (typeof is_paused === 'boolean' && is_paused) {
267
+ var $timer = $container.find('.' + self.settings.timer_container_class);
268
+ $timer.addClass(self.settings.timer_paused_class);
269
+ }
270
+ },
271
+
272
+ _rebuild_timer: function ($container, width_pct) {
273
+ // Zepto is unable to stop animations since they
274
+ // are css-based. This is a workaround for that
275
+ // limitation, which rebuilds the dom element
276
+ // thus stopping the animation
277
+ var self = this,
278
+ $timer = $container.find('.' + self.settings.timer_container_class),
279
+ $new_timer = $(self._timer_html()),
280
+ $new_timer_progress = $new_timer.find('.' + self.settings.timer_progress_class);
281
+
282
+ if (typeof Zepto === 'function') {
283
+ $timer.remove();
284
+ $container.append($new_timer);
285
+ $new_timer_progress.css('width', width_pct);
286
+ } else if (typeof jQuery === 'function') {
287
+ var $progress = $timer.find('.' + self.settings.timer_progress_class);
288
+ $progress.css('width', width_pct);
289
+ $progress.stop();
290
+ }
291
+ },
292
+
293
+ goto: function($slides_container, index_or_direction, callback) {
294
+ var self = this,
295
+ $container = $slides_container.parent(),
296
+ $slides = $slides_container.children(),
297
+ $active_slide = $slides_container.find('.' + self.settings.active_slide_class),
298
+ active_index = $active_slide.index();
299
+
300
+ if ($container.hasClass(self.settings.orbit_transition_class)) {
301
+ return false;
302
+ }
303
+
304
+ if (index_or_direction === 'prev') {
305
+ if (active_index === 0) {
306
+ active_index = $slides.length - 1;
307
+ }
308
+ else {
309
+ active_index--;
310
+ }
311
+ }
312
+ else if (index_or_direction === 'next') {
313
+ active_index = (active_index+1) % $slides.length;
314
+ }
315
+ else if (typeof index_or_direction === 'number') {
316
+ active_index = (index_or_direction % $slides.length);
317
+ }
318
+ if (active_index === ($slides.length - 1) && index_or_direction === 'next') {
319
+ $slides_container.css('marginLeft', '0%');
320
+ active_index = 1;
321
+ }
322
+ else if (active_index === 0 && index_or_direction === 'prev') {
323
+ $slides_container.css('marginLeft', '-' + ($slides.length - 1) * 100 + '%');
324
+ active_index = $slides.length - 2;
325
+ }
326
+ // Start transition, make next slide active
327
+ $container.addClass(self.settings.orbit_transition_class);
328
+ $active_slide.removeClass(self.settings.active_slide_class);
329
+ $($slides[active_index]).addClass(self.settings.active_slide_class);
330
+ // Make next bullet active
331
+ var $bullets = $container.siblings('.' + self.settings.bullets_container_class);
332
+ if ($bullets.length === 1) {
333
+ $bullets.children().removeClass(self.settings.bullets_active_class);
334
+ $($bullets.children()[active_index-1]).addClass(self.settings.bullets_active_class);
335
+ }
336
+ var new_margin_left = '-' + (active_index * 100) + '%';
337
+ // Check to see if animation will occur, otherwise perform
338
+ // callbacks manually
339
+ $slides_container.trigger('orbit:before-slide-change');
340
+ if ($slides_container.css('marginLeft') === new_margin_left) {
341
+ $container.removeClass(self.settings.orbit_transition_class);
342
+ $slides_container.trigger('orbit:after-slide-change', [{slide_number: active_index, total_slides: $slides_container.children().length - 2}]);
343
+ callback();
344
+ } else {
345
+ $slides_container.animate({
346
+ 'marginLeft' : new_margin_left
347
+ }, self.settings.animation_speed, 'linear', function() {
348
+ $container.removeClass(self.settings.orbit_transition_class);
349
+ $slides_container.trigger('orbit:after-slide-change', [{slide_number: active_index, total_slides: $slides_container.children().length - 2}]);
350
+ callback();
351
+ });
352
+ }
353
+ }
354
+ };
355
+ }(Foundation.zj, this, this.document));