/*! * Infinite Scroll PACKAGED v4.0.1 * Automatically add next page * * Licensed GPLv3 for open source use * or Infinite Scroll Commercial License for commercial use * * https://infinite-scroll.com * Copyright 2018-2020 Metafizzy */ !(function (t, e) { "object" == typeof module && module.exports ? (module.exports = e(t, require("jquery"))) : (t.jQueryBridget = e(t, t.jQuery)); })(window, function (t, e) { let i = t.console, n = void 0 === i ? function () {} : function (t) { i.error(t); }; return function (i, o, s) { (s = s || e || t.jQuery) && (o.prototype.option || (o.prototype.option = function (t) { t && (this.options = Object.assign(this.options || {}, t)); }), (s.fn[i] = function (t, ...e) { return "string" == typeof t ? (function (t, e, o) { let r, l = `$().${i}("${e}")`; return ( t.each(function (t, h) { let a = s.data(h, i); if (!a) return void n( `${i} not initialized. Cannot call method ${l}` ); let c = a[e]; if (!c || "_" == e.charAt(0)) return void n(`${l} is not a valid method`); let u = c.apply(a, o); r = void 0 === r ? u : r; }), void 0 !== r ? r : t ); })(this, t, e) : ((r = t), this.each(function (t, e) { let n = s.data(e, i); n ? (n.option(r), n._init()) : ((n = new o(e, r)), s.data(e, i, n)); }), this); var r; })); }; }), (function (t, e) { "object" == typeof module && module.exports ? (module.exports = e()) : (t.EvEmitter = e()); })("undefined" != typeof window ? window : this, function () { function t() {} let e = t.prototype; return ( (e.on = function (t, e) { if (!t || !e) return this; let i = (this._events = this._events || {}), n = (i[t] = i[t] || []); return n.includes(e) || n.push(e), this; }), (e.once = function (t, e) { if (!t || !e) return this; this.on(t, e); let i = (this._onceEvents = this._onceEvents || {}); return ((i[t] = i[t] || {})[e] = !0), this; }), (e.off = function (t, e) { let i = this._events && this._events[t]; if (!i || !i.length) return this; let n = i.indexOf(e); return -1 != n && i.splice(n, 1), this; }), (e.emitEvent = function (t, e) { let i = this._events && this._events[t]; if (!i || !i.length) return this; (i = i.slice(0)), (e = e || []); let n = this._onceEvents && this._onceEvents[t]; for (let o of i) { n && n[o] && (this.off(t, o), delete n[o]), o.apply(this, e); } return this; }), (e.allOff = function () { return delete this._events, delete this._onceEvents, this; }), t ); }), (function (t, e) { "object" == typeof module && module.exports ? (module.exports = e(t)) : (t.fizzyUIUtils = e(t)); })(this, function (t) { let e = { extend: function (t, e) { return Object.assign(t, e); }, modulo: function (t, e) { return ((t % e) + e) % e; }, makeArray: function (t) { if (Array.isArray(t)) return t; if (null == t) return []; return "object" == typeof t && "number" == typeof t.length ? [...t] : [t]; }, removeFrom: function (t, e) { let i = t.indexOf(e); -1 != i && t.splice(i, 1); }, getParent: function (t, e) { for (; t.parentNode && t != document.body; ) if ((t = t.parentNode).matches(e)) return t; }, getQueryElement: function (t) { return "string" == typeof t ? document.querySelector(t) : t; }, handleEvent: function (t) { let e = "on" + t.type; this[e] && this[e](t); }, filterFindElements: function (t, i) { return (t = e.makeArray(t)) .filter((t) => t instanceof HTMLElement) .reduce((t, e) => { if (!i) return t.push(e), t; e.matches(i) && t.push(e); let n = e.querySelectorAll(i); return (t = t.concat(...n)); }, []); }, debounceMethod: function (t, e, i) { i = i || 100; let n = t.prototype[e], o = e + "Timeout"; t.prototype[e] = function () { clearTimeout(this[o]); let t = arguments; this[o] = setTimeout(() => { n.apply(this, t), delete this[o]; }, i); }; }, docReady: function (t) { let e = document.readyState; "complete" == e || "interactive" == e ? setTimeout(t) : document.addEventListener("DOMContentLoaded", t); }, toDashed: function (t) { return t .replace(/(.)([A-Z])/g, function (t, e, i) { return e + "-" + i; }) .toLowerCase(); }, }, i = t.console; return ( (e.htmlInit = function (n, o) { e.docReady(function () { let s = "data-" + e.toDashed(o), r = document.querySelectorAll(`[${s}]`), l = t.jQuery; [...r].forEach((t) => { let e, r = t.getAttribute(s); try { e = r && JSON.parse(r); } catch (e) { return void ( i && i.error(`Error parsing ${s} on ${t.className}: ${e}`) ); } let h = new n(t, e); l && l.data(t, o, h); }); }); }), e ); }), (function (t, e) { "object" == typeof module && module.exports ? (module.exports = e( t, require("ev-emitter"), require("fizzy-ui-utils") )) : (t.InfiniteScroll = e(t, t.EvEmitter, t.fizzyUIUtils)); })(window, function (t, e, i) { let n = t.jQuery, o = {}; function s(t, e) { let r = i.getQueryElement(t); if (r) { if ((t = r).infiniteScrollGUID) { let i = o[t.infiniteScrollGUID]; return i.option(e), i; } (this.element = t), (this.options = { ...s.defaults }), this.option(e), n && (this.$element = n(this.element)), this.create(); } else console.error("Bad element for InfiniteScroll: " + (r || t)); } (s.defaults = {}), (s.create = {}), (s.destroy = {}); let r = s.prototype; Object.assign(r, e.prototype); let l = 0; (r.create = function () { let t = (this.guid = ++l); if ( ((this.element.infiniteScrollGUID = t), (o[t] = this), (this.pageIndex = 1), (this.loadCount = 0), this.updateGetPath(), this.getPath && this.getPath()) ) { this.updateGetAbsolutePath(), this.log("initialized", [this.element.className]), this.callOnInit(); for (let t in s.create) s.create[t].call(this); } else console.error("Disabling InfiniteScroll"); }), (r.option = function (t) { Object.assign(this.options, t); }), (r.callOnInit = function () { let t = this.options.onInit; t && t.call(this, this); }), (r.dispatchEvent = function (t, e, i) { this.log(t, i); let o = e ? [e].concat(i) : i; if ((this.emitEvent(t, o), !n || !this.$element)) return; let s = (t += ".infiniteScroll"); if (e) { let i = n.Event(e); (i.type = t), (s = i); } this.$element.trigger(s, i); }); let h = { initialized: (t) => `on ${t}`, request: (t) => `URL: ${t}`, load: (t, e) => `${t.title || ""}. URL: ${e}`, error: (t, e) => `${t}. URL: ${e}`, append: (t, e, i) => `${i.length} items. URL: ${e}`, last: (t, e) => `URL: ${e}`, history: (t, e) => `URL: ${e}`, pageIndex: function (t, e) { return `current page determined to be: ${t} from ${e}`; }, }; (r.log = function (t, e) { if (!this.options.debug) return; let i = `[InfiniteScroll] ${t}`, n = h[t]; n && (i += ". " + n.apply(this, e)), console.log(i); }), (r.updateMeasurements = function () { this.windowHeight = t.innerHeight; let e = this.element.getBoundingClientRect(); this.top = e.top + t.scrollY; }), (r.updateScroller = function () { let e = this.options.elementScroll; if (e) { if ( ((this.scroller = !0 === e ? this.element : i.getQueryElement(e)), !this.scroller) ) throw new Error(`Unable to find elementScroll: ${e}`); } else this.scroller = t; }), (r.updateGetPath = function () { let t = this.options.path; if (!t) return void console.error( `InfiniteScroll path option required. Set as: ${t}` ); let e = typeof t; "function" != e ? "string" == e && t.match("{{#}}") ? this.updateGetPathTemplate(t) : this.updateGetPathSelector(t) : (this.getPath = t); }), (r.updateGetPathTemplate = function (t) { this.getPath = () => { let e = this.pageIndex + 1; return t.replace("{{#}}", e); }; let e = t.replace(/(\\\?|\?)/, "\\?").replace("{{#}}", "(\\d\\d?\\d?)"), i = new RegExp(e), n = location.href.match(i); n && ((this.pageIndex = parseInt(n[1], 10)), this.log("pageIndex", [this.pageIndex, "template string"])); }); let a = [ /^(.*?\/?page\/?)(\d\d?\d?)(.*?$)/, /^(.*?\/?\?page=)(\d\d?\d?)(.*?$)/, /(.*?)(\d\d?\d?)(?!.*\d)(.*?$)/, ], c = (s.getPathParts = function (t) { if (t) for (let e of a) { let i = t.match(e); if (i) { let [, t, e, n] = i; return { begin: t, index: e, end: n }; } } }); (r.updateGetPathSelector = function (t) { let e = document.querySelector(t); if (!e) return void console.error( `Bad InfiniteScroll path option. Next link not found: ${t}` ); let i = e.getAttribute("href"), n = c(i); if (!n) return void console.error( `InfiniteScroll unable to parse next link href: ${i}` ); let { begin: o, index: s, end: r } = n; (this.isPathSelector = !0), (this.getPath = () => o + (this.pageIndex + 1) + r), (this.pageIndex = parseInt(s, 10) - 1), this.log("pageIndex", [this.pageIndex, "next link"]); }), (r.updateGetAbsolutePath = function () { let t = this.getPath(); if (t.match(/^http/) || t.match(/^\//)) return void (this.getAbsolutePath = this.getPath); let { pathname: e } = location, i = t.match(/^\?/), n = e.substring(0, e.lastIndexOf("/")), o = i ? e : n + "/"; this.getAbsolutePath = () => o + this.getPath(); }), (s.create.hideNav = function () { let t = i.getQueryElement(this.options.hideNav); t && ((t.style.display = "none"), (this.nav = t)); }), (s.destroy.hideNav = function () { this.nav && (this.nav.style.display = ""); }), (r.destroy = function () { this.allOff(); for (let t in s.destroy) s.destroy[t].call(this); delete this.element.infiniteScrollGUID, delete o[this.guid], n && this.$element && n.removeData(this.element, "infiniteScroll"); }), (s.throttle = function (t, e) { let i, n; return ( (e = e || 200), function () { let o = +new Date(), s = arguments, r = () => { (i = o), t.apply(this, s); }; i && o < i + e ? (clearTimeout(n), (n = setTimeout(r, e))) : r(); } ); }), (s.data = function (t) { let e = (t = i.getQueryElement(t)) && t.infiniteScrollGUID; return e && o[e]; }), (s.setJQuery = function (t) { n = t; }), i.htmlInit(s, "infinite-scroll"), (r._init = function () {}); let { jQueryBridget: u } = t; return n && u && u("infiniteScroll", s, n), s; }), (function (t, e) { "object" == typeof module && module.exports ? (module.exports = e(t, require("./core"))) : e(t, t.InfiniteScroll); })(window, function (t, e) { let i = e.prototype; Object.assign(e.defaults, { loadOnScroll: !0, checkLastPage: !0, responseBody: "text", domParseResponse: !0, }), (e.create.pageLoad = function () { (this.canLoad = !0), this.on("scrollThreshold", this.onScrollThresholdLoad), this.on("load", this.checkLastPage), this.options.outlayer && this.on("append", this.onAppendOutlayer); }), (i.onScrollThresholdLoad = function () { this.options.loadOnScroll && this.loadNextPage(); }); let n = new DOMParser(); function o(t) { let e = document.createDocumentFragment(); return t && e.append(...t), e; } return ( (i.loadNextPage = function () { if (this.isLoading || !this.canLoad) return; let { responseBody: t, domParseResponse: e, fetchOptions: i, } = this.options, o = this.getAbsolutePath(); (this.isLoading = !0), "function" == typeof i && (i = i()); let s = fetch(o, i) .then((i) => { if (!i.ok) { let t = new Error(i.statusText); return this.onPageError(t, o, i), { response: i }; } return i[t]().then( (s) => ( "text" == t && e && (s = n.parseFromString(s, "text/html")), 204 == i.status ? (this.lastPageReached(s, o), { body: s, response: i }) : this.onPageLoad(s, o, i) ) ); }) .catch((t) => { this.onPageError(t, o); }); return this.dispatchEvent("request", null, [o, s]), s; }), (i.onPageLoad = function (t, e, i) { return ( this.options.append || (this.isLoading = !1), this.pageIndex++, this.loadCount++, this.dispatchEvent("load", null, [t, e, i]), this.appendNextPage(t, e, i) ); }), (i.appendNextPage = function (t, e, i) { let { append: n, responseBody: s, domParseResponse: r } = this.options; if (!("text" == s && r) || !n) return { body: t, response: i }; let l = t.querySelectorAll(n), h = { body: t, response: i, items: l }; if (!l || !l.length) return this.lastPageReached(t, e), h; let a = o(l), c = () => ( this.appendItems(l, a), (this.isLoading = !1), this.dispatchEvent("append", null, [t, e, l, i]), h ); return this.options.outlayer ? this.appendOutlayerItems(a, c) : c(); }), (i.appendItems = function (t, e) { t && t.length && ((function (t) { let e = t.querySelectorAll("script"); for (let t of e) { let e = document.createElement("script"), i = t.attributes; for (let t of i) e.setAttribute(t.name, t.value); (e.innerHTML = t.innerHTML), t.parentNode.replaceChild(e, t); } })((e = e || o(t))), this.element.appendChild(e)); }), (i.appendOutlayerItems = function (i, n) { let o = e.imagesLoaded || t.imagesLoaded; return o ? new Promise(function (t) { o(i, function () { let e = n(); t(e); }); }) : (console.error( "[InfiniteScroll] imagesLoaded required for outlayer option" ), void (this.isLoading = !1)); }), (i.onAppendOutlayer = function (t, e, i) { this.options.outlayer.appended(i); }), (i.checkLastPage = function (t, e) { let i, { checkLastPage: n, path: o } = this.options; if (n) { if ("function" == typeof o) { if (!this.getPath()) return void this.lastPageReached(t, e); } "string" == typeof n ? (i = n) : this.isPathSelector && (i = o), i && t.querySelector && (t.querySelector(i) || this.lastPageReached(t, e)); } }), (i.lastPageReached = function (t, e) { (this.canLoad = !1), this.dispatchEvent("last", null, [t, e]); }), (i.onPageError = function (t, e, i) { return ( (this.isLoading = !1), (this.canLoad = !1), this.dispatchEvent("error", null, [t, e, i]), t ); }), (e.create.prefill = function () { if (!this.options.prefill) return; let t = this.options.append; t ? (this.updateMeasurements(), this.updateScroller(), (this.isPrefilling = !0), this.on("append", this.prefill), this.once("error", this.stopPrefill), this.once("last", this.stopPrefill), this.prefill()) : console.error(`append option required for prefill. Set as :${t}`); }), (i.prefill = function () { let t = this.getPrefillDistance(); (this.isPrefilling = t >= 0), this.isPrefilling ? (this.log("prefill"), this.loadNextPage()) : this.stopPrefill(); }), (i.getPrefillDistance = function () { return this.options.elementScroll ? this.scroller.clientHeight - this.scroller.scrollHeight : this.windowHeight - this.element.clientHeight; }), (i.stopPrefill = function () { this.log("stopPrefill"), this.off("append", this.prefill); }), e ); }), (function (t, e) { "object" == typeof module && module.exports ? (module.exports = e(t, require("./core"), require("fizzy-ui-utils"))) : e(t, t.InfiniteScroll, t.fizzyUIUtils); })(window, function (t, e, i) { let n = e.prototype; return ( Object.assign(e.defaults, { scrollThreshold: 400 }), (e.create.scrollWatch = function () { (this.pageScrollHandler = this.onPageScroll.bind(this)), (this.resizeHandler = this.onResize.bind(this)); let t = this.options.scrollThreshold; (t || 0 === t) && this.enableScrollWatch(); }), (e.destroy.scrollWatch = function () { this.disableScrollWatch(); }), (n.enableScrollWatch = function () { this.isScrollWatching || ((this.isScrollWatching = !0), this.updateMeasurements(), this.updateScroller(), this.on("last", this.disableScrollWatch), this.bindScrollWatchEvents(!0)); }), (n.disableScrollWatch = function () { this.isScrollWatching && (this.bindScrollWatchEvents(!1), delete this.isScrollWatching); }), (n.bindScrollWatchEvents = function (e) { let i = e ? "addEventListener" : "removeEventListener"; this.scroller[i]("scroll", this.pageScrollHandler), t[i]("resize", this.resizeHandler); }), (n.onPageScroll = e.throttle(function () { this.getBottomDistance() <= this.options.scrollThreshold && this.dispatchEvent("scrollThreshold"); })), (n.getBottomDistance = function () { let e, i; return ( this.options.elementScroll ? ((e = this.scroller.scrollHeight), (i = this.scroller.scrollTop + this.scroller.clientHeight)) : ((e = this.top + this.element.clientHeight), (i = t.scrollY + this.windowHeight)), e - i ); }), (n.onResize = function () { this.updateMeasurements(); }), i.debounceMethod(e, "onResize", 150), e ); }), (function (t, e) { "object" == typeof module && module.exports ? (module.exports = e(t, require("./core"), require("fizzy-ui-utils"))) : e(t, t.InfiniteScroll, t.fizzyUIUtils); })(window, function (t, e, i) { let n = e.prototype; Object.assign(e.defaults, { history: "replace" }); let o = document.createElement("a"); return ( (e.create.history = function () { if (!this.options.history) return; (o.href = this.getAbsolutePath()), (o.origin || o.protocol + "//" + o.host) == location.origin ? this.options.append ? this.createHistoryAppend() : this.createHistoryPageLoad() : console.error( `[InfiniteScroll] cannot set history with different origin: ${o.origin} on ${location.origin} . History behavior disabled.` ); }), (n.createHistoryAppend = function () { this.updateMeasurements(), this.updateScroller(), (this.scrollPages = [ { top: 0, path: location.href, title: document.title }, ]), (this.scrollPage = this.scrollPages[0]), (this.scrollHistoryHandler = this.onScrollHistory.bind(this)), (this.unloadHandler = this.onUnload.bind(this)), this.scroller.addEventListener("scroll", this.scrollHistoryHandler), this.on("append", this.onAppendHistory), this.bindHistoryAppendEvents(!0); }), (n.bindHistoryAppendEvents = function (e) { let i = e ? "addEventListener" : "removeEventListener"; this.scroller[i]("scroll", this.scrollHistoryHandler), t[i]("unload", this.unloadHandler); }), (n.createHistoryPageLoad = function () { this.on("load", this.onPageLoadHistory); }), (e.destroy.history = n.destroyHistory = function () { this.options.history && this.options.append && this.bindHistoryAppendEvents(!1); }), (n.onAppendHistory = function (t, e, i) { if (!i || !i.length) return; let n = i[0], s = this.getElementScrollY(n); (o.href = e), this.scrollPages.push({ top: s, path: o.href, title: t.title }); }), (n.getElementScrollY = function (e) { if (this.options.elementScroll) return e.offsetTop - this.top; return e.getBoundingClientRect().top + t.scrollY; }), (n.onScrollHistory = function () { let t = this.getClosestScrollPage(); t != this.scrollPage && ((this.scrollPage = t), this.setHistory(t.title, t.path)); }), i.debounceMethod(e, "onScrollHistory", 150), (n.getClosestScrollPage = function () { let e, i; e = this.options.elementScroll ? this.scroller.scrollTop + this.scroller.clientHeight / 2 : t.scrollY + this.windowHeight / 2; for (let t of this.scrollPages) { if (t.top >= e) break; i = t; } return i; }), (n.setHistory = function (t, e) { let i = this.options.history; i && history[i + "State"] && (history[i + "State"](null, t, e), this.options.historyTitle && (document.title = t), this.dispatchEvent("history", null, [t, e])); }), (n.onUnload = function () { if (0 === this.scrollPage.top) return; let e = t.scrollY - this.scrollPage.top + this.top; this.destroyHistory(), scrollTo(0, e); }), (n.onPageLoadHistory = function (t, e) { this.setHistory(t.title, e); }), e ); }), (function (t, e) { "object" == typeof module && module.exports ? (module.exports = e(t, require("./core"), require("fizzy-ui-utils"))) : e(t, t.InfiniteScroll, t.fizzyUIUtils); })(window, function (t, e, i) { class n { constructor(t, e) { (this.element = t), (this.infScroll = e), (this.clickHandler = this.onClick.bind(this)), this.element.addEventListener("click", this.clickHandler), e.on("request", this.disable.bind(this)), e.on("load", this.enable.bind(this)), e.on("error", this.hide.bind(this)), e.on("last", this.hide.bind(this)); } onClick(t) { t.preventDefault(), this.infScroll.loadNextPage(); } enable() { this.element.removeAttribute("disabled"); } disable() { this.element.disabled = "disabled"; } hide() { this.element.style.display = "none"; } destroy() { this.element.removeEventListener("click", this.clickHandler); } } return ( (e.create.button = function () { let t = i.getQueryElement(this.options.button); t && (this.button = new n(t, this)); }), (e.destroy.button = function () { this.button && this.button.destroy(); }), (e.Button = n), e ); }), (function (t, e) { "object" == typeof module && module.exports ? (module.exports = e(t, require("./core"), require("fizzy-ui-utils"))) : e(t, t.InfiniteScroll, t.fizzyUIUtils); })(window, function (t, e, i) { let n = e.prototype; function o(t) { r(t, "none"); } function s(t) { r(t, "block"); } function r(t, e) { t && (t.style.display = e); } return ( (e.create.status = function () { let t = i.getQueryElement(this.options.status); t && ((this.statusElement = t), (this.statusEventElements = { request: t.querySelector(".infinite-scroll-request"), error: t.querySelector(".infinite-scroll-error"), last: t.querySelector(".infinite-scroll-last"), }), this.on("request", this.showRequestStatus), this.on("error", this.showErrorStatus), this.on("last", this.showLastStatus), this.bindHideStatus("on")); }), (n.bindHideStatus = function (t) { let e = this.options.append ? "append" : "load"; this[t](e, this.hideAllStatus); }), (n.showRequestStatus = function () { this.showStatus("request"); }), (n.showErrorStatus = function () { this.showStatus("error"); }), (n.showLastStatus = function () { this.showStatus("last"), this.bindHideStatus("off"); }), (n.showStatus = function (t) { s(this.statusElement), this.hideStatusEventElements(), s(this.statusEventElements[t]); }), (n.hideAllStatus = function () { o(this.statusElement), this.hideStatusEventElements(); }), (n.hideStatusEventElements = function () { for (let t in this.statusEventElements) { o(this.statusEventElements[t]); } }), e ); }), /*! * imagesLoaded v4.1.4 * JavaScript is all like "You images are done yet or what?" * MIT License */ (function (t, e) { "use strict"; "function" == typeof define && define.amd ? define(["ev-emitter/ev-emitter"], function (i) { return e(t, i); }) : "object" == typeof module && module.exports ? (module.exports = e(t, require("ev-emitter"))) : (t.imagesLoaded = e(t, t.EvEmitter)); })("undefined" != typeof window ? window : this, function (t, e) { "use strict"; var i = t.jQuery, n = t.console; function o(t, e) { for (var i in e) t[i] = e[i]; return t; } var s = Array.prototype.slice; function r(t, e, l) { if (!(this instanceof r)) return new r(t, e, l); var h, a = t; ("string" == typeof t && (a = document.querySelectorAll(t)), a) ? ((this.elements = ((h = a), Array.isArray(h) ? h : "object" == typeof h && "number" == typeof h.length ? s.call(h) : [h])), (this.options = o({}, this.options)), "function" == typeof e ? (l = e) : o(this.options, e), l && this.on("always", l), this.getImages(), i && (this.jqDeferred = new i.Deferred()), setTimeout(this.check.bind(this))) : n.error("Bad element for imagesLoaded " + (a || t)); } (r.prototype = Object.create(e.prototype)), (r.prototype.options = {}), (r.prototype.getImages = function () { (this.images = []), this.elements.forEach(this.addElementImages, this); }), (r.prototype.addElementImages = function (t) { "IMG" == t.nodeName && this.addImage(t), !0 === this.options.background && this.addElementBackgroundImages(t); var e = t.nodeType; if (e && l[e]) { for (var i = t.querySelectorAll("img"), n = 0; n < i.length; n++) { var o = i[n]; this.addImage(o); } if ("string" == typeof this.options.background) { var s = t.querySelectorAll(this.options.background); for (n = 0; n < s.length; n++) { var r = s[n]; this.addElementBackgroundImages(r); } } } }); var l = { 1: !0, 9: !0, 11: !0 }; function h(t) { this.img = t; } function a(t, e) { (this.url = t), (this.element = e), (this.img = new Image()); } return ( (r.prototype.addElementBackgroundImages = function (t) { var e = getComputedStyle(t); if (e) for ( var i = /url\((['"])?(.*?)\1\)/gi, n = i.exec(e.backgroundImage); null !== n; ) { var o = n && n[2]; o && this.addBackground(o, t), (n = i.exec(e.backgroundImage)); } }), (r.prototype.addImage = function (t) { var e = new h(t); this.images.push(e); }), (r.prototype.addBackground = function (t, e) { var i = new a(t, e); this.images.push(i); }), (r.prototype.check = function () { var t = this; function e(e, i, n) { setTimeout(function () { t.progress(e, i, n); }); } (this.progressedCount = 0), (this.hasAnyBroken = !1), this.images.length ? this.images.forEach(function (t) { t.once("progress", e), t.check(); }) : this.complete(); }), (r.prototype.progress = function (t, e, i) { this.progressedCount++, (this.hasAnyBroken = this.hasAnyBroken || !t.isLoaded), this.emitEvent("progress", [this, t, e]), this.jqDeferred && this.jqDeferred.notify && this.jqDeferred.notify(this, t), this.progressedCount == this.images.length && this.complete(), this.options.debug && n && n.log("progress: " + i, t, e); }), (r.prototype.complete = function () { var t = this.hasAnyBroken ? "fail" : "done"; if ( ((this.isComplete = !0), this.emitEvent(t, [this]), this.emitEvent("always", [this]), this.jqDeferred) ) { var e = this.hasAnyBroken ? "reject" : "resolve"; this.jqDeferred[e](this); } }), (h.prototype = Object.create(e.prototype)), (h.prototype.check = function () { this.getIsImageComplete() ? this.confirm(0 !== this.img.naturalWidth, "naturalWidth") : ((this.proxyImage = new Image()), this.proxyImage.addEventListener("load", this), this.proxyImage.addEventListener("error", this), this.img.addEventListener("load", this), this.img.addEventListener("error", this), (this.proxyImage.src = this.img.src)); }), (h.prototype.getIsImageComplete = function () { return this.img.complete && this.img.naturalWidth; }), (h.prototype.confirm = function (t, e) { (this.isLoaded = t), this.emitEvent("progress", [this, this.img, e]); }), (h.prototype.handleEvent = function (t) { var e = "on" + t.type; this[e] && this[e](t); }), (h.prototype.onload = function () { this.confirm(!0, "onload"), this.unbindEvents(); }), (h.prototype.onerror = function () { this.confirm(!1, "onerror"), this.unbindEvents(); }), (h.prototype.unbindEvents = function () { this.proxyImage.removeEventListener("load", this), this.proxyImage.removeEventListener("error", this), this.img.removeEventListener("load", this), this.img.removeEventListener("error", this); }), (a.prototype = Object.create(h.prototype)), (a.prototype.check = function () { this.img.addEventListener("load", this), this.img.addEventListener("error", this), (this.img.src = this.url), this.getIsImageComplete() && (this.confirm(0 !== this.img.naturalWidth, "naturalWidth"), this.unbindEvents()); }), (a.prototype.unbindEvents = function () { this.img.removeEventListener("load", this), this.img.removeEventListener("error", this); }), (a.prototype.confirm = function (t, e) { (this.isLoaded = t), this.emitEvent("progress", [this, this.element, e]); }), (r.makeJQueryPlugin = function (e) { (e = e || t.jQuery) && ((i = e).fn.imagesLoaded = function (t, e) { return new r(this, t, e).jqDeferred.promise(i(this)); }); }), r.makeJQueryPlugin(), r ); });