| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732 | /* * Foundation Responsive Library * http://foundation.zurb.com * Copyright 2015, ZURB * Free to use under the MIT license. * http://www.opensource.org/licenses/mit-license.php*/(function ($, window, document, undefined) {  'use strict';  var header_helpers = function (class_array) {    var head = $('head');    head.prepend($.map(class_array, function (class_name) {      if (head.has('.' + class_name).length === 0) {        return '<meta class="' + class_name + '" />';      }    }));  };  header_helpers([    'foundation-mq-small',    'foundation-mq-small-only',    'foundation-mq-medium',    'foundation-mq-medium-only',    'foundation-mq-large',    'foundation-mq-large-only',    'foundation-mq-xlarge',    'foundation-mq-xlarge-only',    'foundation-mq-xxlarge',    'foundation-data-attribute-namespace']);  // Enable FastClick if present  $(function () {    if (typeof FastClick !== 'undefined') {      // Don't attach to body if undefined      if (typeof document.body !== 'undefined') {        FastClick.attach(document.body);      }    }  });  // private Fast Selector wrapper,  // returns jQuery object. Only use where  // getElementById is not available.  var S = function (selector, context) {    if (typeof selector === 'string') {      if (context) {        var cont;        if (context.jquery) {          cont = context[0];          if (!cont) {            return context;          }        } else {          cont = context;        }        return $(cont.querySelectorAll(selector));      }      return $(document.querySelectorAll(selector));    }    return $(selector, context);  };  // Namespace functions.  var attr_name = function (init) {    var arr = [];    if (!init) {      arr.push('data');    }    if (this.namespace.length > 0) {      arr.push(this.namespace);    }    arr.push(this.name);    return arr.join('-');  };  var add_namespace = function (str) {    var parts = str.split('-'),        i = parts.length,        arr = [];    while (i--) {      if (i !== 0) {        arr.push(parts[i]);      } else {        if (this.namespace.length > 0) {          arr.push(this.namespace, parts[i]);        } else {          arr.push(parts[i]);        }      }    }    return arr.reverse().join('-');  };  // Event binding and data-options updating.  var bindings = function (method, options) {    var self = this,        bind = function(){          var $this = S(this),              should_bind_events = !$this.data(self.attr_name(true) + '-init');          $this.data(self.attr_name(true) + '-init', $.extend({}, self.settings, (options || method), self.data_options($this)));          if (should_bind_events) {            self.events(this);          }        };    if (S(this.scope).is('[' + this.attr_name() +']')) {      bind.call(this.scope);    } else {      S('[' + this.attr_name() +']', this.scope).each(bind);    }    // # Patch to fix #5043 to move this *after* the if/else clause in order for Backbone and similar frameworks to have improved control over event binding and data-options updating.    if (typeof method === 'string') {      return this[method].call(this, options);    }  };  var single_image_loaded = function (image, callback) {    function loaded () {      callback(image[0]);    }    function bindLoad () {      this.one('load', loaded);      if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) {        var src = this.attr( 'src' ),            param = src.match( /\?/ ) ? '&' : '?';        param += 'random=' + (new Date()).getTime();        this.attr('src', src + param);      }    }    if (!image.attr('src')) {      loaded();      return;    }    if (image[0].complete || image[0].readyState === 4) {      loaded();    } else {      bindLoad.call(image);    }  };  /*! 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 */  window.matchMedia || (window.matchMedia = function() {      "use strict";      // For browsers that support matchMedium api such as IE 9 and webkit      var styleMedia = (window.styleMedia || window.media);      // For those that don't support matchMedium      if (!styleMedia) {          var style       = document.createElement('style'),              script      = document.getElementsByTagName('script')[0],              info        = null;          style.type  = 'text/css';          style.id    = 'matchmediajs-test';          script.parentNode.insertBefore(style, script);          // 'style.currentStyle' is used by IE <= 8 and 'window.getComputedStyle' for all other browsers          info = ('getComputedStyle' in window) && window.getComputedStyle(style, null) || style.currentStyle;          styleMedia = {              matchMedium: function(media) {                  var text = '@media ' + media + '{ #matchmediajs-test { width: 1px; } }';                  // 'style.styleSheet' is used by IE <= 8 and 'style.textContent' for all other browsers                  if (style.styleSheet) {                      style.styleSheet.cssText = text;                  } else {                      style.textContent = text;                  }                  // Test if media query is true or false                  return info.width === '1px';              }          };      }      return function(media) {          return {              matches: styleMedia.matchMedium(media || 'all'),              media: media || 'all'          };      };  }());  /*   * jquery.requestAnimationFrame   * https://github.com/gnarf37/jquery-requestAnimationFrame   * Requires jQuery 1.8+   *   * Copyright (c) 2012 Corey Frang   * Licensed under the MIT license.   */  (function(jQuery) {  // requestAnimationFrame polyfill adapted from Erik Möller  // fixes from Paul Irish and Tino Zijdel  // http://paulirish.com/2011/requestanimationframe-for-smart-animating/  // http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating  var animating,      lastTime = 0,      vendors = ['webkit', 'moz'],      requestAnimationFrame = window.requestAnimationFrame,      cancelAnimationFrame = window.cancelAnimationFrame,      jqueryFxAvailable = 'undefined' !== typeof jQuery.fx;  for (; lastTime < vendors.length && !requestAnimationFrame; lastTime++) {    requestAnimationFrame = window[ vendors[lastTime] + 'RequestAnimationFrame' ];    cancelAnimationFrame = cancelAnimationFrame ||      window[ vendors[lastTime] + 'CancelAnimationFrame' ] ||      window[ vendors[lastTime] + 'CancelRequestAnimationFrame' ];  }  function raf() {    if (animating) {      requestAnimationFrame(raf);      if (jqueryFxAvailable) {        jQuery.fx.tick();      }    }  }  if (requestAnimationFrame) {    // use rAF    window.requestAnimationFrame = requestAnimationFrame;    window.cancelAnimationFrame = cancelAnimationFrame;    if (jqueryFxAvailable) {      jQuery.fx.timer = function (timer) {        if (timer() && jQuery.timers.push(timer) && !animating) {          animating = true;          raf();        }      };      jQuery.fx.stop = function () {        animating = false;      };    }  } else {    // polyfill    window.requestAnimationFrame = function (callback) {      var currTime = new Date().getTime(),        timeToCall = Math.max(0, 16 - (currTime - lastTime)),        id = window.setTimeout(function () {          callback(currTime + timeToCall);        }, timeToCall);      lastTime = currTime + timeToCall;      return id;    };    window.cancelAnimationFrame = function (id) {      clearTimeout(id);    };  }  }( $ ));  function removeQuotes (string) {    if (typeof string === 'string' || string instanceof String) {      string = string.replace(/^['\\/"]+|(;\s?})+|['\\/"]+$/g, '');    }    return string;  }  function MediaQuery(selector) {    this.selector = selector;    this.query = '';  }  MediaQuery.prototype.toString = function () {    return this.query || (this.query = S(this.selector).css('font-family').replace(/^[\/\\'"]+|(;\s?})+|[\/\\'"]+$/g, ''));  };  window.Foundation = {    name : 'Foundation',    version : '5.5.3',    media_queries : {      'small'       : new MediaQuery('.foundation-mq-small'),      'small-only'  : new MediaQuery('.foundation-mq-small-only'),      'medium'      : new MediaQuery('.foundation-mq-medium'),      'medium-only' : new MediaQuery('.foundation-mq-medium-only'),      'large'       : new MediaQuery('.foundation-mq-large'),      'large-only'  : new MediaQuery('.foundation-mq-large-only'),      'xlarge'      : new MediaQuery('.foundation-mq-xlarge'),      'xlarge-only' : new MediaQuery('.foundation-mq-xlarge-only'),      'xxlarge'     : new MediaQuery('.foundation-mq-xxlarge')    },    stylesheet : $('<style></style>').appendTo('head')[0].sheet,    global : {      namespace : undefined    },    init : function (scope, libraries, method, options, response) {      var args = [scope, method, options, response],          responses = [];      // check RTL      this.rtl = /rtl/i.test(S('html').attr('dir'));      // set foundation global scope      this.scope = scope || this.scope;      this.set_namespace();      if (libraries && typeof libraries === 'string' && !/reflow/i.test(libraries)) {        if (this.libs.hasOwnProperty(libraries)) {          responses.push(this.init_lib(libraries, args));        }      } else {        for (var lib in this.libs) {          responses.push(this.init_lib(lib, libraries));        }      }      S(window).load(function () {        S(window)          .trigger('resize.fndtn.clearing')          .trigger('resize.fndtn.dropdown')          .trigger('resize.fndtn.equalizer')          .trigger('resize.fndtn.interchange')          .trigger('resize.fndtn.joyride')          .trigger('resize.fndtn.magellan')          .trigger('resize.fndtn.topbar')          .trigger('resize.fndtn.slider');      });      return scope;    },    init_lib : function (lib, args) {      if (this.libs.hasOwnProperty(lib)) {        this.patch(this.libs[lib]);        if (args && args.hasOwnProperty(lib)) {            if (typeof this.libs[lib].settings !== 'undefined') {              $.extend(true, this.libs[lib].settings, args[lib]);            } else if (typeof this.libs[lib].defaults !== 'undefined') {              $.extend(true, this.libs[lib].defaults, args[lib]);            }          return this.libs[lib].init.apply(this.libs[lib], [this.scope, args[lib]]);        }        args = args instanceof Array ? args : new Array(args);        return this.libs[lib].init.apply(this.libs[lib], args);      }      return function () {};    },    patch : function (lib) {      lib.scope = this.scope;      lib.namespace = this.global.namespace;      lib.rtl = this.rtl;      lib['data_options'] = this.utils.data_options;      lib['attr_name'] = attr_name;      lib['add_namespace'] = add_namespace;      lib['bindings'] = bindings;      lib['S'] = this.utils.S;    },    inherit : function (scope, methods) {      var methods_arr = methods.split(' '),          i = methods_arr.length;      while (i--) {        if (this.utils.hasOwnProperty(methods_arr[i])) {          scope[methods_arr[i]] = this.utils[methods_arr[i]];        }      }    },    set_namespace : function () {      // Description:      //    Don't bother reading the namespace out of the meta tag      //    if the namespace has been set globally in javascript      //      // Example:      //    Foundation.global.namespace = 'my-namespace';      // or make it an empty string:      //    Foundation.global.namespace = '';      //      //      // If the namespace has not been set (is undefined), try to read it out of the meta element.      // Otherwise use the globally defined namespace, even if it's empty ('')      var namespace = ( this.global.namespace === undefined ) ? $('.foundation-data-attribute-namespace').css('font-family') : this.global.namespace;      // Finally, if the namsepace is either undefined or false, set it to an empty string.      // Otherwise use the namespace value.      this.global.namespace = ( namespace === undefined || /false/i.test(namespace) ) ? '' : namespace;    },    libs : {},    // methods that can be inherited in libraries    utils : {      // Description:      //    Fast Selector wrapper returns jQuery object. Only use where getElementById      //    is not available.      //      // Arguments:      //    Selector (String): CSS selector describing the element(s) to be      //    returned as a jQuery object.      //      //    Scope (String): CSS selector describing the area to be searched. Default      //    is document.      //      // Returns:      //    Element (jQuery Object): jQuery object containing elements matching the      //    selector within the scope.      S : S,      // Description:      //    Executes a function a max of once every n milliseconds      //      // Arguments:      //    Func (Function): Function to be throttled.      //      //    Delay (Integer): Function execution threshold in milliseconds.      //      // Returns:      //    Lazy_function (Function): Function with throttling applied.      throttle : function (func, delay) {        var timer = null;        return function () {          var context = this, args = arguments;          if (timer == null) {            timer = setTimeout(function () {              func.apply(context, args);              timer = null;            }, delay);          }        };      },      // Description:      //    Executes a function when it stops being invoked for n seconds      //    Modified version of _.debounce() http://underscorejs.org      //      // Arguments:      //    Func (Function): Function to be debounced.      //      //    Delay (Integer): Function execution threshold in milliseconds.      //      //    Immediate (Bool): Whether the function should be called at the beginning      //    of the delay instead of the end. Default is false.      //      // Returns:      //    Lazy_function (Function): Function with debouncing applied.      debounce : function (func, delay, immediate) {        var timeout, result;        return function () {          var context = this, args = arguments;          var later = function () {            timeout = null;            if (!immediate) {              result = func.apply(context, args);            }          };          var callNow = immediate && !timeout;          clearTimeout(timeout);          timeout = setTimeout(later, delay);          if (callNow) {            result = func.apply(context, args);          }          return result;        };      },      // Description:      //    Parses data-options attribute      //      // Arguments:      //    El (jQuery Object): Element to be parsed.      //      // Returns:      //    Options (Javascript Object): Contents of the element's data-options      //    attribute.      data_options : function (el, data_attr_name) {        data_attr_name = data_attr_name || 'options';        var opts = {}, ii, p, opts_arr,            data_options = function (el) {              var namespace = Foundation.global.namespace;              if (namespace.length > 0) {                return el.data(namespace + '-' + data_attr_name);              }              return el.data(data_attr_name);            };        var cached_options = data_options(el);        if (typeof cached_options === 'object') {          return cached_options;        }        opts_arr = (cached_options || ':').split(';');        ii = opts_arr.length;        function isNumber (o) {          return !isNaN (o - 0) && o !== null && o !== '' && o !== false && o !== true;        }        function trim (str) {          if (typeof str === 'string') {            return $.trim(str);          }          return str;        }        while (ii--) {          p = opts_arr[ii].split(':');          p = [p[0], p.slice(1).join(':')];          if (/true/i.test(p[1])) {            p[1] = true;          }          if (/false/i.test(p[1])) {            p[1] = false;          }          if (isNumber(p[1])) {            if (p[1].indexOf('.') === -1) {              p[1] = parseInt(p[1], 10);            } else {              p[1] = parseFloat(p[1]);            }          }          if (p.length === 2 && p[0].length > 0) {            opts[trim(p[0])] = trim(p[1]);          }        }        return opts;      },      // Description:      //    Adds JS-recognizable media queries      //      // Arguments:      //    Media (String): Key string for the media query to be stored as in      //    Foundation.media_queries      //      //    Class (String): Class name for the generated <meta> tag      register_media : function (media, media_class) {        if (Foundation.media_queries[media] === undefined) {          $('head').append('<meta class="' + media_class + '"/>');          Foundation.media_queries[media] = removeQuotes($('.' + media_class).css('font-family'));        }      },      // Description:      //    Add custom CSS within a JS-defined media query      //      // Arguments:      //    Rule (String): CSS rule to be appended to the document.      //      //    Media (String): Optional media query string for the CSS rule to be      //    nested under.      add_custom_rule : function (rule, media) {        if (media === undefined && Foundation.stylesheet) {          Foundation.stylesheet.insertRule(rule, Foundation.stylesheet.cssRules.length);        } else {          var query = Foundation.media_queries[media];          if (query !== undefined) {            Foundation.stylesheet.insertRule('@media ' +              Foundation.media_queries[media] + '{ ' + rule + ' }', Foundation.stylesheet.cssRules.length);          }        }      },      // Description:      //    Performs a callback function when an image is fully loaded      //      // Arguments:      //    Image (jQuery Object): Image(s) to check if loaded.      //      //    Callback (Function): Function to execute when image is fully loaded.      image_loaded : function (images, callback) {        var self = this,            unloaded = images.length;        function pictures_has_height(images) {          var pictures_number = images.length;          for (var i = pictures_number - 1; i >= 0; i--) {            if(images.attr('height') === undefined) {              return false;            };          };          return true;        }        if (unloaded === 0 || pictures_has_height(images)) {          callback(images);        }        images.each(function () {          single_image_loaded(self.S(this), function () {            unloaded -= 1;            if (unloaded === 0) {              callback(images);            }          });        });      },      // Description:      //    Returns a random, alphanumeric string      //      // Arguments:      //    Length (Integer): Length of string to be generated. Defaults to random      //    integer.      //      // Returns:      //    Rand (String): Pseudo-random, alphanumeric string.      random_str : function () {        if (!this.fidx) {          this.fidx = 0;        }        this.prefix = this.prefix || [(this.name || 'F'), (+new Date).toString(36)].join('-');        return this.prefix + (this.fidx++).toString(36);      },      // Description:      //    Helper for window.matchMedia      //      // Arguments:      //    mq (String): Media query      //      // Returns:      //    (Boolean): Whether the media query passes or not      match : function (mq) {        return window.matchMedia(mq).matches;      },      // Description:      //    Helpers for checking Foundation default media queries with JS      //      // Returns:      //    (Boolean): Whether the media query passes or not      is_small_up : function () {        return this.match(Foundation.media_queries.small);      },      is_medium_up : function () {        return this.match(Foundation.media_queries.medium);      },      is_large_up : function () {        return this.match(Foundation.media_queries.large);      },      is_xlarge_up : function () {        return this.match(Foundation.media_queries.xlarge);      },      is_xxlarge_up : function () {        return this.match(Foundation.media_queries.xxlarge);      },      is_small_only : function () {        return !this.is_medium_up() && !this.is_large_up() && !this.is_xlarge_up() && !this.is_xxlarge_up();      },      is_medium_only : function () {        return this.is_medium_up() && !this.is_large_up() && !this.is_xlarge_up() && !this.is_xxlarge_up();      },      is_large_only : function () {        return this.is_medium_up() && this.is_large_up() && !this.is_xlarge_up() && !this.is_xxlarge_up();      },      is_xlarge_only : function () {        return this.is_medium_up() && this.is_large_up() && this.is_xlarge_up() && !this.is_xxlarge_up();      },      is_xxlarge_only : function () {        return this.is_medium_up() && this.is_large_up() && this.is_xlarge_up() && this.is_xxlarge_up();      }    }  };  $.fn.foundation = function () {    var args = Array.prototype.slice.call(arguments, 0);    return this.each(function () {      Foundation.init.apply(Foundation, [this].concat(args));      return this;    });  };}(jQuery, window, window.document));
 |