From 2653f6a943a6ed74e2b72246ba8211c5fb699a7f Mon Sep 17 00:00:00 2001 From: erdgeist Date: Sun, 7 Aug 2016 02:17:47 +0200 Subject: restructured ;) --- js/core/dropdown.js | 525 ---------------------------------------------------- 1 file changed, 525 deletions(-) delete mode 100755 js/core/dropdown.js (limited to 'js/core/dropdown.js') diff --git a/js/core/dropdown.js b/js/core/dropdown.js deleted file mode 100755 index 1fa7035..0000000 --- a/js/core/dropdown.js +++ /dev/null @@ -1,525 +0,0 @@ -/*! UIkit 2.26.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ -(function(UI) { - - "use strict"; - - var active = false, hoverIdle, flips = { - 'x': { - "bottom-left" : 'bottom-right', - "bottom-right" : 'bottom-left', - "bottom-center" : 'bottom-center', - "top-left" : 'top-right', - "top-right" : 'top-left', - "top-center" : 'top-center', - "left-top" : 'right-top', - "left-bottom" : 'right-bottom', - "left-center" : 'right-center', - "right-top" : 'left-top', - "right-bottom" : 'left-bottom', - "right-center" : 'left-center' - }, - 'y': { - "bottom-left" : 'top-left', - "bottom-right" : 'top-right', - "bottom-center" : 'top-center', - "top-left" : 'bottom-left', - "top-right" : 'bottom-right', - "top-center" : 'bottom-center', - "left-top" : 'left-bottom', - "left-bottom" : 'left-top', - "left-center" : 'left-center', - "right-top" : 'right-bottom', - "right-bottom" : 'right-top', - "right-center" : 'right-center' - }, - 'xy': { - "bottom-left" : 'top-right', - "bottom-right" : 'top-left', - "bottom-center" : 'top-center', - "top-left" : 'bottom-right', - "top-right" : 'bottom-left', - "top-center" : 'bottom-center', - "left-top" : 'right-bottom', - "left-bottom" : 'right-top', - "left-center" : 'right-center', - "right-top" : 'left-bottom', - "right-bottom" : 'left-top', - "right-center" : 'left-center' - } - }; - - UI.component('dropdown', { - - defaults: { - 'mode' : 'hover', - 'pos' : 'bottom-left', - 'offset' : 0, - 'remaintime' : 800, - 'justify' : false, - 'boundary' : UI.$win, - 'delay' : 0, - 'dropdownSelector': '.uk-dropdown,.uk-dropdown-blank', - 'hoverDelayIdle' : 250, - 'preventflip' : false - }, - - remainIdle: false, - - boot: function() { - - var triggerevent = UI.support.touch ? "click" : "mouseenter"; - - // init code - UI.$html.on(triggerevent+".dropdown.uikit", "[data-uk-dropdown]", function(e) { - - var ele = UI.$(this); - - if (!ele.data("dropdown")) { - - var dropdown = UI.dropdown(ele, UI.Utils.options(ele.attr("data-uk-dropdown"))); - - if (triggerevent=="click" || (triggerevent=="mouseenter" && dropdown.options.mode=="hover")) { - dropdown.element.trigger(triggerevent); - } - - if (dropdown.element.find(dropdown.options.dropdownSelector).length) { - e.preventDefault(); - } - } - }); - }, - - init: function() { - - var $this = this; - - this.dropdown = this.find(this.options.dropdownSelector); - this.offsetParent = this.dropdown.parents().filter(function() { - return UI.$.inArray(UI.$(this).css('position'), ['relative', 'fixed', 'absolute']) !== -1; - }).slice(0,1); - - this.centered = this.dropdown.hasClass('uk-dropdown-center'); - this.justified = this.options.justify ? UI.$(this.options.justify) : false; - - this.boundary = UI.$(this.options.boundary); - - if (!this.boundary.length) { - this.boundary = UI.$win; - } - - // legacy DEPRECATED! - if (this.dropdown.hasClass('uk-dropdown-up')) { - this.options.pos = 'top-left'; - } - if (this.dropdown.hasClass('uk-dropdown-flip')) { - this.options.pos = this.options.pos.replace('left','right'); - } - if (this.dropdown.hasClass('uk-dropdown-center')) { - this.options.pos = this.options.pos.replace(/(left|right)/,'center'); - } - //-- end legacy - - // Init ARIA - this.element.attr('aria-haspopup', 'true'); - this.element.attr('aria-expanded', this.element.hasClass("uk-open")); - - if (this.options.mode == "click" || UI.support.touch) { - - this.on("click.uk.dropdown", function(e) { - - var $target = UI.$(e.target); - - if (!$target.parents($this.options.dropdownSelector).length) { - - if ($target.is("a[href='#']") || $target.parent().is("a[href='#']") || ($this.dropdown.length && !$this.dropdown.is(":visible")) ){ - e.preventDefault(); - } - - $target.blur(); - } - - if (!$this.element.hasClass('uk-open')) { - - $this.show(); - - } else { - - if (!$this.dropdown.find(e.target).length || $target.is(".uk-dropdown-close") || $target.parents(".uk-dropdown-close").length) { - $this.hide(); - } - } - }); - - } else { - - this.on("mouseenter", function(e) { - - $this.trigger('pointerenter.uk.dropdown', [$this]); - - if ($this.remainIdle) { - clearTimeout($this.remainIdle); - } - - if (hoverIdle) { - clearTimeout(hoverIdle); - } - - if (active && active == $this) { - return; - } - - // pseudo manuAim - if (active && active != $this) { - - hoverIdle = setTimeout(function() { - hoverIdle = setTimeout($this.show.bind($this), $this.options.delay); - }, $this.options.hoverDelayIdle); - - } else { - - hoverIdle = setTimeout($this.show.bind($this), $this.options.delay); - } - - }).on("mouseleave", function() { - - if (hoverIdle) { - clearTimeout(hoverIdle); - } - - $this.remainIdle = setTimeout(function() { - if (active && active == $this) $this.hide(); - }, $this.options.remaintime); - - $this.trigger('pointerleave.uk.dropdown', [$this]); - - }).on("click", function(e){ - - var $target = UI.$(e.target); - - if ($this.remainIdle) { - clearTimeout($this.remainIdle); - } - - if (active && active == $this) { - if (!$this.dropdown.find(e.target).length || $target.is(".uk-dropdown-close") || $target.parents(".uk-dropdown-close").length) { - $this.hide(); - } - return; - } - - if ($target.is("a[href='#']") || $target.parent().is("a[href='#']")){ - e.preventDefault(); - } - - $this.show(); - }); - } - }, - - show: function(){ - - UI.$html.off("click.outer.dropdown"); - - if (active && active != this) { - active.hide(true); - } - - if (hoverIdle) { - clearTimeout(hoverIdle); - } - - this.trigger('beforeshow.uk.dropdown', [this]); - - this.checkDimensions(); - this.element.addClass('uk-open'); - - // Update ARIA - this.element.attr('aria-expanded', 'true'); - - this.trigger('show.uk.dropdown', [this]); - - UI.Utils.checkDisplay(this.dropdown, true); - active = this; - - this.registerOuterClick(); - }, - - hide: function(force) { - - this.trigger('beforehide.uk.dropdown', [this, force]); - - this.element.removeClass('uk-open'); - - if (this.remainIdle) { - clearTimeout(this.remainIdle); - } - - this.remainIdle = false; - - // Update ARIA - this.element.attr('aria-expanded', 'false'); - - this.trigger('hide.uk.dropdown', [this, force]); - - if (active == this) active = false; - }, - - registerOuterClick: function(){ - - var $this = this; - - UI.$html.off("click.outer.dropdown"); - - setTimeout(function() { - - UI.$html.on("click.outer.dropdown", function(e) { - - if (hoverIdle) { - clearTimeout(hoverIdle); - } - - var $target = UI.$(e.target); - - if (active == $this && !$this.element.find(e.target).length) { - $this.hide(true); - UI.$html.off("click.outer.dropdown"); - } - }); - }, 10); - }, - - checkDimensions: function() { - - if (!this.dropdown.length) return; - - // reset - this.dropdown.removeClass('uk-dropdown-top uk-dropdown-bottom uk-dropdown-left uk-dropdown-right uk-dropdown-stack').css({ - 'top-left':'', - 'left':'', - 'margin-left' :'', - 'margin-right':'' - }); - - if (this.justified && this.justified.length) { - this.dropdown.css("min-width", ""); - } - - var $this = this, - pos = UI.$.extend({}, this.offsetParent.offset(), {width: this.offsetParent[0].offsetWidth, height: this.offsetParent[0].offsetHeight}), - posoffset = this.options.offset, - dropdown = this.dropdown, - offset = dropdown.show().offset() || {left: 0, top: 0}, - width = dropdown.outerWidth(), - height = dropdown.outerHeight(), - boundarywidth = this.boundary.width(), - boundaryoffset = this.boundary[0] !== window && this.boundary.offset() ? this.boundary.offset(): {top:0, left:0}, - dpos = this.options.pos; - - var variants = { - "bottom-left" : {top: 0 + pos.height + posoffset, left: 0}, - "bottom-right" : {top: 0 + pos.height + posoffset, left: 0 + pos.width - width}, - "bottom-center" : {top: 0 + pos.height + posoffset, left: 0 + pos.width / 2 - width / 2}, - "top-left" : {top: 0 - height - posoffset, left: 0}, - "top-right" : {top: 0 - height - posoffset, left: 0 + pos.width - width}, - "top-center" : {top: 0 - height - posoffset, left: 0 + pos.width / 2 - width / 2}, - "left-top" : {top: 0, left: 0 - width - posoffset}, - "left-bottom" : {top: 0 + pos.height - height, left: 0 - width - posoffset}, - "left-center" : {top: 0 + pos.height / 2 - height / 2, left: 0 - width - posoffset}, - "right-top" : {top: 0, left: 0 + pos.width + posoffset}, - "right-bottom" : {top: 0 + pos.height - height, left: 0 + pos.width + posoffset}, - "right-center" : {top: 0 + pos.height / 2 - height / 2, left: 0 + pos.width + posoffset} - }, - css = {}, - pp; - - pp = dpos.split('-'); - css = variants[dpos] ? variants[dpos] : variants['bottom-left']; - - // justify dropdown - if (this.justified && this.justified.length) { - justify(dropdown.css({left:0}), this.justified, boundarywidth); - } else { - - if (this.options.preventflip !== true) { - - var fdpos; - - switch(this.checkBoundary(pos.left + css.left, pos.top + css.top, width, height, boundarywidth)) { - case "x": - if(this.options.preventflip !=='x') fdpos = flips['x'][dpos] || 'right-top'; - break; - case "y": - if(this.options.preventflip !=='y') fdpos = flips['y'][dpos] || 'top-left'; - break; - case "xy": - if(!this.options.preventflip) fdpos = flips['xy'][dpos] || 'right-bottom'; - break; - } - - if (fdpos) { - - pp = fdpos.split('-'); - css = variants[fdpos] ? variants[fdpos] : variants['bottom-left']; - - // check flipped - if (this.checkBoundary(pos.left + css.left, pos.top + css.top, width, height, boundarywidth)) { - pp = dpos.split('-'); - css = variants[dpos] ? variants[dpos] : variants['bottom-left']; - } - } - } - } - - if (width > boundarywidth) { - dropdown.addClass("uk-dropdown-stack"); - this.trigger('stack.uk.dropdown', [this]); - } - - dropdown.css(css).css("display", "").addClass('uk-dropdown-'+pp[0]); - }, - - checkBoundary: function(left, top, width, height, boundarywidth) { - - var axis = ""; - - if (left < 0 || ((left - UI.$win.scrollLeft())+width) > boundarywidth) { - axis += "x"; - } - - if ((top - UI.$win.scrollTop()) < 0 || ((top - UI.$win.scrollTop())+height) > window.innerHeight) { - axis += "y"; - } - - return axis; - } - }); - - - UI.component('dropdownOverlay', { - - defaults: { - 'justify' : false, - 'cls' : '', - 'duration': 200 - }, - - boot: function() { - - // init code - UI.ready(function(context) { - - UI.$("[data-uk-dropdown-overlay]", context).each(function() { - var ele = UI.$(this); - - if (!ele.data("dropdownOverlay")) { - UI.dropdownOverlay(ele, UI.Utils.options(ele.attr("data-uk-dropdown-overlay"))); - } - }); - }); - }, - - init: function() { - - var $this = this; - - this.justified = this.options.justify ? UI.$(this.options.justify) : false; - this.overlay = this.element.find('uk-dropdown-overlay'); - - if (!this.overlay.length) { - this.overlay = UI.$('
').appendTo(this.element); - } - - this.overlay.addClass(this.options.cls); - - this.on({ - - 'beforeshow.uk.dropdown': function(e, dropdown) { - $this.dropdown = dropdown; - - if ($this.justified && $this.justified.length) { - justify($this.overlay.css({'display':'block', 'margin-left':'','margin-right':''}), $this.justified, $this.justified.outerWidth()); - } - }, - - 'show.uk.dropdown': function(e, dropdown) { - - var h = $this.dropdown.dropdown.outerHeight(true); - - $this.dropdown.element.removeClass('uk-open'); - - $this.overlay.stop().css('display', 'block').animate({height: h}, $this.options.duration, function() { - - $this.dropdown.dropdown.css('visibility', ''); - $this.dropdown.element.addClass('uk-open'); - - UI.Utils.checkDisplay($this.dropdown.dropdown, true); - }); - - $this.pointerleave = false; - }, - - 'hide.uk.dropdown': function() { - $this.overlay.stop().animate({height: 0}, $this.options.duration); - }, - - 'pointerenter.uk.dropdown': function(e, dropdown) { - clearTimeout($this.remainIdle); - }, - - 'pointerleave.uk.dropdown': function(e, dropdown) { - $this.pointerleave = true; - } - }); - - - this.overlay.on({ - - 'mouseenter': function() { - if ($this.remainIdle) { - clearTimeout($this.dropdown.remainIdle); - clearTimeout($this.remainIdle); - } - }, - - 'mouseleave': function(){ - - if ($this.pointerleave && active) { - - $this.remainIdle = setTimeout(function() { - if(active) active.hide(); - }, active.options.remaintime); - } - } - }) - } - - }); - - - function justify(ele, justifyTo, boundarywidth, offset) { - - ele = UI.$(ele); - justifyTo = UI.$(justifyTo); - boundarywidth = boundarywidth || window.innerWidth; - offset = offset || ele.offset(); - - if (justifyTo.length) { - - var jwidth = justifyTo.outerWidth(); - - ele.css("min-width", jwidth); - - if (UI.langdirection == 'right') { - - var right1 = boundarywidth - (justifyTo.offset().left + jwidth), - right2 = boundarywidth - (ele.offset().left + ele.outerWidth()); - - ele.css("margin-right", right1 - right2); - - } else { - ele.css("margin-left", justifyTo.offset().left - offset.left); - } - } - } - -})(UIkit); -- cgit v1.2.3