3925 lines
140 KiB
JavaScript
3925 lines
140 KiB
JavaScript
/******/ (function(modules) { // webpackBootstrap
|
|
/******/ // The module cache
|
|
/******/ var installedModules = {};
|
|
/******/
|
|
/******/ // The require function
|
|
/******/ function __webpack_require__(moduleId) {
|
|
/******/
|
|
/******/ // Check if module is in cache
|
|
/******/ if(installedModules[moduleId]) {
|
|
/******/ return installedModules[moduleId].exports;
|
|
/******/ }
|
|
/******/ // Create a new module (and put it into the cache)
|
|
/******/ var module = installedModules[moduleId] = {
|
|
/******/ i: moduleId,
|
|
/******/ l: false,
|
|
/******/ exports: {}
|
|
/******/ };
|
|
/******/
|
|
/******/ // Execute the module function
|
|
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
|
/******/
|
|
/******/ // Flag the module as loaded
|
|
/******/ module.l = true;
|
|
/******/
|
|
/******/ // Return the exports of the module
|
|
/******/ return module.exports;
|
|
/******/ }
|
|
/******/
|
|
/******/
|
|
/******/ // expose the modules object (__webpack_modules__)
|
|
/******/ __webpack_require__.m = modules;
|
|
/******/
|
|
/******/ // expose the module cache
|
|
/******/ __webpack_require__.c = installedModules;
|
|
/******/
|
|
/******/ // identity function for calling harmony imports with the correct context
|
|
/******/ __webpack_require__.i = function(value) { return value; };
|
|
/******/
|
|
/******/ // define getter function for harmony exports
|
|
/******/ __webpack_require__.d = function(exports, name, getter) {
|
|
/******/ if(!__webpack_require__.o(exports, name)) {
|
|
/******/ Object.defineProperty(exports, name, {
|
|
/******/ configurable: false,
|
|
/******/ enumerable: true,
|
|
/******/ get: getter
|
|
/******/ });
|
|
/******/ }
|
|
/******/ };
|
|
/******/
|
|
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
|
/******/ __webpack_require__.n = function(module) {
|
|
/******/ var getter = module && module.__esModule ?
|
|
/******/ function getDefault() { return module['default']; } :
|
|
/******/ function getModuleExports() { return module; };
|
|
/******/ __webpack_require__.d(getter, 'a', getter);
|
|
/******/ return getter;
|
|
/******/ };
|
|
/******/
|
|
/******/ // Object.prototype.hasOwnProperty.call
|
|
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
|
/******/
|
|
/******/ // __webpack_public_path__
|
|
/******/ __webpack_require__.p = "";
|
|
/******/
|
|
/******/ // Load entry module and return exports
|
|
/******/ return __webpack_require__(__webpack_require__.s = 16);
|
|
/******/ })
|
|
/************************************************************************/
|
|
/******/ ([
|
|
/* 0 */
|
|
/***/ (function(module, exports) {
|
|
|
|
module.exports = jQuery;
|
|
|
|
/***/ }),
|
|
/* 1 */
|
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return rtl; });
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return GetYoDigits; });
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return transitionend; });
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery__ = __webpack_require__(0);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_jquery__);
|
|
|
|
|
|
|
|
|
|
// Core Foundation Utilities, utilized in a number of places.
|
|
|
|
/**
|
|
* Returns a boolean for RTL support
|
|
*/
|
|
function rtl() {
|
|
return __WEBPACK_IMPORTED_MODULE_0_jquery___default()('html').attr('dir') === 'rtl';
|
|
}
|
|
|
|
/**
|
|
* returns a random base-36 uid with namespacing
|
|
* @function
|
|
* @param {Number} length - number of random base-36 digits desired. Increase for more random strings.
|
|
* @param {String} namespace - name of plugin to be incorporated in uid, optional.
|
|
* @default {String} '' - if no plugin name is provided, nothing is appended to the uid.
|
|
* @returns {String} - unique id
|
|
*/
|
|
function GetYoDigits(length, namespace) {
|
|
length = length || 6;
|
|
return Math.round(Math.pow(36, length + 1) - Math.random() * Math.pow(36, length)).toString(36).slice(1) + (namespace ? '-' + namespace : '');
|
|
}
|
|
|
|
function transitionend($elem) {
|
|
var transitions = {
|
|
'transition': 'transitionend',
|
|
'WebkitTransition': 'webkitTransitionEnd',
|
|
'MozTransition': 'transitionend',
|
|
'OTransition': 'otransitionend'
|
|
};
|
|
var elem = document.createElement('div'),
|
|
end;
|
|
|
|
for (var t in transitions) {
|
|
if (typeof elem.style[t] !== 'undefined') {
|
|
end = transitions[t];
|
|
}
|
|
}
|
|
if (end) {
|
|
return end;
|
|
} else {
|
|
end = setTimeout(function () {
|
|
$elem.triggerHandler('transitionend', [$elem]);
|
|
}, 1);
|
|
return 'transitionend';
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/***/ }),
|
|
/* 2 */
|
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Plugin; });
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery__ = __webpack_require__(0);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_jquery__);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__foundation_util_core__ = __webpack_require__(1);
|
|
|
|
|
|
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
|
|
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
|
|
|
|
|
|
// Abstract class for providing lifecycle hooks. Expect plugins to define AT LEAST
|
|
// {function} _setup (replaces previous constructor),
|
|
// {function} _destroy (replaces previous destroy)
|
|
|
|
var Plugin = function () {
|
|
function Plugin(element, options) {
|
|
_classCallCheck(this, Plugin);
|
|
|
|
this._setup(element, options);
|
|
var pluginName = getPluginName(this);
|
|
this.uuid = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__foundation_util_core__["a" /* GetYoDigits */])(6, pluginName);
|
|
|
|
if (!this.$element.attr('data-' + pluginName)) {
|
|
this.$element.attr('data-' + pluginName, this.uuid);
|
|
}
|
|
if (!this.$element.data('zfPlugin')) {
|
|
this.$element.data('zfPlugin', this);
|
|
}
|
|
/**
|
|
* Fires when the plugin has initialized.
|
|
* @event Plugin#init
|
|
*/
|
|
this.$element.trigger('init.zf.' + pluginName);
|
|
}
|
|
|
|
_createClass(Plugin, [{
|
|
key: 'destroy',
|
|
value: function destroy() {
|
|
this._destroy();
|
|
var pluginName = getPluginName(this);
|
|
this.$element.removeAttr('data-' + pluginName).removeData('zfPlugin')
|
|
/**
|
|
* Fires when the plugin has been destroyed.
|
|
* @event Plugin#destroyed
|
|
*/
|
|
.trigger('destroyed.zf.' + pluginName);
|
|
for (var prop in this) {
|
|
this[prop] = null; //clean up script to prep for garbage collection.
|
|
}
|
|
}
|
|
}]);
|
|
|
|
return Plugin;
|
|
}();
|
|
|
|
// Convert PascalCase to kebab-case
|
|
// Thank you: http://stackoverflow.com/a/8955580
|
|
|
|
|
|
function hyphenate(str) {
|
|
return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
|
|
}
|
|
|
|
function getPluginName(obj) {
|
|
if (typeof obj.constructor.name !== 'undefined') {
|
|
return hyphenate(obj.constructor.name);
|
|
} else {
|
|
return hyphenate(obj.className);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/***/ }),
|
|
/* 3 */
|
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MediaQuery; });
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery__ = __webpack_require__(0);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_jquery__);
|
|
|
|
|
|
|
|
|
|
// Default set of media queries
|
|
var defaultQueries = {
|
|
'default': 'only screen',
|
|
landscape: 'only screen and (orientation: landscape)',
|
|
portrait: 'only screen and (orientation: portrait)',
|
|
retina: 'only screen and (-webkit-min-device-pixel-ratio: 2),' + 'only screen and (min--moz-device-pixel-ratio: 2),' + 'only screen and (-o-min-device-pixel-ratio: 2/1),' + 'only screen and (min-device-pixel-ratio: 2),' + 'only screen and (min-resolution: 192dpi),' + 'only screen and (min-resolution: 2dppx)'
|
|
};
|
|
|
|
// 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
|
|
var 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 && script.parentNode && 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'
|
|
};
|
|
};
|
|
}();
|
|
|
|
var MediaQuery = {
|
|
queries: [],
|
|
|
|
current: '',
|
|
|
|
/**
|
|
* Initializes the media query helper, by extracting the breakpoint list from the CSS and activating the breakpoint watcher.
|
|
* @function
|
|
* @private
|
|
*/
|
|
_init: function () {
|
|
var self = this;
|
|
var $meta = __WEBPACK_IMPORTED_MODULE_0_jquery___default()('meta.foundation-mq');
|
|
if (!$meta.length) {
|
|
__WEBPACK_IMPORTED_MODULE_0_jquery___default()('<meta class="foundation-mq">').appendTo(document.head);
|
|
}
|
|
|
|
var extractedStyles = __WEBPACK_IMPORTED_MODULE_0_jquery___default()('.foundation-mq').css('font-family');
|
|
var namedQueries;
|
|
|
|
namedQueries = parseStyleToObject(extractedStyles);
|
|
|
|
for (var key in namedQueries) {
|
|
if (namedQueries.hasOwnProperty(key)) {
|
|
self.queries.push({
|
|
name: key,
|
|
value: 'only screen and (min-width: ' + namedQueries[key] + ')'
|
|
});
|
|
}
|
|
}
|
|
|
|
this.current = this._getCurrentSize();
|
|
|
|
this._watcher();
|
|
},
|
|
|
|
|
|
/**
|
|
* Checks if the screen is at least as wide as a breakpoint.
|
|
* @function
|
|
* @param {String} size - Name of the breakpoint to check.
|
|
* @returns {Boolean} `true` if the breakpoint matches, `false` if it's smaller.
|
|
*/
|
|
atLeast: function (size) {
|
|
var query = this.get(size);
|
|
|
|
if (query) {
|
|
return matchMedia(query).matches;
|
|
}
|
|
|
|
return false;
|
|
},
|
|
|
|
|
|
/**
|
|
* Checks if the screen matches to a breakpoint.
|
|
* @function
|
|
* @param {String} size - Name of the breakpoint to check, either 'small only' or 'small'. Omitting 'only' falls back to using atLeast() method.
|
|
* @returns {Boolean} `true` if the breakpoint matches, `false` if it does not.
|
|
*/
|
|
is: function (size) {
|
|
size = size.trim().split(' ');
|
|
if (size.length > 1 && size[1] === 'only') {
|
|
if (size[0] === this._getCurrentSize()) return true;
|
|
} else {
|
|
return this.atLeast(size[0]);
|
|
}
|
|
return false;
|
|
},
|
|
|
|
|
|
/**
|
|
* Gets the media query of a breakpoint.
|
|
* @function
|
|
* @param {String} size - Name of the breakpoint to get.
|
|
* @returns {String|null} - The media query of the breakpoint, or `null` if the breakpoint doesn't exist.
|
|
*/
|
|
get: function (size) {
|
|
for (var i in this.queries) {
|
|
if (this.queries.hasOwnProperty(i)) {
|
|
var query = this.queries[i];
|
|
if (size === query.name) return query.value;
|
|
}
|
|
}
|
|
|
|
return null;
|
|
},
|
|
|
|
|
|
/**
|
|
* Gets the current breakpoint name by testing every breakpoint and returning the last one to match (the biggest one).
|
|
* @function
|
|
* @private
|
|
* @returns {String} Name of the current breakpoint.
|
|
*/
|
|
_getCurrentSize: function () {
|
|
var matched;
|
|
|
|
for (var i = 0; i < this.queries.length; i++) {
|
|
var query = this.queries[i];
|
|
|
|
if (matchMedia(query.value).matches) {
|
|
matched = query;
|
|
}
|
|
}
|
|
|
|
if (typeof matched === 'object') {
|
|
return matched.name;
|
|
} else {
|
|
return matched;
|
|
}
|
|
},
|
|
|
|
|
|
/**
|
|
* Activates the breakpoint watcher, which fires an event on the window whenever the breakpoint changes.
|
|
* @function
|
|
* @private
|
|
*/
|
|
_watcher: function () {
|
|
var _this = this;
|
|
|
|
__WEBPACK_IMPORTED_MODULE_0_jquery___default()(window).off('resize.zf.mediaquery').on('resize.zf.mediaquery', function () {
|
|
var newSize = _this._getCurrentSize(),
|
|
currentSize = _this.current;
|
|
|
|
if (newSize !== currentSize) {
|
|
// Change the current media query
|
|
_this.current = newSize;
|
|
|
|
// Broadcast the media query change on the window
|
|
__WEBPACK_IMPORTED_MODULE_0_jquery___default()(window).trigger('changed.zf.mediaquery', [newSize, currentSize]);
|
|
}
|
|
});
|
|
}
|
|
};
|
|
|
|
// Thank you: https://github.com/sindresorhus/query-string
|
|
function parseStyleToObject(str) {
|
|
var styleObject = {};
|
|
|
|
if (typeof str !== 'string') {
|
|
return styleObject;
|
|
}
|
|
|
|
str = str.trim().slice(1, -1); // browsers re-quote string style values
|
|
|
|
if (!str) {
|
|
return styleObject;
|
|
}
|
|
|
|
styleObject = str.split('&').reduce(function (ret, param) {
|
|
var parts = param.replace(/\+/g, ' ').split('=');
|
|
var key = parts[0];
|
|
var val = parts[1];
|
|
key = decodeURIComponent(key);
|
|
|
|
// missing `=` should be `null`:
|
|
// http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters
|
|
val = val === undefined ? null : decodeURIComponent(val);
|
|
|
|
if (!ret.hasOwnProperty(key)) {
|
|
ret[key] = val;
|
|
} else if (Array.isArray(ret[key])) {
|
|
ret[key].push(val);
|
|
} else {
|
|
ret[key] = [ret[key], val];
|
|
}
|
|
return ret;
|
|
}, {});
|
|
|
|
return styleObject;
|
|
}
|
|
|
|
|
|
|
|
/***/ }),
|
|
/* 4 */
|
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Keyboard; });
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery__ = __webpack_require__(0);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_jquery__);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__foundation_util_core__ = __webpack_require__(1);
|
|
/*******************************************
|
|
* *
|
|
* This util was created by Marius Olbertz *
|
|
* Please thank Marius on GitHub /owlbertz *
|
|
* or the web http://www.mariusolbertz.de/ *
|
|
* *
|
|
******************************************/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var keyCodes = {
|
|
9: 'TAB',
|
|
13: 'ENTER',
|
|
27: 'ESCAPE',
|
|
32: 'SPACE',
|
|
35: 'END',
|
|
36: 'HOME',
|
|
37: 'ARROW_LEFT',
|
|
38: 'ARROW_UP',
|
|
39: 'ARROW_RIGHT',
|
|
40: 'ARROW_DOWN'
|
|
};
|
|
|
|
var commands = {};
|
|
|
|
// Functions pulled out to be referenceable from internals
|
|
function findFocusable($element) {
|
|
if (!$element) {
|
|
return false;
|
|
}
|
|
return $element.find('a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]').filter(function () {
|
|
if (!__WEBPACK_IMPORTED_MODULE_0_jquery___default()(this).is(':visible') || __WEBPACK_IMPORTED_MODULE_0_jquery___default()(this).attr('tabindex') < 0) {
|
|
return false;
|
|
} //only have visible elements and those that have a tabindex greater or equal 0
|
|
return true;
|
|
});
|
|
}
|
|
|
|
function parseKey(event) {
|
|
var key = keyCodes[event.which || event.keyCode] || String.fromCharCode(event.which).toUpperCase();
|
|
|
|
// Remove un-printable characters, e.g. for `fromCharCode` calls for CTRL only events
|
|
key = key.replace(/\W+/, '');
|
|
|
|
if (event.shiftKey) key = 'SHIFT_' + key;
|
|
if (event.ctrlKey) key = 'CTRL_' + key;
|
|
if (event.altKey) key = 'ALT_' + key;
|
|
|
|
// Remove trailing underscore, in case only modifiers were used (e.g. only `CTRL_ALT`)
|
|
key = key.replace(/_$/, '');
|
|
|
|
return key;
|
|
}
|
|
|
|
var Keyboard = {
|
|
keys: getKeyCodes(keyCodes),
|
|
|
|
/**
|
|
* Parses the (keyboard) event and returns a String that represents its key
|
|
* Can be used like Foundation.parseKey(event) === Foundation.keys.SPACE
|
|
* @param {Event} event - the event generated by the event handler
|
|
* @return String key - String that represents the key pressed
|
|
*/
|
|
parseKey: parseKey,
|
|
|
|
/**
|
|
* Handles the given (keyboard) event
|
|
* @param {Event} event - the event generated by the event handler
|
|
* @param {String} component - Foundation component's name, e.g. Slider or Reveal
|
|
* @param {Objects} functions - collection of functions that are to be executed
|
|
*/
|
|
handleKey: function (event, component, functions) {
|
|
var commandList = commands[component],
|
|
keyCode = this.parseKey(event),
|
|
cmds,
|
|
command,
|
|
fn;
|
|
|
|
if (!commandList) return console.warn('Component not defined!');
|
|
|
|
if (typeof commandList.ltr === 'undefined') {
|
|
// this component does not differentiate between ltr and rtl
|
|
cmds = commandList; // use plain list
|
|
} else {
|
|
// merge ltr and rtl: if document is rtl, rtl overwrites ltr and vice versa
|
|
if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__foundation_util_core__["c" /* rtl */])()) cmds = __WEBPACK_IMPORTED_MODULE_0_jquery___default.a.extend({}, commandList.ltr, commandList.rtl);else cmds = __WEBPACK_IMPORTED_MODULE_0_jquery___default.a.extend({}, commandList.rtl, commandList.ltr);
|
|
}
|
|
command = cmds[keyCode];
|
|
|
|
fn = functions[command];
|
|
if (fn && typeof fn === 'function') {
|
|
// execute function if exists
|
|
var returnValue = fn.apply();
|
|
if (functions.handled || typeof functions.handled === 'function') {
|
|
// execute function when event was handled
|
|
functions.handled(returnValue);
|
|
}
|
|
} else {
|
|
if (functions.unhandled || typeof functions.unhandled === 'function') {
|
|
// execute function when event was not handled
|
|
functions.unhandled();
|
|
}
|
|
}
|
|
},
|
|
|
|
|
|
/**
|
|
* Finds all focusable elements within the given `$element`
|
|
* @param {jQuery} $element - jQuery object to search within
|
|
* @return {jQuery} $focusable - all focusable elements within `$element`
|
|
*/
|
|
|
|
findFocusable: findFocusable,
|
|
|
|
/**
|
|
* Returns the component name name
|
|
* @param {Object} component - Foundation component, e.g. Slider or Reveal
|
|
* @return String componentName
|
|
*/
|
|
|
|
register: function (componentName, cmds) {
|
|
commands[componentName] = cmds;
|
|
},
|
|
|
|
|
|
// TODO9438: These references to Keyboard need to not require global. Will 'this' work in this context?
|
|
//
|
|
/**
|
|
* Traps the focus in the given element.
|
|
* @param {jQuery} $element jQuery object to trap the foucs into.
|
|
*/
|
|
trapFocus: function ($element) {
|
|
var $focusable = findFocusable($element),
|
|
$firstFocusable = $focusable.eq(0),
|
|
$lastFocusable = $focusable.eq(-1);
|
|
|
|
$element.on('keydown.zf.trapfocus', function (event) {
|
|
if (event.target === $lastFocusable[0] && parseKey(event) === 'TAB') {
|
|
event.preventDefault();
|
|
$firstFocusable.focus();
|
|
} else if (event.target === $firstFocusable[0] && parseKey(event) === 'SHIFT_TAB') {
|
|
event.preventDefault();
|
|
$lastFocusable.focus();
|
|
}
|
|
});
|
|
},
|
|
|
|
/**
|
|
* Releases the trapped focus from the given element.
|
|
* @param {jQuery} $element jQuery object to release the focus for.
|
|
*/
|
|
releaseFocus: function ($element) {
|
|
$element.off('keydown.zf.trapfocus');
|
|
}
|
|
};
|
|
|
|
/*
|
|
* Constants for easier comparing.
|
|
* Can be used like Foundation.parseKey(event) === Foundation.keys.SPACE
|
|
*/
|
|
function getKeyCodes(kcs) {
|
|
var k = {};
|
|
for (var kc in kcs) {
|
|
k[kcs[kc]] = kcs[kc];
|
|
}return k;
|
|
}
|
|
|
|
|
|
|
|
/***/ }),
|
|
/* 5 */
|
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Nest; });
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery__ = __webpack_require__(0);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_jquery__);
|
|
|
|
|
|
|
|
|
|
var Nest = {
|
|
Feather: function (menu) {
|
|
var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'zf';
|
|
|
|
menu.attr('role', 'menubar');
|
|
|
|
var items = menu.find('li').attr({ 'role': 'menuitem' }),
|
|
subMenuClass = 'is-' + type + '-submenu',
|
|
subItemClass = subMenuClass + '-item',
|
|
hasSubClass = 'is-' + type + '-submenu-parent',
|
|
applyAria = type !== 'accordion'; // Accordions handle their own ARIA attriutes.
|
|
|
|
items.each(function () {
|
|
var $item = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(this),
|
|
$sub = $item.children('ul');
|
|
|
|
if ($sub.length) {
|
|
$item.addClass(hasSubClass);
|
|
$sub.addClass('submenu ' + subMenuClass).attr({ 'data-submenu': '' });
|
|
if (applyAria) {
|
|
$item.attr({
|
|
'aria-haspopup': true,
|
|
'aria-label': $item.children('a:first').text()
|
|
});
|
|
// Note: Drilldowns behave differently in how they hide, and so need
|
|
// additional attributes. We should look if this possibly over-generalized
|
|
// utility (Nest) is appropriate when we rework menus in 6.4
|
|
if (type === 'drilldown') {
|
|
$item.attr({ 'aria-expanded': false });
|
|
}
|
|
}
|
|
$sub.addClass('submenu ' + subMenuClass).attr({
|
|
'data-submenu': '',
|
|
'role': 'menu'
|
|
});
|
|
if (type === 'drilldown') {
|
|
$sub.attr({ 'aria-hidden': true });
|
|
}
|
|
}
|
|
|
|
if ($item.parent('[data-submenu]').length) {
|
|
$item.addClass('is-submenu-item ' + subItemClass);
|
|
}
|
|
});
|
|
|
|
return;
|
|
},
|
|
Burn: function (menu, type) {
|
|
var //items = menu.find('li'),
|
|
subMenuClass = 'is-' + type + '-submenu',
|
|
subItemClass = subMenuClass + '-item',
|
|
hasSubClass = 'is-' + type + '-submenu-parent';
|
|
|
|
menu.find('>li, .menu, .menu > li').removeClass(subMenuClass + ' ' + subItemClass + ' ' + hasSubClass + ' is-submenu-item submenu is-active').removeAttr('data-submenu').css('display', '');
|
|
}
|
|
};
|
|
|
|
|
|
|
|
/***/ }),
|
|
/* 6 */
|
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Box; });
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__foundation_util_core__ = __webpack_require__(1);
|
|
|
|
|
|
|
|
|
|
var Box = {
|
|
ImNotTouchingYou: ImNotTouchingYou,
|
|
OverlapArea: OverlapArea,
|
|
GetDimensions: GetDimensions,
|
|
GetOffsets: GetOffsets,
|
|
GetExplicitOffsets: GetExplicitOffsets
|
|
};
|
|
|
|
/**
|
|
* Compares the dimensions of an element to a container and determines collision events with container.
|
|
* @function
|
|
* @param {jQuery} element - jQuery object to test for collisions.
|
|
* @param {jQuery} parent - jQuery object to use as bounding container.
|
|
* @param {Boolean} lrOnly - set to true to check left and right values only.
|
|
* @param {Boolean} tbOnly - set to true to check top and bottom values only.
|
|
* @default if no parent object passed, detects collisions with `window`.
|
|
* @returns {Boolean} - true if collision free, false if a collision in any direction.
|
|
*/
|
|
function ImNotTouchingYou(element, parent, lrOnly, tbOnly, ignoreBottom) {
|
|
return OverlapArea(element, parent, lrOnly, tbOnly, ignoreBottom) === 0;
|
|
};
|
|
|
|
function OverlapArea(element, parent, lrOnly, tbOnly, ignoreBottom) {
|
|
var eleDims = GetDimensions(element),
|
|
topOver,
|
|
bottomOver,
|
|
leftOver,
|
|
rightOver;
|
|
if (parent) {
|
|
var parDims = GetDimensions(parent);
|
|
|
|
bottomOver = parDims.height + parDims.offset.top - (eleDims.offset.top + eleDims.height);
|
|
topOver = eleDims.offset.top - parDims.offset.top;
|
|
leftOver = eleDims.offset.left - parDims.offset.left;
|
|
rightOver = parDims.width + parDims.offset.left - (eleDims.offset.left + eleDims.width);
|
|
} else {
|
|
bottomOver = eleDims.windowDims.height + eleDims.windowDims.offset.top - (eleDims.offset.top + eleDims.height);
|
|
topOver = eleDims.offset.top - eleDims.windowDims.offset.top;
|
|
leftOver = eleDims.offset.left - eleDims.windowDims.offset.left;
|
|
rightOver = eleDims.windowDims.width - (eleDims.offset.left + eleDims.width);
|
|
}
|
|
|
|
bottomOver = ignoreBottom ? 0 : Math.min(bottomOver, 0);
|
|
topOver = Math.min(topOver, 0);
|
|
leftOver = Math.min(leftOver, 0);
|
|
rightOver = Math.min(rightOver, 0);
|
|
|
|
if (lrOnly) {
|
|
return leftOver + rightOver;
|
|
}
|
|
if (tbOnly) {
|
|
return topOver + bottomOver;
|
|
}
|
|
|
|
// use sum of squares b/c we care about overlap area.
|
|
return Math.sqrt(topOver * topOver + bottomOver * bottomOver + leftOver * leftOver + rightOver * rightOver);
|
|
}
|
|
|
|
/**
|
|
* Uses native methods to return an object of dimension values.
|
|
* @function
|
|
* @param {jQuery || HTML} element - jQuery object or DOM element for which to get the dimensions. Can be any element other that document or window.
|
|
* @returns {Object} - nested object of integer pixel values
|
|
* TODO - if element is window, return only those values.
|
|
*/
|
|
function GetDimensions(elem) {
|
|
elem = elem.length ? elem[0] : elem;
|
|
|
|
if (elem === window || elem === document) {
|
|
throw new Error("I'm sorry, Dave. I'm afraid I can't do that.");
|
|
}
|
|
|
|
var rect = elem.getBoundingClientRect(),
|
|
parRect = elem.parentNode.getBoundingClientRect(),
|
|
winRect = document.body.getBoundingClientRect(),
|
|
winY = window.pageYOffset,
|
|
winX = window.pageXOffset;
|
|
|
|
return {
|
|
width: rect.width,
|
|
height: rect.height,
|
|
offset: {
|
|
top: rect.top + winY,
|
|
left: rect.left + winX
|
|
},
|
|
parentDims: {
|
|
width: parRect.width,
|
|
height: parRect.height,
|
|
offset: {
|
|
top: parRect.top + winY,
|
|
left: parRect.left + winX
|
|
}
|
|
},
|
|
windowDims: {
|
|
width: winRect.width,
|
|
height: winRect.height,
|
|
offset: {
|
|
top: winY,
|
|
left: winX
|
|
}
|
|
}
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Returns an object of top and left integer pixel values for dynamically rendered elements,
|
|
* such as: Tooltip, Reveal, and Dropdown. Maintained for backwards compatibility, and where
|
|
* you don't know alignment, but generally from
|
|
* 6.4 forward you should use GetExplicitOffsets, as GetOffsets conflates position and alignment.
|
|
* @function
|
|
* @param {jQuery} element - jQuery object for the element being positioned.
|
|
* @param {jQuery} anchor - jQuery object for the element's anchor point.
|
|
* @param {String} position - a string relating to the desired position of the element, relative to it's anchor
|
|
* @param {Number} vOffset - integer pixel value of desired vertical separation between anchor and element.
|
|
* @param {Number} hOffset - integer pixel value of desired horizontal separation between anchor and element.
|
|
* @param {Boolean} isOverflow - if a collision event is detected, sets to true to default the element to full width - any desired offset.
|
|
* TODO alter/rewrite to work with `em` values as well/instead of pixels
|
|
*/
|
|
function GetOffsets(element, anchor, position, vOffset, hOffset, isOverflow) {
|
|
console.log("NOTE: GetOffsets is deprecated in favor of GetExplicitOffsets and will be removed in 6.5");
|
|
switch (position) {
|
|
case 'top':
|
|
return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__foundation_util_core__["c" /* rtl */])() ? GetExplicitOffsets(element, anchor, 'top', 'left', vOffset, hOffset, isOverflow) : GetExplicitOffsets(element, anchor, 'top', 'right', vOffset, hOffset, isOverflow);
|
|
case 'bottom':
|
|
return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__foundation_util_core__["c" /* rtl */])() ? GetExplicitOffsets(element, anchor, 'bottom', 'left', vOffset, hOffset, isOverflow) : GetExplicitOffsets(element, anchor, 'bottom', 'right', vOffset, hOffset, isOverflow);
|
|
case 'center top':
|
|
return GetExplicitOffsets(element, anchor, 'top', 'center', vOffset, hOffset, isOverflow);
|
|
case 'center bottom':
|
|
return GetExplicitOffsets(element, anchor, 'bottom', 'center', vOffset, hOffset, isOverflow);
|
|
case 'center left':
|
|
return GetExplicitOffsets(element, anchor, 'left', 'center', vOffset, hOffset, isOverflow);
|
|
case 'center right':
|
|
return GetExplicitOffsets(element, anchor, 'right', 'center', vOffset, hOffset, isOverflow);
|
|
case 'left bottom':
|
|
return GetExplicitOffsets(element, anchor, 'bottom', 'left', vOffset, hOffset, isOverflow);
|
|
case 'right bottom':
|
|
return GetExplicitOffsets(element, anchor, 'bottom', 'right', vOffset, hOffset, isOverflow);
|
|
// Backwards compatibility... this along with the reveal and reveal full
|
|
// classes are the only ones that didn't reference anchor
|
|
case 'center':
|
|
return {
|
|
left: $eleDims.windowDims.offset.left + $eleDims.windowDims.width / 2 - $eleDims.width / 2 + hOffset,
|
|
top: $eleDims.windowDims.offset.top + $eleDims.windowDims.height / 2 - ($eleDims.height / 2 + vOffset)
|
|
};
|
|
case 'reveal':
|
|
return {
|
|
left: ($eleDims.windowDims.width - $eleDims.width) / 2 + hOffset,
|
|
top: $eleDims.windowDims.offset.top + vOffset
|
|
};
|
|
case 'reveal full':
|
|
return {
|
|
left: $eleDims.windowDims.offset.left,
|
|
top: $eleDims.windowDims.offset.top
|
|
};
|
|
break;
|
|
default:
|
|
return {
|
|
left: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__foundation_util_core__["c" /* rtl */])() ? $anchorDims.offset.left - $eleDims.width + $anchorDims.width - hOffset : $anchorDims.offset.left + hOffset,
|
|
top: $anchorDims.offset.top + $anchorDims.height + vOffset
|
|
};
|
|
|
|
}
|
|
}
|
|
|
|
function GetExplicitOffsets(element, anchor, position, alignment, vOffset, hOffset, isOverflow) {
|
|
var $eleDims = GetDimensions(element),
|
|
$anchorDims = anchor ? GetDimensions(anchor) : null;
|
|
|
|
var topVal, leftVal;
|
|
|
|
// set position related attribute
|
|
|
|
switch (position) {
|
|
case 'top':
|
|
topVal = $anchorDims.offset.top - ($eleDims.height + vOffset);
|
|
break;
|
|
case 'bottom':
|
|
topVal = $anchorDims.offset.top + $anchorDims.height + vOffset;
|
|
break;
|
|
case 'left':
|
|
leftVal = $anchorDims.offset.left - ($eleDims.width + hOffset);
|
|
break;
|
|
case 'right':
|
|
leftVal = $anchorDims.offset.left + $anchorDims.width + hOffset;
|
|
break;
|
|
}
|
|
|
|
// set alignment related attribute
|
|
switch (position) {
|
|
case 'top':
|
|
case 'bottom':
|
|
switch (alignment) {
|
|
case 'left':
|
|
leftVal = $anchorDims.offset.left + hOffset;
|
|
break;
|
|
case 'right':
|
|
leftVal = $anchorDims.offset.left - $eleDims.width + $anchorDims.width - hOffset;
|
|
break;
|
|
case 'center':
|
|
leftVal = isOverflow ? hOffset : $anchorDims.offset.left + $anchorDims.width / 2 - $eleDims.width / 2 + hOffset;
|
|
break;
|
|
}
|
|
break;
|
|
case 'right':
|
|
case 'left':
|
|
switch (alignment) {
|
|
case 'bottom':
|
|
topVal = $anchorDims.offset.top - vOffset + $anchorDims.height - $eleDims.height;
|
|
break;
|
|
case 'top':
|
|
topVal = $anchorDims.offset.top + vOffset;
|
|
break;
|
|
case 'center':
|
|
topVal = $anchorDims.offset.top + vOffset + $anchorDims.height / 2 - $eleDims.height / 2;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
return { top: topVal, left: leftVal };
|
|
}
|
|
|
|
|
|
|
|
/***/ }),
|
|
/* 7 */
|
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
/* unused harmony export Move */
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Motion; });
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery__ = __webpack_require__(0);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_jquery__);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__foundation_util_core__ = __webpack_require__(1);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
* Motion module.
|
|
* @module foundation.motion
|
|
*/
|
|
|
|
var initClasses = ['mui-enter', 'mui-leave'];
|
|
var activeClasses = ['mui-enter-active', 'mui-leave-active'];
|
|
|
|
var Motion = {
|
|
animateIn: function (element, animation, cb) {
|
|
animate(true, element, animation, cb);
|
|
},
|
|
|
|
animateOut: function (element, animation, cb) {
|
|
animate(false, element, animation, cb);
|
|
}
|
|
};
|
|
|
|
function Move(duration, elem, fn) {
|
|
var anim,
|
|
prog,
|
|
start = null;
|
|
// console.log('called');
|
|
|
|
if (duration === 0) {
|
|
fn.apply(elem);
|
|
elem.trigger('finished.zf.animate', [elem]).triggerHandler('finished.zf.animate', [elem]);
|
|
return;
|
|
}
|
|
|
|
function move(ts) {
|
|
if (!start) start = ts;
|
|
// console.log(start, ts);
|
|
prog = ts - start;
|
|
fn.apply(elem);
|
|
|
|
if (prog < duration) {
|
|
anim = window.requestAnimationFrame(move, elem);
|
|
} else {
|
|
window.cancelAnimationFrame(anim);
|
|
elem.trigger('finished.zf.animate', [elem]).triggerHandler('finished.zf.animate', [elem]);
|
|
}
|
|
}
|
|
anim = window.requestAnimationFrame(move);
|
|
}
|
|
|
|
/**
|
|
* Animates an element in or out using a CSS transition class.
|
|
* @function
|
|
* @private
|
|
* @param {Boolean} isIn - Defines if the animation is in or out.
|
|
* @param {Object} element - jQuery or HTML object to animate.
|
|
* @param {String} animation - CSS class to use.
|
|
* @param {Function} cb - Callback to run when animation is finished.
|
|
*/
|
|
function animate(isIn, element, animation, cb) {
|
|
element = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(element).eq(0);
|
|
|
|
if (!element.length) return;
|
|
|
|
var initClass = isIn ? initClasses[0] : initClasses[1];
|
|
var activeClass = isIn ? activeClasses[0] : activeClasses[1];
|
|
|
|
// Set up the animation
|
|
reset();
|
|
|
|
element.addClass(animation).css('transition', 'none');
|
|
|
|
requestAnimationFrame(function () {
|
|
element.addClass(initClass);
|
|
if (isIn) element.show();
|
|
});
|
|
|
|
// Start the animation
|
|
requestAnimationFrame(function () {
|
|
element[0].offsetWidth;
|
|
element.css('transition', '').addClass(activeClass);
|
|
});
|
|
|
|
// Clean up the animation when it finishes
|
|
element.one(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__foundation_util_core__["b" /* transitionend */])(element), finish);
|
|
|
|
// Hides the element (for out animations), resets the element, and runs a callback
|
|
function finish() {
|
|
if (!isIn) element.hide();
|
|
reset();
|
|
if (cb) cb.apply(element);
|
|
}
|
|
|
|
// Resets transitions and removes motion-specific classes
|
|
function reset() {
|
|
element[0].style.transitionDuration = 0;
|
|
element.removeClass(initClass + ' ' + activeClass + ' ' + animation);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/***/ }),
|
|
/* 8 */
|
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Foundation; });
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery__ = __webpack_require__(0);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_jquery__);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__foundation_util_core__ = __webpack_require__(1);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__foundation_util_mediaQuery__ = __webpack_require__(3);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var FOUNDATION_VERSION = '6.4.2';
|
|
|
|
// Global Foundation object
|
|
// This is attached to the window, or used as a module for AMD/Browserify
|
|
var Foundation = {
|
|
version: FOUNDATION_VERSION,
|
|
|
|
/**
|
|
* Stores initialized plugins.
|
|
*/
|
|
_plugins: {},
|
|
|
|
/**
|
|
* Stores generated unique ids for plugin instances
|
|
*/
|
|
_uuids: [],
|
|
|
|
/**
|
|
* Defines a Foundation plugin, adding it to the `Foundation` namespace and the list of plugins to initialize when reflowing.
|
|
* @param {Object} plugin - The constructor of the plugin.
|
|
*/
|
|
plugin: function (plugin, name) {
|
|
// Object key to use when adding to global Foundation object
|
|
// Examples: Foundation.Reveal, Foundation.OffCanvas
|
|
var className = name || functionName(plugin);
|
|
// Object key to use when storing the plugin, also used to create the identifying data attribute for the plugin
|
|
// Examples: data-reveal, data-off-canvas
|
|
var attrName = hyphenate(className);
|
|
|
|
// Add to the Foundation object and the plugins list (for reflowing)
|
|
this._plugins[attrName] = this[className] = plugin;
|
|
},
|
|
/**
|
|
* @function
|
|
* Populates the _uuids array with pointers to each individual plugin instance.
|
|
* Adds the `zfPlugin` data-attribute to programmatically created plugins to allow use of $(selector).foundation(method) calls.
|
|
* Also fires the initialization event for each plugin, consolidating repetitive code.
|
|
* @param {Object} plugin - an instance of a plugin, usually `this` in context.
|
|
* @param {String} name - the name of the plugin, passed as a camelCased string.
|
|
* @fires Plugin#init
|
|
*/
|
|
registerPlugin: function (plugin, name) {
|
|
var pluginName = name ? hyphenate(name) : functionName(plugin.constructor).toLowerCase();
|
|
plugin.uuid = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__foundation_util_core__["a" /* GetYoDigits */])(6, pluginName);
|
|
|
|
if (!plugin.$element.attr('data-' + pluginName)) {
|
|
plugin.$element.attr('data-' + pluginName, plugin.uuid);
|
|
}
|
|
if (!plugin.$element.data('zfPlugin')) {
|
|
plugin.$element.data('zfPlugin', plugin);
|
|
}
|
|
/**
|
|
* Fires when the plugin has initialized.
|
|
* @event Plugin#init
|
|
*/
|
|
plugin.$element.trigger('init.zf.' + pluginName);
|
|
|
|
this._uuids.push(plugin.uuid);
|
|
|
|
return;
|
|
},
|
|
/**
|
|
* @function
|
|
* Removes the plugins uuid from the _uuids array.
|
|
* Removes the zfPlugin data attribute, as well as the data-plugin-name attribute.
|
|
* Also fires the destroyed event for the plugin, consolidating repetitive code.
|
|
* @param {Object} plugin - an instance of a plugin, usually `this` in context.
|
|
* @fires Plugin#destroyed
|
|
*/
|
|
unregisterPlugin: function (plugin) {
|
|
var pluginName = hyphenate(functionName(plugin.$element.data('zfPlugin').constructor));
|
|
|
|
this._uuids.splice(this._uuids.indexOf(plugin.uuid), 1);
|
|
plugin.$element.removeAttr('data-' + pluginName).removeData('zfPlugin')
|
|
/**
|
|
* Fires when the plugin has been destroyed.
|
|
* @event Plugin#destroyed
|
|
*/
|
|
.trigger('destroyed.zf.' + pluginName);
|
|
for (var prop in plugin) {
|
|
plugin[prop] = null; //clean up script to prep for garbage collection.
|
|
}
|
|
return;
|
|
},
|
|
|
|
/**
|
|
* @function
|
|
* Causes one or more active plugins to re-initialize, resetting event listeners, recalculating positions, etc.
|
|
* @param {String} plugins - optional string of an individual plugin key, attained by calling `$(element).data('pluginName')`, or string of a plugin class i.e. `'dropdown'`
|
|
* @default If no argument is passed, reflow all currently active plugins.
|
|
*/
|
|
reInit: function (plugins) {
|
|
var isJQ = plugins instanceof __WEBPACK_IMPORTED_MODULE_0_jquery___default.a;
|
|
try {
|
|
if (isJQ) {
|
|
plugins.each(function () {
|
|
__WEBPACK_IMPORTED_MODULE_0_jquery___default()(this).data('zfPlugin')._init();
|
|
});
|
|
} else {
|
|
var type = typeof plugins,
|
|
_this = this,
|
|
fns = {
|
|
'object': function (plgs) {
|
|
plgs.forEach(function (p) {
|
|
p = hyphenate(p);
|
|
__WEBPACK_IMPORTED_MODULE_0_jquery___default()('[data-' + p + ']').foundation('_init');
|
|
});
|
|
},
|
|
'string': function () {
|
|
plugins = hyphenate(plugins);
|
|
__WEBPACK_IMPORTED_MODULE_0_jquery___default()('[data-' + plugins + ']').foundation('_init');
|
|
},
|
|
'undefined': function () {
|
|
this['object'](Object.keys(_this._plugins));
|
|
}
|
|
};
|
|
fns[type](plugins);
|
|
}
|
|
} catch (err) {
|
|
console.error(err);
|
|
} finally {
|
|
return plugins;
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Initialize plugins on any elements within `elem` (and `elem` itself) that aren't already initialized.
|
|
* @param {Object} elem - jQuery object containing the element to check inside. Also checks the element itself, unless it's the `document` object.
|
|
* @param {String|Array} plugins - A list of plugins to initialize. Leave this out to initialize everything.
|
|
*/
|
|
reflow: function (elem, plugins) {
|
|
|
|
// If plugins is undefined, just grab everything
|
|
if (typeof plugins === 'undefined') {
|
|
plugins = Object.keys(this._plugins);
|
|
}
|
|
// If plugins is a string, convert it to an array with one item
|
|
else if (typeof plugins === 'string') {
|
|
plugins = [plugins];
|
|
}
|
|
|
|
var _this = this;
|
|
|
|
// Iterate through each plugin
|
|
__WEBPACK_IMPORTED_MODULE_0_jquery___default.a.each(plugins, function (i, name) {
|
|
// Get the current plugin
|
|
var plugin = _this._plugins[name];
|
|
|
|
// Localize the search to all elements inside elem, as well as elem itself, unless elem === document
|
|
var $elem = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(elem).find('[data-' + name + ']').addBack('[data-' + name + ']');
|
|
|
|
// For each plugin found, initialize it
|
|
$elem.each(function () {
|
|
var $el = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(this),
|
|
opts = {};
|
|
// Don't double-dip on plugins
|
|
if ($el.data('zfPlugin')) {
|
|
console.warn("Tried to initialize " + name + " on an element that already has a Foundation plugin.");
|
|
return;
|
|
}
|
|
|
|
if ($el.attr('data-options')) {
|
|
var thing = $el.attr('data-options').split(';').forEach(function (e, i) {
|
|
var opt = e.split(':').map(function (el) {
|
|
return el.trim();
|
|
});
|
|
if (opt[0]) opts[opt[0]] = parseValue(opt[1]);
|
|
});
|
|
}
|
|
try {
|
|
$el.data('zfPlugin', new plugin(__WEBPACK_IMPORTED_MODULE_0_jquery___default()(this), opts));
|
|
} catch (er) {
|
|
console.error(er);
|
|
} finally {
|
|
return;
|
|
}
|
|
});
|
|
});
|
|
},
|
|
getFnName: functionName,
|
|
|
|
addToJquery: function ($) {
|
|
// TODO: consider not making this a jQuery function
|
|
// TODO: need way to reflow vs. re-initialize
|
|
/**
|
|
* The Foundation jQuery method.
|
|
* @param {String|Array} method - An action to perform on the current jQuery object.
|
|
*/
|
|
var foundation = function (method) {
|
|
var type = typeof method,
|
|
$noJS = $('.no-js');
|
|
|
|
if ($noJS.length) {
|
|
$noJS.removeClass('no-js');
|
|
}
|
|
|
|
if (type === 'undefined') {
|
|
//needs to initialize the Foundation object, or an individual plugin.
|
|
__WEBPACK_IMPORTED_MODULE_2__foundation_util_mediaQuery__["a" /* MediaQuery */]._init();
|
|
Foundation.reflow(this);
|
|
} else if (type === 'string') {
|
|
//an individual method to invoke on a plugin or group of plugins
|
|
var args = Array.prototype.slice.call(arguments, 1); //collect all the arguments, if necessary
|
|
var plugClass = this.data('zfPlugin'); //determine the class of plugin
|
|
|
|
if (plugClass !== undefined && plugClass[method] !== undefined) {
|
|
//make sure both the class and method exist
|
|
if (this.length === 1) {
|
|
//if there's only one, call it directly.
|
|
plugClass[method].apply(plugClass, args);
|
|
} else {
|
|
this.each(function (i, el) {
|
|
//otherwise loop through the jQuery collection and invoke the method on each
|
|
plugClass[method].apply($(el).data('zfPlugin'), args);
|
|
});
|
|
}
|
|
} else {
|
|
//error for no class or no method
|
|
throw new ReferenceError("We're sorry, '" + method + "' is not an available method for " + (plugClass ? functionName(plugClass) : 'this element') + '.');
|
|
}
|
|
} else {
|
|
//error for invalid argument type
|
|
throw new TypeError('We\'re sorry, ' + type + ' is not a valid parameter. You must use a string representing the method you wish to invoke.');
|
|
}
|
|
return this;
|
|
};
|
|
$.fn.foundation = foundation;
|
|
return $;
|
|
}
|
|
};
|
|
|
|
Foundation.util = {
|
|
/**
|
|
* Function for applying a debounce effect to a function call.
|
|
* @function
|
|
* @param {Function} func - Function to be called at end of timeout.
|
|
* @param {Number} delay - Time in ms to delay the call of `func`.
|
|
* @returns function
|
|
*/
|
|
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);
|
|
}
|
|
};
|
|
}
|
|
};
|
|
|
|
window.Foundation = Foundation;
|
|
|
|
// Polyfill for requestAnimationFrame
|
|
(function () {
|
|
if (!Date.now || !window.Date.now) window.Date.now = Date.now = function () {
|
|
return new Date().getTime();
|
|
};
|
|
|
|
var vendors = ['webkit', 'moz'];
|
|
for (var i = 0; i < vendors.length && !window.requestAnimationFrame; ++i) {
|
|
var vp = vendors[i];
|
|
window.requestAnimationFrame = window[vp + 'RequestAnimationFrame'];
|
|
window.cancelAnimationFrame = window[vp + 'CancelAnimationFrame'] || window[vp + 'CancelRequestAnimationFrame'];
|
|
}
|
|
if (/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent) || !window.requestAnimationFrame || !window.cancelAnimationFrame) {
|
|
var lastTime = 0;
|
|
window.requestAnimationFrame = function (callback) {
|
|
var now = Date.now();
|
|
var nextTime = Math.max(lastTime + 16, now);
|
|
return setTimeout(function () {
|
|
callback(lastTime = nextTime);
|
|
}, nextTime - now);
|
|
};
|
|
window.cancelAnimationFrame = clearTimeout;
|
|
}
|
|
/**
|
|
* Polyfill for performance.now, required by rAF
|
|
*/
|
|
if (!window.performance || !window.performance.now) {
|
|
window.performance = {
|
|
start: Date.now(),
|
|
now: function () {
|
|
return Date.now() - this.start;
|
|
}
|
|
};
|
|
}
|
|
})();
|
|
if (!Function.prototype.bind) {
|
|
Function.prototype.bind = function (oThis) {
|
|
if (typeof this !== 'function') {
|
|
// closest thing possible to the ECMAScript 5
|
|
// internal IsCallable function
|
|
throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');
|
|
}
|
|
|
|
var aArgs = Array.prototype.slice.call(arguments, 1),
|
|
fToBind = this,
|
|
fNOP = function () {},
|
|
fBound = function () {
|
|
return fToBind.apply(this instanceof fNOP ? this : oThis, aArgs.concat(Array.prototype.slice.call(arguments)));
|
|
};
|
|
|
|
if (this.prototype) {
|
|
// native functions don't have a prototype
|
|
fNOP.prototype = this.prototype;
|
|
}
|
|
fBound.prototype = new fNOP();
|
|
|
|
return fBound;
|
|
};
|
|
}
|
|
// Polyfill to get the name of a function in IE9
|
|
function functionName(fn) {
|
|
if (Function.prototype.name === undefined) {
|
|
var funcNameRegex = /function\s([^(]{1,})\(/;
|
|
var results = funcNameRegex.exec(fn.toString());
|
|
return results && results.length > 1 ? results[1].trim() : "";
|
|
} else if (fn.prototype === undefined) {
|
|
return fn.constructor.name;
|
|
} else {
|
|
return fn.prototype.constructor.name;
|
|
}
|
|
}
|
|
function parseValue(str) {
|
|
if ('true' === str) return true;else if ('false' === str) return false;else if (!isNaN(str * 1)) return parseFloat(str);
|
|
return str;
|
|
}
|
|
// Convert PascalCase to kebab-case
|
|
// Thank you: http://stackoverflow.com/a/8955580
|
|
function hyphenate(str) {
|
|
return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
|
|
}
|
|
|
|
|
|
|
|
/***/ }),
|
|
/* 9 */
|
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Interchange; });
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery__ = __webpack_require__(0);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_jquery__);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__foundation_util_mediaQuery__ = __webpack_require__(3);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__foundation_plugin__ = __webpack_require__(2);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__foundation_util_core__ = __webpack_require__(1);
|
|
|
|
|
|
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
|
|
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
|
|
|
|
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
* Interchange module.
|
|
* @module foundation.interchange
|
|
* @requires foundation.util.mediaQuery
|
|
*/
|
|
|
|
var Interchange = function (_Plugin) {
|
|
_inherits(Interchange, _Plugin);
|
|
|
|
function Interchange() {
|
|
_classCallCheck(this, Interchange);
|
|
|
|
return _possibleConstructorReturn(this, (Interchange.__proto__ || Object.getPrototypeOf(Interchange)).apply(this, arguments));
|
|
}
|
|
|
|
_createClass(Interchange, [{
|
|
key: '_setup',
|
|
|
|
/**
|
|
* Creates a new instance of Interchange.
|
|
* @class
|
|
* @name Interchange
|
|
* @fires Interchange#init
|
|
* @param {Object} element - jQuery object to add the trigger to.
|
|
* @param {Object} options - Overrides to the default plugin settings.
|
|
*/
|
|
value: function _setup(element, options) {
|
|
this.$element = element;
|
|
this.options = __WEBPACK_IMPORTED_MODULE_0_jquery___default.a.extend({}, Interchange.defaults, options);
|
|
this.rules = [];
|
|
this.currentPath = '';
|
|
this.className = 'Interchange'; // ie9 back compat
|
|
|
|
this._init();
|
|
this._events();
|
|
}
|
|
|
|
/**
|
|
* Initializes the Interchange plugin and calls functions to get interchange functioning on load.
|
|
* @function
|
|
* @private
|
|
*/
|
|
|
|
}, {
|
|
key: '_init',
|
|
value: function _init() {
|
|
__WEBPACK_IMPORTED_MODULE_1__foundation_util_mediaQuery__["a" /* MediaQuery */]._init();
|
|
|
|
var id = this.$element[0].id || __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__foundation_util_core__["a" /* GetYoDigits */])(6, 'interchange');
|
|
this.$element.attr({
|
|
'data-resize': id,
|
|
'id': id
|
|
});
|
|
|
|
this._addBreakpoints();
|
|
this._generateRules();
|
|
this._reflow();
|
|
}
|
|
|
|
/**
|
|
* Initializes events for Interchange.
|
|
* @function
|
|
* @private
|
|
*/
|
|
|
|
}, {
|
|
key: '_events',
|
|
value: function _events() {
|
|
var _this3 = this;
|
|
|
|
this.$element.off('resizeme.zf.trigger').on('resizeme.zf.trigger', function () {
|
|
return _this3._reflow();
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Calls necessary functions to update Interchange upon DOM change
|
|
* @function
|
|
* @private
|
|
*/
|
|
|
|
}, {
|
|
key: '_reflow',
|
|
value: function _reflow() {
|
|
var match;
|
|
|
|
// Iterate through each rule, but only save the last match
|
|
for (var i in this.rules) {
|
|
if (this.rules.hasOwnProperty(i)) {
|
|
var rule = this.rules[i];
|
|
if (window.matchMedia(rule.query).matches) {
|
|
match = rule;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (match) {
|
|
this.replace(match.path);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Gets the Foundation breakpoints and adds them to the Interchange.SPECIAL_QUERIES object.
|
|
* @function
|
|
* @private
|
|
*/
|
|
|
|
}, {
|
|
key: '_addBreakpoints',
|
|
value: function _addBreakpoints() {
|
|
for (var i in __WEBPACK_IMPORTED_MODULE_1__foundation_util_mediaQuery__["a" /* MediaQuery */].queries) {
|
|
if (__WEBPACK_IMPORTED_MODULE_1__foundation_util_mediaQuery__["a" /* MediaQuery */].queries.hasOwnProperty(i)) {
|
|
var query = __WEBPACK_IMPORTED_MODULE_1__foundation_util_mediaQuery__["a" /* MediaQuery */].queries[i];
|
|
Interchange.SPECIAL_QUERIES[query.name] = query.value;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Checks the Interchange element for the provided media query + content pairings
|
|
* @function
|
|
* @private
|
|
* @param {Object} element - jQuery object that is an Interchange instance
|
|
* @returns {Array} scenarios - Array of objects that have 'mq' and 'path' keys with corresponding keys
|
|
*/
|
|
|
|
}, {
|
|
key: '_generateRules',
|
|
value: function _generateRules(element) {
|
|
var rulesList = [];
|
|
var rules;
|
|
|
|
if (this.options.rules) {
|
|
rules = this.options.rules;
|
|
} else {
|
|
rules = this.$element.data('interchange');
|
|
}
|
|
|
|
rules = typeof rules === 'string' ? rules.match(/\[.*?\]/g) : rules;
|
|
|
|
for (var i in rules) {
|
|
if (rules.hasOwnProperty(i)) {
|
|
var rule = rules[i].slice(1, -1).split(', ');
|
|
var path = rule.slice(0, -1).join('');
|
|
var query = rule[rule.length - 1];
|
|
|
|
if (Interchange.SPECIAL_QUERIES[query]) {
|
|
query = Interchange.SPECIAL_QUERIES[query];
|
|
}
|
|
|
|
rulesList.push({
|
|
path: path,
|
|
query: query
|
|
});
|
|
}
|
|
}
|
|
|
|
this.rules = rulesList;
|
|
}
|
|
|
|
/**
|
|
* Update the `src` property of an image, or change the HTML of a container, to the specified path.
|
|
* @function
|
|
* @param {String} path - Path to the image or HTML partial.
|
|
* @fires Interchange#replaced
|
|
*/
|
|
|
|
}, {
|
|
key: 'replace',
|
|
value: function replace(path) {
|
|
if (this.currentPath === path) return;
|
|
|
|
var _this = this,
|
|
trigger = 'replaced.zf.interchange';
|
|
|
|
// Replacing images
|
|
if (this.$element[0].nodeName === 'IMG') {
|
|
this.$element.attr('src', path).on('load', function () {
|
|
_this.currentPath = path;
|
|
}).trigger(trigger);
|
|
}
|
|
// Replacing background images
|
|
else if (path.match(/\.(gif|jpg|jpeg|png|svg|tiff)([?#].*)?/i)) {
|
|
path = path.replace(/\(/g, '%28').replace(/\)/g, '%29');
|
|
this.$element.css({ 'background-image': 'url(' + path + ')' }).trigger(trigger);
|
|
}
|
|
// Replacing HTML
|
|
else {
|
|
__WEBPACK_IMPORTED_MODULE_0_jquery___default.a.get(path, function (response) {
|
|
_this.$element.html(response).trigger(trigger);
|
|
__WEBPACK_IMPORTED_MODULE_0_jquery___default()(response).foundation();
|
|
_this.currentPath = path;
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Fires when content in an Interchange element is done being loaded.
|
|
* @event Interchange#replaced
|
|
*/
|
|
// this.$element.trigger('replaced.zf.interchange');
|
|
}
|
|
|
|
/**
|
|
* Destroys an instance of interchange.
|
|
* @function
|
|
*/
|
|
|
|
}, {
|
|
key: '_destroy',
|
|
value: function _destroy() {
|
|
this.$element.off('resizeme.zf.trigger');
|
|
}
|
|
}]);
|
|
|
|
return Interchange;
|
|
}(__WEBPACK_IMPORTED_MODULE_2__foundation_plugin__["a" /* Plugin */]);
|
|
|
|
/**
|
|
* Default settings for plugin
|
|
*/
|
|
|
|
|
|
Interchange.defaults = {
|
|
/**
|
|
* Rules to be applied to Interchange elements. Set with the `data-interchange` array notation.
|
|
* @option
|
|
* @type {?array}
|
|
* @default null
|
|
*/
|
|
rules: null
|
|
};
|
|
|
|
Interchange.SPECIAL_QUERIES = {
|
|
'landscape': 'screen and (orientation: landscape)',
|
|
'portrait': 'screen and (orientation: portrait)',
|
|
'retina': 'only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx)'
|
|
};
|
|
|
|
|
|
|
|
/***/ }),
|
|
/* 10 */
|
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ResponsiveMenu; });
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery__ = __webpack_require__(0);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_jquery__);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__foundation_util_mediaQuery__ = __webpack_require__(3);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__foundation_util_core__ = __webpack_require__(1);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__foundation_plugin__ = __webpack_require__(2);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__foundation_dropdownMenu__ = __webpack_require__(15);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__foundation_drilldown__ = __webpack_require__(14);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__foundation_accordionMenu__ = __webpack_require__(13);
|
|
|
|
|
|
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
|
|
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
|
|
|
|
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var MenuPlugins = {
|
|
dropdown: {
|
|
cssClass: 'dropdown',
|
|
plugin: __WEBPACK_IMPORTED_MODULE_4__foundation_dropdownMenu__["a" /* DropdownMenu */]
|
|
},
|
|
drilldown: {
|
|
cssClass: 'drilldown',
|
|
plugin: __WEBPACK_IMPORTED_MODULE_5__foundation_drilldown__["a" /* Drilldown */]
|
|
},
|
|
accordion: {
|
|
cssClass: 'accordion-menu',
|
|
plugin: __WEBPACK_IMPORTED_MODULE_6__foundation_accordionMenu__["a" /* AccordionMenu */]
|
|
}
|
|
};
|
|
|
|
// import "foundation.util.triggers.js";
|
|
|
|
|
|
/**
|
|
* ResponsiveMenu module.
|
|
* @module foundation.responsiveMenu
|
|
* @requires foundation.util.triggers
|
|
* @requires foundation.util.mediaQuery
|
|
*/
|
|
|
|
var ResponsiveMenu = function (_Plugin) {
|
|
_inherits(ResponsiveMenu, _Plugin);
|
|
|
|
function ResponsiveMenu() {
|
|
_classCallCheck(this, ResponsiveMenu);
|
|
|
|
return _possibleConstructorReturn(this, (ResponsiveMenu.__proto__ || Object.getPrototypeOf(ResponsiveMenu)).apply(this, arguments));
|
|
}
|
|
|
|
_createClass(ResponsiveMenu, [{
|
|
key: '_setup',
|
|
|
|
/**
|
|
* Creates a new instance of a responsive menu.
|
|
* @class
|
|
* @name ResponsiveMenu
|
|
* @fires ResponsiveMenu#init
|
|
* @param {jQuery} element - jQuery object to make into a dropdown menu.
|
|
* @param {Object} options - Overrides to the default plugin settings.
|
|
*/
|
|
value: function _setup(element, options) {
|
|
this.$element = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(element);
|
|
this.rules = this.$element.data('responsive-menu');
|
|
this.currentMq = null;
|
|
this.currentPlugin = null;
|
|
this.className = 'ResponsiveMenu'; // ie9 back compat
|
|
|
|
this._init();
|
|
this._events();
|
|
}
|
|
|
|
/**
|
|
* Initializes the Menu by parsing the classes from the 'data-ResponsiveMenu' attribute on the element.
|
|
* @function
|
|
* @private
|
|
*/
|
|
|
|
}, {
|
|
key: '_init',
|
|
value: function _init() {
|
|
|
|
__WEBPACK_IMPORTED_MODULE_1__foundation_util_mediaQuery__["a" /* MediaQuery */]._init();
|
|
// The first time an Interchange plugin is initialized, this.rules is converted from a string of "classes" to an object of rules
|
|
if (typeof this.rules === 'string') {
|
|
var rulesTree = {};
|
|
|
|
// Parse rules from "classes" pulled from data attribute
|
|
var rules = this.rules.split(' ');
|
|
|
|
// Iterate through every rule found
|
|
for (var i = 0; i < rules.length; i++) {
|
|
var rule = rules[i].split('-');
|
|
var ruleSize = rule.length > 1 ? rule[0] : 'small';
|
|
var rulePlugin = rule.length > 1 ? rule[1] : rule[0];
|
|
|
|
if (MenuPlugins[rulePlugin] !== null) {
|
|
rulesTree[ruleSize] = MenuPlugins[rulePlugin];
|
|
}
|
|
}
|
|
|
|
this.rules = rulesTree;
|
|
}
|
|
|
|
if (!__WEBPACK_IMPORTED_MODULE_0_jquery___default.a.isEmptyObject(this.rules)) {
|
|
this._checkMediaQueries();
|
|
}
|
|
// Add data-mutate since children may need it.
|
|
this.$element.attr('data-mutate', this.$element.attr('data-mutate') || __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__foundation_util_core__["a" /* GetYoDigits */])(6, 'responsive-menu'));
|
|
}
|
|
|
|
/**
|
|
* Initializes events for the Menu.
|
|
* @function
|
|
* @private
|
|
*/
|
|
|
|
}, {
|
|
key: '_events',
|
|
value: function _events() {
|
|
var _this = this;
|
|
|
|
__WEBPACK_IMPORTED_MODULE_0_jquery___default()(window).on('changed.zf.mediaquery', function () {
|
|
_this._checkMediaQueries();
|
|
});
|
|
// $(window).on('resize.zf.ResponsiveMenu', function() {
|
|
// _this._checkMediaQueries();
|
|
// });
|
|
}
|
|
|
|
/**
|
|
* Checks the current screen width against available media queries. If the media query has changed, and the plugin needed has changed, the plugins will swap out.
|
|
* @function
|
|
* @private
|
|
*/
|
|
|
|
}, {
|
|
key: '_checkMediaQueries',
|
|
value: function _checkMediaQueries() {
|
|
var matchedMq,
|
|
_this = this;
|
|
// Iterate through each rule and find the last matching rule
|
|
__WEBPACK_IMPORTED_MODULE_0_jquery___default.a.each(this.rules, function (key) {
|
|
if (__WEBPACK_IMPORTED_MODULE_1__foundation_util_mediaQuery__["a" /* MediaQuery */].atLeast(key)) {
|
|
matchedMq = key;
|
|
}
|
|
});
|
|
|
|
// No match? No dice
|
|
if (!matchedMq) return;
|
|
|
|
// Plugin already initialized? We good
|
|
if (this.currentPlugin instanceof this.rules[matchedMq].plugin) return;
|
|
|
|
// Remove existing plugin-specific CSS classes
|
|
__WEBPACK_IMPORTED_MODULE_0_jquery___default.a.each(MenuPlugins, function (key, value) {
|
|
_this.$element.removeClass(value.cssClass);
|
|
});
|
|
|
|
// Add the CSS class for the new plugin
|
|
this.$element.addClass(this.rules[matchedMq].cssClass);
|
|
|
|
// Create an instance of the new plugin
|
|
if (this.currentPlugin) this.currentPlugin.destroy();
|
|
this.currentPlugin = new this.rules[matchedMq].plugin(this.$element, {});
|
|
}
|
|
|
|
/**
|
|
* Destroys the instance of the current plugin on this element, as well as the window resize handler that switches the plugins out.
|
|
* @function
|
|
*/
|
|
|
|
}, {
|
|
key: '_destroy',
|
|
value: function _destroy() {
|
|
this.currentPlugin.destroy();
|
|
__WEBPACK_IMPORTED_MODULE_0_jquery___default()(window).off('.zf.ResponsiveMenu');
|
|
}
|
|
}]);
|
|
|
|
return ResponsiveMenu;
|
|
}(__WEBPACK_IMPORTED_MODULE_3__foundation_plugin__["a" /* Plugin */]);
|
|
|
|
ResponsiveMenu.defaults = {};
|
|
|
|
|
|
|
|
/***/ }),
|
|
/* 11 */
|
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ResponsiveToggle; });
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery__ = __webpack_require__(0);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_jquery__);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__foundation_util_mediaQuery__ = __webpack_require__(3);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__foundation_util_motion__ = __webpack_require__(7);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__foundation_plugin__ = __webpack_require__(2);
|
|
|
|
|
|
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
|
|
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
|
|
|
|
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
* ResponsiveToggle module.
|
|
* @module foundation.responsiveToggle
|
|
* @requires foundation.util.mediaQuery
|
|
* @requires foundation.util.motion
|
|
*/
|
|
|
|
var ResponsiveToggle = function (_Plugin) {
|
|
_inherits(ResponsiveToggle, _Plugin);
|
|
|
|
function ResponsiveToggle() {
|
|
_classCallCheck(this, ResponsiveToggle);
|
|
|
|
return _possibleConstructorReturn(this, (ResponsiveToggle.__proto__ || Object.getPrototypeOf(ResponsiveToggle)).apply(this, arguments));
|
|
}
|
|
|
|
_createClass(ResponsiveToggle, [{
|
|
key: '_setup',
|
|
|
|
/**
|
|
* Creates a new instance of Tab Bar.
|
|
* @class
|
|
* @name ResponsiveToggle
|
|
* @fires ResponsiveToggle#init
|
|
* @param {jQuery} element - jQuery object to attach tab bar functionality to.
|
|
* @param {Object} options - Overrides to the default plugin settings.
|
|
*/
|
|
value: function _setup(element, options) {
|
|
this.$element = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(element);
|
|
this.options = __WEBPACK_IMPORTED_MODULE_0_jquery___default.a.extend({}, ResponsiveToggle.defaults, this.$element.data(), options);
|
|
this.className = 'ResponsiveToggle'; // ie9 back compat
|
|
|
|
this._init();
|
|
this._events();
|
|
}
|
|
|
|
/**
|
|
* Initializes the tab bar by finding the target element, toggling element, and running update().
|
|
* @function
|
|
* @private
|
|
*/
|
|
|
|
}, {
|
|
key: '_init',
|
|
value: function _init() {
|
|
__WEBPACK_IMPORTED_MODULE_1__foundation_util_mediaQuery__["a" /* MediaQuery */]._init();
|
|
var targetID = this.$element.data('responsive-toggle');
|
|
if (!targetID) {
|
|
console.error('Your tab bar needs an ID of a Menu as the value of data-tab-bar.');
|
|
}
|
|
|
|
this.$targetMenu = __WEBPACK_IMPORTED_MODULE_0_jquery___default()('#' + targetID);
|
|
this.$toggler = this.$element.find('[data-toggle]').filter(function () {
|
|
var target = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(this).data('toggle');
|
|
return target === targetID || target === "";
|
|
});
|
|
this.options = __WEBPACK_IMPORTED_MODULE_0_jquery___default.a.extend({}, this.options, this.$targetMenu.data());
|
|
|
|
// If they were set, parse the animation classes
|
|
if (this.options.animate) {
|
|
var input = this.options.animate.split(' ');
|
|
|
|
this.animationIn = input[0];
|
|
this.animationOut = input[1] || null;
|
|
}
|
|
|
|
this._update();
|
|
}
|
|
|
|
/**
|
|
* Adds necessary event handlers for the tab bar to work.
|
|
* @function
|
|
* @private
|
|
*/
|
|
|
|
}, {
|
|
key: '_events',
|
|
value: function _events() {
|
|
var _this = this;
|
|
|
|
this._updateMqHandler = this._update.bind(this);
|
|
|
|
__WEBPACK_IMPORTED_MODULE_0_jquery___default()(window).on('changed.zf.mediaquery', this._updateMqHandler);
|
|
|
|
this.$toggler.on('click.zf.responsiveToggle', this.toggleMenu.bind(this));
|
|
}
|
|
|
|
/**
|
|
* Checks the current media query to determine if the tab bar should be visible or hidden.
|
|
* @function
|
|
* @private
|
|
*/
|
|
|
|
}, {
|
|
key: '_update',
|
|
value: function _update() {
|
|
// Mobile
|
|
if (!__WEBPACK_IMPORTED_MODULE_1__foundation_util_mediaQuery__["a" /* MediaQuery */].atLeast(this.options.hideFor)) {
|
|
this.$element.show();
|
|
this.$targetMenu.hide();
|
|
}
|
|
|
|
// Desktop
|
|
else {
|
|
this.$element.hide();
|
|
this.$targetMenu.show();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Toggles the element attached to the tab bar. The toggle only happens if the screen is small enough to allow it.
|
|
* @function
|
|
* @fires ResponsiveToggle#toggled
|
|
*/
|
|
|
|
}, {
|
|
key: 'toggleMenu',
|
|
value: function toggleMenu() {
|
|
var _this3 = this;
|
|
|
|
if (!__WEBPACK_IMPORTED_MODULE_1__foundation_util_mediaQuery__["a" /* MediaQuery */].atLeast(this.options.hideFor)) {
|
|
/**
|
|
* Fires when the element attached to the tab bar toggles.
|
|
* @event ResponsiveToggle#toggled
|
|
*/
|
|
if (this.options.animate) {
|
|
if (this.$targetMenu.is(':hidden')) {
|
|
__WEBPACK_IMPORTED_MODULE_2__foundation_util_motion__["a" /* Motion */].animateIn(this.$targetMenu, this.animationIn, function () {
|
|
_this3.$element.trigger('toggled.zf.responsiveToggle');
|
|
_this3.$targetMenu.find('[data-mutate]').triggerHandler('mutateme.zf.trigger');
|
|
});
|
|
} else {
|
|
__WEBPACK_IMPORTED_MODULE_2__foundation_util_motion__["a" /* Motion */].animateOut(this.$targetMenu, this.animationOut, function () {
|
|
_this3.$element.trigger('toggled.zf.responsiveToggle');
|
|
});
|
|
}
|
|
} else {
|
|
this.$targetMenu.toggle(0);
|
|
this.$targetMenu.find('[data-mutate]').trigger('mutateme.zf.trigger');
|
|
this.$element.trigger('toggled.zf.responsiveToggle');
|
|
}
|
|
}
|
|
}
|
|
}, {
|
|
key: '_destroy',
|
|
value: function _destroy() {
|
|
this.$element.off('.zf.responsiveToggle');
|
|
this.$toggler.off('.zf.responsiveToggle');
|
|
|
|
__WEBPACK_IMPORTED_MODULE_0_jquery___default()(window).off('changed.zf.mediaquery', this._updateMqHandler);
|
|
}
|
|
}]);
|
|
|
|
return ResponsiveToggle;
|
|
}(__WEBPACK_IMPORTED_MODULE_3__foundation_plugin__["a" /* Plugin */]);
|
|
|
|
ResponsiveToggle.defaults = {
|
|
/**
|
|
* The breakpoint after which the menu is always shown, and the tab bar is hidden.
|
|
* @option
|
|
* @type {string}
|
|
* @default 'medium'
|
|
*/
|
|
hideFor: 'medium',
|
|
|
|
/**
|
|
* To decide if the toggle should be animated or not.
|
|
* @option
|
|
* @type {boolean}
|
|
* @default false
|
|
*/
|
|
animate: false
|
|
};
|
|
|
|
|
|
|
|
/***/ }),
|
|
/* 12 */
|
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Triggers; });
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery__ = __webpack_require__(0);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_jquery__);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__foundation_util_motion__ = __webpack_require__(7);
|
|
|
|
|
|
|
|
|
|
|
|
var MutationObserver = function () {
|
|
var prefixes = ['WebKit', 'Moz', 'O', 'Ms', ''];
|
|
for (var i = 0; i < prefixes.length; i++) {
|
|
if (prefixes[i] + 'MutationObserver' in window) {
|
|
return window[prefixes[i] + 'MutationObserver'];
|
|
}
|
|
}
|
|
return false;
|
|
}();
|
|
|
|
var triggers = function (el, type) {
|
|
el.data(type).split(' ').forEach(function (id) {
|
|
__WEBPACK_IMPORTED_MODULE_0_jquery___default()('#' + id)[type === 'close' ? 'trigger' : 'triggerHandler'](type + '.zf.trigger', [el]);
|
|
});
|
|
};
|
|
|
|
var Triggers = {
|
|
Listeners: {
|
|
Basic: {},
|
|
Global: {}
|
|
},
|
|
Initializers: {}
|
|
};
|
|
|
|
Triggers.Listeners.Basic = {
|
|
openListener: function () {
|
|
triggers(__WEBPACK_IMPORTED_MODULE_0_jquery___default()(this), 'open');
|
|
},
|
|
closeListener: function () {
|
|
var id = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(this).data('close');
|
|
if (id) {
|
|
triggers(__WEBPACK_IMPORTED_MODULE_0_jquery___default()(this), 'close');
|
|
} else {
|
|
__WEBPACK_IMPORTED_MODULE_0_jquery___default()(this).trigger('close.zf.trigger');
|
|
}
|
|
},
|
|
toggleListener: function () {
|
|
var id = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(this).data('toggle');
|
|
if (id) {
|
|
triggers(__WEBPACK_IMPORTED_MODULE_0_jquery___default()(this), 'toggle');
|
|
} else {
|
|
__WEBPACK_IMPORTED_MODULE_0_jquery___default()(this).trigger('toggle.zf.trigger');
|
|
}
|
|
},
|
|
closeableListener: function (e) {
|
|
e.stopPropagation();
|
|
var animation = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(this).data('closable');
|
|
|
|
if (animation !== '') {
|
|
__WEBPACK_IMPORTED_MODULE_1__foundation_util_motion__["a" /* Motion */].animateOut(__WEBPACK_IMPORTED_MODULE_0_jquery___default()(this), animation, function () {
|
|
__WEBPACK_IMPORTED_MODULE_0_jquery___default()(this).trigger('closed.zf');
|
|
});
|
|
} else {
|
|
__WEBPACK_IMPORTED_MODULE_0_jquery___default()(this).fadeOut().trigger('closed.zf');
|
|
}
|
|
},
|
|
toggleFocusListener: function () {
|
|
var id = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(this).data('toggle-focus');
|
|
__WEBPACK_IMPORTED_MODULE_0_jquery___default()('#' + id).triggerHandler('toggle.zf.trigger', [__WEBPACK_IMPORTED_MODULE_0_jquery___default()(this)]);
|
|
}
|
|
};
|
|
|
|
// Elements with [data-open] will reveal a plugin that supports it when clicked.
|
|
Triggers.Initializers.addOpenListener = function ($elem) {
|
|
$elem.off('click.zf.trigger', Triggers.Listeners.Basic.openListener);
|
|
$elem.on('click.zf.trigger', '[data-open]', Triggers.Listeners.Basic.openListener);
|
|
};
|
|
|
|
// Elements with [data-close] will close a plugin that supports it when clicked.
|
|
// If used without a value on [data-close], the event will bubble, allowing it to close a parent component.
|
|
Triggers.Initializers.addCloseListener = function ($elem) {
|
|
$elem.off('click.zf.trigger', Triggers.Listeners.Basic.closeListener);
|
|
$elem.on('click.zf.trigger', '[data-close]', Triggers.Listeners.Basic.closeListener);
|
|
};
|
|
|
|
// Elements with [data-toggle] will toggle a plugin that supports it when clicked.
|
|
Triggers.Initializers.addToggleListener = function ($elem) {
|
|
$elem.off('click.zf.trigger', Triggers.Listeners.Basic.toggleListener);
|
|
$elem.on('click.zf.trigger', '[data-toggle]', Triggers.Listeners.Basic.toggleListener);
|
|
};
|
|
|
|
// Elements with [data-closable] will respond to close.zf.trigger events.
|
|
Triggers.Initializers.addCloseableListener = function ($elem) {
|
|
$elem.off('close.zf.trigger', Triggers.Listeners.Basic.closeableListener);
|
|
$elem.on('close.zf.trigger', '[data-closeable], [data-closable]', Triggers.Listeners.Basic.closeableListener);
|
|
};
|
|
|
|
// Elements with [data-toggle-focus] will respond to coming in and out of focus
|
|
Triggers.Initializers.addToggleFocusListener = function ($elem) {
|
|
$elem.off('focus.zf.trigger blur.zf.trigger', Triggers.Listeners.Basic.toggleFocusListener);
|
|
$elem.on('focus.zf.trigger blur.zf.trigger', '[data-toggle-focus]', Triggers.Listeners.Basic.toggleFocusListener);
|
|
};
|
|
|
|
// More Global/complex listeners and triggers
|
|
Triggers.Listeners.Global = {
|
|
resizeListener: function ($nodes) {
|
|
if (!MutationObserver) {
|
|
//fallback for IE 9
|
|
$nodes.each(function () {
|
|
__WEBPACK_IMPORTED_MODULE_0_jquery___default()(this).triggerHandler('resizeme.zf.trigger');
|
|
});
|
|
}
|
|
//trigger all listening elements and signal a resize event
|
|
$nodes.attr('data-events', "resize");
|
|
},
|
|
scrollListener: function ($nodes) {
|
|
if (!MutationObserver) {
|
|
//fallback for IE 9
|
|
$nodes.each(function () {
|
|
__WEBPACK_IMPORTED_MODULE_0_jquery___default()(this).triggerHandler('scrollme.zf.trigger');
|
|
});
|
|
}
|
|
//trigger all listening elements and signal a scroll event
|
|
$nodes.attr('data-events', "scroll");
|
|
},
|
|
closeMeListener: function (e, pluginId) {
|
|
var plugin = e.namespace.split('.')[0];
|
|
var plugins = __WEBPACK_IMPORTED_MODULE_0_jquery___default()('[data-' + plugin + ']').not('[data-yeti-box="' + pluginId + '"]');
|
|
|
|
plugins.each(function () {
|
|
var _this = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(this);
|
|
_this.triggerHandler('close.zf.trigger', [_this]);
|
|
});
|
|
}
|
|
};
|
|
|
|
// Global, parses whole document.
|
|
Triggers.Initializers.addClosemeListener = function (pluginName) {
|
|
var yetiBoxes = __WEBPACK_IMPORTED_MODULE_0_jquery___default()('[data-yeti-box]'),
|
|
plugNames = ['dropdown', 'tooltip', 'reveal'];
|
|
|
|
if (pluginName) {
|
|
if (typeof pluginName === 'string') {
|
|
plugNames.push(pluginName);
|
|
} else if (typeof pluginName === 'object' && typeof pluginName[0] === 'string') {
|
|
plugNames.concat(pluginName);
|
|
} else {
|
|
console.error('Plugin names must be strings');
|
|
}
|
|
}
|
|
if (yetiBoxes.length) {
|
|
var listeners = plugNames.map(function (name) {
|
|
return 'closeme.zf.' + name;
|
|
}).join(' ');
|
|
|
|
__WEBPACK_IMPORTED_MODULE_0_jquery___default()(window).off(listeners).on(listeners, Triggers.Listeners.Global.closeMeListener);
|
|
}
|
|
};
|
|
|
|
function debounceGlobalListener(debounce, trigger, listener) {
|
|
var timer = void 0,
|
|
args = Array.prototype.slice.call(arguments, 3);
|
|
__WEBPACK_IMPORTED_MODULE_0_jquery___default()(window).off(trigger).on(trigger, function (e) {
|
|
if (timer) {
|
|
clearTimeout(timer);
|
|
}
|
|
timer = setTimeout(function () {
|
|
listener.apply(null, args);
|
|
}, debounce || 10); //default time to emit scroll event
|
|
});
|
|
}
|
|
|
|
Triggers.Initializers.addResizeListener = function (debounce) {
|
|
var $nodes = __WEBPACK_IMPORTED_MODULE_0_jquery___default()('[data-resize]');
|
|
if ($nodes.length) {
|
|
debounceGlobalListener(debounce, 'resize.zf.trigger', Triggers.Listeners.Global.resizeListener, $nodes);
|
|
}
|
|
};
|
|
|
|
Triggers.Initializers.addScrollListener = function (debounce) {
|
|
var $nodes = __WEBPACK_IMPORTED_MODULE_0_jquery___default()('[data-scroll]');
|
|
if ($nodes.length) {
|
|
debounceGlobalListener(debounce, 'scroll.zf.trigger', Triggers.Listeners.Global.scrollListener, $nodes);
|
|
}
|
|
};
|
|
|
|
Triggers.Initializers.addMutationEventsListener = function ($elem) {
|
|
if (!MutationObserver) {
|
|
return false;
|
|
}
|
|
var $nodes = $elem.find('[data-resize], [data-scroll], [data-mutate]');
|
|
|
|
//element callback
|
|
var listeningElementsMutation = function (mutationRecordsList) {
|
|
var $target = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(mutationRecordsList[0].target);
|
|
|
|
//trigger the event handler for the element depending on type
|
|
switch (mutationRecordsList[0].type) {
|
|
case "attributes":
|
|
if ($target.attr("data-events") === "scroll" && mutationRecordsList[0].attributeName === "data-events") {
|
|
$target.triggerHandler('scrollme.zf.trigger', [$target, window.pageYOffset]);
|
|
}
|
|
if ($target.attr("data-events") === "resize" && mutationRecordsList[0].attributeName === "data-events") {
|
|
$target.triggerHandler('resizeme.zf.trigger', [$target]);
|
|
}
|
|
if (mutationRecordsList[0].attributeName === "style") {
|
|
$target.closest("[data-mutate]").attr("data-events", "mutate");
|
|
$target.closest("[data-mutate]").triggerHandler('mutateme.zf.trigger', [$target.closest("[data-mutate]")]);
|
|
}
|
|
break;
|
|
|
|
case "childList":
|
|
$target.closest("[data-mutate]").attr("data-events", "mutate");
|
|
$target.closest("[data-mutate]").triggerHandler('mutateme.zf.trigger', [$target.closest("[data-mutate]")]);
|
|
break;
|
|
|
|
default:
|
|
return false;
|
|
//nothing
|
|
}
|
|
};
|
|
|
|
if ($nodes.length) {
|
|
//for each element that needs to listen for resizing, scrolling, or mutation add a single observer
|
|
for (var i = 0; i <= $nodes.length - 1; i++) {
|
|
var elementObserver = new MutationObserver(listeningElementsMutation);
|
|
elementObserver.observe($nodes[i], { attributes: true, childList: true, characterData: false, subtree: true, attributeFilter: ["data-events", "style"] });
|
|
}
|
|
}
|
|
};
|
|
|
|
Triggers.Initializers.addSimpleListeners = function () {
|
|
var $document = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(document);
|
|
|
|
Triggers.Initializers.addOpenListener($document);
|
|
Triggers.Initializers.addCloseListener($document);
|
|
Triggers.Initializers.addToggleListener($document);
|
|
Triggers.Initializers.addCloseableListener($document);
|
|
Triggers.Initializers.addToggleFocusListener($document);
|
|
};
|
|
|
|
Triggers.Initializers.addGlobalListeners = function () {
|
|
var $document = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(document);
|
|
Triggers.Initializers.addMutationEventsListener($document);
|
|
Triggers.Initializers.addResizeListener();
|
|
Triggers.Initializers.addScrollListener();
|
|
Triggers.Initializers.addClosemeListener();
|
|
};
|
|
|
|
Triggers.init = function ($, Foundation) {
|
|
if (typeof $.triggersInitialized === 'undefined') {
|
|
var $document = $(document);
|
|
|
|
if (document.readyState === "complete") {
|
|
Triggers.Initializers.addSimpleListeners();
|
|
Triggers.Initializers.addGlobalListeners();
|
|
} else {
|
|
$(window).on('load', function () {
|
|
Triggers.Initializers.addSimpleListeners();
|
|
Triggers.Initializers.addGlobalListeners();
|
|
});
|
|
}
|
|
|
|
$.triggersInitialized = true;
|
|
}
|
|
|
|
if (Foundation) {
|
|
Foundation.Triggers = Triggers;
|
|
// Legacy included to be backwards compatible for now.
|
|
Foundation.IHearYou = Triggers.Initializers.addGlobalListeners;
|
|
}
|
|
};
|
|
|
|
|
|
|
|
/***/ }),
|
|
/* 13 */
|
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AccordionMenu; });
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery__ = __webpack_require__(0);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_jquery__);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__foundation_util_keyboard__ = __webpack_require__(4);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__foundation_util_nest__ = __webpack_require__(5);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__foundation_util_core__ = __webpack_require__(1);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__foundation_plugin__ = __webpack_require__(2);
|
|
|
|
|
|
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
|
|
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
|
|
|
|
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
* AccordionMenu module.
|
|
* @module foundation.accordionMenu
|
|
* @requires foundation.util.keyboard
|
|
* @requires foundation.util.nest
|
|
*/
|
|
|
|
var AccordionMenu = function (_Plugin) {
|
|
_inherits(AccordionMenu, _Plugin);
|
|
|
|
function AccordionMenu() {
|
|
_classCallCheck(this, AccordionMenu);
|
|
|
|
return _possibleConstructorReturn(this, (AccordionMenu.__proto__ || Object.getPrototypeOf(AccordionMenu)).apply(this, arguments));
|
|
}
|
|
|
|
_createClass(AccordionMenu, [{
|
|
key: '_setup',
|
|
|
|
/**
|
|
* Creates a new instance of an accordion menu.
|
|
* @class
|
|
* @name AccordionMenu
|
|
* @fires AccordionMenu#init
|
|
* @param {jQuery} element - jQuery object to make into an accordion menu.
|
|
* @param {Object} options - Overrides to the default plugin settings.
|
|
*/
|
|
value: function _setup(element, options) {
|
|
this.$element = element;
|
|
this.options = __WEBPACK_IMPORTED_MODULE_0_jquery___default.a.extend({}, AccordionMenu.defaults, this.$element.data(), options);
|
|
this.className = 'AccordionMenu'; // ie9 back compat
|
|
|
|
this._init();
|
|
|
|
__WEBPACK_IMPORTED_MODULE_1__foundation_util_keyboard__["a" /* Keyboard */].register('AccordionMenu', {
|
|
'ENTER': 'toggle',
|
|
'SPACE': 'toggle',
|
|
'ARROW_RIGHT': 'open',
|
|
'ARROW_UP': 'up',
|
|
'ARROW_DOWN': 'down',
|
|
'ARROW_LEFT': 'close',
|
|
'ESCAPE': 'closeAll'
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Initializes the accordion menu by hiding all nested menus.
|
|
* @private
|
|
*/
|
|
|
|
}, {
|
|
key: '_init',
|
|
value: function _init() {
|
|
__WEBPACK_IMPORTED_MODULE_2__foundation_util_nest__["a" /* Nest */].Feather(this.$element, 'accordion');
|
|
|
|
var _this = this;
|
|
|
|
this.$element.find('[data-submenu]').not('.is-active').slideUp(0); //.find('a').css('padding-left', '1rem');
|
|
this.$element.attr({
|
|
'role': 'tree',
|
|
'aria-multiselectable': this.options.multiOpen
|
|
});
|
|
|
|
this.$menuLinks = this.$element.find('.is-accordion-submenu-parent');
|
|
this.$menuLinks.each(function () {
|
|
var linkId = this.id || __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__foundation_util_core__["a" /* GetYoDigits */])(6, 'acc-menu-link'),
|
|
$elem = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(this),
|
|
$sub = $elem.children('[data-submenu]'),
|
|
subId = $sub[0].id || __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__foundation_util_core__["a" /* GetYoDigits */])(6, 'acc-menu'),
|
|
isActive = $sub.hasClass('is-active');
|
|
|
|
if (_this.options.submenuToggle) {
|
|
$elem.addClass('has-submenu-toggle');
|
|
$elem.children('a').after('<button id="' + linkId + '" class="submenu-toggle" aria-controls="' + subId + '" aria-expanded="' + isActive + '" title="' + _this.options.submenuToggleText + '"><span class="submenu-toggle-text">' + _this.options.submenuToggleText + '</span></button>');
|
|
} else {
|
|
$elem.attr({
|
|
'aria-controls': subId,
|
|
'aria-expanded': isActive,
|
|
'id': linkId
|
|
});
|
|
}
|
|
$sub.attr({
|
|
'aria-labelledby': linkId,
|
|
'aria-hidden': !isActive,
|
|
'role': 'group',
|
|
'id': subId
|
|
});
|
|
});
|
|
this.$element.find('li').attr({
|
|
'role': 'treeitem'
|
|
});
|
|
var initPanes = this.$element.find('.is-active');
|
|
if (initPanes.length) {
|
|
var _this = this;
|
|
initPanes.each(function () {
|
|
_this.down(__WEBPACK_IMPORTED_MODULE_0_jquery___default()(this));
|
|
});
|
|
}
|
|
this._events();
|
|
}
|
|
|
|
/**
|
|
* Adds event handlers for items within the menu.
|
|
* @private
|
|
*/
|
|
|
|
}, {
|
|
key: '_events',
|
|
value: function _events() {
|
|
var _this = this;
|
|
|
|
this.$element.find('li').each(function () {
|
|
var $submenu = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(this).children('[data-submenu]');
|
|
|
|
if ($submenu.length) {
|
|
if (_this.options.submenuToggle) {
|
|
__WEBPACK_IMPORTED_MODULE_0_jquery___default()(this).children('.submenu-toggle').off('click.zf.accordionMenu').on('click.zf.accordionMenu', function (e) {
|
|
_this.toggle($submenu);
|
|
});
|
|
} else {
|
|
__WEBPACK_IMPORTED_MODULE_0_jquery___default()(this).children('a').off('click.zf.accordionMenu').on('click.zf.accordionMenu', function (e) {
|
|
e.preventDefault();
|
|
_this.toggle($submenu);
|
|
});
|
|
}
|
|
}
|
|
}).on('keydown.zf.accordionmenu', function (e) {
|
|
var $element = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(this),
|
|
$elements = $element.parent('ul').children('li'),
|
|
$prevElement,
|
|
$nextElement,
|
|
$target = $element.children('[data-submenu]');
|
|
|
|
$elements.each(function (i) {
|
|
if (__WEBPACK_IMPORTED_MODULE_0_jquery___default()(this).is($element)) {
|
|
$prevElement = $elements.eq(Math.max(0, i - 1)).find('a').first();
|
|
$nextElement = $elements.eq(Math.min(i + 1, $elements.length - 1)).find('a').first();
|
|
|
|
if (__WEBPACK_IMPORTED_MODULE_0_jquery___default()(this).children('[data-submenu]:visible').length) {
|
|
// has open sub menu
|
|
$nextElement = $element.find('li:first-child').find('a').first();
|
|
}
|
|
if (__WEBPACK_IMPORTED_MODULE_0_jquery___default()(this).is(':first-child')) {
|
|
// is first element of sub menu
|
|
$prevElement = $element.parents('li').first().find('a').first();
|
|
} else if ($prevElement.parents('li').first().children('[data-submenu]:visible').length) {
|
|
// if previous element has open sub menu
|
|
$prevElement = $prevElement.parents('li').find('li:last-child').find('a').first();
|
|
}
|
|
if (__WEBPACK_IMPORTED_MODULE_0_jquery___default()(this).is(':last-child')) {
|
|
// is last element of sub menu
|
|
$nextElement = $element.parents('li').first().next('li').find('a').first();
|
|
}
|
|
|
|
return;
|
|
}
|
|
});
|
|
|
|
__WEBPACK_IMPORTED_MODULE_1__foundation_util_keyboard__["a" /* Keyboard */].handleKey(e, 'AccordionMenu', {
|
|
open: function () {
|
|
if ($target.is(':hidden')) {
|
|
_this.down($target);
|
|
$target.find('li').first().find('a').first().focus();
|
|
}
|
|
},
|
|
close: function () {
|
|
if ($target.length && !$target.is(':hidden')) {
|
|
// close active sub of this item
|
|
_this.up($target);
|
|
} else if ($element.parent('[data-submenu]').length) {
|
|
// close currently open sub
|
|
_this.up($element.parent('[data-submenu]'));
|
|
$element.parents('li').first().find('a').first().focus();
|
|
}
|
|
},
|
|
up: function () {
|
|
$prevElement.focus();
|
|
return true;
|
|
},
|
|
down: function () {
|
|
$nextElement.focus();
|
|
return true;
|
|
},
|
|
toggle: function () {
|
|
if (_this.options.submenuToggle) {
|
|
return false;
|
|
}
|
|
if ($element.children('[data-submenu]').length) {
|
|
_this.toggle($element.children('[data-submenu]'));
|
|
return true;
|
|
}
|
|
},
|
|
closeAll: function () {
|
|
_this.hideAll();
|
|
},
|
|
handled: function (preventDefault) {
|
|
if (preventDefault) {
|
|
e.preventDefault();
|
|
}
|
|
e.stopImmediatePropagation();
|
|
}
|
|
});
|
|
}); //.attr('tabindex', 0);
|
|
}
|
|
|
|
/**
|
|
* Closes all panes of the menu.
|
|
* @function
|
|
*/
|
|
|
|
}, {
|
|
key: 'hideAll',
|
|
value: function hideAll() {
|
|
this.up(this.$element.find('[data-submenu]'));
|
|
}
|
|
|
|
/**
|
|
* Opens all panes of the menu.
|
|
* @function
|
|
*/
|
|
|
|
}, {
|
|
key: 'showAll',
|
|
value: function showAll() {
|
|
this.down(this.$element.find('[data-submenu]'));
|
|
}
|
|
|
|
/**
|
|
* Toggles the open/close state of a submenu.
|
|
* @function
|
|
* @param {jQuery} $target - the submenu to toggle
|
|
*/
|
|
|
|
}, {
|
|
key: 'toggle',
|
|
value: function toggle($target) {
|
|
if (!$target.is(':animated')) {
|
|
if (!$target.is(':hidden')) {
|
|
this.up($target);
|
|
} else {
|
|
this.down($target);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Opens the sub-menu defined by `$target`.
|
|
* @param {jQuery} $target - Sub-menu to open.
|
|
* @fires AccordionMenu#down
|
|
*/
|
|
|
|
}, {
|
|
key: 'down',
|
|
value: function down($target) {
|
|
var _this = this;
|
|
|
|
if (!this.options.multiOpen) {
|
|
this.up(this.$element.find('.is-active').not($target.parentsUntil(this.$element).add($target)));
|
|
}
|
|
|
|
$target.addClass('is-active').attr({ 'aria-hidden': false });
|
|
|
|
if (this.options.submenuToggle) {
|
|
$target.prev('.submenu-toggle').attr({ 'aria-expanded': true });
|
|
} else {
|
|
$target.parent('.is-accordion-submenu-parent').attr({ 'aria-expanded': true });
|
|
}
|
|
|
|
$target.slideDown(_this.options.slideSpeed, function () {
|
|
/**
|
|
* Fires when the menu is done opening.
|
|
* @event AccordionMenu#down
|
|
*/
|
|
_this.$element.trigger('down.zf.accordionMenu', [$target]);
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Closes the sub-menu defined by `$target`. All sub-menus inside the target will be closed as well.
|
|
* @param {jQuery} $target - Sub-menu to close.
|
|
* @fires AccordionMenu#up
|
|
*/
|
|
|
|
}, {
|
|
key: 'up',
|
|
value: function up($target) {
|
|
var _this = this;
|
|
$target.slideUp(_this.options.slideSpeed, function () {
|
|
/**
|
|
* Fires when the menu is done collapsing up.
|
|
* @event AccordionMenu#up
|
|
*/
|
|
_this.$element.trigger('up.zf.accordionMenu', [$target]);
|
|
});
|
|
|
|
var $menus = $target.find('[data-submenu]').slideUp(0).addBack().attr('aria-hidden', true);
|
|
|
|
if (this.options.submenuToggle) {
|
|
$menus.prev('.submenu-toggle').attr('aria-expanded', false);
|
|
} else {
|
|
$menus.parent('.is-accordion-submenu-parent').attr('aria-expanded', false);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Destroys an instance of accordion menu.
|
|
* @fires AccordionMenu#destroyed
|
|
*/
|
|
|
|
}, {
|
|
key: '_destroy',
|
|
value: function _destroy() {
|
|
this.$element.find('[data-submenu]').slideDown(0).css('display', '');
|
|
this.$element.find('a').off('click.zf.accordionMenu');
|
|
|
|
if (this.options.submenuToggle) {
|
|
this.$element.find('.has-submenu-toggle').removeClass('has-submenu-toggle');
|
|
this.$element.find('.submenu-toggle').remove();
|
|
}
|
|
|
|
__WEBPACK_IMPORTED_MODULE_2__foundation_util_nest__["a" /* Nest */].Burn(this.$element, 'accordion');
|
|
}
|
|
}]);
|
|
|
|
return AccordionMenu;
|
|
}(__WEBPACK_IMPORTED_MODULE_4__foundation_plugin__["a" /* Plugin */]);
|
|
|
|
AccordionMenu.defaults = {
|
|
/**
|
|
* Amount of time to animate the opening of a submenu in ms.
|
|
* @option
|
|
* @type {number}
|
|
* @default 250
|
|
*/
|
|
slideSpeed: 250,
|
|
/**
|
|
* Adds a separate submenu toggle button. This allows the parent item to have a link.
|
|
* @option
|
|
* @example true
|
|
*/
|
|
submenuToggle: false,
|
|
/**
|
|
* The text used for the submenu toggle if enabled. This is used for screen readers only.
|
|
* @option
|
|
* @example true
|
|
*/
|
|
submenuToggleText: 'Toggle menu',
|
|
/**
|
|
* Allow the menu to have multiple open panes.
|
|
* @option
|
|
* @type {boolean}
|
|
* @default true
|
|
*/
|
|
multiOpen: true
|
|
};
|
|
|
|
|
|
|
|
/***/ }),
|
|
/* 14 */
|
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Drilldown; });
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery__ = __webpack_require__(0);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_jquery__);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__foundation_util_keyboard__ = __webpack_require__(4);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__foundation_util_nest__ = __webpack_require__(5);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__foundation_util_core__ = __webpack_require__(1);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__foundation_util_box__ = __webpack_require__(6);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__foundation_plugin__ = __webpack_require__(2);
|
|
|
|
|
|
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
|
|
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
|
|
|
|
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
* Drilldown module.
|
|
* @module foundation.drilldown
|
|
* @requires foundation.util.keyboard
|
|
* @requires foundation.util.nest
|
|
* @requires foundation.util.box
|
|
*/
|
|
|
|
var Drilldown = function (_Plugin) {
|
|
_inherits(Drilldown, _Plugin);
|
|
|
|
function Drilldown() {
|
|
_classCallCheck(this, Drilldown);
|
|
|
|
return _possibleConstructorReturn(this, (Drilldown.__proto__ || Object.getPrototypeOf(Drilldown)).apply(this, arguments));
|
|
}
|
|
|
|
_createClass(Drilldown, [{
|
|
key: '_setup',
|
|
|
|
/**
|
|
* Creates a new instance of a drilldown menu.
|
|
* @class
|
|
* @name Drilldown
|
|
* @param {jQuery} element - jQuery object to make into an accordion menu.
|
|
* @param {Object} options - Overrides to the default plugin settings.
|
|
*/
|
|
value: function _setup(element, options) {
|
|
this.$element = element;
|
|
this.options = __WEBPACK_IMPORTED_MODULE_0_jquery___default.a.extend({}, Drilldown.defaults, this.$element.data(), options);
|
|
this.className = 'Drilldown'; // ie9 back compat
|
|
|
|
this._init();
|
|
|
|
__WEBPACK_IMPORTED_MODULE_1__foundation_util_keyboard__["a" /* Keyboard */].register('Drilldown', {
|
|
'ENTER': 'open',
|
|
'SPACE': 'open',
|
|
'ARROW_RIGHT': 'next',
|
|
'ARROW_UP': 'up',
|
|
'ARROW_DOWN': 'down',
|
|
'ARROW_LEFT': 'previous',
|
|
'ESCAPE': 'close',
|
|
'TAB': 'down',
|
|
'SHIFT_TAB': 'up'
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Initializes the drilldown by creating jQuery collections of elements
|
|
* @private
|
|
*/
|
|
|
|
}, {
|
|
key: '_init',
|
|
value: function _init() {
|
|
__WEBPACK_IMPORTED_MODULE_2__foundation_util_nest__["a" /* Nest */].Feather(this.$element, 'drilldown');
|
|
|
|
if (this.options.autoApplyClass) {
|
|
this.$element.addClass('drilldown');
|
|
}
|
|
|
|
this.$element.attr({
|
|
'role': 'tree',
|
|
'aria-multiselectable': false
|
|
});
|
|
this.$submenuAnchors = this.$element.find('li.is-drilldown-submenu-parent').children('a');
|
|
this.$submenus = this.$submenuAnchors.parent('li').children('[data-submenu]').attr('role', 'group');
|
|
this.$menuItems = this.$element.find('li').not('.js-drilldown-back').attr('role', 'treeitem').find('a');
|
|
this.$element.attr('data-mutate', this.$element.attr('data-drilldown') || __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__foundation_util_core__["a" /* GetYoDigits */])(6, 'drilldown'));
|
|
|
|
this._prepareMenu();
|
|
this._registerEvents();
|
|
|
|
this._keyboardEvents();
|
|
}
|
|
|
|
/**
|
|
* prepares drilldown menu by setting attributes to links and elements
|
|
* sets a min height to prevent content jumping
|
|
* wraps the element if not already wrapped
|
|
* @private
|
|
* @function
|
|
*/
|
|
|
|
}, {
|
|
key: '_prepareMenu',
|
|
value: function _prepareMenu() {
|
|
var _this = this;
|
|
// if(!this.options.holdOpen){
|
|
// this._menuLinkEvents();
|
|
// }
|
|
this.$submenuAnchors.each(function () {
|
|
var $link = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(this);
|
|
var $sub = $link.parent();
|
|
if (_this.options.parentLink) {
|
|
$link.clone().prependTo($sub.children('[data-submenu]')).wrap('<li class="is-submenu-parent-item is-submenu-item is-drilldown-submenu-item" role="menuitem"></li>');
|
|
}
|
|
$link.data('savedHref', $link.attr('href')).removeAttr('href').attr('tabindex', 0);
|
|
$link.children('[data-submenu]').attr({
|
|
'aria-hidden': true,
|
|
'tabindex': 0,
|
|
'role': 'group'
|
|
});
|
|
_this._events($link);
|
|
});
|
|
this.$submenus.each(function () {
|
|
var $menu = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(this),
|
|
$back = $menu.find('.js-drilldown-back');
|
|
if (!$back.length) {
|
|
switch (_this.options.backButtonPosition) {
|
|
case "bottom":
|
|
$menu.append(_this.options.backButton);
|
|
break;
|
|
case "top":
|
|
$menu.prepend(_this.options.backButton);
|
|
break;
|
|
default:
|
|
console.error("Unsupported backButtonPosition value '" + _this.options.backButtonPosition + "'");
|
|
}
|
|
}
|
|
_this._back($menu);
|
|
});
|
|
|
|
this.$submenus.addClass('invisible');
|
|
if (!this.options.autoHeight) {
|
|
this.$submenus.addClass('drilldown-submenu-cover-previous');
|
|
}
|
|
|
|
// create a wrapper on element if it doesn't exist.
|
|
if (!this.$element.parent().hasClass('is-drilldown')) {
|
|
this.$wrapper = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(this.options.wrapper).addClass('is-drilldown');
|
|
if (this.options.animateHeight) this.$wrapper.addClass('animate-height');
|
|
this.$element.wrap(this.$wrapper);
|
|
}
|
|
// set wrapper
|
|
this.$wrapper = this.$element.parent();
|
|
this.$wrapper.css(this._getMaxDims());
|
|
}
|
|
}, {
|
|
key: '_resize',
|
|
value: function _resize() {
|
|
this.$wrapper.css({ 'max-width': 'none', 'min-height': 'none' });
|
|
// _getMaxDims has side effects (boo) but calling it should update all other necessary heights & widths
|
|
this.$wrapper.css(this._getMaxDims());
|
|
}
|
|
|
|
/**
|
|
* Adds event handlers to elements in the menu.
|
|
* @function
|
|
* @private
|
|
* @param {jQuery} $elem - the current menu item to add handlers to.
|
|
*/
|
|
|
|
}, {
|
|
key: '_events',
|
|
value: function _events($elem) {
|
|
var _this = this;
|
|
|
|
$elem.off('click.zf.drilldown').on('click.zf.drilldown', function (e) {
|
|
if (__WEBPACK_IMPORTED_MODULE_0_jquery___default()(e.target).parentsUntil('ul', 'li').hasClass('is-drilldown-submenu-parent')) {
|
|
e.stopImmediatePropagation();
|
|
e.preventDefault();
|
|
}
|
|
|
|
// if(e.target !== e.currentTarget.firstElementChild){
|
|
// return false;
|
|
// }
|
|
_this._show($elem.parent('li'));
|
|
|
|
if (_this.options.closeOnClick) {
|
|
var $body = __WEBPACK_IMPORTED_MODULE_0_jquery___default()('body');
|
|
$body.off('.zf.drilldown').on('click.zf.drilldown', function (e) {
|
|
if (e.target === _this.$element[0] || __WEBPACK_IMPORTED_MODULE_0_jquery___default.a.contains(_this.$element[0], e.target)) {
|
|
return;
|
|
}
|
|
e.preventDefault();
|
|
_this._hideAll();
|
|
$body.off('.zf.drilldown');
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Adds event handlers to the menu element.
|
|
* @function
|
|
* @private
|
|
*/
|
|
|
|
}, {
|
|
key: '_registerEvents',
|
|
value: function _registerEvents() {
|
|
if (this.options.scrollTop) {
|
|
this._bindHandler = this._scrollTop.bind(this);
|
|
this.$element.on('open.zf.drilldown hide.zf.drilldown closed.zf.drilldown', this._bindHandler);
|
|
}
|
|
this.$element.on('mutateme.zf.trigger', this._resize.bind(this));
|
|
}
|
|
|
|
/**
|
|
* Scroll to Top of Element or data-scroll-top-element
|
|
* @function
|
|
* @fires Drilldown#scrollme
|
|
*/
|
|
|
|
}, {
|
|
key: '_scrollTop',
|
|
value: function _scrollTop() {
|
|
var _this = this;
|
|
var $scrollTopElement = _this.options.scrollTopElement != '' ? __WEBPACK_IMPORTED_MODULE_0_jquery___default()(_this.options.scrollTopElement) : _this.$element,
|
|
scrollPos = parseInt($scrollTopElement.offset().top + _this.options.scrollTopOffset, 10);
|
|
__WEBPACK_IMPORTED_MODULE_0_jquery___default()('html, body').stop(true).animate({ scrollTop: scrollPos }, _this.options.animationDuration, _this.options.animationEasing, function () {
|
|
/**
|
|
* Fires after the menu has scrolled
|
|
* @event Drilldown#scrollme
|
|
*/
|
|
if (this === __WEBPACK_IMPORTED_MODULE_0_jquery___default()('html')[0]) _this.$element.trigger('scrollme.zf.drilldown');
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Adds keydown event listener to `li`'s in the menu.
|
|
* @private
|
|
*/
|
|
|
|
}, {
|
|
key: '_keyboardEvents',
|
|
value: function _keyboardEvents() {
|
|
var _this = this;
|
|
|
|
this.$menuItems.add(this.$element.find('.js-drilldown-back > a, .is-submenu-parent-item > a')).on('keydown.zf.drilldown', function (e) {
|
|
var $element = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(this),
|
|
$elements = $element.parent('li').parent('ul').children('li').children('a'),
|
|
$prevElement,
|
|
$nextElement;
|
|
|
|
$elements.each(function (i) {
|
|
if (__WEBPACK_IMPORTED_MODULE_0_jquery___default()(this).is($element)) {
|
|
$prevElement = $elements.eq(Math.max(0, i - 1));
|
|
$nextElement = $elements.eq(Math.min(i + 1, $elements.length - 1));
|
|
return;
|
|
}
|
|
});
|
|
|
|
__WEBPACK_IMPORTED_MODULE_1__foundation_util_keyboard__["a" /* Keyboard */].handleKey(e, 'Drilldown', {
|
|
next: function () {
|
|
if ($element.is(_this.$submenuAnchors)) {
|
|
_this._show($element.parent('li'));
|
|
$element.parent('li').one(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__foundation_util_core__["b" /* transitionend */])($element), function () {
|
|
$element.parent('li').find('ul li a').filter(_this.$menuItems).first().focus();
|
|
});
|
|
return true;
|
|
}
|
|
},
|
|
previous: function () {
|
|
_this._hide($element.parent('li').parent('ul'));
|
|
$element.parent('li').parent('ul').one(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__foundation_util_core__["b" /* transitionend */])($element), function () {
|
|
setTimeout(function () {
|
|
$element.parent('li').parent('ul').parent('li').children('a').first().focus();
|
|
}, 1);
|
|
});
|
|
return true;
|
|
},
|
|
up: function () {
|
|
$prevElement.focus();
|
|
// Don't tap focus on first element in root ul
|
|
return !$element.is(_this.$element.find('> li:first-child > a'));
|
|
},
|
|
down: function () {
|
|
$nextElement.focus();
|
|
// Don't tap focus on last element in root ul
|
|
return !$element.is(_this.$element.find('> li:last-child > a'));
|
|
},
|
|
close: function () {
|
|
// Don't close on element in root ul
|
|
if (!$element.is(_this.$element.find('> li > a'))) {
|
|
_this._hide($element.parent().parent());
|
|
$element.parent().parent().siblings('a').focus();
|
|
}
|
|
},
|
|
open: function () {
|
|
if (!$element.is(_this.$menuItems)) {
|
|
// not menu item means back button
|
|
_this._hide($element.parent('li').parent('ul'));
|
|
$element.parent('li').parent('ul').one(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__foundation_util_core__["b" /* transitionend */])($element), function () {
|
|
setTimeout(function () {
|
|
$element.parent('li').parent('ul').parent('li').children('a').first().focus();
|
|
}, 1);
|
|
});
|
|
return true;
|
|
} else if ($element.is(_this.$submenuAnchors)) {
|
|
_this._show($element.parent('li'));
|
|
$element.parent('li').one(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__foundation_util_core__["b" /* transitionend */])($element), function () {
|
|
$element.parent('li').find('ul li a').filter(_this.$menuItems).first().focus();
|
|
});
|
|
return true;
|
|
}
|
|
},
|
|
handled: function (preventDefault) {
|
|
if (preventDefault) {
|
|
e.preventDefault();
|
|
}
|
|
e.stopImmediatePropagation();
|
|
}
|
|
});
|
|
}); // end keyboardAccess
|
|
}
|
|
|
|
/**
|
|
* Closes all open elements, and returns to root menu.
|
|
* @function
|
|
* @fires Drilldown#closed
|
|
*/
|
|
|
|
}, {
|
|
key: '_hideAll',
|
|
value: function _hideAll() {
|
|
var $elem = this.$element.find('.is-drilldown-submenu.is-active').addClass('is-closing');
|
|
if (this.options.autoHeight) this.$wrapper.css({ height: $elem.parent().closest('ul').data('calcHeight') });
|
|
$elem.one(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__foundation_util_core__["b" /* transitionend */])($elem), function (e) {
|
|
$elem.removeClass('is-active is-closing');
|
|
});
|
|
/**
|
|
* Fires when the menu is fully closed.
|
|
* @event Drilldown#closed
|
|
*/
|
|
this.$element.trigger('closed.zf.drilldown');
|
|
}
|
|
|
|
/**
|
|
* Adds event listener for each `back` button, and closes open menus.
|
|
* @function
|
|
* @fires Drilldown#back
|
|
* @param {jQuery} $elem - the current sub-menu to add `back` event.
|
|
*/
|
|
|
|
}, {
|
|
key: '_back',
|
|
value: function _back($elem) {
|
|
var _this = this;
|
|
$elem.off('click.zf.drilldown');
|
|
$elem.children('.js-drilldown-back').on('click.zf.drilldown', function (e) {
|
|
e.stopImmediatePropagation();
|
|
// console.log('mouseup on back');
|
|
_this._hide($elem);
|
|
|
|
// If there is a parent submenu, call show
|
|
var parentSubMenu = $elem.parent('li').parent('ul').parent('li');
|
|
if (parentSubMenu.length) {
|
|
_this._show(parentSubMenu);
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Adds event listener to menu items w/o submenus to close open menus on click.
|
|
* @function
|
|
* @private
|
|
*/
|
|
|
|
}, {
|
|
key: '_menuLinkEvents',
|
|
value: function _menuLinkEvents() {
|
|
var _this = this;
|
|
this.$menuItems.not('.is-drilldown-submenu-parent').off('click.zf.drilldown').on('click.zf.drilldown', function (e) {
|
|
// e.stopImmediatePropagation();
|
|
setTimeout(function () {
|
|
_this._hideAll();
|
|
}, 0);
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Opens a submenu.
|
|
* @function
|
|
* @fires Drilldown#open
|
|
* @param {jQuery} $elem - the current element with a submenu to open, i.e. the `li` tag.
|
|
*/
|
|
|
|
}, {
|
|
key: '_show',
|
|
value: function _show($elem) {
|
|
if (this.options.autoHeight) this.$wrapper.css({ height: $elem.children('[data-submenu]').data('calcHeight') });
|
|
$elem.attr('aria-expanded', true);
|
|
$elem.children('[data-submenu]').addClass('is-active').removeClass('invisible').attr('aria-hidden', false);
|
|
/**
|
|
* Fires when the submenu has opened.
|
|
* @event Drilldown#open
|
|
*/
|
|
this.$element.trigger('open.zf.drilldown', [$elem]);
|
|
}
|
|
}, {
|
|
key: '_hide',
|
|
|
|
|
|
/**
|
|
* Hides a submenu
|
|
* @function
|
|
* @fires Drilldown#hide
|
|
* @param {jQuery} $elem - the current sub-menu to hide, i.e. the `ul` tag.
|
|
*/
|
|
value: function _hide($elem) {
|
|
if (this.options.autoHeight) this.$wrapper.css({ height: $elem.parent().closest('ul').data('calcHeight') });
|
|
var _this = this;
|
|
$elem.parent('li').attr('aria-expanded', false);
|
|
$elem.attr('aria-hidden', true).addClass('is-closing');
|
|
$elem.addClass('is-closing').one(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__foundation_util_core__["b" /* transitionend */])($elem), function () {
|
|
$elem.removeClass('is-active is-closing');
|
|
$elem.blur().addClass('invisible');
|
|
});
|
|
/**
|
|
* Fires when the submenu has closed.
|
|
* @event Drilldown#hide
|
|
*/
|
|
$elem.trigger('hide.zf.drilldown', [$elem]);
|
|
}
|
|
|
|
/**
|
|
* Iterates through the nested menus to calculate the min-height, and max-width for the menu.
|
|
* Prevents content jumping.
|
|
* @function
|
|
* @private
|
|
*/
|
|
|
|
}, {
|
|
key: '_getMaxDims',
|
|
value: function _getMaxDims() {
|
|
var maxHeight = 0,
|
|
result = {},
|
|
_this = this;
|
|
this.$submenus.add(this.$element).each(function () {
|
|
var numOfElems = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(this).children('li').length;
|
|
var height = __WEBPACK_IMPORTED_MODULE_4__foundation_util_box__["a" /* Box */].GetDimensions(this).height;
|
|
maxHeight = height > maxHeight ? height : maxHeight;
|
|
if (_this.options.autoHeight) {
|
|
__WEBPACK_IMPORTED_MODULE_0_jquery___default()(this).data('calcHeight', height);
|
|
if (!__WEBPACK_IMPORTED_MODULE_0_jquery___default()(this).hasClass('is-drilldown-submenu')) result['height'] = height;
|
|
}
|
|
});
|
|
|
|
if (!this.options.autoHeight) result['min-height'] = maxHeight + 'px';
|
|
|
|
result['max-width'] = this.$element[0].getBoundingClientRect().width + 'px';
|
|
|
|
return result;
|
|
}
|
|
|
|
/**
|
|
* Destroys the Drilldown Menu
|
|
* @function
|
|
*/
|
|
|
|
}, {
|
|
key: '_destroy',
|
|
value: function _destroy() {
|
|
if (this.options.scrollTop) this.$element.off('.zf.drilldown', this._bindHandler);
|
|
this._hideAll();
|
|
this.$element.off('mutateme.zf.trigger');
|
|
__WEBPACK_IMPORTED_MODULE_2__foundation_util_nest__["a" /* Nest */].Burn(this.$element, 'drilldown');
|
|
this.$element.unwrap().find('.js-drilldown-back, .is-submenu-parent-item').remove().end().find('.is-active, .is-closing, .is-drilldown-submenu').removeClass('is-active is-closing is-drilldown-submenu').end().find('[data-submenu]').removeAttr('aria-hidden tabindex role');
|
|
this.$submenuAnchors.each(function () {
|
|
__WEBPACK_IMPORTED_MODULE_0_jquery___default()(this).off('.zf.drilldown');
|
|
});
|
|
|
|
this.$submenus.removeClass('drilldown-submenu-cover-previous invisible');
|
|
|
|
this.$element.find('a').each(function () {
|
|
var $link = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(this);
|
|
$link.removeAttr('tabindex');
|
|
if ($link.data('savedHref')) {
|
|
$link.attr('href', $link.data('savedHref')).removeData('savedHref');
|
|
} else {
|
|
return;
|
|
}
|
|
});
|
|
}
|
|
}]);
|
|
|
|
return Drilldown;
|
|
}(__WEBPACK_IMPORTED_MODULE_5__foundation_plugin__["a" /* Plugin */]);
|
|
|
|
Drilldown.defaults = {
|
|
/**
|
|
* Drilldowns depend on styles in order to function properly; in the default build of Foundation these are
|
|
* on the `drilldown` class. This option auto-applies this class to the drilldown upon initialization.
|
|
* @option
|
|
* @type {boolian}
|
|
* @default true
|
|
*/
|
|
autoApplyClass: true,
|
|
/**
|
|
* Markup used for JS generated back button. Prepended or appended (see backButtonPosition) to submenu lists and deleted on `destroy` method, 'js-drilldown-back' class required. Remove the backslash (`\`) if copy and pasting.
|
|
* @option
|
|
* @type {string}
|
|
* @default '<li class="js-drilldown-back"><a tabindex="0">Back</a></li>'
|
|
*/
|
|
backButton: '<li class="js-drilldown-back"><a tabindex="0">Back</a></li>',
|
|
/**
|
|
* Position the back button either at the top or bottom of drilldown submenus. Can be `'left'` or `'bottom'`.
|
|
* @option
|
|
* @type {string}
|
|
* @default top
|
|
*/
|
|
backButtonPosition: 'top',
|
|
/**
|
|
* Markup used to wrap drilldown menu. Use a class name for independent styling; the JS applied class: `is-drilldown` is required. Remove the backslash (`\`) if copy and pasting.
|
|
* @option
|
|
* @type {string}
|
|
* @default '<div></div>'
|
|
*/
|
|
wrapper: '<div></div>',
|
|
/**
|
|
* Adds the parent link to the submenu.
|
|
* @option
|
|
* @type {boolean}
|
|
* @default false
|
|
*/
|
|
parentLink: false,
|
|
/**
|
|
* Allow the menu to return to root list on body click.
|
|
* @option
|
|
* @type {boolean}
|
|
* @default false
|
|
*/
|
|
closeOnClick: false,
|
|
/**
|
|
* Allow the menu to auto adjust height.
|
|
* @option
|
|
* @type {boolean}
|
|
* @default false
|
|
*/
|
|
autoHeight: false,
|
|
/**
|
|
* Animate the auto adjust height.
|
|
* @option
|
|
* @type {boolean}
|
|
* @default false
|
|
*/
|
|
animateHeight: false,
|
|
/**
|
|
* Scroll to the top of the menu after opening a submenu or navigating back using the menu back button
|
|
* @option
|
|
* @type {boolean}
|
|
* @default false
|
|
*/
|
|
scrollTop: false,
|
|
/**
|
|
* String jquery selector (for example 'body') of element to take offset().top from, if empty string the drilldown menu offset().top is taken
|
|
* @option
|
|
* @type {string}
|
|
* @default ''
|
|
*/
|
|
scrollTopElement: '',
|
|
/**
|
|
* ScrollTop offset
|
|
* @option
|
|
* @type {number}
|
|
* @default 0
|
|
*/
|
|
scrollTopOffset: 0,
|
|
/**
|
|
* Scroll animation duration
|
|
* @option
|
|
* @type {number}
|
|
* @default 500
|
|
*/
|
|
animationDuration: 500,
|
|
/**
|
|
* Scroll animation easing. Can be `'swing'` or `'linear'`.
|
|
* @option
|
|
* @type {string}
|
|
* @see {@link https://api.jquery.com/animate|JQuery animate}
|
|
* @default 'swing'
|
|
*/
|
|
animationEasing: 'swing'
|
|
// holdOpen: false
|
|
};
|
|
|
|
|
|
|
|
/***/ }),
|
|
/* 15 */
|
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return DropdownMenu; });
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery__ = __webpack_require__(0);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_jquery__);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__foundation_util_keyboard__ = __webpack_require__(4);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__foundation_util_nest__ = __webpack_require__(5);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__foundation_util_box__ = __webpack_require__(6);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__foundation_util_core__ = __webpack_require__(1);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__foundation_plugin__ = __webpack_require__(2);
|
|
|
|
|
|
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
|
|
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
|
|
|
|
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
* DropdownMenu module.
|
|
* @module foundation.dropdown-menu
|
|
* @requires foundation.util.keyboard
|
|
* @requires foundation.util.box
|
|
* @requires foundation.util.nest
|
|
*/
|
|
|
|
var DropdownMenu = function (_Plugin) {
|
|
_inherits(DropdownMenu, _Plugin);
|
|
|
|
function DropdownMenu() {
|
|
_classCallCheck(this, DropdownMenu);
|
|
|
|
return _possibleConstructorReturn(this, (DropdownMenu.__proto__ || Object.getPrototypeOf(DropdownMenu)).apply(this, arguments));
|
|
}
|
|
|
|
_createClass(DropdownMenu, [{
|
|
key: '_setup',
|
|
|
|
/**
|
|
* Creates a new instance of DropdownMenu.
|
|
* @class
|
|
* @name DropdownMenu
|
|
* @fires DropdownMenu#init
|
|
* @param {jQuery} element - jQuery object to make into a dropdown menu.
|
|
* @param {Object} options - Overrides to the default plugin settings.
|
|
*/
|
|
value: function _setup(element, options) {
|
|
this.$element = element;
|
|
this.options = __WEBPACK_IMPORTED_MODULE_0_jquery___default.a.extend({}, DropdownMenu.defaults, this.$element.data(), options);
|
|
this.className = 'DropdownMenu'; // ie9 back compat
|
|
|
|
this._init();
|
|
|
|
__WEBPACK_IMPORTED_MODULE_1__foundation_util_keyboard__["a" /* Keyboard */].register('DropdownMenu', {
|
|
'ENTER': 'open',
|
|
'SPACE': 'open',
|
|
'ARROW_RIGHT': 'next',
|
|
'ARROW_UP': 'up',
|
|
'ARROW_DOWN': 'down',
|
|
'ARROW_LEFT': 'previous',
|
|
'ESCAPE': 'close'
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Initializes the plugin, and calls _prepareMenu
|
|
* @private
|
|
* @function
|
|
*/
|
|
|
|
}, {
|
|
key: '_init',
|
|
value: function _init() {
|
|
__WEBPACK_IMPORTED_MODULE_2__foundation_util_nest__["a" /* Nest */].Feather(this.$element, 'dropdown');
|
|
|
|
var subs = this.$element.find('li.is-dropdown-submenu-parent');
|
|
this.$element.children('.is-dropdown-submenu-parent').children('.is-dropdown-submenu').addClass('first-sub');
|
|
|
|
this.$menuItems = this.$element.find('[role="menuitem"]');
|
|
this.$tabs = this.$element.children('[role="menuitem"]');
|
|
this.$tabs.find('ul.is-dropdown-submenu').addClass(this.options.verticalClass);
|
|
|
|
if (this.options.alignment === 'auto') {
|
|
if (this.$element.hasClass(this.options.rightClass) || __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__foundation_util_core__["c" /* rtl */])() || this.$element.parents('.top-bar-right').is('*')) {
|
|
this.options.alignment = 'right';
|
|
subs.addClass('opens-left');
|
|
} else {
|
|
this.options.alignment = 'left';
|
|
subs.addClass('opens-right');
|
|
}
|
|
} else {
|
|
if (this.options.alignment === 'right') {
|
|
subs.addClass('opens-left');
|
|
} else {
|
|
subs.addClass('opens-right');
|
|
}
|
|
}
|
|
this.changed = false;
|
|
this._events();
|
|
}
|
|
}, {
|
|
key: '_isVertical',
|
|
value: function _isVertical() {
|
|
return this.$tabs.css('display') === 'block' || this.$element.css('flex-direction') === 'column';
|
|
}
|
|
}, {
|
|
key: '_isRtl',
|
|
value: function _isRtl() {
|
|
return this.$element.hasClass('align-right') || __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__foundation_util_core__["c" /* rtl */])() && !this.$element.hasClass('align-left');
|
|
}
|
|
|
|
/**
|
|
* Adds event listeners to elements within the menu
|
|
* @private
|
|
* @function
|
|
*/
|
|
|
|
}, {
|
|
key: '_events',
|
|
value: function _events() {
|
|
var _this = this,
|
|
hasTouch = 'ontouchstart' in window || typeof window.ontouchstart !== 'undefined',
|
|
parClass = 'is-dropdown-submenu-parent';
|
|
|
|
// used for onClick and in the keyboard handlers
|
|
var handleClickFn = function (e) {
|
|
var $elem = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(e.target).parentsUntil('ul', '.' + parClass),
|
|
hasSub = $elem.hasClass(parClass),
|
|
hasClicked = $elem.attr('data-is-click') === 'true',
|
|
$sub = $elem.children('.is-dropdown-submenu');
|
|
|
|
if (hasSub) {
|
|
if (hasClicked) {
|
|
if (!_this.options.closeOnClick || !_this.options.clickOpen && !hasTouch || _this.options.forceFollow && hasTouch) {
|
|
return;
|
|
} else {
|
|
e.stopImmediatePropagation();
|
|
e.preventDefault();
|
|
_this._hide($elem);
|
|
}
|
|
} else {
|
|
e.preventDefault();
|
|
e.stopImmediatePropagation();
|
|
_this._show($sub);
|
|
$elem.add($elem.parentsUntil(_this.$element, '.' + parClass)).attr('data-is-click', true);
|
|
}
|
|
}
|
|
};
|
|
|
|
if (this.options.clickOpen || hasTouch) {
|
|
this.$menuItems.on('click.zf.dropdownmenu touchstart.zf.dropdownmenu', handleClickFn);
|
|
}
|
|
|
|
// Handle Leaf element Clicks
|
|
if (_this.options.closeOnClickInside) {
|
|
this.$menuItems.on('click.zf.dropdownmenu', function (e) {
|
|
var $elem = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(this),
|
|
hasSub = $elem.hasClass(parClass);
|
|
if (!hasSub) {
|
|
_this._hide();
|
|
}
|
|
});
|
|
}
|
|
|
|
if (!this.options.disableHover) {
|
|
this.$menuItems.on('mouseenter.zf.dropdownmenu', function (e) {
|
|
var $elem = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(this),
|
|
hasSub = $elem.hasClass(parClass);
|
|
|
|
if (hasSub) {
|
|
clearTimeout($elem.data('_delay'));
|
|
$elem.data('_delay', setTimeout(function () {
|
|
_this._show($elem.children('.is-dropdown-submenu'));
|
|
}, _this.options.hoverDelay));
|
|
}
|
|
}).on('mouseleave.zf.dropdownmenu', function (e) {
|
|
var $elem = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(this),
|
|
hasSub = $elem.hasClass(parClass);
|
|
if (hasSub && _this.options.autoclose) {
|
|
if ($elem.attr('data-is-click') === 'true' && _this.options.clickOpen) {
|
|
return false;
|
|
}
|
|
|
|
clearTimeout($elem.data('_delay'));
|
|
$elem.data('_delay', setTimeout(function () {
|
|
_this._hide($elem);
|
|
}, _this.options.closingTime));
|
|
}
|
|
});
|
|
}
|
|
this.$menuItems.on('keydown.zf.dropdownmenu', function (e) {
|
|
var $element = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(e.target).parentsUntil('ul', '[role="menuitem"]'),
|
|
isTab = _this.$tabs.index($element) > -1,
|
|
$elements = isTab ? _this.$tabs : $element.siblings('li').add($element),
|
|
$prevElement,
|
|
$nextElement;
|
|
|
|
$elements.each(function (i) {
|
|
if (__WEBPACK_IMPORTED_MODULE_0_jquery___default()(this).is($element)) {
|
|
$prevElement = $elements.eq(i - 1);
|
|
$nextElement = $elements.eq(i + 1);
|
|
return;
|
|
}
|
|
});
|
|
|
|
var nextSibling = function () {
|
|
$nextElement.children('a:first').focus();
|
|
e.preventDefault();
|
|
},
|
|
prevSibling = function () {
|
|
$prevElement.children('a:first').focus();
|
|
e.preventDefault();
|
|
},
|
|
openSub = function () {
|
|
var $sub = $element.children('ul.is-dropdown-submenu');
|
|
if ($sub.length) {
|
|
_this._show($sub);
|
|
$element.find('li > a:first').focus();
|
|
e.preventDefault();
|
|
} else {
|
|
return;
|
|
}
|
|
},
|
|
closeSub = function () {
|
|
//if ($element.is(':first-child')) {
|
|
var close = $element.parent('ul').parent('li');
|
|
close.children('a:first').focus();
|
|
_this._hide(close);
|
|
e.preventDefault();
|
|
//}
|
|
};
|
|
var functions = {
|
|
open: openSub,
|
|
close: function () {
|
|
_this._hide(_this.$element);
|
|
_this.$menuItems.eq(0).children('a').focus(); // focus to first element
|
|
e.preventDefault();
|
|
},
|
|
handled: function () {
|
|
e.stopImmediatePropagation();
|
|
}
|
|
};
|
|
|
|
if (isTab) {
|
|
if (_this._isVertical()) {
|
|
// vertical menu
|
|
if (_this._isRtl()) {
|
|
// right aligned
|
|
__WEBPACK_IMPORTED_MODULE_0_jquery___default.a.extend(functions, {
|
|
down: nextSibling,
|
|
up: prevSibling,
|
|
next: closeSub,
|
|
previous: openSub
|
|
});
|
|
} else {
|
|
// left aligned
|
|
__WEBPACK_IMPORTED_MODULE_0_jquery___default.a.extend(functions, {
|
|
down: nextSibling,
|
|
up: prevSibling,
|
|
next: openSub,
|
|
previous: closeSub
|
|
});
|
|
}
|
|
} else {
|
|
// horizontal menu
|
|
if (_this._isRtl()) {
|
|
// right aligned
|
|
__WEBPACK_IMPORTED_MODULE_0_jquery___default.a.extend(functions, {
|
|
next: prevSibling,
|
|
previous: nextSibling,
|
|
down: openSub,
|
|
up: closeSub
|
|
});
|
|
} else {
|
|
// left aligned
|
|
__WEBPACK_IMPORTED_MODULE_0_jquery___default.a.extend(functions, {
|
|
next: nextSibling,
|
|
previous: prevSibling,
|
|
down: openSub,
|
|
up: closeSub
|
|
});
|
|
}
|
|
}
|
|
} else {
|
|
// not tabs -> one sub
|
|
if (_this._isRtl()) {
|
|
// right aligned
|
|
__WEBPACK_IMPORTED_MODULE_0_jquery___default.a.extend(functions, {
|
|
next: closeSub,
|
|
previous: openSub,
|
|
down: nextSibling,
|
|
up: prevSibling
|
|
});
|
|
} else {
|
|
// left aligned
|
|
__WEBPACK_IMPORTED_MODULE_0_jquery___default.a.extend(functions, {
|
|
next: openSub,
|
|
previous: closeSub,
|
|
down: nextSibling,
|
|
up: prevSibling
|
|
});
|
|
}
|
|
}
|
|
__WEBPACK_IMPORTED_MODULE_1__foundation_util_keyboard__["a" /* Keyboard */].handleKey(e, 'DropdownMenu', functions);
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Adds an event handler to the body to close any dropdowns on a click.
|
|
* @function
|
|
* @private
|
|
*/
|
|
|
|
}, {
|
|
key: '_addBodyHandler',
|
|
value: function _addBodyHandler() {
|
|
var $body = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(document.body),
|
|
_this = this;
|
|
$body.off('mouseup.zf.dropdownmenu touchend.zf.dropdownmenu').on('mouseup.zf.dropdownmenu touchend.zf.dropdownmenu', function (e) {
|
|
var $link = _this.$element.find(e.target);
|
|
if ($link.length) {
|
|
return;
|
|
}
|
|
|
|
_this._hide();
|
|
$body.off('mouseup.zf.dropdownmenu touchend.zf.dropdownmenu');
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Opens a dropdown pane, and checks for collisions first.
|
|
* @param {jQuery} $sub - ul element that is a submenu to show
|
|
* @function
|
|
* @private
|
|
* @fires DropdownMenu#show
|
|
*/
|
|
|
|
}, {
|
|
key: '_show',
|
|
value: function _show($sub) {
|
|
var idx = this.$tabs.index(this.$tabs.filter(function (i, el) {
|
|
return __WEBPACK_IMPORTED_MODULE_0_jquery___default()(el).find($sub).length > 0;
|
|
}));
|
|
var $sibs = $sub.parent('li.is-dropdown-submenu-parent').siblings('li.is-dropdown-submenu-parent');
|
|
this._hide($sibs, idx);
|
|
$sub.css('visibility', 'hidden').addClass('js-dropdown-active').parent('li.is-dropdown-submenu-parent').addClass('is-active');
|
|
var clear = __WEBPACK_IMPORTED_MODULE_3__foundation_util_box__["a" /* Box */].ImNotTouchingYou($sub, null, true);
|
|
if (!clear) {
|
|
var oldClass = this.options.alignment === 'left' ? '-right' : '-left',
|
|
$parentLi = $sub.parent('.is-dropdown-submenu-parent');
|
|
$parentLi.removeClass('opens' + oldClass).addClass('opens-' + this.options.alignment);
|
|
clear = __WEBPACK_IMPORTED_MODULE_3__foundation_util_box__["a" /* Box */].ImNotTouchingYou($sub, null, true);
|
|
if (!clear) {
|
|
$parentLi.removeClass('opens-' + this.options.alignment).addClass('opens-inner');
|
|
}
|
|
this.changed = true;
|
|
}
|
|
$sub.css('visibility', '');
|
|
if (this.options.closeOnClick) {
|
|
this._addBodyHandler();
|
|
}
|
|
/**
|
|
* Fires when the new dropdown pane is visible.
|
|
* @event DropdownMenu#show
|
|
*/
|
|
this.$element.trigger('show.zf.dropdownmenu', [$sub]);
|
|
}
|
|
|
|
/**
|
|
* Hides a single, currently open dropdown pane, if passed a parameter, otherwise, hides everything.
|
|
* @function
|
|
* @param {jQuery} $elem - element with a submenu to hide
|
|
* @param {Number} idx - index of the $tabs collection to hide
|
|
* @private
|
|
*/
|
|
|
|
}, {
|
|
key: '_hide',
|
|
value: function _hide($elem, idx) {
|
|
var $toClose;
|
|
if ($elem && $elem.length) {
|
|
$toClose = $elem;
|
|
} else if (idx !== undefined) {
|
|
$toClose = this.$tabs.not(function (i, el) {
|
|
return i === idx;
|
|
});
|
|
} else {
|
|
$toClose = this.$element;
|
|
}
|
|
var somethingToClose = $toClose.hasClass('is-active') || $toClose.find('.is-active').length > 0;
|
|
|
|
if (somethingToClose) {
|
|
$toClose.find('li.is-active').add($toClose).attr({
|
|
'data-is-click': false
|
|
}).removeClass('is-active');
|
|
|
|
$toClose.find('ul.js-dropdown-active').removeClass('js-dropdown-active');
|
|
|
|
if (this.changed || $toClose.find('opens-inner').length) {
|
|
var oldClass = this.options.alignment === 'left' ? 'right' : 'left';
|
|
$toClose.find('li.is-dropdown-submenu-parent').add($toClose).removeClass('opens-inner opens-' + this.options.alignment).addClass('opens-' + oldClass);
|
|
this.changed = false;
|
|
}
|
|
/**
|
|
* Fires when the open menus are closed.
|
|
* @event DropdownMenu#hide
|
|
*/
|
|
this.$element.trigger('hide.zf.dropdownmenu', [$toClose]);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Destroys the plugin.
|
|
* @function
|
|
*/
|
|
|
|
}, {
|
|
key: '_destroy',
|
|
value: function _destroy() {
|
|
this.$menuItems.off('.zf.dropdownmenu').removeAttr('data-is-click').removeClass('is-right-arrow is-left-arrow is-down-arrow opens-right opens-left opens-inner');
|
|
__WEBPACK_IMPORTED_MODULE_0_jquery___default()(document.body).off('.zf.dropdownmenu');
|
|
__WEBPACK_IMPORTED_MODULE_2__foundation_util_nest__["a" /* Nest */].Burn(this.$element, 'dropdown');
|
|
}
|
|
}]);
|
|
|
|
return DropdownMenu;
|
|
}(__WEBPACK_IMPORTED_MODULE_5__foundation_plugin__["a" /* Plugin */]);
|
|
|
|
/**
|
|
* Default settings for plugin
|
|
*/
|
|
|
|
|
|
DropdownMenu.defaults = {
|
|
/**
|
|
* Disallows hover events from opening submenus
|
|
* @option
|
|
* @type {boolean}
|
|
* @default false
|
|
*/
|
|
disableHover: false,
|
|
/**
|
|
* Allow a submenu to automatically close on a mouseleave event, if not clicked open.
|
|
* @option
|
|
* @type {boolean}
|
|
* @default true
|
|
*/
|
|
autoclose: true,
|
|
/**
|
|
* Amount of time to delay opening a submenu on hover event.
|
|
* @option
|
|
* @type {number}
|
|
* @default 50
|
|
*/
|
|
hoverDelay: 50,
|
|
/**
|
|
* Allow a submenu to open/remain open on parent click event. Allows cursor to move away from menu.
|
|
* @option
|
|
* @type {boolean}
|
|
* @default false
|
|
*/
|
|
clickOpen: false,
|
|
/**
|
|
* Amount of time to delay closing a submenu on a mouseleave event.
|
|
* @option
|
|
* @type {number}
|
|
* @default 500
|
|
*/
|
|
|
|
closingTime: 500,
|
|
/**
|
|
* Position of the menu relative to what direction the submenus should open. Handled by JS. Can be `'auto'`, `'left'` or `'right'`.
|
|
* @option
|
|
* @type {string}
|
|
* @default 'auto'
|
|
*/
|
|
alignment: 'auto',
|
|
/**
|
|
* Allow clicks on the body to close any open submenus.
|
|
* @option
|
|
* @type {boolean}
|
|
* @default true
|
|
*/
|
|
closeOnClick: true,
|
|
/**
|
|
* Allow clicks on leaf anchor links to close any open submenus.
|
|
* @option
|
|
* @type {boolean}
|
|
* @default true
|
|
*/
|
|
closeOnClickInside: true,
|
|
/**
|
|
* Class applied to vertical oriented menus, Foundation default is `vertical`. Update this if using your own class.
|
|
* @option
|
|
* @type {string}
|
|
* @default 'vertical'
|
|
*/
|
|
verticalClass: 'vertical',
|
|
/**
|
|
* Class applied to right-side oriented menus, Foundation default is `align-right`. Update this if using your own class.
|
|
* @option
|
|
* @type {string}
|
|
* @default 'align-right'
|
|
*/
|
|
rightClass: 'align-right',
|
|
/**
|
|
* Boolean to force overide the clicking of links to perform default action, on second touch event for mobile.
|
|
* @option
|
|
* @type {boolean}
|
|
* @default true
|
|
*/
|
|
forceFollow: true
|
|
};
|
|
|
|
|
|
|
|
/***/ }),
|
|
/* 16 */
|
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery__ = __webpack_require__(0);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_jquery__);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__home_deployer_sites_node_foundation_customizer_node_foundation_customizer_foundation_sites_js_foundation_core__ = __webpack_require__(8);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__home_deployer_sites_node_foundation_customizer_node_foundation_customizer_foundation_sites_js_foundation_util_mediaQuery__ = __webpack_require__(3);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__home_deployer_sites_node_foundation_customizer_node_foundation_customizer_foundation_sites_js_foundation_util_triggers__ = __webpack_require__(12);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__home_deployer_sites_node_foundation_customizer_node_foundation_customizer_foundation_sites_js_foundation_responsiveMenu__ = __webpack_require__(10);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__home_deployer_sites_node_foundation_customizer_node_foundation_customizer_foundation_sites_js_foundation_interchange__ = __webpack_require__(9);
|
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__home_deployer_sites_node_foundation_customizer_node_foundation_customizer_foundation_sites_js_foundation_responsiveToggle__ = __webpack_require__(11);
|
|
|
|
|
|
__WEBPACK_IMPORTED_MODULE_1__home_deployer_sites_node_foundation_customizer_node_foundation_customizer_foundation_sites_js_foundation_core__["a" /* Foundation */].addToJquery(__WEBPACK_IMPORTED_MODULE_0_jquery___default.a);
|
|
|
|
__WEBPACK_IMPORTED_MODULE_1__home_deployer_sites_node_foundation_customizer_node_foundation_customizer_foundation_sites_js_foundation_core__["a" /* Foundation */].MediaQuery = __WEBPACK_IMPORTED_MODULE_2__home_deployer_sites_node_foundation_customizer_node_foundation_customizer_foundation_sites_js_foundation_util_mediaQuery__["a" /* MediaQuery */];
|
|
|
|
__WEBPACK_IMPORTED_MODULE_3__home_deployer_sites_node_foundation_customizer_node_foundation_customizer_foundation_sites_js_foundation_util_triggers__["a" /* Triggers */].init(__WEBPACK_IMPORTED_MODULE_0_jquery___default.a, __WEBPACK_IMPORTED_MODULE_1__home_deployer_sites_node_foundation_customizer_node_foundation_customizer_foundation_sites_js_foundation_core__["a" /* Foundation */]);
|
|
|
|
__WEBPACK_IMPORTED_MODULE_1__home_deployer_sites_node_foundation_customizer_node_foundation_customizer_foundation_sites_js_foundation_core__["a" /* Foundation */].plugin(__WEBPACK_IMPORTED_MODULE_4__home_deployer_sites_node_foundation_customizer_node_foundation_customizer_foundation_sites_js_foundation_responsiveMenu__["a" /* ResponsiveMenu */], 'ResponsiveMenu');
|
|
|
|
__WEBPACK_IMPORTED_MODULE_1__home_deployer_sites_node_foundation_customizer_node_foundation_customizer_foundation_sites_js_foundation_core__["a" /* Foundation */].plugin(__WEBPACK_IMPORTED_MODULE_5__home_deployer_sites_node_foundation_customizer_node_foundation_customizer_foundation_sites_js_foundation_interchange__["a" /* Interchange */], 'Interchange');
|
|
|
|
__WEBPACK_IMPORTED_MODULE_1__home_deployer_sites_node_foundation_customizer_node_foundation_customizer_foundation_sites_js_foundation_core__["a" /* Foundation */].plugin(__WEBPACK_IMPORTED_MODULE_6__home_deployer_sites_node_foundation_customizer_node_foundation_customizer_foundation_sites_js_foundation_responsiveToggle__["a" /* ResponsiveToggle */], 'ResponsiveToggle');
|
|
|
|
/***/ })
|
|
/******/ ]); |