/*! UIkit 2.25.0 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ (function(UI) { "use strict"; var active = false, activeCount = 0, $html = UI.$html, body; UI.component('modal', { defaults: { keyboard: true, bgclose: true, minScrollHeight: 150, center: false, modal: true }, scrollable: false, transition: false, hasTransitioned: true, init: function() { if (!body) body = UI.$('body'); if (!this.element.length) return; var $this = this; this.paddingdir = "padding-" + (UI.langdirection == 'left' ? "right":"left"); this.dialog = this.find(".uk-modal-dialog"); this.active = false; // Update ARIA this.element.attr('aria-hidden', this.element.hasClass("uk-open")); this.on("click", ".uk-modal-close", function(e) { e.preventDefault(); $this.hide(); }).on("click", function(e) { var target = UI.$(e.target); if (target[0] == $this.element[0] && $this.options.bgclose) { $this.hide(); } }); }, toggle: function() { return this[this.isActive() ? "hide" : "show"](); }, show: function() { if (!this.element.length) return; var $this = this; if (this.isActive()) return; if (this.options.modal && active) { active.hide(true); } this.element.removeClass("uk-open").show(); this.resize(); if (this.options.modal) { active = this; } this.active = true; activeCount++; if (UI.support.transition) { this.hasTransitioned = false; this.element.one(UI.support.transition.end, function(){ $this.hasTransitioned = true; }).addClass("uk-open"); } else { this.element.addClass("uk-open"); } $html.addClass("uk-modal-page").height(); // force browser engine redraw // Update ARIA this.element.attr('aria-hidden', 'false'); this.element.trigger("show.uk.modal"); UI.Utils.checkDisplay(this.dialog, true); return this; }, hide: function(force) { if (!force && UI.support.transition && this.hasTransitioned) { var $this = this; this.one(UI.support.transition.end, function() { $this._hide(); }).removeClass("uk-open"); } else { this._hide(); } return this; }, resize: function() { var bodywidth = body.width(); this.scrollbarwidth = window.innerWidth - bodywidth; body.css(this.paddingdir, this.scrollbarwidth); this.element.css('overflow-y', this.scrollbarwidth ? 'scroll' : 'auto'); if (!this.updateScrollable() && this.options.center) { var dh = this.dialog.outerHeight(), pad = parseInt(this.dialog.css('margin-top'), 10) + parseInt(this.dialog.css('margin-bottom'), 10); if ((dh + pad) < window.innerHeight) { this.dialog.css({'top': (window.innerHeight/2 - dh/2) - pad }); } else { this.dialog.css({'top': ''}); } } }, updateScrollable: function() { // has scrollable? var scrollable = this.dialog.find('.uk-overflow-container:visible:first'); if (scrollable.length) { scrollable.css('height', 0); var offset = Math.abs(parseInt(this.dialog.css('margin-top'), 10)), dh = this.dialog.outerHeight(), wh = window.innerHeight, h = wh - 2*(offset < 20 ? 20:offset) - dh; scrollable.css({ 'max-height': (h < this.options.minScrollHeight ? '':h), 'height':'' }); return true; } return false; }, _hide: function() { this.active = false; if (activeCount > 0) activeCount--; else activeCount = 0; this.element.hide().removeClass('uk-open'); // Update ARIA this.element.attr('aria-hidden', 'true'); if (!activeCount) { $html.removeClass('uk-modal-page'); body.css(this.paddingdir, ""); } if(active===this) active = false; this.trigger('hide.uk.modal'); }, isActive: function() { return this.active; } }); UI.component('modalTrigger', { boot: function() { // init code UI.$html.on("click.modal.uikit", "[data-uk-modal]", function(e) { var ele = UI.$(this); if (ele.is("a")) { e.preventDefault(); } if (!ele.data("modalTrigger")) { var modal = UI.modalTrigger(ele, UI.Utils.options(ele.attr("data-uk-modal"))); modal.show(); } }); // close modal on esc button UI.$html.on('keydown.modal.uikit', function (e) { if (active && e.keyCode === 27 && active.options.keyboard) { // ESC e.preventDefault(); active.hide(); } }); UI.$win.on("resize orientationchange", UI.Utils.debounce(function(){ if (active) active.resize(); }, 150)); }, init: function() { var $this = this; this.options = UI.$.extend({ "target": $this.element.is("a") ? $this.element.attr("href") : false }, this.options); this.modal = UI.modal(this.options.target, this.options); this.on("click", function(e) { e.preventDefault(); $this.show(); }); //methods this.proxy(this.modal, "show hide isActive"); } }); UI.modal.dialog = function(content, options) { var modal = UI.modal(UI.$(UI.modal.dialog.template).appendTo("body"), options); modal.on("hide.uk.modal", function(){ if (modal.persist) { modal.persist.appendTo(modal.persist.data("modalPersistParent")); modal.persist = false; } modal.element.remove(); }); setContent(content, modal); return modal; }; UI.modal.dialog.template = '