/** * Featherlight - ultra slim jQuery lightbox * Version 1.7.13 - http://noelboss.github.io/featherlight/ * * Copyright 2018, Noël Raoul Bossart (http://www.noelboss.com) * MIT Licensed. **/ !function (a) { "use strict"; function b(a, c) { if (!(this instanceof b)) { var d = new b(a, c); return d.open(), d } this.id = b.id++, this.setup(a, c), this.chainCallbacks(b._callbackChain) } function c(a, b) { var c = {}; for (var d in a) d in b && (c[d] = a[d], delete a[d]); return c } function d(a, b) { var c = {}, d = new RegExp("^" + b + "([A-Z])(.*)"); for (var e in a) { var f = e.match(d); if (f) { var g = (f[1] + f[2].replace(/([A-Z])/g, "-$1")).toLowerCase(); c[g] = a[e] } } return c } if ("undefined" == typeof a) return void ("console" in window && window.console.info("Too much lightness, Featherlight needs jQuery.")); if (a.fn.jquery.match(/-ajax/)) return void ("console" in window && window.console.info("Featherlight needs regular jQuery, not the slim version.")); var e = [], f = function (b) { return e = a.grep(e, function (a) { return a !== b && a.$instance.closest("body").length > 0 }) }, g = { allow: 1, allowfullscreen: 1, frameborder: 1, height: 1, longdesc: 1, marginheight: 1, marginwidth: 1, mozallowfullscreen: 1, name: 1, referrerpolicy: 1, sandbox: 1, scrolling: 1, src: 1, srcdoc: 1, style: 1, webkitallowfullscreen: 1, width: 1 }, h = { keyup: "onKeyUp", resize: "onResize" }, i = function (c) { a.each(b.opened().reverse(), function () { return c.isDefaultPrevented() || !1 !== this[h[c.type]](c) ? void 0 : (c.preventDefault(), c.stopPropagation(), !1) }) }, j = function (c) { if (c !== b._globalHandlerInstalled) { b._globalHandlerInstalled = c; var d = a.map(h, function (a, c) { return c + "." + b.prototype.namespace }).join(" "); a(window)[c ? "on" : "off"](d, i) } }; b.prototype = { constructor: b, namespace: "featherlight", targetAttr: "data-featherlight", variant: null, resetCss: !1, background: null, openTrigger: "click", closeTrigger: "click", filter: null, root: "body", openSpeed: 250, closeSpeed: 250, closeOnClick: "background", closeOnEsc: !0, closeIcon: "✕", loading: "", persist: !1, otherClose: null, beforeOpen: a.noop, beforeContent: a.noop, beforeClose: a.noop, afterOpen: a.noop, afterContent: a.noop, afterClose: a.noop, onKeyUp: a.noop, onResize: a.noop, type: null, contentFilters: ["jquery", "image", "html", "ajax", "iframe", "text"], setup: function (b, c) { "object" != typeof b || b instanceof a != !1 || c || (c = b, b = void 0); var d = a.extend(this, c, { target: b }), e = d.resetCss ? d.namespace + "-reset" : d.namespace, f = a(d.background || ['
', '
', '", '
' + d.loading + "
", "
", "
"].join("")), g = "." + d.namespace + "-close" + (d.otherClose ? "," + d.otherClose : ""); return d.$instance = f.clone().addClass(d.variant), d.$instance.on(d.closeTrigger + "." + d.namespace, function (b) { if (!b.isDefaultPrevented()) { var c = a(b.target); ("background" === d.closeOnClick && c.is("." + d.namespace) || "anywhere" === d.closeOnClick || c.closest(g).length) && (d.close(b), b.preventDefault()) } }), this }, getContent: function () { if (this.persist !== !1 && this.$content) return this.$content; var b = this, c = this.constructor.contentFilters, d = function (a) { return b.$currentTarget && b.$currentTarget.attr(a) }, e = d(b.targetAttr), f = b.target || e || "", g = c[b.type]; if (!g && f in c && (g = c[f], f = b.target && e), f = f || d("href") || "", !g) for (var h in c) b[h] && (g = c[h], f = b[h]); if (!g) { var i = f; if (f = null, a.each(b.contentFilters, function () { return g = c[this], g.test && (f = g.test(i)), !f && g.regex && i.match && i.match(g.regex) && (f = i), !f }), !f) return "console" in window && window.console.error("Featherlight: no content filter found " + (i ? ' for "' + i + '"' : " (no target specified)")), !1 } return g.process.call(b, f) }, setContent: function (b) { return this.$instance.removeClass(this.namespace + "-loading"), this.$instance.toggleClass(this.namespace + "-iframe", b.is("iframe")), this.$instance.find("." + this.namespace + "-inner").not(b).slice(1).remove().end().replaceWith(a.contains(this.$instance[0], b[0]) ? "" : b), this.$content = b.addClass(this.namespace + "-inner"), this }, open: function (b) { var c = this; if (c.$instance.hide().appendTo(c.root), !(b && b.isDefaultPrevented() || c.beforeOpen(b) === !1)) { b && b.preventDefault(); var d = c.getContent(); if (d) return e.push(c), j(!0), c.$instance.fadeIn(c.openSpeed), c.beforeContent(b), a.when(d).always(function (a) { c.setContent(a), c.afterContent(b) }).then(c.$instance.promise()).done(function () { c.afterOpen(b) }) } return c.$instance.detach(), a.Deferred().reject().promise() }, close: function (b) { var c = this, d = a.Deferred(); return c.beforeClose(b) === !1 ? d.reject() : (0 === f(c).length && j(!1), c.$instance.fadeOut(c.closeSpeed, function () { c.$instance.detach(), c.afterClose(b), d.resolve() })), d.promise() }, resize: function (a, b) { if (a && b) { this.$content.css("width", "").css("height", ""); var c = Math.max(a / (this.$content.parent().width() - 1), b / (this.$content.parent().height() - 1)); c > 1 && (c = b / Math.floor(b / c), this.$content.css("width", "" + a / c + "px").css("height", "" + b / c + "px")) } }, chainCallbacks: function (b) { for (var c in b) this[c] = a.proxy(b[c], this, a.proxy(this[c], this)) } }, a.extend(b, { id: 0, autoBind: "[data-featherlight]", defaults: b.prototype, contentFilters: { jquery: { regex: /^[#.]\w/, test: function (b) { return b instanceof a && b }, process: function (b) { return this.persist !== !1 ? a(b) : a(b).clone(!0) } }, image: { regex: /\.(png|jpg|jpeg|gif|tiff?|bmp|svg)(\?\S*)?$/i, process: function (b) { var c = this, d = a.Deferred(), e = new Image, f = a(''); return e.onload = function () { f.naturalWidth = e.width, f.naturalHeight = e.height, d.resolve(f) }, e.onerror = function () { d.reject(f) }, e.src = b, d.promise() } }, html: { regex: /^\s*<[\w!][^<]*>/, process: function (b) { return a(b) } }, ajax: { regex: /./, process: function (b) { var c = a.Deferred(), d = a("
").load(b, function (a, b) { "error" !== b && c.resolve(d.contents()), c.fail() }); return c.promise() } }, iframe: { process: function (b) { var e = new a.Deferred, f = a("