/*! UIkit 2.26.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ (function(UI) { "use strict"; UI.component('nav', { defaults: { "toggle": ">li.uk-parent > a[href='#']", "lists": ">li.uk-parent > ul", "multiple": false }, boot: function() { // init code UI.ready(function(context) { UI.$("[data-uk-nav]", context).each(function() { var nav = UI.$(this); if (!nav.data("nav")) { var obj = UI.nav(nav, UI.Utils.options(nav.attr("data-uk-nav"))); } }); }); }, init: function() { var $this = this; this.on("click.uk.nav", this.options.toggle, function(e) { e.preventDefault(); var ele = UI.$(this); $this.open(ele.parent()[0] == $this.element[0] ? ele : ele.parent("li")); }); this.find(this.options.lists).each(function() { var $ele = UI.$(this), parent = $ele.parent(), active = parent.hasClass("uk-active"); $ele.wrap('
'); parent.data("list-container", $ele.parent()[active ? 'removeClass':'addClass']('uk-hidden')); // Init ARIA parent.attr('aria-expanded', parent.hasClass("uk-open")); if (active) $this.open(parent, true); }); }, open: function(li, noanimation) { var $this = this, element = this.element, $li = UI.$(li), $container = $li.data('list-container'); if (!this.options.multiple) { element.children('.uk-open').not(li).each(function() { var ele = UI.$(this); if (ele.data('list-container')) { ele.data('list-container').stop().animate({height: 0}, function() { UI.$(this).parent().removeClass('uk-open').end().addClass('uk-hidden'); }); } }); } $li.toggleClass('uk-open'); // Update ARIA $li.attr('aria-expanded', $li.hasClass('uk-open')); if ($container) { if ($li.hasClass('uk-open')) { $container.removeClass('uk-hidden'); } if (noanimation) { $container.stop().height($li.hasClass('uk-open') ? 'auto' : 0); if (!$li.hasClass('uk-open')) { $container.addClass('uk-hidden'); } this.trigger('display.uk.check'); } else { $container.stop().animate({ height: ($li.hasClass('uk-open') ? getHeight($container.find('ul:first')) : 0) }, function() { if (!$li.hasClass('uk-open')) { $container.addClass('uk-hidden'); } else { $container.css('height', ''); } $this.trigger('display.uk.check'); }); } } } }); // helper function getHeight(ele) { var $ele = UI.$(ele), height = "auto"; if ($ele.is(":visible")) { height = $ele.outerHeight(); } else { var tmp = { position: $ele.css("position"), visibility: $ele.css("visibility"), display: $ele.css("display") }; height = $ele.css({position: 'absolute', visibility: 'hidden', display: 'block'}).outerHeight(); $ele.css(tmp); // reset element } return height; } })(UIkit);