foundation6-jekyll-base 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +2 -0
  4. data/_includes/footer.html +1 -0
  5. data/_includes/head.html +16 -0
  6. data/_includes/header.html +1 -0
  7. data/_includes/javascripts.html +4 -0
  8. data/_layouts/default.html +18 -0
  9. data/_layouts/home.html +26 -0
  10. data/_layouts/page.html +15 -0
  11. data/_layouts/post.html +25 -0
  12. data/_sass/_vendor/normalize-scss/sass/_normalize.scss +3 -0
  13. data/_sass/_vendor/normalize-scss/sass/normalize/_import-now.scss +11 -0
  14. data/_sass/_vendor/normalize-scss/sass/normalize/_normalize-mixin.scss +676 -0
  15. data/_sass/_vendor/normalize-scss/sass/normalize/_variables.scss +36 -0
  16. data/_sass/_vendor/normalize-scss/sass/normalize/_vertical-rhythm.scss +61 -0
  17. data/_sass/_vendor/sassy-lists/stylesheets/functions/_purge.scss +38 -0
  18. data/_sass/_vendor/sassy-lists/stylesheets/functions/_remove.scss +31 -0
  19. data/_sass/_vendor/sassy-lists/stylesheets/functions/_replace.scss +46 -0
  20. data/_sass/_vendor/sassy-lists/stylesheets/functions/_to-list.scss +27 -0
  21. data/_sass/_vendor/sassy-lists/stylesheets/helpers/_missing-dependencies.scss +25 -0
  22. data/_sass/_vendor/sassy-lists/stylesheets/helpers/_true.scss +13 -0
  23. data/_sass/foundation/_global.scss +219 -0
  24. data/_sass/foundation/components/_accordion-menu.scss +36 -0
  25. data/_sass/foundation/components/_accordion.scss +150 -0
  26. data/_sass/foundation/components/_badge.scss +63 -0
  27. data/_sass/foundation/components/_breadcrumbs.scss +97 -0
  28. data/_sass/foundation/components/_button-group.scss +249 -0
  29. data/_sass/foundation/components/_button.scss +303 -0
  30. data/_sass/foundation/components/_callout.scss +106 -0
  31. data/_sass/foundation/components/_card.scss +121 -0
  32. data/_sass/foundation/components/_close-button.scss +102 -0
  33. data/_sass/foundation/components/_drilldown.scss +93 -0
  34. data/_sass/foundation/components/_dropdown-menu.scss +226 -0
  35. data/_sass/foundation/components/_dropdown.scss +72 -0
  36. data/_sass/foundation/components/_flex-video.scss +1 -0
  37. data/_sass/foundation/components/_flex.scss +28 -0
  38. data/_sass/foundation/components/_float.scss +27 -0
  39. data/_sass/foundation/components/_label.scss +64 -0
  40. data/_sass/foundation/components/_media-object.scss +114 -0
  41. data/_sass/foundation/components/_menu-icon.scss +9 -0
  42. data/_sass/foundation/components/_menu.scss +371 -0
  43. data/_sass/foundation/components/_off-canvas.scss +329 -0
  44. data/_sass/foundation/components/_orbit.scss +196 -0
  45. data/_sass/foundation/components/_pagination.scss +193 -0
  46. data/_sass/foundation/components/_progress-bar.scss +64 -0
  47. data/_sass/foundation/components/_responsive-embed.scss +67 -0
  48. data/_sass/foundation/components/_reveal.scss +178 -0
  49. data/_sass/foundation/components/_slider.scss +138 -0
  50. data/_sass/foundation/components/_sticky.scss +38 -0
  51. data/_sass/foundation/components/_switch.scss +247 -0
  52. data/_sass/foundation/components/_table.scss +329 -0
  53. data/_sass/foundation/components/_tabs.scss +196 -0
  54. data/_sass/foundation/components/_thumbnail.scss +67 -0
  55. data/_sass/foundation/components/_title-bar.scss +84 -0
  56. data/_sass/foundation/components/_tooltip.scss +107 -0
  57. data/_sass/foundation/components/_top-bar.scss +173 -0
  58. data/_sass/foundation/components/_visibility.scss +132 -0
  59. data/_sass/foundation/forms/_checkbox.scss +41 -0
  60. data/_sass/foundation/forms/_error.scss +88 -0
  61. data/_sass/foundation/forms/_fieldset.scss +54 -0
  62. data/_sass/foundation/forms/_forms.scss +34 -0
  63. data/_sass/foundation/forms/_help-text.scss +30 -0
  64. data/_sass/foundation/forms/_input-group.scss +135 -0
  65. data/_sass/foundation/forms/_label.scss +50 -0
  66. data/_sass/foundation/forms/_meter.scss +110 -0
  67. data/_sass/foundation/forms/_progress.scss +94 -0
  68. data/_sass/foundation/forms/_range.scss +149 -0
  69. data/_sass/foundation/forms/_select.scss +85 -0
  70. data/_sass/foundation/forms/_text.scss +170 -0
  71. data/_sass/foundation/foundation.scss +118 -0
  72. data/_sass/foundation/grid/_classes.scss +176 -0
  73. data/_sass/foundation/grid/_column.scss +112 -0
  74. data/_sass/foundation/grid/_flex-grid.scss +307 -0
  75. data/_sass/foundation/grid/_grid.scss +44 -0
  76. data/_sass/foundation/grid/_gutter.scss +82 -0
  77. data/_sass/foundation/grid/_layout.scss +76 -0
  78. data/_sass/foundation/grid/_position.scss +76 -0
  79. data/_sass/foundation/grid/_row.scss +99 -0
  80. data/_sass/foundation/grid/_size.scss +24 -0
  81. data/_sass/foundation/settings/_settings.scss +621 -0
  82. data/_sass/foundation/typography/_alignment.scss +22 -0
  83. data/_sass/foundation/typography/_base.scss +509 -0
  84. data/_sass/foundation/typography/_helpers.scss +78 -0
  85. data/_sass/foundation/typography/_print.scss +81 -0
  86. data/_sass/foundation/typography/_typography.scss +26 -0
  87. data/_sass/foundation/util/_breakpoint.scss +281 -0
  88. data/_sass/foundation/util/_color.scss +126 -0
  89. data/_sass/foundation/util/_direction.scss +31 -0
  90. data/_sass/foundation/util/_flex.scss +85 -0
  91. data/_sass/foundation/util/_math.scss +72 -0
  92. data/_sass/foundation/util/_mixins.scss +276 -0
  93. data/_sass/foundation/util/_selector.scss +41 -0
  94. data/_sass/foundation/util/_unit.scss +152 -0
  95. data/_sass/foundation/util/_util.scss +13 -0
  96. data/_sass/foundation/util/_value.scss +140 -0
  97. data/assets/js/app.js +1 -0
  98. data/assets/js/vendor/foundation/foundation.d.ts +496 -0
  99. data/assets/js/vendor/foundation/foundation.js +10207 -0
  100. data/assets/js/vendor/foundation/foundation.min.js +4 -0
  101. data/assets/js/vendor/foundation/plugins/foundation.abide.js +637 -0
  102. data/assets/js/vendor/foundation/plugins/foundation.abide.min.js +1 -0
  103. data/assets/js/vendor/foundation/plugins/foundation.accordion.js +252 -0
  104. data/assets/js/vendor/foundation/plugins/foundation.accordion.min.js +1 -0
  105. data/assets/js/vendor/foundation/plugins/foundation.accordionMenu.js +318 -0
  106. data/assets/js/vendor/foundation/plugins/foundation.accordionMenu.min.js +1 -0
  107. data/assets/js/vendor/foundation/plugins/foundation.core.js +386 -0
  108. data/assets/js/vendor/foundation/plugins/foundation.core.min.js +1 -0
  109. data/assets/js/vendor/foundation/plugins/foundation.drilldown.js +565 -0
  110. data/assets/js/vendor/foundation/plugins/foundation.drilldown.min.js +1 -0
  111. data/assets/js/vendor/foundation/plugins/foundation.dropdown.js +465 -0
  112. data/assets/js/vendor/foundation/plugins/foundation.dropdown.min.js +1 -0
  113. data/assets/js/vendor/foundation/plugins/foundation.dropdownMenu.js +486 -0
  114. data/assets/js/vendor/foundation/plugins/foundation.dropdownMenu.min.js +1 -0
  115. data/assets/js/vendor/foundation/plugins/foundation.equalizer.js +374 -0
  116. data/assets/js/vendor/foundation/plugins/foundation.equalizer.min.js +1 -0
  117. data/assets/js/vendor/foundation/plugins/foundation.interchange.js +233 -0
  118. data/assets/js/vendor/foundation/plugins/foundation.interchange.min.js +1 -0
  119. data/assets/js/vendor/foundation/plugins/foundation.magellan.js +285 -0
  120. data/assets/js/vendor/foundation/plugins/foundation.magellan.min.js +1 -0
  121. data/assets/js/vendor/foundation/plugins/foundation.offcanvas.js +474 -0
  122. data/assets/js/vendor/foundation/plugins/foundation.offcanvas.min.js +1 -0
  123. data/assets/js/vendor/foundation/plugins/foundation.orbit.js +566 -0
  124. data/assets/js/vendor/foundation/plugins/foundation.orbit.min.js +1 -0
  125. data/assets/js/vendor/foundation/plugins/foundation.responsiveMenu.js +169 -0
  126. data/assets/js/vendor/foundation/plugins/foundation.responsiveMenu.min.js +1 -0
  127. data/assets/js/vendor/foundation/plugins/foundation.responsiveToggle.js +177 -0
  128. data/assets/js/vendor/foundation/plugins/foundation.responsiveToggle.min.js +1 -0
  129. data/assets/js/vendor/foundation/plugins/foundation.reveal.js +633 -0
  130. data/assets/js/vendor/foundation/plugins/foundation.reveal.min.js +1 -0
  131. data/assets/js/vendor/foundation/plugins/foundation.slider.js +762 -0
  132. data/assets/js/vendor/foundation/plugins/foundation.slider.min.js +1 -0
  133. data/assets/js/vendor/foundation/plugins/foundation.sticky.js +518 -0
  134. data/assets/js/vendor/foundation/plugins/foundation.sticky.min.js +1 -0
  135. data/assets/js/vendor/foundation/plugins/foundation.tabs.js +512 -0
  136. data/assets/js/vendor/foundation/plugins/foundation.tabs.min.js +1 -0
  137. data/assets/js/vendor/foundation/plugins/foundation.toggler.js +169 -0
  138. data/assets/js/vendor/foundation/plugins/foundation.toggler.min.js +1 -0
  139. data/assets/js/vendor/foundation/plugins/foundation.tooltip.js +492 -0
  140. data/assets/js/vendor/foundation/plugins/foundation.tooltip.min.js +1 -0
  141. data/assets/js/vendor/foundation/plugins/foundation.util.box.js +196 -0
  142. data/assets/js/vendor/foundation/plugins/foundation.util.box.min.js +1 -0
  143. data/assets/js/vendor/foundation/plugins/foundation.util.keyboard.js +163 -0
  144. data/assets/js/vendor/foundation/plugins/foundation.util.keyboard.min.js +1 -0
  145. data/assets/js/vendor/foundation/plugins/foundation.util.mediaQuery.js +233 -0
  146. data/assets/js/vendor/foundation/plugins/foundation.util.mediaQuery.min.js +1 -0
  147. data/assets/js/vendor/foundation/plugins/foundation.util.motion.js +103 -0
  148. data/assets/js/vendor/foundation/plugins/foundation.util.motion.min.js +1 -0
  149. data/assets/js/vendor/foundation/plugins/foundation.util.nest.js +74 -0
  150. data/assets/js/vendor/foundation/plugins/foundation.util.nest.min.js +1 -0
  151. data/assets/js/vendor/foundation/plugins/foundation.util.timerAndImageLoader.js +90 -0
  152. data/assets/js/vendor/foundation/plugins/foundation.util.timerAndImageLoader.min.js +1 -0
  153. data/assets/js/vendor/foundation/plugins/foundation.util.touch.js +352 -0
  154. data/assets/js/vendor/foundation/plugins/foundation.util.touch.min.js +1 -0
  155. data/assets/js/vendor/foundation/plugins/foundation.util.triggers.js +261 -0
  156. data/assets/js/vendor/foundation/plugins/foundation.util.triggers.min.js +1 -0
  157. data/assets/js/vendor/foundation/plugins/foundation.zf.responsiveAccordionTabs.js +262 -0
  158. data/assets/js/vendor/foundation/plugins/foundation.zf.responsiveAccordionTabs.min.js +1 -0
  159. data/assets/main.scss +6 -0
  160. metadata +232 -0
@@ -0,0 +1 @@
1
+ "use strict";function _classCallCheck(t,i){if(!(t instanceof i))throw new TypeError("Cannot call a class as a function")}var _createClass=function(){function t(t,i){for(var e=0;e<i.length;e++){var s=i[e];s.enumerable=s.enumerable||!1,s.configurable=!0,"value"in s&&(s.writable=!0),Object.defineProperty(t,s.key,s)}}return function(i,e,s){return e&&t(i.prototype,e),s&&t(i,s),i}}();!function(t){function i(t){return parseInt(window.getComputedStyle(document.body,null).fontSize,10)*t}var e=function(){function e(i,s){_classCallCheck(this,e),this.$element=i,this.options=t.extend({},e.defaults,this.$element.data(),s),this._init(),Foundation.registerPlugin(this,"Sticky")}return _createClass(e,[{key:"_init",value:function(){var i=this.$element.parent("[data-sticky-container]"),e=this.$element[0].id||Foundation.GetYoDigits(6,"sticky"),s=this;i.length||(this.wasWrapped=!0),this.$container=i.length?i:t(this.options.container).wrapInner(this.$element),this.$container.addClass(this.options.containerClass),this.$element.addClass(this.options.stickyClass).attr({"data-resize":e}),this.scrollCount=this.options.checkEvery,this.isStuck=!1,t(window).one("load.zf.sticky",function(){s.containerHeight="none"==s.$element.css("display")?0:s.$element[0].getBoundingClientRect().height,s.$container.css("height",s.containerHeight),s.elemHeight=s.containerHeight,""!==s.options.anchor?s.$anchor=t("#"+s.options.anchor):s._parsePoints(),s._setSizes(function(){var t=window.pageYOffset;s._calc(!1,t),s.isStuck||s._removeSticky(!(t>=s.topPoint))}),s._events(e.split("-").reverse().join("-"))})}},{key:"_parsePoints",value:function(){for(var i=""==this.options.topAnchor?1:this.options.topAnchor,e=""==this.options.btmAnchor?document.documentElement.scrollHeight:this.options.btmAnchor,s=[i,e],n={},o=0,c=s.length;o<c&&s[o];o++){var a;if("number"==typeof s[o])a=s[o];else{var h=s[o].split(":"),r=t("#"+h[0]);a=r.offset().top,h[1]&&"bottom"===h[1].toLowerCase()&&(a+=r[0].getBoundingClientRect().height)}n[o]=a}this.points=n}},{key:"_events",value:function(i){var e=this,s=this.scrollListener="scroll.zf."+i;this.isOn||(this.canStick&&(this.isOn=!0,t(window).off(s).on(s,function(t){0===e.scrollCount?(e.scrollCount=e.options.checkEvery,e._setSizes(function(){e._calc(!1,window.pageYOffset)})):(e.scrollCount--,e._calc(!1,window.pageYOffset))})),this.$element.off("resizeme.zf.trigger").on("resizeme.zf.trigger",function(t,n){e._setSizes(function(){e._calc(!1),e.canStick?e.isOn||e._events(i):e.isOn&&e._pauseListeners(s)})}))}},{key:"_pauseListeners",value:function(i){this.isOn=!1,t(window).off(i),this.$element.trigger("pause.zf.sticky")}},{key:"_calc",value:function(t,i){return t&&this._setSizes(),this.canStick?(i||(i=window.pageYOffset),void(i>=this.topPoint?i<=this.bottomPoint?this.isStuck||this._setSticky():this.isStuck&&this._removeSticky(!1):this.isStuck&&this._removeSticky(!0))):(this.isStuck&&this._removeSticky(!0),!1)}},{key:"_setSticky",value:function(){var t=this,i=this.options.stickTo,e="top"===i?"marginTop":"marginBottom",s="top"===i?"bottom":"top",n={};n[e]=this.options[e]+"em",n[i]=0,n[s]="auto",this.isStuck=!0,this.$element.removeClass("is-anchored is-at-"+s).addClass("is-stuck is-at-"+i).css(n).trigger("sticky.zf.stuckto:"+i),this.$element.on("transitionend webkitTransitionEnd oTransitionEnd otransitionend MSTransitionEnd",function(){t._setSizes()})}},{key:"_removeSticky",value:function(t){var i=this.options.stickTo,e="top"===i,s={},n=(this.points?this.points[1]-this.points[0]:this.anchorHeight)-this.elemHeight,o=e?"marginTop":"marginBottom",c=t?"top":"bottom";s[o]=0,s.bottom="auto",t?s.top=0:s.top=n,this.isStuck=!1,this.$element.removeClass("is-stuck is-at-"+i).addClass("is-anchored is-at-"+c).css(s).trigger("sticky.zf.unstuckfrom:"+c)}},{key:"_setSizes",value:function(t){this.canStick=Foundation.MediaQuery.is(this.options.stickyOn),this.canStick||t&&"function"==typeof t&&t();var i=this.$container[0].getBoundingClientRect().width,e=window.getComputedStyle(this.$container[0]),s=parseInt(e["padding-left"],10),n=parseInt(e["padding-right"],10);this.$anchor&&this.$anchor.length?this.anchorHeight=this.$anchor[0].getBoundingClientRect().height:this._parsePoints(),this.$element.css({"max-width":i-s-n+"px"});var o=this.$element[0].getBoundingClientRect().height||this.containerHeight;if("none"==this.$element.css("display")&&(o=0),this.containerHeight=o,this.$container.css({height:o}),this.elemHeight=o,!this.isStuck&&this.$element.hasClass("is-at-bottom")){var c=(this.points?this.points[1]-this.$container.offset().top:this.anchorHeight)-this.elemHeight;this.$element.css("top",c)}this._setBreakPoints(o,function(){t&&"function"==typeof t&&t()})}},{key:"_setBreakPoints",value:function(t,e){if(!this.canStick){if(!e||"function"!=typeof e)return!1;e()}var s=i(this.options.marginTop),n=i(this.options.marginBottom),o=this.points?this.points[0]:this.$anchor.offset().top,c=this.points?this.points[1]:o+this.anchorHeight,a=window.innerHeight;"top"===this.options.stickTo?(o-=s,c-=t+s):"bottom"===this.options.stickTo&&(o-=a-(t+n),c-=a-n),this.topPoint=o,this.bottomPoint=c,e&&"function"==typeof e&&e()}},{key:"destroy",value:function(){this._removeSticky(!0),this.$element.removeClass(this.options.stickyClass+" is-anchored is-at-top").css({height:"",top:"",bottom:"","max-width":""}).off("resizeme.zf.trigger"),this.$anchor&&this.$anchor.length&&this.$anchor.off("change.zf.sticky"),t(window).off(this.scrollListener),this.wasWrapped?this.$element.unwrap():this.$container.removeClass(this.options.containerClass).css({height:""}),Foundation.unregisterPlugin(this)}}]),e}();e.defaults={container:"<div data-sticky-container></div>",stickTo:"top",anchor:"",topAnchor:"",btmAnchor:"",marginTop:1,marginBottom:1,stickyOn:"medium",stickyClass:"sticky",containerClass:"sticky-container",checkEvery:-1},Foundation.plugin(e,"Sticky")}(jQuery);
@@ -0,0 +1,512 @@
1
+ 'use strict';
2
+
3
+ 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; }; }();
4
+
5
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
6
+
7
+ !function ($) {
8
+
9
+ /**
10
+ * Tabs module.
11
+ * @module foundation.tabs
12
+ * @requires foundation.util.keyboard
13
+ * @requires foundation.util.timerAndImageLoader if tabs contain images
14
+ */
15
+
16
+ var Tabs = function () {
17
+ /**
18
+ * Creates a new instance of tabs.
19
+ * @class
20
+ * @fires Tabs#init
21
+ * @param {jQuery} element - jQuery object to make into tabs.
22
+ * @param {Object} options - Overrides to the default plugin settings.
23
+ */
24
+ function Tabs(element, options) {
25
+ _classCallCheck(this, Tabs);
26
+
27
+ this.$element = element;
28
+ this.options = $.extend({}, Tabs.defaults, this.$element.data(), options);
29
+
30
+ this._init();
31
+ Foundation.registerPlugin(this, 'Tabs');
32
+ Foundation.Keyboard.register('Tabs', {
33
+ 'ENTER': 'open',
34
+ 'SPACE': 'open',
35
+ 'ARROW_RIGHT': 'next',
36
+ 'ARROW_UP': 'previous',
37
+ 'ARROW_DOWN': 'next',
38
+ 'ARROW_LEFT': 'previous'
39
+ // 'TAB': 'next',
40
+ // 'SHIFT_TAB': 'previous'
41
+ });
42
+ }
43
+
44
+ /**
45
+ * Initializes the tabs by showing and focusing (if autoFocus=true) the preset active tab.
46
+ * @private
47
+ */
48
+
49
+
50
+ _createClass(Tabs, [{
51
+ key: '_init',
52
+ value: function _init() {
53
+ var _this2 = this;
54
+
55
+ var _this = this;
56
+
57
+ this.$element.attr({ 'role': 'tablist' });
58
+ this.$tabTitles = this.$element.find('.' + this.options.linkClass);
59
+ this.$tabContent = $('[data-tabs-content="' + this.$element[0].id + '"]');
60
+
61
+ this.$tabTitles.each(function () {
62
+ var $elem = $(this),
63
+ $link = $elem.find('a'),
64
+ isActive = $elem.hasClass('' + _this.options.linkActiveClass),
65
+ hash = $link[0].hash.slice(1),
66
+ linkId = $link[0].id ? $link[0].id : hash + '-label',
67
+ $tabContent = $('#' + hash);
68
+
69
+ $elem.attr({ 'role': 'presentation' });
70
+
71
+ $link.attr({
72
+ 'role': 'tab',
73
+ 'aria-controls': hash,
74
+ 'aria-selected': isActive,
75
+ 'id': linkId
76
+ });
77
+
78
+ $tabContent.attr({
79
+ 'role': 'tabpanel',
80
+ 'aria-hidden': !isActive,
81
+ 'aria-labelledby': linkId
82
+ });
83
+
84
+ if (isActive && _this.options.autoFocus) {
85
+ $(window).load(function () {
86
+ $('html, body').animate({ scrollTop: $elem.offset().top }, _this.options.deepLinkSmudgeDelay, function () {
87
+ $link.focus();
88
+ });
89
+ });
90
+ }
91
+ });
92
+ if (this.options.matchHeight) {
93
+ var $images = this.$tabContent.find('img');
94
+
95
+ if ($images.length) {
96
+ Foundation.onImagesLoaded($images, this._setHeight.bind(this));
97
+ } else {
98
+ this._setHeight();
99
+ }
100
+ }
101
+
102
+ //current context-bound function to open tabs on page load or history popstate
103
+ this._checkDeepLink = function () {
104
+ var anchor = window.location.hash;
105
+ //need a hash and a relevant anchor in this tabset
106
+ if (anchor.length) {
107
+ var $link = _this2.$element.find('[href="' + anchor + '"]');
108
+ if ($link.length) {
109
+ _this2.selectTab($(anchor), true);
110
+
111
+ //roll up a little to show the titles
112
+ if (_this2.options.deepLinkSmudge) {
113
+ var offset = _this2.$element.offset();
114
+ $('html, body').animate({ scrollTop: offset.top }, _this2.options.deepLinkSmudgeDelay);
115
+ }
116
+
117
+ /**
118
+ * Fires when the zplugin has deeplinked at pageload
119
+ * @event Tabs#deeplink
120
+ */
121
+ _this2.$element.trigger('deeplink.zf.tabs', [$link, $(anchor)]);
122
+ }
123
+ }
124
+ };
125
+
126
+ //use browser to open a tab, if it exists in this tabset
127
+ if (this.options.deepLink) {
128
+ this._checkDeepLink();
129
+ }
130
+
131
+ this._events();
132
+ }
133
+
134
+ /**
135
+ * Adds event handlers for items within the tabs.
136
+ * @private
137
+ */
138
+
139
+ }, {
140
+ key: '_events',
141
+ value: function _events() {
142
+ this._addKeyHandler();
143
+ this._addClickHandler();
144
+ this._setHeightMqHandler = null;
145
+
146
+ if (this.options.matchHeight) {
147
+ this._setHeightMqHandler = this._setHeight.bind(this);
148
+
149
+ $(window).on('changed.zf.mediaquery', this._setHeightMqHandler);
150
+ }
151
+
152
+ if (this.options.deepLink) {
153
+ $(window).on('popstate', this._checkDeepLink);
154
+ }
155
+ }
156
+
157
+ /**
158
+ * Adds click handlers for items within the tabs.
159
+ * @private
160
+ */
161
+
162
+ }, {
163
+ key: '_addClickHandler',
164
+ value: function _addClickHandler() {
165
+ var _this = this;
166
+
167
+ this.$element.off('click.zf.tabs').on('click.zf.tabs', '.' + this.options.linkClass, function (e) {
168
+ e.preventDefault();
169
+ e.stopPropagation();
170
+ _this._handleTabChange($(this));
171
+ });
172
+ }
173
+
174
+ /**
175
+ * Adds keyboard event handlers for items within the tabs.
176
+ * @private
177
+ */
178
+
179
+ }, {
180
+ key: '_addKeyHandler',
181
+ value: function _addKeyHandler() {
182
+ var _this = this;
183
+
184
+ this.$tabTitles.off('keydown.zf.tabs').on('keydown.zf.tabs', function (e) {
185
+ if (e.which === 9) return;
186
+
187
+ var $element = $(this),
188
+ $elements = $element.parent('ul').children('li'),
189
+ $prevElement,
190
+ $nextElement;
191
+
192
+ $elements.each(function (i) {
193
+ if ($(this).is($element)) {
194
+ if (_this.options.wrapOnKeys) {
195
+ $prevElement = i === 0 ? $elements.last() : $elements.eq(i - 1);
196
+ $nextElement = i === $elements.length - 1 ? $elements.first() : $elements.eq(i + 1);
197
+ } else {
198
+ $prevElement = $elements.eq(Math.max(0, i - 1));
199
+ $nextElement = $elements.eq(Math.min(i + 1, $elements.length - 1));
200
+ }
201
+ return;
202
+ }
203
+ });
204
+
205
+ // handle keyboard event with keyboard util
206
+ Foundation.Keyboard.handleKey(e, 'Tabs', {
207
+ open: function () {
208
+ $element.find('[role="tab"]').focus();
209
+ _this._handleTabChange($element);
210
+ },
211
+ previous: function () {
212
+ $prevElement.find('[role="tab"]').focus();
213
+ _this._handleTabChange($prevElement);
214
+ },
215
+ next: function () {
216
+ $nextElement.find('[role="tab"]').focus();
217
+ _this._handleTabChange($nextElement);
218
+ },
219
+ handled: function () {
220
+ e.stopPropagation();
221
+ e.preventDefault();
222
+ }
223
+ });
224
+ });
225
+ }
226
+
227
+ /**
228
+ * Opens the tab `$targetContent` defined by `$target`. Collapses active tab.
229
+ * @param {jQuery} $target - Tab to open.
230
+ * @param {boolean} historyHandled - browser has already handled a history update
231
+ * @fires Tabs#change
232
+ * @function
233
+ */
234
+
235
+ }, {
236
+ key: '_handleTabChange',
237
+ value: function _handleTabChange($target, historyHandled) {
238
+
239
+ /**
240
+ * Check for active class on target. Collapse if exists.
241
+ */
242
+ if ($target.hasClass('' + this.options.linkActiveClass)) {
243
+ if (this.options.activeCollapse) {
244
+ this._collapseTab($target);
245
+
246
+ /**
247
+ * Fires when the zplugin has successfully collapsed tabs.
248
+ * @event Tabs#collapse
249
+ */
250
+ this.$element.trigger('collapse.zf.tabs', [$target]);
251
+ }
252
+ return;
253
+ }
254
+
255
+ var $oldTab = this.$element.find('.' + this.options.linkClass + '.' + this.options.linkActiveClass),
256
+ $tabLink = $target.find('[role="tab"]'),
257
+ hash = $tabLink[0].hash,
258
+ $targetContent = this.$tabContent.find(hash);
259
+
260
+ //close old tab
261
+ this._collapseTab($oldTab);
262
+
263
+ //open new tab
264
+ this._openTab($target);
265
+
266
+ //either replace or update browser history
267
+ if (this.options.deepLink && !historyHandled) {
268
+ var anchor = $target.find('a').attr('href');
269
+
270
+ if (this.options.updateHistory) {
271
+ history.pushState({}, '', anchor);
272
+ } else {
273
+ history.replaceState({}, '', anchor);
274
+ }
275
+ }
276
+
277
+ /**
278
+ * Fires when the plugin has successfully changed tabs.
279
+ * @event Tabs#change
280
+ */
281
+ this.$element.trigger('change.zf.tabs', [$target, $targetContent]);
282
+
283
+ //fire to children a mutation event
284
+ $targetContent.find("[data-mutate]").trigger("mutateme.zf.trigger");
285
+ }
286
+
287
+ /**
288
+ * Opens the tab `$targetContent` defined by `$target`.
289
+ * @param {jQuery} $target - Tab to Open.
290
+ * @function
291
+ */
292
+
293
+ }, {
294
+ key: '_openTab',
295
+ value: function _openTab($target) {
296
+ var $tabLink = $target.find('[role="tab"]'),
297
+ hash = $tabLink[0].hash,
298
+ $targetContent = this.$tabContent.find(hash);
299
+
300
+ $target.addClass('' + this.options.linkActiveClass);
301
+
302
+ $tabLink.attr({ 'aria-selected': 'true' });
303
+
304
+ $targetContent.addClass('' + this.options.panelActiveClass).attr({ 'aria-hidden': 'false' });
305
+ }
306
+
307
+ /**
308
+ * Collapses `$targetContent` defined by `$target`.
309
+ * @param {jQuery} $target - Tab to Open.
310
+ * @function
311
+ */
312
+
313
+ }, {
314
+ key: '_collapseTab',
315
+ value: function _collapseTab($target) {
316
+ var $target_anchor = $target.removeClass('' + this.options.linkActiveClass).find('[role="tab"]').attr({ 'aria-selected': 'false' });
317
+
318
+ $('#' + $target_anchor.attr('aria-controls')).removeClass('' + this.options.panelActiveClass).attr({ 'aria-hidden': 'true' });
319
+ }
320
+
321
+ /**
322
+ * Public method for selecting a content pane to display.
323
+ * @param {jQuery | String} elem - jQuery object or string of the id of the pane to display.
324
+ * @param {boolean} historyHandled - browser has already handled a history update
325
+ * @function
326
+ */
327
+
328
+ }, {
329
+ key: 'selectTab',
330
+ value: function selectTab(elem, historyHandled) {
331
+ var idStr;
332
+
333
+ if (typeof elem === 'object') {
334
+ idStr = elem[0].id;
335
+ } else {
336
+ idStr = elem;
337
+ }
338
+
339
+ if (idStr.indexOf('#') < 0) {
340
+ idStr = '#' + idStr;
341
+ }
342
+
343
+ var $target = this.$tabTitles.find('[href="' + idStr + '"]').parent('.' + this.options.linkClass);
344
+
345
+ this._handleTabChange($target, historyHandled);
346
+ }
347
+ }, {
348
+ key: '_setHeight',
349
+
350
+ /**
351
+ * Sets the height of each panel to the height of the tallest panel.
352
+ * If enabled in options, gets called on media query change.
353
+ * If loading content via external source, can be called directly or with _reflow.
354
+ * If enabled with `data-match-height="true"`, tabs sets to equal height
355
+ * @function
356
+ * @private
357
+ */
358
+ value: function _setHeight() {
359
+ var max = 0,
360
+ _this = this; // Lock down the `this` value for the root tabs object
361
+
362
+ this.$tabContent.find('.' + this.options.panelClass).css('height', '').each(function () {
363
+
364
+ var panel = $(this),
365
+ isActive = panel.hasClass('' + _this.options.panelActiveClass); // get the options from the parent instead of trying to get them from the child
366
+
367
+ if (!isActive) {
368
+ panel.css({ 'visibility': 'hidden', 'display': 'block' });
369
+ }
370
+
371
+ var temp = this.getBoundingClientRect().height;
372
+
373
+ if (!isActive) {
374
+ panel.css({
375
+ 'visibility': '',
376
+ 'display': ''
377
+ });
378
+ }
379
+
380
+ max = temp > max ? temp : max;
381
+ }).css('height', max + 'px');
382
+ }
383
+
384
+ /**
385
+ * Destroys an instance of an tabs.
386
+ * @fires Tabs#destroyed
387
+ */
388
+
389
+ }, {
390
+ key: 'destroy',
391
+ value: function destroy() {
392
+ this.$element.find('.' + this.options.linkClass).off('.zf.tabs').hide().end().find('.' + this.options.panelClass).hide();
393
+
394
+ if (this.options.matchHeight) {
395
+ if (this._setHeightMqHandler != null) {
396
+ $(window).off('changed.zf.mediaquery', this._setHeightMqHandler);
397
+ }
398
+ }
399
+
400
+ if (this.options.deepLink) {
401
+ $(window).off('popstate', this._checkDeepLink);
402
+ }
403
+
404
+ Foundation.unregisterPlugin(this);
405
+ }
406
+ }]);
407
+
408
+ return Tabs;
409
+ }();
410
+
411
+ Tabs.defaults = {
412
+ /**
413
+ * Allows the window to scroll to content of pane specified by hash anchor
414
+ * @option
415
+ * @type {boolean}
416
+ * @default false
417
+ */
418
+ deepLink: false,
419
+
420
+ /**
421
+ * Adjust the deep link scroll to make sure the top of the tab panel is visible
422
+ * @option
423
+ * @type {boolean}
424
+ * @default false
425
+ */
426
+ deepLinkSmudge: false,
427
+
428
+ /**
429
+ * Animation time (ms) for the deep link adjustment
430
+ * @option
431
+ * @type {number}
432
+ * @default 300
433
+ */
434
+ deepLinkSmudgeDelay: 300,
435
+
436
+ /**
437
+ * Update the browser history with the open tab
438
+ * @option
439
+ * @type {boolean}
440
+ * @default false
441
+ */
442
+ updateHistory: false,
443
+
444
+ /**
445
+ * Allows the window to scroll to content of active pane on load if set to true.
446
+ * Not recommended if more than one tab panel per page.
447
+ * @option
448
+ * @type {boolean}
449
+ * @default false
450
+ */
451
+ autoFocus: false,
452
+
453
+ /**
454
+ * Allows keyboard input to 'wrap' around the tab links.
455
+ * @option
456
+ * @type {boolean}
457
+ * @default true
458
+ */
459
+ wrapOnKeys: true,
460
+
461
+ /**
462
+ * Allows the tab content panes to match heights if set to true.
463
+ * @option
464
+ * @type {boolean}
465
+ * @default false
466
+ */
467
+ matchHeight: false,
468
+
469
+ /**
470
+ * Allows active tabs to collapse when clicked.
471
+ * @option
472
+ * @type {boolean}
473
+ * @default false
474
+ */
475
+ activeCollapse: false,
476
+
477
+ /**
478
+ * Class applied to `li`'s in tab link list.
479
+ * @option
480
+ * @type {string}
481
+ * @default 'tabs-title'
482
+ */
483
+ linkClass: 'tabs-title',
484
+
485
+ /**
486
+ * Class applied to the active `li` in tab link list.
487
+ * @option
488
+ * @type {string}
489
+ * @default 'is-active'
490
+ */
491
+ linkActiveClass: 'is-active',
492
+
493
+ /**
494
+ * Class applied to the content containers.
495
+ * @option
496
+ * @type {string}
497
+ * @default 'tabs-panel'
498
+ */
499
+ panelClass: 'tabs-panel',
500
+
501
+ /**
502
+ * Class applied to the active content container.
503
+ * @option
504
+ * @type {string}
505
+ * @default 'is-active'
506
+ */
507
+ panelActiveClass: 'is-active'
508
+ };
509
+
510
+ // Window exports
511
+ Foundation.plugin(Tabs, 'Tabs');
512
+ }(jQuery);