foundation-rails 5.1.1.0 → 5.2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +52 -7
  3. data/bower.json +2 -2
  4. data/lib/foundation/rails/version.rb +1 -1
  5. data/vendor/assets/javascripts/foundation/foundation.abide.js +3 -6
  6. data/vendor/assets/javascripts/foundation/foundation.accordion.js +5 -4
  7. data/vendor/assets/javascripts/foundation/foundation.alert.js +1 -1
  8. data/vendor/assets/javascripts/foundation/foundation.clearing.js +70 -34
  9. data/vendor/assets/javascripts/foundation/foundation.dropdown.js +121 -28
  10. data/vendor/assets/javascripts/foundation/foundation.equalizer.js +6 -6
  11. data/vendor/assets/javascripts/foundation/foundation.interchange.js +34 -25
  12. data/vendor/assets/javascripts/foundation/foundation.joyride.js +4 -8
  13. data/vendor/assets/javascripts/foundation/foundation.js +94 -78
  14. data/vendor/assets/javascripts/foundation/foundation.magellan.js +3 -4
  15. data/vendor/assets/javascripts/foundation/foundation.offcanvas.js +19 -1
  16. data/vendor/assets/javascripts/foundation/foundation.orbit.js +151 -102
  17. data/vendor/assets/javascripts/foundation/foundation.reveal.js +43 -15
  18. data/vendor/assets/javascripts/foundation/foundation.slider.js +187 -0
  19. data/vendor/assets/javascripts/foundation/foundation.tab.js +116 -18
  20. data/vendor/assets/javascripts/foundation/foundation.tooltip.js +112 -60
  21. data/vendor/assets/javascripts/foundation/foundation.topbar.js +47 -14
  22. data/vendor/assets/javascripts/vendor/modernizr.js +3 -3
  23. data/vendor/assets/stylesheets/foundation.scss +7 -0
  24. data/vendor/assets/stylesheets/foundation/_functions.scss +4 -0
  25. data/vendor/assets/stylesheets/foundation/_settings.scss +11 -2
  26. data/vendor/assets/stylesheets/foundation/components/_accordion.scss +5 -1
  27. data/vendor/assets/stylesheets/foundation/components/_alert-boxes.scss +4 -0
  28. data/vendor/assets/stylesheets/foundation/components/_block-grid.scss +44 -12
  29. data/vendor/assets/stylesheets/foundation/components/_breadcrumbs.scss +4 -0
  30. data/vendor/assets/stylesheets/foundation/components/_button-groups.scss +4 -0
  31. data/vendor/assets/stylesheets/foundation/components/_buttons.scss +7 -5
  32. data/vendor/assets/stylesheets/foundation/components/_clearing.scss +4 -0
  33. data/vendor/assets/stylesheets/foundation/components/_dropdown-buttons.scss +4 -0
  34. data/vendor/assets/stylesheets/foundation/components/_dropdown.scss +100 -11
  35. data/vendor/assets/stylesheets/foundation/components/_flex-video.scss +4 -0
  36. data/vendor/assets/stylesheets/foundation/components/_forms.scss +25 -21
  37. data/vendor/assets/stylesheets/foundation/components/_global.scss +79 -44
  38. data/vendor/assets/stylesheets/foundation/components/_grid.scss +6 -2
  39. data/vendor/assets/stylesheets/foundation/components/_inline-lists.scss +4 -0
  40. data/vendor/assets/stylesheets/foundation/components/_joyride.scss +4 -0
  41. data/vendor/assets/stylesheets/foundation/components/_keystrokes.scss +5 -1
  42. data/vendor/assets/stylesheets/foundation/components/_labels.scss +4 -0
  43. data/vendor/assets/stylesheets/foundation/components/_magellan.scss +4 -0
  44. data/vendor/assets/stylesheets/foundation/components/_offcanvas.scss +51 -59
  45. data/vendor/assets/stylesheets/foundation/components/_orbit.scss +97 -14
  46. data/vendor/assets/stylesheets/foundation/components/_pagination.scss +7 -2
  47. data/vendor/assets/stylesheets/foundation/components/_panels.scss +5 -1
  48. data/vendor/assets/stylesheets/foundation/components/_pricing-tables.scss +4 -0
  49. data/vendor/assets/stylesheets/foundation/components/_progress-bars.scss +4 -0
  50. data/vendor/assets/stylesheets/foundation/components/_range-slider.scss +148 -0
  51. data/vendor/assets/stylesheets/foundation/components/_reveal.scss +36 -7
  52. data/vendor/assets/stylesheets/foundation/components/_side-nav.scss +8 -3
  53. data/vendor/assets/stylesheets/foundation/components/_split-buttons.scss +4 -0
  54. data/vendor/assets/stylesheets/foundation/components/_sub-nav.scss +6 -2
  55. data/vendor/assets/stylesheets/foundation/components/_switch.scss +4 -0
  56. data/vendor/assets/stylesheets/foundation/components/_tables.scss +4 -0
  57. data/vendor/assets/stylesheets/foundation/components/_tabs.scss +12 -6
  58. data/vendor/assets/stylesheets/foundation/components/_thumbs.scss +4 -0
  59. data/vendor/assets/stylesheets/foundation/components/_tooltips.scss +9 -0
  60. data/vendor/assets/stylesheets/foundation/components/_top-bar.scss +52 -25
  61. data/vendor/assets/stylesheets/foundation/components/_type.scss +132 -75
  62. data/vendor/assets/stylesheets/foundation/components/_visibility.scss +198 -538
  63. data/vendor/assets/stylesheets/normalize.scss +179 -166
  64. metadata +4 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4f7470ef8271351ab6f7ba5a15740edfa392dcd4
4
- data.tar.gz: f20728834e6c9cab6cd7e0e9da2f25ca1cc16722
3
+ metadata.gz: d0565600ca266c755998289b8d77379bd0b31ba3
4
+ data.tar.gz: 9a4a170972d2b69e39ef97dc7eee314d220777fb
5
5
  SHA512:
6
- metadata.gz: 89748084b9a82a691a687e8125606084b357302d194d66db6c46be8fb0495b7a811782efb8d8a6d2bf114a497db8bc737196550b534043ac0ee35aa30e229dc4
7
- data.tar.gz: cc373441d0b074b097295d8008b8abfb9edb1ba64036335d112fb50dc72983b6b788204a9194271c46ce4cbad2007f07cd0c77a5f5c3118cd351210d8b2f50b3
6
+ metadata.gz: 23576c610b2b0fee690f757fefb751485a88ea222efc2c4e3403d5b83f322cd27bc2a9d8eb7021232cdf739efed82740e1b09861a7b01adc03b40d9ced67c665
7
+ data.tar.gz: e265c33f51a99dfbcb1276dd408a1681bbfa4daa63157dcc6f1a29dc369f6116bafb40d47e92f52a819276305956d88172a63ccb70f7a77eacf0a22acc5a43fa
data/README.md CHANGED
@@ -1,12 +1,12 @@
1
1
  # Foundation::Rails
2
2
 
3
- The easiest way to use Foundation in your Rails app.
3
+ Foundation::Rails is a gem to make it super easy to use Foundation in your upcoming Rails project. You can start using Foundation::Rails in your projects by following the instructions below.
4
4
 
5
5
  ## Installation
6
6
 
7
7
  Add this line to your application's Gemfile:
8
8
 
9
- gem 'foundation-rails'
9
+ $ gem 'foundation-rails'
10
10
 
11
11
  And then execute:
12
12
 
@@ -16,13 +16,58 @@ Or install it yourself as:
16
16
 
17
17
  $ gem install foundation-rails
18
18
 
19
+ ### Configuring Foundation
20
+
21
+ You can run the following command to add Foundation:
22
+
23
+ $ rails g foundation:install
24
+
25
+ ## Manual Installation
26
+
27
+ ### Add Foundation to your CSS
28
+
29
+ Append the following line to your `app/assets/stylesheets/application.css` file:
30
+
31
+ /*= require foundation */
32
+
33
+ If you're planning on using Sass, then you'll want to rename `application.css` to `application.scss`. That file should then look like:
34
+
35
+ @import "foundation_and_overrides";
36
+ /* Add imports of custom sass/scss files here */
37
+
38
+ ### Add Foundation to your JS
39
+
40
+ Append the following lines to your `app/assets/javascripts/application.js` file:
41
+
42
+ //= require foundation
43
+ $(document).foundation();
44
+
45
+ ### Add Modernizr
46
+
47
+ Make sure that Modernizr is included in the `<head>` of your page layout:
48
+
49
+ javascript_include_tag "vendor/modernizr"
50
+
51
+ ### Set Viewport Width
52
+
53
+ Add the following line to the `head` of your page layout:
54
+
55
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
56
+
19
57
  ## Usage
20
58
 
21
- After Foundation has been added to your `Gemfile` you can install it into your project by running:
59
+ Run the generator to add foundation to the asset pipeline:
22
60
 
23
- ```bash
24
- rails g foundation:install
25
- ```
61
+ rails g foundation:install [layout_name] [options]
62
+
63
+ Options:
64
+ [--haml] # Generate HAML layout instead of erb
65
+ [--slim] # Generate Slim layout instead of erb
66
+ Runtime options:
67
+ -f, [--force] # Overwrite files that already exist
68
+ -p, [--pretend] # Run but do not make any changes
69
+ -q, [--quiet] # Suppress status output
70
+ -s, [--skip] # Skip files that already exist
26
71
 
27
72
  ## Contributing
28
73
 
@@ -36,4 +81,4 @@ rails g foundation:install
36
81
 
37
82
  * [Foundation Docs](http://foundation.zurb.com/docs/)
38
83
  * [Foundation Forum](http://foundation.zurb.com/forum)
39
- * [Foundation Training](http://foundation.zurb.com/learn/training.html)
84
+ * [Foundation Training](http://foundation.zurb.com/learn/training.html)
data/bower.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "foundation-rails",
3
- "version": "5.1.1.0",
3
+ "version": "5.2.0.0",
4
4
  "dependencies": {
5
- "foundation": "5.1.1"
5
+ "foundation": "5.2.0"
6
6
  }
7
7
  }
@@ -1,5 +1,5 @@
1
1
  module Foundation
2
2
  module Rails
3
- VERSION = "5.1.1.0"
3
+ VERSION = "5.2.0.0"
4
4
  end
5
5
  end
@@ -4,7 +4,7 @@
4
4
  Foundation.libs.abide = {
5
5
  name : 'abide',
6
6
 
7
- version : '5.1.1',
7
+ version : '5.2.0',
8
8
 
9
9
  settings : {
10
10
  live_validate : true,
@@ -17,9 +17,6 @@
17
17
  integer: /^\d+$/,
18
18
  number: /-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?/,
19
19
 
20
- // generic password: upper-case, lower-case, number/special character, and min 8 characters
21
- password : /(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/,
22
-
23
20
  // amex, visa, diners
24
21
  card : /^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$/,
25
22
  cvv : /^([0-9]){3,4}$/,
@@ -73,7 +70,7 @@
73
70
  self.validate([this], e);
74
71
  })
75
72
  .on('keydown.fndtn.abide', function (e) {
76
- var settings = $(this).closest('form').data('abide-init');
73
+ var settings = $(this).closest('form').data(self.attr_name(true) + '-init');
77
74
  if (settings.live_validate === true) {
78
75
  clearTimeout(self.timer);
79
76
  self.timer = setTimeout(function () {
@@ -180,7 +177,7 @@
180
177
  } else {
181
178
 
182
179
  if (el_patterns[i][1].test(value) && valid_length ||
183
- !required && el.value.length < 1) {
180
+ !required && el.value.length < 1 || $(el).attr('disabled')) {
184
181
  this.S(el).removeAttr(this.invalid_attr);
185
182
  parent.removeClass('error');
186
183
  if (label.length > 0 && this.settings.error_labels) label.removeClass('error');
@@ -4,7 +4,7 @@
4
4
  Foundation.libs.accordion = {
5
5
  name : 'accordion',
6
6
 
7
- version : '5.1.1',
7
+ version : '5.2.0',
8
8
 
9
9
  settings : {
10
10
  active_class: 'active',
@@ -12,7 +12,7 @@
12
12
  },
13
13
 
14
14
  init : function (scope, method, options) {
15
- this.bindings(method, options);
15
+ this.bindings(method, options);
16
16
  },
17
17
 
18
18
  events : function () {
@@ -20,7 +20,7 @@
20
20
  var S = this.S;
21
21
  S(this.scope)
22
22
  .off('.fndtn.accordion')
23
- .on('click.fndtn.accordion', '[' + this.attr_name() + '] > dd > a', function (e) {
23
+ .on('click.fndtn.accordion', '[' + this.attr_name() + '] dd > a', function (e) {
24
24
  var accordion = S(this).closest('[' + self.attr_name() + ']'),
25
25
  target = S('#' + this.href.split('#')[1]),
26
26
  siblings = S('dd > .content', accordion),
@@ -28,9 +28,10 @@
28
28
  settings = accordion.data(self.attr_name(true) + '-init'),
29
29
  active_content = S('dd > .content.' + settings.active_class, accordion),
30
30
  active_parent = S('dd.' + settings.active_class, accordion);
31
-
32
31
  e.preventDefault();
33
32
 
33
+ if (! S(this).closest('dl').is(accordion)) { return; }
34
+
34
35
  if (active_content[0] == target[0] && settings.toggleable) {
35
36
  active_parent.toggleClass(settings.active_class, false);
36
37
  return target.toggleClass(settings.active_class, false);
@@ -4,7 +4,7 @@
4
4
  Foundation.libs.alert = {
5
5
  name : 'alert',
6
6
 
7
- version : '5.1.1',
7
+ version : '5.2.0',
8
8
 
9
9
  settings : {
10
10
  animation: 'fadeOut',
@@ -4,7 +4,7 @@
4
4
  Foundation.libs.clearing = {
5
5
  name : 'clearing',
6
6
 
7
- version: '5.1.1',
7
+ version: '5.2.0',
8
8
 
9
9
  settings : {
10
10
  templates : {
@@ -31,7 +31,7 @@
31
31
 
32
32
  this.bindings(method, options);
33
33
 
34
- if (self.S(this.scope).is('[' + this.attr_name() + ']')) {
34
+ if (self.S(this.scope).is('[' + this.attr_name() + ']')) {
35
35
  this.assemble(self.S('li', this.scope));
36
36
  } else {
37
37
  self.S('[' + this.attr_name() + ']', this.scope).each(function () {
@@ -44,6 +44,10 @@
44
44
  var self = this,
45
45
  S = self.S;
46
46
 
47
+ if ($('.scroll-container').length > 0) {
48
+ this.scope = $('.scroll-container');
49
+ }
50
+
47
51
  S(this.scope)
48
52
  .off('.clearing')
49
53
  .on('click.fndtn.clearing', 'ul[' + this.attr_name() + '] li',
@@ -80,8 +84,9 @@
80
84
  .on('click.fndtn.clearing', '.clearing-main-prev',
81
85
  function (e) { self.nav(e, 'prev') })
82
86
  .on('click.fndtn.clearing', this.settings.close_selectors,
83
- function (e) { Foundation.libs.clearing.close(e, this) })
84
- .on('keydown.fndtn.clearing',
87
+ function (e) { Foundation.libs.clearing.close(e, this) });
88
+
89
+ $(document).on('keydown.fndtn.clearing',
85
90
  function (e) { self.keydown(e) });
86
91
 
87
92
  S(window).off('.clearing').on('resize.fndtn.clearing',
@@ -164,11 +169,46 @@
164
169
 
165
170
  open : function ($image, current, target) {
166
171
  var self = this,
172
+ body = $(document.body),
167
173
  root = target.closest('.clearing-assembled'),
168
- container = self.S('div', root).first(),
169
- visible_image = self.S('.visible-img', container),
170
- image = self.S('img', visible_image).not($image),
171
- label = self.S('.clearing-touch-label', container);
174
+ container = $('div', root).first(),
175
+ visible_image = $('.visible-img', container),
176
+ image = $('img', visible_image).not($image),
177
+ label = $('.clearing-touch-label', '.clearing-blackout'),
178
+ error = false;
179
+
180
+ image.error(function () {
181
+ error = true;
182
+ });
183
+
184
+ function startLoad() {
185
+ setTimeout(function () {
186
+ this.image_loaded(image, function () {
187
+ if (image.outerWidth() === 1 && !error) {
188
+ startLoad.call(this);
189
+ } else {
190
+ cb.call(this, image);
191
+ }
192
+ }.bind(this));
193
+ }.bind(this), 50);
194
+ }
195
+
196
+ function cb (image) {
197
+ var $image = $(image);
198
+ image.css('visibility', 'visible');
199
+ // toggle the gallery
200
+ body.css('overflow', 'hidden');
201
+ root.addClass('clearing-blackout');
202
+ container.addClass('clearing-container');
203
+ visible_image.show();
204
+ this.fix_height(target)
205
+ .caption(self.S('.clearing-caption', visible_image), $image)
206
+ .center_and_label(image, label)
207
+ .shift(current, target, function () {
208
+ target.siblings().removeClass('visible');
209
+ target.addClass('visible');
210
+ });
211
+ }
172
212
 
173
213
  if (!this.locked()) {
174
214
  // set the image to the selected thumbnail
@@ -176,20 +216,8 @@
176
216
  .attr('src', this.load($image))
177
217
  .css('visibility', 'hidden');
178
218
 
179
- this.image_loaded(image, function () {
180
- image.css('visibility', 'visible');
181
- // toggle the gallery
182
- root.addClass('clearing-blackout');
183
- container.addClass('clearing-container');
184
- visible_image.show();
185
- this.fix_height(target)
186
- .caption(self.S('.clearing-caption', visible_image), $image)
187
- .center_and_label(image,label)
188
- .shift(current, target, function () {
189
- target.siblings().removeClass('visible');
190
- target.addClass('visible');
191
- });
192
- }.bind(this));
219
+ startLoad.call(this);
220
+
193
221
  }
194
222
  },
195
223
 
@@ -202,9 +230,11 @@
202
230
  } else {
203
231
  return target.closest('.clearing-blackout');
204
232
  }
205
- }($(el))), container, visible_image;
233
+ }($(el))),
234
+ body = $(document.body), container, visible_image;
206
235
 
207
236
  if (el === e.target && root) {
237
+ body.css('overflow', '');
208
238
  container = $('div', root).first();
209
239
  visible_image = $('.visible-img', container);
210
240
  this.settings.prev_index = 0;
@@ -223,7 +253,7 @@
223
253
  },
224
254
 
225
255
  keydown : function (e) {
226
- var clearing = $('ul[' + this.attr_name() + ']', '.clearing-blackout'),
256
+ var clearing = $('.clearing-blackout ul[' + this.attr_name() + ']'),
227
257
  NEXT_KEY = this.rtl ? 37 : 39,
228
258
  PREV_KEY = this.rtl ? 39 : 37,
229
259
  ESC_KEY = 27;
@@ -296,10 +326,13 @@
296
326
  marginLeft : -(target.outerWidth() / 2),
297
327
  marginTop : -(target.outerHeight() / 2)
298
328
  });
299
- label.css({
300
- marginLeft : -(label.outerWidth() / 2),
301
- marginTop : -(target.outerHeight() / 2)-label.outerHeight()-10
302
- });
329
+
330
+ if (label.length > 0) {
331
+ label.css({
332
+ marginLeft : -(label.outerWidth() / 2),
333
+ marginTop : -(target.outerHeight() / 2)-label.outerHeight()-10
334
+ });
335
+ }
303
336
  } else {
304
337
  target.css({
305
338
  marginRight : -(target.outerWidth() / 2),
@@ -307,12 +340,15 @@
307
340
  left: 'auto',
308
341
  right: '50%'
309
342
  });
310
- label.css({
311
- marginRight : -(label.outerWidth() / 2),
312
- marginTop : -(target.outerHeight() / 2)-label.outerHeight()-10,
313
- left: 'auto',
314
- right: '50%'
315
- });
343
+
344
+ if (label.length > 0) {
345
+ label.css({
346
+ marginRight : -(label.outerWidth() / 2),
347
+ marginTop : -(target.outerHeight() / 2)-label.outerHeight()-10,
348
+ left: 'auto',
349
+ right: '50%'
350
+ });
351
+ }
316
352
  }
317
353
  return this;
318
354
  },
@@ -4,10 +4,11 @@
4
4
  Foundation.libs.dropdown = {
5
5
  name : 'dropdown',
6
6
 
7
- version : '5.1.1',
7
+ version : '5.2.0',
8
8
 
9
9
  settings : {
10
10
  active_class: 'open',
11
+ align: 'bottom',
11
12
  is_hover: false,
12
13
  opened: function(){},
13
14
  closed: function(){}
@@ -89,7 +90,9 @@
89
90
  .off('.dropdown')
90
91
  .on('resize.fndtn.dropdown', self.throttle(function () {
91
92
  self.resize.call(self);
92
- }, 50)).trigger('resize');
93
+ }, 50));
94
+
95
+ this.resize();
93
96
  },
94
97
 
95
98
  close: function (dropdown) {
@@ -99,7 +102,8 @@
99
102
  self.S(this)
100
103
  .css(Foundation.rtl ? 'right':'left', '-99999px')
101
104
  .removeClass(self.settings.active_class);
102
- self.S(this).trigger('closed');
105
+
106
+ self.S(this).trigger('closed', [dropdown]);
103
107
  }
104
108
  });
105
109
  },
@@ -115,7 +119,7 @@
115
119
  this
116
120
  .css(dropdown
117
121
  .addClass(this.settings.active_class), target);
118
- dropdown.trigger('opened');
122
+ dropdown.trigger('opened', [dropdown, target]);
119
123
  },
120
124
 
121
125
  data_attr: function () {
@@ -153,43 +157,133 @@
153
157
  },
154
158
 
155
159
  css : function (dropdown, target) {
156
- var offset_parent = dropdown.offsetParent(),
157
- position = target.offset();
158
-
159
- position.top -= offset_parent.offset().top;
160
- position.left -= offset_parent.offset().left;
160
+ this.clear_idx();
161
161
 
162
162
  if (this.small()) {
163
- dropdown.css({
163
+ var p = this.dirs.bottom.call(dropdown, target);
164
+
165
+ dropdown.attr('style', '').removeClass('drop-left drop-right drop-top').css({
164
166
  position : 'absolute',
165
167
  width: '95%',
166
168
  'max-width': 'none',
167
- top: position.top + target.outerHeight()
169
+ top: p.top
168
170
  });
171
+
169
172
  dropdown.css(Foundation.rtl ? 'right':'left', '2.5%');
170
173
  } else {
171
- if (!Foundation.rtl && this.S(window).width() > dropdown.outerWidth() + target.offset().left) {
172
- var left = position.left;
173
- if (dropdown.hasClass('right')) {
174
- dropdown.removeClass('right');
175
- }
176
- } else {
177
- if (!dropdown.hasClass('right')) {
178
- dropdown.addClass('right');
179
- }
180
- var left = position.left - (dropdown.outerWidth() - target.outerWidth());
181
- }
174
+ var settings = target.data(this.attr_name(true) + '-init') || this.settings;
182
175
 
183
- dropdown.attr('style', '').css({
184
- position : 'absolute',
185
- top: position.top + target.outerHeight(),
186
- left: left
187
- });
176
+ this.style(dropdown, target, settings);
188
177
  }
189
178
 
190
179
  return dropdown;
191
180
  },
192
181
 
182
+ style : function (dropdown, target, settings) {
183
+ var css = $.extend({position: 'absolute'},
184
+ this.dirs[settings.align].call(dropdown, target, settings));
185
+
186
+ dropdown.attr('style', '').css(css);
187
+ },
188
+
189
+ // return CSS property object
190
+ // `this` is the dropdown
191
+ dirs : {
192
+ // Calculate target offset
193
+ _base : function (t) {
194
+ var o_p = this.offsetParent(),
195
+ o = o_p.offset(),
196
+ p = t.offset();
197
+
198
+ p.top -= o.top;
199
+ p.left -= o.left;
200
+
201
+ return p;
202
+ },
203
+ top: function (t, s) {
204
+ var self = Foundation.libs.dropdown,
205
+ p = self.dirs._base.call(this, t),
206
+ pip_offset_base = (t.outerWidth() / 2) - 8;
207
+
208
+ this.addClass('drop-top');
209
+
210
+ if (t.outerWidth() < this.outerWidth() || self.small()) {
211
+ self.adjust_pip(pip_offset_base, p);
212
+ }
213
+
214
+ if (Foundation.rtl) {
215
+ return {left: p.left - this.outerWidth() + t.outerWidth(),
216
+ top: p.top - this.outerHeight()};
217
+ }
218
+
219
+ return {left: p.left, top: p.top - this.outerHeight()};
220
+ },
221
+ bottom: function (t, s) {
222
+ var self = Foundation.libs.dropdown,
223
+ p = self.dirs._base.call(this, t),
224
+ pip_offset_base = (t.outerWidth() / 2) - 8;
225
+
226
+ if (t.outerWidth() < this.outerWidth() || self.small()) {
227
+ self.adjust_pip(pip_offset_base, p);
228
+ }
229
+
230
+ if (self.rtl) {
231
+ return {left: p.left - this.outerWidth() + t.outerWidth(), top: p.top + t.outerHeight()};
232
+ }
233
+
234
+ return {left: p.left, top: p.top + t.outerHeight()};
235
+ },
236
+ left: function (t, s) {
237
+ var p = Foundation.libs.dropdown.dirs._base.call(this, t);
238
+
239
+ this.addClass('drop-left');
240
+
241
+ return {left: p.left - this.outerWidth(), top: p.top};
242
+ },
243
+ right: function (t, s) {
244
+ var p = Foundation.libs.dropdown.dirs._base.call(this, t);
245
+
246
+ this.addClass('drop-right');
247
+
248
+ return {left: p.left + t.outerWidth(), top: p.top};
249
+ }
250
+ },
251
+
252
+ // Insert rule to style psuedo elements
253
+ adjust_pip : function (pip_offset_base, p) {
254
+ var sheet = Foundation.stylesheet;
255
+
256
+ if (this.small()) {
257
+ pip_offset_base += p.left - 8;
258
+ }
259
+
260
+ this.rule_idx = sheet.cssRules.length;
261
+
262
+ var sel_before = '.f-dropdown.open:before',
263
+ sel_after = '.f-dropdown.open:after',
264
+ css_before = 'left: ' + pip_offset_base + 'px;',
265
+ css_after = 'left: ' + (pip_offset_base - 1) + 'px;';
266
+
267
+ if (sheet.insertRule) {
268
+ sheet.insertRule([sel_before, '{', css_before, '}'].join(' '), this.rule_idx);
269
+ sheet.insertRule([sel_after, '{', css_after, '}'].join(' '), this.rule_idx + 1);
270
+ } else {
271
+ sheet.addRule(sel_before, css_before, this.rule_idx);
272
+ sheet.addRule(sel_after, css_after, this.rule_idx + 1);
273
+ }
274
+ },
275
+
276
+ // Remove old dropdown rule index
277
+ clear_idx : function () {
278
+ var sheet = Foundation.stylesheet;
279
+
280
+ if (this.rule_idx) {
281
+ sheet.deleteRule(this.rule_idx);
282
+ sheet.deleteRule(this.rule_idx);
283
+ delete this.rule_idx;
284
+ }
285
+ },
286
+
193
287
  small : function () {
194
288
  return matchMedia(Foundation.media_queries.small).matches &&
195
289
  !matchMedia(Foundation.media_queries.medium).matches;
@@ -200,7 +294,6 @@
200
294
  this.S('html, body').off('.fndtn.dropdown');
201
295
  this.S(window).off('.fndtn.dropdown');
202
296
  this.S('[data-dropdown-content]').off('.fndtn.dropdown');
203
- this.settings.init = false;
204
297
  },
205
298
 
206
299
  reflow : function () {}