/*! UIkit 2.27.5 | 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, options) { element = UI.$(element); if (!element.length) return; options = UI.$.extend({mode: 'push'}, options); 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}; bar.attr('mode', options.mode); element.addClass('uk-active'); $body.css({width: window.innerWidth - scrollbarwidth, height: window.innerHeight}).addClass('uk-offcanvas-page'); if (options.mode == 'push' || options.mode == 'reveal') { $body.css((rtl ? 'margin-right' : 'margin-left'), (rtl ? -1 : 1) * (bar.outerWidth() * dir)); } if (options.mode == 'reveal') { bar.css('clip', 'rect(0, '+bar.outerWidth()+'px, 100vh, 0)'); } $html.css('margin-top', scrollpos.y * -1).width(); // .width() - force redraw 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: '', marginLeft: '', marginRight: ''}); 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 (bar.attr('mode') == 'none') force = true; if (UI.support.transition && !force) { $body.one(UI.support.transition.end, function() { finalize(); }).css((rtl ? 'margin-right' : 'margin-left'), ''); if (bar.attr('mode') == 'reveal') { bar.css('clip', ''); } 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.parents('.uk-offcanvas-bar:first').length) return; } else { 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, mode: 'push' }, this.options); this.on('click', function(e) { e.preventDefault(); Offcanvas.show($this.options.target, $this.options); }); } }); UI.offcanvas = Offcanvas; })(UIkit2);