foundation-rails 5.5.1.2 → 5.5.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. data/bower.json +2 -2
  2. data/lib/foundation/rails/version.rb +1 -1
  3. data/vendor/assets/javascripts/foundation.js +1 -1
  4. data/vendor/assets/javascripts/foundation/foundation.abide.js +96 -28
  5. data/vendor/assets/javascripts/foundation/foundation.accordion.js +28 -7
  6. data/vendor/assets/javascripts/foundation/foundation.alert.js +3 -3
  7. data/vendor/assets/javascripts/foundation/foundation.clearing.js +50 -20
  8. data/vendor/assets/javascripts/foundation/foundation.dropdown.js +26 -11
  9. data/vendor/assets/javascripts/foundation/foundation.equalizer.js +43 -16
  10. data/vendor/assets/javascripts/foundation/foundation.interchange.js +19 -14
  11. data/vendor/assets/javascripts/foundation/foundation.joyride.js +1 -1
  12. data/vendor/assets/javascripts/foundation/foundation.js +51 -29
  13. data/vendor/assets/javascripts/foundation/foundation.magellan.js +40 -28
  14. data/vendor/assets/javascripts/foundation/foundation.offcanvas.js +3 -3
  15. data/vendor/assets/javascripts/foundation/foundation.orbit.js +1 -1
  16. data/vendor/assets/javascripts/foundation/foundation.reveal.js +70 -43
  17. data/vendor/assets/javascripts/foundation/foundation.slider.js +23 -5
  18. data/vendor/assets/javascripts/foundation/foundation.tab.js +30 -18
  19. data/vendor/assets/javascripts/foundation/foundation.tooltip.js +47 -15
  20. data/vendor/assets/javascripts/foundation/foundation.topbar.js +31 -25
  21. data/vendor/assets/stylesheets/foundation.scss +37 -38
  22. data/vendor/assets/stylesheets/foundation/_functions.scss +52 -42
  23. data/vendor/assets/stylesheets/foundation/_settings.scss +53 -34
  24. data/vendor/assets/stylesheets/foundation/components/_accordion.scss +7 -7
  25. data/vendor/assets/stylesheets/foundation/components/_alert-boxes.scss +11 -11
  26. data/vendor/assets/stylesheets/foundation/components/_block-grid.scss +13 -13
  27. data/vendor/assets/stylesheets/foundation/components/_breadcrumbs.scss +17 -18
  28. data/vendor/assets/stylesheets/foundation/components/_button-groups.scss +29 -22
  29. data/vendor/assets/stylesheets/foundation/components/_buttons.scss +13 -17
  30. data/vendor/assets/stylesheets/foundation/components/_clearing.scss +51 -47
  31. data/vendor/assets/stylesheets/foundation/components/_dropdown-buttons.scss +10 -11
  32. data/vendor/assets/stylesheets/foundation/components/_dropdown.scss +42 -36
  33. data/vendor/assets/stylesheets/foundation/components/_flex-video.scss +7 -7
  34. data/vendor/assets/stylesheets/foundation/components/_forms.scss +82 -50
  35. data/vendor/assets/stylesheets/foundation/components/_global.scss +86 -64
  36. data/vendor/assets/stylesheets/foundation/components/_grid.scss +24 -21
  37. data/vendor/assets/stylesheets/foundation/components/_icon-bar.scss +335 -234
  38. data/vendor/assets/stylesheets/foundation/components/_inline-lists.scss +8 -8
  39. data/vendor/assets/stylesheets/foundation/components/_joyride.scss +40 -42
  40. data/vendor/assets/stylesheets/foundation/components/_keystrokes.scss +2 -3
  41. data/vendor/assets/stylesheets/foundation/components/_labels.scss +6 -6
  42. data/vendor/assets/stylesheets/foundation/components/_magellan.scss +2 -2
  43. data/vendor/assets/stylesheets/foundation/components/_offcanvas.scss +178 -175
  44. data/vendor/assets/stylesheets/foundation/components/_orbit.scss +82 -62
  45. data/vendor/assets/stylesheets/foundation/components/_pagination.scss +15 -15
  46. data/vendor/assets/stylesheets/foundation/components/_panels.scss +21 -15
  47. data/vendor/assets/stylesheets/foundation/components/_pricing-tables.scss +16 -16
  48. data/vendor/assets/stylesheets/foundation/components/_progress-bars.scss +4 -4
  49. data/vendor/assets/stylesheets/foundation/components/_range-slider.scss +23 -16
  50. data/vendor/assets/stylesheets/foundation/components/_reveal.scss +27 -27
  51. data/vendor/assets/stylesheets/foundation/components/_side-nav.scss +15 -11
  52. data/vendor/assets/stylesheets/foundation/components/_split-buttons.scss +16 -16
  53. data/vendor/assets/stylesheets/foundation/components/_sub-nav.scss +14 -11
  54. data/vendor/assets/stylesheets/foundation/components/_switches.scss +22 -19
  55. data/vendor/assets/stylesheets/foundation/components/_tables.scss +8 -8
  56. data/vendor/assets/stylesheets/foundation/components/_tabs.scss +49 -32
  57. data/vendor/assets/stylesheets/foundation/components/_thumbs.scss +8 -8
  58. data/vendor/assets/stylesheets/foundation/components/_tooltips.scss +25 -25
  59. data/vendor/assets/stylesheets/foundation/components/_top-bar.scss +163 -122
  60. data/vendor/assets/stylesheets/foundation/components/_type.scss +19 -19
  61. data/vendor/assets/stylesheets/foundation/components/_visibility.scss +23 -5
  62. data/vendor/assets/stylesheets/normalize.scss +8 -11
  63. metadata +28 -20
  64. checksums.yaml +0 -7
  65. data/vendor/assets/stylesheets/foundation/components/_toolbar.scss +0 -72
@@ -4,7 +4,7 @@
4
4
  Foundation.libs.dropdown = {
5
5
  name : 'dropdown',
6
6
 
7
- version : '5.5.1',
7
+ version : '5.5.2',
8
8
 
9
9
  settings : {
10
10
  active_class : 'open',
@@ -34,7 +34,7 @@
34
34
  var settings = S(this).data(self.attr_name(true) + '-init') || self.settings;
35
35
  if (!settings.is_hover || Modernizr.touch) {
36
36
  e.preventDefault();
37
- if (S(this).parent('[data-reveal-id]')) {
37
+ if (S(this).parent('[data-reveal-id]').length) {
38
38
  e.stopPropagation();
39
39
  }
40
40
  self.toggle($(this));
@@ -131,8 +131,8 @@
131
131
 
132
132
  close : function (dropdown) {
133
133
  var self = this;
134
- dropdown.each(function () {
135
- var original_target = $('[' + self.attr_name() + '=' + dropdown[0].id + ']') || $('aria-controls=' + dropdown[0].id + ']');
134
+ dropdown.each(function (idx) {
135
+ var original_target = $('[' + self.attr_name() + '=' + dropdown[idx].id + ']') || $('aria-controls=' + dropdown[idx].id + ']');
136
136
  original_target.attr('aria-expanded', 'false');
137
137
  if (self.S(this).hasClass(self.settings.active_class)) {
138
138
  self.S(this)
@@ -143,7 +143,7 @@
143
143
  .removeClass(self.settings.active_class)
144
144
  .removeData('target');
145
145
 
146
- self.S(this).trigger('closed').trigger('closed.fndtn.dropdown', [dropdown]);
146
+ self.S(this).trigger('closed.fndtn.dropdown', [dropdown]);
147
147
  }
148
148
  });
149
149
  dropdown.removeClass('f-open-' + this.attr_name(true));
@@ -161,7 +161,7 @@
161
161
  .css(dropdown
162
162
  .addClass(this.settings.active_class), target);
163
163
  dropdown.prev('[' + this.attr_name() + ']').addClass(this.settings.active_class);
164
- dropdown.data('target', target.get(0)).trigger('opened').trigger('opened.fndtn.dropdown', [dropdown, target]);
164
+ dropdown.data('target', target.get(0)).trigger('opened.fndtn.dropdown', [dropdown, target]);
165
165
  dropdown.attr('aria-hidden', 'false');
166
166
  target.attr('aria-expanded', 'true');
167
167
  dropdown.focus();
@@ -209,10 +209,13 @@
209
209
 
210
210
  css : function (dropdown, target) {
211
211
  var left_offset = Math.max((target.width() - dropdown.width()) / 2, 8),
212
- settings = target.data(this.attr_name(true) + '-init') || this.settings;
212
+ settings = target.data(this.attr_name(true) + '-init') || this.settings,
213
+ parentOverflow = dropdown.parent().css('overflow-y') || dropdown.parent().css('overflow');
213
214
 
214
215
  this.clear_idx();
215
216
 
217
+
218
+
216
219
  if (this.small()) {
217
220
  var p = this.dirs.bottom.call(dropdown, target, settings);
218
221
 
@@ -224,7 +227,19 @@
224
227
  });
225
228
 
226
229
  dropdown.css(Foundation.rtl ? 'right' : 'left', left_offset);
227
- } else {
230
+ }
231
+ // detect if dropdown is in an overflow container
232
+ else if (parentOverflow !== 'visible') {
233
+ var offset = target[0].offsetTop + target[0].offsetHeight;
234
+
235
+ dropdown.attr('style', '').css({
236
+ position : 'absolute',
237
+ top : offset
238
+ });
239
+
240
+ dropdown.css(Foundation.rtl ? 'right' : 'left', left_offset);
241
+ }
242
+ else {
228
243
 
229
244
  this.style(dropdown, target, settings);
230
245
  }
@@ -263,17 +278,17 @@
263
278
  if (document.getElementsByClassName('row')[0]) {
264
279
  actualBodyWidth = document.getElementsByClassName('row')[0].clientWidth;
265
280
  } else {
266
- actualBodyWidth = window.outerWidth;
281
+ actualBodyWidth = window.innerWidth;
267
282
  }
268
283
 
269
- var actualMarginWidth = (window.outerWidth - actualBodyWidth) / 2;
284
+ var actualMarginWidth = (window.innerWidth - actualBodyWidth) / 2;
270
285
  var actualBoundary = actualBodyWidth;
271
286
 
272
287
  if (!this.hasClass('mega')) {
273
288
  //miss top
274
289
  if (t.offset().top <= this.outerHeight()) {
275
290
  p.missTop = true;
276
- actualBoundary = window.outerWidth - actualMarginWidth;
291
+ actualBoundary = window.innerWidth - actualMarginWidth;
277
292
  p.leftRightFlag = true;
278
293
  }
279
294
 
@@ -4,13 +4,14 @@
4
4
  Foundation.libs.equalizer = {
5
5
  name : 'equalizer',
6
6
 
7
- version : '5.5.1',
7
+ version : '5.5.2',
8
8
 
9
9
  settings : {
10
10
  use_tallest : true,
11
11
  before_height_change : $.noop,
12
12
  after_height_change : $.noop,
13
- equalize_on_stack : false
13
+ equalize_on_stack : false,
14
+ act_on_hidden_el: false
14
15
  },
15
16
 
16
17
  init : function (scope, method, options) {
@@ -27,28 +28,38 @@
27
28
 
28
29
  equalize : function (equalizer) {
29
30
  var isStacked = false,
30
- vals = equalizer.find('[' + this.attr_name() + '-watch]:visible'),
31
- settings = equalizer.data(this.attr_name(true) + '-init');
31
+ group = equalizer.data('equalizer'),
32
+ settings = equalizer.data(this.attr_name(true)+'-init') || this.settings,
33
+ vals,
34
+ firstTopOffset;
32
35
 
36
+ if (settings.act_on_hidden_el) {
37
+ vals = group ? equalizer.find('['+this.attr_name()+'-watch="'+group+'"]') : equalizer.find('['+this.attr_name()+'-watch]');
38
+ }
39
+ else {
40
+ vals = group ? equalizer.find('['+this.attr_name()+'-watch="'+group+'"]:visible') : equalizer.find('['+this.attr_name()+'-watch]:visible');
41
+ }
42
+
33
43
  if (vals.length === 0) {
34
44
  return;
35
45
  }
36
- var firstTopOffset = vals.first().offset().top;
46
+
37
47
  settings.before_height_change();
38
- equalizer.trigger('before-height-change').trigger('before-height-change.fndth.equalizer');
48
+ equalizer.trigger('before-height-change.fndth.equalizer');
39
49
  vals.height('inherit');
40
- vals.each(function () {
41
- var el = $(this);
42
- if (el.offset().top !== firstTopOffset) {
43
- isStacked = true;
44
- }
45
- });
46
50
 
47
51
  if (settings.equalize_on_stack === false) {
52
+ firstTopOffset = vals.first().offset().top;
53
+ vals.each(function () {
54
+ if ($(this).offset().top !== firstTopOffset) {
55
+ isStacked = true;
56
+ return false;
57
+ }
58
+ });
48
59
  if (isStacked) {
49
60
  return;
50
61
  }
51
- };
62
+ }
52
63
 
53
64
  var heights = vals.map(function () { return $(this).outerHeight(false) }).get();
54
65
 
@@ -59,17 +70,33 @@
59
70
  var min = Math.min.apply(null, heights);
60
71
  vals.css('height', min);
61
72
  }
73
+
62
74
  settings.after_height_change();
63
- equalizer.trigger('after-height-change').trigger('after-height-change.fndtn.equalizer');
75
+ equalizer.trigger('after-height-change.fndtn.equalizer');
64
76
  },
65
77
 
66
78
  reflow : function () {
67
79
  var self = this;
68
80
 
69
81
  this.S('[' + this.attr_name() + ']', this.scope).each(function () {
70
- var $eq_target = $(this);
82
+ var $eq_target = $(this),
83
+ media_query = $eq_target.data('equalizer-mq'),
84
+ ignore_media_query = true;
85
+
86
+ if (media_query) {
87
+ media_query = 'is_' + media_query.replace(/-/g, '_');
88
+ if (Foundation.utils.hasOwnProperty(media_query)) {
89
+ ignore_media_query = false;
90
+ }
91
+ }
92
+
71
93
  self.image_loaded(self.S('img', this), function () {
72
- self.equalize($eq_target)
94
+ if (ignore_media_query || Foundation.utils[media_query]()) {
95
+ self.equalize($eq_target)
96
+ } else {
97
+ var vals = $eq_target.find('[' + self.attr_name() + '-watch]:visible');
98
+ vals.css('height', 'auto');
99
+ }
73
100
  });
74
101
  });
75
102
  }
@@ -4,7 +4,7 @@
4
4
  Foundation.libs.interchange = {
5
5
  name : 'interchange',
6
6
 
7
- version : '5.5.1',
7
+ version : '5.5.2',
8
8
 
9
9
  cache : {},
10
10
 
@@ -48,14 +48,14 @@
48
48
  // console.log($(this).html(), a, b, c);
49
49
  // });
50
50
 
51
- if (/IMG/.test(el[0].nodeName)) {
51
+ if (el !== null && /IMG/.test(el[0].nodeName)) {
52
52
  var orig_path = el[0].src;
53
53
 
54
54
  if (new RegExp(path, 'i').test(orig_path)) {
55
55
  return;
56
56
  }
57
57
 
58
- el[0].src = path;
58
+ el.attr("src", path);
59
59
 
60
60
  return trigger(el[0].src);
61
61
  }
@@ -88,8 +88,7 @@
88
88
  this.data_attr = this.set_data_attr();
89
89
  $.extend(true, this.settings, method, options);
90
90
  this.bindings(method, options);
91
- this.load('images');
92
- this.load('nodes');
91
+ this.reflow();
93
92
  },
94
93
 
95
94
  get_media_hash : function () {
@@ -127,11 +126,10 @@
127
126
  for (var uuid in cache) {
128
127
  if (cache.hasOwnProperty(uuid)) {
129
128
  var passed = this.results(uuid, cache[uuid]);
130
-
131
129
  if (passed) {
132
130
  this.settings.directives[passed
133
131
  .scenario[1]].call(this, passed.el, passed.scenario[0], (function (passed) {
134
- if (arguments[0] instanceof Array) {
132
+ if (arguments[0] instanceof Array) {
135
133
  var args = arguments[0];
136
134
  } else {
137
135
  var args = Array.prototype.slice.call(arguments, 0);
@@ -241,7 +239,7 @@
241
239
  this.object($(this['cached_' + type][i]));
242
240
  }
243
241
 
244
- return $(window).trigger('resize').trigger('resize.fndtn.interchange');
242
+ return $(window).trigger('resize.fndtn.interchange');
245
243
  },
246
244
 
247
245
  convert_directive : function (directive) {
@@ -258,19 +256,25 @@
258
256
  parse_scenario : function (scenario) {
259
257
  // This logic had to be made more complex since some users were using commas in the url path
260
258
  // So we cannot simply just split on a comma
259
+
261
260
  var directive_match = scenario[0].match(/(.+),\s*(\w+)\s*$/),
262
- media_query = scenario[1];
261
+ // getting the mq has gotten a bit complicated since we started accounting for several use cases
262
+ // of URLs. For now we'll continue to match these scenarios, but we may consider having these scenarios
263
+ // as nested objects or arrays in F6.
264
+ // regex: match everything before close parenthesis for mq
265
+ media_query = scenario[1].match(/(.*)\)/);
263
266
 
264
267
  if (directive_match) {
265
268
  var path = directive_match[1],
266
269
  directive = directive_match[2];
270
+
267
271
  } else {
268
272
  var cached_split = scenario[0].split(/,\s*$/),
269
273
  path = cached_split[0],
270
274
  directive = '';
271
275
  }
272
276
 
273
- return [this.trim(path), this.convert_directive(directive), this.trim(media_query)];
277
+ return [this.trim(path), this.convert_directive(directive), this.trim(media_query[1])];
274
278
  },
275
279
 
276
280
  object : function (el) {
@@ -280,10 +284,12 @@
280
284
 
281
285
  if (i > 0) {
282
286
  while (i--) {
283
- var split = raw_arr[i].split(/\(([^\)]*?)(\))$/);
287
+ // split array between comma delimited content and mq
288
+ // regex: comma, optional space, open parenthesis
289
+ var scenario = raw_arr[i].split(/,\s?\(/);
284
290
 
285
- if (split.length > 1) {
286
- var params = this.parse_scenario(split);
291
+ if (scenario.length > 1) {
292
+ var params = this.parse_scenario(scenario);
287
293
  scenarios.push(params);
288
294
  }
289
295
  }
@@ -301,7 +307,6 @@
301
307
  }
302
308
 
303
309
  el.attr(this.add_namespace('data-uuid'), uuid);
304
-
305
310
  return this.cache[uuid] = scenarios;
306
311
  },
307
312
 
@@ -6,7 +6,7 @@
6
6
  Foundation.libs.joyride = {
7
7
  name : 'joyride',
8
8
 
9
- version : '5.5.1',
9
+ version : '5.5.2',
10
10
 
11
11
  defaults : {
12
12
  expose : false, // turn on or off the expose feature
@@ -157,42 +157,52 @@
157
157
  }
158
158
  };
159
159
 
160
- /*
161
- https://github.com/paulirish/matchMedia.js
162
- */
160
+ /*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas, David Knight. Dual MIT/BSD license */
163
161
 
164
- window.matchMedia = window.matchMedia || (function ( doc ) {
162
+ window.matchMedia || (window.matchMedia = function() {
163
+ "use strict";
165
164
 
166
- 'use strict';
165
+ // For browsers that support matchMedium api such as IE 9 and webkit
166
+ var styleMedia = (window.styleMedia || window.media);
167
167
 
168
- var bool,
169
- docElem = doc.documentElement,
170
- refNode = docElem.firstElementChild || docElem.firstChild,
171
- // fakeBody required for <FF4 when executed in <head>
172
- fakeBody = doc.createElement( 'body' ),
173
- div = doc.createElement( 'div' );
168
+ // For those that don't support matchMedium
169
+ if (!styleMedia) {
170
+ var style = document.createElement('style'),
171
+ script = document.getElementsByTagName('script')[0],
172
+ info = null;
174
173
 
175
- div.id = 'mq-test-1';
176
- div.style.cssText = 'position:absolute;top:-100em';
177
- fakeBody.style.background = 'none';
178
- fakeBody.appendChild(div);
174
+ style.type = 'text/css';
175
+ style.id = 'matchmediajs-test';
179
176
 
180
- return function (q) {
177
+ script.parentNode.insertBefore(style, script);
181
178
 
182
- div.innerHTML = '&shy;<style media="' + q + '"> #mq-test-1 { width: 42px; }</style>';
179
+ // 'style.currentStyle' is used by IE <= 8 and 'window.getComputedStyle' for all other browsers
180
+ info = ('getComputedStyle' in window) && window.getComputedStyle(style, null) || style.currentStyle;
183
181
 
184
- docElem.insertBefore( fakeBody, refNode );
185
- bool = div.offsetWidth === 42;
186
- docElem.removeChild( fakeBody );
182
+ styleMedia = {
183
+ matchMedium: function(media) {
184
+ var text = '@media ' + media + '{ #matchmediajs-test { width: 1px; } }';
187
185
 
188
- return {
189
- matches : bool,
190
- media : q
191
- };
186
+ // 'style.styleSheet' is used by IE <= 8 and 'style.textContent' for all other browsers
187
+ if (style.styleSheet) {
188
+ style.styleSheet.cssText = text;
189
+ } else {
190
+ style.textContent = text;
191
+ }
192
192
 
193
- };
193
+ // Test if media query is true or false
194
+ return info.width === '1px';
195
+ }
196
+ };
197
+ }
194
198
 
195
- }( document ));
199
+ return function(media) {
200
+ return {
201
+ matches: styleMedia.matchMedium(media || 'all'),
202
+ media: media || 'all'
203
+ };
204
+ };
205
+ }());
196
206
 
197
207
  /*
198
208
  * jquery.requestAnimationFrame
@@ -283,7 +293,7 @@
283
293
  window.Foundation = {
284
294
  name : 'Foundation',
285
295
 
286
- version : '5.5.1',
296
+ version : '5.5.2',
287
297
 
288
298
  media_queries : {
289
299
  'small' : S('.foundation-mq-small').css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, ''),
@@ -583,7 +593,7 @@
583
593
 
584
594
  if (query !== undefined) {
585
595
  Foundation.stylesheet.insertRule('@media ' +
586
- Foundation.media_queries[media] + '{ ' + rule + ' }');
596
+ Foundation.media_queries[media] + '{ ' + rule + ' }', Foundation.stylesheet.cssRules.length);
587
597
  }
588
598
  }
589
599
  },
@@ -599,7 +609,19 @@
599
609
  var self = this,
600
610
  unloaded = images.length;
601
611
 
602
- if (unloaded === 0) {
612
+ function pictures_has_height(images) {
613
+ var pictures_number = images.length;
614
+
615
+ for (var i = pictures_number - 1; i >= 0; i--) {
616
+ if(images.attr('height') === undefined) {
617
+ return false;
618
+ };
619
+ };
620
+
621
+ return true;
622
+ }
623
+
624
+ if (unloaded === 0 || pictures_has_height(images)) {
603
625
  callback(images);
604
626
  }
605
627
 
@@ -4,7 +4,7 @@
4
4
  Foundation.libs['magellan-expedition'] = {
5
5
  name : 'magellan-expedition',
6
6
 
7
- version : '5.5.1',
7
+ version : '5.5.2',
8
8
 
9
9
  settings : {
10
10
  active_class : 'active',
@@ -32,38 +32,42 @@
32
32
 
33
33
  S(self.scope)
34
34
  .off('.magellan')
35
- .on('click.fndtn.magellan', '[' + self.add_namespace('data-magellan-arrival') + '] a[href^="#"]', function (e) {
36
- e.preventDefault();
37
- var expedition = $(this).closest('[' + self.attr_name() + ']'),
38
- settings = expedition.data('magellan-expedition-init'),
39
- hash = this.hash.split('#').join(''),
40
- target = $('a[name="' + hash + '"]');
35
+ .on('click.fndtn.magellan', '[' + self.add_namespace('data-magellan-arrival') + '] a[href*=#]', function (e) {
36
+ var sameHost = ((this.hostname === location.hostname) || !this.hostname),
37
+ samePath = self.filterPathname(location.pathname) === self.filterPathname(this.pathname),
38
+ testHash = this.hash.replace(/(:|\.|\/)/g, '\\$1'),
39
+ anchor = this;
40
+
41
+ if (sameHost && samePath && testHash) {
42
+ e.preventDefault();
43
+ var expedition = $(this).closest('[' + self.attr_name() + ']'),
44
+ settings = expedition.data('magellan-expedition-init'),
45
+ hash = this.hash.split('#').join(''),
46
+ target = $('a[name="' + hash + '"]');
47
+
48
+ if (target.length === 0) {
49
+ target = $('#' + hash);
41
50
 
42
- if (target.length === 0) {
43
- target = $('#' + hash);
44
-
45
- }
46
-
47
- // Account for expedition height if fixed position
48
- var scroll_top = target.offset().top - settings.destination_threshold + 1;
49
- if (settings.offset_by_height) {
50
- scroll_top = scroll_top - expedition.outerHeight();
51
- }
51
+ }
52
52
 
53
- $('html, body').stop().animate({
54
- 'scrollTop' : scroll_top
55
- }, settings.duration, settings.easing, function () {
56
- if (history.pushState) {
57
- history.pushState(null, null, '#' + hash);
58
- } else {
59
- location.hash = '#' + hash;
53
+ // Account for expedition height if fixed position
54
+ var scroll_top = target.offset().top - settings.destination_threshold + 1;
55
+ if (settings.offset_by_height) {
56
+ scroll_top = scroll_top - expedition.outerHeight();
60
57
  }
61
- });
58
+ $('html, body').stop().animate({
59
+ 'scrollTop' : scroll_top
60
+ }, settings.duration, settings.easing, function () {
61
+ if (history.pushState) {
62
+ history.pushState(null, null, anchor.pathname + '#' + hash);
63
+ }
64
+ else {
65
+ location.hash = anchor.pathname + '#' + hash;
66
+ }
67
+ });
68
+ }
62
69
  })
63
70
  .on('scroll.fndtn.magellan', self.throttle(this.check_for_arrivals.bind(this), settings.throttle_delay));
64
-
65
- $(window)
66
- .on('resize.fndtn.magellan', self.throttle(this.set_expedition_position.bind(this), settings.throttle_delay));
67
71
  },
68
72
 
69
73
  check_for_arrivals : function () {
@@ -194,6 +198,14 @@
194
198
  this.S(window).off('.magellan');
195
199
  },
196
200
 
201
+ filterPathname : function (pathname) {
202
+ pathname = pathname || '';
203
+ return pathname
204
+ .replace(/^\//,'')
205
+ .replace(/(?:index|default).[a-zA-Z]{3,4}$/,'')
206
+ .replace(/\/$/,'');
207
+ },
208
+
197
209
  reflow : function () {
198
210
  var self = this;
199
211
  // remove placeholder expeditions used for height calculation purposes