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/offcanvas.js | 180 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 180 insertions(+) create mode 100755 js/core/offcanvas.js (limited to 'js/core/offcanvas.js') diff --git a/js/core/offcanvas.js b/js/core/offcanvas.js new file mode 100755 index 0000000..9b2c289 --- /dev/null +++ b/js/core/offcanvas.js @@ -0,0 +1,180 @@ +/*! UIkit 2.26.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ +(function(UI) { + + "use strict"; + + var scrollpos = {x: window.scrollX, y: window.scrollY}, + $win = UI.$win, + $doc = UI.$doc, + $html = UI.$html, + Offcanvas = { + + show: function(element) { + + element = UI.$(element); + + if (!element.length) return; + + var $body = UI.$('body'), + bar = element.find(".uk-offcanvas-bar:first"), + rtl = (UI.langdirection == "right"), + flip = bar.hasClass("uk-offcanvas-bar-flip") ? -1:1, + dir = flip * (rtl ? -1 : 1), + + scrollbarwidth = window.innerWidth - $body.width(); + + scrollpos = {x: window.pageXOffset, y: window.pageYOffset}; + + element.addClass("uk-active"); + + $body.css({"width": window.innerWidth - scrollbarwidth, "height": window.innerHeight}).addClass("uk-offcanvas-page"); + $body.css((rtl ? "margin-right" : "margin-left"), (rtl ? -1 : 1) * (bar.outerWidth() * dir)).width(); // .width() - force redraw + + $html.css('margin-top', scrollpos.y * -1); + + bar.addClass("uk-offcanvas-bar-show"); + + this._initElement(element); + + bar.trigger('show.uk.offcanvas', [element, bar]); + + // Update ARIA + element.attr('aria-hidden', 'false'); + }, + + hide: function(force) { + + var $body = UI.$('body'), + panel = UI.$(".uk-offcanvas.uk-active"), + rtl = (UI.langdirection == "right"), + bar = panel.find(".uk-offcanvas-bar:first"), + finalize = function() { + $body.removeClass("uk-offcanvas-page").css({"width": "", "height": "", "margin-left": "", "margin-right": ""}); + panel.removeClass("uk-active"); + + bar.removeClass("uk-offcanvas-bar-show"); + $html.css('margin-top', ''); + window.scrollTo(scrollpos.x, scrollpos.y); + bar.trigger('hide.uk.offcanvas', [panel, bar]); + + // Update ARIA + panel.attr('aria-hidden', 'true'); + }; + + if (!panel.length) return; + + if (UI.support.transition && !force) { + + $body.one(UI.support.transition.end, function() { + finalize(); + }).css((rtl ? "margin-right" : "margin-left"), ""); + + setTimeout(function(){ + bar.removeClass("uk-offcanvas-bar-show"); + }, 0); + + } else { + finalize(); + } + }, + + _initElement: function(element) { + + if (element.data("OffcanvasInit")) return; + + element.on("click.uk.offcanvas swipeRight.uk.offcanvas swipeLeft.uk.offcanvas", function(e) { + + var target = UI.$(e.target); + + if (!e.type.match(/swipe/)) { + + if (!target.hasClass("uk-offcanvas-close")) { + if (target.hasClass("uk-offcanvas-bar")) return; + if (target.parents(".uk-offcanvas-bar:first").length) return; + } + } + + e.stopImmediatePropagation(); + Offcanvas.hide(); + }); + + element.on("click", "a[href*='#']", function(e){ + + var link = UI.$(this), + href = link.attr("href"); + + if (href == "#") { + return; + } + + UI.$doc.one('hide.uk.offcanvas', function() { + + var target; + + try { + target = UI.$(link[0].hash); + } catch (e){ + target = ''; + } + + if (!target.length) { + target = UI.$('[name="'+link[0].hash.replace('#','')+'"]'); + } + + if (target.length && UI.Utils.scrollToElement) { + UI.Utils.scrollToElement(target, UI.Utils.options(link.attr('data-uk-smooth-scroll') || '{}')); + } else { + window.location.href = href; + } + }); + + Offcanvas.hide(); + }); + + element.data("OffcanvasInit", true); + } + }; + + UI.component('offcanvasTrigger', { + + boot: function() { + + // init code + $html.on("click.offcanvas.uikit", "[data-uk-offcanvas]", function(e) { + + e.preventDefault(); + + var ele = UI.$(this); + + if (!ele.data("offcanvasTrigger")) { + var obj = UI.offcanvasTrigger(ele, UI.Utils.options(ele.attr("data-uk-offcanvas"))); + ele.trigger("click"); + } + }); + + $html.on('keydown.uk.offcanvas', function(e) { + + if (e.keyCode === 27) { // ESC + Offcanvas.hide(); + } + }); + }, + + init: function() { + + var $this = this; + + this.options = UI.$.extend({ + "target": $this.element.is("a") ? $this.element.attr("href") : false + }, this.options); + + this.on("click", function(e) { + e.preventDefault(); + Offcanvas.show($this.options.target); + }); + } + }); + + UI.offcanvas = Offcanvas; + +})(UIkit); -- cgit v1.2.3