UNPKG

35.2 kBJavaScriptView Raw
1(function webpackUniversalModuleDefinition(root, factory) {
2 if(typeof exports === 'object' && typeof module === 'object')
3 module.exports = factory(require("./foundation.core"), require("./foundation.smoothScroll"), require("./foundation.util.motion"), require("jquery"));
4 else if(typeof define === 'function' && define.amd)
5 define(["./foundation.core", "./foundation.smoothScroll", "./foundation.util.motion", "jquery"], factory);
6 else if(typeof exports === 'object')
7 exports["foundation.magellan"] = factory(require("./foundation.core"), require("./foundation.smoothScroll"), require("./foundation.util.motion"), require("jquery"));
8 else
9 root["__FOUNDATION_EXTERNAL__"] = root["__FOUNDATION_EXTERNAL__"] || {}, root["__FOUNDATION_EXTERNAL__"]["foundation.magellan"] = factory(root["__FOUNDATION_EXTERNAL__"]["foundation.core"], root["__FOUNDATION_EXTERNAL__"]["foundation.smoothScroll"], root["__FOUNDATION_EXTERNAL__"]["foundation.util.motion"], root["jQuery"]);
10})(window, function(__WEBPACK_EXTERNAL_MODULE__foundation_core__, __WEBPACK_EXTERNAL_MODULE__foundation_smoothScroll__, __WEBPACK_EXTERNAL_MODULE__foundation_util_motion__, __WEBPACK_EXTERNAL_MODULE_jquery__) {
11return /******/ (function(modules) { // webpackBootstrap
12/******/ // The module cache
13/******/ var installedModules = {};
14/******/
15/******/ // The require function
16/******/ function __webpack_require__(moduleId) {
17/******/
18/******/ // Check if module is in cache
19/******/ if(installedModules[moduleId]) {
20/******/ return installedModules[moduleId].exports;
21/******/ }
22/******/ // Create a new module (and put it into the cache)
23/******/ var module = installedModules[moduleId] = {
24/******/ i: moduleId,
25/******/ l: false,
26/******/ exports: {}
27/******/ };
28/******/
29/******/ // Execute the module function
30/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
31/******/
32/******/ // Flag the module as loaded
33/******/ module.l = true;
34/******/
35/******/ // Return the exports of the module
36/******/ return module.exports;
37/******/ }
38/******/
39/******/
40/******/ // expose the modules object (__webpack_modules__)
41/******/ __webpack_require__.m = modules;
42/******/
43/******/ // expose the module cache
44/******/ __webpack_require__.c = installedModules;
45/******/
46/******/ // define getter function for harmony exports
47/******/ __webpack_require__.d = function(exports, name, getter) {
48/******/ if(!__webpack_require__.o(exports, name)) {
49/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
50/******/ }
51/******/ };
52/******/
53/******/ // define __esModule on exports
54/******/ __webpack_require__.r = function(exports) {
55/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
56/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
57/******/ }
58/******/ Object.defineProperty(exports, '__esModule', { value: true });
59/******/ };
60/******/
61/******/ // create a fake namespace object
62/******/ // mode & 1: value is a module id, require it
63/******/ // mode & 2: merge all properties of value into the ns
64/******/ // mode & 4: return value when already ns object
65/******/ // mode & 8|1: behave like require
66/******/ __webpack_require__.t = function(value, mode) {
67/******/ if(mode & 1) value = __webpack_require__(value);
68/******/ if(mode & 8) return value;
69/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
70/******/ var ns = Object.create(null);
71/******/ __webpack_require__.r(ns);
72/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
73/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
74/******/ return ns;
75/******/ };
76/******/
77/******/ // getDefaultExport function for compatibility with non-harmony modules
78/******/ __webpack_require__.n = function(module) {
79/******/ var getter = module && module.__esModule ?
80/******/ function getDefault() { return module['default']; } :
81/******/ function getModuleExports() { return module; };
82/******/ __webpack_require__.d(getter, 'a', getter);
83/******/ return getter;
84/******/ };
85/******/
86/******/ // Object.prototype.hasOwnProperty.call
87/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
88/******/
89/******/ // __webpack_public_path__
90/******/ __webpack_require__.p = "";
91/******/
92/******/
93/******/ // Load entry module and return exports
94/******/ return __webpack_require__(__webpack_require__.s = 8);
95/******/ })
96/************************************************************************/
97/******/ ({
98
99/***/ "./foundation.core":
100/*!****************************************************************************************************************************************************************!*\
101 !*** external {"root":["__FOUNDATION_EXTERNAL__","foundation.core"],"amd":"./foundation.core","commonjs":"./foundation.core","commonjs2":"./foundation.core"} ***!
102 \****************************************************************************************************************************************************************/
103/*! no static exports found */
104/***/ (function(module, exports) {
105
106module.exports = __WEBPACK_EXTERNAL_MODULE__foundation_core__;
107
108/***/ }),
109
110/***/ "./foundation.smoothScroll":
111/*!************************************************************************************************************************************************************************************************!*\
112 !*** external {"root":["__FOUNDATION_EXTERNAL__","foundation.smoothScroll"],"amd":"./foundation.smoothScroll","commonjs":"./foundation.smoothScroll","commonjs2":"./foundation.smoothScroll"} ***!
113 \************************************************************************************************************************************************************************************************/
114/*! no static exports found */
115/***/ (function(module, exports) {
116
117module.exports = __WEBPACK_EXTERNAL_MODULE__foundation_smoothScroll__;
118
119/***/ }),
120
121/***/ "./foundation.util.motion":
122/*!********************************************************************************************************************************************************************************************!*\
123 !*** external {"root":["__FOUNDATION_EXTERNAL__","foundation.util.motion"],"amd":"./foundation.util.motion","commonjs":"./foundation.util.motion","commonjs2":"./foundation.util.motion"} ***!
124 \********************************************************************************************************************************************************************************************/
125/*! no static exports found */
126/***/ (function(module, exports) {
127
128module.exports = __WEBPACK_EXTERNAL_MODULE__foundation_util_motion__;
129
130/***/ }),
131
132/***/ "./js/entries/plugins/foundation.magellan.js":
133/*!***************************************************!*\
134 !*** ./js/entries/plugins/foundation.magellan.js ***!
135 \***************************************************/
136/*! exports provided: Foundation, Magellan */
137/***/ (function(module, __webpack_exports__, __webpack_require__) {
138
139"use strict";
140__webpack_require__.r(__webpack_exports__);
141/* harmony import */ var _foundation_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./foundation.core */ "./foundation.core");
142/* harmony import */ var _foundation_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_foundation_core__WEBPACK_IMPORTED_MODULE_0__);
143/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Foundation", function() { return _foundation_core__WEBPACK_IMPORTED_MODULE_0__["Foundation"]; });
144
145/* harmony import */ var _foundation_magellan__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../foundation.magellan */ "./js/foundation.magellan.js");
146/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Magellan", function() { return _foundation_magellan__WEBPACK_IMPORTED_MODULE_1__["Magellan"]; });
147
148
149
150_foundation_core__WEBPACK_IMPORTED_MODULE_0__["Foundation"].plugin(_foundation_magellan__WEBPACK_IMPORTED_MODULE_1__["Magellan"], 'Magellan');
151
152
153/***/ }),
154
155/***/ "./js/foundation.magellan.js":
156/*!***********************************!*\
157 !*** ./js/foundation.magellan.js ***!
158 \***********************************/
159/*! exports provided: Magellan */
160/***/ (function(module, __webpack_exports__, __webpack_require__) {
161
162"use strict";
163__webpack_require__.r(__webpack_exports__);
164/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Magellan", function() { return Magellan; });
165/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery");
166/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);
167/* harmony import */ var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./foundation.core.plugin */ "./foundation.core");
168/* harmony import */ var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_1__);
169/* harmony import */ var _foundation_smoothScroll__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./foundation.smoothScroll */ "./foundation.smoothScroll");
170/* harmony import */ var _foundation_smoothScroll__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_foundation_smoothScroll__WEBPACK_IMPORTED_MODULE_2__);
171/* harmony import */ var _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./foundation.util.triggers */ "./js/foundation.util.triggers.js");
172
173
174function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
175
176function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
177
178function _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); } }
179
180function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
181
182function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
183
184function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
185
186function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
187
188function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
189
190function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
191
192
193
194
195
196
197/**
198 * Magellan module.
199 * @module foundation.magellan
200 * @requires foundation.smoothScroll
201 * @requires foundation.util.triggers
202 */
203
204var Magellan =
205/*#__PURE__*/
206function (_Plugin) {
207 _inherits(Magellan, _Plugin);
208
209 function Magellan() {
210 _classCallCheck(this, Magellan);
211
212 return _possibleConstructorReturn(this, _getPrototypeOf(Magellan).apply(this, arguments));
213 }
214
215 _createClass(Magellan, [{
216 key: "_setup",
217
218 /**
219 * Creates a new instance of Magellan.
220 * @class
221 * @name Magellan
222 * @fires Magellan#init
223 * @param {Object} element - jQuery object to add the trigger to.
224 * @param {Object} options - Overrides to the default plugin settings.
225 */
226 value: function _setup(element, options) {
227 this.$element = element;
228 this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, Magellan.defaults, this.$element.data(), options);
229 this.className = 'Magellan'; // ie9 back compat
230 // Triggers init is idempotent, just need to make sure it is initialized
231
232 _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_3__["Triggers"].init(jquery__WEBPACK_IMPORTED_MODULE_0___default.a);
233
234 this._init();
235
236 this.calcPoints();
237 }
238 /**
239 * Initializes the Magellan plugin and calls functions to get equalizer functioning on load.
240 * @private
241 */
242
243 }, {
244 key: "_init",
245 value: function _init() {
246 var id = this.$element[0].id || Object(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_1__["GetYoDigits"])(6, 'magellan');
247
248 var _this = this;
249
250 this.$targets = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-magellan-target]');
251 this.$links = this.$element.find('a');
252 this.$element.attr({
253 'data-resize': id,
254 'data-scroll': id,
255 'id': id
256 });
257 this.$active = jquery__WEBPACK_IMPORTED_MODULE_0___default()();
258 this.scrollPos = parseInt(window.pageYOffset, 10);
259
260 this._events();
261 }
262 /**
263 * Calculates an array of pixel values that are the demarcation lines between locations on the page.
264 * Can be invoked if new elements are added or the size of a location changes.
265 * @function
266 */
267
268 }, {
269 key: "calcPoints",
270 value: function calcPoints() {
271 var _this = this,
272 body = document.body,
273 html = document.documentElement;
274
275 this.points = [];
276 this.winHeight = Math.round(Math.max(window.innerHeight, html.clientHeight));
277 this.docHeight = Math.round(Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight));
278 this.$targets.each(function () {
279 var $tar = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this),
280 pt = Math.round($tar.offset().top - _this.options.threshold);
281 $tar.targetPoint = pt;
282
283 _this.points.push(pt);
284 });
285 }
286 /**
287 * Initializes events for Magellan.
288 * @private
289 */
290
291 }, {
292 key: "_events",
293 value: function _events() {
294 var _this = this;
295
296 jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).one('load', function () {
297 if (_this.options.deepLinking) {
298 if (location.hash) {
299 _this.scrollToLoc(location.hash);
300 }
301 }
302
303 _this.calcPoints();
304
305 _this._updateActive();
306 });
307 _this.onLoadListener = Object(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_1__["onLoad"])(jquery__WEBPACK_IMPORTED_MODULE_0___default()(window), function () {
308 _this.$element.on({
309 'resizeme.zf.trigger': _this.reflow.bind(_this),
310 'scrollme.zf.trigger': _this._updateActive.bind(_this)
311 }).on('click.zf.magellan', 'a[href^="#"]', function (e) {
312 e.preventDefault();
313 var arrival = this.getAttribute('href');
314
315 _this.scrollToLoc(arrival);
316 });
317 });
318
319 this._deepLinkScroll = function (e) {
320 if (_this.options.deepLinking) {
321 _this.scrollToLoc(window.location.hash);
322 }
323 };
324
325 jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).on('hashchange', this._deepLinkScroll);
326 }
327 /**
328 * Function to scroll to a given location on the page.
329 * @param {String} loc - a properly formatted jQuery id selector. Example: '#foo'
330 * @function
331 */
332
333 }, {
334 key: "scrollToLoc",
335 value: function scrollToLoc(loc) {
336 this._inTransition = true;
337
338 var _this = this;
339
340 var options = {
341 animationEasing: this.options.animationEasing,
342 animationDuration: this.options.animationDuration,
343 threshold: this.options.threshold,
344 offset: this.options.offset
345 };
346 _foundation_smoothScroll__WEBPACK_IMPORTED_MODULE_2__["SmoothScroll"].scrollToLoc(loc, options, function () {
347 _this._inTransition = false;
348 });
349 }
350 /**
351 * Calls necessary functions to update Magellan upon DOM change
352 * @function
353 */
354
355 }, {
356 key: "reflow",
357 value: function reflow() {
358 this.calcPoints();
359
360 this._updateActive();
361 }
362 /**
363 * Updates the visibility of an active location link, and updates the url hash for the page, if deepLinking enabled.
364 * @private
365 * @function
366 * @fires Magellan#update
367 */
368
369 }, {
370 key: "_updateActive",
371 value: function _updateActive()
372 /*evt, elem, scrollPos*/
373 {
374 var _this2 = this;
375
376 if (this._inTransition) return;
377 var newScrollPos = parseInt(window.pageYOffset, 10);
378 var isScrollingUp = this.scrollPos > newScrollPos;
379 this.scrollPos = newScrollPos;
380 var activeIdx; // Before the first point: no link
381
382 if (newScrollPos < this.points[0]) {}
383 /* do nothing */
384 // At the bottom of the page: last link
385 else if (newScrollPos + this.winHeight === this.docHeight) {
386 activeIdx = this.points.length - 1;
387 } // Otherwhise, use the last visible link
388 else {
389 var visibleLinks = this.points.filter(function (p, i) {
390 return p - _this2.options.offset - (isScrollingUp ? _this2.options.threshold : 0) <= newScrollPos;
391 });
392 activeIdx = visibleLinks.length ? visibleLinks.length - 1 : 0;
393 } // Get the new active link
394
395
396 var $oldActive = this.$active;
397 var activeHash = '';
398
399 if (typeof activeIdx !== 'undefined') {
400 this.$active = this.$links.filter('[href="#' + this.$targets.eq(activeIdx).data('magellan-target') + '"]');
401 if (this.$active.length) activeHash = this.$active[0].getAttribute('href');
402 } else {
403 this.$active = jquery__WEBPACK_IMPORTED_MODULE_0___default()();
404 }
405
406 var isNewActive = !(!this.$active.length && !$oldActive.length) && !this.$active.is($oldActive);
407 var isNewHash = activeHash !== window.location.hash; // Update the active link element
408
409 if (isNewActive) {
410 $oldActive.removeClass(this.options.activeClass);
411 this.$active.addClass(this.options.activeClass);
412 } // Update the hash (it may have changed with the same active link)
413
414
415 if (this.options.deepLinking && isNewHash) {
416 if (window.history.pushState) {
417 // Set or remove the hash (see: https://stackoverflow.com/a/5298684/4317384
418 var url = activeHash ? activeHash : window.location.pathname + window.location.search;
419
420 if (this.options.updateHistory) {
421 window.history.pushState({}, '', url);
422 } else {
423 window.history.replaceState({}, '', url);
424 }
425 } else {
426 window.location.hash = activeHash;
427 }
428 }
429
430 if (isNewActive) {
431 /**
432 * Fires when magellan is finished updating to the new active element.
433 * @event Magellan#update
434 */
435 this.$element.trigger('update.zf.magellan', [this.$active]);
436 }
437 }
438 /**
439 * Destroys an instance of Magellan and resets the url of the window.
440 * @function
441 */
442
443 }, {
444 key: "_destroy",
445 value: function _destroy() {
446 this.$element.off('.zf.trigger .zf.magellan').find(".".concat(this.options.activeClass)).removeClass(this.options.activeClass);
447
448 if (this.options.deepLinking) {
449 var hash = this.$active[0].getAttribute('href');
450 window.location.hash.replace(hash, '');
451 }
452
453 jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off('hashchange', this._deepLinkScroll);
454 if (this.onLoadListener) jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off(this.onLoadListener);
455 }
456 }]);
457
458 return Magellan;
459}(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_1__["Plugin"]);
460/**
461 * Default settings for plugin
462 */
463
464
465Magellan.defaults = {
466 /**
467 * Amount of time, in ms, the animated scrolling should take between locations.
468 * @option
469 * @type {number}
470 * @default 500
471 */
472 animationDuration: 500,
473
474 /**
475 * Animation style to use when scrolling between locations. Can be `'swing'` or `'linear'`.
476 * @option
477 * @type {string}
478 * @default 'linear'
479 * @see {@link https://api.jquery.com/animate|Jquery animate}
480 */
481 animationEasing: 'linear',
482
483 /**
484 * Number of pixels to use as a marker for location changes.
485 * @option
486 * @type {number}
487 * @default 50
488 */
489 threshold: 50,
490
491 /**
492 * Class applied to the active locations link on the magellan container.
493 * @option
494 * @type {string}
495 * @default 'is-active'
496 */
497 activeClass: 'is-active',
498
499 /**
500 * Allows the script to manipulate the url of the current page, and if supported, alter the history.
501 * @option
502 * @type {boolean}
503 * @default false
504 */
505 deepLinking: false,
506
507 /**
508 * Update the browser history with the active link, if deep linking is enabled.
509 * @option
510 * @type {boolean}
511 * @default false
512 */
513 updateHistory: false,
514
515 /**
516 * Number of pixels to offset the scroll of the page on item click if using a sticky nav bar.
517 * @option
518 * @type {number}
519 * @default 0
520 */
521 offset: 0
522};
523
524
525/***/ }),
526
527/***/ "./js/foundation.util.triggers.js":
528/*!****************************************!*\
529 !*** ./js/foundation.util.triggers.js ***!
530 \****************************************/
531/*! exports provided: Triggers */
532/***/ (function(module, __webpack_exports__, __webpack_require__) {
533
534"use strict";
535__webpack_require__.r(__webpack_exports__);
536/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Triggers", function() { return Triggers; });
537/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery");
538/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);
539/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./foundation.core.utils */ "./foundation.core");
540/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__);
541/* harmony import */ var _foundation_util_motion__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./foundation.util.motion */ "./foundation.util.motion");
542/* harmony import */ var _foundation_util_motion__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_foundation_util_motion__WEBPACK_IMPORTED_MODULE_2__);
543
544
545function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
546
547
548
549
550
551var MutationObserver = function () {
552 var prefixes = ['WebKit', 'Moz', 'O', 'Ms', ''];
553
554 for (var i = 0; i < prefixes.length; i++) {
555 if ("".concat(prefixes[i], "MutationObserver") in window) {
556 return window["".concat(prefixes[i], "MutationObserver")];
557 }
558 }
559
560 return false;
561}();
562
563var triggers = function triggers(el, type) {
564 el.data(type).split(' ').forEach(function (id) {
565 jquery__WEBPACK_IMPORTED_MODULE_0___default()("#".concat(id))[type === 'close' ? 'trigger' : 'triggerHandler']("".concat(type, ".zf.trigger"), [el]);
566 });
567};
568
569var Triggers = {
570 Listeners: {
571 Basic: {},
572 Global: {}
573 },
574 Initializers: {}
575};
576Triggers.Listeners.Basic = {
577 openListener: function openListener() {
578 triggers(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this), 'open');
579 },
580 closeListener: function closeListener() {
581 var id = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).data('close');
582
583 if (id) {
584 triggers(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this), 'close');
585 } else {
586 jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).trigger('close.zf.trigger');
587 }
588 },
589 toggleListener: function toggleListener() {
590 var id = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).data('toggle');
591
592 if (id) {
593 triggers(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this), 'toggle');
594 } else {
595 jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).trigger('toggle.zf.trigger');
596 }
597 },
598 closeableListener: function closeableListener(e) {
599 var animation = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).data('closable'); // Only close the first closable element. See https://git.io/zf-7833
600
601 e.stopPropagation();
602
603 if (animation !== '') {
604 _foundation_util_motion__WEBPACK_IMPORTED_MODULE_2__["Motion"].animateOut(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this), animation, function () {
605 jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).trigger('closed.zf');
606 });
607 } else {
608 jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).fadeOut().trigger('closed.zf');
609 }
610 },
611 toggleFocusListener: function toggleFocusListener() {
612 var id = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).data('toggle-focus');
613 jquery__WEBPACK_IMPORTED_MODULE_0___default()("#".concat(id)).triggerHandler('toggle.zf.trigger', [jquery__WEBPACK_IMPORTED_MODULE_0___default()(this)]);
614 }
615}; // Elements with [data-open] will reveal a plugin that supports it when clicked.
616
617Triggers.Initializers.addOpenListener = function ($elem) {
618 $elem.off('click.zf.trigger', Triggers.Listeners.Basic.openListener);
619 $elem.on('click.zf.trigger', '[data-open]', Triggers.Listeners.Basic.openListener);
620}; // Elements with [data-close] will close a plugin that supports it when clicked.
621// If used without a value on [data-close], the event will bubble, allowing it to close a parent component.
622
623
624Triggers.Initializers.addCloseListener = function ($elem) {
625 $elem.off('click.zf.trigger', Triggers.Listeners.Basic.closeListener);
626 $elem.on('click.zf.trigger', '[data-close]', Triggers.Listeners.Basic.closeListener);
627}; // Elements with [data-toggle] will toggle a plugin that supports it when clicked.
628
629
630Triggers.Initializers.addToggleListener = function ($elem) {
631 $elem.off('click.zf.trigger', Triggers.Listeners.Basic.toggleListener);
632 $elem.on('click.zf.trigger', '[data-toggle]', Triggers.Listeners.Basic.toggleListener);
633}; // Elements with [data-closable] will respond to close.zf.trigger events.
634
635
636Triggers.Initializers.addCloseableListener = function ($elem) {
637 $elem.off('close.zf.trigger', Triggers.Listeners.Basic.closeableListener);
638 $elem.on('close.zf.trigger', '[data-closeable], [data-closable]', Triggers.Listeners.Basic.closeableListener);
639}; // Elements with [data-toggle-focus] will respond to coming in and out of focus
640
641
642Triggers.Initializers.addToggleFocusListener = function ($elem) {
643 $elem.off('focus.zf.trigger blur.zf.trigger', Triggers.Listeners.Basic.toggleFocusListener);
644 $elem.on('focus.zf.trigger blur.zf.trigger', '[data-toggle-focus]', Triggers.Listeners.Basic.toggleFocusListener);
645}; // More Global/complex listeners and triggers
646
647
648Triggers.Listeners.Global = {
649 resizeListener: function resizeListener($nodes) {
650 if (!MutationObserver) {
651 //fallback for IE 9
652 $nodes.each(function () {
653 jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).triggerHandler('resizeme.zf.trigger');
654 });
655 } //trigger all listening elements and signal a resize event
656
657
658 $nodes.attr('data-events', "resize");
659 },
660 scrollListener: function scrollListener($nodes) {
661 if (!MutationObserver) {
662 //fallback for IE 9
663 $nodes.each(function () {
664 jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).triggerHandler('scrollme.zf.trigger');
665 });
666 } //trigger all listening elements and signal a scroll event
667
668
669 $nodes.attr('data-events', "scroll");
670 },
671 closeMeListener: function closeMeListener(e, pluginId) {
672 var plugin = e.namespace.split('.')[0];
673 var plugins = jquery__WEBPACK_IMPORTED_MODULE_0___default()("[data-".concat(plugin, "]")).not("[data-yeti-box=\"".concat(pluginId, "\"]"));
674 plugins.each(function () {
675 var _this = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this);
676
677 _this.triggerHandler('close.zf.trigger', [_this]);
678 });
679 } // Global, parses whole document.
680
681};
682
683Triggers.Initializers.addClosemeListener = function (pluginName) {
684 var yetiBoxes = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-yeti-box]'),
685 plugNames = ['dropdown', 'tooltip', 'reveal'];
686
687 if (pluginName) {
688 if (typeof pluginName === 'string') {
689 plugNames.push(pluginName);
690 } else if (_typeof(pluginName) === 'object' && typeof pluginName[0] === 'string') {
691 plugNames = plugNames.concat(pluginName);
692 } else {
693 console.error('Plugin names must be strings');
694 }
695 }
696
697 if (yetiBoxes.length) {
698 var listeners = plugNames.map(function (name) {
699 return "closeme.zf.".concat(name);
700 }).join(' ');
701 jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off(listeners).on(listeners, Triggers.Listeners.Global.closeMeListener);
702 }
703};
704
705function debounceGlobalListener(debounce, trigger, listener) {
706 var timer,
707 args = Array.prototype.slice.call(arguments, 3);
708 jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off(trigger).on(trigger, function (e) {
709 if (timer) {
710 clearTimeout(timer);
711 }
712
713 timer = setTimeout(function () {
714 listener.apply(null, args);
715 }, debounce || 10); //default time to emit scroll event
716 });
717}
718
719Triggers.Initializers.addResizeListener = function (debounce) {
720 var $nodes = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-resize]');
721
722 if ($nodes.length) {
723 debounceGlobalListener(debounce, 'resize.zf.trigger', Triggers.Listeners.Global.resizeListener, $nodes);
724 }
725};
726
727Triggers.Initializers.addScrollListener = function (debounce) {
728 var $nodes = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-scroll]');
729
730 if ($nodes.length) {
731 debounceGlobalListener(debounce, 'scroll.zf.trigger', Triggers.Listeners.Global.scrollListener, $nodes);
732 }
733};
734
735Triggers.Initializers.addMutationEventsListener = function ($elem) {
736 if (!MutationObserver) {
737 return false;
738 }
739
740 var $nodes = $elem.find('[data-resize], [data-scroll], [data-mutate]'); //element callback
741
742 var listeningElementsMutation = function listeningElementsMutation(mutationRecordsList) {
743 var $target = jquery__WEBPACK_IMPORTED_MODULE_0___default()(mutationRecordsList[0].target); //trigger the event handler for the element depending on type
744
745 switch (mutationRecordsList[0].type) {
746 case "attributes":
747 if ($target.attr("data-events") === "scroll" && mutationRecordsList[0].attributeName === "data-events") {
748 $target.triggerHandler('scrollme.zf.trigger', [$target, window.pageYOffset]);
749 }
750
751 if ($target.attr("data-events") === "resize" && mutationRecordsList[0].attributeName === "data-events") {
752 $target.triggerHandler('resizeme.zf.trigger', [$target]);
753 }
754
755 if (mutationRecordsList[0].attributeName === "style") {
756 $target.closest("[data-mutate]").attr("data-events", "mutate");
757 $target.closest("[data-mutate]").triggerHandler('mutateme.zf.trigger', [$target.closest("[data-mutate]")]);
758 }
759
760 break;
761
762 case "childList":
763 $target.closest("[data-mutate]").attr("data-events", "mutate");
764 $target.closest("[data-mutate]").triggerHandler('mutateme.zf.trigger', [$target.closest("[data-mutate]")]);
765 break;
766
767 default:
768 return false;
769 //nothing
770 }
771 };
772
773 if ($nodes.length) {
774 //for each element that needs to listen for resizing, scrolling, or mutation add a single observer
775 for (var i = 0; i <= $nodes.length - 1; i++) {
776 var elementObserver = new MutationObserver(listeningElementsMutation);
777 elementObserver.observe($nodes[i], {
778 attributes: true,
779 childList: true,
780 characterData: false,
781 subtree: true,
782 attributeFilter: ["data-events", "style"]
783 });
784 }
785 }
786};
787
788Triggers.Initializers.addSimpleListeners = function () {
789 var $document = jquery__WEBPACK_IMPORTED_MODULE_0___default()(document);
790 Triggers.Initializers.addOpenListener($document);
791 Triggers.Initializers.addCloseListener($document);
792 Triggers.Initializers.addToggleListener($document);
793 Triggers.Initializers.addCloseableListener($document);
794 Triggers.Initializers.addToggleFocusListener($document);
795};
796
797Triggers.Initializers.addGlobalListeners = function () {
798 var $document = jquery__WEBPACK_IMPORTED_MODULE_0___default()(document);
799 Triggers.Initializers.addMutationEventsListener($document);
800 Triggers.Initializers.addResizeListener();
801 Triggers.Initializers.addScrollListener();
802 Triggers.Initializers.addClosemeListener();
803};
804
805Triggers.init = function ($, Foundation) {
806 Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__["onLoad"])($(window), function () {
807 if ($.triggersInitialized !== true) {
808 Triggers.Initializers.addSimpleListeners();
809 Triggers.Initializers.addGlobalListeners();
810 $.triggersInitialized = true;
811 }
812 });
813
814 if (Foundation) {
815 Foundation.Triggers = Triggers; // Legacy included to be backwards compatible for now.
816
817 Foundation.IHearYou = Triggers.Initializers.addGlobalListeners;
818 }
819};
820
821
822
823/***/ }),
824
825/***/ 8:
826/*!*********************************************************!*\
827 !*** multi ./js/entries/plugins/foundation.magellan.js ***!
828 \*********************************************************/
829/*! no static exports found */
830/***/ (function(module, exports, __webpack_require__) {
831
832module.exports = __webpack_require__(/*! /Users/joeworkman/Development/foundation-sites/js/entries/plugins/foundation.magellan.js */"./js/entries/plugins/foundation.magellan.js");
833
834
835/***/ }),
836
837/***/ "jquery":
838/*!********************************************************************************************!*\
839 !*** external {"root":["jQuery"],"amd":"jquery","commonjs":"jquery","commonjs2":"jquery"} ***!
840 \********************************************************************************************/
841/*! no static exports found */
842/***/ (function(module, exports) {
843
844module.exports = __WEBPACK_EXTERNAL_MODULE_jquery__;
845
846/***/ })
847
848/******/ });
849});
850//# sourceMappingURL=foundation.magellan.js.map
\No newline at end of file