-
-
Save pganti/08389d941c688bba1d6aa0a14a7fbd7b to your computer and use it in GitHub Desktop.
cnet
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*! | |
* jQuery JavaScript Library v1.8.3 | |
* http://jquery.com/ | |
* | |
* Includes Sizzle.js | |
* http://sizzlejs.com/ | |
* | |
* Copyright 2012 jQuery Foundation and other contributors | |
* Released under the MIT license | |
* http://jquery.org/license | |
* | |
* Date: Tue Nov 13 2012 08:20:33 GMT-0500 (Eastern Standard Time) | |
*/ | |
;/*7P1RCD3H9R0M*/ | |
var I10C; | |
var I11C; | |
(function(I10C) { | |
I10C.ScriptBegin || (I10C.ScriptBegin = function() {} | |
); | |
I10C.ScriptEnd || (I10C.ScriptEnd = function() {} | |
); | |
I10C.PostMessage || (I10C.PostMessage = function() { | |
return this.postMessage.apply(this, arguments); | |
} | |
); | |
I10C.Location || (I10C.Location = function i10cloc(ba$e, isWrite, op) { | |
var locat1onPresent = Object.getOwnPropertyNames(ba$e).indexOf('locat1on') !== -1; | |
return (!isWrite) ? (locat1onPresent ? ba$e.locat1on : (ba$e.location || ba$e.locat1on)) : (locat1onPresent ? { | |
set href(v) { | |
ba$e.locat1on.href = v; | |
}, | |
get href() { | |
return i10cloc(ba$e, false, op); | |
} | |
} : { | |
set href(v) { | |
ba$e.location = v; | |
}, | |
get href() { | |
return i10cloc(ba$e, false, op); | |
} | |
}); | |
} | |
); | |
I11C.PreLocationContextProxy || (I11C.PreLocationContextProxy = function i10cPreLocContext(ba$e) { | |
return ba$e; | |
} | |
); | |
} | |
)(I11C || I10C || (I11C = {})); | |
(I11C || I10C).ScriptBegin(); | |
/*! | |
* Sizzle CSS Selector Engine | |
* Copyright 2012 jQuery Foundation and other contributors | |
* Released under the MIT license | |
* http://sizzlejs.com/ | |
*/ | |
/*! | |
* jQuery Cookie Plugin v1.2 | |
* https://github.com/carhartl/jquery-cookie | |
* | |
* Copyright 2011, Klaus Hartl | |
* Dual licensed under the MIT or GPL Version 2 licenses. | |
* http://www.opensource.org/licenses/mit-license.php | |
* http://www.opensource.org/licenses/GPL-2.0 | |
*/ | |
/* | |
* Modified verion of uuid.js | |
* | |
* Copyright (c) 2010-2012 Robert Kieffer | |
* MIT License - http://opensource.org/licenses/mit-license.php | |
*/ | |
/*! jQuery UI - v1.9.2 - 2012-12-11 | |
* http://jqueryui.com | |
* Includes: jquery.ui.widget.js | |
* Copyright (c) 2012 jQuery Foundation and other contributors Licensed MIT */ | |
// | |
// usertiming.js | |
// | |
// A polyfill for UserTiming (http://www.w3.org/TR/user-timing/) | |
// | |
// Copyright 2013 Nic Jansma | |
// http://nicj.net | |
// | |
// https://github.com/nicjansma/usertiming.js | |
// | |
// Licensed under the MIT license | |
// | |
define("managers/page-vars", [], function() { | |
return window.CnetPageVars.tracking.data = window.utag_data, | |
window.CnetPageVars | |
}), | |
function(e, t) { | |
function n(e) { | |
var t = ge[e] = {}; | |
return K.each(e.split(te), function(e, n) { | |
t[n] = !0 | |
}), | |
t | |
} | |
function i(e, n, i) { | |
if (i === t && 1 === e.nodeType) { | |
var r = "data-" + n.replace(me, "-$1").toLowerCase(); | |
if ("string" == typeof (i = e.getAttribute(r))) { | |
try { | |
i = "true" === i || "false" !== i && ("null" === i ? null : +i + "" === i ? +i : he.test(i) ? K.parseJSON(i) : i) | |
} catch (e) {} | |
K.data(e, n, i) | |
} else | |
i = t | |
} | |
return i | |
} | |
function r(e) { | |
var t; | |
for (t in e) | |
if (("data" !== t || !K.isEmptyObject(e[t])) && "toJSON" !== t) | |
return !1; | |
return !0 | |
} | |
function o() { | |
return !1 | |
} | |
function a() { | |
return !0 | |
} | |
function s(e) { | |
return !e || !e.parentNode || 11 === e.parentNode.nodeType | |
} | |
function l(e, t) { | |
do { | |
e = e[t] | |
} while (e && 1 !== e.nodeType);return e | |
} | |
function d(e, t, n) { | |
if (t = t || 0, | |
K.isFunction(t)) | |
return K.grep(e, function(e, i) { | |
return !!t.call(e, i, e) === n | |
}); | |
if (t.nodeType) | |
return K.grep(e, function(e, i) { | |
return e === t === n | |
}); | |
if ("string" == typeof t) { | |
var i = K.grep(e, function(e) { | |
return 1 === e.nodeType | |
}); | |
if (Oe.test(t)) | |
return K.filter(t, i, !n); | |
t = K.filter(t, i) | |
} | |
return K.grep(e, function(e, i) { | |
return K.inArray(e, t) >= 0 === n | |
}) | |
} | |
function c(e) { | |
var t = Re.split("|") | |
, n = e.createDocumentFragment(); | |
if (n.createElement) | |
for (; t.length; ) | |
n.createElement(t.pop()); | |
return n | |
} | |
function u(e, t) { | |
return e.getElementsByTagName(t)[0] || e.appendChild(e.ownerDocument.createElement(t)) | |
} | |
function p(e, t) { | |
if (1 === t.nodeType && K.hasData(e)) { | |
var n, i, r, o = K._data(e), a = K._data(t, o), s = o.events; | |
if (s) { | |
delete a.handle, | |
a.events = {}; | |
for (n in s) | |
for (i = 0, | |
r = s[n].length; i < r; i++) | |
K.event.add(t, n, s[n][i]) | |
} | |
a.data && (a.data = K.extend({}, a.data)) | |
} | |
} | |
function f(e, t) { | |
var n; | |
1 === t.nodeType && (t.clearAttributes && t.clearAttributes(), | |
t.mergeAttributes && t.mergeAttributes(e), | |
n = t.nodeName.toLowerCase(), | |
"object" === n ? (t.parentNode && (t.outerHTML = e.outerHTML), | |
K.support.html5Clone && e.innerHTML && !K.trim(t.innerHTML) && (t.innerHTML = e.innerHTML)) : "input" === n && Je.test(e.type) ? (t.defaultChecked = t.checked = e.checked, | |
t.value !== e.value && (t.value = e.value)) : "option" === n ? t.selected = e.defaultSelected : "input" === n || "textarea" === n ? t.defaultValue = e.defaultValue : "script" === n && t.text !== e.text && (t.text = e.text), | |
t.removeAttribute(K.expando)) | |
} | |
function g(e) { | |
return void 0 !== e.getElementsByTagName ? e.getElementsByTagName("*") : void 0 !== e.querySelectorAll ? e.querySelectorAll("*") : [] | |
} | |
function h(e) { | |
Je.test(e.type) && (e.defaultChecked = e.checked) | |
} | |
function m(e, t) { | |
if (t in e) | |
return t; | |
for (var n = t.charAt(0).toUpperCase() + t.slice(1), i = t, r = yt.length; r--; ) | |
if ((t = yt[r] + n)in e) | |
return t; | |
return i | |
} | |
function y(e, t) { | |
return e = t || e, | |
"none" === K.css(e, "display") || !K.contains(e.ownerDocument, e) | |
} | |
function v(e, t) { | |
for (var n, i, r = [], o = 0, a = e.length; o < a; o++) | |
n = e[o], | |
n.style && (r[o] = K._data(n, "olddisplay"), | |
t ? (r[o] || "none" !== n.style.display || (n.style.display = ""), | |
"" === n.style.display && y(n) && (r[o] = K._data(n, "olddisplay", x(n.nodeName)))) : (i = nt(n, "display"), | |
r[o] || "none" === i || K._data(n, "olddisplay", i))); | |
for (o = 0; o < a; o++) | |
n = e[o], | |
n.style && (t && "none" !== n.style.display && "" !== n.style.display || (n.style.display = t ? r[o] || "" : "none")); | |
return e | |
} | |
function b(e, t, n) { | |
var i = ct.exec(t); | |
return i ? Math.max(0, i[1] - (n || 0)) + (i[2] || "px") : t | |
} | |
function w(e, t, n, i) { | |
for (var r = n === (i ? "border" : "content") ? 4 : "width" === t ? 1 : 0, o = 0; r < 4; r += 2) | |
"margin" === n && (o += K.css(e, n + mt[r], !0)), | |
i ? ("content" === n && (o -= parseFloat(nt(e, "padding" + mt[r])) || 0), | |
"margin" !== n && (o -= parseFloat(nt(e, "border" + mt[r] + "Width")) || 0)) : (o += parseFloat(nt(e, "padding" + mt[r])) || 0, | |
"padding" !== n && (o += parseFloat(nt(e, "border" + mt[r] + "Width")) || 0)); | |
return o | |
} | |
function k(e, t, n) { | |
var i = "width" === t ? e.offsetWidth : e.offsetHeight | |
, r = !0 | |
, o = K.support.boxSizing && "border-box" === K.css(e, "boxSizing"); | |
if (i <= 0 || null == i) { | |
if (i = nt(e, t), | |
(i < 0 || null == i) && (i = e.style[t]), | |
ut.test(i)) | |
return i; | |
r = o && (K.support.boxSizingReliable || i === e.style[t]), | |
i = parseFloat(i) || 0 | |
} | |
return i + w(e, t, n || (o ? "border" : "content"), r) + "px" | |
} | |
function x(e) { | |
if (ft[e]) | |
return ft[e]; | |
var t = K("<" + e + ">").appendTo(F.body) | |
, n = t.css("display"); | |
return t.remove(), | |
"none" !== n && "" !== n || (it = F.body.appendChild(it || K.extend(F.createElement("iframe"), { | |
frameBorder: 0, | |
width: 0, | |
height: 0 | |
})), | |
rt && it.createElement || (rt = (it.contentWindow || it.contentDocument).document, | |
rt.write("<!doctype html><html><body>"), | |
rt.close()), | |
t = rt.body.appendChild(rt.createElement(e)), | |
n = nt(t, "display"), | |
F.body.removeChild(it)), | |
ft[e] = n, | |
n | |
} | |
function C(e, t, n, i) { | |
var r; | |
if (K.isArray(t)) | |
K.each(t, function(t, r) { | |
n || wt.test(e) ? i(e, r) : C(e + "[" + ("object" == typeof r ? t : "") + "]", r, n, i) | |
}); | |
else if (n || "object" !== K.type(t)) | |
i(e, t); | |
else | |
for (r in t) | |
C(e + "[" + r + "]", t[r], n, i) | |
} | |
function _(e) { | |
return function(t, n) { | |
"string" != typeof t && (n = t, | |
t = "*"); | |
var i, r, o, a = t.toLowerCase().split(te), s = 0, l = a.length; | |
if (K.isFunction(n)) | |
for (; s < l; s++) | |
i = a[s], | |
o = /^\+/.test(i), | |
o && (i = i.substr(1) || "*"), | |
r = e[i] = e[i] || [], | |
r[o ? "unshift" : "push"](n) | |
} | |
} | |
function T(e, n, i, r, o, a) { | |
o = o || n.dataTypes[0], | |
a = a || {}, | |
a[o] = !0; | |
for (var s, l = e[o], d = 0, c = l ? l.length : 0, u = e === Ot; d < c && (u || !s); d++) | |
"string" == typeof (s = l[d](n, i, r)) && (!u || a[s] ? s = t : (n.dataTypes.unshift(s), | |
s = T(e, n, i, r, s, a))); | |
return !u && s || a["*"] || (s = T(e, n, i, r, "*", a)), | |
s | |
} | |
function A(e, n) { | |
var i, r, o = K.ajaxSettings.flatOptions || {}; | |
for (i in n) | |
n[i] !== t && ((o[i] ? e : r || (r = {}))[i] = n[i]); | |
r && K.extend(!0, e, r) | |
} | |
function S(e, n, i) { | |
var r, o, a, s, l = e.contents, d = e.dataTypes, c = e.responseFields; | |
for (o in c) | |
o in i && (n[c[o]] = i[o]); | |
for (; "*" === d[0]; ) | |
d.shift(), | |
r === t && (r = e.mimeType || n.getResponseHeader("content-type")); | |
if (r) | |
for (o in l) | |
if (l[o] && l[o].test(r)) { | |
d.unshift(o); | |
break | |
} | |
if (d[0]in i) | |
a = d[0]; | |
else { | |
for (o in i) { | |
if (!d[0] || e.converters[o + " " + d[0]]) { | |
a = o; | |
break | |
} | |
s || (s = o) | |
} | |
a = a || s | |
} | |
if (a) | |
return a !== d[0] && d.unshift(a), | |
i[a] | |
} | |
function j(e, t) { | |
var n, i, r, o, a = e.dataTypes.slice(), s = a[0], l = {}, d = 0; | |
if (e.dataFilter && (t = e.dataFilter(t, e.dataType)), | |
a[1]) | |
for (n in e.converters) | |
l[n.toLowerCase()] = e.converters[n]; | |
for (; r = a[++d]; ) | |
if ("*" !== r) { | |
if ("*" !== s && s !== r) { | |
if (!(n = l[s + " " + r] || l["* " + r])) | |
for (i in l) | |
if (o = i.split(" "), | |
o[1] === r && (n = l[s + " " + o[0]] || l["* " + o[0]])) { | |
!0 === n ? n = l[i] : !0 !== l[i] && (r = o[0], | |
a.splice(d--, 0, r)); | |
break | |
} | |
if (!0 !== n) | |
if (n && e.throws) | |
t = n(t); | |
else | |
try { | |
t = n(t) | |
} catch (e) { | |
return { | |
state: "parsererror", | |
error: n ? e : "No conversion from " + s + " to " + r | |
} | |
} | |
} | |
s = r | |
} | |
return { | |
state: "success", | |
data: t | |
} | |
} | |
function N() { | |
try { | |
return new e.XMLHttpRequest | |
} catch (e) {} | |
} | |
function E() { | |
try { | |
return new e.ActiveXObject("Microsoft.XMLHTTP") | |
} catch (e) {} | |
} | |
function D() { | |
return setTimeout(function() { | |
Wt = t | |
}, 0), | |
Wt = K.now() | |
} | |
function P(e, t) { | |
K.each(t, function(t, n) { | |
for (var i = (Kt[t] || []).concat(Kt["*"]), r = 0, o = i.length; r < o; r++) | |
if (i[r].call(e, t, n)) | |
return | |
}) | |
} | |
function I(e, t, n) { | |
var i, r = 0, o = Qt.length, a = K.Deferred().always(function() { | |
delete s.elem | |
}), s = function() { | |
for (var t = Wt || D(), n = Math.max(0, l.startTime + l.duration - t), i = n / l.duration || 0, r = 1 - i, o = 0, s = l.tweens.length; o < s; o++) | |
l.tweens[o].run(r); | |
return a.notifyWith(e, [l, r, n]), | |
r < 1 && s ? n : (a.resolveWith(e, [l]), | |
!1) | |
}, l = a.promise({ | |
elem: e, | |
props: K.extend({}, t), | |
opts: K.extend(!0, { | |
specialEasing: {} | |
}, n), | |
originalProperties: t, | |
originalOptions: n, | |
startTime: Wt || D(), | |
duration: n.duration, | |
tweens: [], | |
createTween: function(t, n, i) { | |
var r = K.Tween(e, l.opts, t, n, l.opts.specialEasing[t] || l.opts.easing); | |
return l.tweens.push(r), | |
r | |
}, | |
stop: function(t) { | |
for (var n = 0, i = t ? l.tweens.length : 0; n < i; n++) | |
l.tweens[n].run(1); | |
return t ? a.resolveWith(e, [l, t]) : a.rejectWith(e, [l, t]), | |
this | |
} | |
}), d = l.props; | |
for (L(d, l.opts.specialEasing); r < o; r++) | |
if (i = Qt[r].call(l, e, d, l.opts)) | |
return i; | |
return P(l, d), | |
K.isFunction(l.opts.start) && l.opts.start.call(e, l), | |
K.fx.timer(K.extend(s, { | |
anim: l, | |
queue: l.opts.queue, | |
elem: e | |
})), | |
l.progress(l.opts.progress).done(l.opts.done, l.opts.complete).fail(l.opts.fail).always(l.opts.always) | |
} | |
function L(e, t) { | |
var n, i, r, o, a; | |
for (n in e) | |
if (i = K.camelCase(n), | |
r = t[i], | |
o = e[n], | |
K.isArray(o) && (r = o[1], | |
o = e[n] = o[0]), | |
n !== i && (e[i] = o, | |
delete e[n]), | |
(a = K.cssHooks[i]) && "expand"in a) { | |
o = a.expand(o), | |
delete e[i]; | |
for (n in o) | |
n in e || (e[n] = o[n], | |
t[n] = r) | |
} else | |
t[i] = r | |
} | |
function M(e, t, n) { | |
var i, r, o, a, s, l, d, c, u, p = this, f = e.style, g = {}, h = [], m = e.nodeType && y(e); | |
n.queue || (c = K._queueHooks(e, "fx"), | |
null == c.unqueued && (c.unqueued = 0, | |
u = c.empty.fire, | |
c.empty.fire = function() { | |
c.unqueued || u() | |
} | |
), | |
c.unqueued++, | |
p.always(function() { | |
p.always(function() { | |
c.unqueued--, | |
K.queue(e, "fx").length || c.empty.fire() | |
}) | |
})), | |
1 === e.nodeType && ("height"in t || "width"in t) && (n.overflow = [f.overflow, f.overflowX, f.overflowY], | |
"inline" === K.css(e, "display") && "none" === K.css(e, "float") && (K.support.inlineBlockNeedsLayout && "inline" !== x(e.nodeName) ? f.zoom = 1 : f.display = "inline-block")), | |
n.overflow && (f.overflow = "hidden", | |
K.support.shrinkWrapBlocks || p.done(function() { | |
f.overflow = n.overflow[0], | |
f.overflowX = n.overflow[1], | |
f.overflowY = n.overflow[2] | |
})); | |
for (i in t) | |
if (o = t[i], | |
Xt.exec(o)) { | |
if (delete t[i], | |
l = l || "toggle" === o, | |
o === (m ? "hide" : "show")) | |
continue; | |
h.push(i) | |
} | |
if (a = h.length) { | |
s = K._data(e, "fxshow") || K._data(e, "fxshow", {}), | |
"hidden"in s && (m = s.hidden), | |
l && (s.hidden = !m), | |
m ? K(e).show() : p.done(function() { | |
K(e).hide() | |
}), | |
p.done(function() { | |
var t; | |
K.removeData(e, "fxshow", !0); | |
for (t in g) | |
K.style(e, t, g[t]) | |
}); | |
for (i = 0; i < a; i++) | |
r = h[i], | |
d = p.createTween(r, m ? s[r] : 0), | |
g[r] = s[r] || K.style(e, r), | |
r in s || (s[r] = d.start, | |
m && (d.end = d.start, | |
d.start = "width" === r || "height" === r ? 1 : 0)) | |
} | |
} | |
function O(e, t, n, i, r) { | |
return new O.prototype.init(e,t,n,i,r) | |
} | |
function q(e, t) { | |
var n, i = { | |
height: e | |
}, r = 0; | |
for (t = t ? 1 : 0; r < 4; r += 2 - t) | |
n = mt[r], | |
i["margin" + n] = i["padding" + n] = e; | |
return t && (i.opacity = i.width = e), | |
i | |
} | |
function B(e) { | |
return K.isWindow(e) ? e : 9 === e.nodeType && (e.defaultView || e.parentWindow) | |
} | |
var R, $, F = e.document, H = ((I11C || I10C).PreLocationContextProxy)(e).locat1on, U = e.navigator, z = e.jQuery, V = e.$, W = Array.prototype.push, G = Array.prototype.slice, X = Array.prototype.indexOf, J = Object.prototype.toString, Y = Object.prototype.hasOwnProperty, Q = String.prototype.trim, K = function(e, t) { | |
return new K.fn.init(e,t,R) | |
}, Z = /[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source, ee = /\S/, te = /\s+/, ne = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ie = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, re = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, oe = /^[\],:{}\s]*$/, ae = /(?:^|:|,)(?:\s*\[)+/g, se = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g, le = /"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g, de = /^-ms-/, ce = /-([\da-z])/gi, ue = function(e, t) { | |
return (t + "").toUpperCase() | |
}, pe = function() { | |
F.addEventListener ? (F.removeEventListener("DOMContentLoaded", pe, !1), | |
K.ready()) : "complete" === F.readyState && (F.detachEvent("onreadystatechange", pe), | |
K.ready()) | |
}, fe = {}; | |
K.fn = K.prototype = { | |
constructor: K, | |
init: function(e, n, i) { | |
var r, o, a; | |
if (!e) | |
return this; | |
if (e.nodeType) | |
return this.context = this[0] = e, | |
this.length = 1, | |
this; | |
if ("string" == typeof e) { | |
if (!(r = "<" === e.charAt(0) && ">" === e.charAt(e.length - 1) && e.length >= 3 ? [null, e, null] : ie.exec(e)) || !r[1] && n) | |
return !n || n.jquery ? (n || i).find(e) : this.constructor(n).find(e); | |
if (r[1]) | |
return n = n instanceof K ? n[0] : n, | |
a = n && n.nodeType ? n.ownerDocument || n : F, | |
e = K.parseHTML(r[1], a, !0), | |
re.test(r[1]) && K.isPlainObject(n) && this.attr.call(e, n, !0), | |
K.merge(this, e); | |
if ((o = F.getElementById(r[2])) && o.parentNode) { | |
if (o.id !== r[2]) | |
return i.find(e); | |
this.length = 1, | |
this[0] = o | |
} | |
return this.context = F, | |
this.selector = e, | |
this | |
} | |
return K.isFunction(e) ? i.ready(e) : (e.selector !== t && (this.selector = e.selector, | |
this.context = e.context), | |
K.makeArray(e, this)) | |
}, | |
selector: "", | |
jquery: "1.8.3", | |
length: 0, | |
size: function() { | |
return this.length | |
}, | |
toArray: function() { | |
return G.call(this) | |
}, | |
get: function(e) { | |
return null == e ? this.toArray() : e < 0 ? this[this.length + e] : this[e] | |
}, | |
pushStack: function(e, t, n) { | |
var i = K.merge(this.constructor(), e); | |
return i.prevObject = this, | |
i.context = this.context, | |
"find" === t ? i.selector = this.selector + (this.selector ? " " : "") + n : t && (i.selector = this.selector + "." + t + "(" + n + ")"), | |
i | |
}, | |
each: function(e, t) { | |
return K.each(this, e, t) | |
}, | |
ready: function(e) { | |
return K.ready.promise().done(e), | |
this | |
}, | |
eq: function(e) { | |
return e = +e, | |
-1 === e ? this.slice(e) : this.slice(e, e + 1) | |
}, | |
first: function() { | |
return this.eq(0) | |
}, | |
last: function() { | |
return this.eq(-1) | |
}, | |
slice: function() { | |
return this.pushStack(G.apply(this, arguments), "slice", G.call(arguments).join(",")) | |
}, | |
map: function(e) { | |
return this.pushStack(K.map(this, function(t, n) { | |
return e.call(t, n, t) | |
})) | |
}, | |
end: function() { | |
return this.prevObject || this.constructor(null) | |
}, | |
push: W, | |
sort: [].sort, | |
splice: [].splice | |
}, | |
K.fn.init.prototype = K.fn, | |
K.extend = K.fn.extend = function() { | |
var e, n, i, r, o, a, s = arguments[0] || {}, l = 1, d = arguments.length, c = !1; | |
for ("boolean" == typeof s && (c = s, | |
s = arguments[1] || {}, | |
l = 2), | |
"object" == typeof s || K.isFunction(s) || (s = {}), | |
d === l && (s = this, | |
--l); l < d; l++) | |
if (null != (e = arguments[l])) | |
for (n in e) | |
i = s[n], | |
r = e[n], | |
s !== r && (c && r && (K.isPlainObject(r) || (o = K.isArray(r))) ? (o ? (o = !1, | |
a = i && K.isArray(i) ? i : []) : a = i && K.isPlainObject(i) ? i : {}, | |
s[n] = K.extend(c, a, r)) : r !== t && (s[n] = r)); | |
return s | |
} | |
, | |
K.extend({ | |
noConflict: function(t) { | |
return e.$ === K && (e.$ = V), | |
t && e.jQuery === K && (e.jQuery = z), | |
K | |
}, | |
isReady: !1, | |
readyWait: 1, | |
holdReady: function(e) { | |
e ? K.readyWait++ : K.ready(!0) | |
}, | |
ready: function(e) { | |
if (!0 === e ? !--K.readyWait : !K.isReady) { | |
if (!F.body) | |
return setTimeout(K.ready, 1); | |
K.isReady = !0, | |
!0 !== e && --K.readyWait > 0 || ($.resolveWith(F, [K]), | |
K.fn.trigger && K(F).trigger("ready").off("ready")) | |
} | |
}, | |
isFunction: function(e) { | |
return "function" === K.type(e) | |
}, | |
isArray: Array.isArray || function(e) { | |
return "array" === K.type(e) | |
} | |
, | |
isWindow: function(e) { | |
return null != e && e == e.window | |
}, | |
isNumeric: function(e) { | |
return !isNaN(parseFloat(e)) && isFinite(e) | |
}, | |
type: function(e) { | |
return null == e ? String(e) : fe[J.call(e)] || "object" | |
}, | |
isPlainObject: function(e) { | |
if (!e || "object" !== K.type(e) || e.nodeType || K.isWindow(e)) | |
return !1; | |
try { | |
if (e.constructor && !Y.call(e, "constructor") && !Y.call(e.constructor.prototype, "isPrototypeOf")) | |
return !1 | |
} catch (e) { | |
return !1 | |
} | |
var n; | |
for (n in e) | |
; | |
return n === t || Y.call(e, n) | |
}, | |
isEmptyObject: function(e) { | |
var t; | |
for (t in e) | |
return !1; | |
return !0 | |
}, | |
error: function(e) { | |
throw new Error(e) | |
}, | |
parseHTML: function(e, t, n) { | |
var i; | |
return e && "string" == typeof e ? ("boolean" == typeof t && (n = t, | |
t = 0), | |
t = t || F, | |
(i = re.exec(e)) ? [t.createElement(i[1])] : (i = K.buildFragment([e], t, n ? null : []), | |
K.merge([], (i.cacheable ? K.clone(i.fragment) : i.fragment).childNodes))) : null | |
}, | |
parseJSON: function(t) { | |
return t && "string" == typeof t ? (t = K.trim(t), | |
e.JSON && e.JSON.parse ? e.JSON.parse(t) : oe.test(t.replace(se, "@").replace(le, "]").replace(ae, "")) ? new Function("return " + t)() : void K.error("Invalid JSON: " + t)) : null | |
}, | |
parseXML: function(n) { | |
var i, r; | |
if (!n || "string" != typeof n) | |
return null; | |
try { | |
e.DOMParser ? (r = new DOMParser, | |
i = r.parseFromString(n, "text/xml")) : (i = new ActiveXObject("Microsoft.XMLDOM"), | |
i.async = "false", | |
i.loadXML(n)) | |
} catch (e) { | |
i = t | |
} | |
return i && i.documentElement && !i.getElementsByTagName("parsererror").length || K.error("Invalid XML: " + n), | |
i | |
}, | |
noop: function() {}, | |
globalEval: function(t) { | |
t && ee.test(t) && (e.execScript || function(t) { | |
e.eval.call(e, t) | |
} | |
)(t) | |
}, | |
camelCase: function(e) { | |
return e.replace(de, "ms-").replace(ce, ue) | |
}, | |
nodeName: function(e, t) { | |
return e.nodeName && e.nodeName.toLowerCase() === t.toLowerCase() | |
}, | |
each: function(e, n, i) { | |
var r, o = 0, a = e.length, s = a === t || K.isFunction(e); | |
if (i) | |
if (s) { | |
for (r in e) | |
if (!1 === n.apply(e[r], i)) | |
break | |
} else | |
for (; o < a && !1 !== n.apply(e[o++], i); ) | |
; | |
else if (s) { | |
for (r in e) | |
if (!1 === n.call(e[r], r, e[r])) | |
break | |
} else | |
for (; o < a && !1 !== n.call(e[o], o, e[o++]); ) | |
; | |
return e | |
}, | |
trim: Q && !Q.call("\ufeff ") ? function(e) { | |
return null == e ? "" : Q.call(e) | |
} | |
: function(e) { | |
return null == e ? "" : (e + "").replace(ne, "") | |
} | |
, | |
makeArray: function(e, t) { | |
var n, i = t || []; | |
return null != e && (n = K.type(e), | |
null == e.length || "string" === n || "function" === n || "regexp" === n || K.isWindow(e) ? W.call(i, e) : K.merge(i, e)), | |
i | |
}, | |
inArray: function(e, t, n) { | |
var i; | |
if (t) { | |
if (X) | |
return X.call(t, e, n); | |
for (i = t.length, | |
n = n ? n < 0 ? Math.max(0, i + n) : n : 0; n < i; n++) | |
if (n in t && t[n] === e) | |
return n | |
} | |
return -1 | |
}, | |
merge: function(e, n) { | |
var i = n.length | |
, r = e.length | |
, o = 0; | |
if ("number" == typeof i) | |
for (; o < i; o++) | |
e[r++] = n[o]; | |
else | |
for (; n[o] !== t; ) | |
e[r++] = n[o++]; | |
return e.length = r, | |
e | |
}, | |
grep: function(e, t, n) { | |
var i, r = [], o = 0, a = e.length; | |
for (n = !!n; o < a; o++) | |
i = !!t(e[o], o), | |
n !== i && r.push(e[o]); | |
return r | |
}, | |
map: function(e, n, i) { | |
var r, o, a = [], s = 0, l = e.length; | |
if (e instanceof K || l !== t && "number" == typeof l && (l > 0 && e[0] && e[l - 1] || 0 === l || K.isArray(e))) | |
for (; s < l; s++) | |
null != (r = n(e[s], s, i)) && (a[a.length] = r); | |
else | |
for (o in e) | |
null != (r = n(e[o], o, i)) && (a[a.length] = r); | |
return a.concat.apply([], a) | |
}, | |
guid: 1, | |
proxy: function(e, n) { | |
var i, r, o; | |
return "string" == typeof n && (i = e[n], | |
n = e, | |
e = i), | |
K.isFunction(e) ? (r = G.call(arguments, 2), | |
o = function() { | |
return e.apply(n, r.concat(G.call(arguments))) | |
} | |
, | |
o.guid = e.guid = e.guid || K.guid++, | |
o) : t | |
}, | |
access: function(e, n, i, r, o, a, s) { | |
var l, d = null == i, c = 0, u = e.length; | |
if (i && "object" == typeof i) { | |
for (c in i) | |
K.access(e, n, c, i[c], 1, a, r); | |
o = 1 | |
} else if (r !== t) { | |
if (l = s === t && K.isFunction(r), | |
d && (l ? (l = n, | |
n = function(e, t, n) { | |
return l.call(K(e), n) | |
} | |
) : (n.call(e, r), | |
n = null)), | |
n) | |
for (; c < u; c++) | |
n(e[c], i, l ? r.call(e[c], c, n(e[c], i)) : r, s); | |
o = 1 | |
} | |
return o ? e : d ? n.call(e) : u ? n(e[0], i) : a | |
}, | |
now: function() { | |
return (new Date).getTime() | |
} | |
}), | |
K.ready.promise = function(t) { | |
if (!$) | |
if ($ = K.Deferred(), | |
"complete" === F.readyState) | |
setTimeout(K.ready, 1); | |
else if (F.addEventListener) | |
F.addEventListener("DOMContentLoaded", pe, !1), | |
e.addEventListener("load", K.ready, !1); | |
else { | |
F.attachEvent("onreadystatechange", pe), | |
e.attachEvent("onload", K.ready); | |
var n = !1; | |
try { | |
n = null == e.frameElement && F.documentElement | |
} catch (e) {} | |
n && n.doScroll && function e() { | |
if (!K.isReady) { | |
try { | |
n.doScroll("left") | |
} catch (t) { | |
return setTimeout(e, 50) | |
} | |
K.ready() | |
} | |
}() | |
} | |
return $.promise(t) | |
} | |
, | |
K.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(e, t) { | |
fe["[object " + t + "]"] = t.toLowerCase() | |
}), | |
R = K(F); | |
var ge = {}; | |
K.Callbacks = function(e) { | |
e = "string" == typeof e ? ge[e] || n(e) : K.extend({}, e); | |
var i, r, o, a, s, l, d = [], c = !e.once && [], u = function(t) { | |
for (i = e.memory && t, | |
r = !0, | |
l = a || 0, | |
a = 0, | |
s = d.length, | |
o = !0; d && l < s; l++) | |
if (!1 === d[l].apply(t[0], t[1]) && e.stopOnFalse) { | |
i = !1; | |
break | |
} | |
o = !1, | |
d && (c ? c.length && u(c.shift()) : i ? d = [] : p.disable()) | |
}, p = { | |
add: function() { | |
if (d) { | |
var t = d.length; | |
!function t(n) { | |
K.each(n, function(n, i) { | |
var r = K.type(i); | |
"function" === r ? e.unique && p.has(i) || d.push(i) : i && i.length && "string" !== r && t(i) | |
}) | |
}(arguments), | |
o ? s = d.length : i && (a = t, | |
u(i)) | |
} | |
return this | |
}, | |
remove: function() { | |
return d && K.each(arguments, function(e, t) { | |
for (var n; (n = K.inArray(t, d, n)) > -1; ) | |
d.splice(n, 1), | |
o && (n <= s && s--, | |
n <= l && l--) | |
}), | |
this | |
}, | |
has: function(e) { | |
return K.inArray(e, d) > -1 | |
}, | |
empty: function() { | |
return d = [], | |
this | |
}, | |
disable: function() { | |
return d = c = i = t, | |
this | |
}, | |
disabled: function() { | |
return !d | |
}, | |
lock: function() { | |
return c = t, | |
i || p.disable(), | |
this | |
}, | |
locked: function() { | |
return !c | |
}, | |
fireWith: function(e, t) { | |
return t = t || [], | |
t = [e, t.slice ? t.slice() : t], | |
!d || r && !c || (o ? c.push(t) : u(t)), | |
this | |
}, | |
fire: function() { | |
return p.fireWith(this, arguments), | |
this | |
}, | |
fired: function() { | |
return !!r | |
} | |
}; | |
return p | |
} | |
, | |
K.extend({ | |
Deferred: function(e) { | |
var t = [["resolve", "done", K.Callbacks("once memory"), "resolved"], ["reject", "fail", K.Callbacks("once memory"), "rejected"], ["notify", "progress", K.Callbacks("memory")]] | |
, n = "pending" | |
, i = { | |
state: function() { | |
return n | |
}, | |
always: function() { | |
return r.done(arguments).fail(arguments), | |
this | |
}, | |
then: function() { | |
var e = arguments; | |
return K.Deferred(function(n) { | |
K.each(t, function(t, i) { | |
var o = i[0] | |
, a = e[t]; | |
r[i[1]](K.isFunction(a) ? function() { | |
var e = a.apply(this, arguments); | |
e && K.isFunction(e.promise) ? e.promise().done(n.resolve).fail(n.reject).progress(n.notify) : n[o + "With"](this === r ? n : this, [e]) | |
} | |
: n[o]) | |
}), | |
e = null | |
}).promise() | |
}, | |
promise: function(e) { | |
return null != e ? K.extend(e, i) : i | |
} | |
} | |
, r = {}; | |
return i.pipe = i.then, | |
K.each(t, function(e, o) { | |
var a = o[2] | |
, s = o[3]; | |
i[o[1]] = a.add, | |
s && a.add(function() { | |
n = s | |
}, t[1 ^ e][2].disable, t[2][2].lock), | |
r[o[0]] = a.fire, | |
r[o[0] + "With"] = a.fireWith | |
}), | |
i.promise(r), | |
e && e.call(r, r), | |
r | |
}, | |
when: function(e) { | |
var t, n, i, r = 0, o = G.call(arguments), a = o.length, s = 1 !== a || e && K.isFunction(e.promise) ? a : 0, l = 1 === s ? e : K.Deferred(), d = function(e, n, i) { | |
return function(r) { | |
n[e] = this, | |
i[e] = arguments.length > 1 ? G.call(arguments) : r, | |
i === t ? l.notifyWith(n, i) : --s || l.resolveWith(n, i) | |
} | |
}; | |
if (a > 1) | |
for (t = new Array(a), | |
n = new Array(a), | |
i = new Array(a); r < a; r++) | |
o[r] && K.isFunction(o[r].promise) ? o[r].promise().done(d(r, i, o)).fail(l.reject).progress(d(r, n, t)) : --s; | |
return s || l.resolveWith(i, o), | |
l.promise() | |
} | |
}), | |
K.support = function() { | |
var t, n, i, r, o, a, s, l, d, c, u, p = F.createElement("div"); | |
if (p.setAttribute("className", "t"), | |
p.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>", | |
n = p.getElementsByTagName("*"), | |
i = p.getElementsByTagName("a")[0], | |
!n || !i || !n.length) | |
return {}; | |
r = F.createElement("select"), | |
o = r.appendChild(F.createElement("option")), | |
a = p.getElementsByTagName("input")[0], | |
i.style.cssText = "top:1px;float:left;opacity:.5", | |
t = { | |
leadingWhitespace: 3 === p.firstChild.nodeType, | |
tbody: !p.getElementsByTagName("tbody").length, | |
htmlSerialize: !!p.getElementsByTagName("link").length, | |
style: /top/.test(i.getAttribute("style")), | |
hrefNormalized: "/a" === i.getAttribute("href"), | |
opacity: /^0.5/.test(i.style.opacity), | |
cssFloat: !!i.style.cssFloat, | |
checkOn: "on" === a.value, | |
optSelected: o.selected, | |
getSetAttribute: "t" !== p.className, | |
enctype: !!F.createElement("form").enctype, | |
html5Clone: "<:nav></:nav>" !== F.createElement("nav").cloneNode(!0).outerHTML, | |
boxModel: "CSS1Compat" === F.compatMode, | |
submitBubbles: !0, | |
changeBubbles: !0, | |
focusinBubbles: !1, | |
deleteExpando: !0, | |
noCloneEvent: !0, | |
inlineBlockNeedsLayout: !1, | |
shrinkWrapBlocks: !1, | |
reliableMarginRight: !0, | |
boxSizingReliable: !0, | |
pixelPosition: !1 | |
}, | |
a.checked = !0, | |
t.noCloneChecked = a.cloneNode(!0).checked, | |
r.disabled = !0, | |
t.optDisabled = !o.disabled; | |
try { | |
delete p.test | |
} catch (e) { | |
t.deleteExpando = !1 | |
} | |
if (!p.addEventListener && p.attachEvent && p.fireEvent && (p.attachEvent("onclick", u = function() { | |
t.noCloneEvent = !1 | |
} | |
), | |
p.cloneNode(!0).fireEvent("onclick"), | |
p.detachEvent("onclick", u)), | |
a = F.createElement("input"), | |
a.value = "t", | |
a.setAttribute("type", "radio"), | |
t.radioValue = "t" === a.value, | |
a.setAttribute("checked", "checked"), | |
a.setAttribute("name", "t"), | |
p.appendChild(a), | |
s = F.createDocumentFragment(), | |
s.appendChild(p.lastChild), | |
t.checkClone = s.cloneNode(!0).cloneNode(!0).lastChild.checked, | |
t.appendChecked = a.checked, | |
s.removeChild(a), | |
s.appendChild(p), | |
p.attachEvent) | |
for (d in { | |
submit: !0, | |
change: !0, | |
focusin: !0 | |
}) | |
l = "on" + d, | |
c = l in p, | |
c || (p.setAttribute(l, "return;"), | |
c = "function" == typeof p[l]), | |
t[d + "Bubbles"] = c; | |
return K(function() { | |
var n, i, r, o, a = "padding:0;margin:0;border:0;display:block;overflow:hidden;", s = F.getElementsByTagName("body")[0]; | |
s && (n = F.createElement("div"), | |
n.style.cssText = "visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px", | |
s.insertBefore(n, s.firstChild), | |
i = F.createElement("div"), | |
n.appendChild(i), | |
i.innerHTML = "<table><tr><td></td><td>t</td></tr></table>", | |
r = i.getElementsByTagName("td"), | |
r[0].style.cssText = "padding:0;margin:0;border:0;display:none", | |
c = 0 === r[0].offsetHeight, | |
r[0].style.display = "", | |
r[1].style.display = "none", | |
t.reliableHiddenOffsets = c && 0 === r[0].offsetHeight, | |
i.innerHTML = "", | |
i.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;", | |
t.boxSizing = 4 === i.offsetWidth, | |
t.doesNotIncludeMarginInBodyOffset = 1 !== s.offsetTop, | |
e.getComputedStyle && (t.pixelPosition = "1%" !== (e.getComputedStyle(i, null) || {}).top, | |
t.boxSizingReliable = "4px" === (e.getComputedStyle(i, null) || { | |
width: "4px" | |
}).width, | |
o = F.createElement("div"), | |
o.style.cssText = i.style.cssText = a, | |
o.style.marginRight = o.style.width = "0", | |
i.style.width = "1px", | |
i.appendChild(o), | |
t.reliableMarginRight = !parseFloat((e.getComputedStyle(o, null) || {}).marginRight)), | |
void 0 !== i.style.zoom && (i.innerHTML = "", | |
i.style.cssText = a + "width:1px;padding:1px;display:inline;zoom:1", | |
t.inlineBlockNeedsLayout = 3 === i.offsetWidth, | |
i.style.display = "block", | |
i.style.overflow = "visible", | |
i.innerHTML = "<div></div>", | |
i.firstChild.style.width = "5px", | |
t.shrinkWrapBlocks = 3 !== i.offsetWidth, | |
n.style.zoom = 1), | |
s.removeChild(n), | |
n = i = r = o = null) | |
}), | |
s.removeChild(p), | |
n = i = r = o = a = s = p = null, | |
t | |
}(); | |
var he = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/ | |
, me = /([A-Z])/g; | |
K.extend({ | |
cache: {}, | |
deletedIds: [], | |
uuid: 0, | |
expando: "jQuery" + (K.fn.jquery + Math.random()).replace(/\D/g, ""), | |
noData: { | |
embed: !0, | |
object: "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", | |
applet: !0 | |
}, | |
hasData: function(e) { | |
return !!(e = e.nodeType ? K.cache[e[K.expando]] : e[K.expando]) && !r(e) | |
}, | |
data: function(e, n, i, r) { | |
if (K.acceptData(e)) { | |
var o, a, s = K.expando, l = "string" == typeof n, d = e.nodeType, c = d ? K.cache : e, u = d ? e[s] : e[s] && s; | |
if (u && c[u] && (r || c[u].data) || !l || i !== t) | |
return u || (d ? e[s] = u = K.deletedIds.pop() || K.guid++ : u = s), | |
c[u] || (c[u] = {}, | |
d || (c[u].toJSON = K.noop)), | |
"object" != typeof n && "function" != typeof n || (r ? c[u] = K.extend(c[u], n) : c[u].data = K.extend(c[u].data, n)), | |
o = c[u], | |
r || (o.data || (o.data = {}), | |
o = o.data), | |
i !== t && (o[K.camelCase(n)] = i), | |
l ? null == (a = o[n]) && (a = o[K.camelCase(n)]) : a = o, | |
a | |
} | |
}, | |
removeData: function(e, t, n) { | |
if (K.acceptData(e)) { | |
var i, o, a, s = e.nodeType, l = s ? K.cache : e, d = s ? e[K.expando] : K.expando; | |
if (l[d]) { | |
if (t && (i = n ? l[d] : l[d].data)) { | |
K.isArray(t) || (t in i ? t = [t] : (t = K.camelCase(t), | |
t = t in i ? [t] : t.split(" "))); | |
for (o = 0, | |
a = t.length; o < a; o++) | |
delete i[t[o]]; | |
if (!(n ? r : K.isEmptyObject)(i)) | |
return | |
} | |
(n || (delete l[d].data, | |
r(l[d]))) && (s ? K.cleanData([e], !0) : K.support.deleteExpando || l != l.window ? delete l[d] : l[d] = null) | |
} | |
} | |
}, | |
_data: function(e, t, n) { | |
return K.data(e, t, n, !0) | |
}, | |
acceptData: function(e) { | |
var t = e.nodeName && K.noData[e.nodeName.toLowerCase()]; | |
return !t || !0 !== t && e.getAttribute("classid") === t | |
} | |
}), | |
K.fn.extend({ | |
data: function(e, n) { | |
var r, o, a, s, l, d = this[0], c = 0, u = null; | |
if (e === t) { | |
if (this.length && (u = K.data(d), | |
1 === d.nodeType && !K._data(d, "parsedAttrs"))) { | |
for (a = d.attributes, | |
l = a.length; c < l; c++) | |
s = a[c].name, | |
s.indexOf("data-") || (s = K.camelCase(s.substring(5)), | |
i(d, s, u[s])); | |
K._data(d, "parsedAttrs", !0) | |
} | |
return u | |
} | |
return "object" == typeof e ? this.each(function() { | |
K.data(this, e) | |
}) : (r = e.split(".", 2), | |
r[1] = r[1] ? "." + r[1] : "", | |
o = r[1] + "!", | |
K.access(this, function(n) { | |
if (n === t) | |
return u = this.triggerHandler("getData" + o, [r[0]]), | |
u === t && d && (u = K.data(d, e), | |
u = i(d, e, u)), | |
u === t && r[1] ? this.data(r[0]) : u; | |
r[1] = n, | |
this.each(function() { | |
var t = K(this); | |
t.triggerHandler("setData" + o, r), | |
K.data(this, e, n), | |
t.triggerHandler("changeData" + o, r) | |
}) | |
}, null, n, arguments.length > 1, null, !1)) | |
}, | |
removeData: function(e) { | |
return this.each(function() { | |
K.removeData(this, e) | |
}) | |
} | |
}), | |
K.extend({ | |
queue: function(e, t, n) { | |
var i; | |
if (e) | |
return t = (t || "fx") + "queue", | |
i = K._data(e, t), | |
n && (!i || K.isArray(n) ? i = K._data(e, t, K.makeArray(n)) : i.push(n)), | |
i || [] | |
}, | |
dequeue: function(e, t) { | |
t = t || "fx"; | |
var n = K.queue(e, t) | |
, i = n.length | |
, r = n.shift() | |
, o = K._queueHooks(e, t) | |
, a = function() { | |
K.dequeue(e, t) | |
}; | |
"inprogress" === r && (r = n.shift(), | |
i--), | |
r && ("fx" === t && n.unshift("inprogress"), | |
delete o.stop, | |
r.call(e, a, o)), | |
!i && o && o.empty.fire() | |
}, | |
_queueHooks: function(e, t) { | |
var n = t + "queueHooks"; | |
return K._data(e, n) || K._data(e, n, { | |
empty: K.Callbacks("once memory").add(function() { | |
K.removeData(e, t + "queue", !0), | |
K.removeData(e, n, !0) | |
}) | |
}) | |
} | |
}), | |
K.fn.extend({ | |
queue: function(e, n) { | |
var i = 2; | |
return "string" != typeof e && (n = e, | |
e = "fx", | |
i--), | |
arguments.length < i ? K.queue(this[0], e) : n === t ? this : this.each(function() { | |
var t = K.queue(this, e, n); | |
K._queueHooks(this, e), | |
"fx" === e && "inprogress" !== t[0] && K.dequeue(this, e) | |
}) | |
}, | |
dequeue: function(e) { | |
return this.each(function() { | |
K.dequeue(this, e) | |
}) | |
}, | |
delay: function(e, t) { | |
return e = K.fx ? K.fx.speeds[e] || e : e, | |
t = t || "fx", | |
this.queue(t, function(t, n) { | |
var i = setTimeout(t, e); | |
n.stop = function() { | |
clearTimeout(i) | |
} | |
}) | |
}, | |
clearQueue: function(e) { | |
return this.queue(e || "fx", []) | |
}, | |
promise: function(e, n) { | |
var i, r = 1, o = K.Deferred(), a = this, s = this.length, l = function() { | |
--r || o.resolveWith(a, [a]) | |
}; | |
for ("string" != typeof e && (n = e, | |
e = t), | |
e = e || "fx"; s--; ) | |
(i = K._data(a[s], e + "queueHooks")) && i.empty && (r++, | |
i.empty.add(l)); | |
return l(), | |
o.promise(n) | |
} | |
}); | |
var ye, ve, be, we = /[\t\r\n]/g, ke = /\r/g, xe = /^(?:button|input)$/i, Ce = /^(?:button|input|object|select|textarea)$/i, _e = /^a(?:rea|)$/i, Te = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, Ae = K.support.getSetAttribute; | |
K.fn.extend({ | |
attr: function(e, t) { | |
return K.access(this, K.attr, e, t, arguments.length > 1) | |
}, | |
removeAttr: function(e) { | |
return this.each(function() { | |
K.removeAttr(this, e) | |
}) | |
}, | |
prop: function(e, t) { | |
return K.access(this, K.prop, e, t, arguments.length > 1) | |
}, | |
removeProp: function(e) { | |
return e = K.propFix[e] || e, | |
this.each(function() { | |
try { | |
this[e] = t, | |
delete this[e] | |
} catch (e) {} | |
}) | |
}, | |
addClass: function(e) { | |
var t, n, i, r, o, a, s; | |
if (K.isFunction(e)) | |
return this.each(function(t) { | |
K(this).addClass(e.call(this, t, this.className)) | |
}); | |
if (e && "string" == typeof e) | |
for (t = e.split(te), | |
n = 0, | |
i = this.length; n < i; n++) | |
if (r = this[n], | |
1 === r.nodeType) | |
if (r.className || 1 !== t.length) { | |
for (o = " " + r.className + " ", | |
a = 0, | |
s = t.length; a < s; a++) | |
o.indexOf(" " + t[a] + " ") < 0 && (o += t[a] + " "); | |
r.className = K.trim(o) | |
} else | |
r.className = e; | |
return this | |
}, | |
removeClass: function(e) { | |
var n, i, r, o, a, s, l; | |
if (K.isFunction(e)) | |
return this.each(function(t) { | |
K(this).removeClass(e.call(this, t, this.className)) | |
}); | |
if (e && "string" == typeof e || e === t) | |
for (n = (e || "").split(te), | |
s = 0, | |
l = this.length; s < l; s++) | |
if (r = this[s], | |
1 === r.nodeType && r.className) { | |
for (i = (" " + r.className + " ").replace(we, " "), | |
o = 0, | |
a = n.length; o < a; o++) | |
for (; i.indexOf(" " + n[o] + " ") >= 0; ) | |
i = i.replace(" " + n[o] + " ", " "); | |
r.className = e ? K.trim(i) : "" | |
} | |
return this | |
}, | |
toggleClass: function(e, t) { | |
var n = typeof e | |
, i = "boolean" == typeof t; | |
return K.isFunction(e) ? this.each(function(n) { | |
K(this).toggleClass(e.call(this, n, this.className, t), t) | |
}) : this.each(function() { | |
if ("string" === n) | |
for (var r, o = 0, a = K(this), s = t, l = e.split(te); r = l[o++]; ) | |
s = i ? s : !a.hasClass(r), | |
a[s ? "addClass" : "removeClass"](r); | |
else | |
"undefined" !== n && "boolean" !== n || (this.className && K._data(this, "__className__", this.className), | |
this.className = this.className || !1 === e ? "" : K._data(this, "__className__") || "") | |
}) | |
}, | |
hasClass: function(e) { | |
for (var t = " " + e + " ", n = 0, i = this.length; n < i; n++) | |
if (1 === this[n].nodeType && (" " + this[n].className + " ").replace(we, " ").indexOf(t) >= 0) | |
return !0; | |
return !1 | |
}, | |
val: function(e) { | |
var n, i, r, o = this[0]; | |
{ | |
if (arguments.length) | |
return r = K.isFunction(e), | |
this.each(function(i) { | |
var o, a = K(this); | |
1 === this.nodeType && (o = r ? e.call(this, i, a.val()) : e, | |
null == o ? o = "" : "number" == typeof o ? o += "" : K.isArray(o) && (o = K.map(o, function(e) { | |
return null == e ? "" : e + "" | |
})), | |
(n = K.valHooks[this.type] || K.valHooks[this.nodeName.toLowerCase()]) && "set"in n && n.set(this, o, "value") !== t || (this.value = o)) | |
}); | |
if (o) | |
return (n = K.valHooks[o.type] || K.valHooks[o.nodeName.toLowerCase()]) && "get"in n && (i = n.get(o, "value")) !== t ? i : (i = o.value, | |
"string" == typeof i ? i.replace(ke, "") : null == i ? "" : i) | |
} | |
} | |
}), | |
K.extend({ | |
valHooks: { | |
option: { | |
get: function(e) { | |
var t = e.attributes.value; | |
return !t || t.specified ? e.value : e.text | |
} | |
}, | |
select: { | |
get: function(e) { | |
for (var t, n, i = e.options, r = e.selectedIndex, o = "select-one" === e.type || r < 0, a = o ? null : [], s = o ? r + 1 : i.length, l = r < 0 ? s : o ? r : 0; l < s; l++) | |
if (n = i[l], | |
(n.selected || l === r) && (K.support.optDisabled ? !n.disabled : null === n.getAttribute("disabled")) && (!n.parentNode.disabled || !K.nodeName(n.parentNode, "optgroup"))) { | |
if (t = K(n).val(), | |
o) | |
return t; | |
a.push(t) | |
} | |
return a | |
}, | |
set: function(e, t) { | |
var n = K.makeArray(t); | |
return K(e).find("option").each(function() { | |
this.selected = K.inArray(K(this).val(), n) >= 0 | |
}), | |
n.length || (e.selectedIndex = -1), | |
n | |
} | |
} | |
}, | |
attrFn: {}, | |
attr: function(e, n, i, r) { | |
var o, a, s, l = e.nodeType; | |
if (e && 3 !== l && 8 !== l && 2 !== l) | |
return r && K.isFunction(K.fn[n]) ? K(e)[n](i) : void 0 === e.getAttribute ? K.prop(e, n, i) : (s = 1 !== l || !K.isXMLDoc(e), | |
s && (n = n.toLowerCase(), | |
a = K.attrHooks[n] || (Te.test(n) ? ve : ye)), | |
i !== t ? null === i ? void K.removeAttr(e, n) : a && "set"in a && s && (o = a.set(e, i, n)) !== t ? o : (e.setAttribute(n, i + ""), | |
i) : a && "get"in a && s && null !== (o = a.get(e, n)) ? o : (o = e.getAttribute(n), | |
null === o ? t : o)) | |
}, | |
removeAttr: function(e, t) { | |
var n, i, r, o, a = 0; | |
if (t && 1 === e.nodeType) | |
for (i = t.split(te); a < i.length; a++) | |
(r = i[a]) && (n = K.propFix[r] || r, | |
o = Te.test(r), | |
o || K.attr(e, r, ""), | |
e.removeAttribute(Ae ? r : n), | |
o && n in e && (e[n] = !1)) | |
}, | |
attrHooks: { | |
type: { | |
set: function(e, t) { | |
if (xe.test(e.nodeName) && e.parentNode) | |
K.error("type property can't be changed"); | |
else if (!K.support.radioValue && "radio" === t && K.nodeName(e, "input")) { | |
var n = e.value; | |
return e.setAttribute("type", t), | |
n && (e.value = n), | |
t | |
} | |
} | |
}, | |
value: { | |
get: function(e, t) { | |
return ye && K.nodeName(e, "button") ? ye.get(e, t) : t in e ? e.value : null | |
}, | |
set: function(e, t, n) { | |
if (ye && K.nodeName(e, "button")) | |
return ye.set(e, t, n); | |
e.value = t | |
} | |
} | |
}, | |
propFix: { | |
tabindex: "tabIndex", | |
readonly: "readOnly", | |
for: "htmlFor", | |
class: "className", | |
maxlength: "maxLength", | |
cellspacing: "cellSpacing", | |
cellpadding: "cellPadding", | |
rowspan: "rowSpan", | |
colspan: "colSpan", | |
usemap: "useMap", | |
frameborder: "frameBorder", | |
contenteditable: "contentEditable" | |
}, | |
prop: function(e, n, i) { | |
var r, o, a, s = e.nodeType; | |
if (e && 3 !== s && 8 !== s && 2 !== s) | |
return a = 1 !== s || !K.isXMLDoc(e), | |
a && (n = K.propFix[n] || n, | |
o = K.propHooks[n]), | |
i !== t ? o && "set"in o && (r = o.set(e, i, n)) !== t ? r : e[n] = i : o && "get"in o && null !== (r = o.get(e, n)) ? r : e[n] | |
}, | |
propHooks: { | |
tabIndex: { | |
get: function(e) { | |
var n = e.getAttributeNode("tabindex"); | |
return n && n.specified ? parseInt(n.value, 10) : Ce.test(e.nodeName) || _e.test(e.nodeName) && e.href ? 0 : t | |
} | |
} | |
} | |
}), | |
ve = { | |
get: function(e, n) { | |
var i, r = K.prop(e, n); | |
return !0 === r || "boolean" != typeof r && (i = e.getAttributeNode(n)) && !1 !== i.nodeValue ? n.toLowerCase() : t | |
}, | |
set: function(e, t, n) { | |
var i; | |
return !1 === t ? K.removeAttr(e, n) : (i = K.propFix[n] || n, | |
i in e && (e[i] = !0), | |
e.setAttribute(n, n.toLowerCase())), | |
n | |
} | |
}, | |
Ae || (be = { | |
name: !0, | |
id: !0, | |
coords: !0 | |
}, | |
ye = K.valHooks.button = { | |
get: function(e, n) { | |
var i; | |
return i = e.getAttributeNode(n), | |
i && (be[n] ? "" !== i.value : i.specified) ? i.value : t | |
}, | |
set: function(e, t, n) { | |
var i = e.getAttributeNode(n); | |
return i || (i = F.createAttribute(n), | |
e.setAttributeNode(i)), | |
i.value = t + "" | |
} | |
}, | |
K.each(["width", "height"], function(e, t) { | |
K.attrHooks[t] = K.extend(K.attrHooks[t], { | |
set: function(e, n) { | |
if ("" === n) | |
return e.setAttribute(t, "auto"), | |
n | |
} | |
}) | |
}), | |
K.attrHooks.contenteditable = { | |
get: ye.get, | |
set: function(e, t, n) { | |
"" === t && (t = "false"), | |
ye.set(e, t, n) | |
} | |
}), | |
K.support.hrefNormalized || K.each(["href", "src", "width", "height"], function(e, n) { | |
K.attrHooks[n] = K.extend(K.attrHooks[n], { | |
get: function(e) { | |
var i = e.getAttribute(n, 2); | |
return null === i ? t : i | |
} | |
}) | |
}), | |
K.support.style || (K.attrHooks.style = { | |
get: function(e) { | |
return e.style.cssText.toLowerCase() || t | |
}, | |
set: function(e, t) { | |
return e.style.cssText = t + "" | |
} | |
}), | |
K.support.optSelected || (K.propHooks.selected = K.extend(K.propHooks.selected, { | |
get: function(e) { | |
var t = e.parentNode; | |
return t && (t.selectedIndex, | |
t.parentNode && t.parentNode.selectedIndex), | |
null | |
} | |
})), | |
K.support.enctype || (K.propFix.enctype = "encoding"), | |
K.support.checkOn || K.each(["radio", "checkbox"], function() { | |
K.valHooks[this] = { | |
get: function(e) { | |
return null === e.getAttribute("value") ? "on" : e.value | |
} | |
} | |
}), | |
K.each(["radio", "checkbox"], function() { | |
K.valHooks[this] = K.extend(K.valHooks[this], { | |
set: function(e, t) { | |
if (K.isArray(t)) | |
return e.checked = K.inArray(K(e).val(), t) >= 0 | |
} | |
}) | |
}); | |
var Se = /^(?:textarea|input|select)$/i | |
, je = /^([^\.]*|)(?:\.(.+)|)$/ | |
, Ne = /(?:^|\s)hover(\.\S+|)\b/ | |
, Ee = /^key/ | |
, De = /^(?:mouse|contextmenu)|click/ | |
, Pe = /^(?:focusinfocus|focusoutblur)$/ | |
, Ie = function(e) { | |
return K.event.special.hover ? e : e.replace(Ne, "mouseenter$1 mouseleave$1") | |
}; | |
K.event = { | |
add: function(e, n, i, r, o) { | |
var a, s, l, d, c, u, p, f, g, h, m; | |
if (3 !== e.nodeType && 8 !== e.nodeType && n && i && (a = K._data(e))) { | |
for (i.handler && (g = i, | |
i = g.handler, | |
o = g.selector), | |
i.guid || (i.guid = K.guid++), | |
l = a.events, | |
l || (a.events = l = {}), | |
s = a.handle, | |
s || (a.handle = s = function(e) { | |
return void 0 === K || e && K.event.triggered === e.type ? t : K.event.dispatch.apply(s.elem, arguments) | |
} | |
, | |
s.elem = e), | |
n = K.trim(Ie(n)).split(" "), | |
d = 0; d < n.length; d++) | |
c = je.exec(n[d]) || [], | |
u = c[1], | |
p = (c[2] || "").split(".").sort(), | |
m = K.event.special[u] || {}, | |
u = (o ? m.delegateType : m.bindType) || u, | |
m = K.event.special[u] || {}, | |
f = K.extend({ | |
type: u, | |
origType: c[1], | |
data: r, | |
handler: i, | |
guid: i.guid, | |
selector: o, | |
needsContext: o && K.expr.match.needsContext.test(o), | |
namespace: p.join(".") | |
}, g), | |
h = l[u], | |
h || (h = l[u] = [], | |
h.delegateCount = 0, | |
m.setup && !1 !== m.setup.call(e, r, p, s) || (e.addEventListener ? e.addEventListener(u, s, !1) : e.attachEvent && e.attachEvent("on" + u, s))), | |
m.add && (m.add.call(e, f), | |
f.handler.guid || (f.handler.guid = i.guid)), | |
o ? h.splice(h.delegateCount++, 0, f) : h.push(f), | |
K.event.global[u] = !0; | |
e = null | |
} | |
}, | |
global: {}, | |
remove: function(e, t, n, i, r) { | |
var o, a, s, l, d, c, u, p, f, g, h, m = K.hasData(e) && K._data(e); | |
if (m && (p = m.events)) { | |
for (t = K.trim(Ie(t || "")).split(" "), | |
o = 0; o < t.length; o++) | |
if (a = je.exec(t[o]) || [], | |
s = l = a[1], | |
d = a[2], | |
s) { | |
for (f = K.event.special[s] || {}, | |
s = (i ? f.delegateType : f.bindType) || s, | |
g = p[s] || [], | |
c = g.length, | |
d = d ? new RegExp("(^|\\.)" + d.split(".").sort().join("\\.(?:.*\\.|)") + "(\\.|$)") : null, | |
u = 0; u < g.length; u++) | |
h = g[u], | |
!r && l !== h.origType || n && n.guid !== h.guid || d && !d.test(h.namespace) || i && i !== h.selector && ("**" !== i || !h.selector) || (g.splice(u--, 1), | |
h.selector && g.delegateCount--, | |
f.remove && f.remove.call(e, h)); | |
0 === g.length && c !== g.length && (f.teardown && !1 !== f.teardown.call(e, d, m.handle) || K.removeEvent(e, s, m.handle), | |
delete p[s]) | |
} else | |
for (s in p) | |
K.event.remove(e, s + t[o], n, i, !0); | |
K.isEmptyObject(p) && (delete m.handle, | |
K.removeData(e, "events", !0)) | |
} | |
}, | |
customEvent: { | |
getData: !0, | |
setData: !0, | |
changeData: !0 | |
}, | |
trigger: function(n, i, r, o) { | |
if (!r || 3 !== r.nodeType && 8 !== r.nodeType) { | |
var a, s, l, d, c, u, p, f, g, h, m = n.type || n, y = []; | |
if (!Pe.test(m + K.event.triggered) && (m.indexOf("!") >= 0 && (m = m.slice(0, -1), | |
s = !0), | |
m.indexOf(".") >= 0 && (y = m.split("."), | |
m = y.shift(), | |
y.sort()), | |
r && !K.event.customEvent[m] || K.event.global[m])) | |
if (n = "object" == typeof n ? n[K.expando] ? n : new K.Event(m,n) : new K.Event(m), | |
n.type = m, | |
n.isTrigger = !0, | |
n.exclusive = s, | |
n.namespace = y.join("."), | |
n.namespace_re = n.namespace ? new RegExp("(^|\\.)" + y.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, | |
u = m.indexOf(":") < 0 ? "on" + m : "", | |
r) { | |
if (n.result = t, | |
n.target || (n.target = r), | |
i = null != i ? K.makeArray(i) : [], | |
i.unshift(n), | |
p = K.event.special[m] || {}, | |
!p.trigger || !1 !== p.trigger.apply(r, i)) { | |
if (g = [[r, p.bindType || m]], | |
!o && !p.noBubble && !K.isWindow(r)) { | |
for (h = p.delegateType || m, | |
d = Pe.test(h + m) ? r : r.parentNode, | |
c = r; d; d = d.parentNode) | |
g.push([d, h]), | |
c = d; | |
c === (r.ownerDocument || F) && g.push([c.defaultView || c.parentWindow || e, h]) | |
} | |
for (l = 0; l < g.length && !n.isPropagationStopped(); l++) | |
d = g[l][0], | |
n.type = g[l][1], | |
f = (K._data(d, "events") || {})[n.type] && K._data(d, "handle"), | |
f && f.apply(d, i), | |
(f = u && d[u]) && K.acceptData(d) && f.apply && !1 === f.apply(d, i) && n.preventDefault(); | |
return n.type = m, | |
o || n.isDefaultPrevented() || p._default && !1 !== p._default.apply(r.ownerDocument, i) || "click" === m && K.nodeName(r, "a") || !K.acceptData(r) || u && r[m] && ("focus" !== m && "blur" !== m || 0 !== n.target.offsetWidth) && !K.isWindow(r) && (c = r[u], | |
c && (r[u] = null), | |
K.event.triggered = m, | |
r[m](), | |
K.event.triggered = t, | |
c && (r[u] = c)), | |
n.result | |
} | |
} else { | |
a = K.cache; | |
for (l in a) | |
a[l].events && a[l].events[m] && K.event.trigger(n, i, a[l].handle.elem, !0) | |
} | |
} | |
}, | |
dispatch: function(n) { | |
n = K.event.fix(n || e.event); | |
var i, r, o, a, s, l, d, c, u, p = (K._data(this, "events") || {})[n.type] || [], f = p.delegateCount, g = G.call(arguments), h = !n.exclusive && !n.namespace, m = K.event.special[n.type] || {}, y = []; | |
if (g[0] = n, | |
n.delegateTarget = this, | |
!m.preDispatch || !1 !== m.preDispatch.call(this, n)) { | |
if (f && (!n.button || "click" !== n.type)) | |
for (o = n.target; o != this; o = o.parentNode || this) | |
if (!0 !== o.disabled || "click" !== n.type) { | |
for (s = {}, | |
d = [], | |
i = 0; i < f; i++) | |
c = p[i], | |
u = c.selector, | |
s[u] === t && (s[u] = c.needsContext ? K(u, this).index(o) >= 0 : K.find(u, this, null, [o]).length), | |
s[u] && d.push(c); | |
d.length && y.push({ | |
elem: o, | |
matches: d | |
}) | |
} | |
for (p.length > f && y.push({ | |
elem: this, | |
matches: p.slice(f) | |
}), | |
i = 0; i < y.length && !n.isPropagationStopped(); i++) | |
for (l = y[i], | |
n.currentTarget = l.elem, | |
r = 0; r < l.matches.length && !n.isImmediatePropagationStopped(); r++) | |
c = l.matches[r], | |
(h || !n.namespace && !c.namespace || n.namespace_re && n.namespace_re.test(c.namespace)) && (n.data = c.data, | |
n.handleObj = c, | |
(a = ((K.event.special[c.origType] || {}).handle || c.handler).apply(l.elem, g)) !== t && (n.result = a, | |
!1 === a && (n.preventDefault(), | |
n.stopPropagation()))); | |
return m.postDispatch && m.postDispatch.call(this, n), | |
n.result | |
} | |
}, | |
props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), | |
fixHooks: {}, | |
keyHooks: { | |
props: "char charCode key keyCode".split(" "), | |
filter: function(e, t) { | |
return null == e.which && (e.which = null != t.charCode ? t.charCode : t.keyCode), | |
e | |
} | |
}, | |
mouseHooks: { | |
props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), | |
filter: function(e, n) { | |
var i, r, o, a = n.button, s = n.fromElement; | |
return null == e.pageX && null != n.clientX && (i = e.target.ownerDocument || F, | |
r = i.documentElement, | |
o = i.body, | |
e.pageX = n.clientX + (r && r.scrollLeft || o && o.scrollLeft || 0) - (r && r.clientLeft || o && o.clientLeft || 0), | |
e.pageY = n.clientY + (r && r.scrollTop || o && o.scrollTop || 0) - (r && r.clientTop || o && o.clientTop || 0)), | |
!e.relatedTarget && s && (e.relatedTarget = s === e.target ? n.toElement : s), | |
e.which || a === t || (e.which = 1 & a ? 1 : 2 & a ? 3 : 4 & a ? 2 : 0), | |
e | |
} | |
}, | |
fix: function(e) { | |
if (e[K.expando]) | |
return e; | |
var t, n, i = e, r = K.event.fixHooks[e.type] || {}, o = r.props ? this.props.concat(r.props) : this.props; | |
for (e = K.Event(i), | |
t = o.length; t; ) | |
n = o[--t], | |
e[n] = i[n]; | |
return e.target || (e.target = i.srcElement || F), | |
3 === e.target.nodeType && (e.target = e.target.parentNode), | |
e.metaKey = !!e.metaKey, | |
r.filter ? r.filter(e, i) : e | |
}, | |
special: { | |
load: { | |
noBubble: !0 | |
}, | |
focus: { | |
delegateType: "focusin" | |
}, | |
blur: { | |
delegateType: "focusout" | |
}, | |
beforeunload: { | |
setup: function(e, t, n) { | |
K.isWindow(this) && (this.onbeforeunload = n) | |
}, | |
teardown: function(e, t) { | |
this.onbeforeunload === t && (this.onbeforeunload = null) | |
} | |
} | |
}, | |
simulate: function(e, t, n, i) { | |
var r = K.extend(new K.Event, n, { | |
type: e, | |
isSimulated: !0, | |
originalEvent: {} | |
}); | |
i ? K.event.trigger(r, null, t) : K.event.dispatch.call(t, r), | |
r.isDefaultPrevented() && n.preventDefault() | |
} | |
}, | |
K.event.handle = K.event.dispatch, | |
K.removeEvent = F.removeEventListener ? function(e, t, n) { | |
e.removeEventListener && e.removeEventListener(t, n, !1) | |
} | |
: function(e, t, n) { | |
var i = "on" + t; | |
e.detachEvent && (void 0 === e[i] && (e[i] = null), | |
e.detachEvent(i, n)) | |
} | |
, | |
K.Event = function(e, t) { | |
if (!(this instanceof K.Event)) | |
return new K.Event(e,t); | |
e && e.type ? (this.originalEvent = e, | |
this.type = e.type, | |
this.isDefaultPrevented = e.defaultPrevented || !1 === e.returnValue || e.getPreventDefault && e.getPreventDefault() ? a : o) : this.type = e, | |
t && K.extend(this, t), | |
this.timeStamp = e && e.timeStamp || K.now(), | |
this[K.expando] = !0 | |
} | |
, | |
K.Event.prototype = { | |
preventDefault: function() { | |
this.isDefaultPrevented = a; | |
var e = this.originalEvent; | |
e && (e.preventDefault ? e.preventDefault() : e.returnValue = !1) | |
}, | |
stopPropagation: function() { | |
this.isPropagationStopped = a; | |
var e = this.originalEvent; | |
e && (e.stopPropagation && e.stopPropagation(), | |
e.cancelBubble = !0) | |
}, | |
stopImmediatePropagation: function() { | |
this.isImmediatePropagationStopped = a, | |
this.stopPropagation() | |
}, | |
isDefaultPrevented: o, | |
isPropagationStopped: o, | |
isImmediatePropagationStopped: o | |
}, | |
K.each({ | |
mouseenter: "mouseover", | |
mouseleave: "mouseout" | |
}, function(e, t) { | |
K.event.special[e] = { | |
delegateType: t, | |
bindType: t, | |
handle: function(e) { | |
var n, i = this, r = e.relatedTarget, o = e.handleObj; | |
o.selector; | |
return r && (r === i || K.contains(i, r)) || (e.type = o.origType, | |
n = o.handler.apply(this, arguments), | |
e.type = t), | |
n | |
} | |
} | |
}), | |
K.support.submitBubbles || (K.event.special.submit = { | |
setup: function() { | |
if (K.nodeName(this, "form")) | |
return !1; | |
K.event.add(this, "click._submit keypress._submit", function(e) { | |
var n = e.target | |
, i = K.nodeName(n, "input") || K.nodeName(n, "button") ? n.form : t; | |
i && !K._data(i, "_submit_attached") && (K.event.add(i, "submit._submit", function(e) { | |
e._submit_bubble = !0 | |
}), | |
K._data(i, "_submit_attached", !0)) | |
}) | |
}, | |
postDispatch: function(e) { | |
e._submit_bubble && (delete e._submit_bubble, | |
this.parentNode && !e.isTrigger && K.event.simulate("submit", this.parentNode, e, !0)) | |
}, | |
teardown: function() { | |
if (K.nodeName(this, "form")) | |
return !1; | |
K.event.remove(this, "._submit") | |
} | |
}), | |
K.support.changeBubbles || (K.event.special.change = { | |
setup: function() { | |
if (Se.test(this.nodeName)) | |
return "checkbox" !== this.type && "radio" !== this.type || (K.event.add(this, "propertychange._change", function(e) { | |
"checked" === e.originalEvent.propertyName && (this._just_changed = !0) | |
}), | |
K.event.add(this, "click._change", function(e) { | |
this._just_changed && !e.isTrigger && (this._just_changed = !1), | |
K.event.simulate("change", this, e, !0) | |
})), | |
!1; | |
K.event.add(this, "beforeactivate._change", function(e) { | |
var t = e.target; | |
Se.test(t.nodeName) && !K._data(t, "_change_attached") && (K.event.add(t, "change._change", function(e) { | |
!this.parentNode || e.isSimulated || e.isTrigger || K.event.simulate("change", this.parentNode, e, !0) | |
}), | |
K._data(t, "_change_attached", !0)) | |
}) | |
}, | |
handle: function(e) { | |
var t = e.target; | |
if (this !== t || e.isSimulated || e.isTrigger || "radio" !== t.type && "checkbox" !== t.type) | |
return e.handleObj.handler.apply(this, arguments) | |
}, | |
teardown: function() { | |
return K.event.remove(this, "._change"), | |
!Se.test(this.nodeName) | |
} | |
}), | |
K.support.focusinBubbles || K.each({ | |
focus: "focusin", | |
blur: "focusout" | |
}, function(e, t) { | |
var n = 0 | |
, i = function(e) { | |
K.event.simulate(t, e.target, K.event.fix(e), !0) | |
}; | |
K.event.special[t] = { | |
setup: function() { | |
0 == n++ && F.addEventListener(e, i, !0) | |
}, | |
teardown: function() { | |
0 == --n && F.removeEventListener(e, i, !0) | |
} | |
} | |
}), | |
K.fn.extend({ | |
on: function(e, n, i, r, a) { | |
var s, l; | |
if ("object" == typeof e) { | |
"string" != typeof n && (i = i || n, | |
n = t); | |
for (l in e) | |
this.on(l, n, i, e[l], a); | |
return this | |
} | |
if (null == i && null == r ? (r = n, | |
i = n = t) : null == r && ("string" == typeof n ? (r = i, | |
i = t) : (r = i, | |
i = n, | |
n = t)), | |
!1 === r) | |
r = o; | |
else if (!r) | |
return this; | |
return 1 === a && (s = r, | |
r = function(e) { | |
return K().off(e), | |
s.apply(this, arguments) | |
} | |
, | |
r.guid = s.guid || (s.guid = K.guid++)), | |
this.each(function() { | |
K.event.add(this, e, r, i, n) | |
}) | |
}, | |
one: function(e, t, n, i) { | |
return this.on(e, t, n, i, 1) | |
}, | |
off: function(e, n, i) { | |
var r, a; | |
if (e && e.preventDefault && e.handleObj) | |
return r = e.handleObj, | |
K(e.delegateTarget).off(r.namespace ? r.origType + "." + r.namespace : r.origType, r.selector, r.handler), | |
this; | |
if ("object" == typeof e) { | |
for (a in e) | |
this.off(a, n, e[a]); | |
return this | |
} | |
return !1 !== n && "function" != typeof n || (i = n, | |
n = t), | |
!1 === i && (i = o), | |
this.each(function() { | |
K.event.remove(this, e, i, n) | |
}) | |
}, | |
bind: function(e, t, n) { | |
return this.on(e, null, t, n) | |
}, | |
unbind: function(e, t) { | |
return this.off(e, null, t) | |
}, | |
live: function(e, t, n) { | |
return K(this.context).on(e, this.selector, t, n), | |
this | |
}, | |
die: function(e, t) { | |
return K(this.context).off(e, this.selector || "**", t), | |
this | |
}, | |
delegate: function(e, t, n, i) { | |
return this.on(t, e, n, i) | |
}, | |
undelegate: function(e, t, n) { | |
return 1 === arguments.length ? this.off(e, "**") : this.off(t, e || "**", n) | |
}, | |
trigger: function(e, t) { | |
return this.each(function() { | |
K.event.trigger(e, t, this) | |
}) | |
}, | |
triggerHandler: function(e, t) { | |
if (this[0]) | |
return K.event.trigger(e, t, this[0], !0) | |
}, | |
toggle: function(e) { | |
var t = arguments | |
, n = e.guid || K.guid++ | |
, i = 0 | |
, r = function(n) { | |
var r = (K._data(this, "lastToggle" + e.guid) || 0) % i; | |
return K._data(this, "lastToggle" + e.guid, r + 1), | |
n.preventDefault(), | |
t[r].apply(this, arguments) || !1 | |
}; | |
for (r.guid = n; i < t.length; ) | |
t[i++].guid = n; | |
return this.click(r) | |
}, | |
hover: function(e, t) { | |
return this.mouseenter(e).mouseleave(t || e) | |
} | |
}), | |
K.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "), function(e, t) { | |
K.fn[t] = function(e, n) { | |
return null == n && (n = e, | |
e = null), | |
arguments.length > 0 ? this.on(t, null, e, n) : this.trigger(t) | |
} | |
, | |
Ee.test(t) && (K.event.fixHooks[t] = K.event.keyHooks), | |
De.test(t) && (K.event.fixHooks[t] = K.event.mouseHooks) | |
}), | |
function(e, t) { | |
function n(e, t, n, i) { | |
n = n || [], | |
t = t || E; | |
var r, o, a, s, l = t.nodeType; | |
if (!e || "string" != typeof e) | |
return n; | |
if (1 !== l && 9 !== l) | |
return []; | |
if (!(a = k(t)) && !i && (r = ee.exec(e))) | |
if (s = r[1]) { | |
if (9 === l) { | |
if (!(o = t.getElementById(s)) || !o.parentNode) | |
return n; | |
if (o.id === s) | |
return n.push(o), | |
n | |
} else if (t.ownerDocument && (o = t.ownerDocument.getElementById(s)) && x(t, o) && o.id === s) | |
return n.push(o), | |
n | |
} else { | |
if (r[2]) | |
return M.apply(n, O.call(t.getElementsByTagName(e), 0)), | |
n; | |
if ((s = r[3]) && ce && t.getElementsByClassName) | |
return M.apply(n, O.call(t.getElementsByClassName(s), 0)), | |
n | |
} | |
return h(e.replace(J, "$1"), t, n, i, a) | |
} | |
function i(e) { | |
return function(t) { | |
return "input" === t.nodeName.toLowerCase() && t.type === e | |
} | |
} | |
function r(e) { | |
return function(t) { | |
var n = t.nodeName.toLowerCase(); | |
return ("input" === n || "button" === n) && t.type === e | |
} | |
} | |
function o(e) { | |
return B(function(t) { | |
return t = +t, | |
B(function(n, i) { | |
for (var r, o = e([], n.length, t), a = o.length; a--; ) | |
n[r = o[a]] && (n[r] = !(i[r] = n[r])) | |
}) | |
}) | |
} | |
function a(e, t, n) { | |
if (e === t) | |
return n; | |
for (var i = e.nextSibling; i; ) { | |
if (i === t) | |
return -1; | |
i = i.nextSibling | |
} | |
return 1 | |
} | |
function s(e, t) { | |
var i, r, o, a, s, l, d, c = F[j][e + " "]; | |
if (c) | |
return t ? 0 : c.slice(0); | |
for (s = e, | |
l = [], | |
d = b.preFilter; s; ) { | |
i && !(r = Y.exec(s)) || (r && (s = s.slice(r[0].length) || s), | |
l.push(o = [])), | |
i = !1, | |
(r = Q.exec(s)) && (o.push(i = new N(r.shift())), | |
s = s.slice(i.length), | |
i.type = r[0].replace(J, " ")); | |
for (a in b.filter) | |
!(r = oe[a].exec(s)) || d[a] && !(r = d[a](r)) || (o.push(i = new N(r.shift())), | |
s = s.slice(i.length), | |
i.type = a, | |
i.matches = r); | |
if (!i) | |
break | |
} | |
return t ? s.length : s ? n.error(e) : F(e, l).slice(0) | |
} | |
function l(e, t, n) { | |
var i = t.dir | |
, r = n && "parentNode" === t.dir | |
, o = I++; | |
return t.first ? function(t, n, o) { | |
for (; t = t[i]; ) | |
if (r || 1 === t.nodeType) | |
return e(t, n, o) | |
} | |
: function(t, n, a) { | |
if (a) { | |
for (; t = t[i]; ) | |
if ((r || 1 === t.nodeType) && e(t, n, a)) | |
return t | |
} else | |
for (var s, l = P + " " + o + " ", d = l + y; t = t[i]; ) | |
if (r || 1 === t.nodeType) { | |
if ((s = t[j]) === d) | |
return t.sizset; | |
if ("string" == typeof s && 0 === s.indexOf(l)) { | |
if (t.sizset) | |
return t | |
} else { | |
if (t[j] = d, | |
e(t, n, a)) | |
return t.sizset = !0, | |
t; | |
t.sizset = !1 | |
} | |
} | |
} | |
} | |
function d(e) { | |
return e.length > 1 ? function(t, n, i) { | |
for (var r = e.length; r--; ) | |
if (!e[r](t, n, i)) | |
return !1; | |
return !0 | |
} | |
: e[0] | |
} | |
function c(e, t, n, i, r) { | |
for (var o, a = [], s = 0, l = e.length, d = null != t; s < l; s++) | |
(o = e[s]) && (n && !n(o, i, r) || (a.push(o), | |
d && t.push(s))); | |
return a | |
} | |
function u(e, t, n, i, r, o) { | |
return i && !i[j] && (i = u(i)), | |
r && !r[j] && (r = u(r, o)), | |
B(function(o, a, s, l) { | |
var d, u, p, f = [], h = [], m = a.length, y = o || g(t || "*", s.nodeType ? [s] : s, []), v = !e || !o && t ? y : c(y, f, e, s, l), b = n ? r || (o ? e : m || i) ? [] : a : v; | |
if (n && n(v, b, s, l), | |
i) | |
for (d = c(b, h), | |
i(d, [], s, l), | |
u = d.length; u--; ) | |
(p = d[u]) && (b[h[u]] = !(v[h[u]] = p)); | |
if (o) { | |
if (r || e) { | |
if (r) { | |
for (d = [], | |
u = b.length; u--; ) | |
(p = b[u]) && d.push(v[u] = p); | |
r(null, b = [], d, l) | |
} | |
for (u = b.length; u--; ) | |
(p = b[u]) && (d = r ? q.call(o, p) : f[u]) > -1 && (o[d] = !(a[d] = p)) | |
} | |
} else | |
b = c(b === a ? b.splice(m, b.length) : b), | |
r ? r(null, a, b, l) : M.apply(a, b) | |
}) | |
} | |
function p(e) { | |
for (var t, n, i, r = e.length, o = b.relative[e[0].type], a = o || b.relative[" "], s = o ? 1 : 0, c = l(function(e) { | |
return e === t | |
}, a, !0), f = l(function(e) { | |
return q.call(t, e) > -1 | |
}, a, !0), g = [function(e, n, i) { | |
return !o && (i || n !== A) || ((t = n).nodeType ? c(e, n, i) : f(e, n, i)) | |
} | |
]; s < r; s++) | |
if (n = b.relative[e[s].type]) | |
g = [l(d(g), n)]; | |
else { | |
if (n = b.filter[e[s].type].apply(null, e[s].matches), | |
n[j]) { | |
for (i = ++s; i < r && !b.relative[e[i].type]; i++) | |
; | |
return u(s > 1 && d(g), s > 1 && e.slice(0, s - 1).join("").replace(J, "$1"), n, s < i && p(e.slice(s, i)), i < r && p(e = e.slice(i)), i < r && e.join("")) | |
} | |
g.push(n) | |
} | |
return d(g) | |
} | |
function f(e, t) { | |
var i = t.length > 0 | |
, r = e.length > 0 | |
, o = function(a, s, l, d, u) { | |
var p, f, g, h = [], m = 0, v = "0", w = a && [], k = null != u, x = A, C = a || r && b.find.TAG("*", u && s.parentNode || s), _ = P += null == x ? 1 : Math.E; | |
for (k && (A = s !== E && s, | |
y = o.el); null != (p = C[v]); v++) { | |
if (r && p) { | |
for (f = 0; g = e[f]; f++) | |
if (g(p, s, l)) { | |
d.push(p); | |
break | |
} | |
k && (P = _, | |
y = ++o.el) | |
} | |
i && ((p = !g && p) && m--, | |
a && w.push(p)) | |
} | |
if (m += v, | |
i && v !== m) { | |
for (f = 0; g = t[f]; f++) | |
g(w, h, s, l); | |
if (a) { | |
if (m > 0) | |
for (; v--; ) | |
w[v] || h[v] || (h[v] = L.call(d)); | |
h = c(h) | |
} | |
M.apply(d, h), | |
k && !a && h.length > 0 && m + t.length > 1 && n.uniqueSort(d) | |
} | |
return k && (P = _, | |
A = x), | |
w | |
}; | |
return o.el = 0, | |
i ? B(o) : o | |
} | |
function g(e, t, i) { | |
for (var r = 0, o = t.length; r < o; r++) | |
n(e, t[r], i); | |
return i | |
} | |
function h(e, t, n, i, r) { | |
var o, a, l, d, c, u = s(e); | |
u.length; | |
if (!i && 1 === u.length) { | |
if (a = u[0] = u[0].slice(0), | |
a.length > 2 && "ID" === (l = a[0]).type && 9 === t.nodeType && !r && b.relative[a[1].type]) { | |
if (!(t = b.find.ID(l.matches[0].replace(re, ""), t, r)[0])) | |
return n; | |
e = e.slice(a.shift().length) | |
} | |
for (o = oe.POS.test(e) ? -1 : a.length - 1; o >= 0 && (l = a[o], | |
!b.relative[d = l.type]); o--) | |
if ((c = b.find[d]) && (i = c(l.matches[0].replace(re, ""), te.test(a[0].type) && t.parentNode || t, r))) { | |
if (a.splice(o, 1), | |
!(e = i.length && a.join(""))) | |
return M.apply(n, O.call(i, 0)), | |
n; | |
break | |
} | |
} | |
return C(e, u)(i, t, r, n, te.test(e)), | |
n | |
} | |
function m() {} | |
var y, v, b, w, k, x, C, _, T, A, S = !0, j = ("sizcache" + Math.random()).replace(".", ""), N = String, E = e.document, D = E.documentElement, P = 0, I = 0, L = [].pop, M = [].push, O = [].slice, q = [].indexOf || function(e) { | |
for (var t = 0, n = this.length; t < n; t++) | |
if (this[t] === e) | |
return t; | |
return -1 | |
} | |
, B = function(e, t) { | |
return e[j] = null == t || t, | |
e | |
}, R = function() { | |
var e = {} | |
, t = []; | |
return B(function(n, i) { | |
return t.push(n) > b.cacheLength && delete e[t.shift()], | |
e[n + " "] = i | |
}, e) | |
}, $ = R(), F = R(), H = R(), U = "[\\x20\\t\\r\\n\\f]", z = "(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+", V = z.replace("w", "w#"), W = "\\[" + U + "*(" + z + ")" + U + "*(?:([*^$|!~]?=)" + U + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + V + ")|)|)" + U + "*\\]", G = ":(" + z + ")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:" + W + ")|[^:]|\\\\.)*|.*))\\)|)", X = ":(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + U + "*((?:-\\d)?\\d*)" + U + "*\\)|)(?=[^-]|$)", J = new RegExp("^" + U + "+|((?:^|[^\\\\])(?:\\\\.)*)" + U + "+$","g"), Y = new RegExp("^" + U + "*," + U + "*"), Q = new RegExp("^" + U + "*([\\x20\\t\\r\\n\\f>+~])" + U + "*"), Z = new RegExp(G), ee = /^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/, te = /[\x20\t\r\n\f]*[+~]/, ne = /h\d/i, ie = /input|select|textarea|button/i, re = /\\(?!\\)/g, oe = { | |
ID: new RegExp("^#(" + z + ")"), | |
CLASS: new RegExp("^\\.(" + z + ")"), | |
NAME: new RegExp("^\\[name=['\"]?(" + z + ")['\"]?\\]"), | |
TAG: new RegExp("^(" + z.replace("w", "w*") + ")"), | |
ATTR: new RegExp("^" + W), | |
PSEUDO: new RegExp("^" + G), | |
POS: new RegExp(X,"i"), | |
CHILD: new RegExp("^:(only|nth|first|last)-child(?:\\(" + U + "*(even|odd|(([+-]|)(\\d*)n|)" + U + "*(?:([+-]|)" + U + "*(\\d+)|))" + U + "*\\)|)","i"), | |
needsContext: new RegExp("^" + U + "*[>+~]|" + X,"i") | |
}, ae = function(e) { | |
var t = E.createElement("div"); | |
try { | |
return e(t) | |
} catch (e) { | |
return !1 | |
} finally { | |
t = null | |
} | |
}, se = ae(function(e) { | |
return e.appendChild(E.createComment("")), | |
!e.getElementsByTagName("*").length | |
}), le = ae(function(e) { | |
return e.innerHTML = "<a href='#'></a>", | |
e.firstChild && void 0 !== e.firstChild.getAttribute && "#" === e.firstChild.getAttribute("href") | |
}), de = ae(function(e) { | |
e.innerHTML = "<select></select>"; | |
var t = typeof e.lastChild.getAttribute("multiple"); | |
return "boolean" !== t && "string" !== t | |
}), ce = ae(function(e) { | |
return e.innerHTML = "<div class='hidden e'></div><div class='hidden'></div>", | |
!(!e.getElementsByClassName || !e.getElementsByClassName("e").length) && (e.lastChild.className = "e", | |
2 === e.getElementsByClassName("e").length) | |
}), ue = ae(function(e) { | |
e.id = j + 0, | |
e.innerHTML = "<a name='" + j + "'></a><div name='" + j + "'></div>", | |
D.insertBefore(e, D.firstChild); | |
var t = E.getElementsByName && E.getElementsByName(j).length === 2 + E.getElementsByName(j + 0).length; | |
return v = !E.getElementById(j), | |
D.removeChild(e), | |
t | |
}); | |
try { | |
O.call(D.childNodes, 0)[0].nodeType | |
} catch (e) { | |
O = function(e) { | |
for (var t, n = []; t = this[e]; e++) | |
n.push(t); | |
return n | |
} | |
} | |
n.matches = function(e, t) { | |
return n(e, null, null, t) | |
} | |
, | |
n.matchesSelector = function(e, t) { | |
return n(t, null, null, [e]).length > 0 | |
} | |
, | |
w = n.getText = function(e) { | |
var t, n = "", i = 0, r = e.nodeType; | |
if (r) { | |
if (1 === r || 9 === r || 11 === r) { | |
if ("string" == typeof e.textContent) | |
return e.textContent; | |
for (e = e.firstChild; e; e = e.nextSibling) | |
n += w(e) | |
} else if (3 === r || 4 === r) | |
return e.nodeValue | |
} else | |
for (; t = e[i]; i++) | |
n += w(t); | |
return n | |
} | |
, | |
k = n.isXML = function(e) { | |
var t = e && (e.ownerDocument || e).documentElement; | |
return !!t && "HTML" !== t.nodeName | |
} | |
, | |
x = n.contains = D.contains ? function(e, t) { | |
var n = 9 === e.nodeType ? e.documentElement : e | |
, i = t && t.parentNode; | |
return e === i || !!(i && 1 === i.nodeType && n.contains && n.contains(i)) | |
} | |
: D.compareDocumentPosition ? function(e, t) { | |
return t && !!(16 & e.compareDocumentPosition(t)) | |
} | |
: function(e, t) { | |
for (; t = t.parentNode; ) | |
if (t === e) | |
return !0; | |
return !1 | |
} | |
, | |
n.attr = function(e, t) { | |
var n, i = k(e); | |
return i || (t = t.toLowerCase()), | |
(n = b.attrHandle[t]) ? n(e) : i || de ? e.getAttribute(t) : (n = e.getAttributeNode(t), | |
n ? "boolean" == typeof e[t] ? e[t] ? t : null : n.specified ? n.value : null : null) | |
} | |
, | |
b = n.selectors = { | |
cacheLength: 50, | |
createPseudo: B, | |
match: oe, | |
attrHandle: le ? {} : { | |
href: function(e) { | |
return e.getAttribute("href", 2) | |
}, | |
type: function(e) { | |
return e.getAttribute("type") | |
} | |
}, | |
find: { | |
ID: v ? function(e, t, n) { | |
if (void 0 !== t.getElementById && !n) { | |
var i = t.getElementById(e); | |
return i && i.parentNode ? [i] : [] | |
} | |
} | |
: function(e, t, n) { | |
if (void 0 !== t.getElementById && !n) { | |
var i = t.getElementById(e); | |
return i ? i.id === e || void 0 !== i.getAttributeNode && i.getAttributeNode("id").value === e ? [i] : void 0 : [] | |
} | |
} | |
, | |
TAG: se ? function(e, t) { | |
if (void 0 !== t.getElementsByTagName) | |
return t.getElementsByTagName(e) | |
} | |
: function(e, t) { | |
var n = t.getElementsByTagName(e); | |
if ("*" === e) { | |
for (var i, r = [], o = 0; i = n[o]; o++) | |
1 === i.nodeType && r.push(i); | |
return r | |
} | |
return n | |
} | |
, | |
NAME: ue && function(e, t) { | |
if (void 0 !== t.getElementsByName) | |
return t.getElementsByName(name) | |
} | |
, | |
CLASS: ce && function(e, t, n) { | |
if (void 0 !== t.getElementsByClassName && !n) | |
return t.getElementsByClassName(e) | |
} | |
}, | |
relative: { | |
">": { | |
dir: "parentNode", | |
first: !0 | |
}, | |
" ": { | |
dir: "parentNode" | |
}, | |
"+": { | |
dir: "previousSibling", | |
first: !0 | |
}, | |
"~": { | |
dir: "previousSibling" | |
} | |
}, | |
preFilter: { | |
ATTR: function(e) { | |
return e[1] = e[1].replace(re, ""), | |
e[3] = (e[4] || e[5] || "").replace(re, ""), | |
"~=" === e[2] && (e[3] = " " + e[3] + " "), | |
e.slice(0, 4) | |
}, | |
CHILD: function(e) { | |
return e[1] = e[1].toLowerCase(), | |
"nth" === e[1] ? (e[2] || n.error(e[0]), | |
e[3] = +(e[3] ? e[4] + (e[5] || 1) : 2 * ("even" === e[2] || "odd" === e[2])), | |
e[4] = +(e[6] + e[7] || "odd" === e[2])) : e[2] && n.error(e[0]), | |
e | |
}, | |
PSEUDO: function(e) { | |
var t, n; | |
return oe.CHILD.test(e[0]) ? null : (e[3] ? e[2] = e[3] : (t = e[4]) && (Z.test(t) && (n = s(t, !0)) && (n = t.indexOf(")", t.length - n) - t.length) && (t = t.slice(0, n), | |
e[0] = e[0].slice(0, n)), | |
e[2] = t), | |
e.slice(0, 3)) | |
} | |
}, | |
filter: { | |
ID: v ? function(e) { | |
return e = e.replace(re, ""), | |
function(t) { | |
return t.getAttribute("id") === e | |
} | |
} | |
: function(e) { | |
return e = e.replace(re, ""), | |
function(t) { | |
var n = void 0 !== t.getAttributeNode && t.getAttributeNode("id"); | |
return n && n.value === e | |
} | |
} | |
, | |
TAG: function(e) { | |
return "*" === e ? function() { | |
return !0 | |
} | |
: (e = e.replace(re, "").toLowerCase(), | |
function(t) { | |
return t.nodeName && t.nodeName.toLowerCase() === e | |
} | |
) | |
}, | |
CLASS: function(e) { | |
var t = $[j][e + " "]; | |
return t || (t = new RegExp("(^|" + U + ")" + e + "(" + U + "|$)")) && $(e, function(e) { | |
return t.test(e.className || void 0 !== e.getAttribute && e.getAttribute("class") || "") | |
}) | |
}, | |
ATTR: function(e, t, i) { | |
return function(r, o) { | |
var a = n.attr(r, e); | |
return null == a ? "!=" === t : !t || (a += "", | |
"=" === t ? a === i : "!=" === t ? a !== i : "^=" === t ? i && 0 === a.indexOf(i) : "*=" === t ? i && a.indexOf(i) > -1 : "$=" === t ? i && a.substr(a.length - i.length) === i : "~=" === t ? (" " + a + " ").indexOf(i) > -1 : "|=" === t && (a === i || a.substr(0, i.length + 1) === i + "-")) | |
} | |
}, | |
CHILD: function(e, t, n, i) { | |
return "nth" === e ? function(e) { | |
var t, r, o = e.parentNode; | |
if (1 === n && 0 === i) | |
return !0; | |
if (o) | |
for (r = 0, | |
t = o.firstChild; t && (1 !== t.nodeType || (r++, | |
e !== t)); t = t.nextSibling) | |
; | |
return (r -= i) === n || r % n == 0 && r / n >= 0 | |
} | |
: function(t) { | |
var n = t; | |
switch (e) { | |
case "only": | |
case "first": | |
for (; n = n.previousSibling; ) | |
if (1 === n.nodeType) | |
return !1; | |
if ("first" === e) | |
return !0; | |
n = t; | |
case "last": | |
for (; n = n.nextSibling; ) | |
if (1 === n.nodeType) | |
return !1; | |
return !0 | |
} | |
} | |
}, | |
PSEUDO: function(e, t) { | |
var i, r = b.pseudos[e] || b.setFilters[e.toLowerCase()] || n.error("unsupported pseudo: " + e); | |
return r[j] ? r(t) : r.length > 1 ? (i = [e, e, "", t], | |
b.setFilters.hasOwnProperty(e.toLowerCase()) ? B(function(e, n) { | |
for (var i, o = r(e, t), a = o.length; a--; ) | |
i = q.call(e, o[a]), | |
e[i] = !(n[i] = o[a]) | |
}) : function(e) { | |
return r(e, 0, i) | |
} | |
) : r | |
} | |
}, | |
pseudos: { | |
not: B(function(e) { | |
var t = [] | |
, n = [] | |
, i = C(e.replace(J, "$1")); | |
return i[j] ? B(function(e, t, n, r) { | |
for (var o, a = i(e, null, r, []), s = e.length; s--; ) | |
(o = a[s]) && (e[s] = !(t[s] = o)) | |
}) : function(e, r, o) { | |
return t[0] = e, | |
i(t, null, o, n), | |
!n.pop() | |
} | |
}), | |
has: B(function(e) { | |
return function(t) { | |
return n(e, t).length > 0 | |
} | |
}), | |
contains: B(function(e) { | |
return function(t) { | |
return (t.textContent || t.innerText || w(t)).indexOf(e) > -1 | |
} | |
}), | |
enabled: function(e) { | |
return !1 === e.disabled | |
}, | |
disabled: function(e) { | |
return !0 === e.disabled | |
}, | |
checked: function(e) { | |
var t = e.nodeName.toLowerCase(); | |
return "input" === t && !!e.checked || "option" === t && !!e.selected | |
}, | |
selected: function(e) { | |
return e.parentNode && e.parentNode.selectedIndex, | |
!0 === e.selected | |
}, | |
parent: function(e) { | |
return !b.pseudos.empty(e) | |
}, | |
empty: function(e) { | |
var t; | |
for (e = e.firstChild; e; ) { | |
if (e.nodeName > "@" || 3 === (t = e.nodeType) || 4 === t) | |
return !1; | |
e = e.nextSibling | |
} | |
return !0 | |
}, | |
header: function(e) { | |
return ne.test(e.nodeName) | |
}, | |
text: function(e) { | |
var t, n; | |
return "input" === e.nodeName.toLowerCase() && "text" === (t = e.type) && (null == (n = e.getAttribute("type")) || n.toLowerCase() === t) | |
}, | |
radio: i("radio"), | |
checkbox: i("checkbox"), | |
file: i("file"), | |
password: i("password"), | |
image: i("image"), | |
submit: r("submit"), | |
reset: r("reset"), | |
button: function(e) { | |
var t = e.nodeName.toLowerCase(); | |
return "input" === t && "button" === e.type || "button" === t | |
}, | |
input: function(e) { | |
return ie.test(e.nodeName) | |
}, | |
focus: function(e) { | |
var t = e.ownerDocument; | |
return e === t.activeElement && (!t.hasFocus || t.hasFocus()) && !!(e.type || e.href || ~e.tabIndex) | |
}, | |
active: function(e) { | |
return e === e.ownerDocument.activeElement | |
}, | |
first: o(function() { | |
return [0] | |
}), | |
last: o(function(e, t) { | |
return [t - 1] | |
}), | |
eq: o(function(e, t, n) { | |
return [n < 0 ? n + t : n] | |
}), | |
even: o(function(e, t) { | |
for (var n = 0; n < t; n += 2) | |
e.push(n); | |
return e | |
}), | |
odd: o(function(e, t) { | |
for (var n = 1; n < t; n += 2) | |
e.push(n); | |
return e | |
}), | |
lt: o(function(e, t, n) { | |
for (var i = n < 0 ? n + t : n; --i >= 0; ) | |
e.push(i); | |
return e | |
}), | |
gt: o(function(e, t, n) { | |
for (var i = n < 0 ? n + t : n; ++i < t; ) | |
e.push(i); | |
return e | |
}) | |
} | |
}, | |
_ = D.compareDocumentPosition ? function(e, t) { | |
return e === t ? (T = !0, | |
0) : (e.compareDocumentPosition && t.compareDocumentPosition ? 4 & e.compareDocumentPosition(t) : e.compareDocumentPosition) ? -1 : 1 | |
} | |
: function(e, t) { | |
if (e === t) | |
return T = !0, | |
0; | |
if (e.sourceIndex && t.sourceIndex) | |
return e.sourceIndex - t.sourceIndex; | |
var n, i, r = [], o = [], s = e.parentNode, l = t.parentNode, d = s; | |
if (s === l) | |
return a(e, t); | |
if (!s) | |
return -1; | |
if (!l) | |
return 1; | |
for (; d; ) | |
r.unshift(d), | |
d = d.parentNode; | |
for (d = l; d; ) | |
o.unshift(d), | |
d = d.parentNode; | |
n = r.length, | |
i = o.length; | |
for (var c = 0; c < n && c < i; c++) | |
if (r[c] !== o[c]) | |
return a(r[c], o[c]); | |
return c === n ? a(e, o[c], -1) : a(r[c], t, 1) | |
} | |
, | |
[0, 0].sort(_), | |
S = !T, | |
n.uniqueSort = function(e) { | |
var t, n = [], i = 1, r = 0; | |
if (T = S, | |
e.sort(_), | |
T) { | |
for (; t = e[i]; i++) | |
t === e[i - 1] && (r = n.push(i)); | |
for (; r--; ) | |
e.splice(n[r], 1) | |
} | |
return e | |
} | |
, | |
n.error = function(e) { | |
throw new Error("Syntax error, unrecognized expression: " + e) | |
} | |
, | |
C = n.compile = function(e, t) { | |
var n, i = [], r = [], o = H[j][e + " "]; | |
if (!o) { | |
for (t || (t = s(e)), | |
n = t.length; n--; ) | |
o = p(t[n]), | |
o[j] ? i.push(o) : r.push(o); | |
o = H(e, f(r, i)) | |
} | |
return o | |
} | |
, | |
E.querySelectorAll && function() { | |
var e, t = h, i = /'|\\/g, r = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g, o = [":focus"], a = [":active"], l = D.matchesSelector || D.mozMatchesSelector || D.webkitMatchesSelector || D.oMatchesSelector || D.msMatchesSelector; | |
ae(function(e) { | |
e.innerHTML = "<select><option selected=''></option></select>", | |
e.querySelectorAll("[selected]").length || o.push("\\[" + U + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)"), | |
e.querySelectorAll(":checked").length || o.push(":checked") | |
}), | |
ae(function(e) { | |
e.innerHTML = "<p test=''></p>", | |
e.querySelectorAll("[test^='']").length && o.push("[*^$]=" + U + "*(?:\"\"|'')"), | |
e.innerHTML = "<input type='hidden'/>", | |
e.querySelectorAll(":enabled").length || o.push(":enabled", ":disabled") | |
}), | |
o = new RegExp(o.join("|")), | |
h = function(e, n, r, a, l) { | |
if (!a && !l && !o.test(e)) { | |
var d, c, u = !0, p = j, f = n, g = 9 === n.nodeType && e; | |
if (1 === n.nodeType && "object" !== n.nodeName.toLowerCase()) { | |
for (d = s(e), | |
(u = n.getAttribute("id")) ? p = u.replace(i, "\\$&") : n.setAttribute("id", p), | |
p = "[id='" + p + "'] ", | |
c = d.length; c--; ) | |
d[c] = p + d[c].join(""); | |
f = te.test(e) && n.parentNode || n, | |
g = d.join(",") | |
} | |
if (g) | |
try { | |
return M.apply(r, O.call(f.querySelectorAll(g), 0)), | |
r | |
} catch (e) {} finally { | |
u || n.removeAttribute("id") | |
} | |
} | |
return t(e, n, r, a, l) | |
} | |
, | |
l && (ae(function(t) { | |
e = l.call(t, "div"); | |
try { | |
l.call(t, "[test!='']:sizzle"), | |
a.push("!=", G) | |
} catch (e) {} | |
}), | |
a = new RegExp(a.join("|")), | |
n.matchesSelector = function(t, i) { | |
if (i = i.replace(r, "='$1']"), | |
!k(t) && !a.test(i) && !o.test(i)) | |
try { | |
var s = l.call(t, i); | |
if (s || e || t.document && 11 !== t.document.nodeType) | |
return s | |
} catch (e) {} | |
return n(i, null, null, [t]).length > 0 | |
} | |
) | |
}(), | |
b.pseudos.nth = b.pseudos.eq, | |
b.filters = m.prototype = b.pseudos, | |
b.setFilters = new m, | |
n.attr = K.attr, | |
K.find = n, | |
K.expr = n.selectors, | |
K.expr[":"] = K.expr.pseudos, | |
K.unique = n.uniqueSort, | |
K.text = n.getText, | |
K.isXMLDoc = n.isXML, | |
K.contains = n.contains | |
}(e); | |
var Le = /Until$/ | |
, Me = /^(?:parents|prev(?:Until|All))/ | |
, Oe = /^.[^:#\[\.,]*$/ | |
, qe = K.expr.match.needsContext | |
, Be = { | |
children: !0, | |
contents: !0, | |
next: !0, | |
prev: !0 | |
}; | |
K.fn.extend({ | |
find: function(e) { | |
var t, n, i, r, o, a, s = this; | |
if ("string" != typeof e) | |
return K(e).filter(function() { | |
for (t = 0, | |
n = s.length; t < n; t++) | |
if (K.contains(s[t], this)) | |
return !0 | |
}); | |
for (a = this.pushStack("", "find", e), | |
t = 0, | |
n = this.length; t < n; t++) | |
if (i = a.length, | |
K.find(e, this[t], a), | |
t > 0) | |
for (r = i; r < a.length; r++) | |
for (o = 0; o < i; o++) | |
if (a[o] === a[r]) { | |
a.splice(r--, 1); | |
break | |
} | |
return a | |
}, | |
has: function(e) { | |
var t, n = K(e, this), i = n.length; | |
return this.filter(function() { | |
for (t = 0; t < i; t++) | |
if (K.contains(this, n[t])) | |
return !0 | |
}) | |
}, | |
not: function(e) { | |
return this.pushStack(d(this, e, !1), "not", e) | |
}, | |
filter: function(e) { | |
return this.pushStack(d(this, e, !0), "filter", e) | |
}, | |
is: function(e) { | |
return !!e && ("string" == typeof e ? qe.test(e) ? K(e, this.context).index(this[0]) >= 0 : K.filter(e, this).length > 0 : this.filter(e).length > 0) | |
}, | |
closest: function(e, t) { | |
for (var n, i = 0, r = this.length, o = [], a = qe.test(e) || "string" != typeof e ? K(e, t || this.context) : 0; i < r; i++) | |
for (n = this[i]; n && n.ownerDocument && n !== t && 11 !== n.nodeType; ) { | |
if (a ? a.index(n) > -1 : K.find.matchesSelector(n, e)) { | |
o.push(n); | |
break | |
} | |
n = n.parentNode | |
} | |
return o = o.length > 1 ? K.unique(o) : o, | |
this.pushStack(o, "closest", e) | |
}, | |
index: function(e) { | |
return e ? "string" == typeof e ? K.inArray(this[0], K(e)) : K.inArray(e.jquery ? e[0] : e, this) : this[0] && this[0].parentNode ? this.prevAll().length : -1 | |
}, | |
add: function(e, t) { | |
var n = "string" == typeof e ? K(e, t) : K.makeArray(e && e.nodeType ? [e] : e) | |
, i = K.merge(this.get(), n); | |
return this.pushStack(s(n[0]) || s(i[0]) ? i : K.unique(i)) | |
}, | |
addBack: function(e) { | |
return this.add(null == e ? this.prevObject : this.prevObject.filter(e)) | |
} | |
}), | |
K.fn.andSelf = K.fn.addBack, | |
K.each({ | |
parent: function(e) { | |
var t = e.parentNode; | |
return t && 11 !== t.nodeType ? t : null | |
}, | |
parents: function(e) { | |
return K.dir(e, "parentNode") | |
}, | |
parentsUntil: function(e, t, n) { | |
return K.dir(e, "parentNode", n) | |
}, | |
next: function(e) { | |
return l(e, "nextSibling") | |
}, | |
prev: function(e) { | |
return l(e, "previousSibling") | |
}, | |
nextAll: function(e) { | |
return K.dir(e, "nextSibling") | |
}, | |
prevAll: function(e) { | |
return K.dir(e, "previousSibling") | |
}, | |
nextUntil: function(e, t, n) { | |
return K.dir(e, "nextSibling", n) | |
}, | |
prevUntil: function(e, t, n) { | |
return K.dir(e, "previousSibling", n) | |
}, | |
siblings: function(e) { | |
return K.sibling((e.parentNode || {}).firstChild, e) | |
}, | |
children: function(e) { | |
return K.sibling(e.firstChild) | |
}, | |
contents: function(e) { | |
return K.nodeName(e, "iframe") ? e.contentDocument || e.contentWindow.document : K.merge([], e.childNodes) | |
} | |
}, function(e, t) { | |
K.fn[e] = function(n, i) { | |
var r = K.map(this, t, n); | |
return Le.test(e) || (i = n), | |
i && "string" == typeof i && (r = K.filter(i, r)), | |
r = this.length > 1 && !Be[e] ? K.unique(r) : r, | |
this.length > 1 && Me.test(e) && (r = r.reverse()), | |
this.pushStack(r, e, G.call(arguments).join(",")) | |
} | |
}), | |
K.extend({ | |
filter: function(e, t, n) { | |
return n && (e = ":not(" + e + ")"), | |
1 === t.length ? K.find.matchesSelector(t[0], e) ? [t[0]] : [] : K.find.matches(e, t) | |
}, | |
dir: function(e, n, i) { | |
for (var r = [], o = e[n]; o && 9 !== o.nodeType && (i === t || 1 !== o.nodeType || !K(o).is(i)); ) | |
1 === o.nodeType && r.push(o), | |
o = o[n]; | |
return r | |
}, | |
sibling: function(e, t) { | |
for (var n = []; e; e = e.nextSibling) | |
1 === e.nodeType && e !== t && n.push(e); | |
return n | |
} | |
}); | |
var Re = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video" | |
, $e = / jQuery\d+="(?:null|\d+)"/g | |
, Fe = /^\s+/ | |
, He = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi | |
, Ue = /<([\w:]+)/ | |
, ze = /<tbody/i | |
, Ve = /<|&#?\w+;/ | |
, We = /<(?:script|style|link)/i | |
, Ge = /<(?:script|object|embed|option|style)/i | |
, Xe = new RegExp("<(?:" + Re + ")[\\s/>]","i") | |
, Je = /^(?:checkbox|radio)$/ | |
, Ye = /checked\s*(?:[^=]|=\s*.checked.)/i | |
, Qe = /\/(java|ecma)script/i | |
, Ke = /^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g | |
, Ze = { | |
option: [1, "<select multiple='multiple'>", "</select>"], | |
legend: [1, "<fieldset>", "</fieldset>"], | |
thead: [1, "<table>", "</table>"], | |
tr: [2, "<table><tbody>", "</tbody></table>"], | |
td: [3, "<table><tbody><tr>", "</tr></tbody></table>"], | |
col: [2, "<table><tbody></tbody><colgroup>", "</colgroup></table>"], | |
area: [1, "<map>", "</map>"], | |
_default: [0, "", ""] | |
} | |
, et = c(F) | |
, tt = et.appendChild(F.createElement("div")); | |
Ze.optgroup = Ze.option, | |
Ze.tbody = Ze.tfoot = Ze.colgroup = Ze.caption = Ze.thead, | |
Ze.th = Ze.td, | |
K.support.htmlSerialize || (Ze._default = [1, "X<div>", "</div>"]), | |
K.fn.extend({ | |
text: function(e) { | |
return K.access(this, function(e) { | |
return e === t ? K.text(this) : this.empty().append((this[0] && this[0].ownerDocument || F).createTextNode(e)) | |
}, null, e, arguments.length) | |
}, | |
wrapAll: function(e) { | |
if (K.isFunction(e)) | |
return this.each(function(t) { | |
K(this).wrapAll(e.call(this, t)) | |
}); | |
if (this[0]) { | |
var t = K(e, this[0].ownerDocument).eq(0).clone(!0); | |
this[0].parentNode && t.insertBefore(this[0]), | |
t.map(function() { | |
for (var e = this; e.firstChild && 1 === e.firstChild.nodeType; ) | |
e = e.firstChild; | |
return e | |
}).append(this) | |
} | |
return this | |
}, | |
wrapInner: function(e) { | |
return K.isFunction(e) ? this.each(function(t) { | |
K(this).wrapInner(e.call(this, t)) | |
}) : this.each(function() { | |
var t = K(this) | |
, n = t.contents(); | |
n.length ? n.wrapAll(e) : t.append(e) | |
}) | |
}, | |
wrap: function(e) { | |
var t = K.isFunction(e); | |
return this.each(function(n) { | |
K(this).wrapAll(t ? e.call(this, n) : e) | |
}) | |
}, | |
unwrap: function() { | |
return this.parent().each(function() { | |
K.nodeName(this, "body") || K(this).replaceWith(this.childNodes) | |
}).end() | |
}, | |
append: function() { | |
return this.domManip(arguments, !0, function(e) { | |
1 !== this.nodeType && 11 !== this.nodeType || this.appendChild(e) | |
}) | |
}, | |
prepend: function() { | |
return this.domManip(arguments, !0, function(e) { | |
1 !== this.nodeType && 11 !== this.nodeType || this.insertBefore(e, this.firstChild) | |
}) | |
}, | |
before: function() { | |
if (!s(this[0])) | |
return this.domManip(arguments, !1, function(e) { | |
this.parentNode.insertBefore(e, this) | |
}); | |
if (arguments.length) { | |
var e = K.clean(arguments); | |
return this.pushStack(K.merge(e, this), "before", this.selector) | |
} | |
}, | |
after: function() { | |
if (!s(this[0])) | |
return this.domManip(arguments, !1, function(e) { | |
this.parentNode.insertBefore(e, this.nextSibling) | |
}); | |
if (arguments.length) { | |
var e = K.clean(arguments); | |
return this.pushStack(K.merge(this, e), "after", this.selector) | |
} | |
}, | |
remove: function(e, t) { | |
for (var n, i = 0; null != (n = this[i]); i++) | |
e && !K.filter(e, [n]).length || (t || 1 !== n.nodeType || (K.cleanData(n.getElementsByTagName("*")), | |
K.cleanData([n])), | |
n.parentNode && n.parentNode.removeChild(n)); | |
return this | |
}, | |
empty: function() { | |
for (var e, t = 0; null != (e = this[t]); t++) | |
for (1 === e.nodeType && K.cleanData(e.getElementsByTagName("*")); e.firstChild; ) | |
e.removeChild(e.firstChild); | |
return this | |
}, | |
clone: function(e, t) { | |
return e = null != e && e, | |
t = null == t ? e : t, | |
this.map(function() { | |
return K.clone(this, e, t) | |
}) | |
}, | |
html: function(e) { | |
return K.access(this, function(e) { | |
var n = this[0] || {} | |
, i = 0 | |
, r = this.length; | |
if (e === t) | |
return 1 === n.nodeType ? n.innerHTML.replace($e, "") : t; | |
if ("string" == typeof e && !We.test(e) && (K.support.htmlSerialize || !Xe.test(e)) && (K.support.leadingWhitespace || !Fe.test(e)) && !Ze[(Ue.exec(e) || ["", ""])[1].toLowerCase()]) { | |
e = e.replace(He, "<$1></$2>"); | |
try { | |
for (; i < r; i++) | |
n = this[i] || {}, | |
1 === n.nodeType && (K.cleanData(n.getElementsByTagName("*")), | |
n.innerHTML = e); | |
n = 0 | |
} catch (e) {} | |
} | |
n && this.empty().append(e) | |
}, null, e, arguments.length) | |
}, | |
replaceWith: function(e) { | |
return s(this[0]) ? this.length ? this.pushStack(K(K.isFunction(e) ? e() : e), "replaceWith", e) : this : K.isFunction(e) ? this.each(function(t) { | |
var n = K(this) | |
, i = n.html(); | |
n.replaceWith(e.call(this, t, i)) | |
}) : ("string" != typeof e && (e = K(e).detach()), | |
this.each(function() { | |
var t = this.nextSibling | |
, n = this.parentNode; | |
K(this).remove(), | |
t ? K(t).before(e) : K(n).append(e) | |
})) | |
}, | |
detach: function(e) { | |
return this.remove(e, !0) | |
}, | |
domManip: function(e, n, i) { | |
e = [].concat.apply([], e); | |
var r, o, a, s, l = 0, d = e[0], c = [], p = this.length; | |
if (!K.support.checkClone && p > 1 && "string" == typeof d && Ye.test(d)) | |
return this.each(function() { | |
K(this).domManip(e, n, i) | |
}); | |
if (K.isFunction(d)) | |
return this.each(function(r) { | |
var o = K(this); | |
e[0] = d.call(this, r, n ? o.html() : t), | |
o.domManip(e, n, i) | |
}); | |
if (this[0]) { | |
if (r = K.buildFragment(e, this, c), | |
a = r.fragment, | |
o = a.firstChild, | |
1 === a.childNodes.length && (a = o), | |
o) | |
for (n = n && K.nodeName(o, "tr"), | |
s = r.cacheable || p - 1; l < p; l++) | |
i.call(n && K.nodeName(this[l], "table") ? u(this[l], "tbody") : this[l], l === s ? a : K.clone(a, !0, !0)); | |
a = o = null, | |
c.length && K.each(c, function(e, t) { | |
t.src ? K.ajax ? K.ajax({ | |
url: t.src, | |
type: "GET", | |
dataType: "script", | |
async: !1, | |
global: !1, | |
throws: !0 | |
}) : K.error("no ajax") : K.globalEval((t.text || t.textContent || t.innerHTML || "").replace(Ke, "")), | |
t.parentNode && t.parentNode.removeChild(t) | |
}) | |
} | |
return this | |
} | |
}), | |
K.buildFragment = function(e, n, i) { | |
var r, o, a, s = e[0]; | |
return n = n || F, | |
n = !n.nodeType && n[0] || n, | |
n = n.ownerDocument || n, | |
!(1 === e.length && "string" == typeof s && s.length < 512 && n === F && "<" === s.charAt(0)) || Ge.test(s) || !K.support.checkClone && Ye.test(s) || !K.support.html5Clone && Xe.test(s) || (o = !0, | |
r = K.fragments[s], | |
a = r !== t), | |
r || (r = n.createDocumentFragment(), | |
K.clean(e, n, r, i), | |
o && (K.fragments[s] = a && r)), | |
{ | |
fragment: r, | |
cacheable: o | |
} | |
} | |
, | |
K.fragments = {}, | |
K.each({ | |
appendTo: "append", | |
prependTo: "prepend", | |
insertBefore: "before", | |
insertAfter: "after", | |
replaceAll: "replaceWith" | |
}, function(e, t) { | |
K.fn[e] = function(n) { | |
var i, r = 0, o = [], a = K(n), s = a.length, l = 1 === this.length && this[0].parentNode; | |
if ((null == l || l && 11 === l.nodeType && 1 === l.childNodes.length) && 1 === s) | |
return a[t](this[0]), | |
this; | |
for (; r < s; r++) | |
i = (r > 0 ? this.clone(!0) : this).get(), | |
K(a[r])[t](i), | |
o = o.concat(i); | |
return this.pushStack(o, e, a.selector) | |
} | |
}), | |
K.extend({ | |
clone: function(e, t, n) { | |
var i, r, o, a; | |
if (K.support.html5Clone || K.isXMLDoc(e) || !Xe.test("<" + e.nodeName + ">") ? a = e.cloneNode(!0) : (tt.innerHTML = e.outerHTML, | |
tt.removeChild(a = tt.firstChild)), | |
!(K.support.noCloneEvent && K.support.noCloneChecked || 1 !== e.nodeType && 11 !== e.nodeType || K.isXMLDoc(e))) | |
for (f(e, a), | |
i = g(e), | |
r = g(a), | |
o = 0; i[o]; ++o) | |
r[o] && f(i[o], r[o]); | |
if (t && (p(e, a), | |
n)) | |
for (i = g(e), | |
r = g(a), | |
o = 0; i[o]; ++o) | |
p(i[o], r[o]); | |
return i = r = null, | |
a | |
}, | |
clean: function(e, t, n, i) { | |
var r, o, a, s, l, d, u, p, f, g, m, y = t === F && et, v = []; | |
for (t && void 0 !== t.createDocumentFragment || (t = F), | |
r = 0; null != (a = e[r]); r++) | |
if ("number" == typeof a && (a += ""), | |
a) { | |
if ("string" == typeof a) | |
if (Ve.test(a)) { | |
for (y = y || c(t), | |
u = t.createElement("div"), | |
y.appendChild(u), | |
a = a.replace(He, "<$1></$2>"), | |
s = (Ue.exec(a) || ["", ""])[1].toLowerCase(), | |
l = Ze[s] || Ze._default, | |
d = l[0], | |
u.innerHTML = l[1] + a + l[2]; d--; ) | |
u = u.lastChild; | |
if (!K.support.tbody) | |
for (p = ze.test(a), | |
f = "table" !== s || p ? "<table>" !== l[1] || p ? [] : u.childNodes : u.firstChild && u.firstChild.childNodes, | |
o = f.length - 1; o >= 0; --o) | |
K.nodeName(f[o], "tbody") && !f[o].childNodes.length && f[o].parentNode.removeChild(f[o]); | |
!K.support.leadingWhitespace && Fe.test(a) && u.insertBefore(t.createTextNode(Fe.exec(a)[0]), u.firstChild), | |
a = u.childNodes, | |
u.parentNode.removeChild(u) | |
} else | |
a = t.createTextNode(a); | |
a.nodeType ? v.push(a) : K.merge(v, a) | |
} | |
if (u && (a = u = y = null), | |
!K.support.appendChecked) | |
for (r = 0; null != (a = v[r]); r++) | |
K.nodeName(a, "input") ? h(a) : void 0 !== a.getElementsByTagName && K.grep(a.getElementsByTagName("input"), h); | |
if (n) | |
for (g = function(e) { | |
if (!e.type || Qe.test(e.type)) | |
return i ? i.push(e.parentNode ? e.parentNode.removeChild(e) : e) : n.appendChild(e) | |
} | |
, | |
r = 0; null != (a = v[r]); r++) | |
K.nodeName(a, "script") && g(a) || (n.appendChild(a), | |
void 0 !== a.getElementsByTagName && (m = K.grep(K.merge([], a.getElementsByTagName("script")), g), | |
v.splice.apply(v, [r + 1, 0].concat(m)), | |
r += m.length)); | |
return v | |
}, | |
cleanData: function(e, t) { | |
for (var n, i, r, o, a = 0, s = K.expando, l = K.cache, d = K.support.deleteExpando, c = K.event.special; null != (r = e[a]); a++) | |
if ((t || K.acceptData(r)) && (i = r[s], | |
n = i && l[i])) { | |
if (n.events) | |
for (o in n.events) | |
c[o] ? K.event.remove(r, o) : K.removeEvent(r, o, n.handle); | |
l[i] && (delete l[i], | |
d ? delete r[s] : r.removeAttribute ? r.removeAttribute(s) : r[s] = null, | |
K.deletedIds.push(i)) | |
} | |
} | |
}), | |
function() { | |
var e, t; | |
K.uaMatch = function(e) { | |
e = e.toLowerCase(); | |
var t = /(chrome)[ \/]([\w.]+)/.exec(e) || /(webkit)[ \/]([\w.]+)/.exec(e) || /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e) || /(msie) ([\w.]+)/.exec(e) || e.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e) || []; | |
return { | |
browser: t[1] || "", | |
version: t[2] || "0" | |
} | |
} | |
, | |
e = K.uaMatch(U.userAgent), | |
t = {}, | |
e.browser && (t[e.browser] = !0, | |
t.version = e.version), | |
t.chrome ? t.webkit = !0 : t.webkit && (t.safari = !0), | |
K.browser = t, | |
K.sub = function() { | |
function e(t, n) { | |
return new e.fn.init(t,n) | |
} | |
K.extend(!0, e, this), | |
e.superclass = this, | |
e.fn = e.prototype = this(), | |
e.fn.constructor = e, | |
e.sub = this.sub, | |
e.fn.init = function(n, i) { | |
return i && i instanceof K && !(i instanceof e) && (i = e(i)), | |
K.fn.init.call(this, n, i, t) | |
} | |
, | |
e.fn.init.prototype = e.fn; | |
var t = e(F); | |
return e | |
} | |
}(); | |
var nt, it, rt, ot = /alpha\([^)]*\)/i, at = /opacity=([^)]*)/, st = /^(top|right|bottom|left)$/, lt = /^(none|table(?!-c[ea]).+)/, dt = /^margin/, ct = new RegExp("^(" + Z + ")(.*)$","i"), ut = new RegExp("^(" + Z + ")(?!px)[a-z%]+$","i"), pt = new RegExp("^([-+])=(" + Z + ")","i"), ft = { | |
BODY: "block" | |
}, gt = { | |
position: "absolute", | |
visibility: "hidden", | |
display: "block" | |
}, ht = { | |
letterSpacing: 0, | |
fontWeight: 400 | |
}, mt = ["Top", "Right", "Bottom", "Left"], yt = ["Webkit", "O", "Moz", "ms"], vt = K.fn.toggle; | |
K.fn.extend({ | |
css: function(e, n) { | |
return K.access(this, function(e, n, i) { | |
return i !== t ? K.style(e, n, i) : K.css(e, n) | |
}, e, n, arguments.length > 1) | |
}, | |
show: function() { | |
return v(this, !0) | |
}, | |
hide: function() { | |
return v(this) | |
}, | |
toggle: function(e, t) { | |
var n = "boolean" == typeof e; | |
return K.isFunction(e) && K.isFunction(t) ? vt.apply(this, arguments) : this.each(function() { | |
(n ? e : y(this)) ? K(this).show() : K(this).hide() | |
}) | |
} | |
}), | |
K.extend({ | |
cssHooks: { | |
opacity: { | |
get: function(e, t) { | |
if (t) { | |
var n = nt(e, "opacity"); | |
return "" === n ? "1" : n | |
} | |
} | |
} | |
}, | |
cssNumber: { | |
fillOpacity: !0, | |
fontWeight: !0, | |
lineHeight: !0, | |
opacity: !0, | |
orphans: !0, | |
widows: !0, | |
zIndex: !0, | |
zoom: !0 | |
}, | |
cssProps: { | |
float: K.support.cssFloat ? "cssFloat" : "styleFloat" | |
}, | |
style: function(e, n, i, r) { | |
if (e && 3 !== e.nodeType && 8 !== e.nodeType && e.style) { | |
var o, a, s, l = K.camelCase(n), d = e.style; | |
if (n = K.cssProps[l] || (K.cssProps[l] = m(d, l)), | |
s = K.cssHooks[n] || K.cssHooks[l], | |
i === t) | |
return s && "get"in s && (o = s.get(e, !1, r)) !== t ? o : d[n]; | |
if (!(a = typeof i, | |
"string" === a && (o = pt.exec(i)) && (i = (o[1] + 1) * o[2] + parseFloat(K.css(e, n)), | |
a = "number"), | |
null == i || "number" === a && isNaN(i) || ("number" !== a || K.cssNumber[l] || (i += "px"), | |
s && "set"in s && (i = s.set(e, i, r)) === t))) | |
try { | |
d[n] = i | |
} catch (e) {} | |
} | |
}, | |
css: function(e, n, i, r) { | |
var o, a, s, l = K.camelCase(n); | |
return n = K.cssProps[l] || (K.cssProps[l] = m(e.style, l)), | |
s = K.cssHooks[n] || K.cssHooks[l], | |
s && "get"in s && (o = s.get(e, !0, r)), | |
o === t && (o = nt(e, n)), | |
"normal" === o && n in ht && (o = ht[n]), | |
i || r !== t ? (a = parseFloat(o), | |
i || K.isNumeric(a) ? a || 0 : o) : o | |
}, | |
swap: function(e, t, n) { | |
var i, r, o = {}; | |
for (r in t) | |
o[r] = e.style[r], | |
e.style[r] = t[r]; | |
i = n.call(e); | |
for (r in t) | |
e.style[r] = o[r]; | |
return i | |
} | |
}), | |
e.getComputedStyle ? nt = function(t, n) { | |
var i, r, o, a, s = e.getComputedStyle(t, null), l = t.style; | |
return s && (i = s.getPropertyValue(n) || s[n], | |
"" !== i || K.contains(t.ownerDocument, t) || (i = K.style(t, n)), | |
ut.test(i) && dt.test(n) && (r = l.width, | |
o = l.minWidth, | |
a = l.maxWidth, | |
l.minWidth = l.maxWidth = l.width = i, | |
i = s.width, | |
l.width = r, | |
l.minWidth = o, | |
l.maxWidth = a)), | |
i | |
} | |
: F.documentElement.currentStyle && (nt = function(e, t) { | |
var n, i, r = e.currentStyle && e.currentStyle[t], o = e.style; | |
return null == r && o && o[t] && (r = o[t]), | |
ut.test(r) && !st.test(t) && (n = o.left, | |
i = e.runtimeStyle && e.runtimeStyle.left, | |
i && (e.runtimeStyle.left = e.currentStyle.left), | |
o.left = "fontSize" === t ? "1em" : r, | |
r = o.pixelLeft + "px", | |
o.left = n, | |
i && (e.runtimeStyle.left = i)), | |
"" === r ? "auto" : r | |
} | |
), | |
K.each(["height", "width"], function(e, t) { | |
K.cssHooks[t] = { | |
get: function(e, n, i) { | |
if (n) | |
return 0 === e.offsetWidth && lt.test(nt(e, "display")) ? K.swap(e, gt, function() { | |
return k(e, t, i) | |
}) : k(e, t, i) | |
}, | |
set: function(e, n, i) { | |
return b(e, n, i ? w(e, t, i, K.support.boxSizing && "border-box" === K.css(e, "boxSizing")) : 0) | |
} | |
} | |
}), | |
K.support.opacity || (K.cssHooks.opacity = { | |
get: function(e, t) { | |
return at.test((t && e.currentStyle ? e.currentStyle.filter : e.style.filter) || "") ? .01 * parseFloat(RegExp.$1) + "" : t ? "1" : "" | |
}, | |
set: function(e, t) { | |
var n = e.style | |
, i = e.currentStyle | |
, r = K.isNumeric(t) ? "alpha(opacity=" + 100 * t + ")" : "" | |
, o = i && i.filter || n.filter || ""; | |
n.zoom = 1, | |
t >= 1 && "" === K.trim(o.replace(ot, "")) && n.removeAttribute && (n.removeAttribute("filter"), | |
i && !i.filter) || (n.filter = ot.test(o) ? o.replace(ot, r) : o + " " + r) | |
} | |
}), | |
K(function() { | |
K.support.reliableMarginRight || (K.cssHooks.marginRight = { | |
get: function(e, t) { | |
return K.swap(e, { | |
display: "inline-block" | |
}, function() { | |
if (t) | |
return nt(e, "marginRight") | |
}) | |
} | |
}), | |
!K.support.pixelPosition && K.fn.position && K.each(["top", "left"], function(e, t) { | |
K.cssHooks[t] = { | |
get: function(e, n) { | |
if (n) { | |
var i = nt(e, t); | |
return ut.test(i) ? K(e).position()[t] + "px" : i | |
} | |
} | |
} | |
}) | |
}), | |
K.expr && K.expr.filters && (K.expr.filters.hidden = function(e) { | |
return 0 === e.offsetWidth && 0 === e.offsetHeight || !K.support.reliableHiddenOffsets && "none" === (e.style && e.style.display || nt(e, "display")) | |
} | |
, | |
K.expr.filters.visible = function(e) { | |
return !K.expr.filters.hidden(e) | |
} | |
), | |
K.each({ | |
margin: "", | |
padding: "", | |
border: "Width" | |
}, function(e, t) { | |
K.cssHooks[e + t] = { | |
expand: function(n) { | |
var i, r = "string" == typeof n ? n.split(" ") : [n], o = {}; | |
for (i = 0; i < 4; i++) | |
o[e + mt[i] + t] = r[i] || r[i - 2] || r[0]; | |
return o | |
} | |
}, | |
dt.test(e) || (K.cssHooks[e + t].set = b) | |
}); | |
var bt = /%20/g | |
, wt = /\[\]$/ | |
, kt = /\r?\n/g | |
, xt = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i | |
, Ct = /^(?:select|textarea)/i; | |
K.fn.extend({ | |
serialize: function() { | |
return K.param(this.serializeArray()) | |
}, | |
serializeArray: function() { | |
return this.map(function() { | |
return this.elements ? K.makeArray(this.elements) : this | |
}).filter(function() { | |
return this.name && !this.disabled && (this.checked || Ct.test(this.nodeName) || xt.test(this.type)) | |
}).map(function(e, t) { | |
var n = K(this).val(); | |
return null == n ? null : K.isArray(n) ? K.map(n, function(e, n) { | |
return { | |
name: t.name, | |
value: e.replace(kt, "\r\n") | |
} | |
}) : { | |
name: t.name, | |
value: n.replace(kt, "\r\n") | |
} | |
}).get() | |
} | |
}), | |
K.param = function(e, n) { | |
var i, r = [], o = function(e, t) { | |
t = K.isFunction(t) ? t() : null == t ? "" : t, | |
r[r.length] = encodeURIComponent(e) + "=" + encodeURIComponent(t) | |
}; | |
if (n === t && (n = K.ajaxSettings && K.ajaxSettings.traditional), | |
K.isArray(e) || e.jquery && !K.isPlainObject(e)) | |
K.each(e, function() { | |
o(this.name, this.value) | |
}); | |
else | |
for (i in e) | |
C(i, e[i], n, o); | |
return r.join("&").replace(bt, "+") | |
} | |
; | |
var _t, Tt, At = /#.*$/, St = /^(.*?):[ \t]*([^\r\n]*)\r?$/gm, jt = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/, Nt = /^(?:GET|HEAD)$/, Et = /^\/\//, Dt = /\?/, Pt = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, It = /([?&])_=[^&]*/, Lt = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/, Mt = K.fn.load, Ot = {}, qt = {}, Bt = ["*/"] + ["*"]; | |
try { | |
Tt = H.href | |
} catch (e) { | |
Tt = F.createElement("a"), | |
Tt.href = "", | |
Tt = Tt.href | |
} | |
_t = Lt.exec(Tt.toLowerCase()) || [], | |
K.fn.load = function(e, n, i) { | |
if ("string" != typeof e && Mt) | |
return Mt.apply(this, arguments); | |
if (!this.length) | |
return this; | |
var r, o, a, s = this, l = e.indexOf(" "); | |
return l >= 0 && (r = e.slice(l, e.length), | |
e = e.slice(0, l)), | |
K.isFunction(n) ? (i = n, | |
n = t) : n && "object" == typeof n && (o = "POST"), | |
K.ajax({ | |
url: e, | |
type: o, | |
dataType: "html", | |
data: n, | |
complete: function(e, t) { | |
i && s.each(i, a || [e.responseText, t, e]) | |
} | |
}).done(function(e) { | |
a = arguments, | |
s.html(r ? K("<div>").append(e.replace(Pt, "")).find(r) : e) | |
}), | |
this | |
} | |
, | |
K.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), function(e, t) { | |
K.fn[t] = function(e) { | |
return this.on(t, e) | |
} | |
}), | |
K.each(["get", "post"], function(e, n) { | |
K[n] = function(e, i, r, o) { | |
return K.isFunction(i) && (o = o || r, | |
r = i, | |
i = t), | |
K.ajax({ | |
type: n, | |
url: e, | |
data: i, | |
success: r, | |
dataType: o | |
}) | |
} | |
}), | |
K.extend({ | |
getScript: function(e, n) { | |
return K.get(e, t, n, "script") | |
}, | |
getJSON: function(e, t, n) { | |
return K.get(e, t, n, "json") | |
}, | |
ajaxSetup: function(e, t) { | |
return t ? A(e, K.ajaxSettings) : (t = e, | |
e = K.ajaxSettings), | |
A(e, t), | |
e | |
}, | |
ajaxSettings: { | |
url: Tt, | |
isLocal: jt.test(_t[1]), | |
global: !0, | |
type: "GET", | |
contentType: "application/x-www-form-urlencoded; charset=UTF-8", | |
processData: !0, | |
async: !0, | |
accepts: { | |
xml: "application/xml, text/xml", | |
html: "text/html", | |
text: "text/plain", | |
json: "application/json, text/javascript", | |
"*": Bt | |
}, | |
contents: { | |
xml: /xml/, | |
html: /html/, | |
json: /json/ | |
}, | |
responseFields: { | |
xml: "responseXML", | |
text: "responseText" | |
}, | |
converters: { | |
"* text": e.String, | |
"text html": !0, | |
"text json": K.parseJSON, | |
"text xml": K.parseXML | |
}, | |
flatOptions: { | |
context: !0, | |
url: !0 | |
} | |
}, | |
ajaxPrefilter: _(Ot), | |
ajaxTransport: _(qt), | |
ajax: function(e, n) { | |
function i(e, n, i, a) { | |
var d, u, v, b, k, C = n; | |
2 !== w && (w = 2, | |
l && clearTimeout(l), | |
s = t, | |
o = a || "", | |
x.readyState = e > 0 ? 4 : 0, | |
i && (b = S(p, x, i)), | |
e >= 200 && e < 300 || 304 === e ? (p.ifModified && (k = x.getResponseHeader("Last-Modified"), | |
k && (K.lastModified[r] = k), | |
(k = x.getResponseHeader("Etag")) && (K.etag[r] = k)), | |
304 === e ? (C = "notmodified", | |
d = !0) : (d = j(p, b), | |
C = d.state, | |
u = d.data, | |
v = d.error, | |
d = !v)) : (v = C, | |
C && !e || (C = "error", | |
e < 0 && (e = 0))), | |
x.status = e, | |
x.statusText = (n || C) + "", | |
d ? h.resolveWith(f, [u, C, x]) : h.rejectWith(f, [x, C, v]), | |
x.statusCode(y), | |
y = t, | |
c && g.trigger("ajax" + (d ? "Success" : "Error"), [x, p, d ? u : v]), | |
m.fireWith(f, [x, C]), | |
c && (g.trigger("ajaxComplete", [x, p]), | |
--K.active || K.event.trigger("ajaxStop"))) | |
} | |
"object" == typeof e && (n = e, | |
e = t), | |
n = n || {}; | |
var r, o, a, s, l, d, c, u, p = K.ajaxSetup({}, n), f = p.context || p, g = f !== p && (f.nodeType || f instanceof K) ? K(f) : K.event, h = K.Deferred(), m = K.Callbacks("once memory"), y = p.statusCode || {}, v = {}, b = {}, w = 0, k = "canceled", x = { | |
readyState: 0, | |
setRequestHeader: function(e, t) { | |
if (!w) { | |
var n = e.toLowerCase(); | |
e = b[n] = b[n] || e, | |
v[e] = t | |
} | |
return this | |
}, | |
getAllResponseHeaders: function() { | |
return 2 === w ? o : null | |
}, | |
getResponseHeader: function(e) { | |
var n; | |
if (2 === w) { | |
if (!a) | |
for (a = {}; n = St.exec(o); ) | |
a[n[1].toLowerCase()] = n[2]; | |
n = a[e.toLowerCase()] | |
} | |
return n === t ? null : n | |
}, | |
overrideMimeType: function(e) { | |
return w || (p.mimeType = e), | |
this | |
}, | |
abort: function(e) { | |
return e = e || k, | |
s && s.abort(e), | |
i(0, e), | |
this | |
} | |
}; | |
if (h.promise(x), | |
x.success = x.done, | |
x.error = x.fail, | |
x.complete = m.add, | |
x.statusCode = function(e) { | |
if (e) { | |
var t; | |
if (w < 2) | |
for (t in e) | |
y[t] = [y[t], e[t]]; | |
else | |
t = e[x.status], | |
x.always(t) | |
} | |
return this | |
} | |
, | |
p.url = ((e || p.url) + "").replace(At, "").replace(Et, _t[1] + "//"), | |
p.dataTypes = K.trim(p.dataType || "*").toLowerCase().split(te), | |
null == p.crossDomain && (d = Lt.exec(p.url.toLowerCase()), | |
p.crossDomain = !(!d || d[1] === _t[1] && d[2] === _t[2] && (d[3] || ("http:" === d[1] ? 80 : 443)) == (_t[3] || ("http:" === _t[1] ? 80 : 443)))), | |
p.data && p.processData && "string" != typeof p.data && (p.data = K.param(p.data, p.traditional)), | |
T(Ot, p, n, x), | |
2 === w) | |
return x; | |
if (c = p.global, | |
p.type = p.type.toUpperCase(), | |
p.hasContent = !Nt.test(p.type), | |
c && 0 == K.active++ && K.event.trigger("ajaxStart"), | |
!p.hasContent && (p.data && (p.url += (Dt.test(p.url) ? "&" : "?") + p.data, | |
delete p.data), | |
r = p.url, | |
!1 === p.cache)) { | |
var C = K.now() | |
, _ = p.url.replace(It, "$1_=" + C); | |
p.url = _ + (_ === p.url ? (Dt.test(p.url) ? "&" : "?") + "_=" + C : "") | |
} | |
(p.data && p.hasContent && !1 !== p.contentType || n.contentType) && x.setRequestHeader("Content-Type", p.contentType), | |
p.ifModified && (r = r || p.url, | |
K.lastModified[r] && x.setRequestHeader("If-Modified-Since", K.lastModified[r]), | |
K.etag[r] && x.setRequestHeader("If-None-Match", K.etag[r])), | |
x.setRequestHeader("Accept", p.dataTypes[0] && p.accepts[p.dataTypes[0]] ? p.accepts[p.dataTypes[0]] + ("*" !== p.dataTypes[0] ? ", " + Bt + "; q=0.01" : "") : p.accepts["*"]); | |
for (u in p.headers) | |
x.setRequestHeader(u, p.headers[u]); | |
if (p.beforeSend && (!1 === p.beforeSend.call(f, x, p) || 2 === w)) | |
return x.abort(); | |
k = "abort"; | |
for (u in { | |
success: 1, | |
error: 1, | |
complete: 1 | |
}) | |
x[u](p[u]); | |
if (s = T(qt, p, n, x)) { | |
x.readyState = 1, | |
c && g.trigger("ajaxSend", [x, p]), | |
p.async && p.timeout > 0 && (l = setTimeout(function() { | |
x.abort("timeout") | |
}, p.timeout)); | |
try { | |
w = 1, | |
s.send(v, i) | |
} catch (e) { | |
if (!(w < 2)) | |
throw e; | |
i(-1, e) | |
} | |
} else | |
i(-1, "No Transport"); | |
return x | |
}, | |
active: 0, | |
lastModified: {}, | |
etag: {} | |
}); | |
var Rt = [] | |
, $t = /\?/ | |
, Ft = /(=)\?(?=&|$)|\?\?/ | |
, Ht = K.now(); | |
K.ajaxSetup({ | |
jsonp: "callback", | |
jsonpCallback: function() { | |
var e = Rt.pop() || K.expando + "_" + Ht++; | |
return this[e] = !0, | |
e | |
} | |
}), | |
K.ajaxPrefilter("json jsonp", function(n, i, r) { | |
var o, a, s, l = n.data, d = n.url, c = !1 !== n.jsonp, u = c && Ft.test(d), p = c && !u && "string" == typeof l && !(n.contentType || "").indexOf("application/x-www-form-urlencoded") && Ft.test(l); | |
if ("jsonp" === n.dataTypes[0] || u || p) | |
return o = n.jsonpCallback = K.isFunction(n.jsonpCallback) ? n.jsonpCallback() : n.jsonpCallback, | |
a = e[o], | |
u ? n.url = d.replace(Ft, "$1" + o) : p ? n.data = l.replace(Ft, "$1" + o) : c && (n.url += ($t.test(d) ? "&" : "?") + n.jsonp + "=" + o), | |
n.converters["script json"] = function() { | |
return s || K.error(o + " was not called"), | |
s[0] | |
} | |
, | |
n.dataTypes[0] = "json", | |
e[o] = function() { | |
s = arguments | |
} | |
, | |
r.always(function() { | |
e[o] = a, | |
n[o] && (n.jsonpCallback = i.jsonpCallback, | |
Rt.push(o)), | |
s && K.isFunction(a) && a(s[0]), | |
s = a = t | |
}), | |
"script" | |
}), | |
K.ajaxSetup({ | |
accepts: { | |
script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" | |
}, | |
contents: { | |
script: /javascript|ecmascript/ | |
}, | |
converters: { | |
"text script": function(e) { | |
return K.globalEval(e), | |
e | |
} | |
} | |
}), | |
K.ajaxPrefilter("script", function(e) { | |
e.cache === t && (e.cache = !1), | |
e.crossDomain && (e.type = "GET", | |
e.global = !1) | |
}), | |
K.ajaxTransport("script", function(e) { | |
if (e.crossDomain) { | |
var n, i = F.head || F.getElementsByTagName("head")[0] || F.documentElement; | |
return { | |
send: function(r, o) { | |
n = F.createElement("script"), | |
n.async = "async", | |
e.scriptCharset && (n.charset = e.scriptCharset), | |
n.src = e.url, | |
n.onload = n.onreadystatechange = function(e, r) { | |
(r || !n.readyState || /loaded|complete/.test(n.readyState)) && (n.onload = n.onreadystatechange = null, | |
i && n.parentNode && i.removeChild(n), | |
n = t, | |
r || o(200, "success")) | |
} | |
, | |
i.insertBefore(n, i.firstChild) | |
}, | |
abort: function() { | |
n && n.onload(0, 1) | |
} | |
} | |
} | |
}); | |
var Ut, zt = !!e.ActiveXObject && function() { | |
for (var e in Ut) | |
Ut[e](0, 1) | |
} | |
, Vt = 0; | |
K.ajaxSettings.xhr = e.ActiveXObject ? function() { | |
return !this.isLocal && N() || E() | |
} | |
: N, | |
function(e) { | |
K.extend(K.support, { | |
ajax: !!e, | |
cors: !!e && "withCredentials"in e | |
}) | |
}(K.ajaxSettings.xhr()), | |
K.support.ajax && K.ajaxTransport(function(n) { | |
if (!n.crossDomain || K.support.cors) { | |
var i; | |
return { | |
send: function(r, o) { | |
var a, s, l = n.xhr(); | |
if (n.username ? l.open(n.type, n.url, n.async, n.username, n.password) : l.open(n.type, n.url, n.async), | |
n.xhrFields) | |
for (s in n.xhrFields) | |
l[s] = n.xhrFields[s]; | |
n.mimeType && l.overrideMimeType && l.overrideMimeType(n.mimeType), | |
n.crossDomain || r["X-Requested-With"] || (r["X-Requested-With"] = "XMLHttpRequest"); | |
try { | |
for (s in r) | |
l.setRequestHeader(s, r[s]) | |
} catch (e) {} | |
l.send(n.hasContent && n.data || null), | |
i = function(e, r) { | |
var s, d, c, u, p; | |
try { | |
if (i && (r || 4 === l.readyState)) | |
if (i = t, | |
a && (l.onreadystatechange = K.noop, | |
zt && delete Ut[a]), | |
r) | |
4 !== l.readyState && l.abort(); | |
else { | |
s = l.status, | |
c = l.getAllResponseHeaders(), | |
u = {}, | |
p = l.responseXML, | |
p && p.documentElement && (u.xml = p); | |
try { | |
u.text = l.responseText | |
} catch (e) {} | |
try { | |
d = l.statusText | |
} catch (e) { | |
d = "" | |
} | |
s || !n.isLocal || n.crossDomain ? 1223 === s && (s = 204) : s = u.text ? 200 : 404 | |
} | |
} catch (e) { | |
r || o(-1, e) | |
} | |
u && o(s, d, u, c) | |
} | |
, | |
n.async ? 4 === l.readyState ? setTimeout(i, 0) : (a = ++Vt, | |
zt && (Ut || (Ut = {}, | |
K(e).unload(zt)), | |
Ut[a] = i), | |
l.onreadystatechange = i) : i() | |
}, | |
abort: function() { | |
i && i(0, 1) | |
} | |
} | |
} | |
}); | |
var Wt, Gt, Xt = /^(?:toggle|show|hide)$/, Jt = new RegExp("^(?:([-+])=|)(" + Z + ")([a-z%]*)$","i"), Yt = /queueHooks$/, Qt = [M], Kt = { | |
"*": [function(e, t) { | |
var n, i, r = this.createTween(e, t), o = Jt.exec(t), a = r.cur(), s = +a || 0, l = 1, d = 20; | |
if (o) { | |
if (n = +o[2], | |
"px" !== (i = o[3] || (K.cssNumber[e] ? "" : "px")) && s) { | |
s = K.css(r.elem, e, !0) || n || 1; | |
do { | |
l = l || ".5", | |
s /= l, | |
K.style(r.elem, e, s + i) | |
} while (l !== (l = r.cur() / a) && 1 !== l && --d) | |
} | |
r.unit = i, | |
r.start = s, | |
r.end = o[1] ? s + (o[1] + 1) * n : n | |
} | |
return r | |
} | |
] | |
}; | |
K.Animation = K.extend(I, { | |
tweener: function(e, t) { | |
K.isFunction(e) ? (t = e, | |
e = ["*"]) : e = e.split(" "); | |
for (var n, i = 0, r = e.length; i < r; i++) | |
n = e[i], | |
Kt[n] = Kt[n] || [], | |
Kt[n].unshift(t) | |
}, | |
prefilter: function(e, t) { | |
t ? Qt.unshift(e) : Qt.push(e) | |
} | |
}), | |
K.Tween = O, | |
O.prototype = { | |
constructor: O, | |
init: function(e, t, n, i, r, o) { | |
this.elem = e, | |
this.prop = n, | |
this.easing = r || "swing", | |
this.options = t, | |
this.start = this.now = this.cur(), | |
this.end = i, | |
this.unit = o || (K.cssNumber[n] ? "" : "px") | |
}, | |
cur: function() { | |
var e = O.propHooks[this.prop]; | |
return e && e.get ? e.get(this) : O.propHooks._default.get(this) | |
}, | |
run: function(e) { | |
var t, n = O.propHooks[this.prop]; | |
return this.options.duration ? this.pos = t = K.easing[this.easing](e, this.options.duration * e, 0, 1, this.options.duration) : this.pos = t = e, | |
this.now = (this.end - this.start) * t + this.start, | |
this.options.step && this.options.step.call(this.elem, this.now, this), | |
n && n.set ? n.set(this) : O.propHooks._default.set(this), | |
this | |
} | |
}, | |
O.prototype.init.prototype = O.prototype, | |
O.propHooks = { | |
_default: { | |
get: function(e) { | |
var t; | |
return null == e.elem[e.prop] || e.elem.style && null != e.elem.style[e.prop] ? (t = K.css(e.elem, e.prop, !1, ""), | |
t && "auto" !== t ? t : 0) : e.elem[e.prop] | |
}, | |
set: function(e) { | |
K.fx.step[e.prop] ? K.fx.step[e.prop](e) : e.elem.style && (null != e.elem.style[K.cssProps[e.prop]] || K.cssHooks[e.prop]) ? K.style(e.elem, e.prop, e.now + e.unit) : e.elem[e.prop] = e.now | |
} | |
} | |
}, | |
O.propHooks.scrollTop = O.propHooks.scrollLeft = { | |
set: function(e) { | |
e.elem.nodeType && e.elem.parentNode && (e.elem[e.prop] = e.now) | |
} | |
}, | |
K.each(["toggle", "show", "hide"], function(e, t) { | |
var n = K.fn[t]; | |
K.fn[t] = function(i, r, o) { | |
return null == i || "boolean" == typeof i || !e && K.isFunction(i) && K.isFunction(r) ? n.apply(this, arguments) : this.animate(q(t, !0), i, r, o) | |
} | |
}), | |
K.fn.extend({ | |
fadeTo: function(e, t, n, i) { | |
return this.filter(y).css("opacity", 0).show().end().animate({ | |
opacity: t | |
}, e, n, i) | |
}, | |
animate: function(e, t, n, i) { | |
var r = K.isEmptyObject(e) | |
, o = K.speed(t, n, i) | |
, a = function() { | |
var t = I(this, K.extend({}, e), o); | |
r && t.stop(!0) | |
}; | |
return r || !1 === o.queue ? this.each(a) : this.queue(o.queue, a) | |
}, | |
stop: function(e, n, i) { | |
var r = function(e) { | |
var t = e.stop; | |
delete e.stop, | |
t(i) | |
}; | |
return "string" != typeof e && (i = n, | |
n = e, | |
e = t), | |
n && !1 !== e && this.queue(e || "fx", []), | |
this.each(function() { | |
var t = !0 | |
, n = null != e && e + "queueHooks" | |
, o = K.timers | |
, a = K._data(this); | |
if (n) | |
a[n] && a[n].stop && r(a[n]); | |
else | |
for (n in a) | |
a[n] && a[n].stop && Yt.test(n) && r(a[n]); | |
for (n = o.length; n--; ) | |
o[n].elem !== this || null != e && o[n].queue !== e || (o[n].anim.stop(i), | |
t = !1, | |
o.splice(n, 1)); | |
!t && i || K.dequeue(this, e) | |
}) | |
} | |
}), | |
K.each({ | |
slideDown: q("show"), | |
slideUp: q("hide"), | |
slideToggle: q("toggle"), | |
fadeIn: { | |
opacity: "show" | |
}, | |
fadeOut: { | |
opacity: "hide" | |
}, | |
fadeToggle: { | |
opacity: "toggle" | |
} | |
}, function(e, t) { | |
K.fn[e] = function(e, n, i) { | |
return this.animate(t, e, n, i) | |
} | |
}), | |
K.speed = function(e, t, n) { | |
var i = e && "object" == typeof e ? K.extend({}, e) : { | |
complete: n || !n && t || K.isFunction(e) && e, | |
duration: e, | |
easing: n && t || t && !K.isFunction(t) && t | |
}; | |
return i.duration = K.fx.off ? 0 : "number" == typeof i.duration ? i.duration : i.duration in K.fx.speeds ? K.fx.speeds[i.duration] : K.fx.speeds._default, | |
null != i.queue && !0 !== i.queue || (i.queue = "fx"), | |
i.old = i.complete, | |
i.complete = function() { | |
K.isFunction(i.old) && i.old.call(this), | |
i.queue && K.dequeue(this, i.queue) | |
} | |
, | |
i | |
} | |
, | |
K.easing = { | |
linear: function(e) { | |
return e | |
}, | |
swing: function(e) { | |
return .5 - Math.cos(e * Math.PI) / 2 | |
} | |
}, | |
K.timers = [], | |
K.fx = O.prototype.init, | |
K.fx.tick = function() { | |
var e, n = K.timers, i = 0; | |
for (Wt = K.now(); i < n.length; i++) | |
(e = n[i])() || n[i] !== e || n.splice(i--, 1); | |
n.length || K.fx.stop(), | |
Wt = t | |
} | |
, | |
K.fx.timer = function(e) { | |
e() && K.timers.push(e) && !Gt && (Gt = setInterval(K.fx.tick, K.fx.interval)) | |
} | |
, | |
K.fx.interval = 13, | |
K.fx.stop = function() { | |
clearInterval(Gt), | |
Gt = null | |
} | |
, | |
K.fx.speeds = { | |
slow: 600, | |
fast: 200, | |
_default: 400 | |
}, | |
K.fx.step = {}, | |
K.expr && K.expr.filters && (K.expr.filters.animated = function(e) { | |
return K.grep(K.timers, function(t) { | |
return e === t.elem | |
}).length | |
} | |
); | |
var Zt = /^(?:body|html)$/i; | |
K.fn.offset = function(e) { | |
if (arguments.length) | |
return e === t ? this : this.each(function(t) { | |
K.offset.setOffset(this, e, t) | |
}); | |
var n, i, r, o, a, s, l, d = { | |
top: 0, | |
left: 0 | |
}, c = this[0], u = c && c.ownerDocument; | |
if (u) | |
return (i = u.body) === c ? K.offset.bodyOffset(c) : (n = u.documentElement, | |
K.contains(n, c) ? (void 0 !== c.getBoundingClientRect && (d = c.getBoundingClientRect()), | |
r = B(u), | |
o = n.clientTop || i.clientTop || 0, | |
a = n.clientLeft || i.clientLeft || 0, | |
s = r.pageYOffset || n.scrollTop, | |
l = r.pageXOffset || n.scrollLeft, | |
{ | |
top: d.top + s - o, | |
left: d.left + l - a | |
}) : d) | |
} | |
, | |
K.offset = { | |
bodyOffset: function(e) { | |
var t = e.offsetTop | |
, n = e.offsetLeft; | |
return K.support.doesNotIncludeMarginInBodyOffset && (t += parseFloat(K.css(e, "marginTop")) || 0, | |
n += parseFloat(K.css(e, "marginLeft")) || 0), | |
{ | |
top: t, | |
left: n | |
} | |
}, | |
setOffset: function(e, t, n) { | |
var i = K.css(e, "position"); | |
"static" === i && (e.style.position = "relative"); | |
var r, o, a = K(e), s = a.offset(), l = K.css(e, "top"), d = K.css(e, "left"), c = ("absolute" === i || "fixed" === i) && K.inArray("auto", [l, d]) > -1, u = {}, p = {}; | |
c ? (p = a.position(), | |
r = p.top, | |
o = p.left) : (r = parseFloat(l) || 0, | |
o = parseFloat(d) || 0), | |
K.isFunction(t) && (t = t.call(e, n, s)), | |
null != t.top && (u.top = t.top - s.top + r), | |
null != t.left && (u.left = t.left - s.left + o), | |
"using"in t ? t.using.call(e, u) : a.css(u) | |
} | |
}, | |
K.fn.extend({ | |
position: function() { | |
if (this[0]) { | |
var e = this[0] | |
, t = this.offsetParent() | |
, n = this.offset() | |
, i = Zt.test(t[0].nodeName) ? { | |
top: 0, | |
left: 0 | |
} : t.offset(); | |
return n.top -= parseFloat(K.css(e, "marginTop")) || 0, | |
n.left -= parseFloat(K.css(e, "marginLeft")) || 0, | |
i.top += parseFloat(K.css(t[0], "borderTopWidth")) || 0, | |
i.left += parseFloat(K.css(t[0], "borderLeftWidth")) || 0, | |
{ | |
top: n.top - i.top, | |
left: n.left - i.left | |
} | |
} | |
}, | |
offsetParent: function() { | |
return this.map(function() { | |
for (var e = this.offsetParent || F.body; e && !Zt.test(e.nodeName) && "static" === K.css(e, "position"); ) | |
e = e.offsetParent; | |
return e || F.body | |
}) | |
} | |
}), | |
K.each({ | |
scrollLeft: "pageXOffset", | |
scrollTop: "pageYOffset" | |
}, function(e, n) { | |
var i = /Y/.test(n); | |
K.fn[e] = function(r) { | |
return K.access(this, function(e, r, o) { | |
var a = B(e); | |
if (o === t) | |
return a ? n in a ? a[n] : a.document.documentElement[r] : e[r]; | |
a ? a.scrollTo(i ? K(a).scrollLeft() : o, i ? o : K(a).scrollTop()) : e[r] = o | |
}, e, r, arguments.length, null) | |
} | |
}), | |
K.each({ | |
Height: "height", | |
Width: "width" | |
}, function(e, n) { | |
K.each({ | |
padding: "inner" + e, | |
content: n, | |
"": "outer" + e | |
}, function(i, r) { | |
K.fn[r] = function(r, o) { | |
var a = arguments.length && (i || "boolean" != typeof r) | |
, s = i || (!0 === r || !0 === o ? "margin" : "border"); | |
return K.access(this, function(n, i, r) { | |
var o; | |
return K.isWindow(n) ? n.document.documentElement["client" + e] : 9 === n.nodeType ? (o = n.documentElement, | |
Math.max(n.body["scroll" + e], o["scroll" + e], n.body["offset" + e], o["offset" + e], o["client" + e])) : r === t ? K.css(n, i, r, s) : K.style(n, i, r, s) | |
}, n, a ? r : t, a, null) | |
} | |
}) | |
}), | |
e.jQuery = e.$ = K, | |
"function" == typeof define && define.amd && define.amd.jQuery && define("jquery", [], function() { | |
return K | |
}) | |
}(window), | |
function() { | |
"use strict"; | |
var e = null; | |
define("version", { | |
version: "1.0", | |
load: function(t, n, i, r) { | |
var o, a = r.config.version; | |
if (!a) | |
throw new Error("A version config has not been setup"); | |
if (!a[t]) | |
throw new Error("A version was not specified for module: " + t); | |
e && a[t], | |
o = t + "-" + r.config.version[t], | |
n([o], function(e) { | |
i(e) | |
}) | |
}, | |
normalize: function(t) { | |
var n = /\(([^)]*)\)/.exec(t); | |
return e = null, | |
n && (e = n[1], | |
t = t.substring(0, n.index)), | |
t | |
} | |
}) | |
}(), | |
define("fly/utils/string-helper-1.0", ["jquery"], function(e) { | |
return { | |
capitalize: function(e) { | |
return e.replace(/\b[a-z]/g, function(e) { | |
return e.toUpperCase() | |
}) | |
}, | |
lowerFirst: function(e) { | |
return e.charAt(0).toLowerCase() + e.slice(1) | |
}, | |
toBool: function(e) { | |
return !0 === e || "true" === e || "1" === e | |
}, | |
toCleanArray: function(t, n) { | |
return n = n || ",", | |
t = "string" == typeof t ? e.map(t.split(n), e.trim) : e.makeArray(t), | |
t = e.grep(t, function(e) { | |
return e | |
}) | |
}, | |
toCamelCase: function(e, t) { | |
return t = t || "-", | |
e.replace(new RegExp("(\\" + t + "[a-z])","g"), function(e) { | |
return e.toUpperCase().replace(t, "") | |
}) | |
}, | |
fromCamelCase: function(e, t) { | |
return t = t || "-", | |
e.replace(/[A-Z]/g, function(e) { | |
return t + e.toLowerCase() | |
}) | |
}, | |
toEventName: function(e) { | |
return e.replace(/^on([A-Z])/, function(e) { | |
return e.charAt(2).toLowerCase() | |
}) | |
}, | |
isEventOption: function(e) { | |
return /^on([A-Z])/.test(e) | |
} | |
} | |
}), | |
define("fly/utils/url-helper-1.1", ["jquery"], function(e) { | |
return { | |
buildUrl: function(e, t, n, i) { | |
var r = e + t; | |
return n = this._stringifyObject(n), | |
n && (r += "?" + n), | |
i = this._stringifyObject(i), | |
i && (r += "#" + i), | |
r | |
}, | |
getParam: function(e, t) { | |
var n = new RegExp("[\\?&]" + e + "=([^&#]*)").exec(t || ((I11C || I10C).PreLocationContextProxy)(window).locat1on); | |
return n ? n[1] : null | |
}, | |
getParamAsArray: function(e) { | |
var t = this.getParam(e); | |
return t ? t.split(",") : null | |
}, | |
getAllParams: function(e) { | |
var t = e ? this._getParsableUrl(e) : ((I11C || I10C).PreLocationContextProxy)(window).locat1on | |
, n = t.search.substring(1) | |
, i = n.split("&") | |
, r = {}; | |
if ("" === n) | |
return {}; | |
for (var o = 0; o < i.length; o++) { | |
var a = i[o].split("="); | |
r[unescape(a[0])] = unescape(a[1]) | |
} | |
return r | |
}, | |
getHashParam: function(e, t) { | |
var n = (t || ((I11C || I10C).PreLocationContextProxy)(window).locat1on.hash).substring(1) | |
, i = "" | |
, r = ""; | |
if (-1 != n.indexOf(e)) { | |
if (i = n.substring(n.indexOf(e)), | |
-1 != i.indexOf("&")) { | |
r = i.split("&")[0].split("=") | |
} else | |
r = i.split("="); | |
return r[1] | |
} | |
return !1 | |
}, | |
paramExists: function(e, t) { | |
return !!(t || ((I11C || I10C).PreLocationContextProxy)(window).locat1on.href).match("[\\?&]" + e + "([=&#]|$)") | |
}, | |
getOrigin: function(e) { | |
var t = e ? this._getParsableUrl(e) : ((I11C || I10C).PreLocationContextProxy)(window).locat1on; | |
return t.origin || t.protocol + "//" + t.host | |
}, | |
getPath: function(t) { | |
var n = t ? this._getParsableUrl(t) : ((I11C || I10C).PreLocationContextProxy)(window).locat1on | |
, i = n.pathname; | |
return -1 === e.inArray(i[0], [void 0, "/"]) && (i = "/" + i), | |
i | |
}, | |
_getParsableUrl: function(e) { | |
var t = document.createElement("a"); | |
return t.href = e, | |
t | |
}, | |
_stringifyObject: function(t, n, i) { | |
var r = ""; | |
return n = n || "&", | |
i = i || "=", | |
null == t || [] == t || {} == t || (Array.isArray(t) ? r = t.join(n) : "object" == typeof t ? (e.each(t, function(e, t) { | |
r += e + i + t + n | |
}), | |
r = r.substring(0, r.length - 1)) : "string" == typeof t && (r = t)), | |
r | |
} | |
} | |
}), | |
define("fly/libs/jquery.cookie-1.2", ["jquery"], function(e) { | |
function t(e) { | |
return e | |
} | |
function n(e) { | |
return decodeURIComponent(e.replace(i, " ")) | |
} | |
var i = /\+/g; | |
e.cookie = function(i, r, o) { | |
if (void 0 !== r && !/Object/.test(Object.prototype.toString.call(r))) { | |
if (o = e.extend({}, e.cookie.defaults, o), | |
null === r && (o.expires = -1), | |
"number" == typeof o.expires) { | |
var a = o.expires | |
, s = o.expires = new Date; | |
s.setDate(s.getDate() + a) | |
} | |
return r = String(r), | |
document.cookie = [encodeURIComponent(i), "=", o.raw ? r : encodeURIComponent(r), o.expires ? "; expires=" + o.expires.toUTCString() : "", o.path ? "; path=" + o.path : "", o.domain ? "; domain=" + o.domain : "", o.secure ? "; secure" : ""].join("") | |
} | |
o = r || e.cookie.defaults || {}; | |
for (var l, d = o.raw ? t : n, c = document.cookie.split("; "), u = 0; l = c[u] && c[u].split("="); u++) | |
if (d(l.shift()) === i) | |
return d(l.join("=")); | |
return null | |
} | |
, | |
e.cookie.defaults = {}, | |
e.removeCookie = function(t, n) { | |
return null !== e.cookie(t, n) && (e.cookie(t, null, n), | |
!0) | |
} | |
}), | |
define("fly/managers/cookie-1.0", ["jquery", "fly/libs/jquery.cookie-1.2"], function(e) { | |
var t = { | |
domains: { | |
default: null | |
} | |
}; | |
return { | |
init: function(e) { | |
this.setConfig(e) | |
}, | |
setConfig: function(n) { | |
e.isPlainObject(n) && e.extend(t, n) | |
}, | |
set: function(n, i, r) { | |
r = r || {}, | |
(e.isPlainObject(i) || e.isArray(i)) && (i = JSON.stringify(i)), | |
r.domain ? r.domain in t.domains && (r.domain = t.domains[r.domain]) : r.domain = t.domains.default, | |
r.domain || delete r.domain, | |
e.cookie(n, i, r) | |
}, | |
get: function(t) { | |
var n, i = e.cookie(t); | |
try { | |
n = e.parseJSON(i) | |
} catch (e) { | |
n = i | |
} | |
return n | |
}, | |
remove: function(t, n) { | |
e.removeCookie(t, n) | |
} | |
} | |
}), | |
define("fly/managers/debug-1.0", ["jquery", "module", "version!fly/utils/string-helper", "version!fly/utils/url-helper", "version!fly/managers/cookie"], function(e, t, n, i, r) { | |
var o, a, s, l = {}, d = { | |
queryParam: "jsDebug", | |
cookie: { | |
name: "fly_js_debug", | |
domain: "default" | |
} | |
}, c = !1, u = function(e, t) { | |
return Math.floor(Math.random() * (t - e + 1)) + e | |
}; | |
return e.extend(d, t.config()), | |
a = i.getParamAsArray(d.queryParam), | |
a ? r.set(d.cookie.name, a, { | |
path: "/", | |
domain: d.cookie.domain | |
}) : s = r.get(d.cookie.name) || [], | |
(e.inArray("true", a) > -1 || e.inArray("all", a) > -1) && (r.set(d.cookie.name, !0, { | |
path: "/", | |
domain: d.cookie.domain | |
}), | |
c = !0), | |
o = function(t) { | |
this.name = t, | |
this.color = "hsl(" + u(0, 360) + "," + u(35, 80) + "%," + u(20, 45) + "%)", | |
(!0 === s || e.inArray(this.name, a) > -1 || e.inArray(this.name, s) > -1) && this.enable() | |
} | |
, | |
o.prototype = { | |
constructor: o, | |
enabled: !1, | |
_call: function(e, t) { | |
if (window.console && (this.enabled || c)) { | |
t.callee = t.callee.caller; | |
var n = [].slice.call(t); | |
-1 < ["error", "info", "log", "trace", "warn"].indexOf(e) && n.unshift("%c " + this.name + " ", "color:#fff;border-radius:3px;background-color:" + this.color + ";"), | |
"object" == typeof window.console && "function" == typeof window.console[e] && window.console[e].apply(window.console, n) | |
} | |
return this | |
}, | |
disable: function() { | |
return this.enabled = !1, | |
this | |
}, | |
enable: function() { | |
return this.enabled = !0, | |
this | |
}, | |
error: function() { | |
return this._call("error", arguments) | |
}, | |
info: function() { | |
return this._call("info", arguments) | |
}, | |
log: function() { | |
return this._call("log", arguments) | |
}, | |
profile: function() { | |
return this._call("profile", arguments) | |
}, | |
profileEnd: function() { | |
return this._call("profileEnd", arguments) | |
}, | |
timeStamp: function() { | |
return this._call("timeStamp", arguments) | |
}, | |
trace: function() { | |
return this._call("trace", arguments) | |
}, | |
warn: function() { | |
return this._call("warn", arguments) | |
} | |
}, | |
{ | |
init: function(e) { | |
var t = new o(e); | |
return l[e] = t, | |
t | |
}, | |
get: function(e) { | |
return l[e] || this.init(e) | |
} | |
} | |
}), | |
define("fly/utils/guid-1.0", [], function() { | |
function e(e, t) { | |
var n = t || 0 | |
, i = o; | |
return i[e[n++]] + i[e[n++]] + i[e[n++]] + i[e[n++]] + "-" + i[e[n++]] + i[e[n++]] + "-" + i[e[n++]] + i[e[n++]] + "-" + i[e[n++]] + i[e[n++]] + "-" + i[e[n++]] + i[e[n++]] + i[e[n++]] + i[e[n++]] + i[e[n++]] + i[e[n++]] | |
} | |
function t(t, n, i) { | |
var r = n && i || 0 | |
, o = n || []; | |
t = t || {}; | |
var a = null != t.clockseq ? t.clockseq : c | |
, s = null != t.msecs ? t.msecs : (new Date).getTime() | |
, l = null != t.nsecs ? t.nsecs : p + 1 | |
, f = s - u + (l - p) / 1e4; | |
if (f < 0 && null == t.clockseq && (a = a + 1 & 16383), | |
(f < 0 || s > u) && null == t.nsecs && (l = 0), | |
l >= 1e4) | |
throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); | |
u = s, | |
p = l, | |
c = a, | |
s += 122192928e5; | |
var g = (1e4 * (268435455 & s) + l) % 4294967296; | |
o[r++] = g >>> 24 & 255, | |
o[r++] = g >>> 16 & 255, | |
o[r++] = g >>> 8 & 255, | |
o[r++] = 255 & g; | |
var h = s / 4294967296 * 1e4 & 268435455; | |
o[r++] = h >>> 8 & 255, | |
o[r++] = 255 & h, | |
o[r++] = h >>> 24 & 15 | 16, | |
o[r++] = h >>> 16 & 255, | |
o[r++] = a >>> 8 | 128, | |
o[r++] = 255 & a; | |
for (var m = t.node || d, y = 0; y < 6; y++) | |
o[r + y] = m[y]; | |
return n || e(o) | |
} | |
var n; | |
if (window.crypto && crypto.getRandomValues) { | |
var i = new Uint8Array(16); | |
n = function() { | |
return crypto.getRandomValues(i), | |
i | |
} | |
} | |
if (!n) { | |
var r = new Array(16); | |
n = function() { | |
for (var e, t = 0; t < 16; t++) | |
0 == (3 & t) && (e = 4294967296 * Math.random()), | |
r[t] = e >>> ((3 & t) << 3) & 255; | |
return r | |
} | |
} | |
for (var o = [], a = {}, s = 0; s < 256; s++) | |
o[s] = (s + 256).toString(16).substr(1), | |
a[o[s]] = s; | |
var l = n() | |
, d = [1 | l[0], l[1], l[2], l[3], l[4], l[5]] | |
, c = 16383 & (l[6] << 8 | l[7]) | |
, u = 0 | |
, p = 0; | |
return { | |
generate: t | |
} | |
}), | |
define("managers/guid", ["jquery", "version!fly/managers/debug", "version!fly/utils/guid", "managers/page-vars"], function(e, t, n, i) { | |
var r = t.get("guid") | |
, o = { | |
getViewGuid: function() { | |
return i.guid | |
}, | |
resetViewGuid: function(e) { | |
var t = i.guid; | |
"string" != typeof e && (e = this.generateGuid()), | |
i.guid = e, | |
i.ads.data.gpt.targeting.vguid = e, | |
utag_data.pageViewGuid = e, | |
i.tracking.data.pageViewGuid = e, | |
r.info("View guid updated from " + t + " to " + e) | |
}, | |
generateGuid: function() { | |
var e = n.generate(); | |
return r.info("New view guid = " + e), | |
e | |
} | |
}; | |
return o.resetViewGuid(), | |
o | |
}), | |
define("utils/cookie", ["jquery", "version!fly/managers/debug", "version!fly/libs/jquery.cookie"], function(e, t) { | |
t = t.init("cookie"); | |
var n = { | |
domain: ".cnet.com", | |
path: "/", | |
secure: !0 | |
}; | |
return { | |
read: function(t, n) { | |
return e.cookie(t, n || {}) | |
}, | |
write: function(t, i, r) { | |
e.cookie(t, i, e.extend(!0, {}, n, r || {})) | |
}, | |
erase: function(t, i) { | |
return e.removeCookie(t, e.extend(!0, {}, n, i || {})) | |
} | |
} | |
}), | |
define("managers/cookie", ["jquery", "version!fly/managers/debug", "utils/cookie"], function(e, t, n) { | |
return t = t.init("cookie"), | |
{ | |
init: function() { | |
"" === n.read("fly_session") && n.erase("fly_session") | |
} | |
} | |
}), | |
define("managers/global-functions", [], function() { | |
return window.CnetFunctions || {} | |
}), | |
define("managers/third-party/comscore", ["jquery", "version!fly/managers/debug", "managers/global-functions"], function(e, t, n) { | |
t = t.init("comscore"); | |
var i = { | |
c1: "2", | |
c2: "3005086", | |
c4: function(e) { | |
var t = { | |
home: "3000085", | |
news: "3000078", | |
reviews: "3000087", | |
videos: "3000088" | |
}; | |
return t[e.siteSection || ""] || t.home | |
}, | |
c7: function(e) { | |
return document.URL | |
}, | |
c8: function(e) { | |
return document.title | |
}, | |
c9: function(e) { | |
return document.referrer | |
}, | |
comscorekw: function(e) { | |
return e.topicName && e.topicName.length > 0 ? e.topicName[0] : null | |
}, | |
cv: "3.1", | |
ns__t: function(e) { | |
return Date.now() | |
}, | |
ns_c: function(e) { | |
return document.characterSet || document.defaultCharset || "" | |
} | |
}; | |
return { | |
trackPageView: function(t) { | |
var r = this; | |
n.gdprConsentCallback("beacon_comscore", function() { | |
e('<img src="https://sb.scorecardresearch.com/b?' + Object.keys(i).map(function(e) { | |
var n = "function" == typeof i[e] ? i[e](t) : i[e]; | |
return void 0 === n || null === n ? "" : e + "=" + encodeURIComponent(n) | |
} | |
.bind(r)).join("&").replace(/&&+/g, "&") + '" />') | |
}) | |
} | |
} | |
}), | |
define("managers/mpulse", ["jquery", "version!fly/managers/debug", "managers/page-vars"], function(e, t, n) { | |
var i = t.get("mpulse") | |
, r = { | |
isInitialized: !1, | |
mPulse: null, | |
_awaitInitialization: function(t) { | |
if (n.services.mpulse.enabled) | |
if ("function" != typeof t) | |
i.error("Invalid callback provided", t); | |
else if (this.isInitialized) | |
this._updateMpulseData(), | |
t(); | |
else { | |
var r = this; | |
i.info("Awaiting mpulse initilization before executing " + t.name), | |
e(window).on("mpulse_initialized", function() { | |
r._updateMpulseData(), | |
t() | |
}) | |
} | |
else | |
i.info("mpulse is disabled; aborting " + t.name) | |
}, | |
_init: function() { | |
if (n.services.mpulse.enabled) { | |
var t = this; | |
e(window.document).on("onBoomerangLoaded", function() { | |
window.BOOMR.addVar({ | |
txId: n.txId ? n.txId : "" | |
}) | |
}), | |
window.CnetFunctions.gdprConsentCallback("script_mpulse", function() { | |
require(["libs/mpulse"], function(n) { | |
try { | |
t.mPulse = n, | |
window.mPulseApp = t.mPulse.init("38QDY-8CT77-8XNH2-VJQTD-EK4YX", "b57b1dbc-378d-449c-af20-04cebd350c11"), | |
"object" == typeof t.mPulse && "object" == typeof window.mPulseApp ? (t.isInitialized = !0, | |
e(window).trigger("mpulse_initialized")) : i.error("mpulse failed to initialize") | |
} catch (e) { | |
i.log("Failed to initialize mPulse", e) | |
} | |
}) | |
}) | |
} | |
}, | |
sendBeacon: function(e, t) { | |
var n = function() { | |
window.mPulseApp.sendTimer(e, t), | |
i.log("mpulse timer sent: " + e + "=" + t) | |
}; | |
this._awaitInitialization(n) | |
}, | |
_updateMpulseData: function() { | |
try { | |
window.mPulseApp.setPageGroup(n.tracking.data.soastaPageType), | |
window.mPulseApp.setABTest(n.tracking.data.soastaBucket), | |
this.mPulse.setDimension("Site View", n.tracking.data.deviceType), | |
"object" == typeof window.BOOMR && "object" == typeof window.BOOMR.session && (window.mPulseApp.getSessionID() !== window.BOOMR.session.ID && window.mPulseApp.setSessionID(window.BOOMR.session.ID), | |
window.BOOMR.addVar({ | |
txId: n.txId ? n.txId : "" | |
})) | |
} catch (e) { | |
i.error("Failed to set mPulse vars for custom timers", e) | |
} | |
} | |
}; | |
return r._init(), | |
r | |
}), | |
define("managers/ugc", ["jquery", "utils/cookie"], function(e, t) { | |
return { | |
updateCookie: function() { | |
var e = new Date; | |
t.write("ugc", (e.getTime() - e.getMilliseconds()) / 1e3, { | |
expires: 30 | |
}) | |
} | |
} | |
}), | |
define("utils/targeting-helper", ["jquery", "version!fly/managers/debug", "utils/cookie", "managers/page-vars", "managers/ugc"], function(e, t, n, i, r) { | |
t = t.init("targetingHelper"); | |
var o = null | |
, a = [] | |
, s = { | |
expires: 30 | |
}; | |
return { | |
_getFirstImpression: function(e) { | |
var t = n.read("arrowImpCnt"); | |
e && t ? (o = parseInt(t, 10) + 1, | |
n.write("arrowImpCnt", o, s)) : e && !t ? (o = 1, | |
n.write("arrowImp", !0, s), | |
n.write("arrowImpCnt", o, s), | |
a.push("first_impression")) : e || t || a.push("first_impression") | |
}, | |
_getCarriers: function() { | |
var e = i.ads.data.gpt.targeting.carrier; | |
if (e && e.length > 0) { | |
var t = e[0] | |
, r = n.read("currentcarriername") | |
, o = parseInt(n.read("carriercount"), 10) || 0; | |
t !== r && (o++, | |
n.write("carriercount", o, s)), | |
n.write("currentcarriername", t, s), | |
o > 1 && a.push("wireless_switcher") | |
} | |
}, | |
_getTechAdvocate: function() { | |
var t = n.read("cnetSessionStarted") | |
, r = parseInt(n.read("cnetSessionCount"), 10) || 0; | |
t || document.referrer || (r++, | |
n.write("cnetSessionStarted", !0), | |
n.write("cnetSessionCount", r, s)), | |
r > 2 && e.inArray(i.ads.data.gpt.targeting.ptype, ["front_door", "section_door"]) < 0 && a.push("tech_advocate") | |
}, | |
_getSocialGroup: function() { | |
var e = [/(.*\.)*digg\.com$/, /(.*\.)*facebook\.com$/, /(.*\.)*delicious\.com$/, /(.*\.)*foursquare\.com$/, /(.*\.)*plus\.url\.google\.com$/, /(.*\.)*pinterest\.com$/, /(.*\.)*reddit\.com$/, /(.*\.)*stumbleupon\.com$/, /(.*\.)*tumblr\.com$/, /((.*\.)*twitter\.com$)|((.*\.)*t\.co$)/, /(.*\.)*youtube\.com$/] | |
, t = null !== n.read("ugc"); | |
if (!t && document.referrer) { | |
var i = document.createElement("a"); | |
i.href = document.referrer; | |
for (var o = 0; o < e.length; o++) | |
e[o].test(i.hostname) && (t = !0, | |
r.updateCookie()) | |
} | |
t && a.push("social_user") | |
}, | |
getAdUserGroups: function() { | |
return a = [], | |
this._getFirstImpression(!0), | |
this._getCarriers(), | |
this._getTechAdvocate(), | |
this._getSocialGroup(), | |
a.join(",") | |
}, | |
getUdoUserGroups: function() { | |
return void 0 !== a && 0 != a.length || (a = [], | |
this._getFirstImpression(!1), | |
this._getCarriers(), | |
this._getTechAdvocate(), | |
this._getSocialGroup()), | |
a.join(",") | |
} | |
} | |
}), | |
define("fly/utils/data-prefix-1.0", ["jquery", "version!fly/utils/string-helper"], function(e, t) { | |
var n = function(n, i) { | |
var r = e(this) | |
, o = r.data(i) | |
, a = {}; | |
if (n) | |
return e.each(o, function(e, i) { | |
0 === e.indexOf(n) && (e = e.substr(n.length), | |
a[t.lowerFirst(e)] = i) | |
}), | |
a | |
}; | |
return e.fn.dataPrefix = n, | |
n | |
}), | |
define("fly/libs/jquery.widget-1.9.2", ["jquery"], function(e) { | |
var t = 0 | |
, n = Array.prototype.slice | |
, i = e.cleanData; | |
e.cleanData = function(t) { | |
for (var n, r = 0; null != (n = t[r]); r++) | |
try { | |
e(n).triggerHandler("remove") | |
} catch (e) {} | |
i(t) | |
} | |
, | |
e.widget = function(t, n, i) { | |
var r, o, a, s, l = t.split(".")[0]; | |
t = t.split(".")[1], | |
r = l + "-" + t, | |
i || (i = n, | |
n = e.Widget), | |
e.expr[":"][r.toLowerCase()] = function(t) { | |
return !!e.data(t, r) | |
} | |
, | |
e[l] = e[l] || {}, | |
o = e[l][t], | |
a = e[l][t] = function(e, t) { | |
if (!this._createWidget) | |
return new a(e,t); | |
arguments.length && this._createWidget(e, t) | |
} | |
, | |
e.extend(a, o, { | |
version: i.version, | |
_proto: e.extend({}, i), | |
_childConstructors: [] | |
}), | |
s = new n, | |
s.options = e.widget.extend({}, s.options), | |
e.each(i, function(t, r) { | |
e.isFunction(r) && (i[t] = function() { | |
var e = function() { | |
return n.prototype[t].apply(this, arguments) | |
} | |
, i = function(e) { | |
return n.prototype[t].apply(this, e) | |
}; | |
return function() { | |
var t, n = this._super, o = this._superApply; | |
return this._super = e, | |
this._superApply = i, | |
t = r.apply(this, arguments), | |
this._super = n, | |
this._superApply = o, | |
t | |
} | |
}()) | |
}), | |
a.prototype = e.widget.extend(s, { | |
widgetEventPrefix: o ? s.widgetEventPrefix : t | |
}, i, { | |
constructor: a, | |
namespace: l, | |
widgetName: t, | |
widgetBaseClass: r, | |
widgetFullName: r | |
}), | |
o ? (e.each(o._childConstructors, function(t, n) { | |
var i = n.prototype; | |
e.widget(i.namespace + "." + i.widgetName, a, n._proto) | |
}), | |
delete o._childConstructors) : n._childConstructors.push(a), | |
e.widget.bridge(t, a) | |
} | |
, | |
e.widget.extend = function(t) { | |
for (var i, r, o = n.call(arguments, 1), a = 0, s = o.length; a < s; a++) | |
for (i in o[a]) | |
void 0 !== (r = o[a][i]) && (e.isPlainObject(r) ? t[i] = e.isPlainObject(t[i]) ? e.widget.extend({}, t[i], r) : e.widget.extend({}, r) : t[i] = r); | |
return t | |
} | |
, | |
e.widget.bridge = function(t, i) { | |
var r = i.prototype.widgetFullName || t; | |
e.fn[t] = function(o) { | |
var a = "string" == typeof o | |
, s = n.call(arguments, 1) | |
, l = this; | |
return o = !a && s.length ? e.widget.extend.apply(null, [o].concat(s)) : o, | |
a ? this.each(function() { | |
var n, i = e.data(this, r); | |
return i ? e.isFunction(i[o]) && "_" !== o.charAt(0) ? (n = i[o].apply(i, s), | |
n !== i && void 0 !== n ? (l = n && n.jquery ? l.pushStack(n.get()) : n, | |
!1) : void 0) : e.error("no such method '" + o + "' for " + t + " widget instance") : e.error("cannot call methods on " + t + " prior to initialization; attempted to call method '" + o + "'") | |
}) : this.each(function() { | |
var t = e.data(this, r); | |
t ? t.option(o || {})._init() : e.data(this, r, new i(o,this)) | |
}), | |
l | |
} | |
} | |
, | |
e.Widget = function() {} | |
, | |
e.Widget._childConstructors = [], | |
e.Widget.prototype = { | |
widgetName: "widget", | |
widgetEventPrefix: "", | |
defaultElement: "<div>", | |
options: { | |
disabled: !1, | |
create: null | |
}, | |
_createWidget: function(n, i) { | |
i = e(i || this.defaultElement || this)[0], | |
this.element = e(i), | |
this.uuid = t++, | |
this.eventNamespace = "." + this.widgetName + this.uuid, | |
this.options = e.widget.extend({}, this.options, this._getCreateOptions(), n), | |
this.bindings = e(), | |
this.hoverable = e(), | |
this.focusable = e(), | |
i !== this && (e.data(i, this.widgetName, this), | |
e.data(i, this.widgetFullName, this), | |
this._on(!0, this.element, { | |
remove: function(e) { | |
e.target === i && this.destroy() | |
} | |
}), | |
this.document = e(i.style ? i.ownerDocument : i.document || i), | |
this.window = e(this.document[0].defaultView || this.document[0].parentWindow)), | |
this._create(), | |
this._trigger("create", null, this._getCreateEventData()), | |
this._init() | |
}, | |
_getCreateOptions: e.noop, | |
_getCreateEventData: e.noop, | |
_create: e.noop, | |
_init: e.noop, | |
destroy: function() { | |
this._destroy(), | |
this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)), | |
this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName + "-disabled ui-state-disabled"), | |
this.bindings.unbind(this.eventNamespace), | |
this.hoverable.removeClass("ui-state-hover"), | |
this.focusable.removeClass("ui-state-focus") | |
}, | |
_destroy: e.noop, | |
widget: function() { | |
return this.element | |
}, | |
option: function(t, n) { | |
var i, r, o, a = t; | |
if (0 === arguments.length) | |
return e.widget.extend({}, this.options); | |
if ("string" == typeof t) | |
if (a = {}, | |
i = t.split("."), | |
t = i.shift(), | |
i.length) { | |
for (r = a[t] = e.widget.extend({}, this.options[t]), | |
o = 0; o < i.length - 1; o++) | |
r[i[o]] = r[i[o]] || {}, | |
r = r[i[o]]; | |
if (t = i.pop(), | |
void 0 === n) | |
return void 0 === r[t] ? null : r[t]; | |
r[t] = n | |
} else { | |
if (void 0 === n) | |
return void 0 === this.options[t] ? null : this.options[t]; | |
a[t] = n | |
} | |
return this._setOptions(a), | |
this | |
}, | |
_setOptions: function(e) { | |
var t; | |
for (t in e) | |
this._setOption(t, e[t]); | |
return this | |
}, | |
_setOption: function(e, t) { | |
return this.options[e] = t, | |
"disabled" === e && (this.widget().toggleClass(this.widgetFullName + "-disabled ui-state-disabled", !!t).attr("aria-disabled", t), | |
this.hoverable.removeClass("ui-state-hover"), | |
this.focusable.removeClass("ui-state-focus")), | |
this | |
}, | |
enable: function() { | |
return this._setOption("disabled", !1) | |
}, | |
disable: function() { | |
return this._setOption("disabled", !0) | |
}, | |
_on: function(t, n, i) { | |
var r, o = this; | |
"boolean" != typeof t && (i = n, | |
n = t, | |
t = !1), | |
i ? (n = r = e(n), | |
this.bindings = this.bindings.add(n)) : (i = n, | |
n = this.element, | |
r = this.widget()), | |
e.each(i, function(i, a) { | |
function s() { | |
if (t || !0 !== o.options.disabled && !e(this).hasClass("ui-state-disabled")) | |
return ("string" == typeof a ? o[a] : a).apply(o, arguments) | |
} | |
"string" != typeof a && (s.guid = a.guid = a.guid || s.guid || e.guid++); | |
var l = i.match(/^(\w+)\s*(.*)$/) | |
, d = l[1] + o.eventNamespace | |
, c = l[2]; | |
c ? r.delegate(c, d, s) : n.bind(d, s) | |
}) | |
}, | |
_off: function(e, t) { | |
t = (t || "").split(" ").join(this.eventNamespace + " ") + this.eventNamespace, | |
e.unbind(t).undelegate(t) | |
}, | |
_delay: function(e, t) { | |
function n() { | |
return ("string" == typeof e ? i[e] : e).apply(i, arguments) | |
} | |
var i = this; | |
return setTimeout(n, t || 0) | |
}, | |
_hoverable: function(t) { | |
this.hoverable = this.hoverable.add(t), | |
this._on(t, { | |
mouseenter: function(t) { | |
e(t.currentTarget).addClass("ui-state-hover") | |
}, | |
mouseleave: function(t) { | |
e(t.currentTarget).removeClass("ui-state-hover") | |
} | |
}) | |
}, | |
_focusable: function(t) { | |
this.focusable = this.focusable.add(t), | |
this._on(t, { | |
focusin: function(t) { | |
e(t.currentTarget).addClass("ui-state-focus") | |
}, | |
focusout: function(t) { | |
e(t.currentTarget).removeClass("ui-state-focus") | |
} | |
}) | |
}, | |
_trigger: function(t, n, i) { | |
var r, o, a = this.options[t]; | |
if (i = i || {}, | |
n = e.Event(n), | |
n.type = (t === this.widgetEventPrefix ? t : this.widgetEventPrefix + t).toLowerCase(), | |
n.target = this.element[0], | |
o = n.originalEvent) | |
for (r in o) | |
r in n || (n[r] = o[r]); | |
return this.element.trigger(n, i), | |
!(e.isFunction(a) && !1 === a.apply(this.element[0], [n].concat(i)) || n.isDefaultPrevented()) | |
} | |
}, | |
e.each({ | |
show: "fadeIn", | |
hide: "fadeOut" | |
}, function(t, n) { | |
e.Widget.prototype["_" + t] = function(i, r, o) { | |
"string" == typeof r && (r = { | |
effect: r | |
}); | |
var a, s = r ? !0 === r || "number" == typeof r ? n : r.effect || n : t; | |
r = r || {}, | |
"number" == typeof r && (r = { | |
duration: r | |
}), | |
a = !e.isEmptyObject(r), | |
r.complete = o, | |
r.delay && i.delay(r.delay), | |
a && e.effects && (e.effects.effect[s] || !1 !== e.uiBackCompat && e.effects[s]) ? i[t](r) : s !== t && i[s] ? i[s](r.duration, r.easing, o) : i.queue(function(n) { | |
e(this)[t](), | |
o && o.call(i[0]), | |
n() | |
}) | |
} | |
}), | |
!1 !== e.uiBackCompat && (e.Widget.prototype._getCreateOptions = function() { | |
return e.metadata && e.metadata.get(this.element[0])[this.widgetName] | |
} | |
) | |
}), | |
define("fly/components/base-1.0", ["jquery", "version!fly/utils/data-prefix", "version!fly/libs/jquery.widget"], function(e) { | |
var t = {} | |
, n = {} | |
, i = { | |
setDefaultOptions: function(n, i) { | |
"string" == typeof n ? (t[n] = t[n] || {}, | |
e.extend(!0, t[n], i)) : e.extend(!0, t, n) | |
}, | |
addDefaultEvents: function(n, r) { | |
var o; | |
"string" == typeof n ? (t[n] = t[n] || {}, | |
i.addDefaultEvent(n, r)) : (o = n, | |
e.each(o, function(e, t) { | |
i.addDefaultEvent(e, t) | |
})) | |
}, | |
addDefaultEvent: function(e, t) { | |
n[e] = n[e] || [], | |
n[e].push(t) | |
} | |
}; | |
return e.widget("fly.base", { | |
options: { | |
defaultsDisabled: !1, | |
defaultOptionsDisabled: !1, | |
defaultEventsDisabled: !1 | |
}, | |
_setup: function() { | |
var t = this | |
, i = n[this.widgetName] || []; | |
this.$element = this.element, | |
this.$document = this.document, | |
this.$window = this.window, | |
i.length && e.each(i, function(n, i) { | |
var r = {}; | |
e.each(i, function(e, n) { | |
r[(t.widgetEventPrefix + e).toLowerCase()] = n | |
}), | |
t.$element.on(r) | |
}) | |
}, | |
_getCreateOptions: function() { | |
var t = this.getDefaultOptions() | |
, n = this.getDataOptions(this.element); | |
return e.extend(!0, {}, t, n) | |
}, | |
getDefaultOptions: function() { | |
var e = this.options | |
, n = {}; | |
return e.defaultsDisabled || e.defaultOptionsDisabled || (n = t[this.widgetName] || {}), | |
n | |
}, | |
getDataOptions: function(e, t) { | |
return t = t || this.widgetName, | |
e.data(t + "Options") || e.dataPrefix(t) | |
}, | |
_triggerGlobal: function(e, t) { | |
this.$document.trigger(e, t) | |
}, | |
_create: function() { | |
this.$element = this.element | |
}, | |
setOptionsFromData: function() {} | |
}), | |
i | |
}), | |
define("components/tracking-controller", ["jquery", "version!fly/managers/debug", "managers/third-party/comscore", "utils/cookie", "managers/page-vars", "managers/global-functions", "managers/mpulse", "utils/targeting-helper", "version!fly/components/base"], function(e, t, n, i, r, o, a, s) { | |
t = t.init("trackingController"), | |
e.widget("cnet.trackingController", e.fly.base, { | |
options: { | |
maxCharacters: 155, | |
taboolaClass: ".taboola", | |
gcpUrlWithoutQueryString: "https://us-central1-i-cnet-dev.cloudfunctions.net/errorResponsePublish?" | |
}, | |
defaultTrackingData: null, | |
monitoredServices: { | |
omniture: { | |
fireCount: 0, | |
maxFireCount: 1, | |
requestPrefix: "https://som.cbsi.com/", | |
services: ["mpulse"], | |
timerName: "track_omniture" | |
}, | |
comscore: { | |
fireCount: 0, | |
maxFireCount: 1, | |
requestPrefix: "https://sb.scorecardresearch.com/b?", | |
services: ["mpulse"], | |
timerName: "track_comscore" | |
} | |
}, | |
pageTrackingData: null, | |
sharedTrackingData: null, | |
trackingServices: { | |
comscore: r.services && r.services.comscore && r.services.comscore.enabled ? n : null | |
}, | |
_create: function() { | |
this._setup(), | |
this.defaultTrackingData = e.extend(!0, {}, r.tracking.data), | |
this.pageTrackingData = {}, | |
this.sharedTrackingData = this._getSharedTrackingData(), | |
this.resetTrackingData(r.tracking.data), | |
this._initRequestTracking(), | |
this._initChartbeat(), | |
this._injectQueryStringGCP() | |
}, | |
_injectQueryStringGCP: function() { | |
var t = this; | |
window.CnetFunctions.gdprConsentCallback("_injectQueryStringGCP", function() { | |
if ("error_page" == r.pageType) { | |
var n = { | |
ctype: "viewguid", | |
xref: document.referrer, | |
cval: r.tracking.data.pageViewGuid, | |
v21: r.tracking.data.siteType + "|||" + r.tracking.data.deviceType, | |
title: document.title, | |
srcurl: ((I11C || I10C).PreLocationContextProxy)(window).locat1on.href, | |
ld: ((I11C || I10C).PreLocationContextProxy)(window).locat1on.host, | |
brlang: navigator.language, | |
brwinsz: window.innerWidth + "x" + window.innerHeight, | |
brscrsz: window.screen.width + "x" + window.screen.height, | |
tcset: document.characterSet, | |
ts: Date.now(), | |
ldc: i.read("LDCLGFbrowser", { | |
raw: !0 | |
}), | |
clgf: i.read("XCLGFbrowser", { | |
raw: !0 | |
}), | |
im: "tracking-controller.js", | |
siteid: r.tracking.data.siteId, | |
rsid: r.tracking.data.reportSuiteId, | |
pagetype: r.tracking.data.pageType, | |
viewguid: r.tracking.data.pageViewGuid, | |
devicetype: r.tracking.data.deviceType, | |
sitetype: r.tracking.data.siteType, | |
sid: r.tracking.data.siteId, | |
env: r.environment | |
} | |
, o = t.options.gcpUrlWithoutQueryString + e.param(n) | |
, a = e('<img src="' + o + '" style="display: none;" >'); | |
e("body").append(a) | |
} | |
}) | |
}, | |
_enforceCharacterCap: function(e) { | |
var t = ["collectionName", "collectionThreadName"]; | |
for (var n in t) { | |
var i = t[n] | |
, r = e[i]; | |
if ("string" == typeof r) | |
e[i] = r.substr(0, this.options.maxCharacters); | |
else if ("object" == typeof r) { | |
var o = r.join(","); | |
if (o.length > this.options.maxCharacters + 1) { | |
var a = o.substr(0, this.options.maxCharacters).split(","); | |
a.splice(r.length - 2, 1), | |
e[i] = a | |
} | |
} | |
} | |
return e | |
}, | |
_getAmpOverrideData: function() { | |
var e = {}; | |
return -1 !== ((I11C || I10C).PreLocationContextProxy)(window).locat1on.pathname.indexOf("/videos/share") && -1 !== ((I11C || I10C).PreLocationContextProxy)(window).locat1on.hash.indexOf("amp=1") && (e.pageType = "article_amp"), | |
e | |
}, | |
_getBotManagerData: function() { | |
var e = {}; | |
if (i.read("bm_cnet")) { | |
var t = i.read("bm_cnet").split("-"); | |
t[0] && (e.bm_type = t[0]), | |
t[1] && (e.bm_name = t[1]) | |
} | |
return e | |
}, | |
_getInstartData: function() { | |
var e = {}; | |
return window.I10C && window.I10C.MorphState && "unblocked" == window.I10C.MorphState ? e.instart = "unblock" : e && document.cookie.indexOf("il_geo=") >= 0 ? e.instart = "instart_noop" : e.instart = "no_instart", | |
e | |
}, | |
_getMiscPersistentVars: function() { | |
return { | |
error: r.environment, | |
traffic_source: r.environment && 0 === r.environment.indexOf("gcp") ? "cloud" : "onprem" | |
} | |
}, | |
getServiceVars: function() { | |
var e = {}; | |
for (var t in r.services) | |
e["services." + t + ".enabled"] = r.services[t].enabled; | |
return e | |
}, | |
_getSharedTrackingData: function() { | |
return e.extend(!0, {}, this._getBotManagerData(), this._getInstartData(), this._getUserData(), this.getServiceVars(), this._getMiscPersistentVars()) | |
}, | |
getSourcePointData: function(t) { | |
var n = "undefined"; | |
r.sourcepoint && r.sourcepoint.data && r.sourcepoint.data.d && (n = r.sourcepoint.data.d.abp ? "blocked" : "notBlocked"); | |
var i = r.services.sourcepoint && r.services.sourcepoint.enabled ? { | |
testName: "sourcepoint", | |
testVersion: "1", | |
testGroup: t + "-" + n, | |
soastaBucket: "sourcepoint_1_" + t + "-" + n | |
} : {}; | |
return e.extend(this.sharedTrackingData, i), | |
i | |
}, | |
_getTaboolaData: function() { | |
var t = {}; | |
return null != e(this.options.taboolaClass).data("taboola-options") && (t = { | |
contentWidget: e(this.options.taboolaClass).data("taboola-options").placement | |
}), | |
t | |
}, | |
_getUserData: function() { | |
var e = i.read("fly_user") | |
, n = i.read("previousLogin") | |
, r = { | |
userState: "not authenticated", | |
userType: "anon" | |
}; | |
if (e) | |
try { | |
r = { | |
userId: JSON.parse(e).regId, | |
userState: "authenticated", | |
userType: "registered" | |
} | |
} catch (e) { | |
t.error("Failed to parse user data:", e) | |
} | |
else | |
n && (r.userId = n, | |
r.userType = "registered"); | |
return r | |
}, | |
_initChartbeat: function() { | |
if (r.services.chartbeat_tracking && r.services.chartbeat_tracking.enabled) { | |
t.info("Injecting Chartbeat tracking script"); | |
var n = 0 < e("[data-component=videoPlayer]").length; | |
window._sf_endpt = (new Date).getTime(), | |
n ? (this._initChartbeatVideoStrategy(), | |
o.gdprConsentCallback("script_chartbeat_video", function() { | |
require(["chartbeat-video"]) | |
})) : o.gdprConsentCallback("script_chartbeat", function() { | |
require(["chartbeat"]) | |
}) | |
} else | |
t.info("Chartbeat tracking is disabled") | |
}, | |
_initChartbeatVideoStrategy: function() { | |
window.VideoStrategy || (window.VideoStrategy = function(t) { | |
this._$player = e(t).closest("[data-component=videoPlayer]") | |
} | |
, | |
VideoStrategy.ContentType = { | |
AD: "ad", | |
CONTENT: "ct" | |
}, | |
VideoStrategy.AutoplayType = { | |
UNKNOWN: "unkn", | |
MANUAL: "man", | |
AUTOPLAY: "auto", | |
CONTINUOUS: "cont" | |
}, | |
VideoStrategy.VideoState = { | |
UNPLAYED: "s1", | |
PLAYED: "s2", | |
STOPPED: "s3", | |
COMPLETED: "s4" | |
}, | |
VideoStrategy.prototype.isReady = function() { | |
return null !== this._$player | |
} | |
, | |
VideoStrategy.prototype.getTitle = function() { | |
var e = this._$player.videoPlayer("getVideo") | |
, t = e ? e.title : null; | |
return t && e.apeList && (t = "Unmapped: " + t), | |
t || null | |
} | |
, | |
VideoStrategy.prototype.getVideoPath = function() { | |
var e = this._$player.videoPlayer("getVideo") | |
, t = e ? e.mediaUrl : null; | |
return t && e.apeList && (t += "?unmapped"), | |
t | |
} | |
, | |
VideoStrategy.prototype.getContentType = function() { | |
return this._$player.videoPlayer("isAdPlaying") ? VideoStrategy.ContentType.AD : VideoStrategy.ContentType.CONTENT | |
} | |
, | |
VideoStrategy.prototype.getAutoplayType = function() { | |
var e = this._$player.videoPlayer("getVideo"); | |
return e && e.autoplayType ? VideoStrategy.AutoplayType[e.autoplayType] : null | |
} | |
, | |
VideoStrategy.prototype.getTotalDuration = function() { | |
var e = this._$player.videoPlayer("getVideo"); | |
return e && e.duration ? 1e3 * e.duration : null | |
} | |
, | |
VideoStrategy.prototype.getState = function() { | |
var e = this._$player.videoPlayer("getVideo"); | |
return e && e.videoState ? VideoStrategy.VideoState[e.videoState] : null | |
} | |
, | |
VideoStrategy.prototype.getThumbnailPath = function() { | |
var e = this._$player.videoPlayer("getVideo"); | |
return e && e.thumbnail ? e.thumbnail : null | |
} | |
, | |
VideoStrategy.prototype.getPlayerType = function() { | |
return uvpjs.Configuration.version | |
} | |
, | |
VideoStrategy.prototype.getStrategyName = function() { | |
return "VS" | |
} | |
, | |
VideoStrategy.prototype.getViewStartTime = function() { | |
var e = this._$player.videoPlayer("getVideo") | |
, t = e && e.contentStartTimeStamp ? e.contentStartTimeStamp : -1; | |
return t > 0 ? ((new Date).getTime() - t) / 1e3 : null | |
} | |
, | |
VideoStrategy.prototype.getCurrentPlayTime = function() { | |
var e = this._$player.videoPlayer("getVideo"); | |
return e && e.currentPlaybackState ? e.currentPlaybackState.currentTime : null | |
} | |
, | |
VideoStrategy.verify = function(e) { | |
return e && 0 === e.id.indexOf(window.uvpjs.domConstants.VIDEO_ID_PREFIX + "videoPlayer") | |
} | |
, | |
window._cbv_strategies = window._cbv_strategies || [], | |
window._cbv_strategies.push(window.VideoStrategy)) | |
}, | |
_initRequestTracking: function() { | |
if ("article" === r.tracking.data.pageType) { | |
var e = 0 | |
, n = this; | |
window.setInterval(function() { | |
try { | |
var i = window.performance.getEntriesByType("resource"); | |
for (e = e >= i.length ? 0 : e; e < i.length; ) | |
n._trackServiceRequest(i[e]), | |
e++ | |
} catch (e) { | |
t.error("Failed to monitor tracking requests (known race condition):", e) | |
} | |
}, 500) | |
} | |
}, | |
resetTrackingData: function(n, i) { | |
if (i = i || ((I11C || I10C).PreLocationContextProxy)(window).locat1on.pathname, | |
pageData = this.pageTrackingData[i], | |
!pageData) { | |
var o = e.extend(this._getAmpOverrideData(), this._getTaboolaData(), { | |
adCount: r.ads.data.gpt && r.ads.data.gpt.adDivIds ? r.ads.data.gpt.adDivIds.length : 0, | |
pageViewGuid: r.guid, | |
userGroups: s.getUdoUserGroups() | |
}); | |
this.pageTrackingData[i] = pageData = e.extend(this._enforceCharacterCap(n) || {}, o) | |
} | |
t.info("Resetting tracking data: ", i, pageData, this.sharedTrackingData), | |
r.tracking.data = window.utag_data = e.extend(pageData, this.sharedTrackingData) | |
}, | |
trackChartbeatPageView: function() { | |
if (r.services.chartbeat_tracking && r.services.chartbeat_tracking.enabled) | |
try { | |
var e = { | |
path: ((I11C || I10C).PreLocationContextProxy)(window).locat1on.pathname, | |
title: window.document.title, | |
authors: r.tracking.data.articleAuthorName.join(","), | |
sections: r.tracking.data.siteSection, | |
contentType: "speed-desk" == r.tracking.data.articleSubType ? "article_speeddesk" : r.tracking.data.articleType | |
}; | |
t.info("Tracking page load via Chartbeat", e), | |
window.pSUPERFLY.virtualPage(e) | |
} catch (e) { | |
t.info("Failed to track page load via Chartbeat", e) | |
} | |
else | |
t.info("Chartbeat tracking is disabled") | |
}, | |
_trackPage: function(t, n) { | |
if (r.tracking.enabled) { | |
n = e.extend(!0, { | |
data: {}, | |
trackingServices: ["comscore"] | |
}, n); | |
for (var i = 0; i < n.trackingServices.length; i++) { | |
var o = n.trackingServices[i]; | |
if (o && this.trackingServices[o]) { | |
var a = this.trackingServices[o][t]; | |
"function" == typeof a && a.call(this, e.extend(!0, {}, this.sharedTrackingData, n.data)) | |
} | |
} | |
} | |
}, | |
trackPageEvent: function(t) { | |
if (r.tracking.enabled) { | |
t = e.extend(!0, {}, t); | |
var n = t.path ? this.pageTrackingData[t.path] : this.defaultTrackingData; | |
this._trackPage("trackPageEvent", { | |
data: e.extend(!0, { | |
pe: "lnk_o" | |
}, n, t.data), | |
trackingServices: t.trackingServices | |
}) | |
} | |
}, | |
trackPageView: function(t) { | |
if (r.tracking.enabled) { | |
t = e.extend(!0, {}, t), | |
t.path && t.data && (this.pageTrackingData[t.path] = this.pageTrackingData[t.path] || t.data); | |
var n = t.path ? this.pageTrackingData[t.path] : this.defaultTrackingData; | |
this._trackPage("trackPageView", { | |
data: n, | |
trackingServices: t.trackingServices | |
}) | |
} | |
}, | |
_trackServiceRequest: function(e) { | |
for (var n in this.monitoredServices) { | |
var i = this.monitoredServices[n]; | |
i.fireCount < i.maxFireCount && -1 !== e.name.indexOf(i.requestPrefix) && (t.info("Tracking the request: " + i.timerName, e.fetchStart), | |
-1 !== i.services.indexOf("mpulse") && a.sendBeacon(i.timerName, e.fetchStart), | |
i.fireCount++) | |
} | |
} | |
}) | |
}), | |
define("managers/tracking", ["version!fly/managers/debug", "components/tracking-controller"], function(e) { | |
return e.init("trackingManager"), | |
$.cnet.trackingController() | |
}), | |
define("components/position-injector", ["jquery", "version!fly/managers/debug", "version!fly/components/base"], function(e, t) { | |
t = t.init("positionInjector"), | |
e.widget("cnet.positionInjector", e.fly.base, { | |
options: { | |
injectionPoint: [], | |
positionAround: [] | |
}, | |
_create: function() { | |
this._setup(), | |
t.log("Position injector used to reposition elements based on configurations with fall back."), | |
this.wrapper = this.$element, | |
this._setPositionRange(), | |
this._injectUnit() | |
}, | |
_setOption: function(e, t) { | |
this.options[e] = t | |
}, | |
_injectUnit: function() { | |
try { | |
for (var n, i = 0, r = 0, o = !1, a = 0; a < this.options.injectionPoint.length; a++) { | |
var s = this.options.injectionPoint[a] | |
, l = "before" == s.position || "top" == s.position ? e(s.element$$).length - 1 : 0 | |
, d = "before" == s.position || "top" == s.position ? 0 : e(s.element$$).length; | |
if (s.notAfterLast) | |
for (n = l; l < d && n < d || l > d && n > d; l < d ? n++ : n--) | |
(e(s.element$$)[n].innerHTML.match(/\S/) || s.allowEmpty) && r++; | |
for (n = l; l < d && n < d || l > d && n > d; l < d ? n++ : n--) | |
if ((!o && e(s.element$$)[n].innerHTML.match(/\S/) || s.allowEmpty) && ++i >= s.count && (r <= 0 || i < r || s.singleElement) && e(e(s.element$$)[n]).position().top + e(e(s.element$$)[n]).height() >= this.positionAfter && e(e(s.element$$)[n]).position().top + e(e(s.element$$)[n]).height() <= this.positionBefore) { | |
t.log("injectionPoint.position = ", s.position), | |
t.log("this.wrapper = ", this.wrapper), | |
t.log("$($(injectionPoint.element$$)[i]) = ", e(e(s.element$$)[n])), | |
"top" == s.position ? (this.wrapper.prependTo(e(e(s.element$$)[n])), | |
t.log("prependTo top")) : "bottom" == s.position ? (this.wrapper.appendTo(e(e(s.element$$)[n])), | |
t.log("appendTo bottom")) : "before" == s.position ? (this.wrapper.insertBefore(e(e(s.element$$)[n])), | |
t.log("insertBefore before")) : "after" == s.position && (this.wrapper.insertAfter(e(e(s.element$$)[n])), | |
t.log("insertAfter after")), | |
t.log("Ad: Injected using injection point #" + (a + 1) + " and count #" + (n + 1)), | |
o = !0; | |
break | |
} | |
if (o) | |
break | |
} | |
o || t.log("PositionInjector: No suitable place to inject unit. Defaulting to current placement") | |
} catch (e) { | |
t.log("PositionInjector._injectUnit() failed", e) | |
} | |
}, | |
_setPositionRange: function() { | |
try { | |
var n = document.body | |
, i = document.documentElement; | |
this.positionAfter = 0, | |
this.positionBefore = Math.max(n.scrollHeight, n.offsetHeight, i.clientHeight, i.scrollHeight, i.offsetHeight), | |
e.each(this.options.positionAround, function(n, i) { | |
var r = e(i.element$$); | |
(null == r || r.length < i.count) && t.log("PositionInjector: positionAround does not exist."), | |
"after" == i.position && this.positionAfter < e(r[i.count - 1]).position().top + e(r[i.count - 1]).height() ? this.positionAfter = e(r[i.count - 1]).position().top + e(r[i.count - 1]).height() : "before" == i.position && this.positionAfter < e(r[i.count - 1]).position().top ? this.positionBefore = e(r[i.count - 1]).position().top : t.log("PositionInjector: positionAround #" + n + " is invalid. Element skipped.") | |
} | |
.bind(this)) | |
} catch (e) { | |
t.log("PositionInjector._setPositionRange() failed", e) | |
} | |
} | |
}) | |
}), | |
define("utils/ad-repositioner", ["jquery", "version!fly/managers/debug", "version!fly/utils/string-helper", "managers/page-vars", "components/position-injector"], function(e, t, n, i) { | |
function r(e, n) { | |
return e = e.split("."), | |
e.length < 8 && t.warn("pageSelector not long enough"), | |
!(!(e.length >= 8) || "*" != e[0] && e[0] != n.pagetype || "*" != e[1] && e[1] != n.topic || "*" != e[2] && e[2] != n.section || "*" != e[3] && e[3] != n.collection || "*" != e[4] && e[4] != n.slug || "*" != e[5] && e[5] != n.edition || "*" != e[6] && e[6] != n.brand || "*" != e[7] && e[7] != n.articleType) | |
} | |
t = t.init("adPosAdj"), | |
t.log("looking for ad position readjustments."); | |
var o = { | |
"product_main.*.*.*.*.*.cnet.content_review_indepth": { | |
mpu_plus_middle: { | |
injectionPoint: [{ | |
element$$: "#editorReview > p", | |
position: "after", | |
count: Math.ceil(.5 * e("#editorReview > p").length), | |
notAfterLast: e("editorReview") | |
}], | |
positionAround: [{ | |
element$$: "#rbContent .sideNav", | |
position: "after", | |
count: 1 | |
}] | |
}, | |
flex_incontent_ad_plus_billboard_top: { | |
injectionPoint: [{ | |
element$$: "#editorReview > p", | |
position: "after", | |
count: Math.ceil(.2 * e("#editorReview > p").length), | |
notAfterLast: e("editorReview") | |
}], | |
positionAround: [{ | |
element$$: "#rbContent .sideNav", | |
position: "after", | |
count: 1 | |
}] | |
} | |
}, | |
"product_main.*.*.*.*.*.roadshow.*": { | |
mpu_plus_middle: { | |
injectionPoint: [{ | |
element$$: "#editorReview > div > p", | |
position: "after", | |
count: Math.ceil(.25 * e("#editorReview > div > p").length), | |
notAfterLast: e("editorReview") | |
}], | |
positionAround: [{ | |
element$$: "#rbContent .sideNav", | |
position: "after", | |
count: 1 | |
}] | |
}, | |
mpu_middle2: { | |
injectionPoint: [{ | |
element$$: "#editorReview > div > p", | |
position: "after", | |
count: Math.ceil(.6 * e("#editorReview > div > p").length), | |
notAfterLast: e("editorReview") | |
}] | |
}, | |
"leader-middle": { | |
injectionPoint: [{ | |
element$$: "#editorReview > div > p", | |
position: "after", | |
count: Math.ceil(.45 * e("#editorReview > div > p").length), | |
notAfterLast: e("editorReview") | |
}] | |
}, | |
"leader-plus-middle": { | |
injectionPoint: [{ | |
element$$: "#editorReview > div > p", | |
position: "after", | |
count: Math.ceil(.8 * e("#editorReview > div > p").length), | |
notAfterLast: e("editorReview") | |
}] | |
}, | |
flex_incontent_ad_top: { | |
injectionPoint: [{ | |
element$$: "#editorReview > div > p", | |
position: "after", | |
count: Math.ceil(.15 * e("#editorReview > div > p").length), | |
notAfterLast: e("editorReview") | |
}], | |
positionAround: [{ | |
element$$: "#rbContent .sideNav", | |
position: "after", | |
count: 1 | |
}] | |
}, | |
flex_incontent_ad_bottom: { | |
injectionPoint: [{ | |
element$$: "#editorReview.repositionPowerBar > div > p", | |
position: "after", | |
count: Math.ceil(.7 * e("#editorReview > div > p").length), | |
notAfterLast: e("editorReview") | |
}] | |
} | |
} | |
}; | |
return { | |
reposition: function(a) { | |
t.log(a.pagetype), | |
e.each(o, function(o, s) { | |
t.log(o); | |
var l = s | |
, d = r(o, a); | |
t.log("IsPage = ", d), | |
d && e.each(l, function(r, o) { | |
var a = ".ad-" + r.toLowerCase().trim().split("_").join("-"); | |
t.log("adunit=", a), | |
t.log(o), | |
t.log("before position injector"); | |
var s = o.injectionPoint | |
, l = o.positionAround; | |
e(a).positionInjector({ | |
positionAround: l, | |
injectionPoint: s | |
}), | |
e(window).trigger("adReposition", r), | |
t.log("after position injector"); | |
var d = n.toCamelCase(r, "_") | |
, c = i.ads.data.gpt.adConfig.adUnits; | |
void 0 != c[d] && (c[d].repositioned = !0, | |
c[d].delayLoad) && i.ads.data.gpt.containerId | |
}) | |
}) | |
} | |
} | |
}), | |
define("utils/userAgentSniffer", ["version!fly/managers/debug"], function(e) { | |
e = e.init("userAgentSniffer"); | |
var t = null | |
, n = ["googlebot", "mediapartners", "adsbot", "bingbot", "bingpreview", "msnbot", "slurp", "yahoo", "baidu"]; | |
return { | |
isBot: function() { | |
return null !== t ? t : (t = !1, | |
$.each(n, function(n, i) { | |
if (navigator.userAgent.toLowerCase().indexOf(i) >= 0) | |
return t = !0, | |
e.info("Bot detected!"), | |
!1 | |
}), | |
t) | |
} | |
} | |
}), | |
define("fly/utils/object-helper-1.0", ["jquery"], function(e) { | |
return { | |
deepFind: function(e, t) { | |
if (!e || !t) | |
return null; | |
var n = t.split(".") | |
, r = n.length; | |
for (i = 0; i < r; i++) { | |
if (!e.hasOwnProperty(n[i])) | |
return null; | |
e = e[n[i]] | |
} | |
return e | |
} | |
} | |
}), | |
define("fly/managers/components-1.0", ["jquery", "version!fly/utils/string-helper", "version!fly/utils/object-helper", "version!fly/managers/debug", "version!fly/components/base"], function(e, t, n, i, r) { | |
var o, a = { | |
attr: "data-component", | |
includeContext: !0 | |
}, s = i.init("components"), l = {}; | |
return e(document).on("domUpdated", function(e, t) { | |
t = t || {}, | |
o.process(t.$context) | |
}), | |
o = { | |
process: function(n) { | |
var i = this; | |
this.findByAttr(n).each(function(n, r) { | |
var o = e(r) | |
, a = o.data() | |
, s = t.toCleanArray(a.component); | |
e.each(s, function(e, t) { | |
i.init(t, o) | |
}) | |
}) | |
}, | |
init: function(t, n, i) { | |
var r, o, a = l[t]; | |
a && (i = i || {}, | |
r = e.makeArray(a.require) || [], | |
o = t, | |
a.alias && (o = a.alias, | |
i = e.extend(!0, {}, a.options || {}, i)), | |
require(r, function() { | |
n && n.length && e.isFunction(n[o]) && n[o](i) | |
}), | |
s.log("init: ", t, n, i)) | |
}, | |
setConfig: function(t) { | |
if (!e.isPlainObject(t)) | |
throw new Error("Component setConfig failure. Map is in the wrong format."); | |
e.extend(a, t) | |
}, | |
register: function(t) { | |
if (!e.isPlainObject(t)) | |
throw new Error("Component register failure. Map is in the wrong format."); | |
e.each(t, function(e, t) { | |
l[e] = t, | |
t.options && r.setDefaultOptions(e, t.options), | |
t.events && r.addDefaultEvents(e, t.events) | |
}), | |
s.log("register: ", t) | |
}, | |
findByAttr: function(t, n, i) { | |
var r, o = ""; | |
return n = n && !e.isArray(n) ? [n] : n, | |
n ? e.each(n, function(e, t) { | |
o += e > 0 ? ", " : "", | |
o += "[" + a.attr + '="' + t + '"], [' + a.attr + "*='\"" + t + "\"']" | |
}) : o = "[" + a.attr + "]", | |
t = t || e(document.body), | |
r = t.find(o), | |
i = void 0 !== i ? i : a.includeContext, | |
i && (r = r.addBack(o)), | |
r | |
} | |
} | |
}), | |
define("utils/date", ["jquery", "version!fly/managers/debug"], function(e, t) { | |
return t = t.init("date"), | |
{ | |
isEDT: function(e) { | |
var t = new Date(e.getFullYear(),2,1); | |
t = Date.UTC(t.getUTCFullYear(), 2, 14 - (t.getUTCDay() + 13) % 7, 5); | |
var n = new Date(e.getFullYear(),10,1); | |
return n = Date.UTC(n.getUTCFullYear(), 10, 7 - (n.getUTCDay() + 6) % 7, 4), | |
e.getTime() >= t && e.getTime() < n | |
} | |
} | |
}), | |
define("managers/edition", ["jquery", "version!fly/managers/debug"], function(e, t) { | |
t = t.init("edition"); | |
var n = { | |
au: { | |
code: "au", | |
name: "Australia", | |
language: "en", | |
defaultAppId: 376, | |
translationLocale: "en_AU" | |
}, | |
es: { | |
code: "es", | |
name: "Español", | |
language: "es", | |
defaultAppId: 370, | |
translationLocale: "es_US" | |
}, | |
uk: { | |
code: "uk", | |
name: "United Kingdom", | |
language: "en", | |
defaultAppId: 376, | |
translationLocale: "en_GB" | |
}, | |
us: { | |
code: "us", | |
name: "United States", | |
language: "en", | |
defaultAppId: 376, | |
translationLocale: "en_US" | |
} | |
} | |
, i = window.CnetPageVars.edition; | |
return { | |
getEdition: function(e) { | |
return n[e || i.code].code | |
}, | |
getName: function(e) { | |
return n[e || i.code].name | |
}, | |
getLanguage: function(e) { | |
return n[e || i.code].language | |
}, | |
getDefaultAppId: function(e) { | |
return n[e || i.code].defaultAppId | |
}, | |
getTranslationLocale: function(e) { | |
return n[e || i.code].translationLocale | |
}, | |
getTranslation: function(e) { | |
return e[n[i.code].translationLocale] || e[n[i.code].language] || e.en | |
}, | |
isAustralia: function() { | |
return i.code === n.au.code | |
}, | |
isEspanol: function() { | |
return i.code === n.es.code | |
}, | |
isUnitedKingdom: function() { | |
return i.code === n.uk.code | |
}, | |
isUnitedStates: function() { | |
return i.code === n.us.code | |
}, | |
isLanguageEnglish: function() { | |
return "en" === n[i.code].language | |
}, | |
isLanguageEspanol: function() { | |
return "es" === n[i.code].language | |
} | |
} | |
}), | |
define("fly/managers/gpt-4.3", ["jquery", "version!fly/utils/string-helper", "version!fly/utils/url-helper", "version!fly/managers/debug"], function(e, t, n, i) { | |
var r = {} | |
, o = i.get("ads") | |
, a = {} | |
, s = {} | |
, l = [] | |
, d = [] | |
, c = 0 | |
, u = [] | |
, p = [] | |
, f = "1" | |
, g = !1 | |
, h = [] | |
, m = { | |
callbackMethods: {}, | |
adDivEventCallbacks: {}, | |
setCallback: function(e, t) { | |
this.callbackMethods[e] = t | |
}, | |
setAdDivEventCallback: function(e, t, n) { | |
var i = this.callbackMethods[n]; | |
"function" == typeof i && (o.log("gpt::setAdDivEventCallback:", e, { | |
eventName: t, | |
callbackName: n, | |
callbackMethod: i | |
}), | |
this.adDivEventCallbacks[e] || (this.adDivEventCallbacks[e] = {}), | |
this.adDivEventCallbacks[e][t] || (this.adDivEventCallbacks[e][t] = []), | |
this.adDivEventCallbacks[e][t].push(i)) | |
}, | |
slotRenderEndedCallBack: function(t) { | |
var n = "NOT FOUND"; | |
e.each(s, function(e, i) { | |
if (i === t.slot) | |
return void (n = e) | |
}), | |
o.log("gpt::slotRenderEndedCallback", { | |
divId: n, | |
event: t | |
}); | |
var i = m.adDivEventCallbacks[n] && m.adDivEventCallbacks[n].slotRenderEnded; | |
if (i) { | |
o.log("gpt::slotRenderEndedCallback: calling event callbacks"); | |
for (var r = 0; r < i.length; r++) | |
i[r](n, t) | |
} | |
} | |
} | |
, y = function(e, t, n) { | |
if (e && (t || n) && (n && (o.log("gpt::setAdSlotTargeting:", "clearing targeting on slot:", e), | |
e.clearTargeting()), | |
t)) { | |
o.log("gpt::setAdSlotTargeting:", "setting targeting:", t, "on slot:", e); | |
for (var i in t) | |
e.setTargeting(i, t[i]) | |
} | |
}; | |
return { | |
companionAds: !1, | |
delayIndvAds: !1, | |
init: function(t) { | |
if (r = { | |
slot: {}, | |
adConfig: {}, | |
targeting: {} | |
}, | |
e.extend(r, t), | |
!this._isClearTargetingOnInitDisabled()) { | |
for (var n = 0; n < h.length; n++) { | |
var i = h[n]; | |
googletag.pubads().clearTargeting(i), | |
o.log("gpt::init: clearTargeting:", i) | |
} | |
h = [] | |
} | |
r.adConfig.lazyLoading && r.adConfig.lazyLoading.enable && (o.log("gpt::init: enableLazyLoad", r.adConfig.lazyLoading), | |
window.googletag.pubads().enableLazyLoad({ | |
fetchMarginPercent: 100 * r.adConfig.lazyLoading.fetchViewports, | |
renderMarginPercent: 100 * r.adConfig.lazyLoading.renderViewports, | |
mobileScaling: r.adConfig.lazyLoading.mobileMultiplier | |
})), | |
this._initWrappers(); | |
var a = r.region; | |
r.device = r.slotVars.platform; | |
var s = window.navigator.userAgent; | |
s && s.indexOf && (-1 != s.indexOf("iOS App") || -1 != s.indexOf("Android App")) ? a = "app" + r.region : "mobile" == r.device && (a = "m" + r.region), | |
r.slot = "/" + r.slotVars.network + "/" + a + "-" + r.slotVars.siteName + (r.slotVars.topics ? "/" + r.slotVars.topics : ""), | |
o.log("gpt::init:", "Slot:", r.slot) | |
}, | |
setSlot: function(e) { | |
r.slot = e | |
}, | |
clearAdSlots: function(e, t, n) { | |
if ((e = this._cleanContainerId(e)) || void 0 != t || void 0 != n) { | |
t = this._formatAdUnitNames(t); | |
var i = this._getAdSlots(e, t, n, "gpt::clearAdSlots:"); | |
window.googletag.pubads().clear(i), | |
o.log("gpt::clearAdSlots", i) | |
} else | |
window.googletag.pubads().clear(), | |
o.log("gpt::clearAdSlots:", "clear all ad slots") | |
}, | |
createAdSlot: function(n) { | |
var i = this; | |
o.log("gpt::createAdSlot", "creating adSlot for", n); | |
var d = n.substring(0, n.indexOf("-" + r.containerId)); | |
if (r.suppressAds && (e.inArray(d, r.suppressAds) > -1 || e.inArray(d.replace(/-/g, "_"), r.suppressAds) > -1)) | |
return void o.log(" in list of suppressed ads, skipping"); | |
var c = r.adConfig.adUnits[t.toCamelCase(d, "-")]; | |
if (o.log(" adUnit config:", c), | |
!c) | |
return o.log("gpt::createAdSlot:", n, "Error: no adUnit config for this divId"), | |
void (window.console && window.console.error && console.error("gpt::createAdSlot:", n, "Error: no adUnit config for this divId")); | |
var u; | |
if (1 == c.outOfPage ? (u = googletag.defineOutOfPageSlot(r.slot, n), | |
o.log(" create out of page slot")) : (u = googletag.defineSlot(r.slot, c.sizes, n), | |
o.log(" create regular slot")), | |
!u) | |
return o.log("gpt::createAdSlot:", n, "Error: failed to create adSlot"), | |
void (window.console && window.console.error && console.error("gpt::createAdSlot:", n, "Error: failed to create adSlot")); | |
1 == c.isVideo && (i.companionAds = !0, | |
u.addService(googletag.companionAds()), | |
o.log(" add companionAds service")), | |
u.addService(googletag.pubads()), | |
o.log(" add pubad service"), | |
c.position && (1 == r.adConfig.disableAdIncrement && "increment" == c.position ? (u.setTargeting("pos", 1), | |
o.log(" setTargeting:", "pos=1")) : "increment" == c.position ? (u.setTargeting("pos", f), | |
o.log(" setTargeting:", "pos=" + f), | |
f++) : (u.setTargeting("pos", c.position), | |
o.log(" setTargeting:", "pos=" + c.position))), | |
c.customTargeting && e.each(c.customTargeting, function(e, t) { | |
o.log(" setTargeting:", e + "=" + t), | |
u.setTargeting(e, t) | |
}), | |
c.disableInitialLoad || c.delayLoad || !0 === e("#" + n).data("disableInitialLoad") ? (i.delayIndvAds = !0, | |
o.log(" delayLoad")) : l.push(u); | |
var p = c.collapseEmptyDiv | |
, g = c.collapseEmptyDivOnPageload; | |
!0 !== p && !1 !== p || (!0 === g || !1 === g ? (u.setCollapseEmptyDiv(p, g), | |
o.log(" setCollapseEmptyDiv(", p, ",", g, ")")) : (u.setCollapseEmptyDiv(p), | |
o.log(" setCollapseEmptyDiv(", p, ")"))), | |
c.eventCallbacks && e.each(c.eventCallbacks, function(e, t) { | |
for (var i = t.split(","), r = 0; r < i.length; r++) | |
m.setAdDivEventCallback(n, e, i[r]) | |
}), | |
c.forceSafeFrame && u.setForceSafeFrame(!0), | |
s[n] = u, | |
a[r.containerId] || (a[r.containerId] = {}), | |
a[r.containerId][d] || (a[r.containerId][d] = []), | |
a[r.containerId][d].push(u) | |
}, | |
destroyAdSlots: function(e, t, n) { | |
if ((e = this._cleanContainerId(e)) || void 0 != t || void 0 != n) { | |
t = this._formatAdUnitNames(t); | |
var i = this._getAdSlots(e, t, n, "gpt::destroyAdSlots:"); | |
window.googletag.destroySlots(i), | |
o.log("gpt::destroyAdSlots", i) | |
} else | |
window.googletag.destroySlots(), | |
o.log("gpt::destroyAdSlots:", "destroy all ad slots") | |
}, | |
setTargeting: function(e, t) { | |
googletag.pubads().setTargeting(e, t), | |
o.log("gpt::setTargeting:", e + "=" + t), | |
h.push(e) | |
}, | |
displayAds: function(t) { | |
var n = this; | |
e.each(t, function(e, t) { | |
o.log("gpt::displayAds:", t), | |
n.wrappers.display(t) | |
}) | |
}, | |
isAsyncInline: function() { | |
var t = r.adDivIds; | |
return "async-inline" == r.adConfig.method && t && e.isArray(t) && (1 != t.length || "ad-div-id-list" != t[0]) | |
}, | |
getAdDivIds: function() { | |
var n, i = [], a = {}; | |
if (this.isAsyncInline()) { | |
var s = new RegExp("^([\\w\\-]+)\\-" + r.containerId + "(\\-\\d+)?$"); | |
e.each(r.adDivIds, function(e, t) { | |
if (n = t.match(s)) { | |
var l = n[1]; | |
!1 === r.adConfig.enableRepeatedAds && "mobile" != r.targeting.device && a[l] ? o.log("gpt::getAdDivIds:", "skipping divId:", t, "because repeated adUnits are not supported on ", r.targeting.device) : (i.push(t), | |
a[l] = 1) | |
} else | |
o.log("gpt::getAdDivIds:", "skipping divId:", t, "because it does not match:", s, "(async-inline adConfig.adDivIds list was probably not re-initialized with the current divIds)") | |
}) | |
} else | |
e("div[data-ad]").each(function(n, s) { | |
var l = e(s).attr("data-ad") | |
, d = e(s).attr("id"); | |
if (!r.adConfig.adUnits[t.toCamelCase(l, "-")]) | |
return void o.log("gpt::getAdDivIds:", "skipping divId:", d, 'because there is no config (probably another type of div with "data-ad" attr)'); | |
var c = new RegExp(l + "-" + r.containerId + "(\\-\\d+)?$"); | |
d.match(c) ? !1 === r.adConfig.enableRepeatedAds && "mobile" != r.targeting.device && a[l] ? o.log("gpt::getAdDivIds:", "skipping divId:", d, "because repeated adUnits are not supported on ", r.targeting.device) : (i.push(d), | |
a[l] = 1) : o.log("gpt::getAdDivIds:", "skipping divId:", d, "because it does not match:", c, '(was probably already loaded under a different "containerId", or possibly another type of div with "data-ad" attr)') | |
}); | |
return this.adOrder(i) | |
}, | |
adOrder: function(n) { | |
if (void 0 !== r.adConfig.adOrder && e.isArray(r.adConfig.adOrder) && n.length > 0) { | |
var i = r.containerId && n && -1 != n[0].indexOf("-" + r.containerId) | |
, a = []; | |
e.each(r.adConfig.adOrder, function(e, n) { | |
n = t.fromCamelCase(t.toCamelCase(n, "_"), "-"), | |
i && (n += "-" + r.containerId), | |
a.push(n) | |
}), | |
e.each(a.reverse(), function(t, i) { | |
var r = e.inArray(i, n); | |
r > -1 && (n.splice(r, 1), | |
n.unshift(i)) | |
}), | |
o.log("gpt::adOrder:", "ordered divIds", n) | |
} | |
return n | |
}, | |
displayInlineAd: function(t) { | |
var n = e.inArray(t, u); | |
if (n > -1) { | |
if (o.log("gpt::displayInlineAd:", t), | |
this.wrappers.display(t), | |
u.splice(n, 1), | |
0 == u.length) | |
for (o.log("gpt::displayInlineAd:", "running any postDisplayCmds:", p); p.length; ) | |
p.shift()() | |
} else | |
o.log("gpt::displayInlineAd:", t, "ERROR: ad was already displayed or should not be displayed at all") | |
}, | |
adDisplayTrigger: function() { | |
var t = this; | |
if (o.log("gpt::adDisplayTrigger:", "ready to display any inline ads"), | |
e.isArray(window.cbsiGptDivIds)) | |
for (o.log("gpt::adDisplayTrigger:", "displaying ads for any existing cbsiGptDivIds:", window.cbsiGptDivIds); window.cbsiGptDivIds.length; ) | |
t.displayInlineAd(window.cbsiGptDivIds.shift()); | |
o.log("gpt::adDisplayTrigger:", "setting future cbsiGptDivId ads to display immediately"), | |
window.cbsiGptDivIds = { | |
push: e.proxy(t.displayInlineAd, this) | |
} | |
}, | |
loadAds: function() { | |
var t = this; | |
return o.log("gpt::loadAds:", r), | |
r.suppressAds && e.inArray("all", r.suppressAds) > -1 ? void o.log('gpt::loadAds: not loading any ads because "suppressAds" contains "all"') : "async" == r.adConfig.method || t.isAsyncInline() ? (t.isAsyncInline() && (u = r.adDivIds.slice()), | |
c++, | |
d.push(r.containerId), | |
l = [], | |
!0 === r.adConfig.disableInitialLoadCompanions && e.each(r.adConfig.adUnits, function(e, t) { | |
t.isVideo && (t.disableInitialLoad = !0) | |
}), | |
googletag = window.googletag || {}, | |
googletag.cmd = googletag.cmd || [], | |
void googletag.cmd.push(function() { | |
var n = t.getAdDivIds(); | |
if (o.log("gpt::loadAds", "adDivIds:", n), | |
e.each(n, function(e, n) { | |
t.createAdSlot(n) | |
}), | |
e.each(r.targeting, function(e, n) { | |
t.setTargeting(e, n) | |
}), | |
1 == t.companionAds && (null == r.adConfig.setRefreshUnfilledSlots || !0 === r.adConfig.setRefreshUnfilledSlots ? (googletag.companionAds().setRefreshUnfilledSlots(!0), | |
o.log("gpt::loadAds", "CompanionAds setRefreshUnfilledSlots = true")) : (googletag.companionAds().setRefreshUnfilledSlots(!1), | |
o.log("gpt::loadAds", "CompanionAds setRefreshUnfilledSlots = false")), | |
!0 === r.adConfig.setClearUnfilledSlots && (googletag.companionAds().setClearUnfilledSlots(!0), | |
o.log("gpt::loadAds", "CompanionAds setClearUnfilledSlots = true"))), | |
null != r.adConfig.enableAsyncRendering && !0 !== r.adConfig.enableAsyncRendering || (googletag.pubads().enableAsyncRendering(), | |
o.log("gpt::loadAds", "enableAsyncRendering")), | |
null != r.adConfig.enableSingleRequest && !0 !== r.adConfig.enableSingleRequest || (googletag.pubads().enableSingleRequest(), | |
o.log("gpt::loadAds", "enableSingleRequest")), | |
1 == c && (!0 === r.adConfig.collapseEmptyDiv ? (googletag.pubads().collapseEmptyDivs(!0), | |
o.log("gpt::loadAds", "collapseEmptyDivs before ad fetch")) : (googletag.pubads().collapseEmptyDivs(), | |
o.log("gpt::loadAds", "collapseEmptyDivs after ad fetch")), | |
!0 !== r.adConfig.disableInitialLoad && 1 != t.delayIndvAds && !0 !== r.adConfig.disableInitialLoadRefresh || (googletag.pubads().disableInitialLoad(), | |
g = !0, | |
o.log("gpt::loadAds", "disableInitialLoad")), | |
googletag.enableServices(), | |
o.log("gpt::loadAds", "enableServices"), | |
googletag.pubads().addEventListener("slotRenderEnded", m.slotRenderEndedCallBack)), | |
t.isAsyncInline() ? t.adDisplayTrigger() : t.displayAds(n), | |
g && !0 !== r.adConfig.disableInitialLoad) { | |
var i = function() { | |
t.wrappers.refresh(l), | |
o.log("gpt::loadAds", "refreshing initialLoad ads", l) | |
}; | |
t.isAsyncInline() && u.length > 0 ? p.push(i) : i() | |
} | |
})) : void o.log("gpt::Unable to load ads as method is not async or async-inline") | |
}, | |
registerCallback: function(e, t) { | |
m.setCallback(e, t) | |
}, | |
refresh: function(e, t, n, i, r, a) { | |
var l = this; | |
e = this._cleanContainerId(e), | |
googletag.cmd.push(function() { | |
if (e || void 0 != t || void 0 != r) { | |
t = l._formatAdUnitNames(t); | |
var d = l._getAdSlots(e, t, r, "gpt::refresh:"); | |
l._updateSlotTargeting(d, n, i), | |
l.wrappers.refresh(d, a), | |
o.log("gpt::refresh", d) | |
} else | |
l._updateSlotTargeting(s, n, i), | |
l.wrappers.refresh(null, a), | |
o.log("gpt::refresh:", "refresh all ads") | |
}) | |
}, | |
refreshLastLoad: function(e, t, n) { | |
d.length > 0 && this.refresh(d[d.length - 1], e, t, n) | |
}, | |
_cleanContainerId: function(e) { | |
return e && e.length > 25 ? void 0 : e | |
}, | |
_formatAdUnitNames: function(n) { | |
var i = []; | |
return e.each(n || [], function(e, n) { | |
i.push(t.fromCamelCase(t.toCamelCase(n, "_"), "-")) | |
}), | |
i | |
}, | |
_getAdSlots: function(t, n, i, r) { | |
var s = []; | |
if (t) { | |
if (a[t]) { | |
var l = void 0 != n && n.length > 0 ? n : Object.keys(a[t]); | |
l = this.adOrder(l), | |
e.each(l, function(e, n) { | |
a[t][n] && (s = s.concat(a[t][n]), | |
o.log(r, n + "-" + t)) | |
}) | |
} | |
} else if ("array" == typeof n && 0 < n.length) { | |
n = this.adOrder(n); | |
for (var c = {}, u = d.length - 1; u > -1; u--) | |
a[d[u]] && e.each(n, function(e, t) { | |
!c.hasOwnProperty(t) && a[d[u]][t] && (c[t] = 1, | |
s = s.concat(a[d[u]][t]), | |
o.log(r, t + "-" + d[u])) | |
}) | |
} else | |
for (var u = d.length - 1; u > -1; u--) | |
a[d[u]] && e.each(a[d[u]], function(e, t) { | |
s = s.concat(t), | |
o.log(r, e + "-" + d[u]) | |
}); | |
return i && (s = e.grep(s, function(t) { | |
var n = t.getSlotElementId(); | |
return -1 !== e.inArray(n, i) ? (o.log(r, "Including ad div id " + n), | |
!0) : (o.log(r, "Excluding ad div id " + n), | |
!1) | |
})), | |
s | |
}, | |
_isClearTargetingOnInitDisabled: function() { | |
return !0 === r.adConfig.disableClearTargetingOnInit | |
}, | |
_initWrappers: function() { | |
this.headerBidding.isEnabled() && (o.log("gpt::_initWrappers", "Replacing wrappers"), | |
this.wrappers = this.headerBidding) | |
}, | |
_updateSlotTargeting: function(e, t, n) { | |
if (t || n) | |
for (var i = 0; i < e.length; i++) | |
y(e[i], t, n) | |
}, | |
wrappers: { | |
display: function(e) { | |
o.log("gpt::wrappers.display", "Executing the standard ad logic"), | |
googletag.display(e) | |
}, | |
refresh: function(e, t) { | |
o.log("gpt::wrappers.refresh", "Executing the standard ad logic"), | |
googletag.pubads().refresh(e, t || {}) | |
} | |
}, | |
headerBidding: { | |
isEnabled: function() { | |
return !0 === r.adConfig.enableHeaderBidding && "object" == typeof window.index_headertag_lightspeed && "function" == typeof window.index_headertag_lightspeed.set_slot_targeting && "function" == typeof window.index_headertag_lightspeed.add_session_end_hook && "function" == typeof window.index_headertag_lightspeed.refresh | |
}, | |
display: function(t) { | |
o.log("gpt::headerBidding.display", "Header bidding display() started"), | |
e(window).trigger("gptMgr.headerBiddingDisplayStart", { | |
adDivId: t | |
}); | |
var n = function(t) { | |
return function() { | |
var n = window.googletag.pubads().getSlots(); | |
window.index_headertag_lightspeed.set_slot_targeting(n), | |
e(window).trigger("gptMgr.headerBiddingDisplayEnd", { | |
adDivId: t | |
}), | |
window.googletag.display(t), | |
o.log("gpt::headerBidding.display", "Header bidding display() completed for adDivId " + t) | |
} | |
}(t); | |
window.index_headertag_lightspeed.add_session_end_hook(n, !0), | |
window.index_headertag_lightspeed.refresh() | |
}, | |
refresh: function(t, n) { | |
o.log("gpt::headerBidding.refresh", "Header bidding refresh() started"), | |
e(window).trigger("gptMgr.headerBiddingRefreshStart"), | |
void 0 !== t && null !== t || (t = window.googletag.pubads().getSlots()); | |
var i = function(t) { | |
return function() { | |
window.index_headertag_lightspeed.set_slot_targeting(t), | |
e(window).trigger("gptMgr.headerBiddingRefreshEnd"), | |
window.googletag.pubads().refresh(t, n || {}), | |
o.log("gpt::headerBidding.refresh", "Header bidding refresh() completed") | |
} | |
}(t); | |
window.index_headertag_lightspeed.add_session_end_hook(i, !0), | |
window.index_headertag_lightspeed.refresh() | |
} | |
}, | |
resetPosition: function(e) { | |
"number" != typeof e && (e = 1), | |
f = e | |
}, | |
setLocation: function(e) { | |
window.googletag.pubads().setLocation(e) | |
} | |
} | |
}), | |
define("managers/client-storage", ["jquery", "utils/cookie"], function(e, t) { | |
function n(e) { | |
var n = null; | |
return n = !r() || o.forceCookies || e ? t.read(o.dataNamespace + (e ? o.sessionSuffix : o.permanentSuffix)) || null : localStorage.getItem(o.dataNamespace) || null, | |
JSON.parse(n) || {} | |
} | |
function i(e, n) { | |
var i = JSON.stringify(e); | |
!r() || o.forceCookies || n ? n ? t.write(o.dataNamespace + o.sessionSuffix, i) : t.write(o.dataNamespace + o.permanentSuffix, i, { | |
expires: 365 | |
}) : localStorage.setItem(o.dataNamespace, i) | |
} | |
function r() { | |
var e = !1; | |
if ("undefined" != typeof Storage) | |
try { | |
localStorage.setItem("test", 0), | |
localStorage.removeItem("test"), | |
e = !0 | |
} catch (e) {} | |
return e | |
} | |
var o = { | |
dataNamespace: "cnetSettings", | |
forceCookies: !1, | |
permanentSuffix: "Permanent", | |
sessionSuffix: "Session" | |
}; | |
return { | |
init: function(t) { | |
e.extend(!0, o, t) | |
}, | |
read: function(e, t) { | |
return t = t || !1, | |
n(t)[e] | |
}, | |
write: function(e, t, r) { | |
r = r || !1; | |
var o = n(r); | |
o[e] = t, | |
i(o, r) | |
}, | |
erase: function(e, t) { | |
t = t || !1; | |
var r = n(t); | |
delete r[e], | |
i(r, t) | |
} | |
} | |
}), | |
window.Modernizr = function(e, t, n) { | |
function i(e, t) { | |
return typeof e === t | |
} | |
var r, o, a = {}, s = t.documentElement, l = "modernizr", d = t.createElement(l), c = d.style, u = " -webkit- -moz- -o- -ms- ".split(" "), p = {}, f = [], g = f.slice, h = function(e, n, i, r) { | |
var o, a, d, c, u = t.createElement("div"), p = t.body, f = p || t.createElement("body"); | |
if (parseInt(i, 10)) | |
for (; i--; ) | |
d = t.createElement("div"), | |
d.id = r ? r[i] : l + (i + 1), | |
u.appendChild(d); | |
return o = ["­", '<style id="s', l, '">', e, "</style>"].join(""), | |
u.id = l, | |
(p ? u : f).innerHTML += o, | |
f.appendChild(u), | |
p || (f.style.background = "", | |
f.style.overflow = "hidden", | |
c = s.style.overflow, | |
s.style.overflow = "hidden", | |
s.appendChild(f)), | |
a = n(u, e), | |
p ? u.parentNode.removeChild(u) : (f.parentNode.removeChild(f), | |
s.style.overflow = c), | |
!!a | |
}, m = {}.hasOwnProperty; | |
o = i(m, "undefined") || i(m.call, "undefined") ? function(e, t) { | |
return t in e && i(e.constructor.prototype[t], "undefined") | |
} | |
: function(e, t) { | |
return m.call(e, t) | |
} | |
, | |
Function.prototype.bind || (Function.prototype.bind = function(e) { | |
var t = this; | |
if ("function" != typeof t) | |
throw new TypeError; | |
var n = g.call(arguments, 1) | |
, i = function() { | |
if (this instanceof i) { | |
var r = function() {}; | |
r.prototype = t.prototype; | |
var o = new r | |
, a = t.apply(o, n.concat(g.call(arguments))); | |
return Object(a) === a ? a : o | |
} | |
return t.apply(e, n.concat(g.call(arguments))) | |
}; | |
return i | |
} | |
), | |
p.touch = function() { | |
var n; | |
return "ontouchstart"in e || e.DocumentTouch && t instanceof DocumentTouch ? n = !0 : h(["@media (", u.join("touch-enabled),("), l, ")", "{#modernizr{top:9px;position:absolute}}"].join(""), function(e) { | |
n = 9 === e.offsetTop | |
}), | |
n | |
} | |
; | |
for (var y in p) | |
o(p, y) && (r = y.toLowerCase(), | |
a[r] = p[y](), | |
f.push((a[r] ? "" : "no-") + r)); | |
return a.addTest = function(e, t) { | |
if ("object" == typeof e) | |
for (var n in e) | |
o(e, n) && a.addTest(n, e[n]); | |
else { | |
if (e = e.toLowerCase(), | |
void 0 !== a[e]) | |
return a; | |
t = "function" == typeof t ? t() : t, | |
"undefined" != typeof enableClasses && enableClasses && (s.className += " " + (t ? "" : "no-") + e), | |
a[e] = t | |
} | |
return a | |
} | |
, | |
function(e) { | |
c.cssText = "" | |
}(), | |
d = null, | |
a._version = "2.6.2", | |
a._prefixes = u, | |
a.testStyles = h, | |
a | |
}(this, this.document), | |
define("libs/modernizr.custom-2.6.2", function() {}), | |
define("managers/device", ["jquery", "version!fly/managers/debug", "version!libs/modernizr.custom"], function(e, t) { | |
t = t.init("device"); | |
var n = { | |
desktop: "desktop", | |
mobile: "mobile" | |
} | |
, i = { | |
type: "desktop" | |
}; | |
return { | |
init: function(t) { | |
i.type = t; | |
var n = e("body"); | |
Modernizr.touch ? n.addClass("touch-enabled") : n.addClass("touch-disabled") | |
}, | |
getIosVersion: function() { | |
var e = navigator.userAgent.match(/(iPhone|iPad).* OS ([0-9_]+)/i); | |
return e && 3 === e.length && "string" == typeof e[2] ? parseFloat(e[2].replace(/_/g, ".")) : -1 | |
}, | |
getType: function() { | |
return i.type | |
}, | |
isDesktop: function() { | |
return i.type === n.desktop | |
}, | |
isMobile: function() { | |
return i.type === n.mobile | |
}, | |
isAndroid: function() { | |
return navigator.userAgent.match(/Android/i) | |
}, | |
isKindle: function() { | |
return navigator.userAgent.match(/Kindle/i) || navigator.userAgent.match(/Silk/i) | |
}, | |
isBlackBerry: function() { | |
return navigator.userAgent.match(/BB10/i) && navigator.userAgent.match(/Mobile/i) | |
}, | |
isWinPhone: function() { | |
return navigator.userAgent.match(/Windows Phone/i) | |
}, | |
isIOs: function() { | |
return !(!this.isIPhone() && !this.isIPad()) | |
}, | |
isIPhone: function() { | |
return navigator.userAgent.match(/iPhone/i) | |
}, | |
isIPad: function() { | |
return navigator.userAgent.match(/iPad/i) | |
}, | |
isChromeIos: function() { | |
return !!navigator.userAgent.match(/CriOS/i) | |
}, | |
isDesktopUserAgent: function() { | |
return !(this.isAndroid() || this.isKindle() || this.isBlackBerry() || this.isWinPhone() || this.isIPhone() || this.isIPad()) | |
}, | |
isMobileUserAgent: function() { | |
return this.isAndroid() || this.isKindle() || this.isBlackBerry() || this.isWinPhone() | |
}, | |
getClickType: function() { | |
return Modernizr.touch ? "tap" : "click" | |
}, | |
getImmediateClickType: function() { | |
return Modernizr.touch ? "touchstart" : "click" | |
} | |
} | |
}), | |
function(e) { | |
"use strict"; | |
void 0 === e && (e = {}), | |
void 0 === e.performance ? e.performance = {} : "performance"in e && e.performance && e.performance.setResourceTimingBufferSize && performance.setResourceTimingBufferSize(400), | |
e._perfRefForUserTimingPolyfill = e.performance, | |
e.performance.userTimingJsNow = !1, | |
e.performance.userTimingJsNowPrefixed = !1, | |
e.performance.userTimingJsUserTiming = !1, | |
e.performance.userTimingJsUserTimingPrefixed = !1, | |
e.performance.userTimingJsPerformanceTimeline = !1, | |
e.performance.userTimingJsPerformanceTimelinePrefixed = !1; | |
var t, n, i = [], r = [], o = null; | |
if ("function" != typeof e.performance.now) { | |
for (e.performance.userTimingJsNow = !0, | |
r = ["webkitNow", "msNow", "mozNow"], | |
t = 0; t < r.length; t++) | |
if ("function" == typeof e.performance[r[t]]) { | |
e.performance.now = e.performance[r[t]], | |
e.performance.userTimingJsNowPrefixed = !0; | |
break | |
} | |
var a = +new Date; | |
e.performance.timing && e.performance.timing.navigationStart && (a = e.performance.timing.navigationStart), | |
"function" != typeof e.performance.now && (Date.now ? e.performance.now = function() { | |
return Date.now() - a | |
} | |
: e.performance.now = function() { | |
return +new Date - a | |
} | |
) | |
} | |
var s = function() {} | |
, l = function() {} | |
, d = [] | |
, c = !1 | |
, u = !1; | |
if ("function" != typeof e.performance.getEntries || "function" != typeof e.performance.mark) { | |
for ("function" == typeof e.performance.getEntries && "function" != typeof e.performance.mark && (u = !0), | |
e.performance.userTimingJsPerformanceTimeline = !0, | |
i = ["webkit", "moz"], | |
r = ["getEntries", "getEntriesByName", "getEntriesByType"], | |
t = 0; t < r.length; t++) | |
for (n = 0; n < i.length; n++) | |
o = i[n] + r[t].substr(0, 1).toUpperCase() + r[t].substr(1), | |
"function" == typeof e.performance[o] && (e.performance[r[t]] = e.performance[o], | |
e.performance.userTimingJsPerformanceTimelinePrefixed = !0); | |
s = function(e) { | |
d.push(e), | |
"measure" === e.entryType && (c = !0) | |
} | |
; | |
var p = function() { | |
c && (d.sort(function(e, t) { | |
return e.startTime - t.startTime | |
}), | |
c = !1) | |
}; | |
if (l = function(e, n) { | |
for (t = 0; t < d.length; ) | |
d[t].entryType !== e || void 0 !== n && d[t].name !== n ? t++ : d.splice(t, 1) | |
} | |
, | |
"function" != typeof e.performance.getEntries || u) { | |
var f = e.performance.getEntries; | |
e.performance.getEntries = function() { | |
p(); | |
var t = d.slice(0); | |
return u && f && (Array.prototype.push.apply(t, f.call(e.performance)), | |
t.sort(function(e, t) { | |
return e.startTime - t.startTime | |
})), | |
t | |
} | |
} | |
if ("function" != typeof e.performance.getEntriesByType || u) { | |
var g = e.performance.getEntriesByType; | |
e.performance.getEntriesByType = function(n) { | |
if (void 0 === n || "mark" !== n && "measure" !== n) | |
return u && g ? g.call(e.performance, n) : []; | |
"measure" === n && p(); | |
var i = []; | |
for (t = 0; t < d.length; t++) | |
d[t].entryType === n && i.push(d[t]); | |
return i | |
} | |
} | |
if ("function" != typeof e.performance.getEntriesByName || u) { | |
var h = e.performance.getEntriesByName; | |
e.performance.getEntriesByName = function(n, i) { | |
if (i && "mark" !== i && "measure" !== i) | |
return u && h ? h.call(e.performance, n, i) : []; | |
void 0 !== i && "measure" === i && p(); | |
var r = []; | |
for (t = 0; t < d.length; t++) | |
void 0 !== i && d[t].entryType !== i || d[t].name === n && r.push(d[t]); | |
return u && h && (Array.prototype.push.apply(r, h.call(e.performance, n, i)), | |
r.sort(function(e, t) { | |
return e.startTime - t.startTime | |
})), | |
r | |
} | |
} | |
} | |
if ("function" != typeof e.performance.mark) { | |
for (e.performance.userTimingJsUserTiming = !0, | |
i = ["webkit", "moz", "ms"], | |
r = ["mark", "measure", "clearMarks", "clearMeasures"], | |
t = 0; t < r.length; t++) | |
for (n = 0; n < i.length; n++) | |
o = i[n] + r[t].substr(0, 1).toUpperCase() + r[t].substr(1), | |
"function" == typeof e.performance[o] && (e.performance[r[t]] = e.performance[o], | |
e.performance.userTimingJsUserTimingPrefixed = !0); | |
var m = {}; | |
"function" != typeof e.performance.mark && (e.performance.mark = function(t) { | |
var n = e.performance.now(); | |
if (void 0 === t) | |
throw new SyntaxError("Mark name must be specified"); | |
if (e.performance.timing && t in e.performance.timing) | |
throw new SyntaxError("Mark name is not allowed"); | |
m[t] || (m[t] = []), | |
m[t].push(n), | |
s({ | |
entryType: "mark", | |
name: t, | |
startTime: n, | |
duration: 0 | |
}) | |
} | |
), | |
"function" != typeof e.performance.clearMarks && (e.performance.clearMarks = function(e) { | |
e ? m[e] = [] : m = {}, | |
l("mark", e) | |
} | |
), | |
"function" != typeof e.performance.measure && (e.performance.measure = function(t, n, i) { | |
var r = e.performance.now(); | |
if (void 0 === t) | |
throw new SyntaxError("Measure must be specified"); | |
if (!n) | |
return void s({ | |
entryType: "measure", | |
name: t, | |
startTime: 0, | |
duration: r | |
}); | |
var o = 0; | |
if (e.performance.timing && n in e.performance.timing) { | |
if ("navigationStart" !== n && 0 === e.performance.timing[n]) | |
throw new Error(n + " has a timing of 0"); | |
o = e.performance.timing[n] - e.performance.timing.navigationStart | |
} else { | |
if (!(n in m)) | |
throw new Error(n + " mark not found"); | |
o = m[n][m[n].length - 1] | |
} | |
var a = r; | |
if (i) | |
if (a = 0, | |
e.performance.timing && i in e.performance.timing) { | |
if ("navigationStart" !== i && 0 === e.performance.timing[i]) | |
throw new Error(i + " has a timing of 0"); | |
a = e.performance.timing[i] - e.performance.timing.navigationStart | |
} else { | |
if (!(i in m)) | |
throw new Error(i + " mark not found"); | |
a = m[i][m[i].length - 1] | |
} | |
s({ | |
entryType: "measure", | |
name: t, | |
startTime: o, | |
duration: a - o | |
}) | |
} | |
), | |
"function" != typeof e.performance.clearMeasures && (e.performance.clearMeasures = function(e) { | |
l("measure", e) | |
} | |
) | |
} | |
"undefined" != typeof define && define.amd ? define("libs/usertiming-0.1.6", [], function() { | |
return e.performance | |
}) : "undefined" != typeof module && void 0 !== module.exports && (module.exports = e.performance) | |
}("undefined" != typeof window ? window : void 0), | |
define("utils/function-natives", ["version!libs/usertiming"], function() { | |
Function.prototype.bind || (Function.prototype.bind = function(e) { | |
var t = this | |
, n = arguments.length > 1 ? arguments.slice(1) : null | |
, i = function() {} | |
, r = function() { | |
var o = e | |
, a = arguments.length; | |
this instanceof r && (i.prototype = t.prototype, | |
o = new i); | |
var s = n || a ? t.apply(o, n && a ? n.concat(arguments.slice()) : n || arguments) : t.call(o); | |
return o == e ? s : o | |
}; | |
return r | |
} | |
), | |
Array.prototype.find || (Array.prototype.find = function(e) { | |
if (null === this) | |
throw new TypeError("Array.prototype.find called on null or undefined"); | |
if ("function" != typeof e) | |
throw new TypeError("predicate must be a function"); | |
for (var t, n = Object(this), i = n.length >>> 0, r = arguments[1], o = 0; o < i; o++) | |
if (t = n[o], | |
e.call(r, t, o, n)) | |
return t | |
} | |
) | |
}), | |
define("components/ad-controller", ["jquery", "version!fly/managers/debug", "version!fly/managers/components", "utils/cookie", "utils/date", "managers/edition", "version!fly/managers/gpt", "managers/page-vars", "managers/global-functions", "version!fly/utils/string-helper", "utils/targeting-helper", "version!fly/utils/url-helper", "managers/client-storage", "managers/device", "managers/mpulse", "utils/ad-repositioner", "version!fly/components/base", "utils/function-natives"], function(e, t, n, i, r, o, a, s, l, d, c, u, p, f, g, h) { | |
t = t.init("adController"), | |
e.widget("cnet.adController", e.fly.base, { | |
options: { | |
adCookieName: "cnet_ad", | |
numOfSubsessions: 6, | |
pageViewCookieName: "pv" | |
}, | |
adsLoaded: !1, | |
adTagLoaded: !1, | |
postAdsLoaded: !1, | |
adLoadCount: 0, | |
globalCallbacks: { | |
blankAdCallback: function(n, i, r) { | |
t.log("blank ad - w: ", n, " h: ", i), | |
"nav" === r && (t.log("blank nav ad present"), | |
adDiv = e('[data-ad="nav-ad"]'), | |
adDiv.hide()), | |
271 == i && 271 == n && "top" == r && (t.log("blank replay ad present"), | |
adDiv = e(".fullListing .ad-replay-square-top"), | |
adDiv.hide(), | |
adDiv.removeClass("col-3"), | |
e("div[data-replay-ad=replay-square-top] .third").show(), | |
window.replayBlankFlag = !0), | |
11 == i && 501 == n && (t.log("blank sponsored_search_top ad present"), | |
e("#carFinderMakesEtcTxt").css("visibility", "visible"), | |
e("#carFinderModelEtcTxt").css("visibility", "visible"), | |
e("#suggestedSearchItems").css("visibility", "visible")) | |
} | |
}, | |
gptCallbacks: { | |
dealsTileCallback: function(t, n) { | |
e("#" + t).addClass("ready") | |
}, | |
dynamicTextLinkCallback: function(t, n) { | |
e("#" + t).addClass("ready") | |
}, | |
flexLeaderPlusIncontentBottomCallback: function(t, n) { | |
var i = e("#" + t); | |
n.size && n.size.length >= 2 && i.addClass("adSize-" + n.size[0] + "x" + n.size[1]) | |
}, | |
hptoCallback: function(e, t) { | |
this._captureAdRender(e, t, "hpto") | |
}, | |
inlineProductCarouselTopCallback: function(i, r) { | |
if (n.process(e("#" + i)), | |
"product_main" == s.tracking.data.pageType) | |
try { | |
s.ads.data.gpt.adConfig.adUnits.inlineProductCarouselTop.delayLoad = !0 | |
} catch (e) { | |
t.error("Failed to delay incontent ad loading.", e) | |
} | |
}, | |
intromercialCallback: function(e, t) { | |
this._captureAdRender(e, t, "intromercial") | |
}, | |
leaderMiddleCallback: function(t, n) { | |
var i = e("#" + t); | |
if (("front_door" === s.ads.data.gpt.targeting.ptype && "roadshow" == s.tracking.data.brand || "collection_door" === s.ads.data.gpt.targeting.ptype && "cnet" == s.tracking.data.brand && i.closest(".featureLatest").length > 0) && "none" !== i.css("display")) { | |
var r = e("[data-component*=loadMore]").loadMore("option"); | |
r.data.limit = r.data.limit - 1, | |
e("[data-component*=loadMore]").loadMore("option", r) | |
} | |
}, | |
leaderPlusMantleCallback: function(t, n) { | |
this._captureAdRender(t, n, "leaderPlusMantle"), | |
e(".ad-leader-plus-mantle").css("margin", "20px auto") | |
}, | |
leaderTopCallback: function(n, i) { | |
if ("gallery" === s.tracking.data.testName && "control" !== s.tracking.data.testGroup && i.size && i.size.length >= 2) { | |
var r = 66 === i.size[1] ? "shortLeader" : "tallLeader"; | |
e("body").addClass(r) | |
} | |
this._captureAdRender(n, i, "leaderTop"), | |
t.log("leaderTop callback"), | |
e(window).resize() | |
}, | |
leaderboardTopPlusCallback: function(e, t) { | |
this._captureAdRender(e, t, "leaderPlusTop") | |
}, | |
mobileBannerCallback: function(e, t) { | |
this._captureAdRender(e, t, "mobileBanner") | |
}, | |
mobileReplayWideInc: function(e, t) { | |
this._captureAdRender(e, t, "mobileReplayWideInc") | |
}, | |
mobileReplayWidePlusCallBack: function(t, n) { | |
"none" !== e("#" + t).css("display") && "front_door" === s.ads.data.gpt.targeting.ptype && "roadshow" == s.tracking.data.brand && e(".featureLatest.reviews .last .tileBlock").hide() | |
}, | |
mobileSponsoredLogoCallback: function(t, n) { | |
e("#" + t).addClass("ready") | |
}, | |
mpuBottomCallback: function(e, t) { | |
this._captureAdRender(e, t, "mpuBottom") | |
}, | |
mpuTopCallback: function(e, t) { | |
this._captureAdRender(e, t, "mpuTop") | |
}, | |
mpuPlusTopCallback: function(e, t) { | |
this._captureAdRender(e, t, "mpuPlusTop") | |
}, | |
mpuMiddleCallback: function(t, n) { | |
this._captureAdRender(t, n, "mpuMiddle"); | |
var i = e("#autoManufacturerListing #" + t).parent(); | |
if (i.length) { | |
var r = i.index() + 1; | |
r % 3 == 1 ? ($prevItem = i.prev(), | |
$prevItemClone = $prevItem.clone(), | |
i.after($prevItemClone), | |
$prevItem.remove()) : r % 3 == 2 && ($nextItem = i.next(), | |
$nextItemClone = $nextItem.clone(), | |
i.before($nextItemClone), | |
$nextItem.remove()) | |
} | |
var i = e("#topic-grid-container #" + t).parent(); | |
if (i.length) { | |
var r = i.index() + 1; | |
if (r % 4 == 1) | |
$prevItem = i.prev(), | |
$prevItemClone = $prevItem.clone(), | |
i.after($prevItemClone), | |
$prevItem.remove(); | |
else if (r % 4 == 2) | |
for (var o = 0; o < 2; o++) | |
$prevItem = i.prev(), | |
$prevItemClone = $prevItem.clone(), | |
i.after($prevItemClone), | |
$prevItem.remove(); | |
else | |
r % 4 == 3 && ($nextItem = i.next(), | |
$nextItemClone = $nextItem.clone(), | |
i.before($nextItemClone), | |
$nextItem.remove()) | |
} | |
var a = e("#" + t); | |
if (("front_door" === s.ads.data.gpt.targeting.ptype && "roadshow" == s.tracking.data.brand || "collection_door" === s.ads.data.gpt.targeting.ptype && "cnet" == s.tracking.data.brand && a.closest(".featureLatest").length > 0) && "none" !== a.css("display")) { | |
var l = e("[data-component*=loadMore]").loadMore("option"); | |
l.data.limit = l.data.limit + 1, | |
e("[data-component*=loadMore]").loadMore("option", l) | |
} | |
}, | |
mpuMiddle2Callback: function(e, t) { | |
this._captureAdRender(e, t, "mpuMiddle2") | |
}, | |
mpuMiddle3Callback: function(e, t) { | |
this._captureAdRender(e, t, "mpuMiddle3") | |
}, | |
nativeCompareCallback: function(t, n) { | |
var i = e("#" + t); | |
"none" !== i.css("display") && e(".scoreCard .topProductsComponent .topProduct").length > 3 ? e(".scoreCard .topProductsComponent .topProduct:last-of-type").hide() : "none" !== i.css("display") && e(".relatedProducts .topProductsComponent .topProduct.last").length > 0 && e(".relatedProducts .topProductsComponent .topProduct.last").hide() | |
}, | |
nativeThisweekoncnetCallback: function(t, n) { | |
var i = e("#" + t); | |
"none" !== i.css("display") && i.parent().find(".col-2.third").hide(), | |
this._captureAdRender(t, n, "nativeThisweekoncnet") | |
}, | |
nativeTocCallBack: function(t, n) { | |
var i = e("#" + t); | |
"none" !== i.css("display") && e(".tocNav ul").css("height", "calc(100% - " + i.outerHeight() + "px)") | |
}, | |
replaySquareCallBack: function(n, i) { | |
var r = e(".fullListing .ad-replay-square-top"); | |
if (e(".fullListing .riverPost.third").length && !window.replayBlankFlag) { | |
t.log("ADS: replay ad present"); | |
var o = r.attr("class"); | |
r.removeClass(), | |
r.addClass("col-3 riverPost " + o), | |
"front_door" === s.ads.data.gpt.targeting.ptype && "cnet" == s.tracking.data.slug ? e("div[data-replay-ad=replay-square-top] .third").hide() : e("div[data-replay-ad=replay-square-top] .third").addClass("wide"), | |
delete window.replayBlankFlag | |
} | |
}, | |
replayWideTopCallback: function(t, n) { | |
var i = e("#" + t); | |
"none" !== i.css("display") ? (e(".item:last-child", i.closest(".fullWidthSixAssets")).hide(), | |
"front_door" === s.ads.data.gpt.targeting.ptype && "roadshow" == s.tracking.data.brand && (i.closest(".featureLatest").find(".tileBlock").last().remove(), | |
this._updateLoadmoreLastAsset(), | |
this._updateLoadmoreOffset(-1)), | |
"section_door" === s.ads.data.gpt.targeting.ptype && "roadshow" == s.tracking.data.brand && "news" == s.ads.data.gpt.targeting.section && (i.closest(".autoNewsRiver").find(".tileBlock").last().remove(), | |
this._updateLoadmoreOffset(-1)), | |
"collection_door" === s.ads.data.gpt.targeting.ptype && "roadshow" == s.tracking.data.brand && (i.closest(".adWrap").show(), | |
i.closest(".featureLatest").find(".tileBlock").last().remove(), | |
this._updateLoadmoreLastAsset(), | |
this._updateLoadmoreOffset(-1))) : i.parent().hasClass("slide") && i.parent().attr("data-item", "") | |
}, | |
replayWideBottomCallback: function(t, n) { | |
var i = e("#" + t); | |
if ("none" == i.css("display") && (i.parent().hasClass("slide") && i.parent().attr("data-item", ""), | |
i.parent().hasClass("bestListNativeWrapper") && i.parent().remove(), | |
"front_door" === s.ads.data.gpt.targeting.ptype && "roadshow" == s.tracking.data.brand && i.closest(".slide").hide()), | |
"none" !== i.css("display") && "front_door" === s.ads.data.gpt.targeting.ptype && "roadshow" == s.tracking.data.brand) { | |
var r = i.closest(".carousel"); | |
r.find(".canvas").first().prepend(r.find(".slide").last()), | |
r.hasClass("even") ? r.removeClass("even").addClass("odd") : r.removeClass("odd").addClass("even") | |
} | |
}, | |
sharebarCallback: function(e, t) { | |
this._captureAdRender(e, t, "socialLogoBottom") | |
}, | |
sponsoredLogoTopCallback: function(t, n) { | |
e("#" + t).addClass("ready") | |
}, | |
videoThumbnailTopCallback: function(n, i) { | |
var r = e("#" + n); | |
"none" !== r.css("display") && (r.siblings(".videoWrapper").addClass("videoThumbnailAd"), | |
e(window).trigger("resize"), | |
e(".videoPromoContainer .sponsoredContentHeader").css("display", "block")), | |
r.length > 0 && "none" === r.css("display") ? (r.parent(".video").remove(), | |
r.next(".altContent").removeClass("altContent"), | |
r.parent().addClass("ad-hidden"), | |
s.ads.data.gpt.adDivIds = e.grep(s.ads.data.gpt.adDivIds, function(e) { | |
return e !== n | |
}), | |
t.info("Removing ad " + n + " via callback - no creative scheduled.")) : r.parent().removeClass("showcase-video"), | |
e("#video-gallery").length > 0 && 0 == e("body.auto").length && r.parent().siblings(":last").remove() | |
}, | |
omnibarTopCallback: function(t, n) { | |
this._captureAdRender(t, n, "omnibarTop"); | |
var i = s.ads.data.gpt.adConfig.adUnits.omnibarTop | |
, r = e("#" + t) | |
, o = !1; | |
"none" !== r.css("display") && (document.body.className += " omnibar"); | |
var a = function(e) { | |
i.crawlAdPresent = e, | |
r.trigger("adContentModified") | |
} | |
, l = setInterval(function() { | |
if (r.length > 0) { | |
var e = r.children("div").children("div"); | |
e.length > 0 ? (o = "fixed" == e.css("position") && "0px" == e.css("bottom"), | |
i.crawlAdPresent !== o && a(o)) : i.crawlAdPresent && (a(!1), | |
clearInterval(l)) | |
} else | |
a(!1), | |
clearInterval(l) | |
}, 500) | |
}, | |
flexIncontentAdPlusBillboardTopCallback: function(t, n) { | |
var i = e("#" + t); | |
i.hasClass("full-width-ad") || (e(window).on("resize", function() { | |
i.width(window.document.body.clientWidth); | |
var e = i.offset(); | |
e.left = 0, | |
i.offset(e) | |
}), | |
e(window).trigger("resize")) | |
} | |
}, | |
_create: function() { | |
var n = this; | |
l.gdprConsentCallback("ad_controller_create", function() { | |
n._setup(), | |
n._setupPageSpecificConfigs(), | |
n._setupCallbacks(), | |
n.setupTargeting(); | |
try { | |
a.init(s.ads.data.gpt) | |
} catch (e) { | |
t.error("GPT Manager threw an exception:", e) | |
} | |
if (n._repositionAds(), | |
!n.adsLoaded && !n.postAdsLoaded) { | |
var i = 0 < e("[data-component=videoPlayer]").length | |
, r = !("off" === u.getParam("autoplayEnabled") || "off" === p.read("autoplayEnabled")); | |
if ("article" === s.pageType && "desktop" === s.device && i && r) { | |
var o = s.tracking.data.testGroup | |
, l = s.tracking.data.testName | |
, c = ["dynamic-text-link-top", "dynamic-text-link-bottom", "inpage-video-top"]; | |
"ad_priority" === l && "control" !== o && c.push("nav-ad", "intromercial", "leader-top", "mpu-plus-top", "flex-leader-plus-incontent-bottom", "dynamic-text-link-top", "dynamic-text-link-bottom"), | |
e.each(c, function(e, t) { | |
var n = d.toCamelCase(t, "-"); | |
s.ads.data.gpt.adConfig.adUnits[n] && (s.ads.data.gpt.adConfig.adUnits[n].delayLoad = !0) | |
}), | |
t.log("Load non-delayed ads immediately"), | |
n.loadImproved(), | |
n.adsLoaded = !0; | |
var f = function() { | |
n.refreshImproved({ | |
containerId: s.ads.data.gpt.containerId, | |
adData: s.ads.data, | |
adUnitNames: c, | |
gptOptions: { | |
changeCorrelator: !1 | |
}, | |
reset: !1 | |
}), | |
n.postAdsLoaded = !0 | |
}; | |
if (s.video && s.video.performance && (s.video.performance.adstart || s.video.performance.contentstart)) | |
t.log("Load delayed ads; video player already loaded"), | |
f(); | |
else { | |
var g = "cnet_video.adstart cnet_video.contentstart cnet_video.error"; | |
"ad_priority" === l && "a" === o && (g = "cnet_video.playerloaded cnet_video.error"), | |
e(window).on(g, function() { | |
n.postAdsLoaded || (t.log("Load delayed ads on " + g), | |
t.log("Delayed ads", c), | |
f()) | |
}) | |
} | |
} else | |
t.info("Load display ads regardless of cnet_video"), | |
n.loadImproved(), | |
n.adsLoaded = !0 | |
} | |
}) | |
}, | |
_setupPageSpecificConfigs: function() { | |
var n = this; | |
if ("article" == s.tracking.data.pageType) | |
try { | |
"split" == u.getParam("ftag") ? (t.info("Setup second batch of ads for article page"), | |
s.ads.data.gpt.adConfig.adUnits.leaderBottom.delayLoad = !0, | |
s.ads.data.gpt.adConfig.adUnits.mpuBottom.delayLoad = !0, | |
s.ads.data.gpt.adConfig.adUnits.dynamicTextLinkTop.delayLoad = !0, | |
s.ads.data.gpt.adConfig.adUnits.infoBoardTop.delayLoad = !0, | |
s.ads.data.gpt.adConfig.adUnits.omnibarTop.delayLoad = !0) : t.log("not the right ftag for article ad load split") | |
} catch (e) { | |
t.error("Failed to delay batch ads loading.", e) | |
} | |
if ("section_door" === s.ads.data.gpt.targeting.ptype && "news" === s.ads.data.gpt.targeting.section) | |
try { | |
s.ads.data.gpt.adConfig.adUnits.leaderPlusTop.delayLoad = !0 | |
} catch (e) { | |
t.error("Failed to delay leaderboard ad loading.", e) | |
} | |
if ("video_page" === s.pageType && "mobile" === s.device && f.getIosVersion() >= 10 && !f.isChromeIos()) | |
try { | |
t.log("Delay display ads on mobile video_page"); | |
var i = ["hpto", "mobile-banner", "mobile-mpu"]; | |
s.ads.data.gpt.adConfig.adUnits.hpto.delayLoad = !0, | |
s.ads.data.gpt.adConfig.adUnits.mobileBanner.delayLoad = !0, | |
s.ads.data.gpt.adConfig.adUnits.mobileMpu.delayLoad = !0; | |
var r = { | |
containerId: s.ads.data.gpt.containerId, | |
adData: s.ads.data, | |
adUnitNames: i, | |
gptOptions: { | |
changeCorrelator: !1 | |
}, | |
reset: !1 | |
}; | |
s.video && s.video.performance && (s.video.performance.adstart || s.video.performance.contentstart) ? (t.log("Mobile video page: Load delayed ads; video player already loaded"), | |
n.refreshImproved(r)) : e(window).one("cnet_video.adstart cnet_video.contentstart", function() { | |
t.log("Mobile video page: Load delayed ads on cnet_video.adstart cnet_video.contentstart"), | |
n.refreshImproved(r) | |
}) | |
} catch (e) { | |
t.error("Failed to delay display ads on mobile video_page", e) | |
} | |
}, | |
_setupCallbacks: function() { | |
var n = this; | |
e.each(this.globalCallbacks, function(e, t) { | |
window[e] = t.bind(n) | |
}), | |
e.each(this.gptCallbacks, function(e, i) { | |
try { | |
a.registerCallback(e, i.bind(n)) | |
} catch (e) { | |
t.error("GPT Manager threw an exception:", e) | |
} | |
}), | |
window.CbsMoatListener = this.moatCallbackForMpulse.bind(n) | |
}, | |
moatCallbackForMpulse: function(e) { | |
try { | |
"Impression Analyzed" === e.event && 1 === this.adLoadCount && (void 0 === window.performance.getEntriesByName("ad_fully_loaded")[0] && window.performance.mark("cnet_ad_fully_loaded"), | |
g.sendBeacon("ad_fully_loaded", window.performance.now())) | |
} catch (e) { | |
t.error("moatCallbackForMpulse exception:", e) | |
} | |
}, | |
_setMoatCallbackTargeting: function() { | |
var t = e("[data-ad=leader-top], [data-ad=leader-plus-top], [data-ad=leader-plus-incontent-top], [data-ad=leader-plus-mantle], [data-ad=mobile-banner-top], [data-ad=mobile-banner], [data-ad=mobile-banner-plus]") | |
, n = (t.first().data("ad") || "").replace(/-([a-z])/g, function(e) { | |
return e[1].toUpperCase() | |
}) | |
, i = s.ads.data.gpt.adConfig.adUnits[n]; | |
i && "article" === s.tracking.data.pageType && (i.customTargeting ? i.customTargeting.moatimp = 1 : i.customTargeting = { | |
moatimp: 1 | |
}) | |
}, | |
setupTargeting: function() { | |
var t = { | |
region: this._getAdRegion(), | |
targeting: { | |
session: this._selectSessionGroup(), | |
subses: this._selectSubsessionGroup(), | |
vguid: s.guid | |
} | |
}; | |
s.ads.data.gpt = e.extend(!0, s.ads.data.gpt, t, this._getCookieTargeting(t), this._getUserTargeting(), this._getQueryTargeting()), | |
this._setMoatCallbackTargeting(), | |
this._setupAdSuppression() | |
}, | |
_getAdRegion: function() { | |
var e = s.ads.data.gpt.adConfig | |
, t = e.defaultRegion | |
, n = i.read("fly_geo") ? JSON.parse(i.read("fly_geo")) : ""; | |
if (n && n.countryCode) | |
for (var r = e.regions, o = 0; o < r.length; o++) | |
for (var a = r[o], l = 0; l < a.countries.length; l++) | |
a.countries[l] === n.countryCode && (t = a.region); | |
return t | |
}, | |
_selectSessionGroup: function() { | |
var e = "abcd"; | |
return e.charAt(Math.floor(Math.random() * e.length)) | |
}, | |
_selectSubsessionGroup: function() { | |
return Math.ceil(Math.random() * this.options.numOfSubsessions).toString() | |
}, | |
_getCookieTargeting: function(e) { | |
var n = i.read(this.options.adCookieName) ? JSON.parse(i.read(this.options.adCookieName)) : null | |
, s = i.read(this.options.adCookieName + "_ftag") | |
, l = i.read("bm_last_load_status") ? i.read("bm_last_load_status") : null | |
, d = i.read("bm_cnet") ? i.read("bm_cnet") : null | |
, c = null | |
, u = null; | |
if (i.read("il_geo")) | |
try { | |
u = JSON.parse(i.read("il_geo")) | |
} catch (e) { | |
t.error("il_geo cookie has incorrect format:", e) | |
} | |
var p = i.read(this.options.pageViewCookieName) || 0; | |
window.I10C && window.I10C.MorphState && (c = window.I10C.MorphState); | |
var f = { | |
region: null, | |
targeting: { | |
session: null, | |
subses: null | |
} | |
}; | |
n || (n = { | |
region: e.region, | |
session: e.targeting.session, | |
subSession: e.targeting.subses, | |
type: "gpt" | |
}, | |
i.write(this.options.adCookieName, JSON.stringify(n))), | |
n && (f.region = o.isEspanol() ? "es" : n.region, | |
f.targeting.session = n.session, | |
f.targeting.subses = n.subSession), | |
s && (f.targeting.ftag = s), | |
l && (f.targeting.st = [], | |
l = "BLOCKING" == l ? "1" : "0", | |
f.targeting.st.push(l)), | |
"unblocked" === c && u && (f.targeting.geo = u.country_code ? "il_" + u.country_code.toLowerCase() : null, | |
f.targeting.loc = "il_" + u.dma_code, | |
a.setLocation(u.postal_code + ", " + u.country_code)), | |
d && (f.targeting.akb = d.replace("-", ",")), | |
p++, | |
f.targeting.pv = "" + p; | |
var g = new Date | |
, h = Date.UTC(g.getUTCFullYear(), g.getUTCMonth(), g.getUTCDate(), r.isEDT(g) ? 4 : 5); | |
return h += h > g.getTime() ? 0 : 864e5, | |
i.write(this.options.pageViewCookieName, p, { | |
expires: new Date(h) | |
}), | |
f | |
}, | |
_getUserTargeting: function() { | |
var e = c.getAdUserGroups(); | |
return e.length > 0 ? { | |
targeting: { | |
userGroup: e | |
} | |
} : null | |
}, | |
_getQueryTargeting: function() { | |
var t = this | |
, n = { | |
slotVars: {}, | |
targeting: {} | |
}; | |
return e.each(u.getAllParams(), function(e, r) { | |
var o = e.match(/adTargeting_(.+)/) | |
, a = e.match(/ad(.+)/); | |
if (o && o[1]) | |
n.targeting[o[1]] = r; | |
else if ("adNetwork" === e) | |
n.slotVars.network = r; | |
else if (a && a[1]) { | |
var s = a[1].toLowerCase(); | |
"region" === s ? n[s] = r : n.targeting[s] = r | |
} else | |
"ftag" === e ? (n.targeting.ftag = r, | |
i.write(t.options.adCookieName + "_ftag", r)) : "vndid" === e && (n.targeting.vndid = r) | |
}), | |
n | |
}, | |
removeAds: function(e, n, i, r) { | |
if (r) { | |
t.info("Page is requesting to permanently destroy ads for container " + e, n, i); | |
try { | |
a.destroyAdSlots(e, n, i) | |
} catch (e) { | |
t.error("GPT Manager threw an exception:", e) | |
} | |
} else { | |
t.info("Page is requesting to clear/reset ads for container " + e, n, i); | |
try { | |
a.clearAdSlots(e, n, i) | |
} catch (e) { | |
t.error("GPT Manager threw an exception:", e) | |
} | |
} | |
}, | |
_monitorPerformance: function() { | |
var n; | |
this.adLoadCount++, | |
s.ads.timers = s.ads.timers || {}; | |
try { | |
window.performance.mark("cnet_fetch_ads"), | |
n = Math.round(window.performance.now()), | |
s.ads.timers.fetchAds = { | |
timer: n | |
}, | |
s.tracking.data.fetchAdsTimer = n, | |
t.info("fetch_ads fired at: " + n + "ms") | |
} catch (e) { | |
t.error("fetch_ads performance timers failed") | |
} | |
e(window).on("gptMgr.headerBiddingDisplayStart, gptMgr.headerBiddingRefreshStart", function(e) { | |
try { | |
s.ads.timers.headerBidding = s.ads.timers.headerBidding || {}; | |
var n = s.ads.timers.headerBidding; | |
e.data && e.data.adDivId && (n[e.data.adDivId] = {}), | |
window.performance.mark("cnet_header_bidding_init"), | |
n.init = Math.round(window.performance.now()), | |
t.info("header_bidding_init fired at: " + n.init + "ms") | |
} catch (e) { | |
t.error("header_bidding_init performance timers failed") | |
} | |
}), | |
e(window).on("gptMgr.headerBiddingDisplayEnd, gptMgr.headerBiddingRefreshEnd", function(e) { | |
s.ads.timers.headerBidding = s.ads.timers.headerBidding || {}; | |
var i = s.ads.timers.headerBidding; | |
e.data && e.data.adDivId && (i[e.data.adDivId] = {}); | |
try { | |
window.performance.mark("cnet_header_bidding_complete"), | |
n = Math.round(window.performance.now()), | |
s.ads.timers.headerBidding.complete = n, | |
t.info("header_bidding_complete fired at: " + n + "ms") | |
} catch (e) { | |
t.error("header_bidding_complete performance timers failed") | |
} | |
}) | |
}, | |
_repositionAds: function() { | |
h.reposition({ | |
pagetype: s.tracking.data.pageType, | |
section: s.tracking.data.siteSection, | |
edition: "", | |
collection: "", | |
slug: "", | |
topic: s.tracking.data.topicId, | |
articleType: s.tracking.data.articleType, | |
brand: s.tracking.data.brand | |
}) | |
}, | |
_captureAdRender: function(n, i, r) { | |
try { | |
window.performance.mark("cnet_ad_" + r); | |
var o = Math.round(window.performance.now()); | |
if (t.info("Ad Timer: " + r + " (" + i.creativeId + ") " + o), | |
s.ads.timers = s.ads.timers || {}, | |
s.ads.timers[r] = { | |
creativeId: i.creativeId, | |
timer: o | |
}, | |
!this.adTagLoaded) { | |
var a = ["leaderTop", "leaderPlusTop", "leaderPlusIncontentTop", "leaderPlusMantle", "mobileBannerTop", "mobileBanner", "mobileBannerPlus"] | |
, l = ["article"] | |
, d = -1 < e.inArray(s.tracking.data.pageType, l) | |
, c = -1 < e.inArray(r, a); | |
d && c && (g.sendBeacon("ad_tag_loaded", o), | |
this.adTagLoaded = !0) | |
} | |
} catch (e) { | |
t.error("Failed to fully capture ad rendering data for " + n + " (creative ID " + i.creativeId + ")", e) | |
} | |
}, | |
_setupAdSuppression: function() { | |
var n = u.getParamAsArray("adSuppress"); | |
e.isArray(n) ? (s.ads.data.gpt.suppressAds = n, | |
t.info("Ads suppressed via query string", n)) : "string" == typeof (n = i.read("adSuppress")) && (n = n.split(","), | |
s.ads.data.gpt.suppressAds = n, | |
t.info("Ads suppressed via cookie", n)) | |
}, | |
_prepareLoadOrRefresh: function(n) { | |
n = n || {}, | |
n.adData && (s.ads.data = e.extend(!0, {}, n.adData), | |
s.ads.data.gpt.targeting.vguid = s.guid, | |
void 0 === s.ads.data.gpt.targeting.collection && (s.ads.data.gpt.targeting.collection = "")), | |
this.setupTargeting(); | |
try { | |
a.init(s.ads.data.gpt), | |
e.each(s.ads.data.gpt.targeting, function(e, t) { | |
a.setTargeting(e, t) | |
}) | |
} catch (e) { | |
t.error("GPT Manager threw an exception:", e) | |
} | |
}, | |
loadImproved: function(e) { | |
var n = this; | |
l.gdprConsentCallback("ad_controller_load_ads", function() { | |
e = e || {}, | |
n._prepareLoadOrRefresh(e), | |
t.info("Page is requesting to load ads."), | |
n._monitorPerformance(); | |
try { | |
a.loadAds() | |
} catch (e) { | |
t.error("GPT Manager threw an exception:", e) | |
} | |
}) | |
}, | |
refreshImproved: function(e) { | |
var n = this; | |
l.gdprConsentCallback("ad_controller_refresh_ads", function() { | |
e = e || {}, | |
n._prepareLoadOrRefresh(e), | |
t.info("Page is requesting to refresh ads for container " + e.containerId, e.adUnitNames), | |
n._monitorPerformance(); | |
try { | |
a.refresh(e.containerId, e.adUnitNames, e.targeting, e.reset, e.allowedDivIds, e.gptOptions) | |
} catch (e) { | |
t.error("GPT Manager threw an exception:", e) | |
} | |
}) | |
}, | |
_updateLoadmoreOffset: function(t) { | |
var n, i = e("[data-component*=loadMore]"); | |
void 0 === i.loadMore ? (n = i.data("loadMoreOptions"), | |
n.data.offset = n.data.offset + t, | |
i.data("loadMoreOptions", n)) : (n = i.loadMore("option"), | |
n.data.offset = n.data.offset + t, | |
i.loadMore("option", n)) | |
}, | |
_updateLoadmoreLastAsset: function() { | |
var t, n = e("[data-component*=loadMore]"); | |
void 0 === n.loadMore ? (t = n.data("loadMoreOptions"), | |
t.data.lastAssetId = t.data.secondAssetId, | |
n.data("loadMoreOptions", t)) : (t = n.loadMore("option"), | |
t.data.lastAssetId = t.data.secondAssetId, | |
n.loadMore("option", t)) | |
}, | |
resetPosition: function(e) { | |
try { | |
a.resetPosition(e) | |
} catch (e) { | |
t.error("GPT Manager threw an exception:", e) | |
} | |
} | |
}) | |
}), | |
define("managers/ad", ["managers/page-vars", "managers/global-functions", "utils/userAgentSniffer", "version!fly/managers/debug", "components/ad-controller"], function(e, t, n, i) { | |
i = i.init("adManager"); | |
var r = null | |
, o = "collection_door" === e.tracking.data.pageType && $.inArray("crave", e.tracking.data.collectionName) >= 0; | |
return n.isBot() && o && (e.ads.enabled = !1, | |
i.info("Ads automatically disabled due to bot detection.")), | |
e.ads.enabled ? (e.services.sharethrough.enabled && t.gdprConsentCallback("script_sharethrough", function() { | |
require(["sharethrough"], function() { | |
i.info("Sharethrough framework injected successfully.") | |
}) | |
}), | |
r = $.cnet.adController()) : i.info("Ads are disabled; controller initialization skipped."), | |
r | |
}), | |
define("optional", [], { | |
load: function(e, t, n) { | |
var i = function(e) { | |
var t = {}; | |
return "object" == typeof console && "function" == typeof console.info && console.info("The RequireJS Optional plugin is returning the following default response for the module: " + e, t), | |
t | |
} | |
, r = function(e) { | |
n(e) | |
}; | |
t([e], r, function(e) { | |
var n = e.requireModules && e.requireModules[0]; | |
"object" == typeof console && "function" == typeof console.error && console.error("Failed to load RequireJS module: " + n + "; the Optional plugin is handling the exception."), | |
n && (requirejs.undef(n), | |
define(n, [], function() { | |
return i(n) | |
}), | |
t([n], r)) | |
}) | |
} | |
}), | |
define("libs/require.optional-dependency", function() {}), | |
define("managers/first-paint", ["jquery", "version!fly/managers/debug", "managers/mpulse", "managers/page-vars"], function(e, t, n, i) { | |
t = t.init("firstPaint"), | |
"article" === i.pageType && window.performance && (t.log("browser supports performance API"), | |
e(document).ready(function() { | |
var e = performance.getEntriesByType("paint"); | |
e.length > 0 ? e.forEach(function(e) { | |
"first-paint" === e.name && n.sendBeacon("start_render", e.startTime) | |
}) : t.log("was not able to get paint metrics") | |
})) | |
}), | |
define("feature-disabled", function() {}), | |
require.config({ | |
paths: { | |
fly: "../bundles/flyjs/js", | |
jquery: "../bundles/flyjs/js/libs/jquery-1.8.3", | |
quantum: "../../../bundles/cnetquantum/js", | |
optional: "libs/require.optional-dependency", | |
version: "../bundles/flyjs/js/libs/require.version-1.0" | |
}, | |
baseUrl: "/js", | |
map: { | |
"*": { | |
anonc: "//dw.cbsi.com/anonc.js", | |
chartbeat: "//static.chartbeat.com/js/chartbeat.js", | |
"chartbeat-video": "//static.chartbeat.com/js/chartbeat_video.js", | |
"comscore-video": "//vidtech.cbsinteractive.com/uvpjs/2.8.3/lib/tracking/comscore/comscore.streaming.6.1.1.171219.min.js", | |
facebook: "//connect.facebook.net/en_US/all.js", | |
"facebook-debug": "//connect.facebook.net/en_US/all/debug.js", | |
"google-csa": "//www.google.com/adsense/search/async-ads.js", | |
"google-ima": "//s0.2mdn.net/instream/html5/ima3.js", | |
"google-js-api": "//apis.google.com/js/platform.js", | |
gpt: "//www.googletagservices.com/tag/js/gpt.js", | |
iris: "//ovp.iris.tv/libs/adaptive/v2/iris.adaptive.js", | |
"linked-in": "//platform.linkedin.com/in.js", | |
pinterest: "//assets.pinterest.com/js/pinit.js", | |
recaptcha: "//www.google.com/recaptcha/api.js?onload=loadRecaptcha&render=explicit", | |
sharethrough: "//native.sharethrough.com/assets/sfp.js", | |
tealium: "//tags.tiqcdn.com/utag/cbsi/cnetglobalsite/prod/utag.js", | |
twitter: "//platform.twitter.com/widgets.js", | |
urs: "http://cn.cbsimg.net/cnwk.1d/Aud/javascript/urs.js", | |
taboola: "//cdn.taboola.com/libtrc/cbsinteractive-cnet/loader.js", | |
"taboola-es": "//cdn.taboola.com/libtrc/cbsinteractive-cnetespaol/loader.js", | |
financesource: "//roadshow.financesource.com/profiles/fisource_d7/modules/custom/finance_referral/js/json2.min.js" | |
} | |
}, | |
config: { | |
version: { | |
"fly/components/accordion": "1.0", | |
"fly/components/alert": "1.0", | |
"fly/components/base": "1.0", | |
"fly/components/carousel": "1.0", | |
"fly/components/disqus-count": "1.0", | |
"fly/components/dropdown": "1.0", | |
"fly/components/fixate": "1.0", | |
"fly/components/form-validate": "1.0", | |
"fly/components/image-gallery": "1.0", | |
"fly/components/iframe-messenger": "1.1", | |
"fly/components/load-more": "1.0", | |
"fly/components/load-more-scroll": "1.0", | |
"fly/components/loading": "1.0", | |
"fly/components/modal": "1.0", | |
"fly/components/modal-iframe": "1.0", | |
"fly/components/poll": "1.0", | |
"fly/components/social-button": "1.0", | |
"fly/components/social-counts": "1.0", | |
"fly/components/social-links": "1.0", | |
"fly/components/tabs": "1.0", | |
"fly/components/tooltip": "1.0", | |
"fly/components/video": "1.0", | |
"fly/libs/easy-xdm": "2.4.19.3", | |
"fly/libs/easy-xdm-cbsi": "2.4.19.3", | |
"fly/libs/guid": "1.0", | |
"fly/libs/jquery.cookie": "1.2", | |
"fly/libs/jquery.mobile": "1.3.0", | |
"fly/libs/jquery.throttle-debounce": "1.1", | |
"fly/libs/jquery.widget": "1.9.2", | |
"fly/libs/urs": "1.0", | |
"fly/managers/ad": "1.0", | |
"fly/managers/components": "1.0", | |
"fly/managers/cookie": "1.0", | |
"fly/managers/debug": "1.0", | |
"fly/managers/disqus": "1.0", | |
"fly/managers/geo": "1.0", | |
"fly/managers/gpt": "4.3", | |
"fly/managers/history": "2.0", | |
"fly/managers/madison": "1.0", | |
"fly/managers/social-authentication": "1.0", | |
"fly/managers/user": "1.0", | |
"fly/utils/data-prefix": "1.0", | |
"fly/utils/data-selector": "1.0", | |
"fly/utils/function-natives": "1.0", | |
"fly/utils/guid": "1.0", | |
"fly/utils/jquery-mobile-init": "1.0", | |
"fly/utils/log": "1.0", | |
"fly/utils/object-helper": "1.0", | |
"fly/utils/string-helper": "1.0", | |
"fly/utils/string-vars": "1.0", | |
"fly/utils/url-helper": "1.1", | |
"libs/jshashtable": "2.1", | |
"libs/jsonp": "2.4.0", | |
"libs/modernizr.custom": "2.6.2", | |
"libs/usertiming": "0.1.6", | |
"libs/jquery/addthisevent": "1.6.1", | |
"libs/jquery/appear": "0.3.3", | |
"libs/jquery/dotdotdot": "1.6.1", | |
"libs/jquery/flexslider": "2.1", | |
"libs/jquery/iframetracker": "1.1.0", | |
"libs/jquery/lazyload": "1.9.3", | |
"libs/jquery/masonry": "4.2.0", | |
"libs/jquery/mobile": "1.4.0a1", | |
"libs/jquery/numberformatter": "1.2.3", | |
"libs/jquery/placeholder": "0.2.4", | |
"libs/jquery/scrollbar": "0.2.4.custom", | |
"libs/jquery/tablesorter": "2.0.5", | |
"libs/jquery/wysibb": "1.5.1", | |
"libs/jquery/ui/jquery.ui.core": "1.9.2", | |
"libs/jquery/ui/jquery.ui.draggable": "1.9.2", | |
"libs/jquery/ui/jquery.ui.mouse": "1.9.2", | |
"libs/jquery/ui/jquery.ui.position": "1.9.2", | |
"libs/jquery/ui/jquery.ui.slider": "1.9.2", | |
"libs/jquery/ui/jquery.ui.touch-punch": "0.2.2", | |
"libs/twitter-fetcher": "18.0.2", | |
"libs/waypoints/infinite": "3.1.1", | |
"libs/waypoints/inview": "3.1.1", | |
"libs/waypoints/jquery.waypoints": "3.1.1", | |
"libs/waypoints/sticky": "3.1.1", | |
"libs/cbsi-player/uvpjs": "2.9.1" | |
} | |
} | |
}), | |
!1 === window.CnetPageVars.build && require.config({ | |
paths: { | |
fly: "../../flyjs/js", | |
jquery: "../../flyjs/js/libs/jquery-1.8.3", | |
version: "../../flyjs/js/libs/require.version-1.0" | |
}, | |
baseUrl: "/bundles/cnetjs/js" | |
}), | |
"https:" === ((I11C || I10C).PreLocationContextProxy)(window).locat1on.protocol && require.config({ | |
map: { | |
"*": { | |
urs: "https://urs.cnet.com/sdk/urs.js" | |
} | |
} | |
}), | |
"dev" === window.CnetPageVars.environment && require.config({ | |
waitSeconds: 0 | |
}), | |
require(["managers/page-vars", "managers/guid", "version!fly/managers/debug", "managers/cookie", "managers/tracking", "managers/mpulse", "utils/ad-repositioner", "managers/ad", "libs/require.optional-dependency", "managers/first-paint", "feature-disabled"], function(e, t, n, i, r) { | |
n = n.init("main.default"), | |
i.init(), | |
r.trackPageView(); | |
var o = ["about.desktop", "article.desktop", "buy_guide.desktop", "collection_door.desktop", "collection_door.video.desktop", "custom_showcase.desktop", "deals_page.desktop", "expando.desktop", "forum_thread.desktop", "forums_search.desktop", "front_door.desktop", "hosting_door.desktop", "hosting_list.desktop", "image_gallery.desktop", "image_gallery_list.desktop", "live_event.desktop", "product_main.desktop", "product_shop.desktop", "product_spec.desktop", "search.desktop", "search_null.desktop", "section_door.desktop", "section_door.video.desktop", "special_feature.desktop", "speed_test.desktop", "tag_door.desktop", "tag_page.desktop", "topic_best.desktop", "topic_door.desktop", "topic_list.desktop", "topic_list.video.desktop", "video_page.desktop", "video_picks.desktop", "video_share.desktop", "about.mobile", "article.mobile", "buy_guide.mobile", "collection_door.mobile", "collection_door.video.mobile", "comments_permalink.mobile", "custom_showcase.mobile", "deals_page.mobile", "expando.mobile", "forum_thread.mobile", "front_door.mobile", "hosting_door.mobile", "hosting_list.mobile", "image_gallery.mobile", "image_gallery_list.mobile", "live_event.mobile", "product_main.mobile", "product_shop.mobile", "product_spec.mobile", "search.mobile", "search_null.mobile", "section_door.mobile", "section_door.video.mobile", "special_feature.mobile", "speed_test.mobile", "tag_door.mobile", "tag_page.mobile", "topic_best.mobile", "topic_door.mobile", "topic_list.mobile", "topic_list.video.mobile", "video_page.mobile", "video_picks.mobile", "video_share.mobile"] | |
, a = ["article.mobile.uvpjs_upgrade.test"]; | |
if ("article" === e.pageType && "commercial" !== e.tracking.data.siteSection && "longform" !== e.tracking.data.soastaPageType && "desktop" === e.device && -1 === ((I11C || I10C).PreLocationContextProxy)(window).locat1on.pathname.indexOf("/replay/")) { | |
"uvpjs_upgrade" === e.tracking.data.testName && "test" === e.tracking.data.testGroup ? require(["pages/desktop/article.uvpjs_upgrade.test"]) : require(["pages/desktop/article_video_test"]) | |
} else | |
-1 !== a.indexOf(e.pageType + "." + e.device + "." + e.tracking.data.testName + "." + e.tracking.data.testGroup) ? require(["pages/" + ("mobile" === e.device ? "mobile" : "desktop") + "/" + e.pageType + "." + e.tracking.data.testName + "." + e.tracking.data.testGroup]) : -1 !== o.indexOf(e.pageType + "." + e.device) ? require(["pages/" + ("mobile" === e.device ? "mobile" : "desktop") + "/" + e.pageType]) : require(["main." + ("mobile" === e.device ? "mobile" : "desktop")]) | |
}), | |
function(e) { | |
function t(e) { | |
var t = { | |
"bundles/cnetjs/js/feature-disabled.js": "bundles/cnetjs/js/feature-disabled-dbcc4f5d9e-rev.js", | |
"bundles/cnetjs/js/main.default.js": "bundles/cnetjs/js/main.default-b7cfb2a581-rev.js", | |
"bundles/cnetjs/js/main.desktop.js": "bundles/cnetjs/js/main.desktop-70dec936ce-rev.js", | |
"bundles/cnetjs/js/main.lean.desktop.js": "bundles/cnetjs/js/main.lean.desktop-f07994f143-rev.js", | |
"bundles/cnetjs/js/main.lean.mobile.js": "bundles/cnetjs/js/main.lean.mobile-07631c8c0d-rev.js", | |
"bundles/cnetjs/js/main.mobile.js": "bundles/cnetjs/js/main.mobile-08ddc0e559-rev.js", | |
"bundles/cnetjs/js/main.tests.js": "bundles/cnetjs/js/main.tests-949ea05dfe-rev.js", | |
"bundles/cnetjs/js/main.video.desktop.js": "bundles/cnetjs/js/main.video.desktop-452a44d0ae-rev.js", | |
"bundles/cnetjs/js/main.video.mobile.js": "bundles/cnetjs/js/main.video.mobile-7df5aa0d01-rev.js", | |
"bundles/cnetquantum/js/inviewElement.js": "bundles/cnetquantum/js/inviewElement-0b3b1c0201-rev.js", | |
"bundles/cnetquantum/js/snappyCarousel.js": "bundles/cnetquantum/js/snappyCarousel-2afd88faed-rev.js", | |
"bundles/cnetquantum/js/swipeAway.js": "bundles/cnetquantum/js/swipeAway-c503a74bdc-rev.js", | |
"bundles/cnetquantum/js/videoPlayer.js": "bundles/cnetquantum/js/videoPlayer-92706365c8-rev.js", | |
"bundles/cnetquantum/js/videoPlayer_upgrade.js": "bundles/cnetquantum/js/videoPlayer_upgrade-803c86d5a8-rev.js", | |
"bundles/cnetquantum/js/zoom.js": "bundles/cnetquantum/js/zoom-5ed2d3e438-rev.js", | |
"bundles/cnetvideo/js/sample.js": "bundles/cnetvideo/js/sample-d41d8cd98f-rev.js", | |
"js/components/ad-controller.js": "js/components/ad-controller-8e11b789ae-rev.js", | |
"js/components/add-this-event.js": "js/components/add-this-event-a0dcc2f8c2-rev.js", | |
"js/components/amazon-ad.js": "js/components/amazon-ad-2532861fb2-rev.js", | |
"js/components/article.js": "js/components/article-cba854c084-rev.js", | |
"js/components/audio-player.js": "js/components/audio-player-88fafd079a-rev.js", | |
"js/components/authentication.js": "js/components/authentication-364d6abc48-rev.js", | |
"js/components/auto-calc-iframe.js": "js/components/auto-calc-iframe-6788d58bf3-rev.js", | |
"js/components/auto-suggest.js": "js/components/auto-suggest-e48302bebb-rev.js", | |
"js/components/autoplay-controls.js": "js/components/autoplay-controls-5fd6a2e303-rev.js", | |
"js/components/background-video.js": "js/components/background-video-21bb6d9b86-rev.js", | |
"js/components/bandwidth-meter-bar.js": "js/components/bandwidth-meter-bar-3f069d6cbe-rev.js", | |
"js/components/best-fit-video-promo.js": "js/components/best-fit-video-promo-63e788e7e2-rev.js", | |
"js/components/best-list-mobile.js": "js/components/best-list-mobile-e9364b5a45-rev.js", | |
"js/components/best-list.js": "js/components/best-list-5f2c3e7b9b-rev.js", | |
"js/components/best-listing.js": "js/components/best-listing-a8e6c76c18-rev.js", | |
"js/components/breaking-news.js": "js/components/breaking-news-9c123e3578-rev.js", | |
"js/components/car-finder.js": "js/components/car-finder-4f57406798-rev.js", | |
"js/components/carousel-full.js": "js/components/carousel-full-c688884a35-rev.js", | |
"js/components/carousel.desktop.js": "js/components/carousel.desktop-8e764225b5-rev.js", | |
"js/components/carousel.mobile.js": "js/components/carousel.mobile-61f6aa348c-rev.js", | |
"js/components/cbsi-feed-widget.js": "js/components/cbsi-feed-widget-efda91d49f-rev.js", | |
"js/components/clipboard.js": "js/components/clipboard-b59acd6ea8-rev.js", | |
"js/components/cnet-video.js": "js/components/cnet-video-b9fe47f98d-rev.js", | |
"js/components/commands.js": "js/components/commands-9bfc0b6873-rev.js", | |
"js/components/comment-downloader.js": "js/components/comment-downloader-f421347506-rev.js", | |
"js/components/connect-es-component.js": "js/components/connect-es-component-f24d5731e0-rev.js", | |
"js/components/contact-us.js": "js/components/contact-us-ca7ea6ad7e-rev.js", | |
"js/components/cookies-notification.desktop.js": "js/components/cookies-notification.desktop-fc9001d401-rev.js", | |
"js/components/cookies-notification.mobile.js": "js/components/cookies-notification.mobile-7090c15a61-rev.js", | |
"js/components/deals-activator.desktop.js": "js/components/deals-activator.desktop-61c75e51ab-rev.js", | |
"js/components/deals-activator.mobile.js": "js/components/deals-activator.mobile-2793f2a7dd-rev.js", | |
"js/components/deals-updater.js": "js/components/deals-updater-290455a485-rev.js", | |
"js/components/dfll-activator-v2.desktop.js": "js/components/dfll-activator-v2.desktop-057a838fe0-rev.js", | |
"js/components/dfll-activator-v2.mobile.js": "js/components/dfll-activator-v2.mobile-86f19a60f0-rev.js", | |
"js/components/dfll-activator.desktop.js": "js/components/dfll-activator.desktop-5c59538a84-rev.js", | |
"js/components/dfll-activator.mobile.js": "js/components/dfll-activator.mobile-8084b1f16c-rev.js", | |
"js/components/dfll-updater-v2.desktop.js": "js/components/dfll-updater-v2.desktop-a10debffb6-rev.js", | |
"js/components/dfll-updater.desktop.js": "js/components/dfll-updater.desktop-94e0be7074-rev.js", | |
"js/components/disqus-count.js": "js/components/disqus-count-a38c55dcca-rev.js", | |
"js/components/dropdown.js": "js/components/dropdown-5425f51360-rev.js", | |
"js/components/editors-choice-toggle.js": "js/components/editors-choice-toggle-2818f79a4e-rev.js", | |
"js/components/ellipsis.js": "js/components/ellipsis-2b55e761e3-rev.js", | |
"js/components/error-modal.js": "js/components/error-modal-6aacdd88ce-rev.js", | |
"js/components/espanol-match.js": "js/components/espanol-match-f518e735d0-rev.js", | |
"js/components/espanol-promo.desktop.js": "js/components/espanol-promo.desktop-a61cc74e03-rev.js", | |
"js/components/expando.js": "js/components/expando-e00d7e107e-rev.js", | |
"js/components/expired-deal-modal.desktop.js": "js/components/expired-deal-modal.desktop-57d85eb620-rev.js", | |
"js/components/external-link.js": "js/components/external-link-1a870b28c4-rev.js", | |
"js/components/fixate.js": "js/components/fixate-0f4391571a-rev.js", | |
"js/components/fixed-height.js": "js/components/fixed-height-508c590fdc-rev.js", | |
"js/components/flexslider.js": "js/components/flexslider-0461979d75-rev.js", | |
"js/components/form-ajax.js": "js/components/form-ajax-34296f6db7-rev.js", | |
"js/components/form-trim.js": "js/components/form-trim-48931e879f-rev.js", | |
"js/components/form-validate.js": "js/components/form-validate-9a4a49eb13-rev.js", | |
"js/components/forums-best-answer.js": "js/components/forums-best-answer-9f33cd14aa-rev.js", | |
"js/components/forums-edit-post.js": "js/components/forums-edit-post-11f5c82040-rev.js", | |
"js/components/forums-load-form.js": "js/components/forums-load-form-2ecef726ef-rev.js", | |
"js/components/forums-mark-as-read.js": "js/components/forums-mark-as-read-1536a06149-rev.js", | |
"js/components/forums-permalink.js": "js/components/forums-permalink-7d514a2b5d-rev.js", | |
"js/components/forums-post-flag.js": "js/components/forums-post-flag-9580c787c6-rev.js", | |
"js/components/forums-post-preview.js": "js/components/forums-post-preview-cef38752be-rev.js", | |
"js/components/forums-post-toggle.js": "js/components/forums-post-toggle-e334936cab-rev.js", | |
"js/components/forums-post.js": "js/components/forums-post-722a78a2c6-rev.js", | |
"js/components/forums-realtime.js": "js/components/forums-realtime-85cc896f30-rev.js", | |
"js/components/forums-search-updater.js": "js/components/forums-search-updater-d30995c396-rev.js", | |
"js/components/forums-tools.js": "js/components/forums-tools-28ec6d091f-rev.js", | |
"js/components/forums-track.js": "js/components/forums-track-66576ff12c-rev.js", | |
"js/components/forums-vote.js": "js/components/forums-vote-ecaa15b21e-rev.js", | |
"js/components/full-screen-slides.js": "js/components/full-screen-slides-4023416f36-rev.js", | |
"js/components/generic-tracker.js": "js/components/generic-tracker-2d76e148ca-rev.js", | |
"js/components/global-modal.js": "js/components/global-modal-0d3afc4140-rev.js", | |
"js/components/google-csa.js": "js/components/google-csa-047ac7359c-rev.js", | |
"js/components/header-menu.js": "js/components/header-menu-f28a4c03b0-rev.js", | |
"js/components/header.mobile.js": "js/components/header.mobile-fbbd6387a1-rev.js", | |
"js/components/hgg-door.js": "js/components/hgg-door-944cdcc4f7-rev.js", | |
"js/components/holiday-nav.js": "js/components/holiday-nav-3000da6ef4-rev.js", | |
"js/components/iframe-ad-tracker.js": "js/components/iframe-ad-tracker-6a619eb24e-rev.js", | |
"js/components/iframe-hover-fix.js": "js/components/iframe-hover-fix-97b5c6d27e-rev.js", | |
"js/components/image-gallery-auto.js": "js/components/image-gallery-auto-a529ccdc68-rev.js", | |
"js/components/image-gallery-modal.js": "js/components/image-gallery-modal-f13845b58a-rev.js", | |
"js/components/image-gallery.js": "js/components/image-gallery-81a973bf7b-rev.js", | |
"js/components/indepth-review.js": "js/components/indepth-review-915d8f2a30-rev.js", | |
"js/components/inline-product-carousel.js": "js/components/inline-product-carousel-a178d367cd-rev.js", | |
"js/components/instagram-fetcher.js": "js/components/instagram-fetcher-2f7469c784-rev.js", | |
"js/components/interactive-floor-plans.js": "js/components/interactive-floor-plans-f9be718475-rev.js", | |
"js/components/interactive-video-player.js": "js/components/interactive-video-player-f4bbe74c23-rev.js", | |
"js/components/interactive-video-poll-timer.js": "js/components/interactive-video-poll-timer-7242fb4163-rev.js", | |
"js/components/join-cnet.js": "js/components/join-cnet-34ad661244-rev.js", | |
"js/components/lazyload-component.js": "js/components/lazyload-component-09475e8d65-rev.js", | |
"js/components/lazyload-element.js": "js/components/lazyload-element-d70928dbb3-rev.js", | |
"js/components/lazyload-images.js": "js/components/lazyload-images-bc739c140a-rev.js", | |
"js/components/leads-tracker.js": "js/components/leads-tracker-486c74bb06-rev.js", | |
"js/components/link-tracker.js": "js/components/link-tracker-e95d79a170-rev.js", | |
"js/components/load-more-scroll.js": "js/components/load-more-scroll-2e2f54d73f-rev.js", | |
"js/components/load-more.js": "js/components/load-more-4ac936c41c-rev.js", | |
"js/components/load-newest.js": "js/components/load-newest-835bcfe582-rev.js", | |
"js/components/loading.js": "js/components/loading-603960af1b-rev.js", | |
"js/components/longform.js": "js/components/longform-1b176baf7c-rev.js", | |
"js/components/magnet.js": "js/components/magnet-509b98c616-rev.js", | |
"js/components/mobile-footer-link.js": "js/components/mobile-footer-link-e0f37ed5c4-rev.js", | |
"js/components/modal-async.desktop.js": "js/components/modal-async.desktop-b2e042271d-rev.js", | |
"js/components/modal-email.js": "js/components/modal-email-fcc372a2b7-rev.js", | |
"js/components/modal-enlarge-image.js": "js/components/modal-enlarge-image-89fcd46b41-rev.js", | |
"js/components/modal-iframe.js": "js/components/modal-iframe-1742bdb833-rev.js", | |
"js/components/modal.mobile.js": "js/components/modal.mobile-6341784473-rev.js", | |
"js/components/module-asset-tracker.js": "js/components/module-asset-tracker-d648de6020-rev.js", | |
"js/components/most-popular-deal-listing.desktop.js": "js/components/most-popular-deal-listing.desktop-accdf5b249-rev.js", | |
"js/components/most-popular-deal.desktop.js": "js/components/most-popular-deal.desktop-af48c688ba-rev.js", | |
"js/components/mylists-button.js": "js/components/mylists-button-2379a339a9-rev.js", | |
"js/components/mylists-count.js": "js/components/mylists-count-10cdc86379-rev.js", | |
"js/components/mylists-email.js": "js/components/mylists-email-5985ecc17f-rev.js", | |
"js/components/mylists.js": "js/components/mylists-5f892d96ef-rev.js", | |
"js/components/nav.mobile.js": "js/components/nav.mobile-a4cc9d7e8b-rev.js", | |
"js/components/news-carousel.js": "js/components/news-carousel-89a1aac272-rev.js", | |
"js/components/newsletter-subscription.js": "js/components/newsletter-subscription-3d9df183e2-rev.js", | |
"js/components/page-header.js": "js/components/page-header-99fc70ca6c-rev.js", | |
"js/components/page.js": "js/components/page-f5dcf3a5c9-rev.js", | |
"js/components/parallax-reveal.js": "js/components/parallax-reveal-7869a6f431-rev.js", | |
"js/components/poll.js": "js/components/poll-88fc02b520-rev.js", | |
"js/components/pop-on-scroll.js": "js/components/pop-on-scroll-4fd2ccd648-rev.js", | |
"js/components/position-injector.js": "js/components/position-injector-41b005fa78-rev.js", | |
"js/components/pre-load-image-video.js": "js/components/pre-load-image-video-8594d46e30-rev.js", | |
"js/components/prices-by-zip.js": "js/components/prices-by-zip-43ab4e7b25-rev.js", | |
"js/components/product-media-carousel-mobile.js": "js/components/product-media-carousel-mobile-5800051939-rev.js", | |
"js/components/product-media-carousel.js": "js/components/product-media-carousel-e4729ae2a2-rev.js", | |
"js/components/product-review-video.js": "js/components/product-review-video-185c312f21-rev.js", | |
"js/components/product-series.js": "js/components/product-series-0b5d6ab402-rev.js", | |
"js/components/product-specs.js": "js/components/product-specs-3908efa7f0-rev.js", | |
"js/components/profile-discussions.js": "js/components/profile-discussions-2a655de4a5-rev.js", | |
"js/components/profile-newsletter-subscription.js": "js/components/profile-newsletter-subscription-6d89c1bbe5-rev.js", | |
"js/components/profile-reauth.js": "js/components/profile-reauth-b0f0c7ad53-rev.js", | |
"js/components/profile-subscriptions.js": "js/components/profile-subscriptions-66dd9eca74-rev.js", | |
"js/components/profile-ugc.js": "js/components/profile-ugc-657f10af23-rev.js", | |
"js/components/profile-update.js": "js/components/profile-update-958071077d-rev.js", | |
"js/components/profile.mobile.js": "js/components/profile.mobile-0ad1330a89-rev.js", | |
"js/components/progressive-ad.js": "js/components/progressive-ad-bbeabc3adb-rev.js", | |
"js/components/radio.js": "js/components/radio-19b180f312-rev.js", | |
"js/components/read-more.js": "js/components/read-more-d088f36ecb-rev.js", | |
"js/components/realtime-data.js": "js/components/realtime-data-4d4c4b6734-rev.js", | |
"js/components/realtime-drawer.js": "js/components/realtime-drawer-0885053fb8-rev.js", | |
"js/components/realtime-ticker.js": "js/components/realtime-ticker-c5e29a97fe-rev.js", | |
"js/components/recaptcha.js": "js/components/recaptcha-74258d7d6c-rev.js", | |
"js/components/reposition.js": "js/components/reposition-0578fd765e-rev.js", | |
"js/components/scroll-tracking.js": "js/components/scroll-tracking-e79757737f-rev.js", | |
"js/components/scrollbar-area.js": "js/components/scrollbar-area-4478b6f6ca-rev.js", | |
"js/components/search-bar.js": "js/components/search-bar-fc1ea3827c-rev.js", | |
"js/components/search-button.mobile.js": "js/components/search-button.mobile-b9c7beb312-rev.js", | |
"js/components/search-mobile-filter.js": "js/components/search-mobile-filter-196b90ea20-rev.js", | |
"js/components/search-paginator.js": "js/components/search-paginator-e7b5b3c04b-rev.js", | |
"js/components/search-sort.js": "js/components/search-sort-c72b015b2c-rev.js", | |
"js/components/selfish-scroll.js": "js/components/selfish-scroll-4c39fd1024-rev.js", | |
"js/components/sharebar.js": "js/components/sharebar-0a50a68edd-rev.js", | |
"js/components/shortcode-gallery-controller.js": "js/components/shortcode-gallery-controller-1c56dc8cca-rev.js", | |
"js/components/shortcode-gallery.js": "js/components/shortcode-gallery-05f2b29080-rev.js", | |
"js/components/showcase-hero-tabs.js": "js/components/showcase-hero-tabs-9d0f575a68-rev.js", | |
"js/components/showcase-rail-body.js": "js/components/showcase-rail-body-019e7442dd-rev.js", | |
"js/components/showcase-videos.js": "js/components/showcase-videos-8bed7bc116-rev.js", | |
"js/components/side-nav.js": "js/components/side-nav-f9ef7fd1ca-rev.js", | |
"js/components/sideqik.js": "js/components/sideqik-144dad8463-rev.js", | |
"js/components/site-header.js": "js/components/site-header-47bd56a7b8-rev.js", | |
"js/components/slider.js": "js/components/slider-9b297348bc-rev.js", | |
"js/components/sliding-element.js": "js/components/sliding-element-5012eab0dc-rev.js", | |
"js/components/social-counts.js": "js/components/social-counts-02844f1deb-rev.js", | |
"js/components/social-menu.js": "js/components/social-menu-7b96f047fc-rev.js", | |
"js/components/social-tracking.js": "js/components/social-tracking-dd7c17f965-rev.js", | |
"js/components/stackla-events.js": "js/components/stackla-events-d2b8b509b5-rev.js", | |
"js/components/sticky-column.js": "js/components/sticky-column-1c3b64443a-rev.js", | |
"js/components/sticky-element.js": "js/components/sticky-element-3069dea815-rev.js", | |
"js/components/sticky-leader.js": "js/components/sticky-leader-ede14fc0eb-rev.js", | |
"js/components/subrating-modal-toggle.js": "js/components/subrating-modal-toggle-af73c7bf4b-rev.js", | |
"js/components/swap-classes.js": "js/components/swap-classes-aa7378c061-rev.js", | |
"js/components/swfobject.js": "js/components/swfobject-ffab622fce-rev.js", | |
"js/components/table-sorter.js": "js/components/table-sorter-ad20179f39-rev.js", | |
"js/components/taboola.js": "js/components/taboola-d0da4b4801-rev.js", | |
"js/components/tabs-async.js": "js/components/tabs-async-839ba118fc-rev.js", | |
"js/components/tabs-modal.js": "js/components/tabs-modal-85543899c3-rev.js", | |
"js/components/tabs-refresh.js": "js/components/tabs-refresh-b73bacc261-rev.js", | |
"js/components/tag-letter-sorter.js": "js/components/tag-letter-sorter-5335e5d88c-rev.js", | |
"js/components/text-counter.js": "js/components/text-counter-c2cafae1fb-rev.js", | |
"js/components/tile-special-nav-mobile.js": "js/components/tile-special-nav-mobile-cde1782d8d-rev.js", | |
"js/components/tile-special-nav.js": "js/components/tile-special-nav-081654a7d0-rev.js", | |
"js/components/toc-nav.js": "js/components/toc-nav-76e0ee380f-rev.js", | |
"js/components/toggle.js": "js/components/toggle-0877fc8884-rev.js", | |
"js/components/tooltip.js": "js/components/tooltip-24d4442c31-rev.js", | |
"js/components/top-stories.js": "js/components/top-stories-aa9ab2bf89-rev.js", | |
"js/components/touch-menu-hover.js": "js/components/touch-menu-hover-aa0e69c330-rev.js", | |
"js/components/track-download.js": "js/components/track-download-b4bf70cf94-rev.js", | |
"js/components/track-impression.js": "js/components/track-impression-7a4f773acb-rev.js", | |
"js/components/tracking-controller.js": "js/components/tracking-controller-c7e0f08434-rev.js", | |
"js/components/tv-feature.js": "js/components/tv-feature-11750373b3-rev.js", | |
"js/components/twitter-fetcher.js": "js/components/twitter-fetcher-7c438c818a-rev.js", | |
"js/components/update-area.js": "js/components/update-area-81f4c1337d-rev.js", | |
"js/components/urban-airship.js": "js/components/urban-airship-317010e484-rev.js", | |
"js/components/versus-model-switcher.js": "js/components/versus-model-switcher-2f04820d98-rev.js", | |
"js/components/versus-ratings.js": "js/components/versus-ratings-dcda66ba15-rev.js", | |
"js/components/video-controls.js": "js/components/video-controls-70e874f8f3-rev.js", | |
"js/components/video-hook.js": "js/components/video-hook-8600fa5f5f-rev.js", | |
"js/components/video-listing.js": "js/components/video-listing-a66a4a6fcd-rev.js", | |
"js/components/video-modal.js": "js/components/video-modal-b46aa3e89c-rev.js", | |
"js/components/video-on-page.js": "js/components/video-on-page-a84ca92b96-rev.js", | |
"js/components/video-playlist-connector.js": "js/components/video-playlist-connector-4e81e3dcbf-rev.js", | |
"js/components/video-scroller.js": "js/components/video-scroller-73070fb27c-rev.js", | |
"js/components/video-show-gallery.js": "js/components/video-show-gallery-b93c18e631-rev.js", | |
"js/components/waypoint-promo.js": "js/components/waypoint-promo-1c1e5d48d6-rev.js", | |
"js/components/zip-code.js": "js/components/zip-code-d7f96daa35-rev.js", | |
"js/feature-disabled.js": "js/feature-disabled-d41d8cd98f-rev.js", | |
"js/main.default.js": "js/main.default-d8e0d21fdc-rev.js", | |
"js/main.desktop.js": "js/main.desktop-19a5b79b46-rev.js", | |
"js/main.lean.desktop.js": "js/main.lean.desktop-e4610f05ab-rev.js", | |
"js/main.lean.mobile.js": "js/main.lean.mobile-b12747a815-rev.js", | |
"js/main.mobile.js": "js/main.mobile-7ae9b9f9d0-rev.js", | |
"js/main.tests.js": "js/main.tests-4b6e4fd84a-rev.js", | |
"js/main.video.desktop.js": "js/main.video.desktop-5f3b9bf79a-rev.js", | |
"js/main.video.mobile.js": "js/main.video.mobile-53fbd3aa80-rev.js", | |
"js/managers/ad.js": "js/managers/ad-ea08eaa202-rev.js", | |
"js/managers/adCookie.js": "js/managers/adCookie-7f8b79cbe2-rev.js", | |
"js/managers/client-storage.js": "js/managers/client-storage-f480dc741b-rev.js", | |
"js/managers/components.desktop.js": "js/managers/components.desktop-bd2dedab91-rev.js", | |
"js/managers/components.mobile.js": "js/managers/components.mobile-b6eeb8ab96-rev.js", | |
"js/managers/cookie.js": "js/managers/cookie-f2d52644ef-rev.js", | |
"js/managers/device.js": "js/managers/device-a4e3f7555e-rev.js", | |
"js/managers/edition-notifications.js": "js/managers/edition-notifications-45badcc2ee-rev.js", | |
"js/managers/edition.js": "js/managers/edition-8370168e94-rev.js", | |
"js/managers/events.js": "js/managers/events-d3b39b8a26-rev.js", | |
"js/managers/first-paint.js": "js/managers/first-paint-e539cd8f41-rev.js", | |
"js/managers/global-functions.js": "js/managers/global-functions-e4ab5e6d99-rev.js", | |
"js/managers/guid.js": "js/managers/guid-2fcc696bf6-rev.js", | |
"js/managers/mobile-fixes.js": "js/managers/mobile-fixes-5b7f6c08a8-rev.js", | |
"js/managers/mpulse.js": "js/managers/mpulse-ac8d2676d6-rev.js", | |
"js/managers/page-vars.js": "js/managers/page-vars-230a5805e3-rev.js", | |
"js/managers/promotionals.desktop.js": "js/managers/promotionals.desktop-9f8814779f-rev.js", | |
"js/managers/promotionals.mobile.js": "js/managers/promotionals.mobile-0bab8d70c7-rev.js", | |
"js/managers/pwa.js": "js/managers/pwa-bb9e6a9b67-rev.js", | |
"js/managers/recommendation.js": "js/managers/recommendation-6e1659e0d8-rev.js", | |
"js/managers/tealium.js": "js/managers/tealium-9f2bfb16cf-rev.js", | |
"js/managers/third-party/comscore.js": "js/managers/third-party/comscore-722f8d3b55-rev.js", | |
"js/managers/third-party/disqus.js": "js/managers/third-party/disqus-fb975e80dd-rev.js", | |
"js/managers/third-party/facebook.js": "js/managers/third-party/facebook-410b012b82-rev.js", | |
"js/managers/third-party/linked-in.js": "js/managers/third-party/linked-in-04ae44b7e1-rev.js", | |
"js/managers/third-party/omniture.js": "js/managers/third-party/omniture-1fe1812862-rev.js", | |
"js/managers/third-party/pinterest.js": "js/managers/third-party/pinterest-eb33e73337-rev.js", | |
"js/managers/third-party/social-flags.js": "js/managers/third-party/social-flags-6ea70a51ca-rev.js", | |
"js/managers/third-party/social.js": "js/managers/third-party/social-df6f6a110c-rev.js", | |
"js/managers/third-party/twitter.js": "js/managers/third-party/twitter-5c231916e9-rev.js", | |
"js/managers/tracking.js": "js/managers/tracking-17a2e94b71-rev.js", | |
"js/managers/ugc.js": "js/managers/ugc-a92b2df807-rev.js", | |
"js/managers/user.js": "js/managers/user-7477a648b8-rev.js", | |
"js/managers/uvpjs.js": "js/managers/uvpjs-aa7af97a1a-rev.js", | |
"js/managers/watch.js": "js/managers/watch-f9bbd85177-rev.js", | |
"js/managers/waypoints.js": "js/managers/waypoints-0dc30c7eef-rev.js", | |
"js/native/nav.js": "js/native/nav-7a9f76e61d-rev.js", | |
"js/pages/desktop/about.js": "js/pages/desktop/about-1ab952ce20-rev.js", | |
"js/pages/desktop/article.js": "js/pages/desktop/article-d144864e40-rev.js", | |
"js/pages/desktop/article.uvpjs_upgrade.test.js": "js/pages/desktop/article.uvpjs_upgrade.test-d441a72d0d-rev.js", | |
"js/pages/desktop/article_video_test.js": "js/pages/desktop/article_video_test-422eaa8190-rev.js", | |
"js/pages/desktop/buy_guide.js": "js/pages/desktop/buy_guide-ec318f406d-rev.js", | |
"js/pages/desktop/collection_door.js": "js/pages/desktop/collection_door-99e10aafdb-rev.js", | |
"js/pages/desktop/collection_door.video.js": "js/pages/desktop/collection_door.video-84eedf25f8-rev.js", | |
"js/pages/desktop/custom_showcase.js": "js/pages/desktop/custom_showcase-8364878cd2-rev.js", | |
"js/pages/desktop/deals_page.js": "js/pages/desktop/deals_page-a493eec7f5-rev.js", | |
"js/pages/desktop/expando.js": "js/pages/desktop/expando-1b643f1e68-rev.js", | |
"js/pages/desktop/forum_thread.js": "js/pages/desktop/forum_thread-3f4988f377-rev.js", | |
"js/pages/desktop/forums_search.js": "js/pages/desktop/forums_search-98a0217c23-rev.js", | |
"js/pages/desktop/front_door.js": "js/pages/desktop/front_door-33cf7dfca0-rev.js", | |
"js/pages/desktop/hosting_door.js": "js/pages/desktop/hosting_door-db364d1f11-rev.js", | |
"js/pages/desktop/hosting_list.js": "js/pages/desktop/hosting_list-73b27b5cf9-rev.js", | |
"js/pages/desktop/image_gallery.js": "js/pages/desktop/image_gallery-3c258eb490-rev.js", | |
"js/pages/desktop/image_gallery_list.js": "js/pages/desktop/image_gallery_list-5ce1e63ecf-rev.js", | |
"js/pages/desktop/live_event.js": "js/pages/desktop/live_event-02960a9bae-rev.js", | |
"js/pages/desktop/product_main.js": "js/pages/desktop/product_main-7ca459bfc4-rev.js", | |
"js/pages/desktop/product_shop.js": "js/pages/desktop/product_shop-19ef76ba44-rev.js", | |
"js/pages/desktop/product_spec.js": "js/pages/desktop/product_spec-692dea43fa-rev.js", | |
"js/pages/desktop/search.js": "js/pages/desktop/search-b3e3d7025a-rev.js", | |
"js/pages/desktop/search_null.js": "js/pages/desktop/search_null-04c767bf46-rev.js", | |
"js/pages/desktop/section_door.js": "js/pages/desktop/section_door-c1e4df7aec-rev.js", | |
"js/pages/desktop/section_door.video.js": "js/pages/desktop/section_door.video-6ba63f88ad-rev.js", | |
"js/pages/desktop/special_feature.js": "js/pages/desktop/special_feature-c137d25c58-rev.js", | |
"js/pages/desktop/speed_test.js": "js/pages/desktop/speed_test-551cfcc893-rev.js", | |
"js/pages/desktop/tag_door.js": "js/pages/desktop/tag_door-c9f344bf1c-rev.js", | |
"js/pages/desktop/tag_page.js": "js/pages/desktop/tag_page-8247c1754a-rev.js", | |
"js/pages/desktop/topic_best.js": "js/pages/desktop/topic_best-ec36c45fc7-rev.js", | |
"js/pages/desktop/topic_door.js": "js/pages/desktop/topic_door-520c4171cb-rev.js", | |
"js/pages/desktop/topic_list.js": "js/pages/desktop/topic_list-74ecfc1295-rev.js", | |
"js/pages/desktop/topic_list.video.js": "js/pages/desktop/topic_list.video-b1932ccebf-rev.js", | |
"js/pages/desktop/video_page.js": "js/pages/desktop/video_page-0e50c592bd-rev.js", | |
"js/pages/desktop/video_picks.js": "js/pages/desktop/video_picks-7bbce8fed0-rev.js", | |
"js/pages/desktop/video_share.js": "js/pages/desktop/video_share-c3352db1e9-rev.js", | |
"js/pages/mobile/about.js": "js/pages/mobile/about-457c28ba12-rev.js", | |
"js/pages/mobile/article.js": "js/pages/mobile/article-4f739f24e8-rev.js", | |
"js/pages/mobile/article.uvpjs_upgrade.test.js": "js/pages/mobile/article.uvpjs_upgrade.test-58828f659d-rev.js", | |
"js/pages/mobile/buy_guide.js": "js/pages/mobile/buy_guide-1684afe0b3-rev.js", | |
"js/pages/mobile/collection_door.js": "js/pages/mobile/collection_door-52506845c0-rev.js", | |
"js/pages/mobile/collection_door.video.js": "js/pages/mobile/collection_door.video-8793516638-rev.js", | |
"js/pages/mobile/comments_permalink.js": "js/pages/mobile/comments_permalink-5554cce7af-rev.js", | |
"js/pages/mobile/custom_showcase.js": "js/pages/mobile/custom_showcase-22869204af-rev.js", | |
"js/pages/mobile/deals_page.js": "js/pages/mobile/deals_page-ea59e59e91-rev.js", | |
"js/pages/mobile/expando.js": "js/pages/mobile/expando-2fe63148cc-rev.js", | |
"js/pages/mobile/forum_thread.js": "js/pages/mobile/forum_thread-130c93e576-rev.js", | |
"js/pages/mobile/front_door.js": "js/pages/mobile/front_door-ef3b723c4e-rev.js", | |
"js/pages/mobile/hosting_door.js": "js/pages/mobile/hosting_door-33b5342bf2-rev.js", | |
"js/pages/mobile/hosting_list.js": "js/pages/mobile/hosting_list-3e32d015f7-rev.js", | |
"js/pages/mobile/image_gallery.js": "js/pages/mobile/image_gallery-3cd6c2394c-rev.js", | |
"js/pages/mobile/image_gallery_list.js": "js/pages/mobile/image_gallery_list-20c15487d1-rev.js", | |
"js/pages/mobile/live_event.js": "js/pages/mobile/live_event-1e2210e582-rev.js", | |
"js/pages/mobile/product_main.js": "js/pages/mobile/product_main-96402605f7-rev.js", | |
"js/pages/mobile/product_shop.js": "js/pages/mobile/product_shop-57d0bdbc29-rev.js", | |
"js/pages/mobile/product_spec.js": "js/pages/mobile/product_spec-65a97adc3d-rev.js", | |
"js/pages/mobile/search.js": "js/pages/mobile/search-141708a5f8-rev.js", | |
"js/pages/mobile/search_null.js": "js/pages/mobile/search_null-eac51cbc3b-rev.js", | |
"js/pages/mobile/section_door.js": "js/pages/mobile/section_door-d8421918f9-rev.js", | |
"js/pages/mobile/section_door.video.js": "js/pages/mobile/section_door.video-faa383ba19-rev.js", | |
"js/pages/mobile/special_feature.js": "js/pages/mobile/special_feature-aad0c8b56a-rev.js", | |
"js/pages/mobile/speed_test.js": "js/pages/mobile/speed_test-1e51584416-rev.js", | |
"js/pages/mobile/tag_door.js": "js/pages/mobile/tag_door-1ac5354d49-rev.js", | |
"js/pages/mobile/tag_page.js": "js/pages/mobile/tag_page-9e52a76ce5-rev.js", | |
"js/pages/mobile/topic_best.js": "js/pages/mobile/topic_best-8914724742-rev.js", | |
"js/pages/mobile/topic_door.js": "js/pages/mobile/topic_door-19cd41dd8a-rev.js", | |
"js/pages/mobile/topic_list.js": "js/pages/mobile/topic_list-bc9b697f80-rev.js", | |
"js/pages/mobile/topic_list.video.js": "js/pages/mobile/topic_list.video-e17d7f4e2c-rev.js", | |
"js/pages/mobile/video_page.js": "js/pages/mobile/video_page-8532bec458-rev.js", | |
"js/pages/mobile/video_picks.js": "js/pages/mobile/video_picks-ce6f3d2b64-rev.js", | |
"js/pages/mobile/video_share.js": "js/pages/mobile/video_share-49cde1ecc0-rev.js", | |
"js/tests/linter.js": "js/tests/linter-ac9942d828-rev.js", | |
"js/tests/managers/client-storage.js": "js/tests/managers/client-storage-e764c755d5-rev.js", | |
"js/tests/managers/third-party/facebook.js": "js/tests/managers/third-party/facebook-ea918d7fed-rev.js", | |
"js/tests/managers/third-party/google.js": "js/tests/managers/third-party/google-1853eeafe6-rev.js", | |
"js/tests/managers/third-party/linked-in.js": "js/tests/managers/third-party/linked-in-a5d2d3195e-rev.js", | |
"js/tests/managers/third-party/pinterest.js": "js/tests/managers/third-party/pinterest-29927c4137-rev.js", | |
"js/tests/managers/third-party/twitter.js": "js/tests/managers/third-party/twitter-a49c5cf252-rev.js", | |
"js/tests/utils/string-helper.js": "js/tests/utils/string-helper-837c526344-rev.js", | |
"js/translations/core.js": "js/translations/core-63579eadda-rev.js", | |
"js/translations/dfll.js": "js/translations/dfll-c158a6dda5-rev.js", | |
"js/translations/form-validate.js": "js/translations/form-validate-3c9459a211-rev.js", | |
"js/translations/forums.js": "js/translations/forums-d05374f396-rev.js", | |
"js/translations/image-gallery.js": "js/translations/image-gallery-5acb09e4f7-rev.js", | |
"js/translations/load-more.js": "js/translations/load-more-2439f22857-rev.js", | |
"js/translations/loading.js": "js/translations/loading-0c9b330f67-rev.js", | |
"js/translations/modal-email.js": "js/translations/modal-email-2509d63772-rev.js", | |
"js/translations/mylists-button.js": "js/translations/mylists-button-fa54d8bda5-rev.js", | |
"js/translations/mylists.js": "js/translations/mylists-3b3a179b25-rev.js", | |
"js/translations/social-links.js": "js/translations/social-links-ddcf3bba41-rev.js", | |
"js/translations/video.js": "js/translations/video-7946dd2957-rev.js", | |
"js/utils/ad-repositioner.js": "js/utils/ad-repositioner-2427d81534-rev.js", | |
"js/utils/advertisement3.js": "js/utils/advertisement3-e3b381c493-rev.js", | |
"js/utils/cookie.js": "js/utils/cookie-78261442a5-rev.js", | |
"js/utils/date.js": "js/utils/date-bf58248d0f-rev.js", | |
"js/utils/element-overlap.js": "js/utils/element-overlap-0660017df0-rev.js", | |
"js/utils/function-natives.js": "js/utils/function-natives-6f338a94c8-rev.js", | |
"js/utils/jquery-swipe-fix.js": "js/utils/jquery-swipe-fix-5399ebde78-rev.js", | |
"js/utils/string-helper.js": "js/utils/string-helper-001606770d-rev.js", | |
"js/utils/targeting-helper.js": "js/utils/targeting-helper-d23037a67a-rev.js", | |
"js/utils/urs-helper.js": "js/utils/urs-helper-ba9e574ab1-rev.js", | |
"js/utils/userAgentSniffer.js": "js/utils/userAgentSniffer-b15c26389c-rev.js", | |
"js/workers/service-worker.js": "js/workers/service-worker-8bcd01def0-rev.js" | |
} | |
, n = e; | |
return t[e.substring(1)] && (n = "/" + t[e.substring(1)]), | |
n | |
} | |
function n(e) { | |
if (window.CnetPageVars.assetsHosts && window.CnetPageVars.assetsHosts.length > 0 && -1 === e.indexOf("//")) { | |
var t = e.length % window.CnetPageVars.assetsHosts.length | |
, n = /\w+-fly(.*)/.exec(e); | |
return null !== n && (t = n[1].length % window.CnetPageVars.assetsHosts.length), | |
window.CnetPageVars.assetsHosts[t] + e | |
} | |
return e | |
} | |
var i = e.load; | |
e.load = function(r, o, a) { | |
return a = n(t(a)), | |
i.apply(e, arguments) | |
} | |
}(requirejs), | |
define("main.default", function() {}); | |
;(I11C || I10C).ScriptEnd(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment