/*!
 * Vue-Lazyload.js v1.3.3
 * (c) 2020 Awe <hilongjw@gmail.com>
 * Released under the MIT License.
 */
! function(t, e) {
	"object" == typeof exports && "undefined" != typeof module ? module.exports = e(require("axios")) : "function" == typeof define && define.amd ? define(["axios"], e) : t.VueLazyload = e(t.axios)
}(this, function(t) {
	"use strict";

	function e(t) {
		return t.constructor && "function" == typeof t.constructor.isBuffer && t.constructor.isBuffer(t)
	}

	function n(t) {
		t = t || {};
		var e = arguments.length,
			n = 0;
		if(1 === e) return t;
		for(; ++n < e;) {
			var o = arguments[n];
			w(t) && (t = o), i(o) && r(t, o)
		}
		return t
	}

	function r(t, e) {
		L(t, e);
		for(var r in e)
			if(s(r) && o(e, r)) {
				var a = e[r];
				i(a) ? ("undefined" === E(t[r]) && "function" === E(a) && (t[r] = a), t[r] = n(t[r] || {}, a)) : t[r] = a
			}
		return t
	}

	function i(t) {
		return "object" === E(t) || "function" === E(t)
	}

	function o(t, e) {
		return Object.prototype.hasOwnProperty.call(t, e)
	}

	function s(t) {
		return "__proto__" !== t && "constructor" !== t && "prototype" !== t
	}

	function a(t, e) {
		if(t.length) {
			var n = t.indexOf(e);
			return n > -1 ? t.splice(n, 1) : void 0
		}
	}

	function u(t, e) {
		for(var n = !1, r = 0, i = t.length; r < i; r++)
			if(e(t[r])) {
				n = !0;
				break
			}
		return n
	}

	function d(t, e) {
		if("IMG" === t.tagName && t.getAttribute("data-srcset")) {
			var n = t.getAttribute("data-srcset"),
				r = [],
				i = t.parentNode,
				o = i.offsetWidth * e,
				s = void 0,
				a = void 0,
				u = void 0;
			n = n.trim().split(","), n.map(function(t) {
				t = t.trim(), s = t.lastIndexOf(" "), -1 === s ? (a = t, u = 999998) : (a = t.substr(0, s), u = parseInt(t.substr(s + 1, t.length - s - 2), 10)), r.push([u, a])
			}), r.sort(function(t, e) {
				if(t[0] < e[0]) return 1;
				if(t[0] > e[0]) return -1;
				if(t[0] === e[0]) {
					if(-1 !== e[1].indexOf(".webp", e[1].length - 5)) return 1;
					if(-1 !== t[1].indexOf(".webp", t[1].length - 5)) return -1
				}
				return 0
			});
			for(var d = "", c = void 0, l = 0; l < r.length; l++) {
				c = r[l], d = c[1];
				var h = r[l + 1];
				if(h && h[0] < o) {
					d = c[1];
					break
				}
				if(!h) {
					d = c[1];
					break
				}
			}
			return d
		}
	}

	function c(t, e) {
		for(var n = void 0, r = 0, i = t.length; r < i; r++)
			if(e(t[r])) {
				n = t[r];
				break
			}
		return n
	}

	function l() {
		if(!A) return !1;
		var t = !0,
			e = document;
		try {
			var n = e.createElement("object");
			n.type = "image/webp", n.style.visibility = "hidden", n.innerHTML = "!", e.body.appendChild(n), t = !n.offsetWidth, e.body.removeChild(n)
		} catch(e) {
			t = !1
		}
		return t
	}

	function h(t, e) {
		var n = null,
			r = 0;
		return function() {
			if(!n) {
				var i = Date.now() - r,
					o = this,
					s = arguments,
					a = function() {
						r = Date.now(), n = !1, t.apply(o, s)
					};
				i >= e ? a() : n = setTimeout(a, e)
			}
		}
	}

	function f(t) {
		return null !== t && "object" === (void 0 === t ? "undefined" : b(t))
	}

	function v(t) {
		if(!(t instanceof Object)) return [];
		if(Object.keys) return Object.keys(t);
		var e = [];
		for(var n in t) t.hasOwnProperty(n) && e.push(n);
		return e
	}

	function p(t) {
		for(var e = t.length, n = [], r = 0; r < e; r++) n.push(t[r]);
		return n
	}

	function y() {}
	t = t && t.hasOwnProperty("default") ? t.default : t;
	var b = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) {
			return typeof t
		} : function(t) {
			return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t
		},
		g = function(t, e) {
			if(!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
		},
		m = function() {
			function t(t, e) {
				for(var n = 0; n < e.length; n++) {
					var r = e[n];
					r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r)
				}
			}
			return function(e, n, r) {
				return n && t(e.prototype, n), r && t(e, r), e
			}
		}(),
		w = function(t) {
			return null == t || "function" != typeof t && "object" !== (void 0 === t ? "undefined" : b(t))
		},
		L = function(t, e) {
			if(null === t || void 0 === t) throw new TypeError("expected first argument to be an object.");
			if(void 0 === e || "undefined" == typeof Symbol) return t;
			if("function" != typeof Object.getOwnPropertySymbols) return t;
			for(var n = Object.prototype.propertyIsEnumerable, r = Object(t), i = arguments.length, o = 0; ++o < i;)
				for(var s = Object(arguments[o]), a = Object.getOwnPropertySymbols(s), u = 0; u < a.length; u++) {
					var d = a[u];
					n.call(s, d) && (r[d] = s[d])
				}
			return r
		},
		_ = Object.prototype.toString,
		E = function(t) {
			var n = void 0 === t ? "undefined" : b(t);
			return "undefined" === n ? "undefined" : null === t ? "null" : !0 === t || !1 === t || t instanceof Boolean ? "boolean" : "string" === n || t instanceof String ? "string" : "number" === n || t instanceof Number ? "number" : "function" === n || t instanceof Function ? void 0 !== t.constructor.name && "Generator" === t.constructor.name.slice(0, 9) ? "generatorfunction" : "function" : void 0 !== Array.isArray && Array.isArray(t) ? "array" : t instanceof RegExp ? "regexp" : t instanceof Date ? "date" : (n = _.call(t), "[object RegExp]" === n ? "regexp" : "[object Date]" === n ? "date" : "[object Arguments]" === n ? "arguments" : "[object Error]" === n ? "error" : "[object Promise]" === n ? "promise" : e(t) ? "buffer" : "[object Set]" === n ? "set" : "[object WeakSet]" === n ? "weakset" : "[object Map]" === n ? "map" : "[object WeakMap]" === n ? "weakmap" : "[object Symbol]" === n ? "symbol" : "[object Map Iterator]" === n ? "mapiterator" : "[object Set Iterator]" === n ? "setiterator" : "[object String Iterator]" === n ? "stringiterator" : "[object Array Iterator]" === n ? "arrayiterator" : "[object Int8Array]" === n ? "int8array" : "[object Uint8Array]" === n ? "uint8array" : "[object Uint8ClampedArray]" === n ? "uint8clampedarray" : "[object Int16Array]" === n ? "int16array" : "[object Uint16Array]" === n ? "uint16array" : "[object Int32Array]" === n ? "int32array" : "[object Uint32Array]" === n ? "uint32array" : "[object Float32Array]" === n ? "float32array" : "[object Float64Array]" === n ? "float64array" : "object")
		},
		k = n,
		A = "undefined" != typeof window && null !== window,
		z = function() {
			return !!(A && "IntersectionObserver" in window && "IntersectionObserverEntry" in window && "intersectionRatio" in window.IntersectionObserverEntry.prototype) && ("isIntersecting" in window.IntersectionObserverEntry.prototype || Object.defineProperty(window.IntersectionObserverEntry.prototype, "isIntersecting", {
				get: function() {
					return this.intersectionRatio > 0
				}
			}), !0)
		}(),
		j = {
			event: "event",
			observer: "observer"
		},
		O = function() {
			function t(t, e) {
				e = e || {
					bubbles: !1,
					cancelable: !1,
					detail: void 0
				};
				var n = document.createEvent("CustomEvent");
				return n.initCustomEvent(t, e.bubbles, e.cancelable, e.detail), n
			}
			if(A) return "function" == typeof window.CustomEvent ? window.CustomEvent : (t.prototype = window.Event.prototype, t)
		}(),
		I = function() {
			var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 1;
			return A ? window.devicePixelRatio || t : t
		},
		T = function() {
			if(A) {
				var t = !1;
				try {
					var e = Object.defineProperty({}, "passive", {
						get: function() {
							t = !0
						}
					});
					window.addEventListener("test", null, e)
				} catch(t) {}
				return t
			}
		}(),
		x = {
			on: function(t, e, n) {
				var r = arguments.length > 3 && void 0 !== arguments[3] && arguments[3];
				T ? t.addEventListener(e, n, {
					capture: r,
					passive: !0
				}) : t.addEventListener(e, n, r)
			},
			off: function(t, e, n) {
				var r = arguments.length > 3 && void 0 !== arguments[3] && arguments[3];
				t.removeEventListener(e, n, r)
			}
		},
		S = function(e, n, r) {
			if(!t) throw new Error("[vue-lazyload] cannot locate Axios");
			if(!e || !e.src) {
				var i = new Error("image src is required");
				return r(i)
			}
			var o = new Image;
			e.cors && (o.crossOrigin = e.cors), o.onload = function() {
				n({
					naturalHeight: o.naturalHeight,
					naturalWidth: o.naturalWidth,
					src: o.src
				})
			}, o.onerror = function(t) {
				r(t)
			}, t({
				method: "get",
				url: e.src,
				responseType: "arraybuffer"
			}).then(function(t) {
				var e = t.headers["content-type"].toLowerCase(),
					n = new Buffer(t.data, "binary").toString("base64");
				o.src = "data:" + e + ";base64," + n
			}).catch(function(t) {
				r(t)
			})
		},
		$ = function(t, e) {
			return "undefined" != typeof getComputedStyle ? getComputedStyle(t, null).getPropertyValue(e) : t.style[e]
		},
		C = function(t) {
			return $(t, "overflow") + $(t, "overflow-y") + $(t, "overflow-x")
		},
		H = function(t) {
			if(A) {
				if(!(t instanceof HTMLElement)) return window;
				for(var e = t; e && e !== document.body && e !== document.documentElement && e.parentNode;) {
					if(/(scroll|auto)/.test(C(e))) return e;
					e = e.parentNode
				}
				return window
			}
		},
		Q = function() {
			function t(e) {
				var n = e.max;
				g(this, t), this.options = {
					max: n || 100
				}, this._caches = []
			}
			return m(t, [{
				key: "has",
				value: function(t) {
					return this._caches.indexOf(t) > -1
				}
			}, {
				key: "add",
				value: function(t) {
					this.has(t) || (this._caches.push(t), this._caches.length > this.options.max && this.free())
				}
			}, {
				key: "free",
				value: function() {
					this._caches.shift()
				}
			}]), t
		}(),
		R = function() {
			function t(e) {
				var n = e.el,
					r = e.src,
					i = e.error,
					o = e.loading,
					s = e.bindType,
					a = e.$parent,
					u = e.options,
					d = e.cors,
					c = e.elRenderer,
					l = e.imageCache;
				g(this, t), this.el = n, this.src = r, this.error = i, this.loading = o, this.bindType = s, this.attempt = 0, this.cors = d, this.naturalHeight = 0, this.naturalWidth = 0, this.options = u, this.rect = null, this.$parent = a, this.elRenderer = c, this._imageCache = l, this.performanceData = {
					init: Date.now(),
					loadStart: 0,
					loadEnd: 0
				}, this.filter(), this.initState(), this.render("loading", !1)
			}
			return m(t, [{
				key: "initState",
				value: function() {
					"dataset" in this.el ? this.el.dataset.src = this.src : this.el.setAttribute("data-src", this.src), this.state = {
						loading: !1,
						error: !1,
						loaded: !1,
						rendered: !1
					}
				}
			}, {
				key: "record",
				value: function(t) {
					this.performanceData[t] = Date.now()
				}
			}, {
				key: "update",
				value: function(t) {
					var e = t.src,
						n = t.loading,
						r = t.error,
						i = this.src;
					this.src = e, this.loading = n, this.error = r, this.filter(), i !== this.src && (this.attempt = 0, this.initState())
				}
			}, {
				key: "getRect",
				value: function() {
					this.rect = this.el.getBoundingClientRect()
				}
			}, {
				key: "checkInView",
				value: function() {
					return this.getRect(), this.rect.top < window.innerHeight * this.options.preLoad && this.rect.bottom > this.options.preLoadTop && this.rect.left < window.innerWidth * this.options.preLoad && this.rect.right > 0
				}
			}, {
				key: "filter",
				value: function() {
					var t = this;
					v(this.options.filter).map(function(e) {
						t.options.filter[e](t, t.options)
					})
				}
			}, {
				key: "renderLoading",
				value: function(t) {
					var e = this;
					this.state.loading = !0, S({
						src: this.loading,
						cors: this.cors
					}, function(n) {
						e.render("loading", !1), e.state.loading = !1, t()
					}, function() {
						t(), e.state.loading = !1, e.options.silent || console.warn("VueLazyload log: load failed with loading image(" + e.loading + ")")
					})
				}
			}, {
				key: "load",
				value: function() {
					var t = this,
						e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : y;
					return this.attempt > this.options.attempt - 1 && this.state.error ? (this.options.silent || console.log("VueLazyload log: " + this.src + " tried too more than " + this.options.attempt + " times"), void e()) : this.state.rendered && this.state.loaded ? void 0 : this._imageCache.has(this.src) ? (this.state.loaded = !0, this.render("loaded", !0), this.state.rendered = !0, e()) : void this.renderLoading(function() {
						t.attempt++, t.options.adapter.beforeLoad && t.options.adapter.beforeLoad(t, t.options), t.record("loadStart"), S({
							src: t.src,
							cors: t.cors
						}, function(n) {
							t.naturalHeight = n.naturalHeight, t.naturalWidth = n.naturalWidth, t.state.loaded = !0, t.state.error = !1, t.record("loadEnd"), t.render("loaded", !1), t.state.rendered = !0, t._imageCache.add(t.src), e()
						}, function(e) {
							!t.options.silent && console.error(e), t.state.error = !0, t.state.loaded = !1, t.render("error", !1)
						})
					})
				}
			}, {
				key: "render",
				value: function(t, e) {
					this.elRenderer(this, t, e)
				}
			}, {
				key: "performance",
				value: function() {
					var t = "loading",
						e = 0;
					return this.state.loaded && (t = "loaded", e = (this.performanceData.loadEnd - this.performanceData.loadStart) / 1e3), this.state.error && (t = "error"), {
						src: this.src,
						state: t,
						time: e
					}
				}
			}, {
				key: "$destroy",
				value: function() {
					this.el = null, this.src = null, this.error = null, this.loading = null, this.bindType = null, this.attempt = 0
				}
			}]), t
		}(),
		B = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",
		W = ["scroll", "wheel", "mousewheel", "resize", "animationend", "transitionend", "touchmove"],
		D = {
			rootMargin: "0px",
			threshold: 0
		},
		V = function(t) {
			return function() {
				function e(t) {
					var n = t.preLoad,
						r = t.error,
						i = t.throttleWait,
						o = t.preLoadTop,
						s = t.dispatchEvent,
						a = t.loading,
						u = t.attempt,
						d = t.silent,
						c = void 0 === d || d,
						f = t.scale,
						v = t.listenEvents,
						p = (t.hasbind, t.filter),
						y = t.adapter,
						b = t.observer,
						m = t.observerOptions;
					g(this, e), this.version = "1.3.3", this.mode = j.event, this.ListenerQueue = [], this.TargetIndex = 0, this.TargetQueue = [], this.options = {
						silent: c,
						dispatchEvent: !!s,
						throttleWait: i || 200,
						preLoad: n || 1.3,
						preLoadTop: o || 0,
						error: r || B,
						loading: a || B,
						attempt: u || 3,
						scale: f || I(f),
						ListenEvents: v || W,
						hasbind: !1,
						supportWebp: l(),
						filter: p || {},
						adapter: y || {},
						observer: !!b,
						observerOptions: m || D
					}, this._initEvent(), this._imageCache = new Q({
						max: 200
					}), this.lazyLoadHandler = h(this._lazyLoadHandler.bind(this), this.options.throttleWait), this.setMode(this.options.observer ? j.observer : j.event)
				}
				return m(e, [{
					key: "config",
					value: function() {
						var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
						k(this.options, t)
					}
				}, {
					key: "performance",
					value: function() {
						var t = [];
						return this.ListenerQueue.map(function(e) {
							t.push(e.performance())
						}), t
					}
				}, {
					key: "addLazyBox",
					value: function(t) {
						this.ListenerQueue.push(t), A && (this._addListenerTarget(window), this._observer && this._observer.observe(t.el), t.$el && t.$el.parentNode && this._addListenerTarget(t.$el.parentNode))
					}
				}, {
					key: "add",
					value: function(e, n, r) {
						var i = this;
						if(u(this.ListenerQueue, function(t) {
								return t.el === e
							})) return this.update(e, n), t.nextTick(this.lazyLoadHandler);
						var o = this._valueFormatter(n.value),
							s = o.src,
							a = o.loading,
							c = o.error,
							l = o.cors;
						t.nextTick(function() {
							s = d(e, i.options.scale) || s, i._observer && i._observer.observe(e);
							var o = Object.keys(n.modifiers)[0],
								u = void 0;
							o && (u = r.context.$refs[o], u = u ? u.$el || u : document.getElementById(o)), u || (u = H(e));
							var h = new R({
								bindType: n.arg,
								$parent: u,
								el: e,
								loading: a,
								error: c,
								src: s,
								cors: l,
								elRenderer: i._elRenderer.bind(i),
								options: i.options,
								imageCache: i._imageCache
							});
							i.ListenerQueue.push(h), A && (i._addListenerTarget(window), i._addListenerTarget(u)), i.lazyLoadHandler(), t.nextTick(function() {
								return i.lazyLoadHandler()
							})
						})
					}
				}, {
					key: "update",
					value: function(e, n, r) {
						var i = this,
							o = this._valueFormatter(n.value),
							s = o.src,
							a = o.loading,
							u = o.error;
						s = d(e, this.options.scale) || s;
						var l = c(this.ListenerQueue, function(t) {
							return t.el === e
						});
						l ? l.update({
							src: s,
							loading: a,
							error: u
						}) : this.add(e, n, r), this._observer && (this._observer.unobserve(e), this._observer.observe(e)), this.lazyLoadHandler(), t.nextTick(function() {
							return i.lazyLoadHandler()
						})
					}
				}, {
					key: "remove",
					value: function(t) {
						if(t) {
							this._observer && this._observer.unobserve(t);
							var e = c(this.ListenerQueue, function(e) {
								return e.el === t
							});
							e && (this._removeListenerTarget(e.$parent), this._removeListenerTarget(window), a(this.ListenerQueue, e), e.$destroy())
						}
					}
				}, {
					key: "removeComponent",
					value: function(t) {
						t && (a(this.ListenerQueue, t), this._observer && this._observer.unobserve(t.el), t.$parent && t.$el.parentNode && this._removeListenerTarget(t.$el.parentNode), this._removeListenerTarget(window))
					}
				}, {
					key: "setMode",
					value: function(t) {
						var e = this;
						z || t !== j.observer || (t = j.event), this.mode = t, t === j.event ? (this._observer && (this.ListenerQueue.forEach(function(t) {
							e._observer.unobserve(t.el)
						}), this._observer = null), this.TargetQueue.forEach(function(t) {
							e._initListen(t.el, !0)
						})) : (this.TargetQueue.forEach(function(t) {
							e._initListen(t.el, !1)
						}), this._initIntersectionObserver())
					}
				}, {
					key: "_addListenerTarget",
					value: function(t) {
						if(t) {
							var e = c(this.TargetQueue, function(e) {
								return e.el === t
							});
							return e ? e.childrenCount++ : (e = {
								el: t,
								id: ++this.TargetIndex,
								childrenCount: 1,
								listened: !0
							}, this.mode === j.event && this._initListen(e.el, !0), this.TargetQueue.push(e)), this.TargetIndex
						}
					}
				}, {
					key: "_removeListenerTarget",
					value: function(t) {
						var e = this;
						this.TargetQueue.forEach(function(n, r) {
							n.el === t && (--n.childrenCount || (e._initListen(n.el, !1), e.TargetQueue.splice(r, 1), n = null))
						})
					}
				}, {
					key: "_initListen",
					value: function(t, e) {
						var n = this;
						this.options.ListenEvents.forEach(function(r) {
							return x[e ? "on" : "off"](t, r, n.lazyLoadHandler)
						})
					}
				}, {
					key: "_initEvent",
					value: function() {
						var t = this;
						this.Event = {
							listeners: {
								loading: [],
								loaded: [],
								error: []
							}
						}, this.$on = function(e, n) {
							t.Event.listeners[e] || (t.Event.listeners[e] = []), t.Event.listeners[e].push(n)
						}, this.$once = function(e, n) {
							function r() {
								i.$off(e, r), n.apply(i, arguments)
							}
							var i = t;
							t.$on(e, r)
						}, this.$off = function(e, n) {
							if(!n) {
								if(!t.Event.listeners[e]) return;
								return void(t.Event.listeners[e].length = 0)
							}
							a(t.Event.listeners[e], n)
						}, this.$emit = function(e, n, r) {
							t.Event.listeners[e] && t.Event.listeners[e].forEach(function(t) {
								return t(n, r)
							})
						}
					}
				}, {
					key: "_lazyLoadHandler",
					value: function() {
						var t = this,
							e = [];
						this.ListenerQueue.forEach(function(t, n) {
							t.el && t.el.parentNode || e.push(t), t.checkInView() && t.load()
						}), e.forEach(function(e) {
							a(t.ListenerQueue, e), e.$destroy()
						})
					}
				}, {
					key: "_initIntersectionObserver",
					value: function() {
						var t = this;
						z && (this._observer = new IntersectionObserver(this._observerHandler.bind(this), this.options.observerOptions), this.ListenerQueue.length && this.ListenerQueue.forEach(function(e) {
							t._observer.observe(e.el)
						}))
					}
				}, {
					key: "_observerHandler",
					value: function(t, e) {
						var n = this;
						t.forEach(function(t) {
							t.isIntersecting && n.ListenerQueue.forEach(function(e) {
								if(e.el === t.target) {
									if(e.state.loaded) return n._observer.unobserve(e.el);
									e.load()
								}
							})
						})
					}
				}, {
					key: "_elRenderer",
					value: function(t, e, n) {
						if(t.el) {
							var r = t.el,
								i = t.bindType,
								o = void 0;
							switch(e) {
								case "loading":
									o = t.loading;
									break;
								case "error":
									o = t.error;
									break;
								default:
									o = t.src
							}
							if(i ? r.style[i] = 'url("' + o + '")' : r.getAttribute("src") !== o && r.setAttribute("src", o), r.setAttribute("lazy", e), this.$emit(e, t, n), this.options.adapter[e] && this.options.adapter[e](t, this.options), this.options.dispatchEvent) {
								var s = new O(e, {
									detail: t
								});
								r.dispatchEvent(s)
							}
						}
					}
				}, {
					key: "_valueFormatter",
					value: function(t) {
						var e = t,
							n = this.options.loading,
							r = this.options.error;
						return f(t) && (t.src || this.options.silent || console.error("Vue Lazyload warning: miss src with " + t), e = t.src, n = t.loading || this.options.loading, r = t.error || this.options.error), {
							src: e,
							loading: n,
							error: r
						}
					}
				}]), e
			}()
		},
		P = function(t) {
			return {
				props: {
					tag: {
						type: String,
						default: "div"
					}
				},
				render: function(t) {
					return !1 === this.show ? t(this.tag) : t(this.tag, null, this.$slots.default)
				},
				data: function() {
					return {
						el: null,
						state: {
							loaded: !1
						},
						rect: {},
						show: !1
					}
				},
				mounted: function() {
					this.el = this.$el, t.addLazyBox(this), t.lazyLoadHandler()
				},
				beforeDestroy: function() {
					t.removeComponent(this)
				},
				methods: {
					getRect: function() {
						this.rect = this.$el.getBoundingClientRect()
					},
					checkInView: function() {
						return this.getRect(), A && this.rect.top < window.innerHeight * t.options.preLoad && this.rect.bottom > 0 && this.rect.left < window.innerWidth * t.options.preLoad && this.rect.right > 0
					},
					load: function() {
						this.show = !0, this.state.loaded = !0, this.$emit("show", this)
					},
					destroy: function() {
						return this.$destroy
					}
				}
			}
		},
		N = function() {
			function t(e) {
				var n = e.lazy;
				g(this, t), this.lazy = n, n.lazyContainerMananger = this, this._queue = []
			}
			return m(t, [{
				key: "bind",
				value: function(t, e, n) {
					var r = new q({
						el: t,
						binding: e,
						vnode: n,
						lazy: this.lazy
					});
					this._queue.push(r)
				}
			}, {
				key: "update",
				value: function(t, e, n) {
					var r = c(this._queue, function(e) {
						return e.el === t
					});
					r && r.update({
						el: t,
						binding: e,
						vnode: n
					})
				}
			}, {
				key: "unbind",
				value: function(t, e, n) {
					var r = c(this._queue, function(e) {
						return e.el === t
					});
					r && (r.clear(), a(this._queue, r))
				}
			}]), t
		}(),
		M = {
			selector: "img"
		},
		q = function() {
			function t(e) {
				var n = e.el,
					r = e.binding,
					i = e.vnode,
					o = e.lazy;
				g(this, t), this.el = null, this.vnode = i, this.binding = r, this.options = {}, this.lazy = o, this._queue = [], this.update({
					el: n,
					binding: r
				})
			}
			return m(t, [{
				key: "update",
				value: function(t) {
					var e = this,
						n = t.el,
						r = t.binding;
					this.el = n, this.options = k({}, M, r.value), this.getImgs().forEach(function(t) {
						e.lazy.add(t, k({}, e.binding, {
							value: {
								src: "dataset" in t ? t.dataset.src : t.getAttribute("data-src"),
								error: ("dataset" in t ? t.dataset.error : t.getAttribute("data-error")) || e.options.error,
								loading: ("dataset" in t ? t.dataset.loading : t.getAttribute("data-loading")) || e.options.loading
							}
						}), e.vnode)
					})
				}
			}, {
				key: "getImgs",
				value: function() {
					return p(this.el.querySelectorAll(this.options.selector))
				}
			}, {
				key: "clear",
				value: function() {
					var t = this;
					this.getImgs().forEach(function(e) {
						return t.lazy.remove(e)
					}), this.vnode = null, this.binding = null, this.lazy = null
				}
			}]), t
		}(),
		F = function(t) {
			return {
				props: {
					src: [String, Object],
					tag: {
						type: String,
						default: "img"
					}
				},
				render: function(t) {
					return t(this.tag, {
						attrs: {
							src: this.renderSrc
						}
					}, this.$slots.default)
				},
				data: function() {
					return {
						el: null,
						options: {
							src: "",
							error: "",
							loading: "",
							attempt: t.options.attempt
						},
						state: {
							loaded: !1,
							error: !1,
							attempt: 0
						},
						rect: {},
						renderSrc: ""
					}
				},
				watch: {
					src: function() {
						this.init(), t.addLazyBox(this), t.lazyLoadHandler()
					}
				},
				created: function() {
					this.init(), this.renderSrc = this.options.loading
				},
				mounted: function() {
					this.el = this.$el, t.addLazyBox(this), t.lazyLoadHandler()
				},
				beforeDestroy: function() {
					t.removeComponent(this)
				},
				methods: {
					init: function() {
						var e = t._valueFormatter(this.src),
							n = e.src,
							r = e.loading,
							i = e.error;
						this.state.loaded = !1, this.options.src = n, this.options.error = i, this.options.loading = r, this.renderSrc = this.options.loading
					},
					getRect: function() {
						this.rect = this.$el.getBoundingClientRect()
					},
					checkInView: function() {
						return this.getRect(), A && this.rect.top < window.innerHeight * t.options.preLoad && this.rect.bottom > 0 && this.rect.left < window.innerWidth * t.options.preLoad && this.rect.right > 0
					},
					load: function() {
						var e = this,
							n = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : y;
						if(this.state.attempt > this.options.attempt - 1 && this.state.error) return t.options.silent || console.log("VueLazyload log: " + this.options.src + " tried too more than " + this.options.attempt + " times"), void n();
						var r = this.options.src;
						S({
							src: r
						}, function(t) {
							var n = t.src;
							e.renderSrc = n, e.state.loaded = !0
						}, function(t) {
							e.state.attempt++, e.renderSrc = e.options.error, e.state.error = !0
						})
					}
				}
			}
		};
	return {
		install: function(t) {
			var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
				n = V(t),
				r = new n(e),
				i = new N({
					lazy: r
				}),
				o = "2" === t.version.split(".")[0];
			t.prototype.$Lazyload = r, e.lazyComponent && t.component("lazy-component", P(r)), e.lazyImage && t.component("lazy-image", F(r)), o ? (t.directive("lazy", {
				bind: r.add.bind(r),
				update: r.update.bind(r),
				componentUpdated: r.lazyLoadHandler.bind(r),
				unbind: r.remove.bind(r)
			}), t.directive("lazy-container", {
				bind: i.bind.bind(i),
				componentUpdated: i.update.bind(i),
				unbind: i.unbind.bind(i)
			})) : (t.directive("lazy", {
				bind: r.lazyLoadHandler.bind(r),
				update: function(t, e) {
					k(this.vm.$refs, this.vm.$els), r.add(this.el, {
						modifiers: this.modifiers || {},
						arg: this.arg,
						value: t,
						oldValue: e
					}, {
						context: this.vm
					})
				},
				unbind: function() {
					r.remove(this.el)
				}
			}), t.directive("lazy-container", {
				update: function(t, e) {
					i.update(this.el, {
						modifiers: this.modifiers || {},
						arg: this.arg,
						value: t,
						oldValue: e
					}, {
						context: this.vm
					})
				},
				unbind: function() {
					i.unbind(this.el)
				}
			}))
		}
	}
});