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,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var _createClass=function(){function t(t,e){for(var o=0;o<e.length;o++){var s=e[o];s.enumerable=s.enumerable||!1,s.configurable=!0,"value"in s&&(s.writable=!0),Object.defineProperty(t,s.key,s)}}return function(e,o,s){return o&&t(e.prototype,o),s&&t(e,s),e}}();!function(t){var e=function(){function e(o,s){_classCallCheck(this,e),this.$element=o,this.options=t.extend({},e.defaults,this.$element.data(),s),this._init(),Foundation.registerPlugin(this,"Dropdown"),Foundation.Keyboard.register("Dropdown",{ENTER:"open",SPACE:"open",ESCAPE:"close"})}return _createClass(e,[{key:"_init",value:function(){var e=this.$element.attr("id");this.$anchor=t(t('[data-toggle="'+e+'"]').length?'[data-toggle="'+e+'"]':'[data-open="'+e+'"]'),this.$anchor.attr({"aria-controls":e,"data-is-focus":!1,"data-yeti-box":e,"aria-haspopup":!0,"aria-expanded":!1}),this.options.parentClass?this.$parent=this.$element.parents("."+this.options.parentClass):this.$parent=null,this.options.positionClass=this.getPositionClass(),this.counter=4,this.usedPositions=[],this.$element.attr({"aria-hidden":"true","data-yeti-box":e,"data-resize":e,"aria-labelledby":this.$anchor[0].id||Foundation.GetYoDigits(6,"dd-anchor")}),this._events()}},{key:"getPositionClass",value:function(){var t=this.$element[0].className.match(/(top|left|right|bottom)/g);t=t?t[0]:"";var e=/float-(\S+)/.exec(this.$anchor[0].className);e=e?e[1]:"";var o=e?e+" "+t:t;return o}},{key:"_reposition",value:function(t){this.usedPositions.push(t?t:"bottom"),!t&&this.usedPositions.indexOf("top")<0?this.$element.addClass("top"):"top"===t&&this.usedPositions.indexOf("bottom")<0?this.$element.removeClass(t):"left"===t&&this.usedPositions.indexOf("right")<0?this.$element.removeClass(t).addClass("right"):"right"===t&&this.usedPositions.indexOf("left")<0?this.$element.removeClass(t).addClass("left"):!t&&this.usedPositions.indexOf("top")>-1&&this.usedPositions.indexOf("left")<0?this.$element.addClass("left"):"top"===t&&this.usedPositions.indexOf("bottom")>-1&&this.usedPositions.indexOf("left")<0?this.$element.removeClass(t).addClass("left"):"left"===t&&this.usedPositions.indexOf("right")>-1&&this.usedPositions.indexOf("bottom")<0?this.$element.removeClass(t):"right"===t&&this.usedPositions.indexOf("left")>-1&&this.usedPositions.indexOf("bottom")<0?this.$element.removeClass(t):this.$element.removeClass(t),this.classChanged=!0,this.counter--}},{key:"_setPosition",value:function(){if("false"===this.$anchor.attr("aria-expanded"))return!1;var t=this.getPositionClass(),e=Foundation.Box.GetDimensions(this.$element),o=(Foundation.Box.GetDimensions(this.$anchor),"left"===t?"left":"right"===t?"left":"top"),s="top"===o?"height":"width";"height"===s?this.options.vOffset:this.options.hOffset;if(e.width>=e.windowDims.width||!this.counter&&!Foundation.Box.ImNotTouchingYou(this.$element,this.$parent)){var i=e.windowDims.width,n=0;if(this.$parent){var a=Foundation.Box.GetDimensions(this.$parent),n=a.offset.left;a.width<i&&(i=a.width)}return this.$element.offset(Foundation.Box.GetOffsets(this.$element,this.$anchor,"center bottom",this.options.vOffset,this.options.hOffset+n,!0)).css({width:i-2*this.options.hOffset,height:"auto"}),this.classChanged=!0,!1}for(this.$element.offset(Foundation.Box.GetOffsets(this.$element,this.$anchor,t,this.options.vOffset,this.options.hOffset));!Foundation.Box.ImNotTouchingYou(this.$element,this.$parent,!0)&&this.counter;)this._reposition(t),this._setPosition()}},{key:"_events",value:function(){var e=this;this.$element.on({"open.zf.trigger":this.open.bind(this),"close.zf.trigger":this.close.bind(this),"toggle.zf.trigger":this.toggle.bind(this),"resizeme.zf.trigger":this._setPosition.bind(this)}),this.options.hover&&(this.$anchor.off("mouseenter.zf.dropdown mouseleave.zf.dropdown").on("mouseenter.zf.dropdown",function(){var o=t("body").data();"undefined"!=typeof o.whatinput&&"mouse"!==o.whatinput||(clearTimeout(e.timeout),e.timeout=setTimeout(function(){e.open(),e.$anchor.data("hover",!0)},e.options.hoverDelay))}).on("mouseleave.zf.dropdown",function(){clearTimeout(e.timeout),e.timeout=setTimeout(function(){e.close(),e.$anchor.data("hover",!1)},e.options.hoverDelay)}),this.options.hoverPane&&this.$element.off("mouseenter.zf.dropdown mouseleave.zf.dropdown").on("mouseenter.zf.dropdown",function(){clearTimeout(e.timeout)}).on("mouseleave.zf.dropdown",function(){clearTimeout(e.timeout),e.timeout=setTimeout(function(){e.close(),e.$anchor.data("hover",!1)},e.options.hoverDelay)})),this.$anchor.add(this.$element).on("keydown.zf.dropdown",function(o){var s=t(this);Foundation.Keyboard.findFocusable(e.$element);Foundation.Keyboard.handleKey(o,"Dropdown",{open:function(){s.is(e.$anchor)&&(e.open(),e.$element.attr("tabindex",-1).focus(),o.preventDefault())},close:function(){e.close(),e.$anchor.focus()}})})}},{key:"_addBodyHandler",value:function(){var e=t(document.body).not(this.$element),o=this;e.off("click.zf.dropdown").on("click.zf.dropdown",function(t){o.$anchor.is(t.target)||o.$anchor.find(t.target).length||o.$element.find(t.target).length||(o.close(),e.off("click.zf.dropdown"))})}},{key:"open",value:function(){if(this.$element.trigger("closeme.zf.dropdown",this.$element.attr("id")),this.$anchor.addClass("hover").attr({"aria-expanded":!0}),this._setPosition(),this.$element.addClass("is-open").attr({"aria-hidden":!1}),this.options.autoFocus){var t=Foundation.Keyboard.findFocusable(this.$element);t.length&&t.eq(0).focus()}this.options.closeOnClick&&this._addBodyHandler(),this.options.trapFocus&&Foundation.Keyboard.trapFocus(this.$element),this.$element.trigger("show.zf.dropdown",[this.$element])}},{key:"close",value:function(){if(!this.$element.hasClass("is-open"))return!1;if(this.$element.removeClass("is-open").attr({"aria-hidden":!0}),this.$anchor.removeClass("hover").attr("aria-expanded",!1),this.classChanged){var t=this.getPositionClass();t&&this.$element.removeClass(t),this.$element.addClass(this.options.positionClass).css({height:"",width:""}),this.classChanged=!1,this.counter=4,this.usedPositions.length=0}this.$element.trigger("hide.zf.dropdown",[this.$element]),this.options.trapFocus&&Foundation.Keyboard.releaseFocus(this.$element)}},{key:"toggle",value:function(){if(this.$element.hasClass("is-open")){if(this.$anchor.data("hover"))return;this.close()}else this.open()}},{key:"destroy",value:function(){this.$element.off(".zf.trigger").hide(),this.$anchor.off(".zf.dropdown"),Foundation.unregisterPlugin(this)}}]),e}();e.defaults={parentClass:null,hoverDelay:250,hover:!1,hoverPane:!1,vOffset:1,hOffset:1,positionClass:"",trapFocus:!1,autoFocus:!1,closeOnClick:!1},Foundation.plugin(e,"Dropdown")}(jQuery);
@@ -0,0 +1,486 @@
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
+ * DropdownMenu module.
11
+ * @module foundation.dropdown-menu
12
+ * @requires foundation.util.keyboard
13
+ * @requires foundation.util.box
14
+ * @requires foundation.util.nest
15
+ */
16
+
17
+ var DropdownMenu = function () {
18
+ /**
19
+ * Creates a new instance of DropdownMenu.
20
+ * @class
21
+ * @fires DropdownMenu#init
22
+ * @param {jQuery} element - jQuery object to make into a dropdown menu.
23
+ * @param {Object} options - Overrides to the default plugin settings.
24
+ */
25
+ function DropdownMenu(element, options) {
26
+ _classCallCheck(this, DropdownMenu);
27
+
28
+ this.$element = element;
29
+ this.options = $.extend({}, DropdownMenu.defaults, this.$element.data(), options);
30
+
31
+ Foundation.Nest.Feather(this.$element, 'dropdown');
32
+ this._init();
33
+
34
+ Foundation.registerPlugin(this, 'DropdownMenu');
35
+ Foundation.Keyboard.register('DropdownMenu', {
36
+ 'ENTER': 'open',
37
+ 'SPACE': 'open',
38
+ 'ARROW_RIGHT': 'next',
39
+ 'ARROW_UP': 'up',
40
+ 'ARROW_DOWN': 'down',
41
+ 'ARROW_LEFT': 'previous',
42
+ 'ESCAPE': 'close'
43
+ });
44
+ }
45
+
46
+ /**
47
+ * Initializes the plugin, and calls _prepareMenu
48
+ * @private
49
+ * @function
50
+ */
51
+
52
+
53
+ _createClass(DropdownMenu, [{
54
+ key: '_init',
55
+ value: function _init() {
56
+ var subs = this.$element.find('li.is-dropdown-submenu-parent');
57
+ this.$element.children('.is-dropdown-submenu-parent').children('.is-dropdown-submenu').addClass('first-sub');
58
+
59
+ this.$menuItems = this.$element.find('[role="menuitem"]');
60
+ this.$tabs = this.$element.children('[role="menuitem"]');
61
+ this.$tabs.find('ul.is-dropdown-submenu').addClass(this.options.verticalClass);
62
+
63
+ if (this.$element.hasClass(this.options.rightClass) || this.options.alignment === 'right' || Foundation.rtl() || this.$element.parents('.top-bar-right').is('*')) {
64
+ this.options.alignment = 'right';
65
+ subs.addClass('opens-left');
66
+ } else {
67
+ subs.addClass('opens-right');
68
+ }
69
+ this.changed = false;
70
+ this._events();
71
+ }
72
+ }, {
73
+ key: '_isVertical',
74
+ value: function _isVertical() {
75
+ return this.$tabs.css('display') === 'block';
76
+ }
77
+
78
+ /**
79
+ * Adds event listeners to elements within the menu
80
+ * @private
81
+ * @function
82
+ */
83
+
84
+ }, {
85
+ key: '_events',
86
+ value: function _events() {
87
+ var _this = this,
88
+ hasTouch = 'ontouchstart' in window || typeof window.ontouchstart !== 'undefined',
89
+ parClass = 'is-dropdown-submenu-parent';
90
+
91
+ // used for onClick and in the keyboard handlers
92
+ var handleClickFn = function (e) {
93
+ var $elem = $(e.target).parentsUntil('ul', '.' + parClass),
94
+ hasSub = $elem.hasClass(parClass),
95
+ hasClicked = $elem.attr('data-is-click') === 'true',
96
+ $sub = $elem.children('.is-dropdown-submenu');
97
+
98
+ if (hasSub) {
99
+ if (hasClicked) {
100
+ if (!_this.options.closeOnClick || !_this.options.clickOpen && !hasTouch || _this.options.forceFollow && hasTouch) {
101
+ return;
102
+ } else {
103
+ e.stopImmediatePropagation();
104
+ e.preventDefault();
105
+ _this._hide($elem);
106
+ }
107
+ } else {
108
+ e.preventDefault();
109
+ e.stopImmediatePropagation();
110
+ _this._show($sub);
111
+ $elem.add($elem.parentsUntil(_this.$element, '.' + parClass)).attr('data-is-click', true);
112
+ }
113
+ }
114
+ };
115
+
116
+ if (this.options.clickOpen || hasTouch) {
117
+ this.$menuItems.on('click.zf.dropdownmenu touchstart.zf.dropdownmenu', handleClickFn);
118
+ }
119
+
120
+ // Handle Leaf element Clicks
121
+ if (_this.options.closeOnClickInside) {
122
+ this.$menuItems.on('click.zf.dropdownmenu', function (e) {
123
+ var $elem = $(this),
124
+ hasSub = $elem.hasClass(parClass);
125
+ if (!hasSub) {
126
+ _this._hide();
127
+ }
128
+ });
129
+ }
130
+
131
+ if (!this.options.disableHover) {
132
+ this.$menuItems.on('mouseenter.zf.dropdownmenu', function (e) {
133
+ var $elem = $(this),
134
+ hasSub = $elem.hasClass(parClass);
135
+
136
+ if (hasSub) {
137
+ clearTimeout($elem.data('_delay'));
138
+ $elem.data('_delay', setTimeout(function () {
139
+ _this._show($elem.children('.is-dropdown-submenu'));
140
+ }, _this.options.hoverDelay));
141
+ }
142
+ }).on('mouseleave.zf.dropdownmenu', function (e) {
143
+ var $elem = $(this),
144
+ hasSub = $elem.hasClass(parClass);
145
+ if (hasSub && _this.options.autoclose) {
146
+ if ($elem.attr('data-is-click') === 'true' && _this.options.clickOpen) {
147
+ return false;
148
+ }
149
+
150
+ clearTimeout($elem.data('_delay'));
151
+ $elem.data('_delay', setTimeout(function () {
152
+ _this._hide($elem);
153
+ }, _this.options.closingTime));
154
+ }
155
+ });
156
+ }
157
+ this.$menuItems.on('keydown.zf.dropdownmenu', function (e) {
158
+ var $element = $(e.target).parentsUntil('ul', '[role="menuitem"]'),
159
+ isTab = _this.$tabs.index($element) > -1,
160
+ $elements = isTab ? _this.$tabs : $element.siblings('li').add($element),
161
+ $prevElement,
162
+ $nextElement;
163
+
164
+ $elements.each(function (i) {
165
+ if ($(this).is($element)) {
166
+ $prevElement = $elements.eq(i - 1);
167
+ $nextElement = $elements.eq(i + 1);
168
+ return;
169
+ }
170
+ });
171
+
172
+ var nextSibling = function () {
173
+ if (!$element.is(':last-child')) {
174
+ $nextElement.children('a:first').focus();
175
+ e.preventDefault();
176
+ }
177
+ },
178
+ prevSibling = function () {
179
+ $prevElement.children('a:first').focus();
180
+ e.preventDefault();
181
+ },
182
+ openSub = function () {
183
+ var $sub = $element.children('ul.is-dropdown-submenu');
184
+ if ($sub.length) {
185
+ _this._show($sub);
186
+ $element.find('li > a:first').focus();
187
+ e.preventDefault();
188
+ } else {
189
+ return;
190
+ }
191
+ },
192
+ closeSub = function () {
193
+ //if ($element.is(':first-child')) {
194
+ var close = $element.parent('ul').parent('li');
195
+ close.children('a:first').focus();
196
+ _this._hide(close);
197
+ e.preventDefault();
198
+ //}
199
+ };
200
+ var functions = {
201
+ open: openSub,
202
+ close: function () {
203
+ _this._hide(_this.$element);
204
+ _this.$menuItems.find('a:first').focus(); // focus to first element
205
+ e.preventDefault();
206
+ },
207
+ handled: function () {
208
+ e.stopImmediatePropagation();
209
+ }
210
+ };
211
+
212
+ if (isTab) {
213
+ if (_this._isVertical()) {
214
+ // vertical menu
215
+ if (Foundation.rtl()) {
216
+ // right aligned
217
+ $.extend(functions, {
218
+ down: nextSibling,
219
+ up: prevSibling,
220
+ next: closeSub,
221
+ previous: openSub
222
+ });
223
+ } else {
224
+ // left aligned
225
+ $.extend(functions, {
226
+ down: nextSibling,
227
+ up: prevSibling,
228
+ next: openSub,
229
+ previous: closeSub
230
+ });
231
+ }
232
+ } else {
233
+ // horizontal menu
234
+ if (Foundation.rtl()) {
235
+ // right aligned
236
+ $.extend(functions, {
237
+ next: prevSibling,
238
+ previous: nextSibling,
239
+ down: openSub,
240
+ up: closeSub
241
+ });
242
+ } else {
243
+ // left aligned
244
+ $.extend(functions, {
245
+ next: nextSibling,
246
+ previous: prevSibling,
247
+ down: openSub,
248
+ up: closeSub
249
+ });
250
+ }
251
+ }
252
+ } else {
253
+ // not tabs -> one sub
254
+ if (Foundation.rtl()) {
255
+ // right aligned
256
+ $.extend(functions, {
257
+ next: closeSub,
258
+ previous: openSub,
259
+ down: nextSibling,
260
+ up: prevSibling
261
+ });
262
+ } else {
263
+ // left aligned
264
+ $.extend(functions, {
265
+ next: openSub,
266
+ previous: closeSub,
267
+ down: nextSibling,
268
+ up: prevSibling
269
+ });
270
+ }
271
+ }
272
+ Foundation.Keyboard.handleKey(e, 'DropdownMenu', functions);
273
+ });
274
+ }
275
+
276
+ /**
277
+ * Adds an event handler to the body to close any dropdowns on a click.
278
+ * @function
279
+ * @private
280
+ */
281
+
282
+ }, {
283
+ key: '_addBodyHandler',
284
+ value: function _addBodyHandler() {
285
+ var $body = $(document.body),
286
+ _this = this;
287
+ $body.off('mouseup.zf.dropdownmenu touchend.zf.dropdownmenu').on('mouseup.zf.dropdownmenu touchend.zf.dropdownmenu', function (e) {
288
+ var $link = _this.$element.find(e.target);
289
+ if ($link.length) {
290
+ return;
291
+ }
292
+
293
+ _this._hide();
294
+ $body.off('mouseup.zf.dropdownmenu touchend.zf.dropdownmenu');
295
+ });
296
+ }
297
+
298
+ /**
299
+ * Opens a dropdown pane, and checks for collisions first.
300
+ * @param {jQuery} $sub - ul element that is a submenu to show
301
+ * @function
302
+ * @private
303
+ * @fires DropdownMenu#show
304
+ */
305
+
306
+ }, {
307
+ key: '_show',
308
+ value: function _show($sub) {
309
+ var idx = this.$tabs.index(this.$tabs.filter(function (i, el) {
310
+ return $(el).find($sub).length > 0;
311
+ }));
312
+ var $sibs = $sub.parent('li.is-dropdown-submenu-parent').siblings('li.is-dropdown-submenu-parent');
313
+ this._hide($sibs, idx);
314
+ $sub.css('visibility', 'hidden').addClass('js-dropdown-active').parent('li.is-dropdown-submenu-parent').addClass('is-active');
315
+ var clear = Foundation.Box.ImNotTouchingYou($sub, null, true);
316
+ if (!clear) {
317
+ var oldClass = this.options.alignment === 'left' ? '-right' : '-left',
318
+ $parentLi = $sub.parent('.is-dropdown-submenu-parent');
319
+ $parentLi.removeClass('opens' + oldClass).addClass('opens-' + this.options.alignment);
320
+ clear = Foundation.Box.ImNotTouchingYou($sub, null, true);
321
+ if (!clear) {
322
+ $parentLi.removeClass('opens-' + this.options.alignment).addClass('opens-inner');
323
+ }
324
+ this.changed = true;
325
+ }
326
+ $sub.css('visibility', '');
327
+ if (this.options.closeOnClick) {
328
+ this._addBodyHandler();
329
+ }
330
+ /**
331
+ * Fires when the new dropdown pane is visible.
332
+ * @event DropdownMenu#show
333
+ */
334
+ this.$element.trigger('show.zf.dropdownmenu', [$sub]);
335
+ }
336
+
337
+ /**
338
+ * Hides a single, currently open dropdown pane, if passed a parameter, otherwise, hides everything.
339
+ * @function
340
+ * @param {jQuery} $elem - element with a submenu to hide
341
+ * @param {Number} idx - index of the $tabs collection to hide
342
+ * @private
343
+ */
344
+
345
+ }, {
346
+ key: '_hide',
347
+ value: function _hide($elem, idx) {
348
+ var $toClose;
349
+ if ($elem && $elem.length) {
350
+ $toClose = $elem;
351
+ } else if (idx !== undefined) {
352
+ $toClose = this.$tabs.not(function (i, el) {
353
+ return i === idx;
354
+ });
355
+ } else {
356
+ $toClose = this.$element;
357
+ }
358
+ var somethingToClose = $toClose.hasClass('is-active') || $toClose.find('.is-active').length > 0;
359
+
360
+ if (somethingToClose) {
361
+ $toClose.find('li.is-active').add($toClose).attr({
362
+ 'data-is-click': false
363
+ }).removeClass('is-active');
364
+
365
+ $toClose.find('ul.js-dropdown-active').removeClass('js-dropdown-active');
366
+
367
+ if (this.changed || $toClose.find('opens-inner').length) {
368
+ var oldClass = this.options.alignment === 'left' ? 'right' : 'left';
369
+ $toClose.find('li.is-dropdown-submenu-parent').add($toClose).removeClass('opens-inner opens-' + this.options.alignment).addClass('opens-' + oldClass);
370
+ this.changed = false;
371
+ }
372
+ /**
373
+ * Fires when the open menus are closed.
374
+ * @event DropdownMenu#hide
375
+ */
376
+ this.$element.trigger('hide.zf.dropdownmenu', [$toClose]);
377
+ }
378
+ }
379
+
380
+ /**
381
+ * Destroys the plugin.
382
+ * @function
383
+ */
384
+
385
+ }, {
386
+ key: 'destroy',
387
+ value: function destroy() {
388
+ this.$menuItems.off('.zf.dropdownmenu').removeAttr('data-is-click').removeClass('is-right-arrow is-left-arrow is-down-arrow opens-right opens-left opens-inner');
389
+ $(document.body).off('.zf.dropdownmenu');
390
+ Foundation.Nest.Burn(this.$element, 'dropdown');
391
+ Foundation.unregisterPlugin(this);
392
+ }
393
+ }]);
394
+
395
+ return DropdownMenu;
396
+ }();
397
+
398
+ /**
399
+ * Default settings for plugin
400
+ */
401
+
402
+
403
+ DropdownMenu.defaults = {
404
+ /**
405
+ * Disallows hover events from opening submenus
406
+ * @option
407
+ * @type {boolean}
408
+ * @default false
409
+ */
410
+ disableHover: false,
411
+ /**
412
+ * Allow a submenu to automatically close on a mouseleave event, if not clicked open.
413
+ * @option
414
+ * @type {boolean}
415
+ * @default true
416
+ */
417
+ autoclose: true,
418
+ /**
419
+ * Amount of time to delay opening a submenu on hover event.
420
+ * @option
421
+ * @type {number}
422
+ * @default 50
423
+ */
424
+ hoverDelay: 50,
425
+ /**
426
+ * Allow a submenu to open/remain open on parent click event. Allows cursor to move away from menu.
427
+ * @option
428
+ * @type {boolean}
429
+ * @default false
430
+ */
431
+ clickOpen: false,
432
+ /**
433
+ * Amount of time to delay closing a submenu on a mouseleave event.
434
+ * @option
435
+ * @type {number}
436
+ * @default 500
437
+ */
438
+
439
+ closingTime: 500,
440
+ /**
441
+ * Position of the menu relative to what direction the submenus should open. Handled by JS. Can be `'left'` or `'right'`.
442
+ * @option
443
+ * @type {string}
444
+ * @default 'left'
445
+ */
446
+ alignment: 'left',
447
+ /**
448
+ * Allow clicks on the body to close any open submenus.
449
+ * @option
450
+ * @type {boolean}
451
+ * @default true
452
+ */
453
+ closeOnClick: true,
454
+ /**
455
+ * Allow clicks on leaf anchor links to close any open submenus.
456
+ * @option
457
+ * @type {boolean}
458
+ * @default true
459
+ */
460
+ closeOnClickInside: true,
461
+ /**
462
+ * Class applied to vertical oriented menus, Foundation default is `vertical`. Update this if using your own class.
463
+ * @option
464
+ * @type {string}
465
+ * @default 'vertical'
466
+ */
467
+ verticalClass: 'vertical',
468
+ /**
469
+ * Class applied to right-side oriented menus, Foundation default is `align-right`. Update this if using your own class.
470
+ * @option
471
+ * @type {string}
472
+ * @default 'align-right'
473
+ */
474
+ rightClass: 'align-right',
475
+ /**
476
+ * Boolean to force overide the clicking of links to perform default action, on second touch event for mobile.
477
+ * @option
478
+ * @type {boolean}
479
+ * @default true
480
+ */
481
+ forceFollow: true
482
+ };
483
+
484
+ // Window exports
485
+ Foundation.plugin(DropdownMenu, 'DropdownMenu');
486
+ }(jQuery);