From c94fb32c7a3c28b18a27460aa2447eeec1fac1de Mon Sep 17 00:00:00 2001 From: Pascal Szewczyk Date: Mon, 18 Jul 2016 23:23:54 +0200 Subject: uikit added --- js/core/nav.js | 136 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100755 js/core/nav.js (limited to 'js/core/nav.js') diff --git a/js/core/nav.js b/js/core/nav.js new file mode 100755 index 0000000..a6157ab --- /dev/null +++ b/js/core/nav.js @@ -0,0 +1,136 @@ +/*! 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); -- cgit v1.2.3