仿效百度图片首页效果依赖tuzhu_req.js
/*土著人开发的common组件 @土著人 (http://www.tuzhuren.com)*/ define("common:www/page/jquery/browser.js", function() { var jQuery = window.jQuery || {}; jQuery.browser = function() { var userAgent = navigator.userAgent.toLowerCase(); return { version: (userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || [])[1], safari: /webkit/.test(userAgent), opera: /opera/.test(userAgent), msie: /msie/.test(userAgent) && !/opera/.test(userAgent), mozilla: /mozilla/.test(userAgent) && !/(compatible|webkit)/.test(userAgent) }; }(); return jQuery; }); define("common:www/page/controller/controller.js", function(require, obj, exp) { var controllerObj = { base: require("common:www/page/controller/base.js") }; exp.exports = { get: function(key) { return key = key.toLowerCase(), !controllerObj[key], controllerObj[key]; }, set: function(key, val) { key = key.toLowerCase(), controllerObj[key] || (controllerObj[key] = val); } }; }); define("common:www/page/controller/base.js", function(require) { var jquery = require("jquery"), events = require("common:www/page/events/events.js"), utils = require("common:www/page/utils/utils.js"), base = jquery.extend({ appendTo: function(n) { this.$el.appendTo(n); }, append: function(n, e) { var i = e ? this.$el.find(e) : this.$el; utils.isArray(n) ? this._appendChildren(n, i) : this._appendChild(n, i); }, _appendChildren: function(n, e) { for (var i, t = 0; i = n[t++];) this._appendChild(i, e); }, _appendChild: function(n, e) { n.appendTo(e[0]); } }, events); return base; }); define("common:www/page/events/events.js", function(i) { var n = i("jquery"), e = i("common:www/page/arch/EventDispatcher/EventDispatcher.js"), t = "__bdimg__events", d = "__bdimg__", s = 1e6, o = function() { return "bdimg" + s++ }, r = function() { for (var i, n = 0, e = window[t].length; e > n; n++) i = window[t][n], window[d][i].dispose(), window[d][i] = null }, w = n.extend({}, e.prototype); return w._addEventListener = w.addEventListener, w.addEventListener = function() { var i = Array.prototype.slice.call(arguments); this._addEventListener.apply(this, i), this._guid || (this._guid = o(), window[d][this._guid] = this, window[t].push(this._guid)) }, w.bindEvents = function(i, n) { var e, t; if (n) for (e in n) n.hasOwnProperty(e) && (t = n[e], this[t] && i.addEventListener(e, this[t])) }, n(window).unload(r), window[d] = {}, window[t] = [], w }); define("common:www/page/utils/utils.js", function(e, t, n) { var o = Object.prototype.toString, c = { encodeJsonForQuery: function(e) { var t = e instanceof Array ? [] : {}, n = /^(?:string|boolean|number)/i; for (var r in e) e.hasOwnProperty(r) && n.test(typeof e[r]) && (t[r] = encodeURIComponent(decodeURIComponent(e[r]))); return t }, decodeJsonForQuery: function(e) { var t = e instanceof Array ? [] : {}; for (var n in e) e.hasOwnProperty(n) && (t[n] = decodeURIComponent(e[n])); return t }, jsonToQuery: function(e) { var t = []; e = e || {}; var n = /^(?:string|boolean|number)/i; for (var r in e) e.hasOwnProperty(r) && n.test(typeof e[r]) && t.push(r + "=" + e[r]); return t.join("&") }, queryToJson: function(e) { for (var t, n, r, o, c = e.substr(e.lastIndexOf("?") + 1), i = c.split("&"), u = i.length, l = {}, a = 0; u > a; a++) i[a] && (o = i[a].split("="), t = o[0], n = o[1], r = l[t], "undefined" == typeof r ? l[t] = n : this.isArray(r) ? r.push(n) : l[t] = [r, n]); return l }, getQueryValue: function(e, t) { t = t || window.location.href; var n = new RegExp("(^|&|\\?|#)" + String(e).replace(new RegExp("([.*+?^=!:${}()|[\\]/\\\\])", "g"), "\\$1") + "=([^&#]*)(&|$|#)", ""), r = t.match(n); return r ? r[2] : null }, format: function(e, t) { e = String(e); var n = Array.prototype.slice.call(arguments, 1), r = Object.prototype.toString; return n.length ? (n = 1 == n.length ? null !== t && /\[object Array\]|\[object Object\]/.test(r.call(t)) ? t : n : n, e.replace(/#\{(.+?)\}/g, function(e, t) { var o = n[t]; return "[object Function]" == r.call(o) && (o = o(t)), "undefined" == typeof o ? "" : o })) : e }, throttle: function(e, t) { var n = null; return function() { var r = this, o = arguments; clearTimeout(n), n = setTimeout(function() { e.apply(r, o) }, t) } }, isArray: function(e) { return "[object Array]" === o.call(e) } }; c.getByteLength = function(e) { return String(e).replace(/[^\x00-\xff]/g, "ci").length }, c.encodeURL = function(e) { return String(e).replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "") }, c.encodeHTML = function(e) { return String(e).replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "") }, c.buffer = function(e, t, n) { function r() { r.stop(), o = c.delay(e, t, n || this, arguments) } if (t = t || 150, -1 === t) return function() { e.apply(n || this, arguments) }; var o = null; return r.stop = function() { o && (o.cancel(), o = 0) }, r }, c.delay = function(e, t, n, o) { t = t || 0; var c = function() { e.apply(n, o || []) }; return r = setTimeout(c, t), { cancel: function() { clearTimeout(r) } } }, c.getCookie = function(e) { var t = new RegExp("(^| )" + e + "=([^;]*)(;|$)"), n = t.exec(document.cookie); return n ? n[2] || null : void 0 }, c.setCookie = function(e, t, n, r, o, c) { var i = new Date; i.setTime(i.getTime()), n && (n = 1e3 * n * 60 * 60 * 24); var u = new Date(i.getTime() + n); document.cookie = e + "=" + escape(String(encodeURIComponent(t))) + (n ? ";expires=" + u.toGMTString() : "") + (r ? ";path=" + r : "") + (o ? ";domain=" + o : "") + (c ? ";secure" : "") }, c.scroller = e("common:www/page/utils/scroller.js"), c.pageResizer = e("common:www/page/utils/pageresizer.js"), c.UI = { pageHeight: function() { var e = document; return Math.max(e.body.scrollHeight, e.documentElement.scrollHeight) }, pageWidth: function() { var e = document; return Math.max(e.body.scrollWidth, e.documentElement.scrollWidth) }, clientWidth: function() { var e = document, t = "BackCompat" == e.compatMode ? e.body : e.documentElement; return t.clientWidth }, clientHeight: function() { var e = document, t = "BackCompat" == e.compatMode ? e.body : e.documentElement; return t.clientHeight }, windowHeight: function() { var e = document.documentElement; return self.innerHeight || e && e.clientHeight || document.body.clientHeight }, windowWidth: function() { var e = document.documentElement; return self.innerWidth || e && e.clientWidth || document.body.clientWidth }, screenWidth: function() { return window.screen.width }, screenHeight: function() { return window.screen.height }, scrollY: function(e) { var t = document.documentElement; if (e) { var n = e.parentNode, r = e.scrollTop || 0; return e == t && (r = UI.scrollY()), n ? r + UI.scrollY(n) : r } return self.pageYOffset || t && t.scrollTop || document.body.scrollTop } }, n.exports = c }); define("common:www/page/arch/EventDispatcher/EventDispatcher.js", function() { var t = function() { this.__listeners = {} }; t.prototype = { dispatchEvent: function(t, e) { e = e || {}, e.type || (e.type = t), e.target || (e.target = this), this.__listeners || (this.__listeners = {}); var n, i = this.__listeners[t], s = []; if (i) { for (var r = 0, h = i.length; h > r; r++) n = i[r], n ? (s = n.args.slice(0), s.unshift(e), n.fn.apply(n.owner, s)) : (i.splice(r--, 1), h--); return !0 } return !1 }, addEventListeners: function(t, e, n) { if ("object" == typeof t) for (var i in t) "function" == typeof t[i] && this.addEventListener(i, t[i], e, n); return this }, addEventListener: function(t, e, n, i) { return n = n || this, i = i || [], this.__listeners || (this.__listeners = {}), this.__listeners[t] instanceof Array || (this.__listeners[t] = []), this.__listeners[t].push({ fn: e, owner: n, args: i }), this }, removeEventListener: function(t, e) { var n, i = this.__listeners[t] || []; if (!i || "function" != typeof e) return this.__listeners[t] = [], this; for (var s = 0; s < i.length; s++) n = i[s], n && n.fn === e && (i[s] = null); return this }, removeEventListeners: function(t) { if (t && "object" == typeof t) for (var e in t) this.removeEventListener(e, t[e]); else this.__listeners = {} }, dispose: function() { var t; this.dispatchEvent("disposing"); for (t in this) delete this[t] || (this.name = null) } }; var e = new t; return t.eventCenter = e, t }); define("common:www/page/model/model.js", function(e, o, t) { var n = {}; t.exports = { get: function(e) { return e = e.toLowerCase(), !n[e], n[e] }, set: function(e, o) { e = e.toLowerCase(), n[e] || (n[e] = o) } } }); define("common:www/page/databind/databind.js", function(t, n, e) { function a(t) { for (var n, e, a, i = 0, r = []; n = t[i++];) n = n.split(":"), e = n[0], a = n[1], a && e && r.push({ type: a, name: e }); return r.length ? r : null } function i(t, n, e) { var i, r, d, o, u, l, c = 0; for (i = this.$el[0] == n ? this.$el : s(n), r = i.attr("data-bind"), d = a(r.split(";")); o = d[c++];) u = o.type, l = o.name, p[u] && p[u].bind(this, l, i, this.$el, e && e[l]) } function r(t, n) { return function() { var e = Array.prototype.slice.call(arguments); e.push(n), i.apply(t, e) } } function d(t, n) { var e, a, i, d; return e = s(t), i = s.extend({ $el: e, __prop: {}, __preProp: {} }, c), a = e.find("[data-bind]"), d = r(i, n), a.each(d), e.attr("data-bind") && d(0, e[0]), i } function o(t) { s.extend(p, t) } var s = t("jquery"), u = t("common:www/page/events/events.js"), l = "databound" + (~new Date).toString(16).substr(0, 5), c = s.extend({ set: function(t, n, e) { var a, i, r; if (n != this.__prop[t]) { if ("object" == typeof n && "[object Array]" !== Object.prototype.toString.call(n)) { i = this.__prop[t], r = !1; for (a in n) if (n.hasOwnProperty(a) && (!i || !i[a] || n[a] != i[a])) { r = !0; break } if (!r) return } this.__preProp[t] = this.__prop[t], this.__prop[t] = n, e || this.dispatchEvent("set:" + t, { data: n, fromEle: e }) } }, get: function(t) { return this.__prop[t] }, appendTo: function(t) { this.$el.appendTo(t) } }, u), p = { style: { handler: function(t) { return function(n) { t.css(n.data) } }, bind: function(t, n, e, a, i) { var r = this.handler(e); i && (r.call(t, { data: i }), t.__prop[n] = i), t.addEventListener("set:" + n, r) } }, src: { handler: function(t) { return function(n) { t[0].src = n.data } }, bind: function(t, n, e, a, i) { var r = this.handler(e); i && (r.call(t, { data: i }), t.__prop[n] = i), t.addEventListener("set:" + n, r) } }, dualTxt: { getHandler: function(t) { return function(n) { n.fromEle || t.val(n.data) } }, setHandler: function(t, n) { function e() { t.set(n, t.__inputVal), t.__inputVal = "", t.__keyupTimer = null } return function(a) { t.__keyupTimer ? clearTimeout(t.__keyupTimer) : t.dispatchEvent("typing:" + n), t.__keyupTimer = setTimeout(e, 200), t.__inputVal = a.target.value } }, bind: function(t, n, e, a, i) { var r = this.getHandler(e); t.addEventListener("set:" + n, r), e.bind("keyup", this.setHandler(t, n)), i && (r.call(t, { data: i }), t.__prop[n] = i) } }, txt: { handler: function(t) { return function(n) { t.text(n.data) } }, bind: function(t, n, e, a, i) { var r = this.handler(e); t.addEventListener("set:" + n, r), i && (r.call(t, { data: i }), t.__prop[n] = i) } }, cls: { handler: function(t, n) { return function(e) { this.__preProp[t] && n.removeClass(this.__preProp[t]), n.addClass(e.data) } }, bind: function(t, n, e, a, i) { var r = this.handler(n, e); t.addEventListener("set:" + n, r), i && (r.call(t, { data: i }), t.__prop[n] = i) } }, click: { handler: function(t, n) { return function(e) { t.dispatchEvent("click:" + n, e) } }, bind: function(t, n, e, a) { var i = this.handler(t, n); e.addClass(l + "-" + n), e == a ? a.bind("click", i) : a.delegate("." + l + "-" + n, "click", i) } }, mouseenter: { handler: function(t, n) { return function(e) { t.dispatchEvent("mouseenter:" + n, e) } }, bind: function(t, n, e, a) { var i = this.handler(t, n); e.addClass(l + "-" + n), e == a ? a.bind("mouseenter", i) : a.delegate("." + l + "-" + n, "mouseenter", i) } }, mouseleave: { handler: function(t, n) { return function(e) { t.dispatchEvent("mouseleave:" + n, e) } }, bind: function(t, n, e, a) { var i = this.handler(t, n); e.addClass(l + "-" + n), e == a ? a.bind("mouseleave", i) : a.delegate("." + l + "-" + n, "mouseleave", i) } }, link: { handler: function(t) { return function(n) { t[0].href = n.data } }, bind: function(t, n, e, a, i) { var r = this.handler(e); i && (r.call(t, { data: i }), t.__prop[n] = i), t.addEventListener("set:" + n, r) } }, attr: { handler: function(t) { return function(n) { t.attr(n.data) } }, bind: function(t, n, e, a, i) { var r = this.handler(e); i && (r.call(t, { data: i }), t.__prop[n] = i), t.addEventListener("set:" + n, r) } } }; e.exports = { bind: d, mixinBoundMap: o } }); define("common:www/page/slider/slider.js", function(t, i, s) { function n(t, i, s, n) { var e = this; this.$el = t, this.$cnt, this.$slideCnt, this.duration = n.duration, this.isCycle = n.isCycle, this.curIdx = 0, this.slideWidth = this.$el.width(), this.slidesNum = i.length, this.autoAnimateInterval = n.autoAnimateInterval || 5e3, this.autoTurning = s, this._leftBtnClickHandler = function(t) { t.preventDefault(), e.turnLeft() }, this._rightBtnClickHandler = function(t) { t.preventDefault(), e.turnRight() }, this._animationFinish = function() { e.isAnimating = !1 }, this._autoTurning = function() { e._timer = null, e.turnRight(), e.startAutoAnimation() }, this._mouseEnterHandler = function() { e.stopAutoAnimation() }, this._mouseLeaveHandler = function() { e.startAutoAnimation() }, this._dotClikeHandler = function (t) { t.preventDefault(), e.dotMoveslide(this); }, this.realIdx = 0, i.addClass("slide-show-ctn"), this._buildContainer(i), i = null, s && this.startAutoAnimation() } var e = t("jquery"), h = t("common:www/page/events/events.js"); e.extend(n.prototype, h, { _buildContainer: function(t) { this.$el.append('<div class="mod-slide-show"><div class="cnt"></div></div><div class="three_dot"><div class="dot_box"></div></div>'), this.$cnt = this.$el.find("div.cnt"), this.$dot = this.$el.find("div.dot_box"); this.$slideCnt = this.$el.find("div.mod-slide-show"), this.$cnt.width(this.slideWidth * this.slidesNum), this.autoTurning && (this.$el.bind("mouseenter", this._mouseEnterHandler), this.$el.bind("mouseleave", this._mouseLeaveHandler)), t.appendTo(this.$cnt); this._buildDot(); }, _buildDot: function () { var i, cur = "cur", dotItem = ""; for (i = 0; i < this.slidesNum; i++) { !~-i && (cur = ""); dotItem += '<a class="' + cur + '" href="###"></a>'; } this.$dot.append(dotItem); this.$dot.find("a").bind("click", this._dotClikeHandler); }, dotMoveslide: function (cur) { var cliDot = $(cur).index(), oldDot = $(cur).filter(".cur").index(); cliDot !== oldDot && (cliDot > oldDot ? this.turnRight() : this.turnLeft()); }, _moveSlide: function(t, i) { var s = { first: "prepend", last: "append" }; this.$cnt[s[t]](i) }, _moveFirstSlideToLast: function() { this._moveSlide("last", this.$cnt.children(":first")), this.curIdx--, this.$slideCnt[0].scrollLeft = this.slideWidth * this.curIdx }, _moveLastSlideToFirst: function() { this._moveSlide("first", this.$cnt.children(":last")), this.curIdx++, this.$slideCnt[0].scrollLeft = this.slideWidth * this.curIdx }, turnLeft: function() { if (this.isAnimating) return this; if (0 == this.curIdx) { if (!this.isCycle) return; this._moveLastSlideToFirst() } return this._animate("left"), this.curIdx--, this.realIdx--, this.realIdx < 0 && (this.realIdx = this.slidesNum - 1), this.$dot.find("a").removeClass("cur").eq(this.realIdx).addClass("cur"), this.dispatchEvent("slideMoved", { realIdx: this.realIdx }), this }, turnRight: function() { var t; if (this.isAnimating) return this; if (this.curIdx == this.slidesNum - 1) { if (!this.isCycle) return; this._moveFirstSlideToLast() } return t = this._animate("right"), this.curIdx++, this.realIdx++, this.realIdx >= this.slidesNum && (this.realIdx = 0), this.$dot.find("a").removeClass("cur").eq(this.realIdx).addClass("cur"), this.dispatchEvent("slideMoved", { realIdx: this.realIdx }), this }, _animate: function(t) { var i = { left: "-=", right: "+=" }; return this.isAnimating = !0, this.stopAutoAnimation(), this.$slideCnt.animate({ scrollLeft: i[t] + this.slideWidth }, this.duration, this._animationFinish) }, setBtns: function(t, i) { t.bind("click", this._leftBtnClickHandler), i.bind("click", this._rightBtnClickHandler) }, startAutoAnimation: function() { this.autoTurning && (this._timer || (this._timer = setTimeout(this._autoTurning, this.autoAnimateInterval))) }, stopAutoAnimation: function() { this._timer && (clearTimeout(this._timer), this._timer = null) }, updateContentWidth: function() { return this.stopAutoAnimation(), this.isAnimating ? (setTimeout(this.updateContentWidth.bind(this), this.duration), void 0) : (this.slideWidth = this.$el.width(), this.$cnt.width(this.slideWidth * this.slidesNum), this.$slideCnt[0].scrollLeft = this.curIdx * this.slideWidth, this.startAutoAnimation(), void 0) } }), s.exports = { init: function(t, i, s) { var h, d, l, r, o = e(t), a = e(i), u = { leftBtnSel: ".slide-left-btn", rightBtnSel: ".slide-right-btn", autoAnimate: !0, duration: 800, isCycle: !0 }; return !o.length || a.length <= 1 ? (r = new Function, { updateContentWidth: r, stopAutoAnimation: r, startAutoAnimation: r, setBtns: r, turnRight: r, turnLeft: r, addEventListener: r, removeEventListener: r }) : (e.extend(u, s), h = e(u.leftBtnSel), d = e(u.rightBtnSel), l = new n(o, a, u.autoAnimate, { duration: u.duration, isCycle: u.isCycle }), h.length && d.length && l.setBtns(h, d), l) } } }); define("common:www/page/utils/scroller.js", function(i) { var t = i("jquery"), n = i("common:www/page/events/events.js"), s = { _timer: null, _isInit: !1, _lastNotifyTime: -1, _lastCheckTime: -1, _scrollTop: 0, _isRunning: !1, tick: 0, duration: 0, init: function(i) { var n = t.extend({ tick: 200, duration: 400 }, i); return this._isInit ? this : (this.tick = n.tick, this.duration = n.duration, this._isInit = !0, this) }, isInited: function() { return this._isInit }, start: function() { this._isRunning || (t(window).bind("scroll", this.scrolling), this._isRunning = !0) }, stop: function() { t(window).unbind("scroll", this.scrolling), this._isRunning = !1 }, scrolling: function() { var i = new Date; s._timer ? (-1 != s._lastCheckTime && i - s._lastCheckTime >= s.tick / 2 && (clearTimeout(s._timer), s._timer = setTimeout(s.scrollFinished, s.tick), s._lastCheckTime = i), -1 != s._lastNotifyTime && i - s._lastNotifyTime >= s.duration && s.notifyScrolling(i)) : (s.dispatchEvent("scrollBegin"), s._timer = setTimeout(s.scrollFinished, s.tick), s._lastNotifyTime = i, s._lastCheckTime = i) }, scrollFinished: function() { s.notifyScrolling(), s.emit("scrollEnd"), s._lastNotifyTime = -1, s._timer = null }, notifyScrolling: function(i) { this.emit("scrolling"), this._lastNotifyTime = i }, emit: function(i) { var n = t(window).scrollTop(); this.dispatchEvent(i, { scrollTop: n, scrollingDown: n > this._scrollTop }), this._scrollTop = n } }; return t.extend(s, n), s }); define("common:www/page/utils/pageresizer.js", function(i) { var t = i("jquery"), n = i("common:www/page/events/events.js"), browser = i("common:www/page/jquery/browser.js"), e = { _timer: null, _isInit: !1, _isRunning: !1, _lastNotifyTime: -1, tick: 200, duration: 400, curWidth: -1, curHeight: -1, init: function(i) { var n = t.extend({ tick: 200, duration: 400 }, i); return this._isInit ? this : (browser.browser.msie && browser.browser.version < 8 && (this._resizeing = this.resizing, this.resizing = this.resizingIE7), this.tick = n.tick, this.duration = n.duration, this._isInit = !0, this) }, isInited: function() { return this._isInit }, start: function() { this._isRunning || (t(window).bind("resize", this.resizing), this._isRunning = !0) }, stop: function() { t(window).unbind("resize", this.resizing), this._isRunning = !1 }, resizingIE7: function() { var i = t(window).width(), n = t(window).height(); (e.curWidth != i || e.curHeight != n) && (e.curWidth = i, e.curHeight = n, e._resizeing()) }, resizing: function() { var i = new Date; e._timer ? (clearTimeout(e._timer), e._timer = setTimeout(e.resizeFinished, e.tick), -1 != e._lastNotifyTime && i - e._lastNotifyTime >= e.duration && e.notifyReszing(i)) : (e.dispatchEvent("resizeBegin"), e._timer = setTimeout(e.resizeFinished, e.tick), e._lastNotifyTime = i) }, resizeFinished: function() { e.notifyReszing(), e.dispatchEvent("resizeEnd"), e._lastNotifyTime = -1, e._timer = null }, notifyReszing: function(i) { this._lastNotifyTime = i, this.dispatchEvent("resizing") } }; return t.extend(e, n), e }); define("common:www/page/zoomdetector/detector.js", function(b) { var a = b("jquery"), c = (b("common:www/page/events/events.js"), function() { var k = !0, h = function() { return Math.round(screen.deviceXDPI / screen.logicalXDPI * 100) / 100 }, f = function() { return Math.round(document.documentElement.offsetHeight / window.innerHeight * 100) / 100 }, g = function() { var d = window.top.outerWidth / window.top.innerWidth; return Math.round(100 * d) / 100 }, j = function() { var d = null, i = null; return function(n) { var s = !1, e = [".-wzd-zoomdetect {", "text-decoration: none", "}", "@media only screen and (-o-min-device-pixel-ratio: ", n, "/1),", "only screen and (min--moz-device-pixel-ratio: ", n, "), ", "only screen and (-webkit-min-device-pixel-ratio: ", n, "), ", "only screen and (min-resolution: 240dpi), ", "only screen and (min-resolution: 2dppx) {", ".-wzd-zoomdetect {", "text-decoration: underline", "}", "}"].join(""); if (i && d) { d.text(e), s = "underline" == i.css("text-decoration") } else { try { i = a('<div style="display:none;">a</div>').hide().addClass("-wzd-zoomdetect").appendTo("body"), d = a('<style type="text/css">' + e + "</style>"), d.insertBefore(i), s = "underline" == i.css("text-decoration") } catch (t) { } } return s } }(), m = function() { var i = 0.01, d = function(u, e, s) { var t = (u + e) / 2; return 0 >= s || i > e - u ? t : j(t) ? d(t, e, s - 1) : d(u, t, s - 1) }; return d(0, 5, 10) }, p = {detected: !1,retina: !1}, l = function() { return p.detected ? p.retina : (p = {detected: !0,retina: j(2)}, p.retina) }, q = function() { var e = 1, d = navigator.userAgent.toLowerCase(); return isNaN(screen.logicalXDPI) || isNaN(screen.systemXDPI) ? window.navigator.msMaxTouchPoints ? function() { return e = f() } : /BIDUBrowser/i.test(d) ? function() { return k = !1, e } : /webkit/i.test(d) || /opera/i.test(d) ? function() { return e = g() } : /firefox/i.test(d) ? function() { return l() ? (e = 1, k = !1) : e = m(), e } : parseInt(window.top.outerWidth, 10) ? function() { return e = g() } : function() { return k = !1, e } : function() { return e = h() } }(); return q(), {support: function() { return k },detect: q} }()); return {detect: function() { var d = 1; return c.support() && (d = c.detect(), d > 0.95 && 1.05 > d && (d = 1)), d }} });