UNPKG

30.4 kBJavaScriptView Raw
1(function webpackUniversalModuleDefinition(root, factory) {
2 if(typeof exports === 'object' && typeof module === 'object')
3 module.exports = factory(require("./foundation.core"), require("./foundation.util.imageLoader"), require("./foundation.util.keyboard"), require("jquery"));
4 else if(typeof define === 'function' && define.amd)
5 define(["./foundation.core", "./foundation.util.imageLoader", "./foundation.util.keyboard", "jquery"], factory);
6 else if(typeof exports === 'object')
7 exports["foundation.tabs"] = factory(require("./foundation.core"), require("./foundation.util.imageLoader"), require("./foundation.util.keyboard"), require("jquery"));
8 else
9 root["__FOUNDATION_EXTERNAL__"] = root["__FOUNDATION_EXTERNAL__"] || {}, root["__FOUNDATION_EXTERNAL__"]["foundation.tabs"] = factory(root["__FOUNDATION_EXTERNAL__"]["foundation.core"], root["__FOUNDATION_EXTERNAL__"]["foundation.util.imageLoader"], root["__FOUNDATION_EXTERNAL__"]["foundation.util.keyboard"], root["jQuery"]);
10})(window, function(__WEBPACK_EXTERNAL_MODULE__foundation_core__, __WEBPACK_EXTERNAL_MODULE__foundation_util_imageLoader__, __WEBPACK_EXTERNAL_MODULE__foundation_util_keyboard__, __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 = 18);
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.util.imageLoader":
111/*!****************************************************************************************************************************************************************************************************************!*\
112 !*** external {"root":["__FOUNDATION_EXTERNAL__","foundation.util.imageLoader"],"amd":"./foundation.util.imageLoader","commonjs":"./foundation.util.imageLoader","commonjs2":"./foundation.util.imageLoader"} ***!
113 \****************************************************************************************************************************************************************************************************************/
114/*! no static exports found */
115/***/ (function(module, exports) {
116
117module.exports = __WEBPACK_EXTERNAL_MODULE__foundation_util_imageLoader__;
118
119/***/ }),
120
121/***/ "./foundation.util.keyboard":
122/*!****************************************************************************************************************************************************************************************************!*\
123 !*** external {"root":["__FOUNDATION_EXTERNAL__","foundation.util.keyboard"],"amd":"./foundation.util.keyboard","commonjs":"./foundation.util.keyboard","commonjs2":"./foundation.util.keyboard"} ***!
124 \****************************************************************************************************************************************************************************************************/
125/*! no static exports found */
126/***/ (function(module, exports) {
127
128module.exports = __WEBPACK_EXTERNAL_MODULE__foundation_util_keyboard__;
129
130/***/ }),
131
132/***/ "./js/entries/plugins/foundation.tabs.js":
133/*!***********************************************!*\
134 !*** ./js/entries/plugins/foundation.tabs.js ***!
135 \***********************************************/
136/*! exports provided: Foundation, Tabs */
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_tabs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../foundation.tabs */ "./js/foundation.tabs.js");
146/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Tabs", function() { return _foundation_tabs__WEBPACK_IMPORTED_MODULE_1__["Tabs"]; });
147
148
149
150_foundation_core__WEBPACK_IMPORTED_MODULE_0__["Foundation"].plugin(_foundation_tabs__WEBPACK_IMPORTED_MODULE_1__["Tabs"], 'Tabs');
151
152
153/***/ }),
154
155/***/ "./js/foundation.tabs.js":
156/*!*******************************!*\
157 !*** ./js/foundation.tabs.js ***!
158 \*******************************/
159/*! exports provided: Tabs */
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__, "Tabs", function() { return Tabs; });
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_util_keyboard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./foundation.util.keyboard */ "./foundation.util.keyboard");
170/* harmony import */ var _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_2__);
171/* harmony import */ var _foundation_util_imageLoader__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./foundation.util.imageLoader */ "./foundation.util.imageLoader");
172/* harmony import */ var _foundation_util_imageLoader__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_foundation_util_imageLoader__WEBPACK_IMPORTED_MODULE_3__);
173
174
175function _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); }
176
177function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
178
179function _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); } }
180
181function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
182
183function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
184
185function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
186
187function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
188
189function _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); }
190
191function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
192
193
194
195
196
197
198/**
199 * Tabs module.
200 * @module foundation.tabs
201 * @requires foundation.util.keyboard
202 * @requires foundation.util.imageLoader if tabs contain images
203 */
204
205var Tabs =
206/*#__PURE__*/
207function (_Plugin) {
208 _inherits(Tabs, _Plugin);
209
210 function Tabs() {
211 _classCallCheck(this, Tabs);
212
213 return _possibleConstructorReturn(this, _getPrototypeOf(Tabs).apply(this, arguments));
214 }
215
216 _createClass(Tabs, [{
217 key: "_setup",
218
219 /**
220 * Creates a new instance of tabs.
221 * @class
222 * @name Tabs
223 * @fires Tabs#init
224 * @param {jQuery} element - jQuery object to make into tabs.
225 * @param {Object} options - Overrides to the default plugin settings.
226 */
227 value: function _setup(element, options) {
228 this.$element = element;
229 this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, Tabs.defaults, this.$element.data(), options);
230 this.className = 'Tabs'; // ie9 back compat
231
232 this._init();
233
234 _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_2__["Keyboard"].register('Tabs', {
235 'ENTER': 'open',
236 'SPACE': 'open',
237 'ARROW_RIGHT': 'next',
238 'ARROW_UP': 'previous',
239 'ARROW_DOWN': 'next',
240 'ARROW_LEFT': 'previous' // 'TAB': 'next',
241 // 'SHIFT_TAB': 'previous'
242
243 });
244 }
245 /**
246 * Initializes the tabs by showing and focusing (if autoFocus=true) the preset active tab.
247 * @private
248 */
249
250 }, {
251 key: "_init",
252 value: function _init() {
253 var _this2 = this;
254
255 var _this = this;
256
257 this._isInitializing = true;
258 this.$element.attr({
259 'role': 'tablist'
260 });
261 this.$tabTitles = this.$element.find(".".concat(this.options.linkClass));
262 this.$tabContent = jquery__WEBPACK_IMPORTED_MODULE_0___default()("[data-tabs-content=\"".concat(this.$element[0].id, "\"]"));
263 this.$tabTitles.each(function () {
264 var $elem = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this),
265 $link = $elem.find('a'),
266 isActive = $elem.hasClass("".concat(_this.options.linkActiveClass)),
267 hash = $link.attr('data-tabs-target') || $link[0].hash.slice(1),
268 linkId = $link[0].id ? $link[0].id : "".concat(hash, "-label"),
269 $tabContent = jquery__WEBPACK_IMPORTED_MODULE_0___default()("#".concat(hash));
270 $elem.attr({
271 'role': 'presentation'
272 });
273 $link.attr({
274 'role': 'tab',
275 'aria-controls': hash,
276 'aria-selected': isActive,
277 'id': linkId,
278 'tabindex': isActive ? '0' : '-1'
279 });
280 $tabContent.attr({
281 'role': 'tabpanel',
282 'aria-labelledby': linkId
283 }); // Save up the initial hash to return to it later when going back in history
284
285 if (isActive) {
286 _this._initialAnchor = "#".concat(hash);
287 }
288
289 if (!isActive) {
290 $tabContent.attr('aria-hidden', 'true');
291 }
292
293 if (isActive && _this.options.autoFocus) {
294 _this.onLoadListener = Object(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_1__["onLoad"])(jquery__WEBPACK_IMPORTED_MODULE_0___default()(window), function () {
295 jquery__WEBPACK_IMPORTED_MODULE_0___default()('html, body').animate({
296 scrollTop: $elem.offset().top
297 }, _this.options.deepLinkSmudgeDelay, function () {
298 $link.focus();
299 });
300 });
301 }
302 });
303
304 if (this.options.matchHeight) {
305 var $images = this.$tabContent.find('img');
306
307 if ($images.length) {
308 Object(_foundation_util_imageLoader__WEBPACK_IMPORTED_MODULE_3__["onImagesLoaded"])($images, this._setHeight.bind(this));
309 } else {
310 this._setHeight();
311 }
312 } // Current context-bound function to open tabs on page load or history hashchange
313
314
315 this._checkDeepLink = function () {
316 var anchor = window.location.hash;
317
318 if (!anchor.length) {
319 // If we are still initializing and there is no anchor, then there is nothing to do
320 if (_this2._isInitializing) return; // Otherwise, move to the initial anchor
321
322 if (_this2._initialAnchor) anchor = _this2._initialAnchor;
323 }
324
325 var anchorNoHash = anchor.indexOf('#') >= 0 ? anchor.slice(1) : anchor;
326 var $anchor = anchorNoHash && jquery__WEBPACK_IMPORTED_MODULE_0___default()("#".concat(anchorNoHash));
327
328 var $link = anchor && _this2.$element.find("[href$=\"".concat(anchor, "\"],[data-tabs-target=\"").concat(anchorNoHash, "\"]")).first(); // Whether the anchor element that has been found is part of this element
329
330
331 var isOwnAnchor = !!($anchor.length && $link.length);
332
333 if (isOwnAnchor) {
334 // If there is an anchor for the hash, select it
335 if ($anchor && $anchor.length && $link && $link.length) {
336 _this2.selectTab($anchor, true);
337 } // Otherwise, collapse everything
338 else {
339 _this2._collapse();
340 } // Roll up a little to show the titles
341
342
343 if (_this2.options.deepLinkSmudge) {
344 var offset = _this2.$element.offset();
345
346 jquery__WEBPACK_IMPORTED_MODULE_0___default()('html, body').animate({
347 scrollTop: offset.top
348 }, _this2.options.deepLinkSmudgeDelay);
349 }
350 /**
351 * Fires when the plugin has deeplinked at pageload
352 * @event Tabs#deeplink
353 */
354
355
356 _this2.$element.trigger('deeplink.zf.tabs', [$link, $anchor]);
357 }
358 }; //use browser to open a tab, if it exists in this tabset
359
360
361 if (this.options.deepLink) {
362 this._checkDeepLink();
363 }
364
365 this._events();
366
367 this._isInitializing = false;
368 }
369 /**
370 * Adds event handlers for items within the tabs.
371 * @private
372 */
373
374 }, {
375 key: "_events",
376 value: function _events() {
377 this._addKeyHandler();
378
379 this._addClickHandler();
380
381 this._setHeightMqHandler = null;
382
383 if (this.options.matchHeight) {
384 this._setHeightMqHandler = this._setHeight.bind(this);
385 jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).on('changed.zf.mediaquery', this._setHeightMqHandler);
386 }
387
388 if (this.options.deepLink) {
389 jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).on('hashchange', this._checkDeepLink);
390 }
391 }
392 /**
393 * Adds click handlers for items within the tabs.
394 * @private
395 */
396
397 }, {
398 key: "_addClickHandler",
399 value: function _addClickHandler() {
400 var _this = this;
401
402 this.$element.off('click.zf.tabs').on('click.zf.tabs', ".".concat(this.options.linkClass), function (e) {
403 e.preventDefault();
404
405 _this._handleTabChange(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this));
406 });
407 }
408 /**
409 * Adds keyboard event handlers for items within the tabs.
410 * @private
411 */
412
413 }, {
414 key: "_addKeyHandler",
415 value: function _addKeyHandler() {
416 var _this = this;
417
418 this.$tabTitles.off('keydown.zf.tabs').on('keydown.zf.tabs', function (e) {
419 if (e.which === 9) return;
420 var $element = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this),
421 $elements = $element.parent('ul').children('li'),
422 $prevElement,
423 $nextElement;
424 $elements.each(function (i) {
425 if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).is($element)) {
426 if (_this.options.wrapOnKeys) {
427 $prevElement = i === 0 ? $elements.last() : $elements.eq(i - 1);
428 $nextElement = i === $elements.length - 1 ? $elements.first() : $elements.eq(i + 1);
429 } else {
430 $prevElement = $elements.eq(Math.max(0, i - 1));
431 $nextElement = $elements.eq(Math.min(i + 1, $elements.length - 1));
432 }
433
434 return;
435 }
436 }); // handle keyboard event with keyboard util
437
438 _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_2__["Keyboard"].handleKey(e, 'Tabs', {
439 open: function open() {
440 $element.find('[role="tab"]').focus();
441
442 _this._handleTabChange($element);
443 },
444 previous: function previous() {
445 $prevElement.find('[role="tab"]').focus();
446
447 _this._handleTabChange($prevElement);
448 },
449 next: function next() {
450 $nextElement.find('[role="tab"]').focus();
451
452 _this._handleTabChange($nextElement);
453 },
454 handled: function handled() {
455 e.preventDefault();
456 }
457 });
458 });
459 }
460 /**
461 * Opens the tab `$targetContent` defined by `$target`. Collapses active tab.
462 * @param {jQuery} $target - Tab to open.
463 * @param {boolean} historyHandled - browser has already handled a history update
464 * @fires Tabs#change
465 * @function
466 */
467
468 }, {
469 key: "_handleTabChange",
470 value: function _handleTabChange($target, historyHandled) {
471 // With `activeCollapse`, if the target is the active Tab, collapse it.
472 if ($target.hasClass("".concat(this.options.linkActiveClass))) {
473 if (this.options.activeCollapse) {
474 this._collapse();
475 }
476
477 return;
478 }
479
480 var $oldTab = this.$element.find(".".concat(this.options.linkClass, ".").concat(this.options.linkActiveClass)),
481 $tabLink = $target.find('[role="tab"]'),
482 target = $tabLink.attr('data-tabs-target'),
483 anchor = target && target.length ? "#".concat(target) : $tabLink[0].hash,
484 $targetContent = this.$tabContent.find(anchor); //close old tab
485
486 this._collapseTab($oldTab); //open new tab
487
488
489 this._openTab($target); //either replace or update browser history
490
491
492 if (this.options.deepLink && !historyHandled) {
493 if (this.options.updateHistory) {
494 history.pushState({}, '', anchor);
495 } else {
496 history.replaceState({}, '', anchor);
497 }
498 }
499 /**
500 * Fires when the plugin has successfully changed tabs.
501 * @event Tabs#change
502 */
503
504
505 this.$element.trigger('change.zf.tabs', [$target, $targetContent]); //fire to children a mutation event
506
507 $targetContent.find("[data-mutate]").trigger("mutateme.zf.trigger");
508 }
509 /**
510 * Opens the tab `$targetContent` defined by `$target`.
511 * @param {jQuery} $target - Tab to open.
512 * @function
513 */
514
515 }, {
516 key: "_openTab",
517 value: function _openTab($target) {
518 var $tabLink = $target.find('[role="tab"]'),
519 hash = $tabLink.attr('data-tabs-target') || $tabLink[0].hash.slice(1),
520 $targetContent = this.$tabContent.find("#".concat(hash));
521 $target.addClass("".concat(this.options.linkActiveClass));
522 $tabLink.attr({
523 'aria-selected': 'true',
524 'tabindex': '0'
525 });
526 $targetContent.addClass("".concat(this.options.panelActiveClass)).removeAttr('aria-hidden');
527 }
528 /**
529 * Collapses `$targetContent` defined by `$target`.
530 * @param {jQuery} $target - Tab to collapse.
531 * @function
532 */
533
534 }, {
535 key: "_collapseTab",
536 value: function _collapseTab($target) {
537 var $target_anchor = $target.removeClass("".concat(this.options.linkActiveClass)).find('[role="tab"]').attr({
538 'aria-selected': 'false',
539 'tabindex': -1
540 });
541 jquery__WEBPACK_IMPORTED_MODULE_0___default()("#".concat($target_anchor.attr('aria-controls'))).removeClass("".concat(this.options.panelActiveClass)).attr({
542 'aria-hidden': 'true'
543 });
544 }
545 /**
546 * Collapses the active Tab.
547 * @fires Tabs#collapse
548 * @function
549 */
550
551 }, {
552 key: "_collapse",
553 value: function _collapse() {
554 var $activeTab = this.$element.find(".".concat(this.options.linkClass, ".").concat(this.options.linkActiveClass));
555
556 if ($activeTab.length) {
557 this._collapseTab($activeTab);
558 /**
559 * Fires when the plugin has successfully collapsed tabs.
560 * @event Tabs#collapse
561 */
562
563
564 this.$element.trigger('collapse.zf.tabs', [$activeTab]);
565 }
566 }
567 /**
568 * Public method for selecting a content pane to display.
569 * @param {jQuery | String} elem - jQuery object or string of the id of the pane to display.
570 * @param {boolean} historyHandled - browser has already handled a history update
571 * @function
572 */
573
574 }, {
575 key: "selectTab",
576 value: function selectTab(elem, historyHandled) {
577 var idStr, hashIdStr;
578
579 if (_typeof(elem) === 'object') {
580 idStr = elem[0].id;
581 } else {
582 idStr = elem;
583 }
584
585 if (idStr.indexOf('#') < 0) {
586 hashIdStr = "#".concat(idStr);
587 } else {
588 hashIdStr = idStr;
589 idStr = idStr.slice(1);
590 }
591
592 var $target = this.$tabTitles.has("[href$=\"".concat(hashIdStr, "\"],[data-tabs-target=\"").concat(idStr, "\"]")).first();
593
594 this._handleTabChange($target, historyHandled);
595 }
596 }, {
597 key: "_setHeight",
598
599 /**
600 * Sets the height of each panel to the height of the tallest panel.
601 * If enabled in options, gets called on media query change.
602 * If loading content via external source, can be called directly or with _reflow.
603 * If enabled with `data-match-height="true"`, tabs sets to equal height
604 * @function
605 * @private
606 */
607 value: function _setHeight() {
608 var max = 0,
609 _this = this; // Lock down the `this` value for the root tabs object
610
611
612 this.$tabContent.find(".".concat(this.options.panelClass)).css('height', '').each(function () {
613 var panel = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this),
614 isActive = panel.hasClass("".concat(_this.options.panelActiveClass)); // get the options from the parent instead of trying to get them from the child
615
616 if (!isActive) {
617 panel.css({
618 'visibility': 'hidden',
619 'display': 'block'
620 });
621 }
622
623 var temp = this.getBoundingClientRect().height;
624
625 if (!isActive) {
626 panel.css({
627 'visibility': '',
628 'display': ''
629 });
630 }
631
632 max = temp > max ? temp : max;
633 }).css('height', "".concat(max, "px"));
634 }
635 /**
636 * Destroys an instance of tabs.
637 * @fires Tabs#destroyed
638 */
639
640 }, {
641 key: "_destroy",
642 value: function _destroy() {
643 this.$element.find(".".concat(this.options.linkClass)).off('.zf.tabs').hide().end().find(".".concat(this.options.panelClass)).hide();
644
645 if (this.options.matchHeight) {
646 if (this._setHeightMqHandler != null) {
647 jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off('changed.zf.mediaquery', this._setHeightMqHandler);
648 }
649 }
650
651 if (this.options.deepLink) {
652 jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off('hashchange', this._checkDeepLink);
653 }
654
655 if (this.onLoadListener) {
656 jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off(this.onLoadListener);
657 }
658 }
659 }]);
660
661 return Tabs;
662}(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_1__["Plugin"]);
663
664Tabs.defaults = {
665 /**
666 * Link the location hash to the active pane.
667 * Set the location hash when the active pane changes, and open the corresponding pane when the location changes.
668 * @option
669 * @type {boolean}
670 * @default false
671 */
672 deepLink: false,
673
674 /**
675 * If `deepLink` is enabled, adjust the deep link scroll to make sure the top of the tab panel is visible
676 * @option
677 * @type {boolean}
678 * @default false
679 */
680 deepLinkSmudge: false,
681
682 /**
683 * If `deepLinkSmudge` is enabled, animation time (ms) for the deep link adjustment
684 * @option
685 * @type {number}
686 * @default 300
687 */
688 deepLinkSmudgeDelay: 300,
689
690 /**
691 * If `deepLink` is enabled, update the browser history with the open tab
692 * @option
693 * @type {boolean}
694 * @default false
695 */
696 updateHistory: false,
697
698 /**
699 * Allows the window to scroll to content of active pane on load.
700 * Not recommended if more than one tab panel per page.
701 * @option
702 * @type {boolean}
703 * @default false
704 */
705 autoFocus: false,
706
707 /**
708 * Allows keyboard input to 'wrap' around the tab links.
709 * @option
710 * @type {boolean}
711 * @default true
712 */
713 wrapOnKeys: true,
714
715 /**
716 * Allows the tab content panes to match heights if set to true.
717 * @option
718 * @type {boolean}
719 * @default false
720 */
721 matchHeight: false,
722
723 /**
724 * Allows active tabs to collapse when clicked.
725 * @option
726 * @type {boolean}
727 * @default false
728 */
729 activeCollapse: false,
730
731 /**
732 * Class applied to `li`'s in tab link list.
733 * @option
734 * @type {string}
735 * @default 'tabs-title'
736 */
737 linkClass: 'tabs-title',
738
739 /**
740 * Class applied to the active `li` in tab link list.
741 * @option
742 * @type {string}
743 * @default 'is-active'
744 */
745 linkActiveClass: 'is-active',
746
747 /**
748 * Class applied to the content containers.
749 * @option
750 * @type {string}
751 * @default 'tabs-panel'
752 */
753 panelClass: 'tabs-panel',
754
755 /**
756 * Class applied to the active content container.
757 * @option
758 * @type {string}
759 * @default 'is-active'
760 */
761 panelActiveClass: 'is-active'
762};
763
764
765/***/ }),
766
767/***/ 18:
768/*!*****************************************************!*\
769 !*** multi ./js/entries/plugins/foundation.tabs.js ***!
770 \*****************************************************/
771/*! no static exports found */
772/***/ (function(module, exports, __webpack_require__) {
773
774module.exports = __webpack_require__(/*! /Users/joeworkman/Development/foundation-sites/js/entries/plugins/foundation.tabs.js */"./js/entries/plugins/foundation.tabs.js");
775
776
777/***/ }),
778
779/***/ "jquery":
780/*!********************************************************************************************!*\
781 !*** external {"root":["jQuery"],"amd":"jquery","commonjs":"jquery","commonjs2":"jquery"} ***!
782 \********************************************************************************************/
783/*! no static exports found */
784/***/ (function(module, exports) {
785
786module.exports = __WEBPACK_EXTERNAL_MODULE_jquery__;
787
788/***/ })
789
790/******/ });
791});
792//# sourceMappingURL=foundation.tabs.js.map
\No newline at end of file