/** * @license Magnific Popup - v1.1.0 - 2016-02-20 http://dimsemenov.com/plugins/magnific-popup/ Copyright (c) 2016 Dmitry Semenov; */ 'use strict'; !function(race) { if ("function" == typeof define && define.amd) { define(["jquery"], race); } else { race("object" == typeof exports ? require("jquery") : window.jQuery || window.Zepto); } }(function($) { var mfp; var _prevStatus; var _document; var _prevContentType; var val; var resType; /** @type {string} */ var CLOSE_EVENT = "Close"; /** @type {string} */ var BEFORE_CLOSE_EVENT = "BeforeClose"; /** @type {string} */ var AFTER_CLOSE_EVENT = "AfterClose"; /** @type {string} */ var BEFORE_APPEND_EVENT = "BeforeAppend"; /** @type {string} */ var MARKUP_PARSE_EVENT = "MarkupParse"; /** @type {string} */ var OPEN_EVENT = "Open"; /** @type {string} */ var CHANGE_EVENT = "Change"; /** @type {string} */ var NS = "mfp"; /** @type {string} */ var EVENT_NS = "." + NS; /** @type {string} */ var READY_CLASS = "mfp-ready"; /** @type {string} */ var REMOVING_CLASS = "mfp-removing"; /** @type {string} */ var PREVENT_CLOSE_CLASS = "mfp-prevent-close"; /** * @return {undefined} */ var MagnificPopup = function() { }; /** @type {boolean} */ var _isJQ = !!window.jQuery; var _window = $(window); /** * @param {string} name * @param {!Function} f * @return {undefined} */ var _mfpOn = function(name, f) { mfp.ev.on(NS + name + EVENT_NS, f); }; /** * @param {string} className * @param {!Object} html * @param {string} raw * @param {(!Function|boolean)} bbox_is_required * @return {?} */ var _getEl = function(className, html, raw, bbox_is_required) { /** @type {!Element} */ var el = document.createElement("div"); return el.className = "mfp-" + className, raw && (el.innerHTML = raw), bbox_is_required ? html && html.appendChild(el) : (el = $(el), html && el.appendTo(html)), el; }; /** * @param {string} e * @param {!Object} data * @return {undefined} */ var _mfpTrigger = function(e, data) { mfp.ev.triggerHandler(NS + e, data); if (mfp.st.callbacks) { e = e.charAt(0).toLowerCase() + e.slice(1); if (mfp.st.callbacks[e]) { mfp.st.callbacks[e].apply(mfp, $.isArray(data) ? data : [data]); } } }; /** * @param {?} type * @return {?} */ var _getCloseBtn = function(type) { return type === resType && mfp.currTemplate.closeBtn || (mfp.currTemplate.closeBtn = $(mfp.st.closeMarkup.replace("%title%", mfp.st.tClose)), resType = type), mfp.currTemplate.closeBtn; }; /** * @return {undefined} */ var _checkInstance = function() { if (!$.magnificPopup.instance) { mfp = new MagnificPopup; mfp.init(); $.magnificPopup.instance = mfp; } }; /** * @return {?} */ var supportsTransitions = function() { /** @type {!CSSStyleDeclaration} */ var s = document.createElement("p").style; /** @type {!Array} */ var v = ["ms", "O", "Moz", "Webkit"]; if (void 0 !== s.transition) { return true; } for (; v.length;) { if (v.pop() + "Transition" in s) { return true; } } return false; }; MagnificPopup.prototype = { constructor : MagnificPopup, init : function() { /** @type {string} */ var appVersion = navigator.appVersion; mfp.isLowIE = mfp.isIE8 = document.all && !document.addEventListener; /** @type {boolean} */ mfp.isAndroid = /android/gi.test(appVersion); /** @type {boolean} */ mfp.isIOS = /iphone|ipad|ipod/gi.test(appVersion); mfp.supportsTransition = supportsTransitions(); /** @type {boolean} */ mfp.probablyMobile = mfp.isAndroid || mfp.isIOS || /(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent); _document = $(document); mfp.popupsCache = {}; }, open : function(data) { var i; if (data.isObj === false) { mfp.items = data.items.toArray(); /** @type {number} */ mfp.index = 0; var node; var tree = data.items; /** @type {number} */ i = 0; for (; i < tree.length; i++) { if (node = tree[i], node.parsed && (node = node.el[0]), node === data.el[0]) { /** @type {number} */ mfp.index = i; break; } } } else { mfp.items = $.isArray(data.items) ? data.items : [data.items]; mfp.index = data.index || 0; } if (mfp.isOpen) { return void mfp.updateItemHTML(); } /** @type {!Array} */ mfp.types = []; /** @type {string} */ val = ""; if (data.mainEl && data.mainEl.length) { mfp.ev = data.mainEl.eq(0); } else { mfp.ev = _document; } if (data.key) { if (!mfp.popupsCache[data.key]) { mfp.popupsCache[data.key] = {}; } mfp.currTemplate = mfp.popupsCache[data.key]; } else { mfp.currTemplate = {}; } mfp.st = $.extend(true, {}, $.magnificPopup.defaults, data); mfp.fixedContentPos = "auto" === mfp.st.fixedContentPos ? !mfp.probablyMobile : mfp.st.fixedContentPos; if (mfp.st.modal) { /** @type {boolean} */ mfp.st.closeOnContentClick = false; /** @type {boolean} */ mfp.st.closeOnBgClick = false; /** @type {boolean} */ mfp.st.showCloseBtn = false; /** @type {boolean} */ mfp.st.enableEscapeKey = false; } if (!mfp.bgOverlay) { mfp.bgOverlay = _getEl("bg").on("click" + EVENT_NS, function() { mfp.close(); }); mfp.wrap = _getEl("wrap").attr("tabindex", -1).on("click" + EVENT_NS, function(e) { if (mfp._checkIfClose(e.target)) { mfp.close(); } }); mfp.container = _getEl("container", mfp.wrap); } mfp.contentContainer = _getEl("content"); if (mfp.st.preloader) { mfp.preloader = _getEl("preloader", mfp.container, mfp.st.tLoading); } var modules = $.magnificPopup.modules; /** @type {number} */ i = 0; for (; i < modules.length; i++) { var n = modules[i]; n = n.charAt(0).toUpperCase() + n.slice(1); mfp["init" + n].call(mfp); } _mfpTrigger("BeforeOpen"); if (mfp.st.showCloseBtn) { if (mfp.st.closeBtnInside) { _mfpOn(MARKUP_PARSE_EVENT, function(a, b, values, item) { values.close_replaceWith = _getCloseBtn(item.type); }); /** @type {string} */ val = val + " mfp-close-btn-in"; } else { mfp.wrap.append(_getCloseBtn()); } } if (mfp.st.alignTop) { /** @type {string} */ val = val + " mfp-align-top"; } if (mfp.fixedContentPos) { mfp.wrap.css({ overflow : mfp.st.overflowY, overflowX : "hidden", overflowY : mfp.st.overflowY }); } else { mfp.wrap.css({ top : _window.scrollTop(), position : "absolute" }); } if (mfp.st.fixedBgPos === false || "auto" === mfp.st.fixedBgPos && !mfp.fixedContentPos) { mfp.bgOverlay.css({ height : _document.height(), position : "absolute" }); } if (mfp.st.enableEscapeKey) { _document.on("keyup" + EVENT_NS, function(event) { if (27 === event.keyCode) { mfp.close(); } }); } _window.on("resize" + EVENT_NS, function() { mfp.updateSize(); }); if (!mfp.st.closeOnContentClick) { /** @type {string} */ val = val + " mfp-auto-cursor"; } if (val) { mfp.wrap.addClass(val); } var windowHeight = mfp.wH = _window.height(); var windowStyles = {}; if (mfp.fixedContentPos && mfp._hasScrollBar(windowHeight)) { var s = mfp._getScrollbarSize(); if (s) { windowStyles.marginRight = s; } } if (mfp.fixedContentPos) { if (mfp.isIE7) { $("body, html").css("overflow", "hidden"); } else { /** @type {string} */ windowStyles.overflow = "hidden"; } } var classesToadd = mfp.st.mainClass; return mfp.isIE7 && (classesToadd = classesToadd + " mfp-ie7"), classesToadd && mfp._addClassToMFP(classesToadd), mfp.updateItemHTML(), _mfpTrigger("BuildControls"), $("html").css(windowStyles), mfp.bgOverlay.add(mfp.wrap).prependTo(mfp.st.prependTo || $(document.body)), mfp._lastFocusedEl = document.activeElement, setTimeout(function() { if (mfp.content) { mfp._addClassToMFP(READY_CLASS); mfp._setFocus(); } else { mfp.bgOverlay.addClass(READY_CLASS); } _document.on("focusin" + EVENT_NS, mfp._onFocusIn); }, 16), mfp.isOpen = true, mfp.updateSize(windowHeight), _mfpTrigger(OPEN_EVENT), data; }, close : function() { if (mfp.isOpen) { _mfpTrigger(BEFORE_CLOSE_EVENT); /** @type {boolean} */ mfp.isOpen = false; if (mfp.st.removalDelay && !mfp.isLowIE && mfp.supportsTransition) { mfp._addClassToMFP(REMOVING_CLASS); setTimeout(function() { mfp._close(); }, mfp.st.removalDelay); } else { mfp._close(); } } }, _close : function() { _mfpTrigger(CLOSE_EVENT); /** @type {string} */ var classesToRemove = REMOVING_CLASS + " " + READY_CLASS + " "; if (mfp.bgOverlay.detach(), mfp.wrap.detach(), mfp.container.empty(), mfp.st.mainClass && (classesToRemove = classesToRemove + (mfp.st.mainClass + " ")), mfp._removeClassFromMFP(classesToRemove), mfp.fixedContentPos) { var windowStyles = { marginRight : "" }; if (mfp.isIE7) { $("body, html").css("overflow", ""); } else { /** @type {string} */ windowStyles.overflow = ""; } $("html").css(windowStyles); } _document.off("keyup" + EVENT_NS + " focusin" + EVENT_NS); mfp.ev.off(EVENT_NS); mfp.wrap.attr("class", "mfp-wrap").removeAttr("style"); mfp.bgOverlay.attr("class", "mfp-bg"); mfp.container.attr("class", "mfp-container"); if (!(!mfp.st.showCloseBtn || mfp.st.closeBtnInside && mfp.currTemplate[mfp.currItem.type] !== true)) { if (mfp.currTemplate.closeBtn) { mfp.currTemplate.closeBtn.detach(); } } if (mfp.st.autoFocusLast && mfp._lastFocusedEl) { $(mfp._lastFocusedEl).focus(); } /** @type {null} */ mfp.currItem = null; /** @type {null} */ mfp.content = null; /** @type {null} */ mfp.currTemplate = null; /** @type {number} */ mfp.prevHeight = 0; _mfpTrigger(AFTER_CLOSE_EVENT); }, updateSize : function(winHeight) { if (mfp.isIOS) { /** @type {number} */ var zoomLevel = document.documentElement.clientWidth / window.innerWidth; /** @type {number} */ var height = window.innerHeight * zoomLevel; mfp.wrap.css("height", height); /** @type {number} */ mfp.wH = height; } else { mfp.wH = winHeight || _window.height(); } if (!mfp.fixedContentPos) { mfp.wrap.css("height", mfp.wH); } _mfpTrigger("Resize"); }, updateItemHTML : function() { var item = mfp.items[mfp.index]; mfp.contentContainer.detach(); if (mfp.content) { mfp.content.detach(); } if (!item.parsed) { item = mfp.parseEl(mfp.index); } var type = item.type; if (_mfpTrigger("BeforeChange", [mfp.currItem ? mfp.currItem.type : "", type]), mfp.currItem = item, !mfp.currTemplate[type]) { var markup = mfp.st[type] ? mfp.st[type].markup : false; _mfpTrigger("FirstMarkupParse", markup); if (markup) { mfp.currTemplate[type] = $(markup); } else { /** @type {boolean} */ mfp.currTemplate[type] = true; } } if (_prevContentType && _prevContentType !== item.type) { mfp.container.removeClass("mfp-" + _prevContentType + "-holder"); } var newContent = mfp["get" + type.charAt(0).toUpperCase() + type.slice(1)](item, mfp.currTemplate[type]); mfp.appendContent(newContent, type); /** @type {boolean} */ item.preloaded = true; _mfpTrigger(CHANGE_EVENT, item); _prevContentType = item.type; mfp.container.prepend(mfp.contentContainer); _mfpTrigger("AfterChange"); }, appendContent : function(newContent, type) { /** @type {string} */ mfp.content = newContent; if (newContent) { if (mfp.st.showCloseBtn && mfp.st.closeBtnInside && mfp.currTemplate[type] === true) { if (!mfp.content.find(".mfp-close").length) { mfp.content.append(_getCloseBtn()); } } else { /** @type {string} */ mfp.content = newContent; } } else { /** @type {string} */ mfp.content = ""; } _mfpTrigger(BEFORE_APPEND_EVENT); mfp.container.addClass("mfp-" + type + "-holder"); mfp.contentContainer.append(mfp.content); }, parseEl : function(index) { var type; var item = mfp.items[index]; if (item.tagName ? item = { el : $(item) } : (type = item.type, item = { data : item, src : item.src }), item.el) { var types = mfp.types; /** @type {number} */ var i = 0; for (; i < types.length; i++) { if (item.el.hasClass("mfp-" + types[i])) { type = types[i]; break; } } item.src = item.el.attr("data-mfp-src"); if (!item.src) { item.src = item.el.attr("href"); } } return item.type = type || mfp.st.type || "inline", item.index = index, item.parsed = true, mfp.items[index] = item, _mfpTrigger("ElementParse", item), mfp.items[index]; }, addGroup : function(el, options) { /** * @param {!Event} e * @return {undefined} */ var eHandler = function(e) { e.mfpEl = this; mfp._openClick(e, el, options); }; if (!options) { options = {}; } /** @type {string} */ var mousemoveEvent = "click.magnificPopup"; /** @type {!Object} */ options.mainEl = el; if (options.items) { /** @type {boolean} */ options.isObj = true; el.off(mousemoveEvent).on(mousemoveEvent, eHandler); } else { /** @type {boolean} */ options.isObj = false; if (options.delegate) { el.off(mousemoveEvent).on(mousemoveEvent, options.delegate, eHandler); } else { /** @type {!Object} */ options.items = el; el.off(mousemoveEvent).on(mousemoveEvent, eHandler); } } }, _openClick : function(e, el, options) { var f = void 0 !== options.midClick ? options.midClick : $.magnificPopup.defaults.midClick; if (f || !(2 === e.which || e.ctrlKey || e.metaKey || e.altKey || e.shiftKey)) { var disableOn = void 0 !== options.disableOn ? options.disableOn : $.magnificPopup.defaults.disableOn; if (disableOn) { if ($.isFunction(disableOn)) { if (!disableOn.call(mfp)) { return true; } } else { if (_window.width() < disableOn) { return true; } } } if (e.type) { e.preventDefault(); if (mfp.isOpen) { e.stopPropagation(); } } options.el = $(e.mfpEl); if (options.delegate) { options.items = el.find(options.delegate); } mfp.open(options); } }, updateStatus : function(status, text) { if (mfp.preloader) { if (_prevStatus !== status) { mfp.container.removeClass("mfp-s-" + _prevStatus); } if (!(text || "loading" !== status)) { text = mfp.st.tLoading; } var data = { status : status, text : text }; _mfpTrigger("UpdateStatus", data); status = data.status; text = data.text; mfp.preloader.html(text); mfp.preloader.find("a").on("click", function(event) { event.stopImmediatePropagation(); }); mfp.container.addClass("mfp-s-" + status); /** @type {string} */ _prevStatus = status; } }, _checkIfClose : function(target) { if (!$(target).hasClass(PREVENT_CLOSE_CLASS)) { var valueLength = mfp.st.closeOnContentClick; var hint = mfp.st.closeOnBgClick; if (valueLength && hint) { return true; } if (!mfp.content || $(target).hasClass("mfp-close") || mfp.preloader && target === mfp.preloader[0]) { return true; } if (target === mfp.content[0] || $.contains(mfp.content[0], target)) { if (valueLength) { return true; } } else { if (hint && $.contains(document, target)) { return true; } } return false; } }, _addClassToMFP : function(cName) { mfp.bgOverlay.addClass(cName); mfp.wrap.addClass(cName); }, _removeClassFromMFP : function(cName) { this.bgOverlay.removeClass(cName); mfp.wrap.removeClass(cName); }, _hasScrollBar : function(winHeight) { return (mfp.isIE7 ? _document.height() : document.body.scrollHeight) > (winHeight || _window.height()); }, _setFocus : function() { (mfp.st.focus ? mfp.content.find(mfp.st.focus).eq(0) : mfp.wrap).focus(); }, _onFocusIn : function(e) { return e.target === mfp.wrap[0] || $.contains(mfp.wrap[0], e.target) ? void 0 : (mfp._setFocus(), false); }, _parseMarkup : function(template, values, item) { var arr; if (item.data) { values = $.extend(item.data, values); } _mfpTrigger(MARKUP_PARSE_EVENT, [template, values, item]); $.each(values, function(key, a) { if (void 0 === a || a === false) { return true; } if (arr = key.split("_"), arr.length > 1) { var t = template.find(EVENT_NS + "-" + arr[0]); if (t.length > 0) { var type = arr[1]; if ("replaceWith" === type) { if (t[0] !== a[0]) { t.replaceWith(a); } } else { if ("img" === type) { if (t.is("img")) { t.attr("src", a); } else { t.replaceWith($("").attr("src", a).attr("class", t.attr("class"))); } } else { t.attr(arr[1], a); } } } } else { template.find(EVENT_NS + "-" + key).html(a); } }); }, _getScrollbarSize : function() { if (void 0 === mfp.scrollbarSize) { /** @type {!Element} */ var div = document.createElement("div"); /** @type {string} */ div.style.cssText = "width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;"; document.body.appendChild(div); /** @type {number} */ mfp.scrollbarSize = div.offsetWidth - div.clientWidth; document.body.removeChild(div); } return mfp.scrollbarSize; } }; $.magnificPopup = { instance : null, proto : MagnificPopup.prototype, modules : [], open : function(options, index) { return _checkInstance(), options = options ? $.extend(true, {}, options) : {}, options.isObj = true, options.index = index || 0, this.instance.open(options); }, close : function() { return $.magnificPopup.instance && $.magnificPopup.instance.close(); }, registerModule : function(name, module) { if (module.options) { $.magnificPopup.defaults[name] = module.options; } $.extend(this.proto, module.proto); this.modules.push(name); }, defaults : { disableOn : 0, key : null, midClick : false, mainClass : "", preloader : true, focus : "", closeOnContentClick : false, closeOnBgClick : true, closeBtnInside : true, showCloseBtn : true, enableEscapeKey : true, modal : false, alignTop : false, removalDelay : 0, prependTo : null, fixedContentPos : "auto", fixedBgPos : "auto", overflowY : "auto", closeMarkup : '', tClose : "Close (Esc)", tLoading : "Loading...", autoFocusLast : true } }; /** * @param {string} options * @return {?} */ $.fn.magnificPopup = function(options) { _checkInstance(); var jqEl = $(this); if ("string" == typeof options) { if ("open" === options) { var items; var itemOpts = _isJQ ? jqEl.data("magnificPopup") : jqEl[0].magnificPopup; /** @type {number} */ var index = parseInt(arguments[1], 10) || 0; if (itemOpts.items) { items = itemOpts.items[index]; } else { items = jqEl; if (itemOpts.delegate) { items = items.find(itemOpts.delegate); } items = items.eq(index); } mfp._openClick({ mfpEl : items }, jqEl, itemOpts); } else { if (mfp.isOpen) { mfp[options].apply(mfp, Array.prototype.slice.call(arguments, 1)); } } } else { options = $.extend(true, {}, options); if (_isJQ) { jqEl.data("magnificPopup", options); } else { /** @type {string} */ jqEl[0].magnificPopup = options; } mfp.addGroup(jqEl, options); } return jqEl; }; var _hiddenClass; var _inlinePlaceholder; var _lastInlineElement; /** @type {string} */ var INLINE_NS = "inline"; /** * @return {undefined} */ var _putInlineElementsBack = function() { if (_lastInlineElement) { _inlinePlaceholder.after(_lastInlineElement.addClass(_hiddenClass)).detach(); /** @type {null} */ _lastInlineElement = null; } }; $.magnificPopup.registerModule(INLINE_NS, { options : { hiddenClass : "hide", markup : "", tNotFound : "Content not found" }, proto : { initInline : function() { mfp.types.push(INLINE_NS); _mfpOn(CLOSE_EVENT + "." + INLINE_NS, function() { _putInlineElementsBack(); }); }, getInline : function(item, template) { if (_putInlineElementsBack(), item.src) { var inlineSt = mfp.st.inline; var el = $(item.src); if (el.length) { var tmpNode = el[0].parentNode; if (tmpNode && tmpNode.tagName) { if (!_inlinePlaceholder) { _hiddenClass = inlineSt.hiddenClass; _inlinePlaceholder = _getEl(_hiddenClass); /** @type {string} */ _hiddenClass = "mfp-" + _hiddenClass; } _lastInlineElement = el.after(_inlinePlaceholder).detach().removeClass(_hiddenClass); } mfp.updateStatus("ready"); } else { mfp.updateStatus("error", inlineSt.tNotFound); el = $("
"); } return item.inlineElement = el, el; } return mfp.updateStatus("ready"), mfp._parseMarkup(template, {}, item), template; } } }); var _ajaxCur; /** @type {string} */ var AJAX_NS = "ajax"; /** * @return {undefined} */ var _removeAjaxCursor = function() { if (_ajaxCur) { $(document.body).removeClass(_ajaxCur); } }; /** * @return {undefined} */ var _destroyAjaxRequest = function() { _removeAjaxCursor(); if (mfp.req) { mfp.req.abort(); } }; $.magnificPopup.registerModule(AJAX_NS, { options : { settings : null, cursor : "mfp-ajax-cur", tError : 'The content could not be loaded.' }, proto : { initAjax : function() { mfp.types.push(AJAX_NS); _ajaxCur = mfp.st.ajax.cursor; _mfpOn(CLOSE_EVENT + "." + AJAX_NS, _destroyAjaxRequest); _mfpOn("BeforeChange." + AJAX_NS, _destroyAjaxRequest); }, getAjax : function(item) { if (_ajaxCur) { $(document.body).addClass(_ajaxCur); } mfp.updateStatus("loading"); var opts = $.extend({ url : item.src, success : function(value, status, xhr) { var temp = { data : value, xhr : xhr }; _mfpTrigger("ParseAjax", temp); mfp.appendContent($(temp.data), AJAX_NS); /** @type {boolean} */ item.finished = true; _removeAjaxCursor(); mfp._setFocus(); setTimeout(function() { mfp.wrap.addClass(READY_CLASS); }, 16); mfp.updateStatus("ready"); _mfpTrigger("AjaxContentAdded"); }, error : function() { _removeAjaxCursor(); /** @type {boolean} */ item.finished = item.loadError = true; mfp.updateStatus("error", mfp.st.ajax.tError.replace("%url%", item.src)); } }, mfp.st.ajax.settings); return mfp.req = $.ajax(opts), ""; } } }); var interval; /** * @param {!Object} item * @return {?} */ var _getTitle = function(item) { if (item.data && void 0 !== item.data.title) { return item.data.title; } var src = mfp.st.image.titleSrc; if (src) { if ($.isFunction(src)) { return src.call(mfp, item); } if (item.el) { return item.el.attr(src) || ""; } } return ""; }; $.magnificPopup.registerModule("image", { options : { markup : '
', cursor : "mfp-zoom-out-cur", titleSrc : "title", verticalFit : true, tError : 'The image could not be loaded.' }, proto : { initImage : function() { var imgSt = mfp.st.image; /** @type {string} */ var ns = ".image"; mfp.types.push("image"); _mfpOn(OPEN_EVENT + ns, function() { if ("image" === mfp.currItem.type && imgSt.cursor) { $(document.body).addClass(imgSt.cursor); } }); _mfpOn(CLOSE_EVENT + ns, function() { if (imgSt.cursor) { $(document.body).removeClass(imgSt.cursor); } _window.off("resize" + EVENT_NS); }); _mfpOn("Resize" + ns, mfp.resizeImage); if (mfp.isLowIE) { _mfpOn("AfterChange", mfp.resizeImage); } }, resizeImage : function() { var item = mfp.currItem; if (item && item.img && mfp.st.image.verticalFit) { /** @type {number} */ var decr = 0; if (mfp.isLowIE) { /** @type {number} */ decr = parseInt(item.img.css("padding-top"), 10) + parseInt(item.img.css("padding-bottom"), 10); } item.img.css("max-height", mfp.wH - decr); } }, _onImageHasSize : function(item) { if (item.img) { /** @type {boolean} */ item.hasSize = true; if (interval) { clearInterval(interval); } /** @type {boolean} */ item.isCheckingImgSize = false; _mfpTrigger("ImageHasSize", item); if (item.imgHidden) { if (mfp.content) { mfp.content.removeClass("mfp-loading"); } /** @type {boolean} */ item.imgHidden = false; } } }, findImageSize : function(item) { /** @type {number} */ var c = 0; var descImage = item.img[0]; /** * @param {number} delay * @return {undefined} */ var mfpSetInterval = function(delay) { if (interval) { clearInterval(interval); } /** @type {number} */ interval = setInterval(function() { return descImage.naturalWidth > 0 ? void mfp._onImageHasSize(item) : (c > 200 && clearInterval(interval), c++, void(3 === c ? mfpSetInterval(10) : 40 === c ? mfpSetInterval(50) : 100 === c && mfpSetInterval(500))); }, delay); }; mfpSetInterval(1); }, getImage : function(item, template) { /** @type {number} */ var e = 0; /** * @return {undefined} */ var onLoadComplete = function() { if (item) { if (item.img[0].complete) { item.img.off(".mfploader"); if (item === mfp.currItem) { mfp._onImageHasSize(item); mfp.updateStatus("ready"); } /** @type {boolean} */ item.hasSize = true; /** @type {boolean} */ item.loaded = true; _mfpTrigger("ImageLoadComplete"); } else { e++; if (200 > e) { setTimeout(onLoadComplete, 100); } else { onLoadError(); } } } }; /** * @return {undefined} */ var onLoadError = function() { if (item) { item.img.off(".mfploader"); if (item === mfp.currItem) { mfp._onImageHasSize(item); mfp.updateStatus("error", imgSt.tError.replace("%url%", item.src)); } /** @type {boolean} */ item.hasSize = true; /** @type {boolean} */ item.loaded = true; /** @type {boolean} */ item.loadError = true; } }; var imgSt = mfp.st.image; var $btnFollow = template.find(".mfp-img"); if ($btnFollow.length) { /** @type {!Element} */ var img = document.createElement("img"); /** @type {string} */ img.className = "mfp-img"; if (item.el && item.el.find("img").length) { img.alt = item.el.find("img").attr("alt"); } item.img = $(img).on("load.mfploader", onLoadComplete).on("error.mfploader", onLoadError); img.src = item.src; if ($btnFollow.is("img")) { item.img = item.img.clone(); } img = item.img[0]; if (img.naturalWidth > 0) { /** @type {boolean} */ item.hasSize = true; } else { if (!img.width) { /** @type {boolean} */ item.hasSize = false; } } } return mfp._parseMarkup(template, { title : _getTitle(item), img_replaceWith : item.img }, item), mfp.resizeImage(), item.hasSize ? (interval && clearInterval(interval), item.loadError ? (template.addClass("mfp-loading"), mfp.updateStatus("error", imgSt.tError.replace("%url%", item.src))) : (template.removeClass("mfp-loading"), mfp.updateStatus("ready")), template) : (mfp.updateStatus("loading"), item.loading = true, item.hasSize || (item.imgHidden = true, template.addClass("mfp-loading"), mfp.findImageSize(item)), template); } } }); var N; /** * @return {?} */ var getHasMozTransform = function() { return void 0 === N && (N = void 0 !== document.createElement("p").style.MozTransform), N; }; $.magnificPopup.registerModule("zoom", { options : { enabled : false, easing : "ease-in-out", duration : 300, opener : function(element) { return element.is("img") ? element : element.find("img"); } }, proto : { initZoom : function() { var image; var zoomSt = mfp.st.zoom; /** @type {string} */ var ns = ".zoom"; if (zoomSt.enabled && mfp.supportsTransition) { var openTimeout; var animatedImg; var duration = zoomSt.duration; /** * @param {?} image * @return {?} */ var getElToAnimate = function(image) { var newImg = image.clone().removeAttr("style").removeAttr("class").addClass("mfp-animated-image"); /** @type {string} */ var transition = "all " + zoomSt.duration / 1E3 + "s " + zoomSt.easing; var cssObj = { position : "fixed", zIndex : 9999, left : 0, top : 0, "-webkit-backface-visibility" : "hidden" }; /** @type {string} */ var t = "transition"; return cssObj["-webkit-" + t] = cssObj["-moz-" + t] = cssObj["-o-" + t] = cssObj[t] = transition, newImg.css(cssObj), newImg; }; /** * @return {undefined} */ var showMainContent = function() { mfp.content.css("visibility", "visible"); }; _mfpOn("BuildControls" + ns, function() { if (mfp._allowZoom()) { if (clearTimeout(openTimeout), mfp.content.css("visibility", "hidden"), image = mfp._getItemToZoom(), !image) { return void showMainContent(); } animatedImg = getElToAnimate(image); animatedImg.css(mfp._getOffset()); mfp.wrap.append(animatedImg); /** @type {number} */ openTimeout = setTimeout(function() { animatedImg.css(mfp._getOffset(true)); /** @type {number} */ openTimeout = setTimeout(function() { showMainContent(); setTimeout(function() { animatedImg.remove(); /** @type {null} */ image = animatedImg = null; _mfpTrigger("ZoomAnimationEnded"); }, 16); }, duration); }, 16); } }); _mfpOn(BEFORE_CLOSE_EVENT + ns, function() { if (mfp._allowZoom()) { if (clearTimeout(openTimeout), mfp.st.removalDelay = duration, !image) { if (image = mfp._getItemToZoom(), !image) { return; } animatedImg = getElToAnimate(image); } animatedImg.css(mfp._getOffset(true)); mfp.wrap.append(animatedImg); mfp.content.css("visibility", "hidden"); setTimeout(function() { animatedImg.css(mfp._getOffset()); }, 16); } }); _mfpOn(CLOSE_EVENT + ns, function() { if (mfp._allowZoom()) { showMainContent(); if (animatedImg) { animatedImg.remove(); } /** @type {null} */ image = null; } }); } }, _allowZoom : function() { return "image" === mfp.currItem.type; }, _getItemToZoom : function() { return mfp.currItem.hasSize ? mfp.currItem.img : false; }, _getOffset : function(isLarge) { var $wrapper; $wrapper = isLarge ? mfp.currItem.img : mfp.st.zoom.opener(mfp.currItem.el || mfp.currItem); var offset = $wrapper.offset(); /** @type {number} */ var paddingTop = parseInt($wrapper.css("padding-top"), 10); /** @type {number} */ var paddingBottom = parseInt($wrapper.css("padding-bottom"), 10); offset.top -= $(window).scrollTop() - paddingTop; var obj = { width : $wrapper.width(), height : (_isJQ ? $wrapper.innerHeight() : $wrapper[0].offsetHeight) - paddingBottom - paddingTop }; return getHasMozTransform() ? obj["-moz-transform"] = obj.transform = "translate(" + offset.left + "px," + offset.top + "px)" : (obj.left = offset.left, obj.top = offset.top), obj; } } }); /** @type {string} */ var IFRAME_NS = "iframe"; /** @type {string} */ var normalSrc = "//about:blank"; /** * @param {boolean} isShowing * @return {undefined} */ var _fixIframeBugs = function(isShowing) { if (mfp.currTemplate[IFRAME_NS]) { var el = mfp.currTemplate[IFRAME_NS].find("iframe"); if (el.length) { if (!isShowing) { /** @type {string} */ el[0].src = normalSrc; } if (mfp.isIE8) { el.css("display", isShowing ? "block" : "none"); } } } }; $.magnificPopup.registerModule(IFRAME_NS, { options : { markup : '
', srcAction : "iframe_src", patterns : { youtube : { index : "youtube.com", id : "v=", src : "//www.youtube.com/embed/%id%?autoplay=1" }, vimeo : { index : "vimeo.com/", id : "/", src : "//player.vimeo.com/video/%id%?autoplay=1" }, gmaps : { index : "//maps.google.", src : "%id%&output=embed" } } }, proto : { initIframe : function() { mfp.types.push(IFRAME_NS); _mfpOn("BeforeChange", function(a, prevType, newType) { if (prevType !== newType) { if (prevType === IFRAME_NS) { _fixIframeBugs(); } else { if (newType === IFRAME_NS) { _fixIframeBugs(true); } } } }); _mfpOn(CLOSE_EVENT + "." + IFRAME_NS, function() { _fixIframeBugs(); }); }, getIframe : function(item, template) { var embedSrc = item.src; var iframeSt = mfp.st.iframe; $.each(iframeSt.patterns, function() { return embedSrc.indexOf(this.index) > -1 ? (this.id && (embedSrc = "string" == typeof this.id ? embedSrc.substr(embedSrc.lastIndexOf(this.id) + this.id.length, embedSrc.length) : this.id.call(this, embedSrc)), embedSrc = this.src.replace("%id%", embedSrc), false) : void 0; }); var dataObj = {}; return iframeSt.srcAction && (dataObj[iframeSt.srcAction] = embedSrc), mfp._parseMarkup(template, dataObj, item), mfp.updateStatus("ready"), template; } } }); /** * @param {number} index * @return {?} */ var _getLoopedId = function(index) { var numSlides = mfp.items.length; return index > numSlides - 1 ? index - numSlides : 0 > index ? numSlides + index : index; }; /** * @param {string} text * @param {number} curr * @param {?} total * @return {?} */ var _replaceCurrTotal = function(text, curr, total) { return text.replace(/%curr%/gi, curr + 1).replace(/%total%/gi, total); }; $.magnificPopup.registerModule("gallery", { options : { enabled : false, arrowMarkup : '', preload : [0, 2], navigateByImgClick : true, arrows : true, tPrev : "Previous (Left arrow key)", tNext : "Next (Right arrow key)", tCounter : "%curr% of %total%" }, proto : { initGallery : function() { var gSt = mfp.st.gallery; /** @type {string} */ var ns = ".mfp-gallery"; return mfp.direction = true, gSt && gSt.enabled ? (val = val + " mfp-gallery", _mfpOn(OPEN_EVENT + ns, function() { if (gSt.navigateByImgClick) { mfp.wrap.on("click" + ns, ".mfp-img", function() { return mfp.items.length > 1 ? (mfp.next(), false) : void 0; }); } _document.on("keydown" + ns, function(event) { if (37 === event.keyCode) { mfp.prev(); } else { if (39 === event.keyCode) { mfp.next(); } } }); }), _mfpOn("UpdateStatus" + ns, function(a, data) { if (data.text) { data.text = _replaceCurrTotal(data.text, mfp.currItem.index, mfp.items.length); } }), _mfpOn(MARKUP_PARSE_EVENT + ns, function(a, canCreateDiscussions, init, item) { var l = mfp.items.length; init.counter = l > 1 ? _replaceCurrTotal(gSt.tCounter, item.index, l) : ""; }), _mfpOn("BuildControls" + ns, function() { if (mfp.items.length > 1 && gSt.arrows && !mfp.arrowLeft) { var markup = gSt.arrowMarkup; var e = mfp.arrowLeft = $(markup.replace(/%title%/gi, gSt.tPrev).replace(/%dir%/gi, "left")).addClass(PREVENT_CLOSE_CLASS); var f = mfp.arrowRight = $(markup.replace(/%title%/gi, gSt.tNext).replace(/%dir%/gi, "right")).addClass(PREVENT_CLOSE_CLASS); e.click(function() { mfp.prev(); }); f.click(function() { mfp.next(); }); mfp.container.append(e.add(f)); } }), _mfpOn(CHANGE_EVENT + ns, function() { if (mfp._preloadTimeout) { clearTimeout(mfp._preloadTimeout); } /** @type {number} */ mfp._preloadTimeout = setTimeout(function() { mfp.preloadNearbyImages(); /** @type {null} */ mfp._preloadTimeout = null; }, 16); }), void _mfpOn(CLOSE_EVENT + ns, function() { _document.off(ns); mfp.wrap.off("click" + ns); /** @type {null} */ mfp.arrowRight = mfp.arrowLeft = null; })) : false; }, next : function() { /** @type {boolean} */ mfp.direction = true; mfp.index = _getLoopedId(mfp.index + 1); mfp.updateItemHTML(); }, prev : function() { /** @type {boolean} */ mfp.direction = false; mfp.index = _getLoopedId(mfp.index - 1); mfp.updateItemHTML(); }, goTo : function(newIndex) { /** @type {boolean} */ mfp.direction = newIndex >= mfp.index; /** @type {number} */ mfp.index = newIndex; mfp.updateItemHTML(); }, preloadNearbyImages : function() { var i; var p = mfp.st.gallery.preload; /** @type {number} */ var preloadBefore = Math.min(p[0], mfp.items.length); /** @type {number} */ var preloadAfter = Math.min(p[1], mfp.items.length); /** @type {number} */ i = 1; for (; i <= (mfp.direction ? preloadAfter : preloadBefore); i++) { mfp._preloadItem(mfp.index + i); } /** @type {number} */ i = 1; for (; i <= (mfp.direction ? preloadBefore : preloadAfter); i++) { mfp._preloadItem(mfp.index - i); } }, _preloadItem : function(index) { if (index = _getLoopedId(index), !mfp.items[index].preloaded) { var item = mfp.items[index]; if (!item.parsed) { item = mfp.parseEl(index); } _mfpTrigger("LazyLoad", item); if ("image" === item.type) { item.img = $('').on("load.mfploader", function() { /** @type {boolean} */ item.hasSize = true; }).on("error.mfploader", function() { /** @type {boolean} */ item.hasSize = true; /** @type {boolean} */ item.loadError = true; _mfpTrigger("LazyLoadError", item); }).attr("src", item.src); } /** @type {boolean} */ item.preloaded = true; } } } }); /** @type {string} */ var RETINA_NS = "retina"; $.magnificPopup.registerModule(RETINA_NS, { options : { replaceSrc : function(src) { return src.src.replace(/\.\w+$/, function(a) { return "@2x" + a; }); }, ratio : 1 }, proto : { initRetina : function() { if (window.devicePixelRatio > 1) { var st = mfp.st.retina; var ratio = st.ratio; ratio = isNaN(ratio) ? ratio() : ratio; if (ratio > 1) { _mfpOn("ImageHasSize." + RETINA_NS, function(a, Ctrl) { Ctrl.img.css({ "max-width" : Ctrl.img[0].naturalWidth / ratio, width : "100%" }); }); _mfpOn("ElementParse." + RETINA_NS, function(b, item) { item.src = st.replaceSrc(item, ratio); }); } } } } }); _checkInstance(); });