/*! * imagesLoaded PACKAGED v4.1.0 * JavaScript is all like "You images are done yet or what?" * MIT License */ !function( t, e ){"function" == typeof define && define.amd?define( "ev-emitter/ev-emitter", e ):"object" == typeof module && module.exports?module.exports = e( ):t.EvEmitter = e( )}( this, function( ){function t( ){}var e = t.prototype; return e.on = function( t, e ){if ( t && e ){var i = this._events = this._events || {}, n = i[t] = i[t] || []; return - 1 == n.indexOf( e ) && n.push( e ), this}}, e.once = function( t, e ){if ( t && e ){this.on( t, e ); var i = this._onceEvents = this._onceEvents || {}, n = i[t] = i[t] || []; return n[e] = !0, this}}, e.off = function( t, e ){var i = this._events && this._events[t]; if ( i && i.length ){var n = i.indexOf( e ); return - 1 != n && i.splice( n, 1 ), this}}, e.emitEvent = function( t, e ){var i = this._events && this._events[t]; if ( i && i.length ){var n = 0, o = i[n]; e = e || []; for ( var r = this._onceEvents && this._onceEvents[t]; o; ){var s = r && r[o]; s && ( this.off( t, o ), delete r[o] ), o.apply( this, e ), n += s?0:1, o = i[n]}return this}}, t} ), 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 )}( window, function( t, e ){function i( t, e ){for ( var i in e )t[i] = e[i]; return t}function n( t ){var e = []; if ( Array.isArray( t ) )e = t; else if ( "number" == typeof t.length )for ( var i = 0; i < t.length; i++ )e.push( t[i] ); else e.push( t ); return e}function o( t, e, r ){return this instanceof o?( "string" == typeof t && ( t = document.querySelectorAll( t ) ), this.elements = n( t ), this.options = i( {}, this.options ), "function" == typeof e?r = e:i( this.options, e ), r && this.on( "always", r ), this.getImages( ), h && ( this.jqDeferred = new h.Deferred ), void setTimeout( function( ){this.check( )}.bind( this ) ) ):new o( t, e, r )}function r( t ){this.img = t}function s( t, e ){this.url = t, this.element = e, this.img = new Image}var h = t.jQuery, a = t.console; o.prototype = Object.create( e.prototype ), o.prototype.options = {}, o.prototype.getImages = function( ){this.images = [], this.elements.forEach( this.addElementImages, this )}, o.prototype.addElementImages = function( t ){"IMG" == t.nodeName && this.addImage( t ), this.options.background === !0 && this.addElementBackgroundImages( t ); var e = t.nodeType; if ( e && d[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 r = t.querySelectorAll( this.options.background ); for ( n = 0; n < r.length; n++ ){var s = r[n]; this.addElementBackgroundImages( s )}}}}; var d = {1:!0, 9:!0, 11:!0}; return o.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 )}}, o.prototype.addImage = function( t ){var e = new r( t ); this.images.push( e )}, o.prototype.addBackground = function( t, e ){var i = new s( t, e ); this.images.push( i )}, o.prototype.check = function( ){function t( t, i, n ){setTimeout( function( ){e.progress( t, i, n )} )}var e = this; return this.progressedCount = 0, this.hasAnyBroken = !1, this.images.length?void this.images.forEach( function( e ){e.once( "progress", t ), e.check( )} ):void this.complete( )}, o.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 && a && a.log( "progress: " + i, t, e )}, o.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 )}}, r.prototype = Object.create( e.prototype ), r.prototype.check = function( ){var t = this.getIsImageComplete( ); return t?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 && void 0 !== this.img.naturalWidth}, r.prototype.confirm = function( t, e ){this.isLoaded = t, this.emitEvent( "progress", [this, this.img, e] )}, r.prototype.handleEvent = function( t ){var e = "on" + t.type; this[e] && this[e]( t )}, 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 t = this.getIsImageComplete( ); t && ( 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( t, e ){this.isLoaded = t, this.emitEvent( "progress", [this, this.element, e] )}, o.makeJQueryPlugin = function( e ){e = e || t.jQuery, e && ( h = e, h.fn.imagesLoaded = function( t, e ){var i = new o( this, t, e ); return i.jqDeferred.promise( h( this ) )} )}, o.makeJQueryPlugin( ), o} );