254 lines
8.3 KiB
JavaScript
254 lines
8.3 KiB
JavaScript
|
/*!
|
||
|
* imagesLoaded PACKAGED v4.1.4
|
||
|
* JavaScript is all like "You images are done yet or what?"
|
||
|
* MIT License
|
||
|
*/
|
||
|
|
||
|
!(function (e, t) {
|
||
|
"function" == typeof define && define.amd
|
||
|
? define("ev-emitter/ev-emitter", t)
|
||
|
: "object" == typeof module && module.exports
|
||
|
? (module.exports = t())
|
||
|
: (e.EvEmitter = t());
|
||
|
})("undefined" != typeof window ? window : this, function () {
|
||
|
function e() {}
|
||
|
var t = e.prototype;
|
||
|
return (
|
||
|
(t.on = function (e, t) {
|
||
|
if (e && t) {
|
||
|
var i = (this._events = this._events || {}),
|
||
|
n = (i[e] = i[e] || []);
|
||
|
return n.indexOf(t) == -1 && n.push(t), this;
|
||
|
}
|
||
|
}),
|
||
|
(t.once = function (e, t) {
|
||
|
if (e && t) {
|
||
|
this.on(e, t);
|
||
|
var i = (this._onceEvents = this._onceEvents || {}),
|
||
|
n = (i[e] = i[e] || {});
|
||
|
return (n[t] = !0), this;
|
||
|
}
|
||
|
}),
|
||
|
(t.off = function (e, t) {
|
||
|
var i = this._events && this._events[e];
|
||
|
if (i && i.length) {
|
||
|
var n = i.indexOf(t);
|
||
|
return n != -1 && i.splice(n, 1), this;
|
||
|
}
|
||
|
}),
|
||
|
(t.emitEvent = function (e, t) {
|
||
|
var i = this._events && this._events[e];
|
||
|
if (i && i.length) {
|
||
|
(i = i.slice(0)), (t = t || []);
|
||
|
for (
|
||
|
var n = this._onceEvents && this._onceEvents[e], o = 0;
|
||
|
o < i.length;
|
||
|
o++
|
||
|
) {
|
||
|
var r = i[o],
|
||
|
s = n && n[r];
|
||
|
s && (this.off(e, r), delete n[r]), r.apply(this, t);
|
||
|
}
|
||
|
return this;
|
||
|
}
|
||
|
}),
|
||
|
(t.allOff = function () {
|
||
|
delete this._events, delete this._onceEvents;
|
||
|
}),
|
||
|
e
|
||
|
);
|
||
|
}),
|
||
|
(function (e, t) {
|
||
|
"use strict";
|
||
|
"function" == typeof define && define.amd
|
||
|
? define(["ev-emitter/ev-emitter"], function (i) {
|
||
|
return t(e, i);
|
||
|
})
|
||
|
: "object" == typeof module && module.exports
|
||
|
? (module.exports = t(e, require("ev-emitter")))
|
||
|
: (e.imagesLoaded = t(e, e.EvEmitter));
|
||
|
})("undefined" != typeof window ? window : this, function (e, t) {
|
||
|
function i(e, t) {
|
||
|
for (var i in t) e[i] = t[i];
|
||
|
return e;
|
||
|
}
|
||
|
function n(e) {
|
||
|
if (Array.isArray(e)) return e;
|
||
|
var t = "object" == typeof e && "number" == typeof e.length;
|
||
|
return t ? d.call(e) : [e];
|
||
|
}
|
||
|
function o(e, t, r) {
|
||
|
if (!(this instanceof o)) return new o(e, t, r);
|
||
|
var s = e;
|
||
|
return (
|
||
|
"string" == typeof e && (s = document.querySelectorAll(e)),
|
||
|
s
|
||
|
? ((this.elements = n(s)),
|
||
|
(this.options = i({}, this.options)),
|
||
|
"function" == typeof t ? (r = t) : i(this.options, t),
|
||
|
r && this.on("always", r),
|
||
|
this.getImages(),
|
||
|
h && (this.jqDeferred = new h.Deferred()),
|
||
|
void setTimeout(this.check.bind(this)))
|
||
|
: void a.error("Bad element for imagesLoaded " + (s || e))
|
||
|
);
|
||
|
}
|
||
|
function r(e) {
|
||
|
this.img = e;
|
||
|
}
|
||
|
function s(e, t) {
|
||
|
(this.url = e), (this.element = t), (this.img = new Image());
|
||
|
}
|
||
|
var h = e.jQuery,
|
||
|
a = e.console,
|
||
|
d = Array.prototype.slice;
|
||
|
(o.prototype = Object.create(t.prototype)),
|
||
|
(o.prototype.options = {}),
|
||
|
(o.prototype.getImages = function () {
|
||
|
(this.images = []), this.elements.forEach(this.addElementImages, this);
|
||
|
}),
|
||
|
(o.prototype.addElementImages = function (e) {
|
||
|
"IMG" == e.nodeName && this.addImage(e),
|
||
|
this.options.background === !0 && this.addElementBackgroundImages(e);
|
||
|
var t = e.nodeType;
|
||
|
if (t && u[t]) {
|
||
|
for (var i = e.querySelectorAll("img"), n = 0; n < i.length; n++) {
|
||
|
var o = i[n];
|
||
|
this.addImage(o);
|
||
|
}
|
||
|
if ("string" == typeof this.options.background) {
|
||
|
var r = e.querySelectorAll(this.options.background);
|
||
|
for (n = 0; n < r.length; n++) {
|
||
|
var s = r[n];
|
||
|
this.addElementBackgroundImages(s);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
var u = { 1: !0, 9: !0, 11: !0 };
|
||
|
return (
|
||
|
(o.prototype.addElementBackgroundImages = function (e) {
|
||
|
var t = getComputedStyle(e);
|
||
|
if (t)
|
||
|
for (
|
||
|
var i = /url\((['"])?(.*?)\1\)/gi, n = i.exec(t.backgroundImage);
|
||
|
null !== n;
|
||
|
|
||
|
) {
|
||
|
var o = n && n[2];
|
||
|
o && this.addBackground(o, e), (n = i.exec(t.backgroundImage));
|
||
|
}
|
||
|
}),
|
||
|
(o.prototype.addImage = function (e) {
|
||
|
var t = new r(e);
|
||
|
this.images.push(t);
|
||
|
}),
|
||
|
(o.prototype.addBackground = function (e, t) {
|
||
|
var i = new s(e, t);
|
||
|
this.images.push(i);
|
||
|
}),
|
||
|
(o.prototype.check = function () {
|
||
|
function e(e, i, n) {
|
||
|
setTimeout(function () {
|
||
|
t.progress(e, i, n);
|
||
|
});
|
||
|
}
|
||
|
var t = this;
|
||
|
return (
|
||
|
(this.progressedCount = 0),
|
||
|
(this.hasAnyBroken = !1),
|
||
|
this.images.length
|
||
|
? void this.images.forEach(function (t) {
|
||
|
t.once("progress", e), t.check();
|
||
|
})
|
||
|
: void this.complete()
|
||
|
);
|
||
|
}),
|
||
|
(o.prototype.progress = function (e, t, i) {
|
||
|
this.progressedCount++,
|
||
|
(this.hasAnyBroken = this.hasAnyBroken || !e.isLoaded),
|
||
|
this.emitEvent("progress", [this, e, t]),
|
||
|
this.jqDeferred &&
|
||
|
this.jqDeferred.notify &&
|
||
|
this.jqDeferred.notify(this, e),
|
||
|
this.progressedCount == this.images.length && this.complete(),
|
||
|
this.options.debug && a && a.log("progress: " + i, e, t);
|
||
|
}),
|
||
|
(o.prototype.complete = function () {
|
||
|
var e = this.hasAnyBroken ? "fail" : "done";
|
||
|
if (
|
||
|
((this.isComplete = !0),
|
||
|
this.emitEvent(e, [this]),
|
||
|
this.emitEvent("always", [this]),
|
||
|
this.jqDeferred)
|
||
|
) {
|
||
|
var t = this.hasAnyBroken ? "reject" : "resolve";
|
||
|
this.jqDeferred[t](this);
|
||
|
}
|
||
|
}),
|
||
|
(r.prototype = Object.create(t.prototype)),
|
||
|
(r.prototype.check = function () {
|
||
|
var e = this.getIsImageComplete();
|
||
|
return e
|
||
|
? void 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),
|
||
|
void (this.proxyImage.src = this.img.src));
|
||
|
}),
|
||
|
(r.prototype.getIsImageComplete = function () {
|
||
|
return this.img.complete && this.img.naturalWidth;
|
||
|
}),
|
||
|
(r.prototype.confirm = function (e, t) {
|
||
|
(this.isLoaded = e), this.emitEvent("progress", [this, this.img, t]);
|
||
|
}),
|
||
|
(r.prototype.handleEvent = function (e) {
|
||
|
var t = "on" + e.type;
|
||
|
this[t] && this[t](e);
|
||
|
}),
|
||
|
(r.prototype.onload = function () {
|
||
|
this.confirm(!0, "onload"), this.unbindEvents();
|
||
|
}),
|
||
|
(r.prototype.onerror = function () {
|
||
|
this.confirm(!1, "onerror"), this.unbindEvents();
|
||
|
}),
|
||
|
(r.prototype.unbindEvents = function () {
|
||
|
this.proxyImage.removeEventListener("load", this),
|
||
|
this.proxyImage.removeEventListener("error", this),
|
||
|
this.img.removeEventListener("load", this),
|
||
|
this.img.removeEventListener("error", this);
|
||
|
}),
|
||
|
(s.prototype = Object.create(r.prototype)),
|
||
|
(s.prototype.check = function () {
|
||
|
this.img.addEventListener("load", this),
|
||
|
this.img.addEventListener("error", this),
|
||
|
(this.img.src = this.url);
|
||
|
var e = this.getIsImageComplete();
|
||
|
e &&
|
||
|
(this.confirm(0 !== this.img.naturalWidth, "naturalWidth"),
|
||
|
this.unbindEvents());
|
||
|
}),
|
||
|
(s.prototype.unbindEvents = function () {
|
||
|
this.img.removeEventListener("load", this),
|
||
|
this.img.removeEventListener("error", this);
|
||
|
}),
|
||
|
(s.prototype.confirm = function (e, t) {
|
||
|
(this.isLoaded = e),
|
||
|
this.emitEvent("progress", [this, this.element, t]);
|
||
|
}),
|
||
|
(o.makeJQueryPlugin = function (t) {
|
||
|
(t = t || e.jQuery),
|
||
|
t &&
|
||
|
((h = t),
|
||
|
(h.fn.imagesLoaded = function (e, t) {
|
||
|
var i = new o(this, e, t);
|
||
|
return i.jqDeferred.promise(h(this));
|
||
|
}));
|
||
|
}),
|
||
|
o.makeJQueryPlugin(),
|
||
|
o
|
||
|
);
|
||
|
});
|