aboutsummaryrefslogtreecommitdiffstats
path: root/library/foundation/js/foundation/foundation.magellan.js
diff options
context:
space:
mode:
Diffstat (limited to 'library/foundation/js/foundation/foundation.magellan.js')
-rw-r--r--library/foundation/js/foundation/foundation.magellan.js215
1 files changed, 0 insertions, 215 deletions
diff --git a/library/foundation/js/foundation/foundation.magellan.js b/library/foundation/js/foundation/foundation.magellan.js
deleted file mode 100644
index 614923abb..000000000
--- a/library/foundation/js/foundation/foundation.magellan.js
+++ /dev/null
@@ -1,215 +0,0 @@
-;(function ($, window, document, undefined) {
- 'use strict';
-
- Foundation.libs['magellan-expedition'] = {
- name : 'magellan-expedition',
-
- version : '5.5.2',
-
- settings : {
- active_class : 'active',
- threshold : 0, // pixels from the top of the expedition for it to become fixes
- destination_threshold : 20, // pixels from the top of destination for it to be considered active
- throttle_delay : 30, // calculation throttling to increase framerate
- fixed_top : 0, // top distance in pixels assigend to the fixed element on scroll
- offset_by_height : true, // whether to offset the destination by the expedition height. Usually you want this to be true, unless your expedition is on the side.
- duration : 700, // animation duration time
- easing : 'swing' // animation easing
- },
-
- init : function (scope, method, options) {
- Foundation.inherit(this, 'throttle');
- this.bindings(method, options);
- },
-
- events : function () {
- var self = this,
- S = self.S,
- settings = self.settings;
-
- // initialize expedition offset
- self.set_expedition_position();
-
- S(self.scope)
- .off('.magellan')
- .on('click.fndtn.magellan', '[' + self.add_namespace('data-magellan-arrival') + '] a[href*=#]', function (e) {
- var sameHost = ((this.hostname === location.hostname) || !this.hostname),
- samePath = self.filterPathname(location.pathname) === self.filterPathname(this.pathname),
- testHash = this.hash.replace(/(:|\.|\/)/g, '\\$1'),
- anchor = this;
-
- if (sameHost && samePath && testHash) {
- e.preventDefault();
- var expedition = $(this).closest('[' + self.attr_name() + ']'),
- settings = expedition.data('magellan-expedition-init'),
- hash = this.hash.split('#').join(''),
- target = $('a[name="' + hash + '"]');
-
- if (target.length === 0) {
- target = $('#' + hash);
-
- }
-
- // Account for expedition height if fixed position
- var scroll_top = target.offset().top - settings.destination_threshold + 1;
- if (settings.offset_by_height) {
- scroll_top = scroll_top - expedition.outerHeight();
- }
- $('html, body').stop().animate({
- 'scrollTop' : scroll_top
- }, settings.duration, settings.easing, function () {
- if (history.pushState) {
- history.pushState(null, null, anchor.pathname + '#' + hash);
- }
- else {
- location.hash = anchor.pathname + '#' + hash;
- }
- });
- }
- })
- .on('scroll.fndtn.magellan', self.throttle(this.check_for_arrivals.bind(this), settings.throttle_delay));
- },
-
- check_for_arrivals : function () {
- var self = this;
- self.update_arrivals();
- self.update_expedition_positions();
- },
-
- set_expedition_position : function () {
- var self = this;
- $('[' + this.attr_name() + '=fixed]', self.scope).each(function (idx, el) {
- var expedition = $(this),
- settings = expedition.data('magellan-expedition-init'),
- styles = expedition.attr('styles'), // save styles
- top_offset, fixed_top;
-
- expedition.attr('style', '');
- top_offset = expedition.offset().top + settings.threshold;
-
- //set fixed-top by attribute
- fixed_top = parseInt(expedition.data('magellan-fixed-top'));
- if (!isNaN(fixed_top)) {
- self.settings.fixed_top = fixed_top;
- }
-
- expedition.data(self.data_attr('magellan-top-offset'), top_offset);
- expedition.attr('style', styles);
- });
- },
-
- update_expedition_positions : function () {
- var self = this,
- window_top_offset = $(window).scrollTop();
-
- $('[' + this.attr_name() + '=fixed]', self.scope).each(function () {
- var expedition = $(this),
- settings = expedition.data('magellan-expedition-init'),
- styles = expedition.attr('style'), // save styles
- top_offset = expedition.data('magellan-top-offset');
-
- //scroll to the top distance
- if (window_top_offset + self.settings.fixed_top >= top_offset) {
- // Placeholder allows height calculations to be consistent even when
- // appearing to switch between fixed/non-fixed placement
- var placeholder = expedition.prev('[' + self.add_namespace('data-magellan-expedition-clone') + ']');
- if (placeholder.length === 0) {
- placeholder = expedition.clone();
- placeholder.removeAttr(self.attr_name());
- placeholder.attr(self.add_namespace('data-magellan-expedition-clone'), '');
- expedition.before(placeholder);
- }
- expedition.css({position :'fixed', top : settings.fixed_top}).addClass('fixed');
- } else {
- expedition.prev('[' + self.add_namespace('data-magellan-expedition-clone') + ']').remove();
- expedition.attr('style', styles).css('position', '').css('top', '').removeClass('fixed');
- }
- });
- },
-
- update_arrivals : function () {
- var self = this,
- window_top_offset = $(window).scrollTop();
-
- $('[' + this.attr_name() + ']', self.scope).each(function () {
- var expedition = $(this),
- settings = expedition.data(self.attr_name(true) + '-init'),
- offsets = self.offsets(expedition, window_top_offset),
- arrivals = expedition.find('[' + self.add_namespace('data-magellan-arrival') + ']'),
- active_item = false;
- offsets.each(function (idx, item) {
- if (item.viewport_offset >= item.top_offset) {
- var arrivals = expedition.find('[' + self.add_namespace('data-magellan-arrival') + ']');
- arrivals.not(item.arrival).removeClass(settings.active_class);
- item.arrival.addClass(settings.active_class);
- active_item = true;
- return true;
- }
- });
-
- if (!active_item) {
- arrivals.removeClass(settings.active_class);
- }
- });
- },
-
- offsets : function (expedition, window_offset) {
- var self = this,
- settings = expedition.data(self.attr_name(true) + '-init'),
- viewport_offset = window_offset;
-
- return expedition.find('[' + self.add_namespace('data-magellan-arrival') + ']').map(function (idx, el) {
- var name = $(this).data(self.data_attr('magellan-arrival')),
- dest = $('[' + self.add_namespace('data-magellan-destination') + '=' + name + ']');
- if (dest.length > 0) {
- var top_offset = dest.offset().top - settings.destination_threshold;
- if (settings.offset_by_height) {
- top_offset = top_offset - expedition.outerHeight();
- }
- top_offset = Math.floor(top_offset);
- return {
- destination : dest,
- arrival : $(this),
- top_offset : top_offset,
- viewport_offset : viewport_offset
- }
- }
- }).sort(function (a, b) {
- if (a.top_offset < b.top_offset) {
- return -1;
- }
- if (a.top_offset > b.top_offset) {
- return 1;
- }
- return 0;
- });
- },
-
- data_attr : function (str) {
- if (this.namespace.length > 0) {
- return this.namespace + '-' + str;
- }
-
- return str;
- },
-
- off : function () {
- this.S(this.scope).off('.magellan');
- this.S(window).off('.magellan');
- },
-
- filterPathname : function (pathname) {
- pathname = pathname || '';
- return pathname
- .replace(/^\//,'')
- .replace(/(?:index|default).[a-zA-Z]{3,4}$/,'')
- .replace(/\/$/,'');
- },
-
- reflow : function () {
- var self = this;
- // remove placeholder expeditions used for height calculation purposes
- $('[' + self.add_namespace('data-magellan-expedition-clone') + ']', self.scope).remove();
- }
- };
-}(jQuery, window, window.document));