편집 요약 없음 |
편집 요약 없음 |
||
| 1번째 줄: | 1번째 줄: | ||
mw.loader.implement("jquery@ef683", function($, jQuery, require, module) { | |||
(function(global, factory) { | |||
"use strict"; | |||
if (typeof module === "object" && typeof module.exports === "object") { | |||
module.exports = global.document ? factory(global, true) : function(w) { | |||
if (!w.document) { | |||
throw new Error("jQuery requires a window with a document"); | |||
} | |||
return factory(w); | |||
} | |||
; | |||
} else { | |||
factory(global); | |||
} | |||
} | |||
)(typeof window !== "undefined" ? window : this, function(window, noGlobal) { | |||
"use strict"; | |||
var arr = []; | |||
var getProto = Object.getPrototypeOf; | |||
var slice = arr.slice; | |||
var flat = arr.flat ? function(array) { | |||
return arr.flat.call(array); | |||
} | |||
: function(array) { | |||
return arr.concat.apply([], array); | |||
} | |||
; | |||
var push = arr.push; | |||
var indexOf = arr.indexOf; | |||
var class2type = {}; | |||
var toString = class2type.toString; | |||
var hasOwn = class2type.hasOwnProperty; | |||
var fnToString = hasOwn.toString; | |||
var ObjectFunctionString = fnToString.call(Object); | |||
var support = {}; | |||
var isFunction = function isFunction(obj) { | |||
return typeof obj === "function" && typeof obj.nodeType !== "number" && typeof obj.item !== "function"; | |||
}; | |||
var isWindow = function isWindow(obj) { | |||
return obj != null && obj === obj.window; | |||
}; | |||
var document = window.document; | |||
var preservedScriptAttributes = { | |||
type: true, | |||
src: true, | |||
nonce: true, | |||
noModule: true | |||
}; | |||
function DOMEval(code, node, doc) { | |||
doc = doc || document; | |||
var i, val, script = doc.createElement("script"); | |||
script.text = code; | |||
if (node) { | |||
for (i in preservedScriptAttributes) { | |||
val = node[i] || node.getAttribute && node.getAttribute(i); | |||
if (val) { | |||
script.setAttribute(i, val); | |||
} | |||
} | |||
} | |||
doc.head.appendChild(script).parentNode.removeChild(script); | |||
} | |||
function toType(obj) { | |||
if (obj == null) { | |||
return obj + ""; | |||
} | |||
return typeof obj === "object" || typeof obj === "function" ? class2type[toString.call(obj)] || "object" : typeof obj; | |||
} | |||
var version = "3.7.1" | |||
, rhtmlSuffix = /HTML$/i | |||
, jQuery = function(selector, context) { | |||
return new jQuery.fn.init(selector,context); | |||
}; | |||
jQuery.fn = jQuery.prototype = { | |||
jquery: version, | |||
constructor: jQuery, | |||
length: 0, | |||
toArray: function() { | |||
return slice.call(this); | |||
}, | |||
get: function(num) { | |||
if (num == null) { | |||
return slice.call(this); | |||
} | |||
return num < 0 ? this[num + this.length] : this[num]; | |||
}, | |||
pushStack: function(elems) { | |||
var ret = jQuery.merge(this.constructor(), elems); | |||
ret.prevObject = this; | |||
return ret; | |||
}, | |||
each: function(callback) { | |||
return jQuery.each(this, callback); | |||
}, | |||
map: function(callback) { | |||
return this.pushStack(jQuery.map(this, function(elem, i) { | |||
return callback.call(elem, i, elem); | |||
})); | |||
}, | |||
slice: function() { | |||
return this.pushStack(slice.apply(this, arguments)); | |||
}, | |||
first: function() { | |||
return this.eq(0); | |||
}, | |||
last: function() { | |||
return this.eq(-1); | |||
}, | |||
even: function() { | |||
return this.pushStack(jQuery.grep(this, function(_elem, i) { | |||
return (i + 1) % 2; | |||
})); | |||
}, | |||
odd: function() { | |||
return this.pushStack(jQuery.grep(this, function(_elem, i) { | |||
return i % 2; | |||
})); | |||
}, | |||
eq: function(i) { | |||
var len = this.length | |||
, j = +i + (i < 0 ? len : 0); | |||
return this.pushStack(j >= 0 && j < len ? [this[j]] : []); | |||
}, | |||
end: function() { | |||
return this.prevObject || this.constructor(); | |||
}, | |||
push: push, | |||
sort: arr.sort, | |||
splice: arr.splice | |||
}; | |||
jQuery.extend = jQuery.fn.extend = function() { | |||
var options, name, src, copy, copyIsArray, clone, target = arguments[0] || {}, i = 1, length = arguments.length, deep = false; | |||
if (typeof target === "boolean") { | |||
deep = target; | |||
target = arguments[i] || {}; | |||
i++; | |||
} | |||
if (typeof target !== "object" && !isFunction(target)) { | |||
target = {}; | |||
} | |||
if (i === length) { | |||
target = this; | |||
i--; | |||
} | |||
for (; i < length; i++) { | |||
if ((options = arguments[i]) != null) { | |||
for (name in options) { | |||
copy = options[name]; | |||
if (name === "__proto__" || target === copy) { | |||
continue; | |||
} | |||
if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = Array.isArray(copy)))) { | |||
src = target[name]; | |||
if (copyIsArray && !Array.isArray(src)) { | |||
clone = []; | |||
} else if (!copyIsArray && !jQuery.isPlainObject(src)) { | |||
clone = {}; | |||
} else { | |||
clone = src; | |||
} | |||
copyIsArray = false; | |||
target[name] = jQuery.extend(deep, clone, copy); | |||
} else if (copy !== undefined) { | |||
target[name] = copy; | |||
} | |||
} | |||
} | |||
} | |||
return target; | |||
} | |||
; | |||
jQuery.extend({ | |||
expando: "jQuery" + (version + Math.random()).replace(/\D/g, ""), | |||
isReady: true, | |||
error: function(msg) { | |||
throw new Error(msg); | |||
}, | |||
noop: function() {}, | |||
isPlainObject: function(obj) { | |||
var proto, Ctor; | |||
if (!obj || toString.call(obj) !== "[object Object]") { | |||
return false; | |||
} | |||
proto = getProto(obj); | |||
if (!proto) { | |||
return true; | |||
} | |||
Ctor = hasOwn.call(proto, "constructor") && proto.constructor; | |||
return typeof Ctor === "function" && fnToString.call(Ctor) === ObjectFunctionString; | |||
}, | |||
isEmptyObject: function(obj) { | |||
var name; | |||
for (name in obj) { | |||
return false; | |||
} | |||
return true; | |||
}, | |||
globalEval: function(code, options, doc) { | |||
DOMEval(code, { | |||
nonce: options && options.nonce | |||
}, doc); | |||
}, | |||
each: function(obj, callback) { | |||
var length, i = 0; | |||
if (isArrayLike(obj)) { | |||
length = obj.length; | |||
for (; i < length; i++) { | |||
if (callback.call(obj[i], i, obj[i]) === false) { | |||
break; | |||
} | |||
} | |||
} else { | |||
for (i in obj) { | |||
if (callback.call(obj[i], i, obj[i]) === false) { | |||
break; | |||
} | |||
} | |||
} | |||
return obj; | |||
}, | |||
text: function(elem) { | |||
var node, ret = "", i = 0, nodeType = elem.nodeType; | |||
if (!nodeType) { | |||
while ((node = elem[i++])) { | |||
ret += jQuery.text(node); | |||
} | |||
} | |||
if (nodeType === 1 || nodeType === 11) { | |||
return elem.textContent; | |||
} | |||
if (nodeType === 9) { | |||
return elem.documentElement.textContent; | |||
} | |||
if (nodeType === 3 || nodeType === 4) { | |||
return elem.nodeValue; | |||
} | |||
return ret; | |||
}, | |||
makeArray: function(arr, results) { | |||
var ret = results || []; | |||
if (arr != null) { | |||
if (isArrayLike(Object(arr))) { | |||
jQuery.merge(ret, typeof arr === "string" ? [arr] : arr); | |||
} else { | |||
push.call(ret, arr); | |||
} | |||
} | |||
return ret; | |||
}, | |||
inArray: function(elem, arr, i) { | |||
return arr == null ? -1 : indexOf.call(arr, elem, i); | |||
}, | |||
isXMLDoc: function(elem) { | |||
var namespace = elem && elem.namespaceURI | |||
, docElem = elem && (elem.ownerDocument || elem).documentElement; | |||
return !rhtmlSuffix.test(namespace || docElem && docElem.nodeName || "HTML"); | |||
}, | |||
merge: function(first, second) { | |||
var len = +second.length | |||
, j = 0 | |||
, i = first.length; | |||
for (; j < len; j++) { | |||
first[i++] = second[j]; | |||
} | |||
first.length = i; | |||
return first; | |||
}, | |||
grep: function(elems, callback, invert) { | |||
var callbackInverse, matches = [], i = 0, length = elems.length, callbackExpect = !invert; | |||
for (; i < length; i++) { | |||
callbackInverse = !callback(elems[i], i); | |||
if (callbackInverse !== callbackExpect) { | |||
matches.push(elems[i]); | |||
} | |||
} | |||
return matches; | |||
}, | |||
map: function(elems, callback, arg) { | |||
var length, value, i = 0, ret = []; | |||
if (isArrayLike(elems)) { | |||
length = elems.length; | |||
for (; i < length; i++) { | |||
value = callback(elems[i], i, arg); | |||
if (value != null) { | |||
ret.push(value); | |||
} | |||
} | |||
} else { | |||
for (i in elems) { | |||
value = callback(elems[i], i, arg); | |||
if (value != null) { | |||
ret.push(value); | |||
} | |||
} | |||
} | |||
return flat(ret); | |||
}, | |||
guid: 1, | |||
support: support | |||
}); | |||
if (typeof Symbol === "function") { | |||
jQuery.fn[Symbol.iterator] = arr[Symbol.iterator]; | |||
} | |||
jQuery.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), function(_i, name) { | |||
class2type["[object " + name + "]"] = name.toLowerCase(); | |||
}); | |||
function isArrayLike(obj) { | |||
var length = !!obj && "length"in obj && obj.length | |||
, type = toType(obj); | |||
if (isFunction(obj) || isWindow(obj)) { | |||
return false; | |||
} | |||
return type === "array" || length === 0 || typeof length === "number" && length > 0 && (length - 1)in obj; | |||
} | |||
function nodeName(elem, name) { | |||
return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); | |||
} | |||
var pop = arr.pop; | |||
var sort = arr.sort; | |||
var splice = arr.splice; | |||
var whitespace = "[\\x20\\t\\r\\n\\f]"; | |||
var rtrimCSS = new RegExp("^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$","g"); | |||
jQuery.contains = function(a, b) { | |||
var bup = b && b.parentNode; | |||
return a === bup || !!(bup && bup.nodeType === 1 && (a.contains ? a.contains(bup) : a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16)); | |||
} | |||
; | |||
var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g; | |||
function fcssescape(ch, asCodePoint) { | |||
if (asCodePoint) { | |||
if (ch === "\0") { | |||
return "\uFFFD"; | |||
} | |||
return ch.slice(0, -1) + "\\" + ch.charCodeAt(ch.length - 1).toString(16) + " "; | |||
} | |||
return "\\" + ch; | |||
} | |||
jQuery.escapeSelector = function(sel) { | |||
return (sel + "").replace(rcssescape, fcssescape); | |||
} | |||
; | |||
var preferredDoc = document | |||
, pushNative = push; | |||
(function() { | |||
var i, Expr, outermostContext, sortInput, hasDuplicate, push = pushNative, document, documentElement, documentIsHTML, rbuggyQSA, matches, expando = jQuery.expando, dirruns = 0, done = 0, classCache = createCache(), tokenCache = createCache(), compilerCache = createCache(), nonnativeSelectorCache = createCache(), sortOrder = function(a, b) { | |||
if (a === b) { | |||
hasDuplicate = true; | |||
} | |||
return 0; | |||
}, booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|" + "loop|multiple|open|readonly|required|scoped", identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + "*([*^$|!~]?=)" + whitespace + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + "*\\]", pseudos = ":(" + identifier + ")(?:\\((" + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + ".*" + ")\\)|)", rwhitespace = new RegExp(whitespace + "+","g"), rcomma = new RegExp("^" + whitespace + "*," + whitespace + "*"), rleadingCombinator = new RegExp("^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*"), rdescend = new RegExp(whitespace + "|>"), rpseudo = new RegExp(pseudos), ridentifier = new RegExp("^" + identifier + "$"), matchExpr = { | |||
ID: new RegExp("^#(" + identifier + ")"), | |||
CLASS: new RegExp("^\\.(" + identifier + ")"), | |||
TAG: new RegExp("^(" + identifier + "|[*])"), | |||
ATTR: new RegExp("^" + attributes), | |||
PSEUDO: new RegExp("^" + pseudos), | |||
CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)","i"), | |||
bool: new RegExp("^(?:" + booleans + ")$","i"), | |||
needsContext: new RegExp("^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)","i") | |||
}, rinputs = /^(?:input|select|textarea|button)$/i, rheader = /^h\d$/i, rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, rsibling = /[+~]/, runescape = new RegExp("\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])","g"), funescape = function(escape, nonHex) { | |||
var high = "0x" + escape.slice(1) - 0x10000; | |||
if (nonHex) { | |||
return nonHex; | |||
} | |||
return high < 0 ? String.fromCharCode(high + 0x10000) : String.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00); | |||
}, unloadHandler = function() { | |||
setDocument(); | |||
}, inDisabledFieldset = addCombinator(function(elem) { | |||
return elem.disabled === true && nodeName(elem, "fieldset"); | |||
}, { | |||
dir: "parentNode", | |||
next: "legend" | |||
}); | |||
function safeActiveElement() { | |||
try { | |||
return document.activeElement; | |||
} catch (err) {} | |||
} | |||
try { | |||
push.apply((arr = slice.call(preferredDoc.childNodes)), preferredDoc.childNodes); | |||
arr[preferredDoc.childNodes.length].nodeType; | |||
} catch (e) { | |||
push = { | |||
apply: function(target, els) { | |||
pushNative.apply(target, slice.call(els)); | |||
}, | |||
call: function(target) { | |||
pushNative.apply(target, slice.call(arguments, 1)); | |||
} | |||
}; | |||
} | |||
function find(selector, context, results, seed) { | |||
var m, i, elem, nid, match, groups, newSelector, newContext = context && context.ownerDocument, nodeType = context ? context.nodeType : 9; | |||
results = results || []; | |||
if (typeof selector !== "string" || !selector || nodeType !== 1 && nodeType !== 9 && nodeType !== 11) { | |||
return results; | |||
} | |||
if (!seed) { | |||
setDocument(context); | |||
context = context || document; | |||
if (documentIsHTML) { | |||
if (nodeType !== 11 && (match = rquickExpr.exec(selector))) { | |||
if ((m = match[1])) { | |||
if (nodeType === 9) { | |||
if ((elem = context.getElementById(m))) { | |||
if (elem.id === m) { | |||
push.call(results, elem); | |||
return results; | |||
} | |||
} else { | |||
return results; | |||
} | |||
} else { | |||
if (newContext && (elem = newContext.getElementById(m)) && find.contains(context, elem) && elem.id === m) { | |||
push.call(results, elem); | |||
return results; | |||
} | |||
} | |||
} else if (match[2]) { | |||
push.apply(results, context.getElementsByTagName(selector)); | |||
return results; | |||
} else if ((m = match[3]) && context.getElementsByClassName) { | |||
push.apply(results, context.getElementsByClassName(m)); | |||
return results; | |||
} | |||
} | |||
if (!nonnativeSelectorCache[selector + " "] && (!rbuggyQSA || !rbuggyQSA.test(selector))) { | |||
newSelector = selector; | |||
newContext = context; | |||
if (nodeType === 1 && (rdescend.test(selector) || rleadingCombinator.test(selector))) { | |||
newContext = rsibling.test(selector) && testContext(context.parentNode) || context; | |||
if (newContext != context || !support.scope) { | |||
if ((nid = context.getAttribute("id"))) { | |||
nid = jQuery.escapeSelector(nid); | |||
} else { | |||
context.setAttribute("id", (nid = expando)); | |||
} | |||
} | |||
groups = tokenize(selector); | |||
i = groups.length; | |||
while (i--) { | |||
groups[i] = (nid ? "#" + nid : ":scope") + " " + toSelector(groups[i]); | |||
} | |||
newSelector = groups.join(","); | |||
} | |||
try { | |||
push.apply(results, newContext.querySelectorAll(newSelector)); | |||
return results; | |||
} catch (qsaError) { | |||
nonnativeSelectorCache(selector, true); | |||
} finally { | |||
if (nid === expando) { | |||
context.removeAttribute("id"); | |||
} | |||
} | |||
} | |||
} | |||
} | |||
return select(selector.replace(rtrimCSS, "$1"), context, results, seed); | |||
} | |||
function createCache() { | |||
var keys = []; | |||
function cache(key, value) { | |||
if (keys.push(key + " ") > Expr.cacheLength) { | |||
delete cache[keys.shift()]; | |||
} | |||
return (cache[key + " "] = value); | |||
} | |||
return cache; | |||
} | |||
function markFunction(fn) { | |||
fn[expando] = true; | |||
return fn; | |||
} | |||
function assert(fn) { | |||
var el = document.createElement("fieldset"); | |||
try { | |||
return !!fn(el); | |||
} catch (e) { | |||
return false; | |||
} finally { | |||
if (el.parentNode) { | |||
el.parentNode.removeChild(el); | |||
} | |||
el = null; | |||
} | |||
} | |||
function createInputPseudo(type) { | |||
return function(elem) { | |||
return nodeName(elem, "input") && elem.type === type; | |||
} | |||
; | |||
} | |||
function createButtonPseudo(type) { | |||
return function(elem) { | |||
return (nodeName(elem, "input") || nodeName(elem, "button")) && elem.type === type; | |||
} | |||
; | |||
} | |||
function createDisabledPseudo(disabled) { | |||
return function(elem) { | |||
if ("form"in elem) { | |||
if (elem.parentNode && elem.disabled === false) { | |||
if ("label"in elem) { | |||
if ("label"in elem.parentNode) { | |||
return elem.parentNode.disabled === disabled; | |||
} else { | |||
return elem.disabled === disabled; | |||
} | |||
} | |||
return elem.isDisabled === disabled || elem.isDisabled !== !disabled && inDisabledFieldset(elem) === disabled; | |||
} | |||
return elem.disabled === disabled; | |||
} else if ("label"in elem) { | |||
return elem.disabled === disabled; | |||
} | |||
return false; | |||
} | |||
; | |||
} | |||
function createPositionalPseudo(fn) { | |||
return markFunction(function(argument) { | |||
argument = +argument; | |||
return markFunction(function(seed, matches) { | |||
var j, matchIndexes = fn([], seed.length, argument), i = matchIndexes.length; | |||
while (i--) { | |||
if (seed[(j = matchIndexes[i])]) { | |||
seed[j] = !(matches[j] = seed[j]); | |||
} | |||
} | |||
}); | |||
}); | |||
} | |||
function testContext(context) { | |||
return context && typeof context.getElementsByTagName !== "undefined" && context; | |||
} | |||
function setDocument(node) { | |||
var subWindow, doc = node ? node.ownerDocument || node : preferredDoc; | |||
if (doc == document || doc.nodeType !== 9 || !doc.documentElement) { | |||
return document; | |||
} | |||
document = doc; | |||
documentElement = document.documentElement; | |||
documentIsHTML = !jQuery.isXMLDoc(document); | |||
matches = documentElement.matches || documentElement.webkitMatchesSelector || documentElement.msMatchesSelector; | |||
if (documentElement.msMatchesSelector && preferredDoc != document && (subWindow = document.defaultView) && subWindow.top !== subWindow) { | |||
subWindow.addEventListener("unload", unloadHandler); | |||
} | |||
support.getById = assert(function(el) { | |||
documentElement.appendChild(el).id = jQuery.expando; | |||
return !document.getElementsByName || !document.getElementsByName(jQuery.expando).length; | |||
}); | |||
support.disconnectedMatch = assert(function(el) { | |||
return matches.call(el, "*"); | |||
}); | |||
support.scope = assert(function() { | |||
return document.querySelectorAll(":scope"); | |||
}); | |||
support.cssHas = assert(function() { | |||
try { | |||
document.querySelector(":has(*,:jqfake)"); | |||
return false; | |||
} catch (e) { | |||
return true; | |||
} | |||
}); | |||
if (support.getById) { | |||
Expr.filter.ID = function(id) { | |||
var attrId = id.replace(runescape, funescape); | |||
return function(elem) { | |||
return elem.getAttribute("id") === attrId; | |||
} | |||
; | |||
} | |||
; | |||
Expr.find.ID = function(id, context) { | |||
if (typeof context.getElementById !== "undefined" && documentIsHTML) { | |||
var elem = context.getElementById(id); | |||
return elem ? [elem] : []; | |||
} | |||
} | |||
; | |||
} else { | |||
Expr.filter.ID = function(id) { | |||
var attrId = id.replace(runescape, funescape); | |||
return function(elem) { | |||
var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); | |||
return node && node.value === attrId; | |||
} | |||
; | |||
} | |||
; | |||
Expr.find.ID = function(id, context) { | |||
if (typeof context.getElementById !== "undefined" && documentIsHTML) { | |||
var node, i, elems, elem = context.getElementById(id); | |||
if (elem) { | |||
node = elem.getAttributeNode("id"); | |||
if (node && node.value === id) { | |||
return [elem]; | |||
} | |||
elems = context.getElementsByName(id); | |||
i = 0; | |||
while ((elem = elems[i++])) { | |||
node = elem.getAttributeNode("id"); | |||
if (node && node.value === id) { | |||
return [elem]; | |||
} | |||
} | |||
} | |||
return []; | |||
} | |||
} | |||
; | |||
} | |||
Expr.find.TAG = function(tag, context) { | |||
if (typeof context.getElementsByTagName !== "undefined") { | |||
return context.getElementsByTagName(tag); | |||
} else { | |||
return context.querySelectorAll(tag); | |||
} | |||
} | |||
; | |||
Expr.find.CLASS = function(className, context) { | |||
if (typeof context.getElementsByClassName !== "undefined" && documentIsHTML) { | |||
return context.getElementsByClassName(className); | |||
} | |||
} | |||
; | |||
rbuggyQSA = []; | |||
assert(function(el) { | |||
var input; | |||
documentElement.appendChild(el).innerHTML = "<a id='" + expando + "' href='' disabled='disabled'></a>" + "<select id='" + expando + "-\r\\' disabled='disabled'>" + "<option selected=''></option></select>"; | |||
if (!el.querySelectorAll("[selected]").length) { | |||
rbuggyQSA.push("\\[" + whitespace + "*(?:value|" + booleans + ")"); | |||
} | |||
if (!el.querySelectorAll("[id~=" + expando + "-]").length) { | |||
rbuggyQSA.push("~="); | |||
} | |||
if (!el.querySelectorAll("a#" + expando + "+*").length) { | |||
rbuggyQSA.push(".#.+[+~]"); | |||
} | |||
if (!el.querySelectorAll(":checked").length) { | |||
rbuggyQSA.push(":checked"); | |||
} | |||
input = document.createElement("input"); | |||
input.setAttribute("type", "hidden"); | |||
el.appendChild(input).setAttribute("name", "D"); | |||
documentElement.appendChild(el).disabled = true; | |||
if (el.querySelectorAll(":disabled").length !== 2) { | |||
rbuggyQSA.push(":enabled", ":disabled"); | |||
} | |||
input = document.createElement("input"); | |||
input.setAttribute("name", ""); | |||
el.appendChild(input); | |||
if (!el.querySelectorAll("[name='']").length) { | |||
rbuggyQSA.push("\\[" + whitespace + "*name" + whitespace + "*=" + whitespace + "*(?:''|\"\")"); | |||
} | |||
}); | |||
if (!support.cssHas) { | |||
rbuggyQSA.push(":has"); | |||
} | |||
rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join("|")); | |||
sortOrder = function(a, b) { | |||
if (a === b) { | |||
hasDuplicate = true; | |||
return 0; | |||
} | |||
var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; | |||
if (compare) { | |||
return compare; | |||
} | |||
compare = (a.ownerDocument || a) == (b.ownerDocument || b) ? a.compareDocumentPosition(b) : 1; | |||
if (compare & 1 || (!support.sortDetached && b.compareDocumentPosition(a) === compare)) { | |||
if (a === document || a.ownerDocument == preferredDoc && find.contains(preferredDoc, a)) { | |||
return -1; | |||
} | |||
if (b === document || b.ownerDocument == preferredDoc && find.contains(preferredDoc, b)) { | |||
return 1; | |||
} | |||
return sortInput ? (indexOf.call(sortInput, a) - indexOf.call(sortInput, b)) : 0; | |||
} | |||
return compare & 4 ? -1 : 1; | |||
} | |||
; | |||
return document; | |||
} | |||
find.matches = function(expr, elements) { | |||
return find(expr, null, null, elements); | |||
} | |||
; | |||
find.matchesSelector = function(elem, expr) { | |||
setDocument(elem); | |||
if (documentIsHTML && !nonnativeSelectorCache[expr + " "] && (!rbuggyQSA || !rbuggyQSA.test(expr))) { | |||
try { | |||
var ret = matches.call(elem, expr); | |||
if (ret || support.disconnectedMatch || elem.document && elem.document.nodeType !== 11) { | |||
return ret; | |||
} | |||
} catch (e) { | |||
nonnativeSelectorCache(expr, true); | |||
} | |||
} | |||
return find(expr, document, null, [elem]).length > 0; | |||
} | |||
; | |||
find.contains = function(context, elem) { | |||
if ((context.ownerDocument || context) != document) { | |||
setDocument(context); | |||
} | |||
return jQuery.contains(context, elem); | |||
} | |||
; | |||
find.attr = function(elem, name) { | |||
if ((elem.ownerDocument || elem) != document) { | |||
setDocument(elem); | |||
} | |||
var fn = Expr.attrHandle[name.toLowerCase()] | |||
, val = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ? fn(elem, name, !documentIsHTML) : undefined; | |||
if (val !== undefined) { | |||
return val; | |||
} | |||
return elem.getAttribute(name); | |||
} | |||
; | |||
find.error = function(msg) { | |||
throw new Error("Syntax error, unrecognized expression: " + msg); | |||
} | |||
; | |||
jQuery.uniqueSort = function(results) { | |||
var elem, duplicates = [], j = 0, i = 0; | |||
hasDuplicate = !support.sortStable; | |||
sortInput = !support.sortStable && slice.call(results, 0); | |||
sort.call(results, sortOrder); | |||
if (hasDuplicate) { | |||
while ((elem = results[i++])) { | |||
if (elem === results[i]) { | |||
j = duplicates.push(i); | |||
} | |||
} | |||
while (j--) { | |||
splice.call(results, duplicates[j], 1); | |||
} | |||
} | |||
sortInput = null; | |||
return results; | |||
} | |||
; | |||
jQuery.fn.uniqueSort = function() { | |||
return this.pushStack(jQuery.uniqueSort(slice.apply(this))); | |||
} | |||
; | |||
Expr = jQuery.expr = { | |||
cacheLength: 50, | |||
createPseudo: markFunction, | |||
match: matchExpr, | |||
attrHandle: {}, | |||
find: {}, | |||
relative: { | |||
">": { | |||
dir: "parentNode", | |||
first: true | |||
}, | |||
" ": { | |||
dir: "parentNode" | |||
}, | |||
"+": { | |||
dir: "previousSibling", | |||
first: true | |||
}, | |||
"~": { | |||
dir: "previousSibling" | |||
} | |||
}, | |||
preFilter: { | |||
ATTR: function(match) { | |||
match[1] = match[1].replace(runescape, funescape); | |||
match[3] = (match[3] || match[4] || match[5] || "").replace(runescape, funescape); | |||
if (match[2] === "~=") { | |||
match[3] = " " + match[3] + " "; | |||
} | |||
return match.slice(0, 4); | |||
}, | |||
CHILD: function(match) { | |||
match[1] = match[1].toLowerCase(); | |||
if (match[1].slice(0, 3) === "nth") { | |||
if (!match[3]) { | |||
find.error(match[0]); | |||
} | |||
match[4] = +(match[4] ? match[5] + (match[6] || 1) : 2 * (match[3] === "even" || match[3] === "odd")); | |||
match[5] = +((match[7] + match[8]) || match[3] === "odd"); | |||
} else if (match[3]) { | |||
find.error(match[0]); | |||
} | |||
return match; | |||
}, | |||
PSEUDO: function(match) { | |||
var excess, unquoted = !match[6] && match[2]; | |||
if (matchExpr.CHILD.test(match[0])) { | |||
return null; | |||
} | |||
if (match[3]) { | |||
match[2] = match[4] || match[5] || ""; | |||
} else if (unquoted && rpseudo.test(unquoted) && (excess = tokenize(unquoted, true)) && (excess = unquoted.indexOf(")", unquoted.length - excess) - unquoted.length)) { | |||
match[0] = match[0].slice(0, excess); | |||
match[2] = unquoted.slice(0, excess); | |||
} | |||
return match.slice(0, 3); | |||
} | |||
}, | |||
filter: { | |||
TAG: function(nodeNameSelector) { | |||
var expectedNodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase(); | |||
return nodeNameSelector === "*" ? function() { | |||
return true; | |||
} | |||
: function(elem) { | |||
return nodeName(elem, expectedNodeName); | |||
} | |||
; | |||
}, | |||
CLASS: function(className) { | |||
var pattern = classCache[className + " "]; | |||
return pattern || (pattern = new RegExp("(^|" + whitespace + ")" + className + "(" + whitespace + "|$)")) && classCache(className, function(elem) { | |||
return pattern.test(typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || ""); | |||
}); | |||
}, | |||
ATTR: function(name, operator, check) { | |||
return function(elem) { | |||
var result = find.attr(elem, name); | |||
if (result == null) { | |||
return operator === "!="; | |||
} | |||
if (!operator) { | |||
return true; | |||
} | |||
result += ""; | |||
if (operator === "=") { | |||
return result === check; | |||
} | |||
if (operator === "!=") { | |||
return result !== check; | |||
} | |||
if (operator === "^=") { | |||
return check && result.indexOf(check) === 0; | |||
} | |||
if (operator === "*=") { | |||
return check && result.indexOf(check) > -1; | |||
} | |||
if (operator === "$=") { | |||
return check && result.slice(-check.length) === check; | |||
} | |||
if (operator === "~=") { | |||
return (" " + result.replace(rwhitespace, " ") + " ").indexOf(check) > -1; | |||
} | |||
if (operator === "|=") { | |||
return result === check || result.slice(0, check.length + 1) === check + "-"; | |||
} | |||
return false; | |||
} | |||
; | |||
}, | |||
CHILD: function(type, what, _argument, first, last) { | |||
var simple = type.slice(0, 3) !== "nth" | |||
, forward = type.slice(-4) !== "last" | |||
, ofType = what === "of-type"; | |||
return first === 1 && last === 0 ? function(elem) { | |||
return !!elem.parentNode; | |||
} | |||
: function(elem, _context, xml) { | |||
var cache, outerCache, node, nodeIndex, start, dir = simple !== forward ? "nextSibling" : "previousSibling", parent = elem.parentNode, name = ofType && elem.nodeName.toLowerCase(), useCache = !xml && !ofType, diff = false; | |||
if (parent) { | |||
if (simple) { | |||
while (dir) { | |||
node = elem; | |||
while ((node = node[dir])) { | |||
if (ofType ? nodeName(node, name) : node.nodeType === 1) { | |||
return false; | |||
} | |||
} | |||
start = dir = type === "only" && !start && "nextSibling"; | |||
} | |||
return true; | |||
} | |||
start = [forward ? parent.firstChild : parent.lastChild]; | |||
if (forward && useCache) { | |||
outerCache = parent[expando] || (parent[expando] = {}); | |||
cache = outerCache[type] || []; | |||
nodeIndex = cache[0] === dirruns && cache[1]; | |||
diff = nodeIndex && cache[2]; | |||
node = nodeIndex && parent.childNodes[nodeIndex]; | |||
while ((node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop())) { | |||
if (node.nodeType === 1 && ++diff && node === elem) { | |||
outerCache[type] = [dirruns, nodeIndex, diff]; | |||
break; | |||
} | |||
} | |||
} else { | |||
if (useCache) { | |||
outerCache = elem[expando] || (elem[expando] = {}); | |||
cache = outerCache[type] || []; | |||
nodeIndex = cache[0] === dirruns && cache[1]; | |||
diff = nodeIndex; | |||
} | |||
if (diff === false) { | |||
while ((node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop())) { | |||
if ((ofType ? nodeName(node, name) : node.nodeType === 1) && ++diff) { | |||
if (useCache) { | |||
outerCache = node[expando] || (node[expando] = {}); | |||
outerCache[type] = [dirruns, diff]; | |||
} | |||
if (node === elem) { | |||
break; | |||
} | |||
} | |||
} | |||
} | |||
} | |||
diff -= last; | |||
return diff === first || (diff % first === 0 && diff / first >= 0); | |||
} | |||
} | |||
; | |||
}, | |||
PSEUDO: function(pseudo, argument) { | |||
var args, fn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] || find.error("unsupported pseudo: " + pseudo); | |||
if (fn[expando]) { | |||
return fn(argument); | |||
} | |||
if (fn.length > 1) { | |||
args = [pseudo, pseudo, "", argument]; | |||
return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ? markFunction(function(seed, matches) { | |||
var idx, matched = fn(seed, argument), i = matched.length; | |||
while (i--) { | |||
idx = indexOf.call(seed, matched[i]); | |||
seed[idx] = !(matches[idx] = matched[i]); | |||
} | |||
}) : function(elem) { | |||
return fn(elem, 0, args); | |||
} | |||
; | |||
} | |||
return fn; | |||
} | |||
}, | |||
pseudos: { | |||
not: markFunction(function(selector) { | |||
var input = [] | |||
, results = [] | |||
, matcher = compile(selector.replace(rtrimCSS, "$1")); | |||
return matcher[expando] ? markFunction(function(seed, matches, _context, xml) { | |||
var elem, unmatched = matcher(seed, null, xml, []), i = seed.length; | |||
while (i--) { | |||
if ((elem = unmatched[i])) { | |||
seed[i] = !(matches[i] = elem); | |||
} | |||
} | |||
}) : function(elem, _context, xml) { | |||
input[0] = elem; | |||
matcher(input, null, xml, results); | |||
input[0] = null; | |||
return !results.pop(); | |||
} | |||
; | |||
}), | |||
has: markFunction(function(selector) { | |||
return function(elem) { | |||
return find(selector, elem).length > 0; | |||
} | |||
; | |||
}), | |||
contains: markFunction(function(text) { | |||
text = text.replace(runescape, funescape); | |||
return function(elem) { | |||
return (elem.textContent || jQuery.text(elem)).indexOf(text) > -1; | |||
} | |||
; | |||
}), | |||
lang: markFunction(function(lang) { | |||
if (!ridentifier.test(lang || "")) { | |||
find.error("unsupported lang: " + lang); | |||
} | |||
lang = lang.replace(runescape, funescape).toLowerCase(); | |||
return function(elem) { | |||
var elemLang; | |||
do { | |||
if ((elemLang = documentIsHTML ? elem.lang : elem.getAttribute("xml:lang") || elem.getAttribute("lang"))) { | |||
elemLang = elemLang.toLowerCase(); | |||
return elemLang === lang || elemLang.indexOf(lang + "-") === 0; | |||
} | |||
} while ((elem = elem.parentNode) && elem.nodeType === 1); | |||
return false; | |||
} | |||
; | |||
}), | |||
target: function(elem) { | |||
var hash = window.location && window.location.hash; | |||
return hash && hash.slice(1) === elem.id; | |||
}, | |||
root: function(elem) { | |||
return elem === documentElement; | |||
}, | |||
focus: function(elem) { | |||
return elem === safeActiveElement() && document.hasFocus() && !!(elem.type || elem.href || ~elem.tabIndex); | |||
}, | |||
enabled: createDisabledPseudo(false), | |||
disabled: createDisabledPseudo(true), | |||
checked: function(elem) { | |||
return (nodeName(elem, "input") && !!elem.checked) || (nodeName(elem, "option") && !!elem.selected); | |||
}, | |||
selected: function(elem) { | |||
if (elem.parentNode) { | |||
elem.parentNode.selectedIndex; | |||
} | |||
return elem.selected === true; | |||
}, | |||
empty: function(elem) { | |||
for (elem = elem.firstChild; elem; elem = elem.nextSibling) { | |||
if (elem.nodeType < 6) { | |||
return false; | |||
} | |||
} | |||
return true; | |||
}, | |||
parent: function(elem) { | |||
return !Expr.pseudos.empty(elem); | |||
}, | |||
header: function(elem) { | |||
return rheader.test(elem.nodeName); | |||
}, | |||
input: function(elem) { | |||
return rinputs.test(elem.nodeName); | |||
}, | |||
button: function(elem) { | |||
return nodeName(elem, "input") && elem.type === "button" || nodeName(elem, "button"); | |||
}, | |||
text: function(elem) { | |||
var attr; | |||
return nodeName(elem, "input") && elem.type === "text" && ((attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text"); | |||
}, | |||
first: createPositionalPseudo(function() { | |||
return [0]; | |||
}), | |||
last: createPositionalPseudo(function(_matchIndexes, length) { | |||
return [length - 1]; | |||
}), | |||
eq: createPositionalPseudo(function(_matchIndexes, length, argument) { | |||
return [argument < 0 ? argument + length : argument]; | |||
}), | |||
even: createPositionalPseudo(function(matchIndexes, length) { | |||
var i = 0; | |||
for (; i < length; i += 2) { | |||
matchIndexes.push(i); | |||
} | |||
return matchIndexes; | |||
}), | |||
odd: createPositionalPseudo(function(matchIndexes, length) { | |||
var i = 1; | |||
for (; i < length; i += 2) { | |||
matchIndexes.push(i); | |||
} | |||
return matchIndexes; | |||
}), | |||
lt: createPositionalPseudo(function(matchIndexes, length, argument) { | |||
var i; | |||
if (argument < 0) { | |||
i = argument + length; | |||
} else if (argument > length) { | |||
i = length; | |||
} else { | |||
i = argument; | |||
} | |||
for (; --i >= 0; ) { | |||
matchIndexes.push(i); | |||
} | |||
return matchIndexes; | |||
}), | |||
gt: createPositionalPseudo(function(matchIndexes, length, argument) { | |||
var i = argument < 0 ? argument + length : argument; | |||
for (; ++i < length; ) { | |||
matchIndexes.push(i); | |||
} | |||
return matchIndexes; | |||
}) | |||
} | |||
}; | |||
Expr.pseudos.nth = Expr.pseudos.eq; | |||
for (i in { | |||
radio: true, | |||
checkbox: true, | |||
file: true, | |||
password: true, | |||
image: true | |||
}) { | |||
Expr.pseudos[i] = createInputPseudo(i); | |||
} | |||
for (i in { | |||
submit: true, | |||
reset: true | |||
}) { | |||
Expr.pseudos[i] = createButtonPseudo(i); | |||
} | |||
function setFilters() {} | |||
setFilters.prototype = Expr.filters = Expr.pseudos; | |||
Expr.setFilters = new setFilters(); | |||
function tokenize(selector, parseOnly) { | |||
var matched, match, tokens, type, soFar, groups, preFilters, cached = tokenCache[selector + " "]; | |||
if (cached) { | |||
return parseOnly ? 0 : cached.slice(0); | |||
} | |||
soFar = selector; | |||
groups = []; | |||
preFilters = Expr.preFilter; | |||
while (soFar) { | |||
if (!matched || (match = rcomma.exec(soFar))) { | |||
if (match) { | |||
soFar = soFar.slice(match[0].length) || soFar; | |||
} | |||
groups.push((tokens = [])); | |||
} | |||
matched = false; | |||
if ((match = rleadingCombinator.exec(soFar))) { | |||
matched = match.shift(); | |||
tokens.push({ | |||
value: matched, | |||
type: match[0].replace(rtrimCSS, " ") | |||
}); | |||
soFar = soFar.slice(matched.length); | |||
} | |||
for (type in Expr.filter) { | |||
if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] || (match = preFilters[type](match)))) { | |||
matched = match.shift(); | |||
tokens.push({ | |||
value: matched, | |||
type: type, | |||
matches: match | |||
}); | |||
soFar = soFar.slice(matched.length); | |||
} | |||
} | |||
if (!matched) { | |||
break; | |||
} | |||
} | |||
if (parseOnly) { | |||
return soFar.length; | |||
} | |||
return soFar ? find.error(selector) : tokenCache(selector, groups).slice(0); | |||
} | |||
function toSelector(tokens) { | |||
var i = 0 | |||
, len = tokens.length | |||
, selector = ""; | |||
for (; i < len; i++) { | |||
selector += tokens[i].value; | |||
} | |||
return selector; | |||
} | |||
function addCombinator(matcher, combinator, base) { | |||
var dir = combinator.dir | |||
, skip = combinator.next | |||
, key = skip || dir | |||
, checkNonElements = base && key === "parentNode" | |||
, doneName = done++; | |||
return combinator.first ? function(elem, context, xml) { | |||
while ((elem = elem[dir])) { | |||
if (elem.nodeType === 1 || checkNonElements) { | |||
return matcher(elem, context, xml); | |||
} | |||
} | |||
return false; | |||
} | |||
: function(elem, context, xml) { | |||
var oldCache, outerCache, newCache = [dirruns, doneName]; | |||
if (xml) { | |||
while ((elem = elem[dir])) { | |||
if (elem.nodeType === 1 || checkNonElements) { | |||
if (matcher(elem, context, xml)) { | |||
return true; | |||
} | |||
} | |||
} | |||
} else { | |||
while ((elem = elem[dir])) { | |||
if (elem.nodeType === 1 || checkNonElements) { | |||
outerCache = elem[expando] || (elem[expando] = {}); | |||
if (skip && nodeName(elem, skip)) { | |||
elem = elem[dir] || elem; | |||
} else if ((oldCache = outerCache[key]) && oldCache[0] === dirruns && oldCache[1] === doneName) { | |||
return (newCache[2] = oldCache[2]); | |||
} else { | |||
outerCache[key] = newCache; | |||
if ((newCache[2] = matcher(elem, context, xml))) { | |||
return true; | |||
} | |||
} | |||
} | |||
} | |||
} | |||
return false; | |||
} | |||
; | |||
} | |||
function elementMatcher(matchers) { | |||
return matchers.length > 1 ? function(elem, context, xml) { | |||
var i = matchers.length; | |||
while (i--) { | |||
if (!matchers[i](elem, context, xml)) { | |||
return false; | |||
} | |||
} | |||
return true; | |||
} | |||
: matchers[0]; | |||
} | |||
function multipleContexts(selector, contexts, results) { | |||
var i = 0 | |||
, len = contexts.length; | |||
for (; i < len; i++) { | |||
find(selector, contexts[i], results); | |||
} | |||
return results; | |||
} | |||
function condense(unmatched, map, filter, context, xml) { | |||
var elem, newUnmatched = [], i = 0, len = unmatched.length, mapped = map != null; | |||
for (; i < len; i++) { | |||
if ((elem = unmatched[i])) { | |||
if (!filter || filter(elem, context, xml)) { | |||
newUnmatched.push(elem); | |||
if (mapped) { | |||
map.push(i); | |||
} | |||
} | |||
} | |||
} | |||
return newUnmatched; | |||
} | |||
function setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) { | |||
if (postFilter && !postFilter[expando]) { | |||
postFilter = setMatcher(postFilter); | |||
} | |||
if (postFinder && !postFinder[expando]) { | |||
postFinder = setMatcher(postFinder, postSelector); | |||
} | |||
return markFunction(function(seed, results, context, xml) { | |||
var temp, i, elem, matcherOut, preMap = [], postMap = [], preexisting = results.length, elems = seed || multipleContexts(selector || "*", context.nodeType ? [context] : context, []), matcherIn = preFilter && (seed || !selector) ? condense(elems, preMap, preFilter, context, xml) : elems; | |||
if (matcher) { | |||
matcherOut = postFinder || (seed ? preFilter : preexisting || postFilter) ? [] : results; | |||
matcher(matcherIn, matcherOut, context, xml); | |||
} else { | |||
matcherOut = matcherIn; | |||
} | |||
if (postFilter) { | |||
temp = condense(matcherOut, postMap); | |||
postFilter(temp, [], context, xml); | |||
i = temp.length; | |||
while (i--) { | |||
if ((elem = temp[i])) { | |||
matcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem); | |||
} | |||
} | |||
} | |||
if (seed) { | |||
if (postFinder || preFilter) { | |||
if (postFinder) { | |||
temp = []; | |||
i = matcherOut.length; | |||
while (i--) { | |||
if ((elem = matcherOut[i])) { | |||
temp.push((matcherIn[i] = elem)); | |||
} | |||
} | |||
postFinder(null, (matcherOut = []), temp, xml); | |||
} | |||
i = matcherOut.length; | |||
while (i--) { | |||
if ((elem = matcherOut[i]) && (temp = postFinder ? indexOf.call(seed, elem) : preMap[i]) > -1) { | |||
seed[temp] = !(results[temp] = elem); | |||
} | |||
} | |||
} | |||
} else { | |||
matcherOut = condense(matcherOut === results ? matcherOut.splice(preexisting, matcherOut.length) : matcherOut); | |||
if (postFinder) { | |||
postFinder(null, results, matcherOut, xml); | |||
} else { | |||
push.apply(results, matcherOut); | |||
} | |||
} | |||
}); | |||
} | |||
function matcherFromTokens(tokens) { | |||
var checkContext, matcher, j, len = tokens.length, leadingRelative = Expr.relative[tokens[0].type], implicitRelative = leadingRelative || Expr.relative[" "], i = leadingRelative ? 1 : 0, matchContext = addCombinator(function(elem) { | |||
return elem === checkContext; | |||
}, implicitRelative, true), matchAnyContext = addCombinator(function(elem) { | |||
return indexOf.call(checkContext, elem) > -1; | |||
}, implicitRelative, true), matchers = [function(elem, context, xml) { | |||
var ret = (!leadingRelative && (xml || context != outermostContext)) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml)); | |||
checkContext = null; | |||
return ret; | |||
} | |||
]; | |||
for (; i < len; i++) { | |||
if ((matcher = Expr.relative[tokens[i].type])) { | |||
matchers = [addCombinator(elementMatcher(matchers), matcher)]; | |||
} else { | |||
matcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches); | |||
if (matcher[expando]) { | |||
j = ++i; | |||
for (; j < len; j++) { | |||
if (Expr.relative[tokens[j].type]) { | |||
break; | |||
} | |||
} | |||
return setMatcher(i > 1 && elementMatcher(matchers), i > 1 && toSelector(tokens.slice(0, i - 1).concat({ | |||
value: tokens[i - 2].type === " " ? "*" : "" | |||
})).replace(rtrimCSS, "$1"), matcher, i < j && matcherFromTokens(tokens.slice(i, j)), j < len && matcherFromTokens((tokens = tokens.slice(j))), j < len && toSelector(tokens)); | |||
} | |||
matchers.push(matcher); | |||
} | |||
} | |||
return elementMatcher(matchers); | |||
} | |||
function matcherFromGroupMatchers(elementMatchers, setMatchers) { | |||
var bySet = setMatchers.length > 0 | |||
, byElement = elementMatchers.length > 0 | |||
, superMatcher = function(seed, context, xml, results, outermost) { | |||
var elem, j, matcher, matchedCount = 0, i = "0", unmatched = seed && [], setMatched = [], contextBackup = outermostContext, elems = seed || byElement && Expr.find.TAG("*", outermost), dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), len = elems.length; | |||
if (outermost) { | |||
outermostContext = context == document || context || outermost; | |||
} | |||
for (; i !== len && (elem = elems[i]) != null; i++) { | |||
if (byElement && elem) { | |||
j = 0; | |||
if (!context && elem.ownerDocument != document) { | |||
setDocument(elem); | |||
xml = !documentIsHTML; | |||
} | |||
while ((matcher = elementMatchers[j++])) { | |||
if (matcher(elem, context || document, xml)) { | |||
push.call(results, elem); | |||
break; | |||
} | |||
} | |||
if (outermost) { | |||
dirruns = dirrunsUnique; | |||
} | |||
} | |||
if (bySet) { | |||
if ((elem = !matcher && elem)) { | |||
matchedCount--; | |||
} | |||
if (seed) { | |||
unmatched.push(elem); | |||
} | |||
} | |||
} | |||
matchedCount += i; | |||
if (bySet && i !== matchedCount) { | |||
j = 0; | |||
while ((matcher = setMatchers[j++])) { | |||
matcher(unmatched, setMatched, context, xml); | |||
} | |||
if (seed) { | |||
if (matchedCount > 0) { | |||
while (i--) { | |||
if (!(unmatched[i] || setMatched[i])) { | |||
setMatched[i] = pop.call(results); | |||
} | |||
} | |||
} | |||
setMatched = condense(setMatched); | |||
} | |||
push.apply(results, setMatched); | |||
if (outermost && !seed && setMatched.length > 0 && (matchedCount + setMatchers.length) > 1) { | |||
jQuery.uniqueSort(results); | |||
} | |||
} | |||
if (outermost) { | |||
dirruns = dirrunsUnique; | |||
outermostContext = contextBackup; | |||
} | |||
return unmatched; | |||
}; | |||
return bySet ? markFunction(superMatcher) : superMatcher; | |||
} | |||
function compile(selector, match) { | |||
var i, setMatchers = [], elementMatchers = [], cached = compilerCache[selector + " "]; | |||
if (!cached) { | |||
if (!match) { | |||
match = tokenize(selector); | |||
} | |||
i = match.length; | |||
while (i--) { | |||
cached = matcherFromTokens(match[i]); | |||
if (cached[expando]) { | |||
setMatchers.push(cached); | |||
} else { | |||
elementMatchers.push(cached); | |||
} | |||
} | |||
cached = compilerCache(selector, matcherFromGroupMatchers(elementMatchers, setMatchers)); | |||
cached.selector = selector; | |||
} | |||
return cached; | |||
} | |||
function select(selector, context, results, seed) { | |||
var i, tokens, token, type, find, compiled = typeof selector === "function" && selector, match = !seed && tokenize((selector = compiled.selector || selector)); | |||
results = results || []; | |||
if (match.length === 1) { | |||
tokens = match[0] = match[0].slice(0); | |||
if (tokens.length > 2 && (token = tokens[0]).type === "ID" && context.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) { | |||
context = (Expr.find.ID(token.matches[0].replace(runescape, funescape), context) || [])[0]; | |||
if (!context) { | |||
return results; | |||
} else if (compiled) { | |||
context = context.parentNode; | |||
} | |||
selector = selector.slice(tokens.shift().value.length); | |||
} | |||
i = matchExpr.needsContext.test(selector) ? 0 : tokens.length; | |||
while (i--) { | |||
token = tokens[i]; | |||
if (Expr.relative[(type = token.type)]) { | |||
break; | |||
} | |||
if ((find = Expr.find[type])) { | |||
if ((seed = find(token.matches[0].replace(runescape, funescape), rsibling.test(tokens[0].type) && testContext(context.parentNode) || context))) { | |||
tokens.splice(i, 1); | |||
selector = seed.length && toSelector(tokens); | |||
if (!selector) { | |||
push.apply(results, seed); | |||
return results; | |||
} | |||
break; | |||
} | |||
} | |||
} | |||
} | |||
(compiled || compile(selector, match))(seed, context, !documentIsHTML, results, !context || rsibling.test(selector) && testContext(context.parentNode) || context); | |||
return results; | |||
} | |||
support.sortStable = expando.split("").sort(sortOrder).join("") === expando; | |||
setDocument(); | |||
support.sortDetached = assert(function(el) { | |||
return el.compareDocumentPosition(document.createElement("fieldset")) & 1; | |||
}); | |||
jQuery.find = find; | |||
jQuery.expr[":"] = jQuery.expr.pseudos; | |||
jQuery.unique = jQuery.uniqueSort; | |||
find.compile = compile; | |||
find.select = select; | |||
find.setDocument = setDocument; | |||
find.tokenize = tokenize; | |||
find.escape = jQuery.escapeSelector; | |||
find.getText = jQuery.text; | |||
find.isXML = jQuery.isXMLDoc; | |||
find.selectors = jQuery.expr; | |||
find.support = jQuery.support; | |||
find.uniqueSort = jQuery.uniqueSort; | |||
} | |||
)(); | |||
var dir = function(elem, dir, until) { | |||
var matched = [] | |||
, truncate = until !== undefined; | |||
while ((elem = elem[dir]) && elem.nodeType !== 9) { | |||
if (elem.nodeType === 1) { | |||
if (truncate && jQuery(elem).is(until)) { | |||
break; | |||
} | |||
matched.push(elem); | |||
} | |||
} | |||
return matched; | |||
}; | |||
var siblings = function(n, elem) { | |||
var matched = []; | |||
for (; n; n = n.nextSibling) { | |||
if (n.nodeType === 1 && n !== elem) { | |||
matched.push(n); | |||
} | |||
} | |||
return matched; | |||
}; | |||
var rneedsContext = jQuery.expr.match.needsContext; | |||
var rsingleTag = (/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i); | |||
function winnow(elements, qualifier, not) { | |||
if (isFunction(qualifier)) { | |||
return jQuery.grep(elements, function(elem, i) { | |||
return !!qualifier.call(elem, i, elem) !== not; | |||
}); | |||
} | |||
if (qualifier.nodeType) { | |||
return jQuery.grep(elements, function(elem) { | |||
return (elem === qualifier) !== not; | |||
}); | |||
} | |||
if (typeof qualifier !== "string") { | |||
return jQuery.grep(elements, function(elem) { | |||
return (indexOf.call(qualifier, elem) > -1) !== not; | |||
}); | |||
} | |||
return jQuery.filter(qualifier, elements, not); | |||
} | |||
jQuery.filter = function(expr, elems, not) { | |||
var elem = elems[0]; | |||
if (not) { | |||
expr = ":not(" + expr + ")"; | |||
} | |||
if (elems.length === 1 && elem.nodeType === 1) { | |||
return jQuery.find.matchesSelector(elem, expr) ? [elem] : []; | |||
} | |||
return jQuery.find.matches(expr, jQuery.grep(elems, function(elem) { | |||
return elem.nodeType === 1; | |||
})); | |||
} | |||
; | |||
jQuery.fn.extend({ | |||
find: function(selector) { | |||
var i, ret, len = this.length, self = this; | |||
if (typeof selector !== "string") { | |||
return this.pushStack(jQuery(selector).filter(function() { | |||
for (i = 0; i < len; i++) { | |||
if (jQuery.contains(self[i], this)) { | |||
return true; | |||
} | |||
} | |||
})); | |||
} | |||
ret = this.pushStack([]); | |||
for (i = 0; i < len; i++) { | |||
jQuery.find(selector, self[i], ret); | |||
} | |||
return len > 1 ? jQuery.uniqueSort(ret) : ret; | |||
}, | |||
filter: function(selector) { | |||
return this.pushStack(winnow(this, selector || [], false)); | |||
}, | |||
not: function(selector) { | |||
return this.pushStack(winnow(this, selector || [], true)); | |||
}, | |||
is: function(selector) { | |||
return !!winnow(this, typeof selector === "string" && rneedsContext.test(selector) ? jQuery(selector) : selector || [], false).length; | |||
} | |||
}); | |||
var rootjQuery, rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, init = jQuery.fn.init = function(selector, context, root) { | |||
var match, elem; | |||
if (!selector) { | |||
return this; | |||
} | |||
root = root || rootjQuery; | |||
if (typeof selector === "string") { | |||
if (selector[0] === "<" && selector[selector.length - 1] === ">" && selector.length >= 3) { | |||
match = [null, selector, null]; | |||
} else { | |||
match = rquickExpr.exec(selector); | |||
} | |||
if (match && (match[1] || !context)) { | |||
if (match[1]) { | |||
context = context instanceof jQuery ? context[0] : context; | |||
jQuery.merge(this, jQuery.parseHTML(match[1], context && context.nodeType ? context.ownerDocument || context : document, true)); | |||
if (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) { | |||
for (match in context) { | |||
if (isFunction(this[match])) { | |||
this[match](context[match]); | |||
} else { | |||
this.attr(match, context[match]); | |||
} | |||
} | |||
} | |||
return this; | |||
} else { | |||
elem = document.getElementById(match[2]); | |||
if (elem) { | |||
this[0] = elem; | |||
this.length = 1; | |||
} | |||
return this; | |||
} | |||
} else if (!context || context.jquery) { | |||
return (context || root).find(selector); | |||
} else { | |||
return this.constructor(context).find(selector); | |||
} | |||
} else if (selector.nodeType) { | |||
this[0] = selector; | |||
this.length = 1; | |||
return this; | |||
} else if (isFunction(selector)) { | |||
return root.ready !== undefined ? root.ready(selector) : selector(jQuery); | |||
} | |||
return jQuery.makeArray(selector, this); | |||
} | |||
; | |||
init.prototype = jQuery.fn; | |||
rootjQuery = jQuery(document); | |||
var rparentsprev = /^(?:parents|prev(?:Until|All))/ | |||
, guaranteedUnique = { | |||
children: true, | |||
contents: true, | |||
next: true, | |||
prev: true | |||
}; | |||
jQuery.fn.extend({ | |||
has: function(target) { | |||
var targets = jQuery(target, this) | |||
, l = targets.length; | |||
return this.filter(function() { | |||
var i = 0; | |||
for (; i < l; i++) { | |||
if (jQuery.contains(this, targets[i])) { | |||
return true; | |||
} | |||
} | |||
}); | |||
}, | |||
closest: function(selectors, context) { | |||
var cur, i = 0, l = this.length, matched = [], targets = typeof selectors !== "string" && jQuery(selectors); | |||
if (!rneedsContext.test(selectors)) { | |||
for (; i < l; i++) { | |||
for (cur = this[i]; cur && cur !== context; cur = cur.parentNode) { | |||
if (cur.nodeType < 11 && (targets ? targets.index(cur) > -1 : cur.nodeType === 1 && jQuery.find.matchesSelector(cur, selectors))) { | |||
matched.push(cur); | |||
break; | |||
} | |||
} | |||
} | |||
} | |||
return this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched); | |||
}, | |||
index: function(elem) { | |||
if (!elem) { | |||
return (this[0] && this[0].parentNode) ? this.first().prevAll().length : -1; | |||
} | |||
if (typeof elem === "string") { | |||
return indexOf.call(jQuery(elem), this[0]); | |||
} | |||
return indexOf.call(this, elem.jquery ? elem[0] : elem); | |||
}, | |||
add: function(selector, context) { | |||
return this.pushStack(jQuery.uniqueSort(jQuery.merge(this.get(), jQuery(selector, context)))); | |||
}, | |||
addBack: function(selector) { | |||
return this.add(selector == null ? this.prevObject : this.prevObject.filter(selector)); | |||
} | |||
}); | |||
function sibling(cur, dir) { | |||
while ((cur = cur[dir]) && cur.nodeType !== 1) {} | |||
return cur; | |||
} | |||
jQuery.each({ | |||
parent: function(elem) { | |||
var parent = elem.parentNode; | |||
return parent && parent.nodeType !== 11 ? parent : null; | |||
}, | |||
parents: function(elem) { | |||
return dir(elem, "parentNode"); | |||
}, | |||
parentsUntil: function(elem, _i, until) { | |||
return dir(elem, "parentNode", until); | |||
}, | |||
next: function(elem) { | |||
return sibling(elem, "nextSibling"); | |||
}, | |||
prev: function(elem) { | |||
return sibling(elem, "previousSibling"); | |||
}, | |||
nextAll: function(elem) { | |||
return dir(elem, "nextSibling"); | |||
}, | |||
prevAll: function(elem) { | |||
return dir(elem, "previousSibling"); | |||
}, | |||
nextUntil: function(elem, _i, until) { | |||
return dir(elem, "nextSibling", until); | |||
}, | |||
prevUntil: function(elem, _i, until) { | |||
return dir(elem, "previousSibling", until); | |||
}, | |||
siblings: function(elem) { | |||
return siblings((elem.parentNode || {}).firstChild, elem); | |||
}, | |||
children: function(elem) { | |||
return siblings(elem.firstChild); | |||
}, | |||
contents: function(elem) { | |||
if (elem.contentDocument != null && getProto(elem.contentDocument)) { | |||
return elem.contentDocument; | |||
} | |||
if (nodeName(elem, "template")) { | |||
elem = elem.content || elem; | |||
} | |||
return jQuery.merge([], elem.childNodes); | |||
} | |||
}, function(name, fn) { | |||
jQuery.fn[name] = function(until, selector) { | |||
var matched = jQuery.map(this, fn, until); | |||
if (name.slice(-5) !== "Until") { | |||
selector = until; | |||
} | |||
if (selector && typeof selector === "string") { | |||
matched = jQuery.filter(selector, matched); | |||
} | |||
if (this.length > 1) { | |||
if (!guaranteedUnique[name]) { | |||
jQuery.uniqueSort(matched); | |||
} | |||
if (rparentsprev.test(name)) { | |||
matched.reverse(); | |||
} | |||
} | |||
return this.pushStack(matched); | |||
} | |||
; | |||
}); | |||
var rnothtmlwhite = (/[^\x20\t\r\n\f]+/g); | |||
function createOptions(options) { | |||
var object = {}; | |||
jQuery.each(options.match(rnothtmlwhite) || [], function(_, flag) { | |||
object[flag] = true; | |||
}); | |||
return object; | |||
} | |||
jQuery.Callbacks = function(options) { | |||
options = typeof options === "string" ? createOptions(options) : jQuery.extend({}, options); | |||
var firing, memory, fired, locked, list = [], queue = [], firingIndex = -1, fire = function() { | |||
locked = locked || options.once; | |||
fired = firing = true; | |||
for (; queue.length; firingIndex = -1) { | |||
memory = queue.shift(); | |||
while (++firingIndex < list.length) { | |||
if (list[firingIndex].apply(memory[0], memory[1]) === false && options.stopOnFalse) { | |||
firingIndex = list.length; | |||
memory = false; | |||
} | |||
} | |||
} | |||
if (!options.memory) { | |||
memory = false; | |||
} | |||
firing = false; | |||
if (locked) { | |||
if (memory) { | |||
list = []; | |||
} else { | |||
list = ""; | |||
} | |||
} | |||
}, self = { | |||
add: function() { | |||
if (list) { | |||
if (memory && !firing) { | |||
firingIndex = list.length - 1; | |||
queue.push(memory); | |||
} | |||
(function add(args) { | |||
jQuery.each(args, function(_, arg) { | |||
if (isFunction(arg)) { | |||
if (!options.unique || !self.has(arg)) { | |||
list.push(arg); | |||
} | |||
} else if (arg && arg.length && toType(arg) !== "string") { | |||
add(arg); | |||
} | |||
}); | |||
} | |||
)(arguments); | |||
if (memory && !firing) { | |||
fire(); | |||
} | |||
} | |||
return this; | |||
}, | |||
remove: function() { | |||
jQuery.each(arguments, function(_, arg) { | |||
var index; | |||
while ((index = jQuery.inArray(arg, list, index)) > -1) { | |||
list.splice(index, 1); | |||
if (index <= firingIndex) { | |||
firingIndex--; | |||
} | |||
} | |||
}); | |||
return this; | |||
}, | |||
has: function(fn) { | |||
return fn ? jQuery.inArray(fn, list) > -1 : list.length > 0; | |||
}, | |||
empty: function() { | |||
if (list) { | |||
list = []; | |||
} | |||
return this; | |||
}, | |||
disable: function() { | |||
locked = queue = []; | |||
list = memory = ""; | |||
return this; | |||
}, | |||
disabled: function() { | |||
return !list; | |||
}, | |||
lock: function() { | |||
locked = queue = []; | |||
if (!memory && !firing) { | |||
list = memory = ""; | |||
} | |||
return this; | |||
}, | |||
locked: function() { | |||
return !!locked; | |||
}, | |||
fireWith: function(context, args) { | |||
if (!locked) { | |||
args = args || []; | |||
args = [context, args.slice ? args.slice() : args]; | |||
queue.push(args); | |||
if (!firing) { | |||
fire(); | |||
} | |||
} | |||
return this; | |||
}, | |||
fire: function() { | |||
self.fireWith(this, arguments); | |||
return this; | |||
}, | |||
fired: function() { | |||
return !!fired; | |||
} | |||
}; | |||
return self; | |||
} | |||
; | |||
function Identity(v) { | |||
return v; | |||
} | |||
function Thrower(ex) { | |||
throw ex; | |||
} | |||
function adoptValue(value, resolve, reject, noValue) { | |||
var method; | |||
try { | |||
if (value && isFunction((method = value.promise))) { | |||
method.call(value).done(resolve).fail(reject); | |||
} else if (value && isFunction((method = value.then))) { | |||
method.call(value, resolve, reject); | |||
} else { | |||
resolve.apply(undefined, [value].slice(noValue)); | |||
} | |||
} catch (value) { | |||
reject.apply(undefined, [value]); | |||
} | |||
} | |||
jQuery.extend({ | |||
Deferred: function(func) { | |||
var tuples = [["notify", "progress", jQuery.Callbacks("memory"), jQuery.Callbacks("memory"), 2], ["resolve", "done", jQuery.Callbacks("once memory"), jQuery.Callbacks("once memory"), 0, "resolved"], ["reject", "fail", jQuery.Callbacks("once memory"), jQuery.Callbacks("once memory"), 1, "rejected"]] | |||
, state = "pending" | |||
, promise = { | |||
state: function() { | |||
return state; | |||
}, | |||
always: function() { | |||
deferred.done(arguments).fail(arguments); | |||
return this; | |||
}, | |||
"catch": function(fn) { | |||
return promise.then(null, fn); | |||
}, | |||
pipe: function() { | |||
var fns = arguments; | |||
return jQuery.Deferred(function(newDefer) { | |||
jQuery.each(tuples, function(_i, tuple) { | |||
var fn = isFunction(fns[tuple[4]]) && fns[tuple[4]]; | |||
deferred[tuple[1]](function() { | |||
var returned = fn && fn.apply(this, arguments); | |||
if (returned && isFunction(returned.promise)) { | |||
returned.promise().progress(newDefer.notify).done(newDefer.resolve).fail(newDefer.reject); | |||
} else { | |||
newDefer[tuple[0] + "With"](this, fn ? [returned] : arguments); | |||
} | |||
}); | |||
}); | |||
fns = null; | |||
}).promise(); | |||
}, | |||
then: function(onFulfilled, onRejected, onProgress) { | |||
var maxDepth = 0; | |||
function resolve(depth, deferred, handler, special) { | |||
return function() { | |||
var that = this | |||
, args = arguments | |||
, mightThrow = function() { | |||
var returned, then; | |||
if (depth < maxDepth) { | |||
return; | |||
} | |||
returned = handler.apply(that, args); | |||
if (returned === deferred.promise()) { | |||
throw new TypeError("Thenable self-resolution"); | |||
} | |||
then = returned && (typeof returned === "object" || typeof returned === "function") && returned.then; | |||
if (isFunction(then)) { | |||
if (special) { | |||
then.call(returned, resolve(maxDepth, deferred, Identity, special), resolve(maxDepth, deferred, Thrower, special)); | |||
} else { | |||
maxDepth++; | |||
then.call(returned, resolve(maxDepth, deferred, Identity, special), resolve(maxDepth, deferred, Thrower, special), resolve(maxDepth, deferred, Identity, deferred.notifyWith)); | |||
} | |||
} else { | |||
if (handler !== Identity) { | |||
that = undefined; | |||
args = [returned]; | |||
} | |||
(special || deferred.resolveWith)(that, args); | |||
} | |||
} | |||
, process = special ? mightThrow : function() { | |||
try { | |||
mightThrow(); | |||
} catch (e) { | |||
if (jQuery.Deferred.exceptionHook) { | |||
jQuery.Deferred.exceptionHook(e, process.error); | |||
} | |||
if (depth + 1 >= maxDepth) { | |||
if (handler !== Thrower) { | |||
that = undefined; | |||
args = [e]; | |||
} | |||
deferred.rejectWith(that, args); | |||
} | |||
} | |||
} | |||
; | |||
if (depth) { | |||
process(); | |||
} else { | |||
if (jQuery.Deferred.getErrorHook) { | |||
process.error = jQuery.Deferred.getErrorHook(); | |||
} else if (jQuery.Deferred.getStackHook) { | |||
process.error = jQuery.Deferred.getStackHook(); | |||
} | |||
window.setTimeout(process); | |||
} | |||
} | |||
; | |||
} | |||
return jQuery.Deferred(function(newDefer) { | |||
tuples[0][3].add(resolve(0, newDefer, isFunction(onProgress) ? onProgress : Identity, newDefer.notifyWith)); | |||
tuples[1][3].add(resolve(0, newDefer, isFunction(onFulfilled) ? onFulfilled : Identity)); | |||
tuples[2][3].add(resolve(0, newDefer, isFunction(onRejected) ? onRejected : Thrower)); | |||
}).promise(); | |||
}, | |||
promise: function(obj) { | |||
return obj != null ? jQuery.extend(obj, promise) : promise; | |||
} | |||
} | |||
, deferred = {}; | |||
jQuery.each(tuples, function(i, tuple) { | |||
var list = tuple[2] | |||
, stateString = tuple[5]; | |||
promise[tuple[1]] = list.add; | |||
if (stateString) { | |||
list.add(function() { | |||
state = stateString; | |||
}, tuples[3 - i][2].disable, tuples[3 - i][3].disable, tuples[0][2].lock, tuples[0][3].lock); | |||
} | |||
list.add(tuple[3].fire); | |||
deferred[tuple[0]] = function() { | |||
deferred[tuple[0] + "With"](this === deferred ? undefined : this, arguments); | |||
return this; | |||
} | |||
; | |||
deferred[tuple[0] + "With"] = list.fireWith; | |||
}); | |||
promise.promise(deferred); | |||
if (func) { | |||
func.call(deferred, deferred); | |||
} | |||
return deferred; | |||
}, | |||
when: function(singleValue) { | |||
var remaining = arguments.length | |||
, i = remaining | |||
, resolveContexts = Array(i) | |||
, resolveValues = slice.call(arguments) | |||
, primary = jQuery.Deferred() | |||
, updateFunc = function(i) { | |||
return function(value) { | |||
resolveContexts[i] = this; | |||
resolveValues[i] = arguments.length > 1 ? slice.call(arguments) : value; | |||
if (!(--remaining)) { | |||
primary.resolveWith(resolveContexts, resolveValues); | |||
} | |||
} | |||
; | |||
}; | |||
if (remaining <= 1) { | |||
adoptValue(singleValue, primary.done(updateFunc(i)).resolve, primary.reject, !remaining); | |||
if (primary.state() === "pending" || isFunction(resolveValues[i] && resolveValues[i].then)) { | |||
return primary.then(); | |||
} | |||
} | |||
while (i--) { | |||
adoptValue(resolveValues[i], updateFunc(i), primary.reject); | |||
} | |||
return primary.promise(); | |||
} | |||
}); | |||
var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; | |||
jQuery.Deferred.exceptionHook = function(error, asyncError) { | |||
if (window.console && window.console.warn && error && rerrorNames.test(error.name)) { | |||
window.console.warn("jQuery.Deferred exception: " + error.message, error.stack, asyncError); | |||
} | |||
} | |||
; | |||
jQuery.readyException = function(error) { | |||
window.setTimeout(function() { | |||
throw error; | |||
}); | |||
} | |||
; | |||
var readyList = jQuery.Deferred(); | |||
jQuery.fn.ready = function(fn) { | |||
readyList.then(fn).catch(function(error) { | |||
jQuery.readyException(error); | |||
}); | |||
return this; | |||
} | |||
; | |||
jQuery.extend({ | |||
isReady: false, | |||
readyWait: 1, | |||
ready: function(wait) { | |||
if (wait === true ? --jQuery.readyWait : jQuery.isReady) { | |||
return; | |||
} | |||
jQuery.isReady = true; | |||
if (wait !== true && --jQuery.readyWait > 0) { | |||
return; | |||
} | |||
readyList.resolveWith(document, [jQuery]); | |||
} | |||
}); | |||
jQuery.ready.then = readyList.then; | |||
function completed() { | |||
document.removeEventListener("DOMContentLoaded", completed); | |||
window.removeEventListener("load", completed); | |||
jQuery.ready(); | |||
} | |||
if (document.readyState === "complete" || (document.readyState !== "loading" && !document.documentElement.doScroll)) { | |||
window.setTimeout(jQuery.ready); | |||
} else { | |||
document.addEventListener("DOMContentLoaded", completed); | |||
window.addEventListener("load", completed); | |||
} | |||
var access = function(elems, fn, key, value, chainable, emptyGet, raw) { | |||
var i = 0 | |||
, len = elems.length | |||
, bulk = key == null; | |||
if (toType(key) === "object") { | |||
chainable = true; | |||
for (i in key) { | |||
access(elems, fn, i, key[i], true, emptyGet, raw); | |||
} | |||
} else if (value !== undefined) { | |||
chainable = true; | |||
if (!isFunction(value)) { | |||
raw = true; | |||
} | |||
if (bulk) { | |||
if (raw) { | |||
fn.call(elems, value); | |||
fn = null; | |||
} else { | |||
bulk = fn; | |||
fn = function(elem, _key, value) { | |||
return bulk.call(jQuery(elem), value); | |||
} | |||
; | |||
} | |||
} | |||
if (fn) { | |||
for (; i < len; i++) { | |||
fn(elems[i], key, raw ? value : value.call(elems[i], i, fn(elems[i], key))); | |||
} | |||
} | |||
} | |||
if (chainable) { | |||
return elems; | |||
} | |||
if (bulk) { | |||
return fn.call(elems); | |||
} | |||
return len ? fn(elems[0], key) : emptyGet; | |||
}; | |||
var rmsPrefix = /^-ms-/ | |||
, rdashAlpha = /-([a-z])/g; | |||
function fcamelCase(_all, letter) { | |||
return letter.toUpperCase(); | |||
} | |||
function camelCase(string) { | |||
return string.replace(rmsPrefix, "ms-").replace(rdashAlpha, fcamelCase); | |||
} | |||
var acceptData = function(owner) { | |||
return owner.nodeType === 1 || owner.nodeType === 9 || !(+owner.nodeType); | |||
}; | |||
function Data() { | |||
this.expando = jQuery.expando + Data.uid++; | |||
} | |||
Data.uid = 1; | |||
Data.prototype = { | |||
cache: function(owner) { | |||
var value = owner[this.expando]; | |||
if (!value) { | |||
value = {}; | |||
if (acceptData(owner)) { | |||
if (owner.nodeType) { | |||
owner[this.expando] = value; | |||
} else { | |||
Object.defineProperty(owner, this.expando, { | |||
value: value, | |||
configurable: true | |||
}); | |||
} | |||
} | |||
} | |||
return value; | |||
}, | |||
set: function(owner, data, value) { | |||
var prop, cache = this.cache(owner); | |||
if (typeof data === "string") { | |||
cache[camelCase(data)] = value; | |||
} else { | |||
for (prop in data) { | |||
cache[camelCase(prop)] = data[prop]; | |||
} | |||
} | |||
return cache; | |||
}, | |||
get: function(owner, key) { | |||
return key === undefined ? this.cache(owner) : owner[this.expando] && owner[this.expando][camelCase(key)]; | |||
}, | |||
access: function(owner, key, value) { | |||
if (key === undefined || ((key && typeof key === "string") && value === undefined)) { | |||
return this.get(owner, key); | |||
} | |||
this.set(owner, key, value); | |||
return value !== undefined ? value : key; | |||
}, | |||
remove: function(owner, key) { | |||
var i, cache = owner[this.expando]; | |||
if (cache === undefined) { | |||
return; | |||
} | |||
if (key !== undefined) { | |||
if (Array.isArray(key)) { | |||
key = key.map(camelCase); | |||
} else { | |||
key = camelCase(key); | |||
key = key in cache ? [key] : (key.match(rnothtmlwhite) || []); | |||
} | |||
i = key.length; | |||
while (i--) { | |||
delete cache[key[i]]; | |||
} | |||
} | |||
if (key === undefined || jQuery.isEmptyObject(cache)) { | |||
if (owner.nodeType) { | |||
owner[this.expando] = undefined; | |||
} else { | |||
delete owner[this.expando]; | |||
} | |||
} | |||
}, | |||
hasData: function(owner) { | |||
var cache = owner[this.expando]; | |||
return cache !== undefined && !jQuery.isEmptyObject(cache); | |||
} | |||
}; | |||
var dataPriv = new Data(); | |||
var dataUser = new Data(); | |||
var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/ | |||
, rmultiDash = /[A-Z]/g; | |||
function getData(data) { | |||
if (data === "true") { | |||
return true; | |||
} | |||
if (data === "false") { | |||
return false; | |||
} | |||
if (data === "null") { | |||
return null; | |||
} | |||
if (data === +data + "") { | |||
return +data; | |||
} | |||
if (rbrace.test(data)) { | |||
return JSON.parse(data); | |||
} | |||
return data; | |||
} | |||
function dataAttr(elem, key, data) { | |||
var name; | |||
if (data === undefined && elem.nodeType === 1) { | |||
name = "data-" + key.replace(rmultiDash, "-$&").toLowerCase(); | |||
data = elem.getAttribute(name); | |||
if (typeof data === "string") { | |||
try { | |||
data = getData(data); | |||
} catch (e) {} | |||
dataUser.set(elem, key, data); | |||
} else { | |||
data = undefined; | |||
} | |||
} | |||
return data; | |||
} | |||
jQuery.extend({ | |||
hasData: function(elem) { | |||
return dataUser.hasData(elem) || dataPriv.hasData(elem); | |||
}, | |||
data: function(elem, name, data) { | |||
return dataUser.access(elem, name, data); | |||
}, | |||
removeData: function(elem, name) { | |||
dataUser.remove(elem, name); | |||
}, | |||
_data: function(elem, name, data) { | |||
return dataPriv.access(elem, name, data); | |||
}, | |||
_removeData: function(elem, name) { | |||
dataPriv.remove(elem, name); | |||
} | |||
}); | |||
jQuery.fn.extend({ | |||
data: function(key, value) { | |||
var i, name, data, elem = this[0], attrs = elem && elem.attributes; | |||
if (key === undefined) { | |||
if (this.length) { | |||
data = dataUser.get(elem); | |||
if (elem.nodeType === 1 && !dataPriv.get(elem, "hasDataAttrs")) { | |||
i = attrs.length; | |||
while (i--) { | |||
if (attrs[i]) { | |||
name = attrs[i].name; | |||
if (name.indexOf("data-") === 0) { | |||
name = camelCase(name.slice(5)); | |||
dataAttr(elem, name, data[name]); | |||
} | |||
} | |||
} | |||
dataPriv.set(elem, "hasDataAttrs", true); | |||
} | |||
} | |||
return data; | |||
} | |||
if (typeof key === "object") { | |||
return this.each(function() { | |||
dataUser.set(this, key); | |||
}); | |||
} | |||
return access(this, function(value) { | |||
var data; | |||
if (elem && value === undefined) { | |||
data = dataUser.get(elem, key); | |||
if (data !== undefined) { | |||
return data; | |||
} | |||
data = dataAttr(elem, key); | |||
if (data !== undefined) { | |||
return data; | |||
} | |||
return; | |||
} | |||
this.each(function() { | |||
dataUser.set(this, key, value); | |||
}); | |||
}, null, value, arguments.length > 1, null, true); | |||
}, | |||
removeData: function(key) { | |||
return this.each(function() { | |||
dataUser.remove(this, key); | |||
}); | |||
} | |||
}); | |||
jQuery.extend({ | |||
queue: function(elem, type, data) { | |||
var queue; | |||
if (elem) { | |||
type = (type || "fx") + "queue"; | |||
queue = dataPriv.get(elem, type); | |||
if (data) { | |||
if (!queue || Array.isArray(data)) { | |||
queue = dataPriv.access(elem, type, jQuery.makeArray(data)); | |||
} else { | |||
queue.push(data); | |||
} | |||
} | |||
return queue || []; | |||
} | |||
}, | |||
dequeue: function(elem, type) { | |||
type = type || "fx"; | |||
var queue = jQuery.queue(elem, type) | |||
, startLength = queue.length | |||
, fn = queue.shift() | |||
, hooks = jQuery._queueHooks(elem, type) | |||
, next = function() { | |||
jQuery.dequeue(elem, type); | |||
}; | |||
if (fn === "inprogress") { | |||
fn = queue.shift(); | |||
startLength--; | |||
} | |||
if (fn) { | |||
if (type === "fx") { | |||
queue.unshift("inprogress"); | |||
} | |||
delete hooks.stop; | |||
fn.call(elem, next, hooks); | |||
} | |||
if (!startLength && hooks) { | |||
hooks.empty.fire(); | |||
} | |||
}, | |||
_queueHooks: function(elem, type) { | |||
var key = type + "queueHooks"; | |||
return dataPriv.get(elem, key) || dataPriv.access(elem, key, { | |||
empty: jQuery.Callbacks("once memory").add(function() { | |||
dataPriv.remove(elem, [type + "queue", key]); | |||
}) | |||
}); | |||
} | |||
}); | |||
jQuery.fn.extend({ | |||
queue: function(type, data) { | |||
var setter = 2; | |||
if (typeof type !== "string") { | |||
data = type; | |||
type = "fx"; | |||
setter--; | |||
} | |||
if (arguments.length < setter) { | |||
return jQuery.queue(this[0], type); | |||
} | |||
return data === undefined ? this : this.each(function() { | |||
var queue = jQuery.queue(this, type, data); | |||
jQuery._queueHooks(this, type); | |||
if (type === "fx" && queue[0] !== "inprogress") { | |||
jQuery.dequeue(this, type); | |||
} | |||
}); | |||
}, | |||
dequeue: function(type) { | |||
return this.each(function() { | |||
jQuery.dequeue(this, type); | |||
}); | |||
}, | |||
clearQueue: function(type) { | |||
return this.queue(type || "fx", []); | |||
}, | |||
promise: function(type, obj) { | |||
var tmp, count = 1, defer = jQuery.Deferred(), elements = this, i = this.length, resolve = function() { | |||
if (!(--count)) { | |||
defer.resolveWith(elements, [elements]); | |||
} | |||
}; | |||
if (typeof type !== "string") { | |||
obj = type; | |||
type = undefined; | |||
} | |||
type = type || "fx"; | |||
while (i--) { | |||
tmp = dataPriv.get(elements[i], type + "queueHooks"); | |||
if (tmp && tmp.empty) { | |||
count++; | |||
tmp.empty.add(resolve); | |||
} | |||
} | |||
resolve(); | |||
return defer.promise(obj); | |||
} | |||
}); | |||
var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source; | |||
var rcssNum = new RegExp("^(?:([+-])=|)(" + pnum + ")([a-z%]*)$","i"); | |||
var cssExpand = ["Top", "Right", "Bottom", "Left"]; | |||
var documentElement = document.documentElement; | |||
var isAttached = function(elem) { | |||
return jQuery.contains(elem.ownerDocument, elem); | |||
} | |||
, composed = { | |||
composed: true | |||
}; | |||
if (documentElement.getRootNode) { | |||
isAttached = function(elem) { | |||
return jQuery.contains(elem.ownerDocument, elem) || elem.getRootNode(composed) === elem.ownerDocument; | |||
} | |||
; | |||
} | |||
var isHiddenWithinTree = function(elem, el) { | |||
elem = el || elem; | |||
return elem.style.display === "none" || elem.style.display === "" && isAttached(elem) && jQuery.css(elem, "display") === "none"; | |||
}; | |||
function adjustCSS(elem, prop, valueParts, tween) { | |||
var adjusted, scale, maxIterations = 20, currentValue = tween ? function() { | |||
return tween.cur(); | |||
} | |||
: function() { | |||
return jQuery.css(elem, prop, ""); | |||
} | |||
, initial = currentValue(), unit = valueParts && valueParts[3] || (jQuery.cssNumber[prop] ? "" : "px"), initialInUnit = elem.nodeType && (jQuery.cssNumber[prop] || unit !== "px" && +initial) && rcssNum.exec(jQuery.css(elem, prop)); | |||
if (initialInUnit && initialInUnit[3] !== unit) { | |||
initial = initial / 2; | |||
unit = unit || initialInUnit[3]; | |||
initialInUnit = +initial || 1; | |||
while (maxIterations--) { | |||
jQuery.style(elem, prop, initialInUnit + unit); | |||
if ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) { | |||
maxIterations = 0; | |||
} | |||
initialInUnit = initialInUnit / scale; | |||
} | |||
initialInUnit = initialInUnit * 2; | |||
jQuery.style(elem, prop, initialInUnit + unit); | |||
valueParts = valueParts || []; | |||
} | |||
if (valueParts) { | |||
initialInUnit = +initialInUnit || +initial || 0; | |||
adjusted = valueParts[1] ? initialInUnit + (valueParts[1] + 1) * valueParts[2] : +valueParts[2]; | |||
if (tween) { | |||
tween.unit = unit; | |||
tween.start = initialInUnit; | |||
tween.end = adjusted; | |||
} | |||
} | |||
return adjusted; | |||
} | |||
var defaultDisplayMap = {}; | |||
function getDefaultDisplay(elem) { | |||
var temp, doc = elem.ownerDocument, nodeName = elem.nodeName, display = defaultDisplayMap[nodeName]; | |||
if (display) { | |||
return display; | |||
} | |||
temp = doc.body.appendChild(doc.createElement(nodeName)); | |||
display = jQuery.css(temp, "display"); | |||
temp.parentNode.removeChild(temp); | |||
if (display === "none") { | |||
display = "block"; | |||
} | |||
defaultDisplayMap[nodeName] = display; | |||
return display; | |||
} | |||
function showHide(elements, show) { | |||
var display, elem, values = [], index = 0, length = elements.length; | |||
for (; index < length; index++) { | |||
elem = elements[index]; | |||
if (!elem.style) { | |||
continue; | |||
} | |||
display = elem.style.display; | |||
if (show) { | |||
if (display === "none") { | |||
values[index] = dataPriv.get(elem, "display") || null; | |||
if (!values[index]) { | |||
elem.style.display = ""; | |||
} | |||
} | |||
if (elem.style.display === "" && isHiddenWithinTree(elem)) { | |||
values[index] = getDefaultDisplay(elem); | |||
} | |||
} else { | |||
if (display !== "none") { | |||
values[index] = "none"; | |||
dataPriv.set(elem, "display", display); | |||
} | |||
} | |||
} | |||
for (index = 0; index < length; index++) { | |||
if (values[index] != null) { | |||
elements[index].style.display = values[index]; | |||
} | |||
} | |||
return elements; | |||
} | |||
jQuery.fn.extend({ | |||
show: function() { | |||
return showHide(this, true); | |||
}, | |||
hide: function() { | |||
return showHide(this); | |||
}, | |||
toggle: function(state) { | |||
if (typeof state === "boolean") { | |||
return state ? this.show() : this.hide(); | |||
} | |||
return this.each(function() { | |||
if (isHiddenWithinTree(this)) { | |||
jQuery(this).show(); | |||
} else { | |||
jQuery(this).hide(); | |||
} | |||
}); | |||
} | |||
}); | |||
var rcheckableType = (/^(?:checkbox|radio)$/i); | |||
var rtagName = (/<([a-z][^\/\0>\x20\t\r\n\f]*)/i); | |||
var rscriptType = (/^$|^module$|\/(?:java|ecma)script/i); | |||
(function() { | |||
var fragment = document.createDocumentFragment() | |||
, div = fragment.appendChild(document.createElement("div")) | |||
, input = document.createElement("input"); | |||
input.setAttribute("type", "radio"); | |||
input.setAttribute("checked", "checked"); | |||
input.setAttribute("name", "t"); | |||
div.appendChild(input); | |||
support.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked; | |||
div.innerHTML = "<textarea>x</textarea>"; | |||
support.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue; | |||
div.innerHTML = "<option></option>"; | |||
support.option = !!div.lastChild; | |||
} | |||
)(); | |||
var wrapMap = { | |||
thead: [1, "<table>", "</table>"], | |||
col: [2, "<table><colgroup>", "</colgroup></table>"], | |||
tr: [2, "<table><tbody>", "</tbody></table>"], | |||
td: [3, "<table><tbody><tr>", "</tr></tbody></table>"], | |||
_default: [0, "", ""] | |||
}; | |||
wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; | |||
wrapMap.th = wrapMap.td; | |||
if (!support.option) { | |||
wrapMap.optgroup = wrapMap.option = [1, "<select multiple='multiple'>", "</select>"]; | |||
} | |||
function getAll(context, tag) { | |||
var ret; | |||
if (typeof context.getElementsByTagName !== "undefined") { | |||
ret = context.getElementsByTagName(tag || "*"); | |||
} else if (typeof context.querySelectorAll !== "undefined") { | |||
ret = context.querySelectorAll(tag || "*"); | |||
} else { | |||
ret = []; | |||
} | |||
if (tag === undefined || tag && nodeName(context, tag)) { | |||
return jQuery.merge([context], ret); | |||
} | |||
return ret; | |||
} | |||
function setGlobalEval(elems, refElements) { | |||
var i = 0 | |||
, l = elems.length; | |||
for (; i < l; i++) { | |||
dataPriv.set(elems[i], "globalEval", !refElements || dataPriv.get(refElements[i], "globalEval")); | |||
} | |||
} | |||
var rhtml = /<|&#?\w+;/; | |||
function buildFragment(elems, context, scripts, selection, ignored) { | |||
var elem, tmp, tag, wrap, attached, j, fragment = context.createDocumentFragment(), nodes = [], i = 0, l = elems.length; | |||
for (; i < l; i++) { | |||
elem = elems[i]; | |||
if (elem || elem === 0) { | |||
if (toType(elem) === "object") { | |||
jQuery.merge(nodes, elem.nodeType ? [elem] : elem); | |||
} else if (!rhtml.test(elem)) { | |||
nodes.push(context.createTextNode(elem)); | |||
} else { | |||
tmp = tmp || fragment.appendChild(context.createElement("div")); | |||
tag = (rtagName.exec(elem) || ["", ""])[1].toLowerCase(); | |||
wrap = wrapMap[tag] || wrapMap._default; | |||
tmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2]; | |||
j = wrap[0]; | |||
while (j--) { | |||
tmp = tmp.lastChild; | |||
} | |||
jQuery.merge(nodes, tmp.childNodes); | |||
tmp = fragment.firstChild; | |||
tmp.textContent = ""; | |||
} | |||
} | |||
} | |||
fragment.textContent = ""; | |||
i = 0; | |||
while ((elem = nodes[i++])) { | |||
if (selection && jQuery.inArray(elem, selection) > -1) { | |||
if (ignored) { | |||
ignored.push(elem); | |||
} | |||
continue; | |||
} | |||
attached = isAttached(elem); | |||
tmp = getAll(fragment.appendChild(elem), "script"); | |||
if (attached) { | |||
setGlobalEval(tmp); | |||
} | |||
if (scripts) { | |||
j = 0; | |||
while ((elem = tmp[j++])) { | |||
if (rscriptType.test(elem.type || "")) { | |||
scripts.push(elem); | |||
} | |||
} | |||
} | |||
} | |||
return fragment; | |||
} | |||
var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; | |||
function returnTrue() { | |||
return true; | |||
} | |||
function returnFalse() { | |||
return false; | |||
} | |||
function on(elem, types, selector, data, fn, one) { | |||
var origFn, type; | |||
if (typeof types === "object") { | |||
if (typeof selector !== "string") { | |||
data = data || selector; | |||
selector = undefined; | |||
} | |||
for (type in types) { | |||
on(elem, type, selector, data, types[type], one); | |||
} | |||
return elem; | |||
} | |||
if (data == null && fn == null) { | |||
fn = selector; | |||
data = selector = undefined; | |||
} else if (fn == null) { | |||
if (typeof selector === "string") { | |||
fn = data; | |||
data = undefined; | |||
} else { | |||
fn = data; | |||
data = selector; | |||
selector = undefined; | |||
} | |||
} | |||
if (fn === false) { | |||
fn = returnFalse; | |||
} else if (!fn) { | |||
return elem; | |||
} | |||
if (one === 1) { | |||
origFn = fn; | |||
fn = function(event) { | |||
jQuery().off(event); | |||
return origFn.apply(this, arguments); | |||
} | |||
; | |||
fn.guid = origFn.guid || (origFn.guid = jQuery.guid++); | |||
} | |||
return elem.each(function() { | |||
jQuery.event.add(this, types, fn, data, selector); | |||
}); | |||
} | |||
jQuery.event = { | |||
global: {}, | |||
add: function(elem, types, handler, data, selector) { | |||
var handleObjIn, eventHandle, tmp, events, t, handleObj, special, handlers, type, namespaces, origType, elemData = dataPriv.get(elem); | |||
if (!acceptData(elem)) { | |||
return; | |||
} | |||
if (handler.handler) { | |||
handleObjIn = handler; | |||
handler = handleObjIn.handler; | |||
selector = handleObjIn.selector; | |||
} | |||
if (selector) { | |||
jQuery.find.matchesSelector(documentElement, selector); | |||
} | |||
if (!handler.guid) { | |||
handler.guid = jQuery.guid++; | |||
} | |||
if (!(events = elemData.events)) { | |||
events = elemData.events = Object.create(null); | |||
} | |||
if (!(eventHandle = elemData.handle)) { | |||
eventHandle = elemData.handle = function(e) { | |||
return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? jQuery.event.dispatch.apply(elem, arguments) : undefined; | |||
} | |||
; | |||
} | |||
types = (types || "").match(rnothtmlwhite) || [""]; | |||
t = types.length; | |||
while (t--) { | |||
tmp = rtypenamespace.exec(types[t]) || []; | |||
type = origType = tmp[1]; | |||
namespaces = (tmp[2] || "").split(".").sort(); | |||
if (!type) { | |||
continue; | |||
} | |||
special = jQuery.event.special[type] || {}; | |||
type = (selector ? special.delegateType : special.bindType) || type; | |||
special = jQuery.event.special[type] || {}; | |||
handleObj = jQuery.extend({ | |||
type: type, | |||
origType: origType, | |||
data: data, | |||
handler: handler, | |||
guid: handler.guid, | |||
selector: selector, | |||
needsContext: selector && jQuery.expr.match.needsContext.test(selector), | |||
namespace: namespaces.join(".") | |||
}, handleObjIn); | |||
if (!(handlers = events[type])) { | |||
handlers = events[type] = []; | |||
handlers.delegateCount = 0; | |||
if (!special.setup || special.setup.call(elem, data, namespaces, eventHandle) === false) { | |||
if (elem.addEventListener) { | |||
elem.addEventListener(type, eventHandle); | |||
} | |||
} | |||
} | |||
if (special.add) { | |||
special.add.call(elem, handleObj); | |||
if (!handleObj.handler.guid) { | |||
handleObj.handler.guid = handler.guid; | |||
} | |||
} | |||
if (selector) { | |||
handlers.splice(handlers.delegateCount++, 0, handleObj); | |||
} else { | |||
handlers.push(handleObj); | |||
} | |||
jQuery.event.global[type] = true; | |||
} | |||
}, | |||
remove: function(elem, types, handler, selector, mappedTypes) { | |||
var j, origCount, tmp, events, t, handleObj, special, handlers, type, namespaces, origType, elemData = dataPriv.hasData(elem) && dataPriv.get(elem); | |||
if (!elemData || !(events = elemData.events)) { | |||
return; | |||
} | |||
types = (types || "").match(rnothtmlwhite) || [""]; | |||
t = types.length; | |||
while (t--) { | |||
tmp = rtypenamespace.exec(types[t]) || []; | |||
type = origType = tmp[1]; | |||
namespaces = (tmp[2] || "").split(".").sort(); | |||
if (!type) { | |||
for (type in events) { | |||
jQuery.event.remove(elem, type + types[t], handler, selector, true); | |||
} | |||
continue; | |||
} | |||
special = jQuery.event.special[type] || {}; | |||
type = (selector ? special.delegateType : special.bindType) || type; | |||
handlers = events[type] || []; | |||
tmp = tmp[2] && new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)"); | |||
origCount = j = handlers.length; | |||
while (j--) { | |||
handleObj = handlers[j]; | |||
if ((mappedTypes || origType === handleObj.origType) && (!handler || handler.guid === handleObj.guid) && (!tmp || tmp.test(handleObj.namespace)) && (!selector || selector === handleObj.selector || selector === "**" && handleObj.selector)) { | |||
handlers.splice(j, 1); | |||
if (handleObj.selector) { | |||
handlers.delegateCount--; | |||
} | |||
if (special.remove) { | |||
special.remove.call(elem, handleObj); | |||
} | |||
} | |||
} | |||
if (origCount && !handlers.length) { | |||
if (!special.teardown || special.teardown.call(elem, namespaces, elemData.handle) === false) { | |||
jQuery.removeEvent(elem, type, elemData.handle); | |||
} | |||
delete events[type]; | |||
} | |||
} | |||
if (jQuery.isEmptyObject(events)) { | |||
dataPriv.remove(elem, "handle events"); | |||
} | |||
}, | |||
dispatch: function(nativeEvent) { | |||
var i, j, ret, matched, handleObj, handlerQueue, args = new Array(arguments.length), event = jQuery.event.fix(nativeEvent), handlers = (dataPriv.get(this, "events") || Object.create(null))[event.type] || [], special = jQuery.event.special[event.type] || {}; | |||
args[0] = event; | |||
for (i = 1; i < arguments.length; i++) { | |||
args[i] = arguments[i]; | |||
} | |||
event.delegateTarget = this; | |||
if (special.preDispatch && special.preDispatch.call(this, event) === false) { | |||
return; | |||
} | |||
handlerQueue = jQuery.event.handlers.call(this, event, handlers); | |||
i = 0; | |||
while ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) { | |||
event.currentTarget = matched.elem; | |||
j = 0; | |||
while ((handleObj = matched.handlers[j++]) && !event.isImmediatePropagationStopped()) { | |||
if (!event.rnamespace || handleObj.namespace === false || event.rnamespace.test(handleObj.namespace)) { | |||
event.handleObj = handleObj; | |||
event.data = handleObj.data; | |||
ret = ((jQuery.event.special[handleObj.origType] || {}).handle || handleObj.handler).apply(matched.elem, args); | |||
if (ret !== undefined) { | |||
if ((event.result = ret) === false) { | |||
event.preventDefault(); | |||
event.stopPropagation(); | |||
} | |||
} | |||
} | |||
} | |||
} | |||
if (special.postDispatch) { | |||
special.postDispatch.call(this, event); | |||
} | |||
return event.result; | |||
}, | |||
handlers: function(event, handlers) { | |||
var i, handleObj, sel, matchedHandlers, matchedSelectors, handlerQueue = [], delegateCount = handlers.delegateCount, cur = event.target; | |||
if (delegateCount && cur.nodeType && !(event.type === "click" && event.button >= 1)) { | |||
for (; cur !== this; cur = cur.parentNode || this) { | |||
if (cur.nodeType === 1 && !(event.type === "click" && cur.disabled === true)) { | |||
matchedHandlers = []; | |||
matchedSelectors = {}; | |||
for (i = 0; i < delegateCount; i++) { | |||
handleObj = handlers[i]; | |||
sel = handleObj.selector + " "; | |||
if (matchedSelectors[sel] === undefined) { | |||
matchedSelectors[sel] = handleObj.needsContext ? jQuery(sel, this).index(cur) > -1 : jQuery.find(sel, this, null, [cur]).length; | |||
} | |||
if (matchedSelectors[sel]) { | |||
matchedHandlers.push(handleObj); | |||
} | |||
} | |||
if (matchedHandlers.length) { | |||
handlerQueue.push({ | |||
elem: cur, | |||
handlers: matchedHandlers | |||
}); | |||
} | |||
} | |||
} | |||
} | |||
cur = this; | |||
if (delegateCount < handlers.length) { | |||
handlerQueue.push({ | |||
elem: cur, | |||
handlers: handlers.slice(delegateCount) | |||
}); | |||
} | |||
return handlerQueue; | |||
}, | |||
addProp: function(name, hook) { | |||
Object.defineProperty(jQuery.Event.prototype, name, { | |||
enumerable: true, | |||
configurable: true, | |||
get: isFunction(hook) ? function() { | |||
if (this.originalEvent) { | |||
return hook(this.originalEvent); | |||
} | |||
} | |||
: function() { | |||
if (this.originalEvent) { | |||
return this.originalEvent[name]; | |||
} | |||
} | |||
, | |||
set: function(value) { | |||
Object.defineProperty(this, name, { | |||
enumerable: true, | |||
configurable: true, | |||
writable: true, | |||
value: value | |||
}); | |||
} | |||
}); | |||
}, | |||
fix: function(originalEvent) { | |||
return originalEvent[jQuery.expando] ? originalEvent : new jQuery.Event(originalEvent); | |||
}, | |||
special: { | |||
load: { | |||
noBubble: true | |||
}, | |||
click: { | |||
setup: function(data) { | |||
var el = this || data; | |||
if (rcheckableType.test(el.type) && el.click && nodeName(el, "input")) { | |||
leverageNative(el, "click", true); | |||
} | |||
return false; | |||
}, | |||
trigger: function(data) { | |||
var el = this || data; | |||
if (rcheckableType.test(el.type) && el.click && nodeName(el, "input")) { | |||
leverageNative(el, "click"); | |||
} | |||
return true; | |||
}, | |||
_default: function(event) { | |||
var target = event.target; | |||
return rcheckableType.test(target.type) && target.click && nodeName(target, "input") && dataPriv.get(target, "click") || nodeName(target, "a"); | |||
} | |||
}, | |||
beforeunload: { | |||
postDispatch: function(event) { | |||
if (event.result !== undefined && event.originalEvent) { | |||
event.originalEvent.returnValue = event.result; | |||
} | |||
} | |||
} | |||
} | |||
}; | |||
function leverageNative(el, type, isSetup) { | |||
if (!isSetup) { | |||
if (dataPriv.get(el, type) === undefined) { | |||
jQuery.event.add(el, type, returnTrue); | |||
} | |||
return; | |||
} | |||
dataPriv.set(el, type, false); | |||
jQuery.event.add(el, type, { | |||
namespace: false, | |||
handler: function(event) { | |||
var result, saved = dataPriv.get(this, type); | |||
if ((event.isTrigger & 1) && this[type]) { | |||
if (!saved) { | |||
saved = slice.call(arguments); | |||
dataPriv.set(this, type, saved); | |||
this[type](); | |||
result = dataPriv.get(this, type); | |||
dataPriv.set(this, type, false); | |||
if (saved !== result) { | |||
event.stopImmediatePropagation(); | |||
event.preventDefault(); | |||
return result; | |||
} | |||
} else if ((jQuery.event.special[type] || {}).delegateType) { | |||
event.stopPropagation(); | |||
} | |||
} else if (saved) { | |||
dataPriv.set(this, type, jQuery.event.trigger(saved[0], saved.slice(1), this)); | |||
event.stopPropagation(); | |||
event.isImmediatePropagationStopped = returnTrue; | |||
} | |||
} | |||
}); | |||
} | |||
jQuery.removeEvent = function(elem, type, handle) { | |||
if (elem.removeEventListener) { | |||
elem.removeEventListener(type, handle); | |||
} | |||
} | |||
; | |||
jQuery.Event = function(src, props) { | |||
if (!(this instanceof jQuery.Event)) { | |||
return new jQuery.Event(src,props); | |||
} | |||
if (src && src.type) { | |||
this.originalEvent = src; | |||
this.type = src.type; | |||
this.isDefaultPrevented = src.defaultPrevented || src.defaultPrevented === undefined && src.returnValue === false ? returnTrue : returnFalse; | |||
this.target = (src.target && src.target.nodeType === 3) ? src.target.parentNode : src.target; | |||
this.currentTarget = src.currentTarget; | |||
this.relatedTarget = src.relatedTarget; | |||
} else { | |||
this.type = src; | |||
} | |||
if (props) { | |||
jQuery.extend(this, props); | |||
} | |||
this.timeStamp = src && src.timeStamp || Date.now(); | |||
this[jQuery.expando] = true; | |||
} | |||
; | |||
jQuery.Event.prototype = { | |||
constructor: jQuery.Event, | |||
isDefaultPrevented: returnFalse, | |||
isPropagationStopped: returnFalse, | |||
isImmediatePropagationStopped: returnFalse, | |||
isSimulated: false, | |||
preventDefault: function() { | |||
var e = this.originalEvent; | |||
this.isDefaultPrevented = returnTrue; | |||
if (e && !this.isSimulated) { | |||
e.preventDefault(); | |||
} | |||
}, | |||
stopPropagation: function() { | |||
var e = this.originalEvent; | |||
this.isPropagationStopped = returnTrue; | |||
if (e && !this.isSimulated) { | |||
e.stopPropagation(); | |||
} | |||
}, | |||
stopImmediatePropagation: function() { | |||
var e = this.originalEvent; | |||
this.isImmediatePropagationStopped = returnTrue; | |||
if (e && !this.isSimulated) { | |||
e.stopImmediatePropagation(); | |||
} | |||
this.stopPropagation(); | |||
} | |||
}; | |||
jQuery.each({ | |||
altKey: true, | |||
bubbles: true, | |||
cancelable: true, | |||
changedTouches: true, | |||
ctrlKey: true, | |||
detail: true, | |||
eventPhase: true, | |||
metaKey: true, | |||
pageX: true, | |||
pageY: true, | |||
shiftKey: true, | |||
view: true, | |||
"char": true, | |||
code: true, | |||
charCode: true, | |||
key: true, | |||
keyCode: true, | |||
button: true, | |||
buttons: true, | |||
clientX: true, | |||
clientY: true, | |||
offsetX: true, | |||
offsetY: true, | |||
pointerId: true, | |||
pointerType: true, | |||
screenX: true, | |||
screenY: true, | |||
targetTouches: true, | |||
toElement: true, | |||
touches: true, | |||
which: true | |||
}, jQuery.event.addProp); | |||
jQuery.each({ | |||
focus: "focusin", | |||
blur: "focusout" | |||
}, function(type, delegateType) { | |||
function focusMappedHandler(nativeEvent) { | |||
if (document.documentMode) { | |||
var handle = dataPriv.get(this, "handle") | |||
, event = jQuery.event.fix(nativeEvent); | |||
event.type = nativeEvent.type === "focusin" ? "focus" : "blur"; | |||
event.isSimulated = true; | |||
handle(nativeEvent); | |||
if (event.target === event.currentTarget) { | |||
handle(event); | |||
} | |||
} else { | |||
jQuery.event.simulate(delegateType, nativeEvent.target, jQuery.event.fix(nativeEvent)); | |||
} | |||
} | |||
jQuery.event.special[type] = { | |||
setup: function() { | |||
var attaches; | |||
leverageNative(this, type, true); | |||
if (document.documentMode) { | |||
attaches = dataPriv.get(this, delegateType); | |||
if (!attaches) { | |||
this.addEventListener(delegateType, focusMappedHandler); | |||
} | |||
dataPriv.set(this, delegateType, (attaches || 0) + 1); | |||
} else { | |||
return false; | |||
} | |||
}, | |||
trigger: function() { | |||
leverageNative(this, type); | |||
return true; | |||
}, | |||
teardown: function() { | |||
var attaches; | |||
if (document.documentMode) { | |||
attaches = dataPriv.get(this, delegateType) - 1; | |||
if (!attaches) { | |||
this.removeEventListener(delegateType, focusMappedHandler); | |||
dataPriv.remove(this, delegateType); | |||
} else { | |||
dataPriv.set(this, delegateType, attaches); | |||
} | |||
} else { | |||
return false; | |||
} | |||
}, | |||
_default: function(event) { | |||
return dataPriv.get(event.target, type); | |||
}, | |||
delegateType: delegateType | |||
}; | |||
jQuery.event.special[delegateType] = { | |||
setup: function() { | |||
var doc = this.ownerDocument || this.document || this | |||
, dataHolder = document.documentMode ? this : doc | |||
, attaches = dataPriv.get(dataHolder, delegateType); | |||
if (!attaches) { | |||
if (document.documentMode) { | |||
this.addEventListener(delegateType, focusMappedHandler); | |||
} else { | |||
doc.addEventListener(type, focusMappedHandler, true); | |||
} | |||
} | |||
dataPriv.set(dataHolder, delegateType, (attaches || 0) + 1); | |||
}, | |||
teardown: function() { | |||
var doc = this.ownerDocument || this.document || this | |||
, dataHolder = document.documentMode ? this : doc | |||
, attaches = dataPriv.get(dataHolder, delegateType) - 1; | |||
if (!attaches) { | |||
if (document.documentMode) { | |||
this.removeEventListener(delegateType, focusMappedHandler); | |||
} else { | |||
doc.removeEventListener(type, focusMappedHandler, true); | |||
} | |||
dataPriv.remove(dataHolder, delegateType); | |||
} else { | |||
dataPriv.set(dataHolder, delegateType, attaches); | |||
} | |||
} | |||
}; | |||
}); | |||
jQuery.each({ | |||
mouseenter: "mouseover", | |||
mouseleave: "mouseout", | |||
pointerenter: "pointerover", | |||
pointerleave: "pointerout" | |||
}, function(orig, fix) { | |||
jQuery.event.special[orig] = { | |||
delegateType: fix, | |||
bindType: fix, | |||
handle: function(event) { | |||
var ret, target = this, related = event.relatedTarget, handleObj = event.handleObj; | |||
if (!related || (related !== target && !jQuery.contains(target, related))) { | |||
event.type = handleObj.origType; | |||
ret = handleObj.handler.apply(this, arguments); | |||
event.type = fix; | |||
} | |||
return ret; | |||
} | |||
}; | |||
}); | |||
jQuery.fn.extend({ | |||
on: function(types, selector, data, fn) { | |||
return on(this, types, selector, data, fn); | |||
}, | |||
one: function(types, selector, data, fn) { | |||
return on(this, types, selector, data, fn, 1); | |||
}, | |||
off: function(types, selector, fn) { | |||
var handleObj, type; | |||
if (types && types.preventDefault && types.handleObj) { | |||
handleObj = types.handleObj; | |||
jQuery(types.delegateTarget).off(handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, handleObj.selector, handleObj.handler); | |||
return this; | |||
} | |||
if (typeof types === "object") { | |||
for (type in types) { | |||
this.off(type, selector, types[type]); | |||
} | |||
return this; | |||
} | |||
if (selector === false || typeof selector === "function") { | |||
fn = selector; | |||
selector = undefined; | |||
} | |||
if (fn === false) { | |||
fn = returnFalse; | |||
} | |||
return this.each(function() { | |||
jQuery.event.remove(this, types, fn, selector); | |||
}); | |||
} | |||
}); | |||
var rnoInnerhtml = /<script|<style|<link/i | |||
, rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i | |||
, rcleanScript = /^\s*<!\[CDATA\[|\]\]>\s*$/g; | |||
function manipulationTarget(elem, content) { | |||
if (nodeName(elem, "table") && nodeName(content.nodeType !== 11 ? content : content.firstChild, "tr")) { | |||
return jQuery(elem).children("tbody")[0] || elem; | |||
} | |||
return elem; | |||
} | |||
function disableScript(elem) { | |||
elem.type = (elem.getAttribute("type") !== null) + "/" + elem.type; | |||
return elem; | |||
} | |||
function restoreScript(elem) { | |||
if ((elem.type || "").slice(0, 5) === "true/") { | |||
elem.type = elem.type.slice(5); | |||
} else { | |||
elem.removeAttribute("type"); | |||
} | |||
return elem; | |||
} | |||
function cloneCopyEvent(src, dest) { | |||
var i, l, type, pdataOld, udataOld, udataCur, events; | |||
if (dest.nodeType !== 1) { | |||
return; | |||
} | |||
if (dataPriv.hasData(src)) { | |||
pdataOld = dataPriv.get(src); | |||
events = pdataOld.events; | |||
if (events) { | |||
dataPriv.remove(dest, "handle events"); | |||
for (type in events) { | |||
for (i = 0, | |||
l = events[type].length; i < l; i++) { | |||
jQuery.event.add(dest, type, events[type][i]); | |||
} | |||
} | |||
} | |||
} | |||
if (dataUser.hasData(src)) { | |||
udataOld = dataUser.access(src); | |||
udataCur = jQuery.extend({}, udataOld); | |||
dataUser.set(dest, udataCur); | |||
} | |||
} | |||
function fixInput(src, dest) { | |||
var nodeName = dest.nodeName.toLowerCase(); | |||
if (nodeName === "input" && rcheckableType.test(src.type)) { | |||
dest.checked = src.checked; | |||
} else if (nodeName === "input" || nodeName === "textarea") { | |||
dest.defaultValue = src.defaultValue; | |||
} | |||
} | |||
function domManip(collection, args, callback, ignored) { | |||
args = flat(args); | |||
var fragment, first, scripts, hasScripts, node, doc, i = 0, l = collection.length, iNoClone = l - 1, value = args[0], valueIsFunction = isFunction(value); | |||
if (valueIsFunction || (l > 1 && typeof value === "string" && !support.checkClone && rchecked.test(value))) { | |||
return collection.each(function(index) { | |||
var self = collection.eq(index); | |||
if (valueIsFunction) { | |||
args[0] = value.call(this, index, self.html()); | |||
} | |||
domManip(self, args, callback, ignored); | |||
}); | |||
} | |||
if (l) { | |||
fragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored); | |||
first = fragment.firstChild; | |||
if (fragment.childNodes.length === 1) { | |||
fragment = first; | |||
} | |||
if (first || ignored) { | |||
scripts = jQuery.map(getAll(fragment, "script"), disableScript); | |||
hasScripts = scripts.length; | |||
for (; i < l; i++) { | |||
node = fragment; | |||
if (i !== iNoClone) { | |||
node = jQuery.clone(node, true, true); | |||
if (hasScripts) { | |||
jQuery.merge(scripts, getAll(node, "script")); | |||
} | |||
} | |||
callback.call(collection[i], node, i); | |||
} | |||
if (hasScripts) { | |||
doc = scripts[scripts.length - 1].ownerDocument; | |||
jQuery.map(scripts, restoreScript); | |||
for (i = 0; i < hasScripts; i++) { | |||
node = scripts[i]; | |||
if (rscriptType.test(node.type || "") && !dataPriv.access(node, "globalEval") && jQuery.contains(doc, node)) { | |||
if (node.src && (node.type || "").toLowerCase() !== "module") { | |||
if (jQuery._evalUrl && !node.noModule) { | |||
jQuery._evalUrl(node.src, { | |||
nonce: node.nonce || node.getAttribute("nonce") | |||
}, doc); | |||
} | |||
} else { | |||
DOMEval(node.textContent.replace(rcleanScript, ""), node, doc); | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
return collection; | |||
} | |||
function remove(elem, selector, keepData) { | |||
var node, nodes = selector ? jQuery.filter(selector, elem) : elem, i = 0; | |||
for (; (node = nodes[i]) != null; i++) { | |||
if (!keepData && node.nodeType === 1) { | |||
jQuery.cleanData(getAll(node)); | |||
} | |||
if (node.parentNode) { | |||
if (keepData && isAttached(node)) { | |||
setGlobalEval(getAll(node, "script")); | |||
} | |||
node.parentNode.removeChild(node); | |||
} | |||
} | |||
return elem; | |||
} | |||
jQuery.extend({ | |||
htmlPrefilter: function(html) { | |||
return html; | |||
}, | |||
clone: function(elem, dataAndEvents, deepDataAndEvents) { | |||
var i, l, srcElements, destElements, clone = elem.cloneNode(true), inPage = isAttached(elem); | |||
if (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem)) { | |||
destElements = getAll(clone); | |||
srcElements = getAll(elem); | |||
for (i = 0, | |||
l = srcElements.length; i < l; i++) { | |||
fixInput(srcElements[i], destElements[i]); | |||
} | |||
} | |||
if (dataAndEvents) { | |||
if (deepDataAndEvents) { | |||
srcElements = srcElements || getAll(elem); | |||
destElements = destElements || getAll(clone); | |||
for (i = 0, | |||
l = srcElements.length; i < l; i++) { | |||
cloneCopyEvent(srcElements[i], destElements[i]); | |||
} | |||
} else { | |||
cloneCopyEvent(elem, clone); | |||
} | |||
} | |||
destElements = getAll(clone, "script"); | |||
if (destElements.length > 0) { | |||
setGlobalEval(destElements, !inPage && getAll(elem, "script")); | |||
} | |||
return clone; | |||
}, | |||
cleanData: function(elems) { | |||
var data, elem, type, special = jQuery.event.special, i = 0; | |||
for (; (elem = elems[i]) !== undefined; i++) { | |||
if (acceptData(elem)) { | |||
if ((data = elem[dataPriv.expando])) { | |||
if (data.events) { | |||
for (type in data.events) { | |||
if (special[type]) { | |||
jQuery.event.remove(elem, type); | |||
} else { | |||
jQuery.removeEvent(elem, type, data.handle); | |||
} | |||
} | |||
} | |||
elem[dataPriv.expando] = undefined; | |||
} | |||
if (elem[dataUser.expando]) { | |||
elem[dataUser.expando] = undefined; | |||
} | |||
} | |||
} | |||
} | |||
}); | |||
jQuery.fn.extend({ | |||
detach: function(selector) { | |||
return remove(this, selector, true); | |||
}, | |||
remove: function(selector) { | |||
return remove(this, selector); | |||
}, | |||
text: function(value) { | |||
return access(this, function(value) { | |||
return value === undefined ? jQuery.text(this) : this.empty().each(function() { | |||
if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) { | |||
this.textContent = value; | |||
} | |||
}); | |||
}, null, value, arguments.length); | |||
}, | |||
append: function() { | |||
return domManip(this, arguments, function(elem) { | |||
if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) { | |||
var target = manipulationTarget(this, elem); | |||
target.appendChild(elem); | |||
} | |||
}); | |||
}, | |||
prepend: function() { | |||
return domManip(this, arguments, function(elem) { | |||
if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) { | |||
var target = manipulationTarget(this, elem); | |||
target.insertBefore(elem, target.firstChild); | |||
} | |||
}); | |||
}, | |||
before: function() { | |||
return domManip(this, arguments, function(elem) { | |||
if (this.parentNode) { | |||
this.parentNode.insertBefore(elem, this); | |||
} | |||
}); | |||
}, | |||
after: function() { | |||
return domManip(this, arguments, function(elem) { | |||
if (this.parentNode) { | |||
this.parentNode.insertBefore(elem, this.nextSibling); | |||
} | |||
}); | |||
}, | |||
empty: function() { | |||
var elem, i = 0; | |||
for (; (elem = this[i]) != null; i++) { | |||
if (elem.nodeType === 1) { | |||
jQuery.cleanData(getAll(elem, false)); | |||
elem.textContent = ""; | |||
} | |||
} | |||
return this; | |||
}, | |||
clone: function(dataAndEvents, deepDataAndEvents) { | |||
dataAndEvents = dataAndEvents == null ? false : dataAndEvents; | |||
deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; | |||
return this.map(function() { | |||
return jQuery.clone(this, dataAndEvents, deepDataAndEvents); | |||
}); | |||
}, | |||
html: function(value) { | |||
return access(this, function(value) { | |||
var elem = this[0] || {} | |||
, i = 0 | |||
, l = this.length; | |||
if (value === undefined && elem.nodeType === 1) { | |||
return elem.innerHTML; | |||
} | |||
if (typeof value === "string" && !rnoInnerhtml.test(value) && !wrapMap[(rtagName.exec(value) || ["", ""])[1].toLowerCase()]) { | |||
value = jQuery.htmlPrefilter(value); | |||
try { | |||
for (; i < l; i++) { | |||
elem = this[i] || {}; | |||
if (elem.nodeType === 1) { | |||
jQuery.cleanData(getAll(elem, false)); | |||
elem.innerHTML = value; | |||
} | |||
} | |||
elem = 0; | |||
} catch (e) {} | |||
} | |||
if (elem) { | |||
this.empty().append(value); | |||
} | |||
}, null, value, arguments.length); | |||
}, | |||
replaceWith: function() { | |||
var ignored = []; | |||
return domManip(this, arguments, function(elem) { | |||
var parent = this.parentNode; | |||
if (jQuery.inArray(this, ignored) < 0) { | |||
jQuery.cleanData(getAll(this)); | |||
if (parent) { | |||
parent.replaceChild(elem, this); | |||
} | |||
} | |||
}, ignored); | |||
} | |||
}); | |||
jQuery.each({ | |||
appendTo: "append", | |||
prependTo: "prepend", | |||
insertBefore: "before", | |||
insertAfter: "after", | |||
replaceAll: "replaceWith" | |||
}, function(name, original) { | |||
jQuery.fn[name] = function(selector) { | |||
var elems, ret = [], insert = jQuery(selector), last = insert.length - 1, i = 0; | |||
for (; i <= last; i++) { | |||
elems = i === last ? this : this.clone(true); | |||
jQuery(insert[i])[original](elems); | |||
push.apply(ret, elems.get()); | |||
} | |||
return this.pushStack(ret); | |||
} | |||
; | |||
}); | |||
var rnumnonpx = new RegExp("^(" + pnum + ")(?!px)[a-z%]+$","i"); | |||
var rcustomProp = /^--/; | |||
var getStyles = function(elem) { | |||
var view = elem.ownerDocument.defaultView; | |||
if (!view || !view.opener) { | |||
view = window; | |||
} | |||
return view.getComputedStyle(elem); | |||
}; | |||
var swap = function(elem, options, callback) { | |||
var ret, name, old = {}; | |||
for (name in options) { | |||
old[name] = elem.style[name]; | |||
elem.style[name] = options[name]; | |||
} | |||
ret = callback.call(elem); | |||
for (name in options) { | |||
elem.style[name] = old[name]; | |||
} | |||
return ret; | |||
}; | |||
var rboxStyle = new RegExp(cssExpand.join("|"),"i"); | |||
(function() { | |||
function computeStyleTests() { | |||
if (!div) { | |||
return; | |||
} | |||
container.style.cssText = "position:absolute;left:-11111px;width:60px;" + "margin-top:1px;padding:0;border:0"; | |||
div.style.cssText = "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + "margin:auto;border:1px;padding:1px;" + "width:60%;top:1%"; | |||
documentElement.appendChild(container).appendChild(div); | |||
var divStyle = window.getComputedStyle(div); | |||
pixelPositionVal = divStyle.top !== "1%"; | |||
reliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12; | |||
div.style.right = "60%"; | |||
pixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36; | |||
boxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36; | |||
div.style.position = "absolute"; | |||
scrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12; | |||
documentElement.removeChild(container); | |||
div = null; | |||
} | |||
function roundPixelMeasures(measure) { | |||
return Math.round(parseFloat(measure)); | |||
} | |||
var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, reliableTrDimensionsVal, reliableMarginLeftVal, container = document.createElement("div"), div = document.createElement("div"); | |||
if (!div.style) { | |||
return; | |||
} | |||
div.style.backgroundClip = "content-box"; | |||
div.cloneNode(true).style.backgroundClip = ""; | |||
support.clearCloneStyle = div.style.backgroundClip === "content-box"; | |||
jQuery.extend(support, { | |||
boxSizingReliable: function() { | |||
computeStyleTests(); | |||
return boxSizingReliableVal; | |||
}, | |||
pixelBoxStyles: function() { | |||
computeStyleTests(); | |||
return pixelBoxStylesVal; | |||
}, | |||
pixelPosition: function() { | |||
computeStyleTests(); | |||
return pixelPositionVal; | |||
}, | |||
reliableMarginLeft: function() { | |||
computeStyleTests(); | |||
return reliableMarginLeftVal; | |||
}, | |||
scrollboxSize: function() { | |||
computeStyleTests(); | |||
return scrollboxSizeVal; | |||
}, | |||
reliableTrDimensions: function() { | |||
var table, tr, trChild, trStyle; | |||
if (reliableTrDimensionsVal == null) { | |||
table = document.createElement("table"); | |||
tr = document.createElement("tr"); | |||
trChild = document.createElement("div"); | |||
table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; | |||
tr.style.cssText = "box-sizing:content-box;border:1px solid"; | |||
tr.style.height = "1px"; | |||
trChild.style.height = "9px"; | |||
trChild.style.display = "block"; | |||
documentElement.appendChild(table).appendChild(tr).appendChild(trChild); | |||
trStyle = window.getComputedStyle(tr); | |||
reliableTrDimensionsVal = (parseInt(trStyle.height, 10) + parseInt(trStyle.borderTopWidth, 10) + parseInt(trStyle.borderBottomWidth, 10)) === tr.offsetHeight; | |||
documentElement.removeChild(table); | |||
} | |||
return reliableTrDimensionsVal; | |||
} | |||
}); | |||
} | |||
)(); | |||
function curCSS(elem, name, computed) { | |||
var width, minWidth, maxWidth, ret, isCustomProp = rcustomProp.test(name), style = elem.style; | |||
computed = computed || getStyles(elem); | |||
if (computed) { | |||
ret = computed.getPropertyValue(name) || computed[name]; | |||
if (isCustomProp && ret) { | |||
ret = ret.replace(rtrimCSS, "$1") || undefined; | |||
} | |||
if (ret === "" && !isAttached(elem)) { | |||
ret = jQuery.style(elem, name); | |||
} | |||
if (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) { | |||
width = style.width; | |||
minWidth = style.minWidth; | |||
maxWidth = style.maxWidth; | |||
style.minWidth = style.maxWidth = style.width = ret; | |||
ret = computed.width; | |||
style.width = width; | |||
style.minWidth = minWidth; | |||
style.maxWidth = maxWidth; | |||
} | |||
} | |||
return ret !== undefined ? ret + "" : ret; | |||
} | |||
function addGetHookIf(conditionFn, hookFn) { | |||
return { | |||
get: function() { | |||
if (conditionFn()) { | |||
delete this.get; | |||
return; | |||
} | |||
return (this.get = hookFn).apply(this, arguments); | |||
} | |||
}; | |||
} | |||
var cssPrefixes = ["Webkit", "Moz", "ms"] | |||
, emptyStyle = document.createElement("div").style | |||
, vendorProps = {}; | |||
function vendorPropName(name) { | |||
var capName = name[0].toUpperCase() + name.slice(1) | |||
, i = cssPrefixes.length; | |||
while (i--) { | |||
name = cssPrefixes[i] + capName; | |||
if (name in emptyStyle) { | |||
return name; | |||
} | |||
} | |||
} | |||
function finalPropName(name) { | |||
var final = jQuery.cssProps[name] || vendorProps[name]; | |||
if (final) { | |||
return final; | |||
} | |||
if (name in emptyStyle) { | |||
return name; | |||
} | |||
return vendorProps[name] = vendorPropName(name) || name; | |||
} | |||
var rdisplayswap = /^(none|table(?!-c[ea]).+)/ | |||
, cssShow = { | |||
position: "absolute", | |||
visibility: "hidden", | |||
display: "block" | |||
} | |||
, cssNormalTransform = { | |||
letterSpacing: "0", | |||
fontWeight: "400" | |||
}; | |||
function setPositiveNumber(_elem, value, subtract) { | |||
var matches = rcssNum.exec(value); | |||
return matches ? Math.max(0, matches[2] - (subtract || 0)) + (matches[3] || "px") : value; | |||
} | |||
function boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) { | |||
var i = dimension === "width" ? 1 : 0 | |||
, extra = 0 | |||
, delta = 0 | |||
, marginDelta = 0; | |||
if (box === (isBorderBox ? "border" : "content")) { | |||
return 0; | |||
} | |||
for (; i < 4; i += 2) { | |||
if (box === "margin") { | |||
marginDelta += jQuery.css(elem, box + cssExpand[i], true, styles); | |||
} | |||
if (!isBorderBox) { | |||
delta += jQuery.css(elem, "padding" + cssExpand[i], true, styles); | |||
if (box !== "padding") { | |||
delta += jQuery.css(elem, "border" + cssExpand[i] + "Width", true, styles); | |||
} else { | |||
extra += jQuery.css(elem, "border" + cssExpand[i] + "Width", true, styles); | |||
} | |||
} else { | |||
if (box === "content") { | |||
delta -= jQuery.css(elem, "padding" + cssExpand[i], true, styles); | |||
} | |||
if (box !== "margin") { | |||
delta -= jQuery.css(elem, "border" + cssExpand[i] + "Width", true, styles); | |||
} | |||
} | |||
} | |||
if (!isBorderBox && computedVal >= 0) { | |||
delta += Math.max(0, Math.ceil(elem["offset" + dimension[0].toUpperCase() + dimension.slice(1)] - computedVal - delta - extra - 0.5)) || 0; | |||
} | |||
return delta + marginDelta; | |||
} | |||
function getWidthOrHeight(elem, dimension, extra) { | |||
var styles = getStyles(elem) | |||
, boxSizingNeeded = !support.boxSizingReliable() || extra | |||
, isBorderBox = boxSizingNeeded && jQuery.css(elem, "boxSizing", false, styles) === "border-box" | |||
, valueIsBorderBox = isBorderBox | |||
, val = curCSS(elem, dimension, styles) | |||
, offsetProp = "offset" + dimension[0].toUpperCase() + dimension.slice(1); | |||
if (rnumnonpx.test(val)) { | |||
if (!extra) { | |||
return val; | |||
} | |||
val = "auto"; | |||
} | |||
if ((!support.boxSizingReliable() && isBorderBox || !support.reliableTrDimensions() && nodeName(elem, "tr") || val === "auto" || !parseFloat(val) && jQuery.css(elem, "display", false, styles) === "inline") && elem.getClientRects().length) { | |||
isBorderBox = jQuery.css(elem, "boxSizing", false, styles) === "border-box"; | |||
valueIsBorderBox = offsetProp in elem; | |||
if (valueIsBorderBox) { | |||
val = elem[offsetProp]; | |||
} | |||
} | |||
val = parseFloat(val) || 0; | |||
return (val + boxModelAdjustment(elem, dimension, extra || (isBorderBox ? "border" : "content"), valueIsBorderBox, styles, val)) + "px"; | |||
} | |||
jQuery.extend({ | |||
cssHooks: { | |||
opacity: { | |||
get: function(elem, computed) { | |||
if (computed) { | |||
var ret = curCSS(elem, "opacity"); | |||
return ret === "" ? "1" : ret; | |||
} | |||
} | |||
} | |||
}, | |||
cssNumber: { | |||
animationIterationCount: true, | |||
aspectRatio: true, | |||
borderImageSlice: true, | |||
columnCount: true, | |||
flexGrow: true, | |||
flexShrink: true, | |||
fontWeight: true, | |||
gridArea: true, | |||
gridColumn: true, | |||
gridColumnEnd: true, | |||
gridColumnStart: true, | |||
gridRow: true, | |||
gridRowEnd: true, | |||
gridRowStart: true, | |||
lineHeight: true, | |||
opacity: true, | |||
order: true, | |||
orphans: true, | |||
scale: true, | |||
widows: true, | |||
zIndex: true, | |||
zoom: true, | |||
fillOpacity: true, | |||
floodOpacity: true, | |||
stopOpacity: true, | |||
strokeMiterlimit: true, | |||
strokeOpacity: true | |||
}, | |||
cssProps: {}, | |||
style: function(elem, name, value, extra) { | |||
if (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) { | |||
return; | |||
} | |||
var ret, type, hooks, origName = camelCase(name), isCustomProp = rcustomProp.test(name), style = elem.style; | |||
if (!isCustomProp) { | |||
name = finalPropName(origName); | |||
} | |||
hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName]; | |||
if (value !== undefined) { | |||
type = typeof value; | |||
if (type === "string" && (ret = rcssNum.exec(value)) && ret[1]) { | |||
value = adjustCSS(elem, name, ret); | |||
type = "number"; | |||
} | |||
if (value == null || value !== value) { | |||
return; | |||
} | |||
if (type === "number" && !isCustomProp) { | |||
value += ret && ret[3] || (jQuery.cssNumber[origName] ? "" : "px"); | |||
} | |||
if (!support.clearCloneStyle && value === "" && name.indexOf("background") === 0) { | |||
style[name] = "inherit"; | |||
} | |||
if (!hooks || !("set"in hooks) || (value = hooks.set(elem, value, extra)) !== undefined) { | |||
if (isCustomProp) { | |||
style.setProperty(name, value); | |||
} else { | |||
style[name] = value; | |||
} | |||
} | |||
} else { | |||
if (hooks && "get"in hooks && (ret = hooks.get(elem, false, extra)) !== undefined) { | |||
return ret; | |||
} | |||
return style[name]; | |||
} | |||
}, | |||
css: function(elem, name, extra, styles) { | |||
var val, num, hooks, origName = camelCase(name), isCustomProp = rcustomProp.test(name); | |||
if (!isCustomProp) { | |||
name = finalPropName(origName); | |||
} | |||
hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName]; | |||
if (hooks && "get"in hooks) { | |||
val = hooks.get(elem, true, extra); | |||
} | |||
if (val === undefined) { | |||
val = curCSS(elem, name, styles); | |||
} | |||
if (val === "normal" && name in cssNormalTransform) { | |||
val = cssNormalTransform[name]; | |||
} | |||
if (extra === "" || extra) { | |||
num = parseFloat(val); | |||
return extra === true || isFinite(num) ? num || 0 : val; | |||
} | |||
return val; | |||
} | |||
}); | |||
jQuery.each(["height", "width"], function(_i, dimension) { | |||
jQuery.cssHooks[dimension] = { | |||
get: function(elem, computed, extra) { | |||
if (computed) { | |||
return rdisplayswap.test(jQuery.css(elem, "display")) && (!elem.getClientRects().length || !elem.getBoundingClientRect().width) ? swap(elem, cssShow, function() { | |||
return getWidthOrHeight(elem, dimension, extra); | |||
}) : getWidthOrHeight(elem, dimension, extra); | |||
} | |||
}, | |||
set: function(elem, value, extra) { | |||
var matches, styles = getStyles(elem), scrollboxSizeBuggy = !support.scrollboxSize() && styles.position === "absolute", boxSizingNeeded = scrollboxSizeBuggy || extra, isBorderBox = boxSizingNeeded && jQuery.css(elem, "boxSizing", false, styles) === "border-box", subtract = extra ? boxModelAdjustment(elem, dimension, extra, isBorderBox, styles) : 0; | |||
if (isBorderBox && scrollboxSizeBuggy) { | |||
subtract -= Math.ceil(elem["offset" + dimension[0].toUpperCase() + dimension.slice(1)] - parseFloat(styles[dimension]) - boxModelAdjustment(elem, dimension, "border", false, styles) - 0.5); | |||
} | |||
if (subtract && (matches = rcssNum.exec(value)) && (matches[3] || "px") !== "px") { | |||
elem.style[dimension] = value; | |||
value = jQuery.css(elem, dimension); | |||
} | |||
return setPositiveNumber(elem, value, subtract); | |||
} | |||
}; | |||
}); | |||
jQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft, function(elem, computed) { | |||
if (computed) { | |||
return (parseFloat(curCSS(elem, "marginLeft")) || elem.getBoundingClientRect().left - swap(elem, { | |||
marginLeft: 0 | |||
}, function() { | |||
return elem.getBoundingClientRect().left; | |||
})) + "px"; | |||
} | |||
}); | |||
jQuery.each({ | |||
margin: "", | |||
padding: "", | |||
border: "Width" | |||
}, function(prefix, suffix) { | |||
jQuery.cssHooks[prefix + suffix] = { | |||
expand: function(value) { | |||
var i = 0 | |||
, expanded = {} | |||
, parts = typeof value === "string" ? value.split(" ") : [value]; | |||
for (; i < 4; i++) { | |||
expanded[prefix + cssExpand[i] + suffix] = parts[i] || parts[i - 2] || parts[0]; | |||
} | |||
return expanded; | |||
} | |||
}; | |||
if (prefix !== "margin") { | |||
jQuery.cssHooks[prefix + suffix].set = setPositiveNumber; | |||
} | |||
}); | |||
jQuery.fn.extend({ | |||
css: function(name, value) { | |||
return access(this, function(elem, name, value) { | |||
var styles, len, map = {}, i = 0; | |||
if (Array.isArray(name)) { | |||
styles = getStyles(elem); | |||
len = name.length; | |||
for (; i < len; i++) { | |||
map[name[i]] = jQuery.css(elem, name[i], false, styles); | |||
} | |||
return map; | |||
} | |||
return value !== undefined ? jQuery.style(elem, name, value) : jQuery.css(elem, name); | |||
}, name, value, arguments.length > 1); | |||
} | |||
}); | |||
function Tween(elem, options, prop, end, easing) { | |||
return new Tween.prototype.init(elem,options,prop,end,easing); | |||
} | |||
jQuery.Tween = Tween; | |||
Tween.prototype = { | |||
constructor: Tween, | |||
init: function(elem, options, prop, end, easing, unit) { | |||
this.elem = elem; | |||
this.prop = prop; | |||
this.easing = easing || jQuery.easing._default; | |||
this.options = options; | |||
this.start = this.now = this.cur(); | |||
this.end = end; | |||
this.unit = unit || (jQuery.cssNumber[prop] ? "" : "px"); | |||
}, | |||
cur: function() { | |||
var hooks = Tween.propHooks[this.prop]; | |||
return hooks && hooks.get ? hooks.get(this) : Tween.propHooks._default.get(this); | |||
}, | |||
run: function(percent) { | |||
var eased, hooks = Tween.propHooks[this.prop]; | |||
if (this.options.duration) { | |||
this.pos = eased = jQuery.easing[this.easing](percent, this.options.duration * percent, 0, 1, this.options.duration); | |||
} else { | |||
this.pos = eased = percent; | |||
} | |||
this.now = (this.end - this.start) * eased + this.start; | |||
if (this.options.step) { | |||
this.options.step.call(this.elem, this.now, this); | |||
} | |||
if (hooks && hooks.set) { | |||
hooks.set(this); | |||
} else { | |||
Tween.propHooks._default.set(this); | |||
} | |||
return this; | |||
} | |||
}; | |||
Tween.prototype.init.prototype = Tween.prototype; | |||
Tween.propHooks = { | |||
_default: { | |||
get: function(tween) { | |||
var result; | |||
if (tween.elem.nodeType !== 1 || tween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) { | |||
return tween.elem[tween.prop]; | |||
} | |||
result = jQuery.css(tween.elem, tween.prop, ""); | |||
return !result || result === "auto" ? 0 : result; | |||
}, | |||
set: function(tween) { | |||
if (jQuery.fx.step[tween.prop]) { | |||
jQuery.fx.step[tween.prop](tween); | |||
} else if (tween.elem.nodeType === 1 && (jQuery.cssHooks[tween.prop] || tween.elem.style[finalPropName(tween.prop)] != null)) { | |||
jQuery.style(tween.elem, tween.prop, tween.now + tween.unit); | |||
} else { | |||
tween.elem[tween.prop] = tween.now; | |||
} | |||
} | |||
} | |||
}; | |||
Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { | |||
set: function(tween) { | |||
if (tween.elem.nodeType && tween.elem.parentNode) { | |||
tween.elem[tween.prop] = tween.now; | |||
} | |||
} | |||
}; | |||
jQuery.easing = { | |||
linear: function(p) { | |||
return p; | |||
}, | |||
swing: function(p) { | |||
return 0.5 - Math.cos(p * Math.PI) / 2; | |||
}, | |||
_default: "swing" | |||
}; | |||
jQuery.fx = Tween.prototype.init; | |||
jQuery.fx.step = {}; | |||
var fxNow, inProgress, rfxtypes = /^(?:toggle|show|hide)$/, rrun = /queueHooks$/; | |||
function schedule() { | |||
if (inProgress) { | |||
if (document.hidden === false && window.requestAnimationFrame) { | |||
window.requestAnimationFrame(schedule); | |||
} else { | |||
window.setTimeout(schedule, jQuery.fx.interval); | |||
} | |||
jQuery.fx.tick(); | |||
} | |||
} | |||
function createFxNow() { | |||
window.setTimeout(function() { | |||
fxNow = undefined; | |||
}); | |||
return (fxNow = Date.now()); | |||
} | |||
function genFx(type, includeWidth) { | |||
var which, i = 0, attrs = { | |||
height: type | |||
}; | |||
includeWidth = includeWidth ? 1 : 0; | |||
for (; i < 4; i += 2 - includeWidth) { | |||
which = cssExpand[i]; | |||
attrs["margin" + which] = attrs["padding" + which] = type; | |||
} | |||
if (includeWidth) { | |||
attrs.opacity = attrs.width = type; | |||
} | |||
return attrs; | |||
} | |||
function createTween(value, prop, animation) { | |||
var tween, collection = (Animation.tweeners[prop] || []).concat(Animation.tweeners["*"]), index = 0, length = collection.length; | |||
for (; index < length; index++) { | |||
if ((tween = collection[index].call(animation, prop, value))) { | |||
return tween; | |||
} | |||
} | |||
} | |||
function defaultPrefilter(elem, props, opts) { | |||
var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, isBox = "width"in props || "height"in props, anim = this, orig = {}, style = elem.style, hidden = elem.nodeType && isHiddenWithinTree(elem), dataShow = dataPriv.get(elem, "fxshow"); | |||
if (!opts.queue) { | |||
hooks = jQuery._queueHooks(elem, "fx"); | |||
if (hooks.unqueued == null) { | |||
hooks.unqueued = 0; | |||
oldfire = hooks.empty.fire; | |||
hooks.empty.fire = function() { | |||
if (!hooks.unqueued) { | |||
oldfire(); | |||
} | |||
} | |||
; | |||
} | |||
hooks.unqueued++; | |||
anim.always(function() { | |||
anim.always(function() { | |||
hooks.unqueued--; | |||
if (!jQuery.queue(elem, "fx").length) { | |||
hooks.empty.fire(); | |||
} | |||
}); | |||
}); | |||
} | |||
for (prop in props) { | |||
value = props[prop]; | |||
if (rfxtypes.test(value)) { | |||
delete props[prop]; | |||
toggle = toggle || value === "toggle"; | |||
if (value === (hidden ? "hide" : "show")) { | |||
if (value === "show" && dataShow && dataShow[prop] !== undefined) { | |||
hidden = true; | |||
} else { | |||
continue; | |||
} | |||
} | |||
orig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop); | |||
} | |||
} | |||
propTween = !jQuery.isEmptyObject(props); | |||
if (!propTween && jQuery.isEmptyObject(orig)) { | |||
return; | |||
} | |||
if (isBox && elem.nodeType === 1) { | |||
opts.overflow = [style.overflow, style.overflowX, style.overflowY]; | |||
restoreDisplay = dataShow && dataShow.display; | |||
if (restoreDisplay == null) { | |||
restoreDisplay = dataPriv.get(elem, "display"); | |||
} | |||
display = jQuery.css(elem, "display"); | |||
if (display === "none") { | |||
if (restoreDisplay) { | |||
display = restoreDisplay; | |||
} else { | |||
showHide([elem], true); | |||
restoreDisplay = elem.style.display || restoreDisplay; | |||
display = jQuery.css(elem, "display"); | |||
showHide([elem]); | |||
} | |||
} | |||
if (display === "inline" || display === "inline-block" && restoreDisplay != null) { | |||
if (jQuery.css(elem, "float") === "none") { | |||
if (!propTween) { | |||
anim.done(function() { | |||
style.display = restoreDisplay; | |||
}); | |||
if (restoreDisplay == null) { | |||
display = style.display; | |||
restoreDisplay = display === "none" ? "" : display; | |||
} | |||
} | |||
style.display = "inline-block"; | |||
} | |||
} | |||
} | |||
if (opts.overflow) { | |||
style.overflow = "hidden"; | |||
anim.always(function() { | |||
style.overflow = opts.overflow[0]; | |||
style.overflowX = opts.overflow[1]; | |||
style.overflowY = opts.overflow[2]; | |||
}); | |||
} | |||
propTween = false; | |||
for (prop in orig) { | |||
if (!propTween) { | |||
if (dataShow) { | |||
if ("hidden"in dataShow) { | |||
hidden = dataShow.hidden; | |||
} | |||
} else { | |||
dataShow = dataPriv.access(elem, "fxshow", { | |||
display: restoreDisplay | |||
}); | |||
} | |||
if (toggle) { | |||
dataShow.hidden = !hidden; | |||
} | |||
if (hidden) { | |||
showHide([elem], true); | |||
} | |||
anim.done(function() { | |||
if (!hidden) { | |||
showHide([elem]); | |||
} | |||
dataPriv.remove(elem, "fxshow"); | |||
for (prop in orig) { | |||
jQuery.style(elem, prop, orig[prop]); | |||
} | |||
}); | |||
} | |||
propTween = createTween(hidden ? dataShow[prop] : 0, prop, anim); | |||
if (!(prop in dataShow)) { | |||
dataShow[prop] = propTween.start; | |||
if (hidden) { | |||
propTween.end = propTween.start; | |||
propTween.start = 0; | |||
} | |||
} | |||
} | |||
} | |||
function propFilter(props, specialEasing) { | |||
var index, name, easing, value, hooks; | |||
for (index in props) { | |||
name = camelCase(index); | |||
easing = specialEasing[name]; | |||
value = props[index]; | |||
if (Array.isArray(value)) { | |||
easing = value[1]; | |||
value = props[index] = value[0]; | |||
} | |||
if (index !== name) { | |||
props[name] = value; | |||
delete props[index]; | |||
} | |||
hooks = jQuery.cssHooks[name]; | |||
if (hooks && "expand"in hooks) { | |||
value = hooks.expand(value); | |||
delete props[name]; | |||
for (index in value) { | |||
if (!(index in props)) { | |||
props[index] = value[index]; | |||
specialEasing[index] = easing; | |||
} | |||
} | |||
} else { | |||
specialEasing[name] = easing; | |||
} | |||
} | |||
} | |||
function Animation(elem, properties, options) { | |||
var result, stopped, index = 0, length = Animation.prefilters.length, deferred = jQuery.Deferred().always(function() { | |||
delete tick.elem; | |||
}), tick = function() { | |||
if (stopped) { | |||
return false; | |||
} | |||
var currentTime = fxNow || createFxNow() | |||
, remaining = Math.max(0, animation.startTime + animation.duration - currentTime) | |||
, temp = remaining / animation.duration || 0 | |||
, percent = 1 - temp | |||
, index = 0 | |||
, length = animation.tweens.length; | |||
for (; index < length; index++) { | |||
animation.tweens[index].run(percent); | |||
} | |||
deferred.notifyWith(elem, [animation, percent, remaining]); | |||
if (percent < 1 && length) { | |||
return remaining; | |||
} | |||
if (!length) { | |||
deferred.notifyWith(elem, [animation, 1, 0]); | |||
} | |||
deferred.resolveWith(elem, [animation]); | |||
return false; | |||
}, animation = deferred.promise({ | |||
elem: elem, | |||
props: jQuery.extend({}, properties), | |||
opts: jQuery.extend(true, { | |||
specialEasing: {}, | |||
easing: jQuery.easing._default | |||
}, options), | |||
originalProperties: properties, | |||
originalOptions: options, | |||
startTime: fxNow || createFxNow(), | |||
duration: options.duration, | |||
tweens: [], | |||
createTween: function(prop, end) { | |||
var tween = jQuery.Tween(elem, animation.opts, prop, end, animation.opts.specialEasing[prop] || animation.opts.easing); | |||
animation.tweens.push(tween); | |||
return tween; | |||
}, | |||
stop: function(gotoEnd) { | |||
var index = 0 | |||
, length = gotoEnd ? animation.tweens.length : 0; | |||
if (stopped) { | |||
return this; | |||
} | |||
stopped = true; | |||
for (; index < length; index++) { | |||
animation.tweens[index].run(1); | |||
} | |||
if (gotoEnd) { | |||
deferred.notifyWith(elem, [animation, 1, 0]); | |||
deferred.resolveWith(elem, [animation, gotoEnd]); | |||
} else { | |||
deferred.rejectWith(elem, [animation, gotoEnd]); | |||
} | |||
return this; | |||
} | |||
}), props = animation.props; | |||
propFilter(props, animation.opts.specialEasing); | |||
for (; index < length; index++) { | |||
result = Animation.prefilters[index].call(animation, elem, props, animation.opts); | |||
if (result) { | |||
if (isFunction(result.stop)) { | |||
jQuery._queueHooks(animation.elem, animation.opts.queue).stop = result.stop.bind(result); | |||
} | |||
return result; | |||
} | |||
} | |||
jQuery.map(props, createTween, animation); | |||
if (isFunction(animation.opts.start)) { | |||
animation.opts.start.call(elem, animation); | |||
} | |||
animation.progress(animation.opts.progress).done(animation.opts.done, animation.opts.complete).fail(animation.opts.fail).always(animation.opts.always); | |||
jQuery.fx.timer(jQuery.extend(tick, { | |||
elem: elem, | |||
anim: animation, | |||
queue: animation.opts.queue | |||
})); | |||
return animation; | |||
} | |||
jQuery.Animation = jQuery.extend(Animation, { | |||
tweeners: { | |||
"*": [function(prop, value) { | |||
var tween = this.createTween(prop, value); | |||
adjustCSS(tween.elem, prop, rcssNum.exec(value), tween); | |||
return tween; | |||
} | |||
] | |||
}, | |||
tweener: function(props, callback) { | |||
if (isFunction(props)) { | |||
callback = props; | |||
props = ["*"]; | |||
} else { | |||
props = props.match(rnothtmlwhite); | |||
} | |||
var prop, index = 0, length = props.length; | |||
for (; index < length; index++) { | |||
prop = props[index]; | |||
Animation.tweeners[prop] = Animation.tweeners[prop] || []; | |||
Animation.tweeners[prop].unshift(callback); | |||
} | |||
}, | |||
prefilters: [defaultPrefilter], | |||
prefilter: function(callback, prepend) { | |||
if (prepend) { | |||
Animation.prefilters.unshift(callback); | |||
} else { | |||
Animation.prefilters.push(callback); | |||
} | |||
} | |||
}); | |||
jQuery.speed = function(speed, easing, fn) { | |||
var opt = speed && typeof speed === "object" ? jQuery.extend({}, speed) : { | |||
complete: fn || !fn && easing || isFunction(speed) && speed, | |||
duration: speed, | |||
easing: fn && easing || easing && !isFunction(easing) && easing | |||
}; | |||
if (jQuery.fx.off) { | |||
opt.duration = 0; | |||
} else { | |||
if (typeof opt.duration !== "number") { | |||
if (opt.duration in jQuery.fx.speeds) { | |||
opt.duration = jQuery.fx.speeds[opt.duration]; | |||
} else { | |||
opt.duration = jQuery.fx.speeds._default; | |||
} | |||
} | |||
} | |||
if (opt.queue == null || opt.queue === true) { | |||
opt.queue = "fx"; | |||
} | |||
opt.old = opt.complete; | |||
opt.complete = function() { | |||
if (isFunction(opt.old)) { | |||
opt.old.call(this); | |||
} | |||
if (opt.queue) { | |||
jQuery.dequeue(this, opt.queue); | |||
} | |||
} | |||
; | |||
return opt; | |||
} | |||
; | |||
jQuery.fn.extend({ | |||
fadeTo: function(speed, to, easing, callback) { | |||
return this.filter(isHiddenWithinTree).css("opacity", 0).show().end().animate({ | |||
opacity: to | |||
}, speed, easing, callback); | |||
}, | |||
animate: function(prop, speed, easing, callback) { | |||
var empty = jQuery.isEmptyObject(prop) | |||
, optall = jQuery.speed(speed, easing, callback) | |||
, doAnimation = function() { | |||
var anim = Animation(this, jQuery.extend({}, prop), optall); | |||
if (empty || dataPriv.get(this, "finish")) { | |||
anim.stop(true); | |||
} | |||
}; | |||
doAnimation.finish = doAnimation; | |||
return empty || optall.queue === false ? this.each(doAnimation) : this.queue(optall.queue, doAnimation); | |||
}, | |||
stop: function(type, clearQueue, gotoEnd) { | |||
var stopQueue = function(hooks) { | |||
var stop = hooks.stop; | |||
delete hooks.stop; | |||
stop(gotoEnd); | |||
}; | |||
if (typeof type !== "string") { | |||
gotoEnd = clearQueue; | |||
clearQueue = type; | |||
type = undefined; | |||
} | |||
if (clearQueue) { | |||
this.queue(type || "fx", []); | |||
} | |||
return this.each(function() { | |||
var dequeue = true | |||
, index = type != null && type + "queueHooks" | |||
, timers = jQuery.timers | |||
, data = dataPriv.get(this); | |||
if (index) { | |||
if (data[index] && data[index].stop) { | |||
stopQueue(data[index]); | |||
} | |||
} else { | |||
for (index in data) { | |||
if (data[index] && data[index].stop && rrun.test(index)) { | |||
stopQueue(data[index]); | |||
} | |||
} | |||
} | |||
for (index = timers.length; index--; ) { | |||
if (timers[index].elem === this && (type == null || timers[index].queue === type)) { | |||
timers[index].anim.stop(gotoEnd); | |||
dequeue = false; | |||
timers.splice(index, 1); | |||
} | |||
} | |||
if (dequeue || !gotoEnd) { | |||
jQuery.dequeue(this, type); | |||
} | |||
}); | |||
}, | |||
finish: function(type) { | |||
if (type !== false) { | |||
type = type || "fx"; | |||
} | |||
return this.each(function() { | |||
var index, data = dataPriv.get(this), queue = data[type + "queue"], hooks = data[type + "queueHooks"], timers = jQuery.timers, length = queue ? queue.length : 0; | |||
data.finish = true; | |||
jQuery.queue(this, type, []); | |||
if (hooks && hooks.stop) { | |||
hooks.stop.call(this, true); | |||
} | |||
for (index = timers.length; index--; ) { | |||
if (timers[index].elem === this && timers[index].queue === type) { | |||
timers[index].anim.stop(true); | |||
timers.splice(index, 1); | |||
} | |||
} | |||
for (index = 0; index < length; index++) { | |||
if (queue[index] && queue[index].finish) { | |||
queue[index].finish.call(this); | |||
} | |||
} | |||
delete data.finish; | |||
}); | |||
} | |||
}); | |||
jQuery.each(["toggle", "show", "hide"], function(_i, name) { | |||
var cssFn = jQuery.fn[name]; | |||
jQuery.fn[name] = function(speed, easing, callback) { | |||
return speed == null || typeof speed === "boolean" ? cssFn.apply(this, arguments) : this.animate(genFx(name, true), speed, easing, callback); | |||
} | |||
; | |||
}); | |||
jQuery.each({ | |||
slideDown: genFx("show"), | |||
slideUp: genFx("hide"), | |||
slideToggle: genFx("toggle"), | |||
fadeIn: { | |||
opacity: "show" | |||
}, | |||
fadeOut: { | |||
opacity: "hide" | |||
}, | |||
fadeToggle: { | |||
opacity: "toggle" | |||
} | |||
}, function(name, props) { | |||
jQuery.fn[name] = function(speed, easing, callback) { | |||
return this.animate(props, speed, easing, callback); | |||
} | |||
; | |||
}); | |||
jQuery.timers = []; | |||
jQuery.fx.tick = function() { | |||
var timer, i = 0, timers = jQuery.timers; | |||
fxNow = Date.now(); | |||
for (; i < timers.length; i++) { | |||
timer = timers[i]; | |||
if (!timer() && timers[i] === timer) { | |||
timers.splice(i--, 1); | |||
} | |||
} | |||
if (!timers.length) { | |||
jQuery.fx.stop(); | |||
} | |||
fxNow = undefined; | |||
} | |||
; | |||
jQuery.fx.timer = function(timer) { | |||
jQuery.timers.push(timer); | |||
jQuery.fx.start(); | |||
} | |||
; | |||
jQuery.fx.interval = 13; | |||
jQuery.fx.start = function() { | |||
if (inProgress) { | |||
return; | |||
} | |||
inProgress = true; | |||
schedule(); | |||
} | |||
; | |||
jQuery.fx.stop = function() { | |||
inProgress = null; | |||
} | |||
; | |||
jQuery.fx.speeds = { | |||
slow: 600, | |||
fast: 200, | |||
_default: 400 | |||
}; | |||
jQuery.fn.delay = function(time, type) { | |||
time = jQuery.fx ? jQuery.fx.speeds[time] || time : time; | |||
type = type || "fx"; | |||
return this.queue(type, function(next, hooks) { | |||
var timeout = window.setTimeout(next, time); | |||
hooks.stop = function() { | |||
window.clearTimeout(timeout); | |||
} | |||
; | |||
}); | |||
} | |||
; | |||
(function() { | |||
var input = document.createElement("input") | |||
, select = document.createElement("select") | |||
, opt = select.appendChild(document.createElement("option")); | |||
input.type = "checkbox"; | |||
support.checkOn = input.value !== ""; | |||
support.optSelected = opt.selected; | |||
input = document.createElement("input"); | |||
input.value = "t"; | |||
input.type = "radio"; | |||
support.radioValue = input.value === "t"; | |||
} | |||
)(); | |||
var boolHook, attrHandle = jQuery.expr.attrHandle; | |||
jQuery.fn.extend({ | |||
attr: function(name, value) { | |||
return access(this, jQuery.attr, name, value, arguments.length > 1); | |||
}, | |||
removeAttr: function(name) { | |||
return this.each(function() { | |||
jQuery.removeAttr(this, name); | |||
}); | |||
} | |||
}); | |||
jQuery.extend({ | |||
attr: function(elem, name, value) { | |||
var ret, hooks, nType = elem.nodeType; | |||
if (nType === 3 || nType === 8 || nType === 2) { | |||
return; | |||
} | |||
if (typeof elem.getAttribute === "undefined") { | |||
return jQuery.prop(elem, name, value); | |||
} | |||
if (nType !== 1 || !jQuery.isXMLDoc(elem)) { | |||
hooks = jQuery.attrHooks[name.toLowerCase()] || (jQuery.expr.match.bool.test(name) ? boolHook : undefined); | |||
} | |||
if (value !== undefined) { | |||
if (value === null) { | |||
jQuery.removeAttr(elem, name); | |||
return; | |||
} | |||
if (hooks && "set"in hooks && (ret = hooks.set(elem, value, name)) !== undefined) { | |||
return ret; | |||
} | |||
elem.setAttribute(name, value + ""); | |||
return value; | |||
} | |||
if (hooks && "get"in hooks && (ret = hooks.get(elem, name)) !== null) { | |||
return ret; | |||
} | |||
ret = jQuery.find.attr(elem, name); | |||
return ret == null ? undefined : ret; | |||
}, | |||
attrHooks: { | |||
type: { | |||
set: function(elem, value) { | |||
if (!support.radioValue && value === "radio" && nodeName(elem, "input")) { | |||
var val = elem.value; | |||
elem.setAttribute("type", value); | |||
if (val) { | |||
elem.value = val; | |||
} | |||
return value; | |||
} | |||
} | |||
} | |||
}, | |||
removeAttr: function(elem, value) { | |||
var name, i = 0, attrNames = value && value.match(rnothtmlwhite); | |||
if (attrNames && elem.nodeType === 1) { | |||
while ((name = attrNames[i++])) { | |||
elem.removeAttribute(name); | |||
} | |||
} | |||
} | |||
}); | |||
boolHook = { | |||
set: function(elem, value, name) { | |||
if (value === false) { | |||
jQuery.removeAttr(elem, name); | |||
} else { | |||
elem.setAttribute(name, name); | |||
} | |||
return name; | |||
} | |||
}; | |||
jQuery.each(jQuery.expr.match.bool.source.match(/\w+/g), function(_i, name) { | |||
var getter = attrHandle[name] || jQuery.find.attr; | |||
attrHandle[name] = function(elem, name, isXML) { | |||
var ret, handle, lowercaseName = name.toLowerCase(); | |||
if (!isXML) { | |||
handle = attrHandle[lowercaseName]; | |||
attrHandle[lowercaseName] = ret; | |||
ret = getter(elem, name, isXML) != null ? lowercaseName : null; | |||
attrHandle[lowercaseName] = handle; | |||
} | |||
return ret; | |||
} | |||
; | |||
}); | |||
var rfocusable = /^(?:input|select|textarea|button)$/i | |||
, rclickable = /^(?:a|area)$/i; | |||
jQuery.fn.extend({ | |||
prop: function(name, value) { | |||
return access(this, jQuery.prop, name, value, arguments.length > 1); | |||
}, | |||
removeProp: function(name) { | |||
return this.each(function() { | |||
delete this[jQuery.propFix[name] || name]; | |||
}); | |||
} | |||
}); | |||
jQuery.extend({ | |||
prop: function(elem, name, value) { | |||
var ret, hooks, nType = elem.nodeType; | |||
if (nType === 3 || nType === 8 || nType === 2) { | |||
return; | |||
} | |||
if (nType !== 1 || !jQuery.isXMLDoc(elem)) { | |||
name = jQuery.propFix[name] || name; | |||
hooks = jQuery.propHooks[name]; | |||
} | |||
if (value !== undefined) { | |||
if (hooks && "set"in hooks && (ret = hooks.set(elem, value, name)) !== undefined) { | |||
return ret; | |||
} | |||
return (elem[name] = value); | |||
} | |||
if (hooks && "get"in hooks && (ret = hooks.get(elem, name)) !== null) { | |||
return ret; | |||
} | |||
return elem[name]; | |||
}, | |||
propHooks: { | |||
tabIndex: { | |||
get: function(elem) { | |||
var tabindex = jQuery.find.attr(elem, "tabindex"); | |||
if (tabindex) { | |||
return parseInt(tabindex, 10); | |||
} | |||
if (rfocusable.test(elem.nodeName) || rclickable.test(elem.nodeName) && elem.href) { | |||
return 0; | |||
} | |||
return -1; | |||
} | |||
} | |||
}, | |||
propFix: { | |||
"for": "htmlFor", | |||
"class": "className" | |||
} | |||
}); | |||
if (!support.optSelected) { | |||
jQuery.propHooks.selected = { | |||
get: function(elem) { | |||
var parent = elem.parentNode; | |||
if (parent && parent.parentNode) { | |||
parent.parentNode.selectedIndex; | |||
} | |||
return null; | |||
}, | |||
set: function(elem) { | |||
var parent = elem.parentNode; | |||
if (parent) { | |||
parent.selectedIndex; | |||
if (parent.parentNode) { | |||
parent.parentNode.selectedIndex; | |||
} | |||
} | |||
} | |||
}; | |||
} | |||
jQuery.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function() { | |||
jQuery.propFix[this.toLowerCase()] = this; | |||
}); | |||
function stripAndCollapse(value) { | |||
var tokens = value.match(rnothtmlwhite) || []; | |||
return tokens.join(" "); | |||
} | |||
function getClass(elem) { | |||
return elem.getAttribute && elem.getAttribute("class") || ""; | |||
} | |||
function classesToArray(value) { | |||
if (Array.isArray(value)) { | |||
return value; | |||
} | |||
if (typeof value === "string") { | |||
return value.match(rnothtmlwhite) || []; | |||
} | |||
return []; | |||
} | |||
jQuery.fn.extend({ | |||
addClass: function(value) { | |||
var classNames, cur, curValue, className, i, finalValue; | |||
if (isFunction(value)) { | |||
return this.each(function(j) { | |||
jQuery(this).addClass(value.call(this, j, getClass(this))); | |||
}); | |||
} | |||
classNames = classesToArray(value); | |||
if (classNames.length) { | |||
return this.each(function() { | |||
curValue = getClass(this); | |||
cur = this.nodeType === 1 && (" " + stripAndCollapse(curValue) + " "); | |||
if (cur) { | |||
for (i = 0; i < classNames.length; i++) { | |||
className = classNames[i]; | |||
if (cur.indexOf(" " + className + " ") < 0) { | |||
cur += className + " "; | |||
} | |||
} | |||
finalValue = stripAndCollapse(cur); | |||
if (curValue !== finalValue) { | |||
this.setAttribute("class", finalValue); | |||
} | |||
} | |||
}); | |||
} | |||
return this; | |||
}, | |||
removeClass: function(value) { | |||
var classNames, cur, curValue, className, i, finalValue; | |||
if (isFunction(value)) { | |||
return this.each(function(j) { | |||
jQuery(this).removeClass(value.call(this, j, getClass(this))); | |||
}); | |||
} | |||
if (!arguments.length) { | |||
return this.attr("class", ""); | |||
} | |||
classNames = classesToArray(value); | |||
if (classNames.length) { | |||
return this.each(function() { | |||
curValue = getClass(this); | |||
cur = this.nodeType === 1 && (" " + stripAndCollapse(curValue) + " "); | |||
if (cur) { | |||
for (i = 0; i < classNames.length; i++) { | |||
className = classNames[i]; | |||
while (cur.indexOf(" " + className + " ") > -1) { | |||
cur = cur.replace(" " + className + " ", " "); | |||
} | |||
} | |||
finalValue = stripAndCollapse(cur); | |||
if (curValue !== finalValue) { | |||
this.setAttribute("class", finalValue); | |||
} | |||
} | |||
}); | |||
} | |||
return this; | |||
}, | |||
toggleClass: function(value, stateVal) { | |||
var classNames, className, i, self, type = typeof value, isValidValue = type === "string" || Array.isArray(value); | |||
if (isFunction(value)) { | |||
return this.each(function(i) { | |||
jQuery(this).toggleClass(value.call(this, i, getClass(this), stateVal), stateVal); | |||
}); | |||
} | |||
if (typeof stateVal === "boolean" && isValidValue) { | |||
return stateVal ? this.addClass(value) : this.removeClass(value); | |||
} | |||
classNames = classesToArray(value); | |||
return this.each(function() { | |||
if (isValidValue) { | |||
self = jQuery(this); | |||
for (i = 0; i < classNames.length; i++) { | |||
className = classNames[i]; | |||
if (self.hasClass(className)) { | |||
self.removeClass(className); | |||
} else { | |||
self.addClass(className); | |||
} | |||
} | |||
} else if (value === undefined || type === "boolean") { | |||
className = getClass(this); | |||
if (className) { | |||
dataPriv.set(this, "__className__", className); | |||
} | |||
if (this.setAttribute) { | |||
this.setAttribute("class", className || value === false ? "" : dataPriv.get(this, "__className__") || ""); | |||
} | |||
} | |||
}); | |||
}, | |||
hasClass: function(selector) { | |||
var className, elem, i = 0; | |||
className = " " + selector + " "; | |||
while ((elem = this[i++])) { | |||
if (elem.nodeType === 1 && (" " + stripAndCollapse(getClass(elem)) + " ").indexOf(className) > -1) { | |||
return true; | |||
} | |||
} | |||
return false; | |||
} | |||
}); | |||
var rreturn = /\r/g; | |||
jQuery.fn.extend({ | |||
val: function(value) { | |||
var hooks, ret, valueIsFunction, elem = this[0]; | |||
if (!arguments.length) { | |||
if (elem) { | |||
hooks = jQuery.valHooks[elem.type] || jQuery.valHooks[elem.nodeName.toLowerCase()]; | |||
if (hooks && "get"in hooks && (ret = hooks.get(elem, "value")) !== undefined) { | |||
return ret; | |||
} | |||
ret = elem.value; | |||
if (typeof ret === "string") { | |||
return ret.replace(rreturn, ""); | |||
} | |||
return ret == null ? "" : ret; | |||
} | |||
return; | |||
} | |||
valueIsFunction = isFunction(value); | |||
return this.each(function(i) { | |||
var val; | |||
if (this.nodeType !== 1) { | |||
return; | |||
} | |||
if (valueIsFunction) { | |||
val = value.call(this, i, jQuery(this).val()); | |||
} else { | |||
val = value; | |||
} | |||
if (val == null) { | |||
val = ""; | |||
} else if (typeof val === "number") { | |||
val += ""; | |||
} else if (Array.isArray(val)) { | |||
val = jQuery.map(val, function(value) { | |||
return value == null ? "" : value + ""; | |||
}); | |||
} | |||
hooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()]; | |||
if (!hooks || !("set"in hooks) || hooks.set(this, val, "value") === undefined) { | |||
this.value = val; | |||
} | |||
}); | |||
} | |||
}); | |||
jQuery.extend({ | |||
valHooks: { | |||
option: { | |||
get: function(elem) { | |||
var val = jQuery.find.attr(elem, "value"); | |||
return val != null ? val : stripAndCollapse(jQuery.text(elem)); | |||
} | |||
}, | |||
select: { | |||
get: function(elem) { | |||
var value, option, i, options = elem.options, index = elem.selectedIndex, one = elem.type === "select-one", values = one ? null : [], max = one ? index + 1 : options.length; | |||
if (index < 0) { | |||
i = max; | |||
} else { | |||
i = one ? index : 0; | |||
} | |||
for (; i < max; i++) { | |||
option = options[i]; | |||
if ((option.selected || i === index) && !option.disabled && (!option.parentNode.disabled || !nodeName(option.parentNode, "optgroup"))) { | |||
value = jQuery(option).val(); | |||
if (one) { | |||
return value; | |||
} | |||
values.push(value); | |||
} | |||
} | |||
return values; | |||
}, | |||
set: function(elem, value) { | |||
var optionSet, option, options = elem.options, values = jQuery.makeArray(value), i = options.length; | |||
while (i--) { | |||
option = options[i]; | |||
if (option.selected = jQuery.inArray(jQuery.valHooks.option.get(option), values) > -1) { | |||
optionSet = true; | |||
} | |||
} | |||
if (!optionSet) { | |||
elem.selectedIndex = -1; | |||
} | |||
return values; | |||
} | |||
} | |||
} | |||
}); | |||
jQuery.each(["radio", "checkbox"], function() { | |||
jQuery.valHooks[this] = { | |||
set: function(elem, value) { | |||
if (Array.isArray(value)) { | |||
return (elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1); | |||
} | |||
} | |||
}; | |||
if (!support.checkOn) { | |||
jQuery.valHooks[this].get = function(elem) { | |||
return elem.getAttribute("value") === null ? "on" : elem.value; | |||
} | |||
; | |||
} | |||
}); | |||
var location = window.location; | |||
var nonce = { | |||
guid: Date.now() | |||
}; | |||
var rquery = (/\?/); | |||
jQuery.parseXML = function(data) { | |||
var xml, parserErrorElem; | |||
if (!data || typeof data !== "string") { | |||
return null; | |||
} | |||
try { | |||
xml = (new window.DOMParser()).parseFromString(data, "text/xml"); | |||
} catch (e) {} | |||
parserErrorElem = xml && xml.getElementsByTagName("parsererror")[0]; | |||
if (!xml || parserErrorElem) { | |||
jQuery.error("Invalid XML: " + (parserErrorElem ? jQuery.map(parserErrorElem.childNodes, function(el) { | |||
return el.textContent; | |||
}).join("\n") : data)); | |||
} | |||
return xml; | |||
} | |||
; | |||
var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/ | |||
, stopPropagationCallback = function(e) { | |||
e.stopPropagation(); | |||
}; | |||
jQuery.extend(jQuery.event, { | |||
trigger: function(event, data, elem, onlyHandlers) { | |||
var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, eventPath = [elem || document], type = hasOwn.call(event, "type") ? event.type : event, namespaces = hasOwn.call(event, "namespace") ? event.namespace.split(".") : []; | |||
cur = lastElement = tmp = elem = elem || document; | |||
if (elem.nodeType === 3 || elem.nodeType === 8) { | |||
return; | |||
} | |||
if (rfocusMorph.test(type + jQuery.event.triggered)) { | |||
return; | |||
} | |||
if (type.indexOf(".") > -1) { | |||
namespaces = type.split("."); | |||
type = namespaces.shift(); | |||
namespaces.sort(); | |||
} | |||
ontype = type.indexOf(":") < 0 && "on" + type; | |||
event = event[jQuery.expando] ? event : new jQuery.Event(type,typeof event === "object" && event); | |||
event.isTrigger = onlyHandlers ? 2 : 3; | |||
event.namespace = namespaces.join("."); | |||
event.rnamespace = event.namespace ? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)") : null; | |||
event.result = undefined; | |||
if (!event.target) { | |||
event.target = elem; | |||
} | |||
data = data == null ? [event] : jQuery.makeArray(data, [event]); | |||
special = jQuery.event.special[type] || {}; | |||
if (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) { | |||
return; | |||
} | |||
if (!onlyHandlers && !special.noBubble && !isWindow(elem)) { | |||
bubbleType = special.delegateType || type; | |||
if (!rfocusMorph.test(bubbleType + type)) { | |||
cur = cur.parentNode; | |||
} | |||
for (; cur; cur = cur.parentNode) { | |||
eventPath.push(cur); | |||
tmp = cur; | |||
} | |||
if (tmp === (elem.ownerDocument || document)) { | |||
eventPath.push(tmp.defaultView || tmp.parentWindow || window); | |||
} | |||
} | |||
i = 0; | |||
while ((cur = eventPath[i++]) && !event.isPropagationStopped()) { | |||
lastElement = cur; | |||
event.type = i > 1 ? bubbleType : special.bindType || type; | |||
handle = (dataPriv.get(cur, "events") || Object.create(null))[event.type] && dataPriv.get(cur, "handle"); | |||
if (handle) { | |||
handle.apply(cur, data); | |||
} | |||
handle = ontype && cur[ontype]; | |||
if (handle && handle.apply && acceptData(cur)) { | |||
event.result = handle.apply(cur, data); | |||
if (event.result === false) { | |||
event.preventDefault(); | |||
} | |||
} | |||
} | |||
event.type = type; | |||
if (!onlyHandlers && !event.isDefaultPrevented()) { | |||
if ((!special._default || special._default.apply(eventPath.pop(), data) === false) && acceptData(elem)) { | |||
if (ontype && isFunction(elem[type]) && !isWindow(elem)) { | |||
tmp = elem[ontype]; | |||
if (tmp) { | |||
elem[ontype] = null; | |||
} | |||
jQuery.event.triggered = type; | |||
if (event.isPropagationStopped()) { | |||
lastElement.addEventListener(type, stopPropagationCallback); | |||
} | |||
elem[type](); | |||
if (event.isPropagationStopped()) { | |||
lastElement.removeEventListener(type, stopPropagationCallback); | |||
} | |||
jQuery.event.triggered = undefined; | |||
if (tmp) { | |||
elem[ontype] = tmp; | |||
} | |||
} | |||
} | |||
} | |||
return event.result; | |||
}, | |||
simulate: function(type, elem, event) { | |||
var e = jQuery.extend(new jQuery.Event(), event, { | |||
type: type, | |||
isSimulated: true | |||
}); | |||
jQuery.event.trigger(e, null, elem); | |||
} | |||
}); | |||
jQuery.fn.extend({ | |||
trigger: function(type, data) { | |||
return this.each(function() { | |||
jQuery.event.trigger(type, data, this); | |||
}); | |||
}, | |||
triggerHandler: function(type, data) { | |||
var elem = this[0]; | |||
if (elem) { | |||
return jQuery.event.trigger(type, data, elem, true); | |||
} | |||
} | |||
}); | |||
var rbracket = /\[\]$/ | |||
, rCRLF = /\r?\n/g | |||
, rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i | |||
, rsubmittable = /^(?:input|select|textarea|keygen)/i; | |||
function buildParams(prefix, obj, traditional, add) { | |||
var name; | |||
if (Array.isArray(obj)) { | |||
jQuery.each(obj, function(i, v) { | |||
if (traditional || rbracket.test(prefix)) { | |||
add(prefix, v); | |||
} else { | |||
buildParams(prefix + "[" + (typeof v === "object" && v != null ? i : "") + "]", v, traditional, add); | |||
} | |||
}); | |||
} else if (!traditional && toType(obj) === "object") { | |||
for (name in obj) { | |||
buildParams(prefix + "[" + name + "]", obj[name], traditional, add); | |||
} | |||
} else { | |||
add(prefix, obj); | |||
} | |||
} | |||
jQuery.param = function(a, traditional) { | |||
var prefix, s = [], add = function(key, valueOrFunction) { | |||
var value = isFunction(valueOrFunction) ? valueOrFunction() : valueOrFunction; | |||
s[s.length] = encodeURIComponent(key) + "=" + encodeURIComponent(value == null ? "" : value); | |||
}; | |||
if (a == null) { | |||
return ""; | |||
} | |||
if (Array.isArray(a) || (a.jquery && !jQuery.isPlainObject(a))) { | |||
jQuery.each(a, function() { | |||
add(this.name, this.value); | |||
}); | |||
} else { | |||
for (prefix in a) { | |||
buildParams(prefix, a[prefix], traditional, add); | |||
} | |||
} | |||
return s.join("&"); | |||
} | |||
; | |||
jQuery.fn.extend({ | |||
serialize: function() { | |||
return jQuery.param(this.serializeArray()); | |||
}, | |||
serializeArray: function() { | |||
return this.map(function() { | |||
var elements = jQuery.prop(this, "elements"); | |||
return elements ? jQuery.makeArray(elements) : this; | |||
}).filter(function() { | |||
var type = this.type; | |||
return this.name && !jQuery(this).is(":disabled") && rsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) && (this.checked || !rcheckableType.test(type)); | |||
}).map(function(_i, elem) { | |||
var val = jQuery(this).val(); | |||
if (val == null) { | |||
return null; | |||
} | |||
if (Array.isArray(val)) { | |||
return jQuery.map(val, function(val) { | |||
return { | |||
name: elem.name, | |||
value: val.replace(rCRLF, "\r\n") | |||
}; | |||
}); | |||
} | |||
return { | |||
name: elem.name, | |||
value: val.replace(rCRLF, "\r\n") | |||
}; | |||
}).get(); | |||
} | |||
}); | |||
var r20 = /%20/g | |||
, rhash = /#.*$/ | |||
, rantiCache = /([?&])_=[^&]*/ | |||
, rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg | |||
, rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/ | |||
, rnoContent = /^(?:GET|HEAD)$/ | |||
, rprotocol = /^\/\// | |||
, prefilters = {} | |||
, transports = {} | |||
, allTypes = "*/".concat("*") | |||
, originAnchor = document.createElement("a"); | |||
originAnchor.href = location.href; | |||
function addToPrefiltersOrTransports(structure) { | |||
return function(dataTypeExpression, func) { | |||
if (typeof dataTypeExpression !== "string") { | |||
func = dataTypeExpression; | |||
dataTypeExpression = "*"; | |||
} | |||
var dataType, i = 0, dataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || []; | |||
if (isFunction(func)) { | |||
while ((dataType = dataTypes[i++])) { | |||
if (dataType[0] === "+") { | |||
dataType = dataType.slice(1) || "*"; | |||
(structure[dataType] = structure[dataType] || []).unshift(func); | |||
} else { | |||
(structure[dataType] = structure[dataType] || []).push(func); | |||
} | |||
} | |||
} | |||
} | |||
; | |||
} | |||
function inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) { | |||
var inspected = {} | |||
, seekingTransport = (structure === transports); | |||
function inspect(dataType) { | |||
var selected; | |||
inspected[dataType] = true; | |||
jQuery.each(structure[dataType] || [], function(_, prefilterOrFactory) { | |||
var dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR); | |||
if (typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[dataTypeOrTransport]) { | |||
options.dataTypes.unshift(dataTypeOrTransport); | |||
inspect(dataTypeOrTransport); | |||
return false; | |||
} else if (seekingTransport) { | |||
return !(selected = dataTypeOrTransport); | |||
} | |||
}); | |||
return selected; | |||
} | |||
return inspect(options.dataTypes[0]) || !inspected["*"] && inspect("*"); | |||
} | |||
function ajaxExtend(target, src) { | |||
var key, deep, flatOptions = jQuery.ajaxSettings.flatOptions || {}; | |||
for (key in src) { | |||
if (src[key] !== undefined) { | |||
(flatOptions[key] ? target : (deep || (deep = {})))[key] = src[key]; | |||
} | |||
} | |||
if (deep) { | |||
jQuery.extend(true, target, deep); | |||
} | |||
return target; | |||
} | |||
function ajaxHandleResponses(s, jqXHR, responses) { | |||
var ct, type, finalDataType, firstDataType, contents = s.contents, dataTypes = s.dataTypes; | |||
while (dataTypes[0] === "*") { | |||
dataTypes.shift(); | |||
if (ct === undefined) { | |||
ct = s.mimeType || jqXHR.getResponseHeader("Content-Type"); | |||
} | |||
} | |||
if (ct) { | |||
for (type in contents) { | |||
if (contents[type] && contents[type].test(ct)) { | |||
dataTypes.unshift(type); | |||
break; | |||
} | |||
} | |||
} | |||
if (dataTypes[0]in responses) { | |||
finalDataType = dataTypes[0]; | |||
} else { | |||
for (type in responses) { | |||
if (!dataTypes[0] || s.converters[type + " " + dataTypes[0]]) { | |||
finalDataType = type; | |||
break; | |||
} | |||
if (!firstDataType) { | |||
firstDataType = type; | |||
} | |||
} | |||
finalDataType = finalDataType || firstDataType; | |||
} | |||
if (finalDataType) { | |||
if (finalDataType !== dataTypes[0]) { | |||
dataTypes.unshift(finalDataType); | |||
} | |||
return responses[finalDataType]; | |||
} | |||
} | |||
function ajaxConvert(s, response, jqXHR, isSuccess) { | |||
var conv2, current, conv, tmp, prev, converters = {}, dataTypes = s.dataTypes.slice(); | |||
if (dataTypes[1]) { | |||
for (conv in s.converters) { | |||
converters[conv.toLowerCase()] = s.converters[conv]; | |||
} | |||
} | |||
current = dataTypes.shift(); | |||
while (current) { | |||
if (s.responseFields[current]) { | |||
jqXHR[s.responseFields[current]] = response; | |||
} | |||
if (!prev && isSuccess && s.dataFilter) { | |||
response = s.dataFilter(response, s.dataType); | |||
} | |||
prev = current; | |||
current = dataTypes.shift(); | |||
if (current) { | |||
if (current === "*") { | |||
current = prev; | |||
} else if (prev !== "*" && prev !== current) { | |||
conv = converters[prev + " " + current] || converters["* " + current]; | |||
if (!conv) { | |||
for (conv2 in converters) { | |||
tmp = conv2.split(" "); | |||
if (tmp[1] === current) { | |||
conv = converters[prev + " " + tmp[0]] || converters["* " + tmp[0]]; | |||
if (conv) { | |||
if (conv === true) { | |||
conv = converters[conv2]; | |||
} else if (converters[conv2] !== true) { | |||
current = tmp[0]; | |||
dataTypes.unshift(tmp[1]); | |||
} | |||
break; | |||
} | |||
} | |||
} | |||
} | |||
if (conv !== true) { | |||
if (conv && s.throws) { | |||
response = conv(response); | |||
} else { | |||
try { | |||
response = conv(response); | |||
} catch (e) { | |||
return { | |||
state: "parsererror", | |||
error: conv ? e : "No conversion from " + prev + " to " + current | |||
}; | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
return { | |||
state: "success", | |||
data: response | |||
}; | |||
} | |||
jQuery.extend({ | |||
active: 0, | |||
lastModified: {}, | |||
etag: {}, | |||
ajaxSettings: { | |||
url: location.href, | |||
type: "GET", | |||
isLocal: rlocalProtocol.test(location.protocol), | |||
global: true, | |||
processData: true, | |||
async: true, | |||
contentType: "application/x-www-form-urlencoded; charset=UTF-8", | |||
accepts: { | |||
"*": allTypes, | |||
text: "text/plain", | |||
html: "text/html", | |||
xml: "application/xml, text/xml", | |||
json: "application/json, text/javascript" | |||
}, | |||
contents: { | |||
xml: /\bxml\b/, | |||
html: /\bhtml/, | |||
json: /\bjson\b/ | |||
}, | |||
responseFields: { | |||
xml: "responseXML", | |||
text: "responseText", | |||
json: "responseJSON" | |||
}, | |||
converters: { | |||
"* text": String, | |||
"text html": true, | |||
"text json": JSON.parse, | |||
"text xml": jQuery.parseXML | |||
}, | |||
flatOptions: { | |||
url: true, | |||
context: true | |||
} | |||
}, | |||
ajaxSetup: function(target, settings) { | |||
return settings ? ajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) : ajaxExtend(jQuery.ajaxSettings, target); | |||
}, | |||
ajaxPrefilter: addToPrefiltersOrTransports(prefilters), | |||
ajaxTransport: addToPrefiltersOrTransports(transports), | |||
ajax: function(url, options) { | |||
if (typeof url === "object") { | |||
options = url; | |||
url = undefined; | |||
} | |||
options = options || {}; | |||
var transport, cacheURL, responseHeadersString, responseHeaders, timeoutTimer, urlAnchor, completed, fireGlobals, i, uncached, s = jQuery.ajaxSetup({}, options), callbackContext = s.context || s, globalEventContext = s.context && (callbackContext.nodeType || callbackContext.jquery) ? jQuery(callbackContext) : jQuery.event, deferred = jQuery.Deferred(), completeDeferred = jQuery.Callbacks("once memory"), statusCode = s.statusCode || {}, requestHeaders = {}, requestHeadersNames = {}, strAbort = "canceled", jqXHR = { | |||
readyState: 0, | |||
getResponseHeader: function(key) { | |||
var match; | |||
if (completed) { | |||
if (!responseHeaders) { | |||
responseHeaders = {}; | |||
while ((match = rheaders.exec(responseHeadersString))) { | |||
responseHeaders[match[1].toLowerCase() + " "] = (responseHeaders[match[1].toLowerCase() + " "] || []).concat(match[2]); | |||
} | |||
} | |||
match = responseHeaders[key.toLowerCase() + " "]; | |||
} | |||
return match == null ? null : match.join(", "); | |||
}, | |||
getAllResponseHeaders: function() { | |||
return completed ? responseHeadersString : null; | |||
}, | |||
setRequestHeader: function(name, value) { | |||
if (completed == null) { | |||
name = requestHeadersNames[name.toLowerCase()] = requestHeadersNames[name.toLowerCase()] || name; | |||
requestHeaders[name] = value; | |||
} | |||
return this; | |||
}, | |||
overrideMimeType: function(type) { | |||
if (completed == null) { | |||
s.mimeType = type; | |||
} | |||
return this; | |||
}, | |||
statusCode: function(map) { | |||
var code; | |||
if (map) { | |||
if (completed) { | |||
jqXHR.always(map[jqXHR.status]); | |||
} else { | |||
for (code in map) { | |||
statusCode[code] = [statusCode[code], map[code]]; | |||
} | |||
} | |||
} | |||
return this; | |||
}, | |||
abort: function(statusText) { | |||
var finalText = statusText || strAbort; | |||
if (transport) { | |||
transport.abort(finalText); | |||
} | |||
done(0, finalText); | |||
return this; | |||
} | |||
}; | |||
deferred.promise(jqXHR); | |||
s.url = ((url || s.url || location.href) + "").replace(rprotocol, location.protocol + "//"); | |||
s.type = options.method || options.type || s.method || s.type; | |||
s.dataTypes = (s.dataType || "*").toLowerCase().match(rnothtmlwhite) || [""]; | |||
if (s.crossDomain == null) { | |||
urlAnchor = document.createElement("a"); | |||
try { | |||
urlAnchor.href = s.url; | |||
urlAnchor.href = urlAnchor.href; | |||
s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== urlAnchor.protocol + "//" + urlAnchor.host; | |||
} catch (e) { | |||
s.crossDomain = true; | |||
} | |||
} | |||
if (s.data && s.processData && typeof s.data !== "string") { | |||
s.data = jQuery.param(s.data, s.traditional); | |||
} | |||
inspectPrefiltersOrTransports(prefilters, s, options, jqXHR); | |||
if (completed) { | |||
return jqXHR; | |||
} | |||
fireGlobals = jQuery.event && s.global; | |||
if (fireGlobals && jQuery.active++ === 0) { | |||
jQuery.event.trigger("ajaxStart"); | |||
} | |||
s.type = s.type.toUpperCase(); | |||
s.hasContent = !rnoContent.test(s.type); | |||
cacheURL = s.url.replace(rhash, ""); | |||
if (!s.hasContent) { | |||
uncached = s.url.slice(cacheURL.length); | |||
if (s.data && (s.processData || typeof s.data === "string")) { | |||
cacheURL += (rquery.test(cacheURL) ? "&" : "?") + s.data; | |||
delete s.data; | |||
} | |||
if (s.cache === false) { | |||
cacheURL = cacheURL.replace(rantiCache, "$1"); | |||
uncached = (rquery.test(cacheURL) ? "&" : "?") + "_=" + (nonce.guid++) + uncached; | |||
} | |||
s.url = cacheURL + uncached; | |||
} else if (s.data && s.processData && (s.contentType || "").indexOf("application/x-www-form-urlencoded") === 0) { | |||
s.data = s.data.replace(r20, "+"); | |||
} | |||
if (s.ifModified) { | |||
if (jQuery.lastModified[cacheURL]) { | |||
jqXHR.setRequestHeader("If-Modified-Since", jQuery.lastModified[cacheURL]); | |||
} | |||
if (jQuery.etag[cacheURL]) { | |||
jqXHR.setRequestHeader("If-None-Match", jQuery.etag[cacheURL]); | |||
} | |||
} | |||
if (s.data && s.hasContent && s.contentType !== false || options.contentType) { | |||
jqXHR.setRequestHeader("Content-Type", s.contentType); | |||
} | |||
jqXHR.setRequestHeader("Accept", s.dataTypes[0] && s.accepts[s.dataTypes[0]] ? s.accepts[s.dataTypes[0]] + (s.dataTypes[0] !== "*" ? ", " + allTypes + "; q=0.01" : "") : s.accepts["*"]); | |||
for (i in s.headers) { | |||
jqXHR.setRequestHeader(i, s.headers[i]); | |||
} | |||
if (s.beforeSend && (s.beforeSend.call(callbackContext, jqXHR, s) === false || completed)) { | |||
return jqXHR.abort(); | |||
} | |||
strAbort = "abort"; | |||
completeDeferred.add(s.complete); | |||
jqXHR.done(s.success); | |||
jqXHR.fail(s.error); | |||
transport = inspectPrefiltersOrTransports(transports, s, options, jqXHR); | |||
if (!transport) { | |||
done(-1, "No Transport"); | |||
} else { | |||
jqXHR.readyState = 1; | |||
if (fireGlobals) { | |||
globalEventContext.trigger("ajaxSend", [jqXHR, s]); | |||
} | |||
if (completed) { | |||
return jqXHR; | |||
} | |||
if (s.async && s.timeout > 0) { | |||
timeoutTimer = window.setTimeout(function() { | |||
jqXHR.abort("timeout"); | |||
}, s.timeout); | |||
} | |||
try { | |||
completed = false; | |||
transport.send(requestHeaders, done); | |||
} catch (e) { | |||
if (completed) { | |||
throw e; | |||
} | |||
done(-1, e); | |||
} | |||
} | |||
function done(status, nativeStatusText, responses, headers) { | |||
var isSuccess, success, error, response, modified, statusText = nativeStatusText; | |||
if (completed) { | |||
return; | |||
} | |||
completed = true; | |||
if (timeoutTimer) { | |||
window.clearTimeout(timeoutTimer); | |||
} | |||
transport = undefined; | |||
responseHeadersString = headers || ""; | |||
jqXHR.readyState = status > 0 ? 4 : 0; | |||
isSuccess = status >= 200 && status < 300 || status === 304; | |||
if (responses) { | |||
response = ajaxHandleResponses(s, jqXHR, responses); | |||
} | |||
if (!isSuccess && jQuery.inArray("script", s.dataTypes) > -1 && jQuery.inArray("json", s.dataTypes) < 0) { | |||
s.converters["text script"] = function() {} | |||
; | |||
} | |||
response = ajaxConvert(s, response, jqXHR, isSuccess); | |||
if (isSuccess) { | |||
if (s.ifModified) { | |||
modified = jqXHR.getResponseHeader("Last-Modified"); | |||
if (modified) { | |||
jQuery.lastModified[cacheURL] = modified; | |||
} | |||
modified = jqXHR.getResponseHeader("etag"); | |||
if (modified) { | |||
jQuery.etag[cacheURL] = modified; | |||
} | |||
} | |||
if (status === 204 || s.type === "HEAD") { | |||
statusText = "nocontent"; | |||
} else if (status === 304) { | |||
statusText = "notmodified"; | |||
} else { | |||
statusText = response.state; | |||
success = response.data; | |||
error = response.error; | |||
isSuccess = !error; | |||
} | |||
} else { | |||
error = statusText; | |||
if (status || !statusText) { | |||
statusText = "error"; | |||
if (status < 0) { | |||
status = 0; | |||
} | |||
} | |||
} | |||
jqXHR.status = status; | |||
jqXHR.statusText = (nativeStatusText || statusText) + ""; | |||
if (isSuccess) { | |||
deferred.resolveWith(callbackContext, [success, statusText, jqXHR]); | |||
} else { | |||
deferred.rejectWith(callbackContext, [jqXHR, statusText, error]); | |||
} | |||
jqXHR.statusCode(statusCode); | |||
statusCode = undefined; | |||
if (fireGlobals) { | |||
globalEventContext.trigger(isSuccess ? "ajaxSuccess" : "ajaxError", [jqXHR, s, isSuccess ? success : error]); | |||
} | |||
completeDeferred.fireWith(callbackContext, [jqXHR, statusText]); | |||
if (fireGlobals) { | |||
globalEventContext.trigger("ajaxComplete", [jqXHR, s]); | |||
if (!(--jQuery.active)) { | |||
jQuery.event.trigger("ajaxStop"); | |||
} | |||
} | |||
} | |||
return jqXHR; | |||
}, | |||
getJSON: function(url, data, callback) { | |||
return jQuery.get(url, data, callback, "json"); | |||
}, | |||
getScript: function(url, callback) { | |||
return jQuery.get(url, undefined, callback, "script"); | |||
} | |||
}); | |||
jQuery.each(["get", "post"], function(_i, method) { | |||
jQuery[method] = function(url, data, callback, type) { | |||
if (isFunction(data)) { | |||
type = type || callback; | |||
callback = data; | |||
data = undefined; | |||
} | |||
return jQuery.ajax(jQuery.extend({ | |||
url: url, | |||
type: method, | |||
dataType: type, | |||
data: data, | |||
success: callback | |||
}, jQuery.isPlainObject(url) && url)); | |||
} | |||
; | |||
}); | |||
jQuery.ajaxPrefilter(function(s) { | |||
var i; | |||
for (i in s.headers) { | |||
if (i.toLowerCase() === "content-type") { | |||
s.contentType = s.headers[i] || ""; | |||
} | |||
} | |||
}); | |||
jQuery._evalUrl = function(url, options, doc) { | |||
return jQuery.ajax({ | |||
url: url, | |||
type: "GET", | |||
dataType: "script", | |||
cache: true, | |||
async: false, | |||
global: false, | |||
converters: { | |||
"text script": function() {} | |||
}, | |||
dataFilter: function(response) { | |||
jQuery.globalEval(response, options, doc); | |||
} | |||
}); | |||
} | |||
; | |||
jQuery.fn.extend({ | |||
wrapAll: function(html) { | |||
var wrap; | |||
if (this[0]) { | |||
if (isFunction(html)) { | |||
html = html.call(this[0]); | |||
} | |||
wrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true); | |||
if (this[0].parentNode) { | |||
wrap.insertBefore(this[0]); | |||
} | |||
wrap.map(function() { | |||
var elem = this; | |||
while (elem.firstElementChild) { | |||
elem = elem.firstElementChild; | |||
} | |||
return elem; | |||
}).append(this); | |||
} | |||
return this; | |||
}, | |||
wrapInner: function(html) { | |||
if (isFunction(html)) { | |||
return this.each(function(i) { | |||
jQuery(this).wrapInner(html.call(this, i)); | |||
}); | |||
} | |||
return this.each(function() { | |||
var self = jQuery(this) | |||
, contents = self.contents(); | |||
if (contents.length) { | |||
contents.wrapAll(html); | |||
} else { | |||
self.append(html); | |||
} | |||
}); | |||
}, | |||
wrap: function(html) { | |||
var htmlIsFunction = isFunction(html); | |||
return this.each(function(i) { | |||
jQuery(this).wrapAll(htmlIsFunction ? html.call(this, i) : html); | |||
}); | |||
}, | |||
unwrap: function(selector) { | |||
this.parent(selector).not("body").each(function() { | |||
jQuery(this).replaceWith(this.childNodes); | |||
}); | |||
return this; | |||
} | |||
}); | |||
jQuery.expr.pseudos.hidden = function(elem) { | |||
return !jQuery.expr.pseudos.visible(elem); | |||
} | |||
; | |||
jQuery.expr.pseudos.visible = function(elem) { | |||
return !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length); | |||
} | |||
; | |||
jQuery.ajaxSettings.xhr = function() { | |||
try { | |||
return new window.XMLHttpRequest(); | |||
} catch (e) {} | |||
} | |||
; | |||
var xhrSuccessStatus = { | |||
0: 200, | |||
1223: 204 | |||
} | |||
, xhrSupported = jQuery.ajaxSettings.xhr(); | |||
support.cors = !!xhrSupported && ("withCredentials"in xhrSupported); | |||
support.ajax = xhrSupported = !!xhrSupported; | |||
jQuery.ajaxTransport(function(options) { | |||
var callback, errorCallback; | |||
if (support.cors || xhrSupported && !options.crossDomain) { | |||
return { | |||
send: function(headers, complete) { | |||
var i, xhr = options.xhr(); | |||
xhr.open(options.type, options.url, options.async, options.username, options.password); | |||
if (options.xhrFields) { | |||
for (i in options.xhrFields) { | |||
xhr[i] = options.xhrFields[i]; | |||
} | |||
} | |||
if (options.mimeType && xhr.overrideMimeType) { | |||
xhr.overrideMimeType(options.mimeType); | |||
} | |||
if (!options.crossDomain && !headers["X-Requested-With"]) { | |||
headers["X-Requested-With"] = "XMLHttpRequest"; | |||
} | |||
for (i in headers) { | |||
xhr.setRequestHeader(i, headers[i]); | |||
} | |||
callback = function(type) { | |||
return function() { | |||
if (callback) { | |||
callback = errorCallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = xhr.onreadystatechange = null; | |||
if (type === "abort") { | |||
xhr.abort(); | |||
} else if (type === "error") { | |||
if (typeof xhr.status !== "number") { | |||
complete(0, "error"); | |||
} else { | |||
complete(xhr.status, xhr.statusText); | |||
} | |||
} else { | |||
complete(xhrSuccessStatus[xhr.status] || xhr.status, xhr.statusText, (xhr.responseType || "text") !== "text" || typeof xhr.responseText !== "string" ? { | |||
binary: xhr.response | |||
} : { | |||
text: xhr.responseText | |||
}, xhr.getAllResponseHeaders()); | |||
} | |||
} | |||
} | |||
; | |||
} | |||
; | |||
xhr.onload = callback(); | |||
errorCallback = xhr.onerror = xhr.ontimeout = callback("error"); | |||
if (xhr.onabort !== undefined) { | |||
xhr.onabort = errorCallback; | |||
} else { | |||
xhr.onreadystatechange = function() { | |||
if (xhr.readyState === 4) { | |||
window.setTimeout(function() { | |||
if (callback) { | |||
errorCallback(); | |||
} | |||
}); | |||
} | |||
} | |||
; | |||
} | |||
callback = callback("abort"); | |||
try { | |||
xhr.send(options.hasContent && options.data || null); | |||
} catch (e) { | |||
if (callback) { | |||
throw e; | |||
} | |||
} | |||
}, | |||
abort: function() { | |||
if (callback) { | |||
callback(); | |||
} | |||
} | |||
}; | |||
} | |||
}); | |||
jQuery.ajaxPrefilter(function(s) { | |||
if (s.crossDomain) { | |||
s.contents.script = false; | |||
} | |||
}); | |||
jQuery.ajaxSetup({ | |||
accepts: { | |||
script: "text/javascript, application/javascript, " + "application/ecmascript, application/x-ecmascript" | |||
}, | |||
contents: { | |||
script: /\b(?:java|ecma)script\b/ | |||
}, | |||
converters: { | |||
"text script": function(text) { | |||
jQuery.globalEval(text); | |||
return text; | |||
} | |||
} | |||
}); | |||
jQuery.ajaxPrefilter("script", function(s) { | |||
if (s.cache === undefined) { | |||
s.cache = false; | |||
} | |||
if (s.crossDomain) { | |||
s.type = "GET"; | |||
} | |||
}); | |||
jQuery.ajaxTransport("script", function(s) { | |||
if (s.crossDomain || s.scriptAttrs) { | |||
var script, callback; | |||
return { | |||
send: function(_, complete) { | |||
script = jQuery("<script>").attr(s.scriptAttrs || {}).prop({ | |||
charset: s.scriptCharset, | |||
src: s.url | |||
}).on("load error", callback = function(evt) { | |||
script.remove(); | |||
callback = null; | |||
if (evt) { | |||
complete(evt.type === "error" ? 404 : 200, evt.type); | |||
} | |||
} | |||
); | |||
document.head.appendChild(script[0]); | |||
}, | |||
abort: function() { | |||
if (callback) { | |||
callback(); | |||
} | |||
} | |||
}; | |||
} | |||
}); | |||
var oldCallbacks = [] | |||
, rjsonp = /(=)\?(?=&|$)|\?\?/; | |||
jQuery.ajaxSetup({ | |||
jsonp: "callback", | |||
jsonpCallback: function() { | |||
var callback = oldCallbacks.pop() || (jQuery.expando + "_" + (nonce.guid++)); | |||
this[callback] = true; | |||
return callback; | |||
} | |||
}); | |||
jQuery.ajaxPrefilter("json jsonp", function(s, originalSettings, jqXHR) { | |||
var callbackName, overwritten, responseContainer, jsonProp = s.jsonp !== false && (rjsonp.test(s.url) ? "url" : typeof s.data === "string" && (s.contentType || "").indexOf("application/x-www-form-urlencoded") === 0 && rjsonp.test(s.data) && "data"); | |||
if (jsonProp || s.dataTypes[0] === "jsonp") { | |||
callbackName = s.jsonpCallback = isFunction(s.jsonpCallback) ? s.jsonpCallback() : s.jsonpCallback; | |||
if (jsonProp) { | |||
s[jsonProp] = s[jsonProp].replace(rjsonp, "$1" + callbackName); | |||
} else if (s.jsonp !== false) { | |||
s.url += (rquery.test(s.url) ? "&" : "?") + s.jsonp + "=" + callbackName; | |||
} | |||
s.converters["script json"] = function() { | |||
if (!responseContainer) { | |||
jQuery.error(callbackName + " was not called"); | |||
} | |||
return responseContainer[0]; | |||
} | |||
; | |||
s.dataTypes[0] = "json"; | |||
overwritten = window[callbackName]; | |||
window[callbackName] = function() { | |||
responseContainer = arguments; | |||
} | |||
; | |||
jqXHR.always(function() { | |||
if (overwritten === undefined) { | |||
jQuery(window).removeProp(callbackName); | |||
} else { | |||
window[callbackName] = overwritten; | |||
} | |||
if (s[callbackName]) { | |||
s.jsonpCallback = originalSettings.jsonpCallback; | |||
oldCallbacks.push(callbackName); | |||
} | |||
if (responseContainer && isFunction(overwritten)) { | |||
overwritten(responseContainer[0]); | |||
} | |||
responseContainer = overwritten = undefined; | |||
}); | |||
return "script"; | |||
} | |||
}); | |||
support.createHTMLDocument = (function() { | |||
var body = document.implementation.createHTMLDocument("").body; | |||
body.innerHTML = "<form></form><form></form>"; | |||
return body.childNodes.length === 2; | |||
} | |||
)(); | |||
jQuery.parseHTML = function(data, context, keepScripts) { | |||
if (typeof data !== "string") { | |||
return []; | |||
} | |||
if (typeof context === "boolean") { | |||
keepScripts = context; | |||
context = false; | |||
} | |||
var base, parsed, scripts; | |||
if (!context) { | |||
if (support.createHTMLDocument) { | |||
context = document.implementation.createHTMLDocument(""); | |||
base = context.createElement("base"); | |||
base.href = document.location.href; | |||
context.head.appendChild(base); | |||
} else { | |||
context = document; | |||
} | |||
} | |||
parsed = rsingleTag.exec(data); | |||
scripts = !keepScripts && []; | |||
if (parsed) { | |||
return [context.createElement(parsed[1])]; | |||
} | |||
parsed = buildFragment([data], context, scripts); | |||
if (scripts && scripts.length) { | |||
jQuery(scripts).remove(); | |||
} | |||
return jQuery.merge([], parsed.childNodes); | |||
} | |||
; | |||
jQuery.fn.load = function(url, params, callback) { | |||
var selector, type, response, self = this, off = url.indexOf(" "); | |||
if (off > -1) { | |||
selector = stripAndCollapse(url.slice(off)); | |||
url = url.slice(0, off); | |||
} | |||
if (isFunction(params)) { | |||
callback = params; | |||
params = undefined; | |||
} else if (params && typeof params === "object") { | |||
type = "POST"; | |||
} | |||
if (self.length > 0) { | |||
jQuery.ajax({ | |||
url: url, | |||
type: type || "GET", | |||
dataType: "html", | |||
data: params | |||
}).done(function(responseText) { | |||
response = arguments; | |||
self.html(selector ? jQuery("<div>").append(jQuery.parseHTML(responseText)).find(selector) : responseText); | |||
}).always(callback && function(jqXHR, status) { | |||
self.each(function() { | |||
callback.apply(this, response || [jqXHR.responseText, status, jqXHR]); | |||
}); | |||
} | |||
); | |||
} | |||
return this; | |||
} | |||
; | |||
jQuery.expr.pseudos.animated = function(elem) { | |||
return jQuery.grep(jQuery.timers, function(fn) { | |||
return elem === fn.elem; | |||
}).length; | |||
} | |||
; | |||
jQuery.offset = { | |||
setOffset: function(elem, options, i) { | |||
var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, position = jQuery.css(elem, "position"), curElem = jQuery(elem), props = {}; | |||
if (position === "static") { | |||
elem.style.position = "relative"; | |||
} | |||
curOffset = curElem.offset(); | |||
curCSSTop = jQuery.css(elem, "top"); | |||
curCSSLeft = jQuery.css(elem, "left"); | |||
calculatePosition = (position === "absolute" || position === "fixed") && (curCSSTop + curCSSLeft).indexOf("auto") > -1; | |||
if (calculatePosition) { | |||
curPosition = curElem.position(); | |||
curTop = curPosition.top; | |||
curLeft = curPosition.left; | |||
} else { | |||
curTop = parseFloat(curCSSTop) || 0; | |||
curLeft = parseFloat(curCSSLeft) || 0; | |||
} | |||
if (isFunction(options)) { | |||
options = options.call(elem, i, jQuery.extend({}, curOffset)); | |||
} | |||
if (options.top != null) { | |||
props.top = (options.top - curOffset.top) + curTop; | |||
} | |||
if (options.left != null) { | |||
props.left = (options.left - curOffset.left) + curLeft; | |||
} | |||
if ("using"in options) { | |||
options.using.call(elem, props); | |||
} else { | |||
curElem.css(props); | |||
} | |||
} | |||
}; | |||
jQuery.fn.extend({ | |||
offset: function(options) { | |||
if (arguments.length) { | |||
return options === undefined ? this : this.each(function(i) { | |||
jQuery.offset.setOffset(this, options, i); | |||
}); | |||
} | |||
var rect, win, elem = this[0]; | |||
if (!elem) { | |||
return; | |||
} | |||
if (!elem.getClientRects().length) { | |||
return { | |||
top: 0, | |||
left: 0 | |||
}; | |||
} | |||
rect = elem.getBoundingClientRect(); | |||
win = elem.ownerDocument.defaultView; | |||
return { | |||
top: rect.top + win.pageYOffset, | |||
left: rect.left + win.pageXOffset | |||
}; | |||
}, | |||
position: function() { | |||
if (!this[0]) { | |||
return; | |||
} | |||
var offsetParent, offset, doc, elem = this[0], parentOffset = { | |||
top: 0, | |||
left: 0 | |||
}; | |||
if (jQuery.css(elem, "position") === "fixed") { | |||
offset = elem.getBoundingClientRect(); | |||
} else { | |||
offset = this.offset(); | |||
doc = elem.ownerDocument; | |||
offsetParent = elem.offsetParent || doc.documentElement; | |||
while (offsetParent && (offsetParent === doc.body || offsetParent === doc.documentElement) && jQuery.css(offsetParent, "position") === "static") { | |||
offsetParent = offsetParent.parentNode; | |||
} | |||
if (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) { | |||
parentOffset = jQuery(offsetParent).offset(); | |||
parentOffset.top += jQuery.css(offsetParent, "borderTopWidth", true); | |||
parentOffset.left += jQuery.css(offsetParent, "borderLeftWidth", true); | |||
} | |||
} | |||
return { | |||
top: offset.top - parentOffset.top - jQuery.css(elem, "marginTop", true), | |||
left: offset.left - parentOffset.left - jQuery.css(elem, "marginLeft", true) | |||
}; | |||
}, | |||
offsetParent: function() { | |||
return this.map(function() { | |||
var offsetParent = this.offsetParent; | |||
while (offsetParent && jQuery.css(offsetParent, "position") === "static") { | |||
offsetParent = offsetParent.offsetParent; | |||
} | |||
return offsetParent || documentElement; | |||
}); | |||
} | |||
}); | |||
jQuery.each({ | |||
scrollLeft: "pageXOffset", | |||
scrollTop: "pageYOffset" | |||
}, function(method, prop) { | |||
var top = "pageYOffset" === prop; | |||
jQuery.fn[method] = function(val) { | |||
return access(this, function(elem, method, val) { | |||
var win; | |||
if (isWindow(elem)) { | |||
win = elem; | |||
} else if (elem.nodeType === 9) { | |||
win = elem.defaultView; | |||
} | |||
if (val === undefined) { | |||
return win ? win[prop] : elem[method]; | |||
} | |||
if (win) { | |||
win.scrollTo(!top ? val : win.pageXOffset, top ? val : win.pageYOffset); | |||
} else { | |||
elem[method] = val; | |||
} | |||
}, method, val, arguments.length); | |||
} | |||
; | |||
}); | |||
jQuery.each(["top", "left"], function(_i, prop) { | |||
jQuery.cssHooks[prop] = addGetHookIf(support.pixelPosition, function(elem, computed) { | |||
if (computed) { | |||
computed = curCSS(elem, prop); | |||
return rnumnonpx.test(computed) ? jQuery(elem).position()[prop] + "px" : computed; | |||
} | |||
}); | |||
}); | |||
jQuery.each({ | |||
Height: "height", | |||
Width: "width" | |||
}, function(name, type) { | |||
jQuery.each({ | |||
padding: "inner" + name, | |||
content: type, | |||
"": "outer" + name | |||
}, function(defaultExtra, funcName) { | |||
jQuery.fn[funcName] = function(margin, value) { | |||
var chainable = arguments.length && (defaultExtra || typeof margin !== "boolean") | |||
, extra = defaultExtra || (margin === true || value === true ? "margin" : "border"); | |||
return access(this, function(elem, type, value) { | |||
var doc; | |||
if (isWindow(elem)) { | |||
return funcName.indexOf("outer") === 0 ? elem["inner" + name] : elem.document.documentElement["client" + name]; | |||
} | |||
if (elem.nodeType === 9) { | |||
doc = elem.documentElement; | |||
return Math.max(elem.body["scroll" + name], doc["scroll" + name], elem.body["offset" + name], doc["offset" + name], doc["client" + name]); | |||
} | |||
return value === undefined ? jQuery.css(elem, type, extra) : jQuery.style(elem, type, value, extra); | |||
}, type, chainable ? margin : undefined, chainable); | |||
} | |||
; | |||
}); | |||
}); | |||
jQuery.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function(_i, type) { | |||
jQuery.fn[type] = function(fn) { | |||
return this.on(type, fn); | |||
} | |||
; | |||
}); | |||
jQuery.fn.extend({ | |||
bind: function(types, data, fn) { | |||
return this.on(types, null, data, fn); | |||
}, | |||
unbind: function(types, fn) { | |||
return this.off(types, null, fn); | |||
}, | |||
delegate: function(selector, types, data, fn) { | |||
return this.on(types, selector, data, fn); | |||
}, | |||
undelegate: function(selector, types, fn) { | |||
return arguments.length === 1 ? this.off(selector, "**") : this.off(types, selector || "**", fn); | |||
}, | |||
hover: function(fnOver, fnOut) { | |||
return this.on("mouseenter", fnOver).on("mouseleave", fnOut || fnOver); | |||
} | |||
}); | |||
jQuery.each(("blur focus focusin focusout resize scroll click dblclick " + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + "change select submit keydown keypress keyup contextmenu").split(" "), function(_i, name) { | |||
jQuery.fn[name] = function(data, fn) { | |||
return arguments.length > 0 ? this.on(name, null, data, fn) : this.trigger(name); | |||
} | |||
; | |||
}); | |||
var rtrim = /^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g; | |||
jQuery.proxy = function(fn, context) { | |||
var tmp, args, proxy; | |||
if (typeof context === "string") { | |||
tmp = fn[context]; | |||
context = fn; | |||
fn = tmp; | |||
} | |||
if (!isFunction(fn)) { | |||
return undefined; | |||
} | |||
args = slice.call(arguments, 2); | |||
proxy = function() { | |||
return fn.apply(context || this, args.concat(slice.call(arguments))); | |||
} | |||
; | |||
proxy.guid = fn.guid = fn.guid || jQuery.guid++; | |||
return proxy; | |||
} | |||
; | |||
jQuery.holdReady = function(hold) { | |||
if (hold) { | |||
jQuery.readyWait++; | |||
} else { | |||
jQuery.ready(true); | |||
} | |||
} | |||
; | |||
jQuery.isArray = Array.isArray; | |||
jQuery.parseJSON = JSON.parse; | |||
jQuery.nodeName = nodeName; | |||
jQuery.isFunction = isFunction; | |||
jQuery.isWindow = isWindow; | |||
jQuery.camelCase = camelCase; | |||
jQuery.type = toType; | |||
jQuery.now = Date.now; | |||
jQuery.isNumeric = function(obj) { | |||
var type = jQuery.type(obj); | |||
return (type === "number" || type === "string") && !isNaN(obj - parseFloat(obj)); | |||
} | |||
; | |||
jQuery.trim = function(text) { | |||
return text == null ? "" : (text + "").replace(rtrim, "$1"); | |||
} | |||
; | |||
if (typeof define === "function" && define.amd) { | |||
define("jquery", [], function() { | |||
return jQuery; | |||
}); | |||
} | |||
var _jQuery = window.jQuery | |||
, _$ = window.$; | |||
jQuery.noConflict = function(deep) { | |||
if (window.$ === jQuery) { | |||
window.$ = _$; | |||
} | |||
if (deep && window.jQuery === jQuery) { | |||
window.jQuery = _jQuery; | |||
} | |||
return jQuery; | |||
} | |||
; | |||
if (typeof noGlobal === "undefined") { | |||
window.jQuery = window.$ = jQuery; | |||
} | |||
return jQuery; | |||
}); | |||
}); | |||
function isCompatible(ua) { | function isCompatible(ua) { | ||
return !!((function() { | return !!((function() { | ||
2025년 1월 13일 (월) 16:45 판
mw.loader.implement("jquery@ef683", function($, jQuery, require, module) {
(function(global, factory) {
"use strict";
if (typeof module === "object" && typeof module.exports === "object") {
module.exports = global.document ? factory(global, true) : function(w) {
if (!w.document) {
throw new Error("jQuery requires a window with a document");
}
return factory(w);
}
;
} else {
factory(global);
}
}
)(typeof window !== "undefined" ? window : this, function(window, noGlobal) {
"use strict";
var arr = [];
var getProto = Object.getPrototypeOf;
var slice = arr.slice;
var flat = arr.flat ? function(array) {
return arr.flat.call(array);
}
: function(array) {
return arr.concat.apply([], array);
}
;
var push = arr.push;
var indexOf = arr.indexOf;
var class2type = {};
var toString = class2type.toString;
var hasOwn = class2type.hasOwnProperty;
var fnToString = hasOwn.toString;
var ObjectFunctionString = fnToString.call(Object);
var support = {};
var isFunction = function isFunction(obj) {
return typeof obj === "function" && typeof obj.nodeType !== "number" && typeof obj.item !== "function";
};
var isWindow = function isWindow(obj) {
return obj != null && obj === obj.window;
};
var document = window.document;
var preservedScriptAttributes = {
type: true,
src: true,
nonce: true,
noModule: true
};
function DOMEval(code, node, doc) {
doc = doc || document;
var i, val, script = doc.createElement("script");
script.text = code;
if (node) {
for (i in preservedScriptAttributes) {
val = node[i] || node.getAttribute && node.getAttribute(i);
if (val) {
script.setAttribute(i, val);
}
}
}
doc.head.appendChild(script).parentNode.removeChild(script);
}
function toType(obj) {
if (obj == null) {
return obj + "";
}
return typeof obj === "object" || typeof obj === "function" ? class2type[toString.call(obj)] || "object" : typeof obj;
}
var version = "3.7.1"
, rhtmlSuffix = /HTML$/i
, jQuery = function(selector, context) {
return new jQuery.fn.init(selector,context);
};
jQuery.fn = jQuery.prototype = {
jquery: version,
constructor: jQuery,
length: 0,
toArray: function() {
return slice.call(this);
},
get: function(num) {
if (num == null) {
return slice.call(this);
}
return num < 0 ? this[num + this.length] : this[num];
},
pushStack: function(elems) {
var ret = jQuery.merge(this.constructor(), elems);
ret.prevObject = this;
return ret;
},
each: function(callback) {
return jQuery.each(this, callback);
},
map: function(callback) {
return this.pushStack(jQuery.map(this, function(elem, i) {
return callback.call(elem, i, elem);
}));
},
slice: function() {
return this.pushStack(slice.apply(this, arguments));
},
first: function() {
return this.eq(0);
},
last: function() {
return this.eq(-1);
},
even: function() {
return this.pushStack(jQuery.grep(this, function(_elem, i) {
return (i + 1) % 2;
}));
},
odd: function() {
return this.pushStack(jQuery.grep(this, function(_elem, i) {
return i % 2;
}));
},
eq: function(i) {
var len = this.length
, j = +i + (i < 0 ? len : 0);
return this.pushStack(j >= 0 && j < len ? [this[j]] : []);
},
end: function() {
return this.prevObject || this.constructor();
},
push: push,
sort: arr.sort,
splice: arr.splice
};
jQuery.extend = jQuery.fn.extend = function() {
var options, name, src, copy, copyIsArray, clone, target = arguments[0] || {}, i = 1, length = arguments.length, deep = false;
if (typeof target === "boolean") {
deep = target;
target = arguments[i] || {};
i++;
}
if (typeof target !== "object" && !isFunction(target)) {
target = {};
}
if (i === length) {
target = this;
i--;
}
for (; i < length; i++) {
if ((options = arguments[i]) != null) {
for (name in options) {
copy = options[name];
if (name === "__proto__" || target === copy) {
continue;
}
if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = Array.isArray(copy)))) {
src = target[name];
if (copyIsArray && !Array.isArray(src)) {
clone = [];
} else if (!copyIsArray && !jQuery.isPlainObject(src)) {
clone = {};
} else {
clone = src;
}
copyIsArray = false;
target[name] = jQuery.extend(deep, clone, copy);
} else if (copy !== undefined) {
target[name] = copy;
}
}
}
}
return target;
}
;
jQuery.extend({
expando: "jQuery" + (version + Math.random()).replace(/\D/g, ""),
isReady: true,
error: function(msg) {
throw new Error(msg);
},
noop: function() {},
isPlainObject: function(obj) {
var proto, Ctor;
if (!obj || toString.call(obj) !== "[object Object]") {
return false;
}
proto = getProto(obj);
if (!proto) {
return true;
}
Ctor = hasOwn.call(proto, "constructor") && proto.constructor;
return typeof Ctor === "function" && fnToString.call(Ctor) === ObjectFunctionString;
},
isEmptyObject: function(obj) {
var name;
for (name in obj) {
return false;
}
return true;
},
globalEval: function(code, options, doc) {
DOMEval(code, {
nonce: options && options.nonce
}, doc);
},
each: function(obj, callback) {
var length, i = 0;
if (isArrayLike(obj)) {
length = obj.length;
for (; i < length; i++) {
if (callback.call(obj[i], i, obj[i]) === false) {
break;
}
}
} else {
for (i in obj) {
if (callback.call(obj[i], i, obj[i]) === false) {
break;
}
}
}
return obj;
},
text: function(elem) {
var node, ret = "", i = 0, nodeType = elem.nodeType;
if (!nodeType) {
while ((node = elem[i++])) {
ret += jQuery.text(node);
}
}
if (nodeType === 1 || nodeType === 11) {
return elem.textContent;
}
if (nodeType === 9) {
return elem.documentElement.textContent;
}
if (nodeType === 3 || nodeType === 4) {
return elem.nodeValue;
}
return ret;
},
makeArray: function(arr, results) {
var ret = results || [];
if (arr != null) {
if (isArrayLike(Object(arr))) {
jQuery.merge(ret, typeof arr === "string" ? [arr] : arr);
} else {
push.call(ret, arr);
}
}
return ret;
},
inArray: function(elem, arr, i) {
return arr == null ? -1 : indexOf.call(arr, elem, i);
},
isXMLDoc: function(elem) {
var namespace = elem && elem.namespaceURI
, docElem = elem && (elem.ownerDocument || elem).documentElement;
return !rhtmlSuffix.test(namespace || docElem && docElem.nodeName || "HTML");
},
merge: function(first, second) {
var len = +second.length
, j = 0
, i = first.length;
for (; j < len; j++) {
first[i++] = second[j];
}
first.length = i;
return first;
},
grep: function(elems, callback, invert) {
var callbackInverse, matches = [], i = 0, length = elems.length, callbackExpect = !invert;
for (; i < length; i++) {
callbackInverse = !callback(elems[i], i);
if (callbackInverse !== callbackExpect) {
matches.push(elems[i]);
}
}
return matches;
},
map: function(elems, callback, arg) {
var length, value, i = 0, ret = [];
if (isArrayLike(elems)) {
length = elems.length;
for (; i < length; i++) {
value = callback(elems[i], i, arg);
if (value != null) {
ret.push(value);
}
}
} else {
for (i in elems) {
value = callback(elems[i], i, arg);
if (value != null) {
ret.push(value);
}
}
}
return flat(ret);
},
guid: 1,
support: support
});
if (typeof Symbol === "function") {
jQuery.fn[Symbol.iterator] = arr[Symbol.iterator];
}
jQuery.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), function(_i, name) {
class2type["[object " + name + "]"] = name.toLowerCase();
});
function isArrayLike(obj) {
var length = !!obj && "length"in obj && obj.length
, type = toType(obj);
if (isFunction(obj) || isWindow(obj)) {
return false;
}
return type === "array" || length === 0 || typeof length === "number" && length > 0 && (length - 1)in obj;
}
function nodeName(elem, name) {
return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
}
var pop = arr.pop;
var sort = arr.sort;
var splice = arr.splice;
var whitespace = "[\\x20\\t\\r\\n\\f]";
var rtrimCSS = new RegExp("^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$","g");
jQuery.contains = function(a, b) {
var bup = b && b.parentNode;
return a === bup || !!(bup && bup.nodeType === 1 && (a.contains ? a.contains(bup) : a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16));
}
;
var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;
function fcssescape(ch, asCodePoint) {
if (asCodePoint) {
if (ch === "\0") {
return "\uFFFD";
}
return ch.slice(0, -1) + "\\" + ch.charCodeAt(ch.length - 1).toString(16) + " ";
}
return "\\" + ch;
}
jQuery.escapeSelector = function(sel) {
return (sel + "").replace(rcssescape, fcssescape);
}
;
var preferredDoc = document
, pushNative = push;
(function() {
var i, Expr, outermostContext, sortInput, hasDuplicate, push = pushNative, document, documentElement, documentIsHTML, rbuggyQSA, matches, expando = jQuery.expando, dirruns = 0, done = 0, classCache = createCache(), tokenCache = createCache(), compilerCache = createCache(), nonnativeSelectorCache = createCache(), sortOrder = function(a, b) {
if (a === b) {
hasDuplicate = true;
}
return 0;
}, booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|" + "loop|multiple|open|readonly|required|scoped", identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + "*([*^$|!~]?=)" + whitespace + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + "*\\]", pseudos = ":(" + identifier + ")(?:\\((" + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + ".*" + ")\\)|)", rwhitespace = new RegExp(whitespace + "+","g"), rcomma = new RegExp("^" + whitespace + "*," + whitespace + "*"), rleadingCombinator = new RegExp("^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*"), rdescend = new RegExp(whitespace + "|>"), rpseudo = new RegExp(pseudos), ridentifier = new RegExp("^" + identifier + "$"), matchExpr = {
ID: new RegExp("^#(" + identifier + ")"),
CLASS: new RegExp("^\\.(" + identifier + ")"),
TAG: new RegExp("^(" + identifier + "|[*])"),
ATTR: new RegExp("^" + attributes),
PSEUDO: new RegExp("^" + pseudos),
CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)","i"),
bool: new RegExp("^(?:" + booleans + ")$","i"),
needsContext: new RegExp("^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)","i")
}, rinputs = /^(?:input|select|textarea|button)$/i, rheader = /^h\d$/i, rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, rsibling = /[+~]/, runescape = new RegExp("\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])","g"), funescape = function(escape, nonHex) {
var high = "0x" + escape.slice(1) - 0x10000;
if (nonHex) {
return nonHex;
}
return high < 0 ? String.fromCharCode(high + 0x10000) : String.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);
}, unloadHandler = function() {
setDocument();
}, inDisabledFieldset = addCombinator(function(elem) {
return elem.disabled === true && nodeName(elem, "fieldset");
}, {
dir: "parentNode",
next: "legend"
});
function safeActiveElement() {
try {
return document.activeElement;
} catch (err) {}
}
try {
push.apply((arr = slice.call(preferredDoc.childNodes)), preferredDoc.childNodes);
arr[preferredDoc.childNodes.length].nodeType;
} catch (e) {
push = {
apply: function(target, els) {
pushNative.apply(target, slice.call(els));
},
call: function(target) {
pushNative.apply(target, slice.call(arguments, 1));
}
};
}
function find(selector, context, results, seed) {
var m, i, elem, nid, match, groups, newSelector, newContext = context && context.ownerDocument, nodeType = context ? context.nodeType : 9;
results = results || [];
if (typeof selector !== "string" || !selector || nodeType !== 1 && nodeType !== 9 && nodeType !== 11) {
return results;
}
if (!seed) {
setDocument(context);
context = context || document;
if (documentIsHTML) {
if (nodeType !== 11 && (match = rquickExpr.exec(selector))) {
if ((m = match[1])) {
if (nodeType === 9) {
if ((elem = context.getElementById(m))) {
if (elem.id === m) {
push.call(results, elem);
return results;
}
} else {
return results;
}
} else {
if (newContext && (elem = newContext.getElementById(m)) && find.contains(context, elem) && elem.id === m) {
push.call(results, elem);
return results;
}
}
} else if (match[2]) {
push.apply(results, context.getElementsByTagName(selector));
return results;
} else if ((m = match[3]) && context.getElementsByClassName) {
push.apply(results, context.getElementsByClassName(m));
return results;
}
}
if (!nonnativeSelectorCache[selector + " "] && (!rbuggyQSA || !rbuggyQSA.test(selector))) {
newSelector = selector;
newContext = context;
if (nodeType === 1 && (rdescend.test(selector) || rleadingCombinator.test(selector))) {
newContext = rsibling.test(selector) && testContext(context.parentNode) || context;
if (newContext != context || !support.scope) {
if ((nid = context.getAttribute("id"))) {
nid = jQuery.escapeSelector(nid);
} else {
context.setAttribute("id", (nid = expando));
}
}
groups = tokenize(selector);
i = groups.length;
while (i--) {
groups[i] = (nid ? "#" + nid : ":scope") + " " + toSelector(groups[i]);
}
newSelector = groups.join(",");
}
try {
push.apply(results, newContext.querySelectorAll(newSelector));
return results;
} catch (qsaError) {
nonnativeSelectorCache(selector, true);
} finally {
if (nid === expando) {
context.removeAttribute("id");
}
}
}
}
}
return select(selector.replace(rtrimCSS, "$1"), context, results, seed);
}
function createCache() {
var keys = [];
function cache(key, value) {
if (keys.push(key + " ") > Expr.cacheLength) {
delete cache[keys.shift()];
}
return (cache[key + " "] = value);
}
return cache;
}
function markFunction(fn) {
fn[expando] = true;
return fn;
}
function assert(fn) {
var el = document.createElement("fieldset");
try {
return !!fn(el);
} catch (e) {
return false;
} finally {
if (el.parentNode) {
el.parentNode.removeChild(el);
}
el = null;
}
}
function createInputPseudo(type) {
return function(elem) {
return nodeName(elem, "input") && elem.type === type;
}
;
}
function createButtonPseudo(type) {
return function(elem) {
return (nodeName(elem, "input") || nodeName(elem, "button")) && elem.type === type;
}
;
}
function createDisabledPseudo(disabled) {
return function(elem) {
if ("form"in elem) {
if (elem.parentNode && elem.disabled === false) {
if ("label"in elem) {
if ("label"in elem.parentNode) {
return elem.parentNode.disabled === disabled;
} else {
return elem.disabled === disabled;
}
}
return elem.isDisabled === disabled || elem.isDisabled !== !disabled && inDisabledFieldset(elem) === disabled;
}
return elem.disabled === disabled;
} else if ("label"in elem) {
return elem.disabled === disabled;
}
return false;
}
;
}
function createPositionalPseudo(fn) {
return markFunction(function(argument) {
argument = +argument;
return markFunction(function(seed, matches) {
var j, matchIndexes = fn([], seed.length, argument), i = matchIndexes.length;
while (i--) {
if (seed[(j = matchIndexes[i])]) {
seed[j] = !(matches[j] = seed[j]);
}
}
});
});
}
function testContext(context) {
return context && typeof context.getElementsByTagName !== "undefined" && context;
}
function setDocument(node) {
var subWindow, doc = node ? node.ownerDocument || node : preferredDoc;
if (doc == document || doc.nodeType !== 9 || !doc.documentElement) {
return document;
}
document = doc;
documentElement = document.documentElement;
documentIsHTML = !jQuery.isXMLDoc(document);
matches = documentElement.matches || documentElement.webkitMatchesSelector || documentElement.msMatchesSelector;
if (documentElement.msMatchesSelector && preferredDoc != document && (subWindow = document.defaultView) && subWindow.top !== subWindow) {
subWindow.addEventListener("unload", unloadHandler);
}
support.getById = assert(function(el) {
documentElement.appendChild(el).id = jQuery.expando;
return !document.getElementsByName || !document.getElementsByName(jQuery.expando).length;
});
support.disconnectedMatch = assert(function(el) {
return matches.call(el, "*");
});
support.scope = assert(function() {
return document.querySelectorAll(":scope");
});
support.cssHas = assert(function() {
try {
document.querySelector(":has(*,:jqfake)");
return false;
} catch (e) {
return true;
}
});
if (support.getById) {
Expr.filter.ID = function(id) {
var attrId = id.replace(runescape, funescape);
return function(elem) {
return elem.getAttribute("id") === attrId;
}
;
}
;
Expr.find.ID = function(id, context) {
if (typeof context.getElementById !== "undefined" && documentIsHTML) {
var elem = context.getElementById(id);
return elem ? [elem] : [];
}
}
;
} else {
Expr.filter.ID = function(id) {
var attrId = id.replace(runescape, funescape);
return function(elem) {
var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
return node && node.value === attrId;
}
;
}
;
Expr.find.ID = function(id, context) {
if (typeof context.getElementById !== "undefined" && documentIsHTML) {
var node, i, elems, elem = context.getElementById(id);
if (elem) {
node = elem.getAttributeNode("id");
if (node && node.value === id) {
return [elem];
}
elems = context.getElementsByName(id);
i = 0;
while ((elem = elems[i++])) {
node = elem.getAttributeNode("id");
if (node && node.value === id) {
return [elem];
}
}
}
return [];
}
}
;
}
Expr.find.TAG = function(tag, context) {
if (typeof context.getElementsByTagName !== "undefined") {
return context.getElementsByTagName(tag);
} else {
return context.querySelectorAll(tag);
}
}
;
Expr.find.CLASS = function(className, context) {
if (typeof context.getElementsByClassName !== "undefined" && documentIsHTML) {
return context.getElementsByClassName(className);
}
}
;
rbuggyQSA = [];
assert(function(el) {
var input;
documentElement.appendChild(el).innerHTML = "<a id='" + expando + "' href='' disabled='disabled'></a>" + "<select id='" + expando + "-\r\\' disabled='disabled'>" + "<option selected=''></option></select>";
if (!el.querySelectorAll("[selected]").length) {
rbuggyQSA.push("\\[" + whitespace + "*(?:value|" + booleans + ")");
}
if (!el.querySelectorAll("[id~=" + expando + "-]").length) {
rbuggyQSA.push("~=");
}
if (!el.querySelectorAll("a#" + expando + "+*").length) {
rbuggyQSA.push(".#.+[+~]");
}
if (!el.querySelectorAll(":checked").length) {
rbuggyQSA.push(":checked");
}
input = document.createElement("input");
input.setAttribute("type", "hidden");
el.appendChild(input).setAttribute("name", "D");
documentElement.appendChild(el).disabled = true;
if (el.querySelectorAll(":disabled").length !== 2) {
rbuggyQSA.push(":enabled", ":disabled");
}
input = document.createElement("input");
input.setAttribute("name", "");
el.appendChild(input);
if (!el.querySelectorAll("[name='']").length) {
rbuggyQSA.push("\\[" + whitespace + "*name" + whitespace + "*=" + whitespace + "*(?:''|\"\")");
}
});
if (!support.cssHas) {
rbuggyQSA.push(":has");
}
rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join("|"));
sortOrder = function(a, b) {
if (a === b) {
hasDuplicate = true;
return 0;
}
var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
if (compare) {
return compare;
}
compare = (a.ownerDocument || a) == (b.ownerDocument || b) ? a.compareDocumentPosition(b) : 1;
if (compare & 1 || (!support.sortDetached && b.compareDocumentPosition(a) === compare)) {
if (a === document || a.ownerDocument == preferredDoc && find.contains(preferredDoc, a)) {
return -1;
}
if (b === document || b.ownerDocument == preferredDoc && find.contains(preferredDoc, b)) {
return 1;
}
return sortInput ? (indexOf.call(sortInput, a) - indexOf.call(sortInput, b)) : 0;
}
return compare & 4 ? -1 : 1;
}
;
return document;
}
find.matches = function(expr, elements) {
return find(expr, null, null, elements);
}
;
find.matchesSelector = function(elem, expr) {
setDocument(elem);
if (documentIsHTML && !nonnativeSelectorCache[expr + " "] && (!rbuggyQSA || !rbuggyQSA.test(expr))) {
try {
var ret = matches.call(elem, expr);
if (ret || support.disconnectedMatch || elem.document && elem.document.nodeType !== 11) {
return ret;
}
} catch (e) {
nonnativeSelectorCache(expr, true);
}
}
return find(expr, document, null, [elem]).length > 0;
}
;
find.contains = function(context, elem) {
if ((context.ownerDocument || context) != document) {
setDocument(context);
}
return jQuery.contains(context, elem);
}
;
find.attr = function(elem, name) {
if ((elem.ownerDocument || elem) != document) {
setDocument(elem);
}
var fn = Expr.attrHandle[name.toLowerCase()]
, val = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ? fn(elem, name, !documentIsHTML) : undefined;
if (val !== undefined) {
return val;
}
return elem.getAttribute(name);
}
;
find.error = function(msg) {
throw new Error("Syntax error, unrecognized expression: " + msg);
}
;
jQuery.uniqueSort = function(results) {
var elem, duplicates = [], j = 0, i = 0;
hasDuplicate = !support.sortStable;
sortInput = !support.sortStable && slice.call(results, 0);
sort.call(results, sortOrder);
if (hasDuplicate) {
while ((elem = results[i++])) {
if (elem === results[i]) {
j = duplicates.push(i);
}
}
while (j--) {
splice.call(results, duplicates[j], 1);
}
}
sortInput = null;
return results;
}
;
jQuery.fn.uniqueSort = function() {
return this.pushStack(jQuery.uniqueSort(slice.apply(this)));
}
;
Expr = jQuery.expr = {
cacheLength: 50,
createPseudo: markFunction,
match: matchExpr,
attrHandle: {},
find: {},
relative: {
">": {
dir: "parentNode",
first: true
},
" ": {
dir: "parentNode"
},
"+": {
dir: "previousSibling",
first: true
},
"~": {
dir: "previousSibling"
}
},
preFilter: {
ATTR: function(match) {
match[1] = match[1].replace(runescape, funescape);
match[3] = (match[3] || match[4] || match[5] || "").replace(runescape, funescape);
if (match[2] === "~=") {
match[3] = " " + match[3] + " ";
}
return match.slice(0, 4);
},
CHILD: function(match) {
match[1] = match[1].toLowerCase();
if (match[1].slice(0, 3) === "nth") {
if (!match[3]) {
find.error(match[0]);
}
match[4] = +(match[4] ? match[5] + (match[6] || 1) : 2 * (match[3] === "even" || match[3] === "odd"));
match[5] = +((match[7] + match[8]) || match[3] === "odd");
} else if (match[3]) {
find.error(match[0]);
}
return match;
},
PSEUDO: function(match) {
var excess, unquoted = !match[6] && match[2];
if (matchExpr.CHILD.test(match[0])) {
return null;
}
if (match[3]) {
match[2] = match[4] || match[5] || "";
} else if (unquoted && rpseudo.test(unquoted) && (excess = tokenize(unquoted, true)) && (excess = unquoted.indexOf(")", unquoted.length - excess) - unquoted.length)) {
match[0] = match[0].slice(0, excess);
match[2] = unquoted.slice(0, excess);
}
return match.slice(0, 3);
}
},
filter: {
TAG: function(nodeNameSelector) {
var expectedNodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();
return nodeNameSelector === "*" ? function() {
return true;
}
: function(elem) {
return nodeName(elem, expectedNodeName);
}
;
},
CLASS: function(className) {
var pattern = classCache[className + " "];
return pattern || (pattern = new RegExp("(^|" + whitespace + ")" + className + "(" + whitespace + "|$)")) && classCache(className, function(elem) {
return pattern.test(typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "");
});
},
ATTR: function(name, operator, check) {
return function(elem) {
var result = find.attr(elem, name);
if (result == null) {
return operator === "!=";
}
if (!operator) {
return true;
}
result += "";
if (operator === "=") {
return result === check;
}
if (operator === "!=") {
return result !== check;
}
if (operator === "^=") {
return check && result.indexOf(check) === 0;
}
if (operator === "*=") {
return check && result.indexOf(check) > -1;
}
if (operator === "$=") {
return check && result.slice(-check.length) === check;
}
if (operator === "~=") {
return (" " + result.replace(rwhitespace, " ") + " ").indexOf(check) > -1;
}
if (operator === "|=") {
return result === check || result.slice(0, check.length + 1) === check + "-";
}
return false;
}
;
},
CHILD: function(type, what, _argument, first, last) {
var simple = type.slice(0, 3) !== "nth"
, forward = type.slice(-4) !== "last"
, ofType = what === "of-type";
return first === 1 && last === 0 ? function(elem) {
return !!elem.parentNode;
}
: function(elem, _context, xml) {
var cache, outerCache, node, nodeIndex, start, dir = simple !== forward ? "nextSibling" : "previousSibling", parent = elem.parentNode, name = ofType && elem.nodeName.toLowerCase(), useCache = !xml && !ofType, diff = false;
if (parent) {
if (simple) {
while (dir) {
node = elem;
while ((node = node[dir])) {
if (ofType ? nodeName(node, name) : node.nodeType === 1) {
return false;
}
}
start = dir = type === "only" && !start && "nextSibling";
}
return true;
}
start = [forward ? parent.firstChild : parent.lastChild];
if (forward && useCache) {
outerCache = parent[expando] || (parent[expando] = {});
cache = outerCache[type] || [];
nodeIndex = cache[0] === dirruns && cache[1];
diff = nodeIndex && cache[2];
node = nodeIndex && parent.childNodes[nodeIndex];
while ((node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop())) {
if (node.nodeType === 1 && ++diff && node === elem) {
outerCache[type] = [dirruns, nodeIndex, diff];
break;
}
}
} else {
if (useCache) {
outerCache = elem[expando] || (elem[expando] = {});
cache = outerCache[type] || [];
nodeIndex = cache[0] === dirruns && cache[1];
diff = nodeIndex;
}
if (diff === false) {
while ((node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop())) {
if ((ofType ? nodeName(node, name) : node.nodeType === 1) && ++diff) {
if (useCache) {
outerCache = node[expando] || (node[expando] = {});
outerCache[type] = [dirruns, diff];
}
if (node === elem) {
break;
}
}
}
}
}
diff -= last;
return diff === first || (diff % first === 0 && diff / first >= 0);
}
}
;
},
PSEUDO: function(pseudo, argument) {
var args, fn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] || find.error("unsupported pseudo: " + pseudo);
if (fn[expando]) {
return fn(argument);
}
if (fn.length > 1) {
args = [pseudo, pseudo, "", argument];
return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ? markFunction(function(seed, matches) {
var idx, matched = fn(seed, argument), i = matched.length;
while (i--) {
idx = indexOf.call(seed, matched[i]);
seed[idx] = !(matches[idx] = matched[i]);
}
}) : function(elem) {
return fn(elem, 0, args);
}
;
}
return fn;
}
},
pseudos: {
not: markFunction(function(selector) {
var input = []
, results = []
, matcher = compile(selector.replace(rtrimCSS, "$1"));
return matcher[expando] ? markFunction(function(seed, matches, _context, xml) {
var elem, unmatched = matcher(seed, null, xml, []), i = seed.length;
while (i--) {
if ((elem = unmatched[i])) {
seed[i] = !(matches[i] = elem);
}
}
}) : function(elem, _context, xml) {
input[0] = elem;
matcher(input, null, xml, results);
input[0] = null;
return !results.pop();
}
;
}),
has: markFunction(function(selector) {
return function(elem) {
return find(selector, elem).length > 0;
}
;
}),
contains: markFunction(function(text) {
text = text.replace(runescape, funescape);
return function(elem) {
return (elem.textContent || jQuery.text(elem)).indexOf(text) > -1;
}
;
}),
lang: markFunction(function(lang) {
if (!ridentifier.test(lang || "")) {
find.error("unsupported lang: " + lang);
}
lang = lang.replace(runescape, funescape).toLowerCase();
return function(elem) {
var elemLang;
do {
if ((elemLang = documentIsHTML ? elem.lang : elem.getAttribute("xml:lang") || elem.getAttribute("lang"))) {
elemLang = elemLang.toLowerCase();
return elemLang === lang || elemLang.indexOf(lang + "-") === 0;
}
} while ((elem = elem.parentNode) && elem.nodeType === 1);
return false;
}
;
}),
target: function(elem) {
var hash = window.location && window.location.hash;
return hash && hash.slice(1) === elem.id;
},
root: function(elem) {
return elem === documentElement;
},
focus: function(elem) {
return elem === safeActiveElement() && document.hasFocus() && !!(elem.type || elem.href || ~elem.tabIndex);
},
enabled: createDisabledPseudo(false),
disabled: createDisabledPseudo(true),
checked: function(elem) {
return (nodeName(elem, "input") && !!elem.checked) || (nodeName(elem, "option") && !!elem.selected);
},
selected: function(elem) {
if (elem.parentNode) {
elem.parentNode.selectedIndex;
}
return elem.selected === true;
},
empty: function(elem) {
for (elem = elem.firstChild; elem; elem = elem.nextSibling) {
if (elem.nodeType < 6) {
return false;
}
}
return true;
},
parent: function(elem) {
return !Expr.pseudos.empty(elem);
},
header: function(elem) {
return rheader.test(elem.nodeName);
},
input: function(elem) {
return rinputs.test(elem.nodeName);
},
button: function(elem) {
return nodeName(elem, "input") && elem.type === "button" || nodeName(elem, "button");
},
text: function(elem) {
var attr;
return nodeName(elem, "input") && elem.type === "text" && ((attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text");
},
first: createPositionalPseudo(function() {
return [0];
}),
last: createPositionalPseudo(function(_matchIndexes, length) {
return [length - 1];
}),
eq: createPositionalPseudo(function(_matchIndexes, length, argument) {
return [argument < 0 ? argument + length : argument];
}),
even: createPositionalPseudo(function(matchIndexes, length) {
var i = 0;
for (; i < length; i += 2) {
matchIndexes.push(i);
}
return matchIndexes;
}),
odd: createPositionalPseudo(function(matchIndexes, length) {
var i = 1;
for (; i < length; i += 2) {
matchIndexes.push(i);
}
return matchIndexes;
}),
lt: createPositionalPseudo(function(matchIndexes, length, argument) {
var i;
if (argument < 0) {
i = argument + length;
} else if (argument > length) {
i = length;
} else {
i = argument;
}
for (; --i >= 0; ) {
matchIndexes.push(i);
}
return matchIndexes;
}),
gt: createPositionalPseudo(function(matchIndexes, length, argument) {
var i = argument < 0 ? argument + length : argument;
for (; ++i < length; ) {
matchIndexes.push(i);
}
return matchIndexes;
})
}
};
Expr.pseudos.nth = Expr.pseudos.eq;
for (i in {
radio: true,
checkbox: true,
file: true,
password: true,
image: true
}) {
Expr.pseudos[i] = createInputPseudo(i);
}
for (i in {
submit: true,
reset: true
}) {
Expr.pseudos[i] = createButtonPseudo(i);
}
function setFilters() {}
setFilters.prototype = Expr.filters = Expr.pseudos;
Expr.setFilters = new setFilters();
function tokenize(selector, parseOnly) {
var matched, match, tokens, type, soFar, groups, preFilters, cached = tokenCache[selector + " "];
if (cached) {
return parseOnly ? 0 : cached.slice(0);
}
soFar = selector;
groups = [];
preFilters = Expr.preFilter;
while (soFar) {
if (!matched || (match = rcomma.exec(soFar))) {
if (match) {
soFar = soFar.slice(match[0].length) || soFar;
}
groups.push((tokens = []));
}
matched = false;
if ((match = rleadingCombinator.exec(soFar))) {
matched = match.shift();
tokens.push({
value: matched,
type: match[0].replace(rtrimCSS, " ")
});
soFar = soFar.slice(matched.length);
}
for (type in Expr.filter) {
if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] || (match = preFilters[type](match)))) {
matched = match.shift();
tokens.push({
value: matched,
type: type,
matches: match
});
soFar = soFar.slice(matched.length);
}
}
if (!matched) {
break;
}
}
if (parseOnly) {
return soFar.length;
}
return soFar ? find.error(selector) : tokenCache(selector, groups).slice(0);
}
function toSelector(tokens) {
var i = 0
, len = tokens.length
, selector = "";
for (; i < len; i++) {
selector += tokens[i].value;
}
return selector;
}
function addCombinator(matcher, combinator, base) {
var dir = combinator.dir
, skip = combinator.next
, key = skip || dir
, checkNonElements = base && key === "parentNode"
, doneName = done++;
return combinator.first ? function(elem, context, xml) {
while ((elem = elem[dir])) {
if (elem.nodeType === 1 || checkNonElements) {
return matcher(elem, context, xml);
}
}
return false;
}
: function(elem, context, xml) {
var oldCache, outerCache, newCache = [dirruns, doneName];
if (xml) {
while ((elem = elem[dir])) {
if (elem.nodeType === 1 || checkNonElements) {
if (matcher(elem, context, xml)) {
return true;
}
}
}
} else {
while ((elem = elem[dir])) {
if (elem.nodeType === 1 || checkNonElements) {
outerCache = elem[expando] || (elem[expando] = {});
if (skip && nodeName(elem, skip)) {
elem = elem[dir] || elem;
} else if ((oldCache = outerCache[key]) && oldCache[0] === dirruns && oldCache[1] === doneName) {
return (newCache[2] = oldCache[2]);
} else {
outerCache[key] = newCache;
if ((newCache[2] = matcher(elem, context, xml))) {
return true;
}
}
}
}
}
return false;
}
;
}
function elementMatcher(matchers) {
return matchers.length > 1 ? function(elem, context, xml) {
var i = matchers.length;
while (i--) {
if (!matchers[i](elem, context, xml)) {
return false;
}
}
return true;
}
: matchers[0];
}
function multipleContexts(selector, contexts, results) {
var i = 0
, len = contexts.length;
for (; i < len; i++) {
find(selector, contexts[i], results);
}
return results;
}
function condense(unmatched, map, filter, context, xml) {
var elem, newUnmatched = [], i = 0, len = unmatched.length, mapped = map != null;
for (; i < len; i++) {
if ((elem = unmatched[i])) {
if (!filter || filter(elem, context, xml)) {
newUnmatched.push(elem);
if (mapped) {
map.push(i);
}
}
}
}
return newUnmatched;
}
function setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {
if (postFilter && !postFilter[expando]) {
postFilter = setMatcher(postFilter);
}
if (postFinder && !postFinder[expando]) {
postFinder = setMatcher(postFinder, postSelector);
}
return markFunction(function(seed, results, context, xml) {
var temp, i, elem, matcherOut, preMap = [], postMap = [], preexisting = results.length, elems = seed || multipleContexts(selector || "*", context.nodeType ? [context] : context, []), matcherIn = preFilter && (seed || !selector) ? condense(elems, preMap, preFilter, context, xml) : elems;
if (matcher) {
matcherOut = postFinder || (seed ? preFilter : preexisting || postFilter) ? [] : results;
matcher(matcherIn, matcherOut, context, xml);
} else {
matcherOut = matcherIn;
}
if (postFilter) {
temp = condense(matcherOut, postMap);
postFilter(temp, [], context, xml);
i = temp.length;
while (i--) {
if ((elem = temp[i])) {
matcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);
}
}
}
if (seed) {
if (postFinder || preFilter) {
if (postFinder) {
temp = [];
i = matcherOut.length;
while (i--) {
if ((elem = matcherOut[i])) {
temp.push((matcherIn[i] = elem));
}
}
postFinder(null, (matcherOut = []), temp, xml);
}
i = matcherOut.length;
while (i--) {
if ((elem = matcherOut[i]) && (temp = postFinder ? indexOf.call(seed, elem) : preMap[i]) > -1) {
seed[temp] = !(results[temp] = elem);
}
}
}
} else {
matcherOut = condense(matcherOut === results ? matcherOut.splice(preexisting, matcherOut.length) : matcherOut);
if (postFinder) {
postFinder(null, results, matcherOut, xml);
} else {
push.apply(results, matcherOut);
}
}
});
}
function matcherFromTokens(tokens) {
var checkContext, matcher, j, len = tokens.length, leadingRelative = Expr.relative[tokens[0].type], implicitRelative = leadingRelative || Expr.relative[" "], i = leadingRelative ? 1 : 0, matchContext = addCombinator(function(elem) {
return elem === checkContext;
}, implicitRelative, true), matchAnyContext = addCombinator(function(elem) {
return indexOf.call(checkContext, elem) > -1;
}, implicitRelative, true), matchers = [function(elem, context, xml) {
var ret = (!leadingRelative && (xml || context != outermostContext)) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml));
checkContext = null;
return ret;
}
];
for (; i < len; i++) {
if ((matcher = Expr.relative[tokens[i].type])) {
matchers = [addCombinator(elementMatcher(matchers), matcher)];
} else {
matcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches);
if (matcher[expando]) {
j = ++i;
for (; j < len; j++) {
if (Expr.relative[tokens[j].type]) {
break;
}
}
return setMatcher(i > 1 && elementMatcher(matchers), i > 1 && toSelector(tokens.slice(0, i - 1).concat({
value: tokens[i - 2].type === " " ? "*" : ""
})).replace(rtrimCSS, "$1"), matcher, i < j && matcherFromTokens(tokens.slice(i, j)), j < len && matcherFromTokens((tokens = tokens.slice(j))), j < len && toSelector(tokens));
}
matchers.push(matcher);
}
}
return elementMatcher(matchers);
}
function matcherFromGroupMatchers(elementMatchers, setMatchers) {
var bySet = setMatchers.length > 0
, byElement = elementMatchers.length > 0
, superMatcher = function(seed, context, xml, results, outermost) {
var elem, j, matcher, matchedCount = 0, i = "0", unmatched = seed && [], setMatched = [], contextBackup = outermostContext, elems = seed || byElement && Expr.find.TAG("*", outermost), dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), len = elems.length;
if (outermost) {
outermostContext = context == document || context || outermost;
}
for (; i !== len && (elem = elems[i]) != null; i++) {
if (byElement && elem) {
j = 0;
if (!context && elem.ownerDocument != document) {
setDocument(elem);
xml = !documentIsHTML;
}
while ((matcher = elementMatchers[j++])) {
if (matcher(elem, context || document, xml)) {
push.call(results, elem);
break;
}
}
if (outermost) {
dirruns = dirrunsUnique;
}
}
if (bySet) {
if ((elem = !matcher && elem)) {
matchedCount--;
}
if (seed) {
unmatched.push(elem);
}
}
}
matchedCount += i;
if (bySet && i !== matchedCount) {
j = 0;
while ((matcher = setMatchers[j++])) {
matcher(unmatched, setMatched, context, xml);
}
if (seed) {
if (matchedCount > 0) {
while (i--) {
if (!(unmatched[i] || setMatched[i])) {
setMatched[i] = pop.call(results);
}
}
}
setMatched = condense(setMatched);
}
push.apply(results, setMatched);
if (outermost && !seed && setMatched.length > 0 && (matchedCount + setMatchers.length) > 1) {
jQuery.uniqueSort(results);
}
}
if (outermost) {
dirruns = dirrunsUnique;
outermostContext = contextBackup;
}
return unmatched;
};
return bySet ? markFunction(superMatcher) : superMatcher;
}
function compile(selector, match) {
var i, setMatchers = [], elementMatchers = [], cached = compilerCache[selector + " "];
if (!cached) {
if (!match) {
match = tokenize(selector);
}
i = match.length;
while (i--) {
cached = matcherFromTokens(match[i]);
if (cached[expando]) {
setMatchers.push(cached);
} else {
elementMatchers.push(cached);
}
}
cached = compilerCache(selector, matcherFromGroupMatchers(elementMatchers, setMatchers));
cached.selector = selector;
}
return cached;
}
function select(selector, context, results, seed) {
var i, tokens, token, type, find, compiled = typeof selector === "function" && selector, match = !seed && tokenize((selector = compiled.selector || selector));
results = results || [];
if (match.length === 1) {
tokens = match[0] = match[0].slice(0);
if (tokens.length > 2 && (token = tokens[0]).type === "ID" && context.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {
context = (Expr.find.ID(token.matches[0].replace(runescape, funescape), context) || [])[0];
if (!context) {
return results;
} else if (compiled) {
context = context.parentNode;
}
selector = selector.slice(tokens.shift().value.length);
}
i = matchExpr.needsContext.test(selector) ? 0 : tokens.length;
while (i--) {
token = tokens[i];
if (Expr.relative[(type = token.type)]) {
break;
}
if ((find = Expr.find[type])) {
if ((seed = find(token.matches[0].replace(runescape, funescape), rsibling.test(tokens[0].type) && testContext(context.parentNode) || context))) {
tokens.splice(i, 1);
selector = seed.length && toSelector(tokens);
if (!selector) {
push.apply(results, seed);
return results;
}
break;
}
}
}
}
(compiled || compile(selector, match))(seed, context, !documentIsHTML, results, !context || rsibling.test(selector) && testContext(context.parentNode) || context);
return results;
}
support.sortStable = expando.split("").sort(sortOrder).join("") === expando;
setDocument();
support.sortDetached = assert(function(el) {
return el.compareDocumentPosition(document.createElement("fieldset")) & 1;
});
jQuery.find = find;
jQuery.expr[":"] = jQuery.expr.pseudos;
jQuery.unique = jQuery.uniqueSort;
find.compile = compile;
find.select = select;
find.setDocument = setDocument;
find.tokenize = tokenize;
find.escape = jQuery.escapeSelector;
find.getText = jQuery.text;
find.isXML = jQuery.isXMLDoc;
find.selectors = jQuery.expr;
find.support = jQuery.support;
find.uniqueSort = jQuery.uniqueSort;
}
)();
var dir = function(elem, dir, until) {
var matched = []
, truncate = until !== undefined;
while ((elem = elem[dir]) && elem.nodeType !== 9) {
if (elem.nodeType === 1) {
if (truncate && jQuery(elem).is(until)) {
break;
}
matched.push(elem);
}
}
return matched;
};
var siblings = function(n, elem) {
var matched = [];
for (; n; n = n.nextSibling) {
if (n.nodeType === 1 && n !== elem) {
matched.push(n);
}
}
return matched;
};
var rneedsContext = jQuery.expr.match.needsContext;
var rsingleTag = (/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i);
function winnow(elements, qualifier, not) {
if (isFunction(qualifier)) {
return jQuery.grep(elements, function(elem, i) {
return !!qualifier.call(elem, i, elem) !== not;
});
}
if (qualifier.nodeType) {
return jQuery.grep(elements, function(elem) {
return (elem === qualifier) !== not;
});
}
if (typeof qualifier !== "string") {
return jQuery.grep(elements, function(elem) {
return (indexOf.call(qualifier, elem) > -1) !== not;
});
}
return jQuery.filter(qualifier, elements, not);
}
jQuery.filter = function(expr, elems, not) {
var elem = elems[0];
if (not) {
expr = ":not(" + expr + ")";
}
if (elems.length === 1 && elem.nodeType === 1) {
return jQuery.find.matchesSelector(elem, expr) ? [elem] : [];
}
return jQuery.find.matches(expr, jQuery.grep(elems, function(elem) {
return elem.nodeType === 1;
}));
}
;
jQuery.fn.extend({
find: function(selector) {
var i, ret, len = this.length, self = this;
if (typeof selector !== "string") {
return this.pushStack(jQuery(selector).filter(function() {
for (i = 0; i < len; i++) {
if (jQuery.contains(self[i], this)) {
return true;
}
}
}));
}
ret = this.pushStack([]);
for (i = 0; i < len; i++) {
jQuery.find(selector, self[i], ret);
}
return len > 1 ? jQuery.uniqueSort(ret) : ret;
},
filter: function(selector) {
return this.pushStack(winnow(this, selector || [], false));
},
not: function(selector) {
return this.pushStack(winnow(this, selector || [], true));
},
is: function(selector) {
return !!winnow(this, typeof selector === "string" && rneedsContext.test(selector) ? jQuery(selector) : selector || [], false).length;
}
});
var rootjQuery, rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, init = jQuery.fn.init = function(selector, context, root) {
var match, elem;
if (!selector) {
return this;
}
root = root || rootjQuery;
if (typeof selector === "string") {
if (selector[0] === "<" && selector[selector.length - 1] === ">" && selector.length >= 3) {
match = [null, selector, null];
} else {
match = rquickExpr.exec(selector);
}
if (match && (match[1] || !context)) {
if (match[1]) {
context = context instanceof jQuery ? context[0] : context;
jQuery.merge(this, jQuery.parseHTML(match[1], context && context.nodeType ? context.ownerDocument || context : document, true));
if (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {
for (match in context) {
if (isFunction(this[match])) {
this[match](context[match]);
} else {
this.attr(match, context[match]);
}
}
}
return this;
} else {
elem = document.getElementById(match[2]);
if (elem) {
this[0] = elem;
this.length = 1;
}
return this;
}
} else if (!context || context.jquery) {
return (context || root).find(selector);
} else {
return this.constructor(context).find(selector);
}
} else if (selector.nodeType) {
this[0] = selector;
this.length = 1;
return this;
} else if (isFunction(selector)) {
return root.ready !== undefined ? root.ready(selector) : selector(jQuery);
}
return jQuery.makeArray(selector, this);
}
;
init.prototype = jQuery.fn;
rootjQuery = jQuery(document);
var rparentsprev = /^(?:parents|prev(?:Until|All))/
, guaranteedUnique = {
children: true,
contents: true,
next: true,
prev: true
};
jQuery.fn.extend({
has: function(target) {
var targets = jQuery(target, this)
, l = targets.length;
return this.filter(function() {
var i = 0;
for (; i < l; i++) {
if (jQuery.contains(this, targets[i])) {
return true;
}
}
});
},
closest: function(selectors, context) {
var cur, i = 0, l = this.length, matched = [], targets = typeof selectors !== "string" && jQuery(selectors);
if (!rneedsContext.test(selectors)) {
for (; i < l; i++) {
for (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {
if (cur.nodeType < 11 && (targets ? targets.index(cur) > -1 : cur.nodeType === 1 && jQuery.find.matchesSelector(cur, selectors))) {
matched.push(cur);
break;
}
}
}
}
return this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched);
},
index: function(elem) {
if (!elem) {
return (this[0] && this[0].parentNode) ? this.first().prevAll().length : -1;
}
if (typeof elem === "string") {
return indexOf.call(jQuery(elem), this[0]);
}
return indexOf.call(this, elem.jquery ? elem[0] : elem);
},
add: function(selector, context) {
return this.pushStack(jQuery.uniqueSort(jQuery.merge(this.get(), jQuery(selector, context))));
},
addBack: function(selector) {
return this.add(selector == null ? this.prevObject : this.prevObject.filter(selector));
}
});
function sibling(cur, dir) {
while ((cur = cur[dir]) && cur.nodeType !== 1) {}
return cur;
}
jQuery.each({
parent: function(elem) {
var parent = elem.parentNode;
return parent && parent.nodeType !== 11 ? parent : null;
},
parents: function(elem) {
return dir(elem, "parentNode");
},
parentsUntil: function(elem, _i, until) {
return dir(elem, "parentNode", until);
},
next: function(elem) {
return sibling(elem, "nextSibling");
},
prev: function(elem) {
return sibling(elem, "previousSibling");
},
nextAll: function(elem) {
return dir(elem, "nextSibling");
},
prevAll: function(elem) {
return dir(elem, "previousSibling");
},
nextUntil: function(elem, _i, until) {
return dir(elem, "nextSibling", until);
},
prevUntil: function(elem, _i, until) {
return dir(elem, "previousSibling", until);
},
siblings: function(elem) {
return siblings((elem.parentNode || {}).firstChild, elem);
},
children: function(elem) {
return siblings(elem.firstChild);
},
contents: function(elem) {
if (elem.contentDocument != null && getProto(elem.contentDocument)) {
return elem.contentDocument;
}
if (nodeName(elem, "template")) {
elem = elem.content || elem;
}
return jQuery.merge([], elem.childNodes);
}
}, function(name, fn) {
jQuery.fn[name] = function(until, selector) {
var matched = jQuery.map(this, fn, until);
if (name.slice(-5) !== "Until") {
selector = until;
}
if (selector && typeof selector === "string") {
matched = jQuery.filter(selector, matched);
}
if (this.length > 1) {
if (!guaranteedUnique[name]) {
jQuery.uniqueSort(matched);
}
if (rparentsprev.test(name)) {
matched.reverse();
}
}
return this.pushStack(matched);
}
;
});
var rnothtmlwhite = (/[^\x20\t\r\n\f]+/g);
function createOptions(options) {
var object = {};
jQuery.each(options.match(rnothtmlwhite) || [], function(_, flag) {
object[flag] = true;
});
return object;
}
jQuery.Callbacks = function(options) {
options = typeof options === "string" ? createOptions(options) : jQuery.extend({}, options);
var firing, memory, fired, locked, list = [], queue = [], firingIndex = -1, fire = function() {
locked = locked || options.once;
fired = firing = true;
for (; queue.length; firingIndex = -1) {
memory = queue.shift();
while (++firingIndex < list.length) {
if (list[firingIndex].apply(memory[0], memory[1]) === false && options.stopOnFalse) {
firingIndex = list.length;
memory = false;
}
}
}
if (!options.memory) {
memory = false;
}
firing = false;
if (locked) {
if (memory) {
list = [];
} else {
list = "";
}
}
}, self = {
add: function() {
if (list) {
if (memory && !firing) {
firingIndex = list.length - 1;
queue.push(memory);
}
(function add(args) {
jQuery.each(args, function(_, arg) {
if (isFunction(arg)) {
if (!options.unique || !self.has(arg)) {
list.push(arg);
}
} else if (arg && arg.length && toType(arg) !== "string") {
add(arg);
}
});
}
)(arguments);
if (memory && !firing) {
fire();
}
}
return this;
},
remove: function() {
jQuery.each(arguments, function(_, arg) {
var index;
while ((index = jQuery.inArray(arg, list, index)) > -1) {
list.splice(index, 1);
if (index <= firingIndex) {
firingIndex--;
}
}
});
return this;
},
has: function(fn) {
return fn ? jQuery.inArray(fn, list) > -1 : list.length > 0;
},
empty: function() {
if (list) {
list = [];
}
return this;
},
disable: function() {
locked = queue = [];
list = memory = "";
return this;
},
disabled: function() {
return !list;
},
lock: function() {
locked = queue = [];
if (!memory && !firing) {
list = memory = "";
}
return this;
},
locked: function() {
return !!locked;
},
fireWith: function(context, args) {
if (!locked) {
args = args || [];
args = [context, args.slice ? args.slice() : args];
queue.push(args);
if (!firing) {
fire();
}
}
return this;
},
fire: function() {
self.fireWith(this, arguments);
return this;
},
fired: function() {
return !!fired;
}
};
return self;
}
;
function Identity(v) {
return v;
}
function Thrower(ex) {
throw ex;
}
function adoptValue(value, resolve, reject, noValue) {
var method;
try {
if (value && isFunction((method = value.promise))) {
method.call(value).done(resolve).fail(reject);
} else if (value && isFunction((method = value.then))) {
method.call(value, resolve, reject);
} else {
resolve.apply(undefined, [value].slice(noValue));
}
} catch (value) {
reject.apply(undefined, [value]);
}
}
jQuery.extend({
Deferred: function(func) {
var tuples = [["notify", "progress", jQuery.Callbacks("memory"), jQuery.Callbacks("memory"), 2], ["resolve", "done", jQuery.Callbacks("once memory"), jQuery.Callbacks("once memory"), 0, "resolved"], ["reject", "fail", jQuery.Callbacks("once memory"), jQuery.Callbacks("once memory"), 1, "rejected"]]
, state = "pending"
, promise = {
state: function() {
return state;
},
always: function() {
deferred.done(arguments).fail(arguments);
return this;
},
"catch": function(fn) {
return promise.then(null, fn);
},
pipe: function() {
var fns = arguments;
return jQuery.Deferred(function(newDefer) {
jQuery.each(tuples, function(_i, tuple) {
var fn = isFunction(fns[tuple[4]]) && fns[tuple[4]];
deferred[tuple[1]](function() {
var returned = fn && fn.apply(this, arguments);
if (returned && isFunction(returned.promise)) {
returned.promise().progress(newDefer.notify).done(newDefer.resolve).fail(newDefer.reject);
} else {
newDefer[tuple[0] + "With"](this, fn ? [returned] : arguments);
}
});
});
fns = null;
}).promise();
},
then: function(onFulfilled, onRejected, onProgress) {
var maxDepth = 0;
function resolve(depth, deferred, handler, special) {
return function() {
var that = this
, args = arguments
, mightThrow = function() {
var returned, then;
if (depth < maxDepth) {
return;
}
returned = handler.apply(that, args);
if (returned === deferred.promise()) {
throw new TypeError("Thenable self-resolution");
}
then = returned && (typeof returned === "object" || typeof returned === "function") && returned.then;
if (isFunction(then)) {
if (special) {
then.call(returned, resolve(maxDepth, deferred, Identity, special), resolve(maxDepth, deferred, Thrower, special));
} else {
maxDepth++;
then.call(returned, resolve(maxDepth, deferred, Identity, special), resolve(maxDepth, deferred, Thrower, special), resolve(maxDepth, deferred, Identity, deferred.notifyWith));
}
} else {
if (handler !== Identity) {
that = undefined;
args = [returned];
}
(special || deferred.resolveWith)(that, args);
}
}
, process = special ? mightThrow : function() {
try {
mightThrow();
} catch (e) {
if (jQuery.Deferred.exceptionHook) {
jQuery.Deferred.exceptionHook(e, process.error);
}
if (depth + 1 >= maxDepth) {
if (handler !== Thrower) {
that = undefined;
args = [e];
}
deferred.rejectWith(that, args);
}
}
}
;
if (depth) {
process();
} else {
if (jQuery.Deferred.getErrorHook) {
process.error = jQuery.Deferred.getErrorHook();
} else if (jQuery.Deferred.getStackHook) {
process.error = jQuery.Deferred.getStackHook();
}
window.setTimeout(process);
}
}
;
}
return jQuery.Deferred(function(newDefer) {
tuples[0][3].add(resolve(0, newDefer, isFunction(onProgress) ? onProgress : Identity, newDefer.notifyWith));
tuples[1][3].add(resolve(0, newDefer, isFunction(onFulfilled) ? onFulfilled : Identity));
tuples[2][3].add(resolve(0, newDefer, isFunction(onRejected) ? onRejected : Thrower));
}).promise();
},
promise: function(obj) {
return obj != null ? jQuery.extend(obj, promise) : promise;
}
}
, deferred = {};
jQuery.each(tuples, function(i, tuple) {
var list = tuple[2]
, stateString = tuple[5];
promise[tuple[1]] = list.add;
if (stateString) {
list.add(function() {
state = stateString;
}, tuples[3 - i][2].disable, tuples[3 - i][3].disable, tuples[0][2].lock, tuples[0][3].lock);
}
list.add(tuple[3].fire);
deferred[tuple[0]] = function() {
deferred[tuple[0] + "With"](this === deferred ? undefined : this, arguments);
return this;
}
;
deferred[tuple[0] + "With"] = list.fireWith;
});
promise.promise(deferred);
if (func) {
func.call(deferred, deferred);
}
return deferred;
},
when: function(singleValue) {
var remaining = arguments.length
, i = remaining
, resolveContexts = Array(i)
, resolveValues = slice.call(arguments)
, primary = jQuery.Deferred()
, updateFunc = function(i) {
return function(value) {
resolveContexts[i] = this;
resolveValues[i] = arguments.length > 1 ? slice.call(arguments) : value;
if (!(--remaining)) {
primary.resolveWith(resolveContexts, resolveValues);
}
}
;
};
if (remaining <= 1) {
adoptValue(singleValue, primary.done(updateFunc(i)).resolve, primary.reject, !remaining);
if (primary.state() === "pending" || isFunction(resolveValues[i] && resolveValues[i].then)) {
return primary.then();
}
}
while (i--) {
adoptValue(resolveValues[i], updateFunc(i), primary.reject);
}
return primary.promise();
}
});
var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
jQuery.Deferred.exceptionHook = function(error, asyncError) {
if (window.console && window.console.warn && error && rerrorNames.test(error.name)) {
window.console.warn("jQuery.Deferred exception: " + error.message, error.stack, asyncError);
}
}
;
jQuery.readyException = function(error) {
window.setTimeout(function() {
throw error;
});
}
;
var readyList = jQuery.Deferred();
jQuery.fn.ready = function(fn) {
readyList.then(fn).catch(function(error) {
jQuery.readyException(error);
});
return this;
}
;
jQuery.extend({
isReady: false,
readyWait: 1,
ready: function(wait) {
if (wait === true ? --jQuery.readyWait : jQuery.isReady) {
return;
}
jQuery.isReady = true;
if (wait !== true && --jQuery.readyWait > 0) {
return;
}
readyList.resolveWith(document, [jQuery]);
}
});
jQuery.ready.then = readyList.then;
function completed() {
document.removeEventListener("DOMContentLoaded", completed);
window.removeEventListener("load", completed);
jQuery.ready();
}
if (document.readyState === "complete" || (document.readyState !== "loading" && !document.documentElement.doScroll)) {
window.setTimeout(jQuery.ready);
} else {
document.addEventListener("DOMContentLoaded", completed);
window.addEventListener("load", completed);
}
var access = function(elems, fn, key, value, chainable, emptyGet, raw) {
var i = 0
, len = elems.length
, bulk = key == null;
if (toType(key) === "object") {
chainable = true;
for (i in key) {
access(elems, fn, i, key[i], true, emptyGet, raw);
}
} else if (value !== undefined) {
chainable = true;
if (!isFunction(value)) {
raw = true;
}
if (bulk) {
if (raw) {
fn.call(elems, value);
fn = null;
} else {
bulk = fn;
fn = function(elem, _key, value) {
return bulk.call(jQuery(elem), value);
}
;
}
}
if (fn) {
for (; i < len; i++) {
fn(elems[i], key, raw ? value : value.call(elems[i], i, fn(elems[i], key)));
}
}
}
if (chainable) {
return elems;
}
if (bulk) {
return fn.call(elems);
}
return len ? fn(elems[0], key) : emptyGet;
};
var rmsPrefix = /^-ms-/
, rdashAlpha = /-([a-z])/g;
function fcamelCase(_all, letter) {
return letter.toUpperCase();
}
function camelCase(string) {
return string.replace(rmsPrefix, "ms-").replace(rdashAlpha, fcamelCase);
}
var acceptData = function(owner) {
return owner.nodeType === 1 || owner.nodeType === 9 || !(+owner.nodeType);
};
function Data() {
this.expando = jQuery.expando + Data.uid++;
}
Data.uid = 1;
Data.prototype = {
cache: function(owner) {
var value = owner[this.expando];
if (!value) {
value = {};
if (acceptData(owner)) {
if (owner.nodeType) {
owner[this.expando] = value;
} else {
Object.defineProperty(owner, this.expando, {
value: value,
configurable: true
});
}
}
}
return value;
},
set: function(owner, data, value) {
var prop, cache = this.cache(owner);
if (typeof data === "string") {
cache[camelCase(data)] = value;
} else {
for (prop in data) {
cache[camelCase(prop)] = data[prop];
}
}
return cache;
},
get: function(owner, key) {
return key === undefined ? this.cache(owner) : owner[this.expando] && owner[this.expando][camelCase(key)];
},
access: function(owner, key, value) {
if (key === undefined || ((key && typeof key === "string") && value === undefined)) {
return this.get(owner, key);
}
this.set(owner, key, value);
return value !== undefined ? value : key;
},
remove: function(owner, key) {
var i, cache = owner[this.expando];
if (cache === undefined) {
return;
}
if (key !== undefined) {
if (Array.isArray(key)) {
key = key.map(camelCase);
} else {
key = camelCase(key);
key = key in cache ? [key] : (key.match(rnothtmlwhite) || []);
}
i = key.length;
while (i--) {
delete cache[key[i]];
}
}
if (key === undefined || jQuery.isEmptyObject(cache)) {
if (owner.nodeType) {
owner[this.expando] = undefined;
} else {
delete owner[this.expando];
}
}
},
hasData: function(owner) {
var cache = owner[this.expando];
return cache !== undefined && !jQuery.isEmptyObject(cache);
}
};
var dataPriv = new Data();
var dataUser = new Data();
var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/
, rmultiDash = /[A-Z]/g;
function getData(data) {
if (data === "true") {
return true;
}
if (data === "false") {
return false;
}
if (data === "null") {
return null;
}
if (data === +data + "") {
return +data;
}
if (rbrace.test(data)) {
return JSON.parse(data);
}
return data;
}
function dataAttr(elem, key, data) {
var name;
if (data === undefined && elem.nodeType === 1) {
name = "data-" + key.replace(rmultiDash, "-$&").toLowerCase();
data = elem.getAttribute(name);
if (typeof data === "string") {
try {
data = getData(data);
} catch (e) {}
dataUser.set(elem, key, data);
} else {
data = undefined;
}
}
return data;
}
jQuery.extend({
hasData: function(elem) {
return dataUser.hasData(elem) || dataPriv.hasData(elem);
},
data: function(elem, name, data) {
return dataUser.access(elem, name, data);
},
removeData: function(elem, name) {
dataUser.remove(elem, name);
},
_data: function(elem, name, data) {
return dataPriv.access(elem, name, data);
},
_removeData: function(elem, name) {
dataPriv.remove(elem, name);
}
});
jQuery.fn.extend({
data: function(key, value) {
var i, name, data, elem = this[0], attrs = elem && elem.attributes;
if (key === undefined) {
if (this.length) {
data = dataUser.get(elem);
if (elem.nodeType === 1 && !dataPriv.get(elem, "hasDataAttrs")) {
i = attrs.length;
while (i--) {
if (attrs[i]) {
name = attrs[i].name;
if (name.indexOf("data-") === 0) {
name = camelCase(name.slice(5));
dataAttr(elem, name, data[name]);
}
}
}
dataPriv.set(elem, "hasDataAttrs", true);
}
}
return data;
}
if (typeof key === "object") {
return this.each(function() {
dataUser.set(this, key);
});
}
return access(this, function(value) {
var data;
if (elem && value === undefined) {
data = dataUser.get(elem, key);
if (data !== undefined) {
return data;
}
data = dataAttr(elem, key);
if (data !== undefined) {
return data;
}
return;
}
this.each(function() {
dataUser.set(this, key, value);
});
}, null, value, arguments.length > 1, null, true);
},
removeData: function(key) {
return this.each(function() {
dataUser.remove(this, key);
});
}
});
jQuery.extend({
queue: function(elem, type, data) {
var queue;
if (elem) {
type = (type || "fx") + "queue";
queue = dataPriv.get(elem, type);
if (data) {
if (!queue || Array.isArray(data)) {
queue = dataPriv.access(elem, type, jQuery.makeArray(data));
} else {
queue.push(data);
}
}
return queue || [];
}
},
dequeue: function(elem, type) {
type = type || "fx";
var queue = jQuery.queue(elem, type)
, startLength = queue.length
, fn = queue.shift()
, hooks = jQuery._queueHooks(elem, type)
, next = function() {
jQuery.dequeue(elem, type);
};
if (fn === "inprogress") {
fn = queue.shift();
startLength--;
}
if (fn) {
if (type === "fx") {
queue.unshift("inprogress");
}
delete hooks.stop;
fn.call(elem, next, hooks);
}
if (!startLength && hooks) {
hooks.empty.fire();
}
},
_queueHooks: function(elem, type) {
var key = type + "queueHooks";
return dataPriv.get(elem, key) || dataPriv.access(elem, key, {
empty: jQuery.Callbacks("once memory").add(function() {
dataPriv.remove(elem, [type + "queue", key]);
})
});
}
});
jQuery.fn.extend({
queue: function(type, data) {
var setter = 2;
if (typeof type !== "string") {
data = type;
type = "fx";
setter--;
}
if (arguments.length < setter) {
return jQuery.queue(this[0], type);
}
return data === undefined ? this : this.each(function() {
var queue = jQuery.queue(this, type, data);
jQuery._queueHooks(this, type);
if (type === "fx" && queue[0] !== "inprogress") {
jQuery.dequeue(this, type);
}
});
},
dequeue: function(type) {
return this.each(function() {
jQuery.dequeue(this, type);
});
},
clearQueue: function(type) {
return this.queue(type || "fx", []);
},
promise: function(type, obj) {
var tmp, count = 1, defer = jQuery.Deferred(), elements = this, i = this.length, resolve = function() {
if (!(--count)) {
defer.resolveWith(elements, [elements]);
}
};
if (typeof type !== "string") {
obj = type;
type = undefined;
}
type = type || "fx";
while (i--) {
tmp = dataPriv.get(elements[i], type + "queueHooks");
if (tmp && tmp.empty) {
count++;
tmp.empty.add(resolve);
}
}
resolve();
return defer.promise(obj);
}
});
var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source;
var rcssNum = new RegExp("^(?:([+-])=|)(" + pnum + ")([a-z%]*)$","i");
var cssExpand = ["Top", "Right", "Bottom", "Left"];
var documentElement = document.documentElement;
var isAttached = function(elem) {
return jQuery.contains(elem.ownerDocument, elem);
}
, composed = {
composed: true
};
if (documentElement.getRootNode) {
isAttached = function(elem) {
return jQuery.contains(elem.ownerDocument, elem) || elem.getRootNode(composed) === elem.ownerDocument;
}
;
}
var isHiddenWithinTree = function(elem, el) {
elem = el || elem;
return elem.style.display === "none" || elem.style.display === "" && isAttached(elem) && jQuery.css(elem, "display") === "none";
};
function adjustCSS(elem, prop, valueParts, tween) {
var adjusted, scale, maxIterations = 20, currentValue = tween ? function() {
return tween.cur();
}
: function() {
return jQuery.css(elem, prop, "");
}
, initial = currentValue(), unit = valueParts && valueParts[3] || (jQuery.cssNumber[prop] ? "" : "px"), initialInUnit = elem.nodeType && (jQuery.cssNumber[prop] || unit !== "px" && +initial) && rcssNum.exec(jQuery.css(elem, prop));
if (initialInUnit && initialInUnit[3] !== unit) {
initial = initial / 2;
unit = unit || initialInUnit[3];
initialInUnit = +initial || 1;
while (maxIterations--) {
jQuery.style(elem, prop, initialInUnit + unit);
if ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) {
maxIterations = 0;
}
initialInUnit = initialInUnit / scale;
}
initialInUnit = initialInUnit * 2;
jQuery.style(elem, prop, initialInUnit + unit);
valueParts = valueParts || [];
}
if (valueParts) {
initialInUnit = +initialInUnit || +initial || 0;
adjusted = valueParts[1] ? initialInUnit + (valueParts[1] + 1) * valueParts[2] : +valueParts[2];
if (tween) {
tween.unit = unit;
tween.start = initialInUnit;
tween.end = adjusted;
}
}
return adjusted;
}
var defaultDisplayMap = {};
function getDefaultDisplay(elem) {
var temp, doc = elem.ownerDocument, nodeName = elem.nodeName, display = defaultDisplayMap[nodeName];
if (display) {
return display;
}
temp = doc.body.appendChild(doc.createElement(nodeName));
display = jQuery.css(temp, "display");
temp.parentNode.removeChild(temp);
if (display === "none") {
display = "block";
}
defaultDisplayMap[nodeName] = display;
return display;
}
function showHide(elements, show) {
var display, elem, values = [], index = 0, length = elements.length;
for (; index < length; index++) {
elem = elements[index];
if (!elem.style) {
continue;
}
display = elem.style.display;
if (show) {
if (display === "none") {
values[index] = dataPriv.get(elem, "display") || null;
if (!values[index]) {
elem.style.display = "";
}
}
if (elem.style.display === "" && isHiddenWithinTree(elem)) {
values[index] = getDefaultDisplay(elem);
}
} else {
if (display !== "none") {
values[index] = "none";
dataPriv.set(elem, "display", display);
}
}
}
for (index = 0; index < length; index++) {
if (values[index] != null) {
elements[index].style.display = values[index];
}
}
return elements;
}
jQuery.fn.extend({
show: function() {
return showHide(this, true);
},
hide: function() {
return showHide(this);
},
toggle: function(state) {
if (typeof state === "boolean") {
return state ? this.show() : this.hide();
}
return this.each(function() {
if (isHiddenWithinTree(this)) {
jQuery(this).show();
} else {
jQuery(this).hide();
}
});
}
});
var rcheckableType = (/^(?:checkbox|radio)$/i);
var rtagName = (/<([a-z][^\/\0>\x20\t\r\n\f]*)/i);
var rscriptType = (/^$|^module$|\/(?:java|ecma)script/i);
(function() {
var fragment = document.createDocumentFragment()
, div = fragment.appendChild(document.createElement("div"))
, input = document.createElement("input");
input.setAttribute("type", "radio");
input.setAttribute("checked", "checked");
input.setAttribute("name", "t");
div.appendChild(input);
support.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked;
div.innerHTML = "<textarea>x</textarea>";
support.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue;
div.innerHTML = "<option></option>";
support.option = !!div.lastChild;
}
)();
var wrapMap = {
thead: [1, "<table>", "</table>"],
col: [2, "<table><colgroup>", "</colgroup></table>"],
tr: [2, "<table><tbody>", "</tbody></table>"],
td: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
_default: [0, "", ""]
};
wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
wrapMap.th = wrapMap.td;
if (!support.option) {
wrapMap.optgroup = wrapMap.option = [1, "<select multiple='multiple'>", "</select>"];
}
function getAll(context, tag) {
var ret;
if (typeof context.getElementsByTagName !== "undefined") {
ret = context.getElementsByTagName(tag || "*");
} else if (typeof context.querySelectorAll !== "undefined") {
ret = context.querySelectorAll(tag || "*");
} else {
ret = [];
}
if (tag === undefined || tag && nodeName(context, tag)) {
return jQuery.merge([context], ret);
}
return ret;
}
function setGlobalEval(elems, refElements) {
var i = 0
, l = elems.length;
for (; i < l; i++) {
dataPriv.set(elems[i], "globalEval", !refElements || dataPriv.get(refElements[i], "globalEval"));
}
}
var rhtml = /<|&#?\w+;/;
function buildFragment(elems, context, scripts, selection, ignored) {
var elem, tmp, tag, wrap, attached, j, fragment = context.createDocumentFragment(), nodes = [], i = 0, l = elems.length;
for (; i < l; i++) {
elem = elems[i];
if (elem || elem === 0) {
if (toType(elem) === "object") {
jQuery.merge(nodes, elem.nodeType ? [elem] : elem);
} else if (!rhtml.test(elem)) {
nodes.push(context.createTextNode(elem));
} else {
tmp = tmp || fragment.appendChild(context.createElement("div"));
tag = (rtagName.exec(elem) || ["", ""])[1].toLowerCase();
wrap = wrapMap[tag] || wrapMap._default;
tmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2];
j = wrap[0];
while (j--) {
tmp = tmp.lastChild;
}
jQuery.merge(nodes, tmp.childNodes);
tmp = fragment.firstChild;
tmp.textContent = "";
}
}
}
fragment.textContent = "";
i = 0;
while ((elem = nodes[i++])) {
if (selection && jQuery.inArray(elem, selection) > -1) {
if (ignored) {
ignored.push(elem);
}
continue;
}
attached = isAttached(elem);
tmp = getAll(fragment.appendChild(elem), "script");
if (attached) {
setGlobalEval(tmp);
}
if (scripts) {
j = 0;
while ((elem = tmp[j++])) {
if (rscriptType.test(elem.type || "")) {
scripts.push(elem);
}
}
}
}
return fragment;
}
var rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
function returnTrue() {
return true;
}
function returnFalse() {
return false;
}
function on(elem, types, selector, data, fn, one) {
var origFn, type;
if (typeof types === "object") {
if (typeof selector !== "string") {
data = data || selector;
selector = undefined;
}
for (type in types) {
on(elem, type, selector, data, types[type], one);
}
return elem;
}
if (data == null && fn == null) {
fn = selector;
data = selector = undefined;
} else if (fn == null) {
if (typeof selector === "string") {
fn = data;
data = undefined;
} else {
fn = data;
data = selector;
selector = undefined;
}
}
if (fn === false) {
fn = returnFalse;
} else if (!fn) {
return elem;
}
if (one === 1) {
origFn = fn;
fn = function(event) {
jQuery().off(event);
return origFn.apply(this, arguments);
}
;
fn.guid = origFn.guid || (origFn.guid = jQuery.guid++);
}
return elem.each(function() {
jQuery.event.add(this, types, fn, data, selector);
});
}
jQuery.event = {
global: {},
add: function(elem, types, handler, data, selector) {
var handleObjIn, eventHandle, tmp, events, t, handleObj, special, handlers, type, namespaces, origType, elemData = dataPriv.get(elem);
if (!acceptData(elem)) {
return;
}
if (handler.handler) {
handleObjIn = handler;
handler = handleObjIn.handler;
selector = handleObjIn.selector;
}
if (selector) {
jQuery.find.matchesSelector(documentElement, selector);
}
if (!handler.guid) {
handler.guid = jQuery.guid++;
}
if (!(events = elemData.events)) {
events = elemData.events = Object.create(null);
}
if (!(eventHandle = elemData.handle)) {
eventHandle = elemData.handle = function(e) {
return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? jQuery.event.dispatch.apply(elem, arguments) : undefined;
}
;
}
types = (types || "").match(rnothtmlwhite) || [""];
t = types.length;
while (t--) {
tmp = rtypenamespace.exec(types[t]) || [];
type = origType = tmp[1];
namespaces = (tmp[2] || "").split(".").sort();
if (!type) {
continue;
}
special = jQuery.event.special[type] || {};
type = (selector ? special.delegateType : special.bindType) || type;
special = jQuery.event.special[type] || {};
handleObj = jQuery.extend({
type: type,
origType: origType,
data: data,
handler: handler,
guid: handler.guid,
selector: selector,
needsContext: selector && jQuery.expr.match.needsContext.test(selector),
namespace: namespaces.join(".")
}, handleObjIn);
if (!(handlers = events[type])) {
handlers = events[type] = [];
handlers.delegateCount = 0;
if (!special.setup || special.setup.call(elem, data, namespaces, eventHandle) === false) {
if (elem.addEventListener) {
elem.addEventListener(type, eventHandle);
}
}
}
if (special.add) {
special.add.call(elem, handleObj);
if (!handleObj.handler.guid) {
handleObj.handler.guid = handler.guid;
}
}
if (selector) {
handlers.splice(handlers.delegateCount++, 0, handleObj);
} else {
handlers.push(handleObj);
}
jQuery.event.global[type] = true;
}
},
remove: function(elem, types, handler, selector, mappedTypes) {
var j, origCount, tmp, events, t, handleObj, special, handlers, type, namespaces, origType, elemData = dataPriv.hasData(elem) && dataPriv.get(elem);
if (!elemData || !(events = elemData.events)) {
return;
}
types = (types || "").match(rnothtmlwhite) || [""];
t = types.length;
while (t--) {
tmp = rtypenamespace.exec(types[t]) || [];
type = origType = tmp[1];
namespaces = (tmp[2] || "").split(".").sort();
if (!type) {
for (type in events) {
jQuery.event.remove(elem, type + types[t], handler, selector, true);
}
continue;
}
special = jQuery.event.special[type] || {};
type = (selector ? special.delegateType : special.bindType) || type;
handlers = events[type] || [];
tmp = tmp[2] && new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)");
origCount = j = handlers.length;
while (j--) {
handleObj = handlers[j];
if ((mappedTypes || origType === handleObj.origType) && (!handler || handler.guid === handleObj.guid) && (!tmp || tmp.test(handleObj.namespace)) && (!selector || selector === handleObj.selector || selector === "**" && handleObj.selector)) {
handlers.splice(j, 1);
if (handleObj.selector) {
handlers.delegateCount--;
}
if (special.remove) {
special.remove.call(elem, handleObj);
}
}
}
if (origCount && !handlers.length) {
if (!special.teardown || special.teardown.call(elem, namespaces, elemData.handle) === false) {
jQuery.removeEvent(elem, type, elemData.handle);
}
delete events[type];
}
}
if (jQuery.isEmptyObject(events)) {
dataPriv.remove(elem, "handle events");
}
},
dispatch: function(nativeEvent) {
var i, j, ret, matched, handleObj, handlerQueue, args = new Array(arguments.length), event = jQuery.event.fix(nativeEvent), handlers = (dataPriv.get(this, "events") || Object.create(null))[event.type] || [], special = jQuery.event.special[event.type] || {};
args[0] = event;
for (i = 1; i < arguments.length; i++) {
args[i] = arguments[i];
}
event.delegateTarget = this;
if (special.preDispatch && special.preDispatch.call(this, event) === false) {
return;
}
handlerQueue = jQuery.event.handlers.call(this, event, handlers);
i = 0;
while ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {
event.currentTarget = matched.elem;
j = 0;
while ((handleObj = matched.handlers[j++]) && !event.isImmediatePropagationStopped()) {
if (!event.rnamespace || handleObj.namespace === false || event.rnamespace.test(handleObj.namespace)) {
event.handleObj = handleObj;
event.data = handleObj.data;
ret = ((jQuery.event.special[handleObj.origType] || {}).handle || handleObj.handler).apply(matched.elem, args);
if (ret !== undefined) {
if ((event.result = ret) === false) {
event.preventDefault();
event.stopPropagation();
}
}
}
}
}
if (special.postDispatch) {
special.postDispatch.call(this, event);
}
return event.result;
},
handlers: function(event, handlers) {
var i, handleObj, sel, matchedHandlers, matchedSelectors, handlerQueue = [], delegateCount = handlers.delegateCount, cur = event.target;
if (delegateCount && cur.nodeType && !(event.type === "click" && event.button >= 1)) {
for (; cur !== this; cur = cur.parentNode || this) {
if (cur.nodeType === 1 && !(event.type === "click" && cur.disabled === true)) {
matchedHandlers = [];
matchedSelectors = {};
for (i = 0; i < delegateCount; i++) {
handleObj = handlers[i];
sel = handleObj.selector + " ";
if (matchedSelectors[sel] === undefined) {
matchedSelectors[sel] = handleObj.needsContext ? jQuery(sel, this).index(cur) > -1 : jQuery.find(sel, this, null, [cur]).length;
}
if (matchedSelectors[sel]) {
matchedHandlers.push(handleObj);
}
}
if (matchedHandlers.length) {
handlerQueue.push({
elem: cur,
handlers: matchedHandlers
});
}
}
}
}
cur = this;
if (delegateCount < handlers.length) {
handlerQueue.push({
elem: cur,
handlers: handlers.slice(delegateCount)
});
}
return handlerQueue;
},
addProp: function(name, hook) {
Object.defineProperty(jQuery.Event.prototype, name, {
enumerable: true,
configurable: true,
get: isFunction(hook) ? function() {
if (this.originalEvent) {
return hook(this.originalEvent);
}
}
: function() {
if (this.originalEvent) {
return this.originalEvent[name];
}
}
,
set: function(value) {
Object.defineProperty(this, name, {
enumerable: true,
configurable: true,
writable: true,
value: value
});
}
});
},
fix: function(originalEvent) {
return originalEvent[jQuery.expando] ? originalEvent : new jQuery.Event(originalEvent);
},
special: {
load: {
noBubble: true
},
click: {
setup: function(data) {
var el = this || data;
if (rcheckableType.test(el.type) && el.click && nodeName(el, "input")) {
leverageNative(el, "click", true);
}
return false;
},
trigger: function(data) {
var el = this || data;
if (rcheckableType.test(el.type) && el.click && nodeName(el, "input")) {
leverageNative(el, "click");
}
return true;
},
_default: function(event) {
var target = event.target;
return rcheckableType.test(target.type) && target.click && nodeName(target, "input") && dataPriv.get(target, "click") || nodeName(target, "a");
}
},
beforeunload: {
postDispatch: function(event) {
if (event.result !== undefined && event.originalEvent) {
event.originalEvent.returnValue = event.result;
}
}
}
}
};
function leverageNative(el, type, isSetup) {
if (!isSetup) {
if (dataPriv.get(el, type) === undefined) {
jQuery.event.add(el, type, returnTrue);
}
return;
}
dataPriv.set(el, type, false);
jQuery.event.add(el, type, {
namespace: false,
handler: function(event) {
var result, saved = dataPriv.get(this, type);
if ((event.isTrigger & 1) && this[type]) {
if (!saved) {
saved = slice.call(arguments);
dataPriv.set(this, type, saved);
this[type]();
result = dataPriv.get(this, type);
dataPriv.set(this, type, false);
if (saved !== result) {
event.stopImmediatePropagation();
event.preventDefault();
return result;
}
} else if ((jQuery.event.special[type] || {}).delegateType) {
event.stopPropagation();
}
} else if (saved) {
dataPriv.set(this, type, jQuery.event.trigger(saved[0], saved.slice(1), this));
event.stopPropagation();
event.isImmediatePropagationStopped = returnTrue;
}
}
});
}
jQuery.removeEvent = function(elem, type, handle) {
if (elem.removeEventListener) {
elem.removeEventListener(type, handle);
}
}
;
jQuery.Event = function(src, props) {
if (!(this instanceof jQuery.Event)) {
return new jQuery.Event(src,props);
}
if (src && src.type) {
this.originalEvent = src;
this.type = src.type;
this.isDefaultPrevented = src.defaultPrevented || src.defaultPrevented === undefined && src.returnValue === false ? returnTrue : returnFalse;
this.target = (src.target && src.target.nodeType === 3) ? src.target.parentNode : src.target;
this.currentTarget = src.currentTarget;
this.relatedTarget = src.relatedTarget;
} else {
this.type = src;
}
if (props) {
jQuery.extend(this, props);
}
this.timeStamp = src && src.timeStamp || Date.now();
this[jQuery.expando] = true;
}
;
jQuery.Event.prototype = {
constructor: jQuery.Event,
isDefaultPrevented: returnFalse,
isPropagationStopped: returnFalse,
isImmediatePropagationStopped: returnFalse,
isSimulated: false,
preventDefault: function() {
var e = this.originalEvent;
this.isDefaultPrevented = returnTrue;
if (e && !this.isSimulated) {
e.preventDefault();
}
},
stopPropagation: function() {
var e = this.originalEvent;
this.isPropagationStopped = returnTrue;
if (e && !this.isSimulated) {
e.stopPropagation();
}
},
stopImmediatePropagation: function() {
var e = this.originalEvent;
this.isImmediatePropagationStopped = returnTrue;
if (e && !this.isSimulated) {
e.stopImmediatePropagation();
}
this.stopPropagation();
}
};
jQuery.each({
altKey: true,
bubbles: true,
cancelable: true,
changedTouches: true,
ctrlKey: true,
detail: true,
eventPhase: true,
metaKey: true,
pageX: true,
pageY: true,
shiftKey: true,
view: true,
"char": true,
code: true,
charCode: true,
key: true,
keyCode: true,
button: true,
buttons: true,
clientX: true,
clientY: true,
offsetX: true,
offsetY: true,
pointerId: true,
pointerType: true,
screenX: true,
screenY: true,
targetTouches: true,
toElement: true,
touches: true,
which: true
}, jQuery.event.addProp);
jQuery.each({
focus: "focusin",
blur: "focusout"
}, function(type, delegateType) {
function focusMappedHandler(nativeEvent) {
if (document.documentMode) {
var handle = dataPriv.get(this, "handle")
, event = jQuery.event.fix(nativeEvent);
event.type = nativeEvent.type === "focusin" ? "focus" : "blur";
event.isSimulated = true;
handle(nativeEvent);
if (event.target === event.currentTarget) {
handle(event);
}
} else {
jQuery.event.simulate(delegateType, nativeEvent.target, jQuery.event.fix(nativeEvent));
}
}
jQuery.event.special[type] = {
setup: function() {
var attaches;
leverageNative(this, type, true);
if (document.documentMode) {
attaches = dataPriv.get(this, delegateType);
if (!attaches) {
this.addEventListener(delegateType, focusMappedHandler);
}
dataPriv.set(this, delegateType, (attaches || 0) + 1);
} else {
return false;
}
},
trigger: function() {
leverageNative(this, type);
return true;
},
teardown: function() {
var attaches;
if (document.documentMode) {
attaches = dataPriv.get(this, delegateType) - 1;
if (!attaches) {
this.removeEventListener(delegateType, focusMappedHandler);
dataPriv.remove(this, delegateType);
} else {
dataPriv.set(this, delegateType, attaches);
}
} else {
return false;
}
},
_default: function(event) {
return dataPriv.get(event.target, type);
},
delegateType: delegateType
};
jQuery.event.special[delegateType] = {
setup: function() {
var doc = this.ownerDocument || this.document || this
, dataHolder = document.documentMode ? this : doc
, attaches = dataPriv.get(dataHolder, delegateType);
if (!attaches) {
if (document.documentMode) {
this.addEventListener(delegateType, focusMappedHandler);
} else {
doc.addEventListener(type, focusMappedHandler, true);
}
}
dataPriv.set(dataHolder, delegateType, (attaches || 0) + 1);
},
teardown: function() {
var doc = this.ownerDocument || this.document || this
, dataHolder = document.documentMode ? this : doc
, attaches = dataPriv.get(dataHolder, delegateType) - 1;
if (!attaches) {
if (document.documentMode) {
this.removeEventListener(delegateType, focusMappedHandler);
} else {
doc.removeEventListener(type, focusMappedHandler, true);
}
dataPriv.remove(dataHolder, delegateType);
} else {
dataPriv.set(dataHolder, delegateType, attaches);
}
}
};
});
jQuery.each({
mouseenter: "mouseover",
mouseleave: "mouseout",
pointerenter: "pointerover",
pointerleave: "pointerout"
}, function(orig, fix) {
jQuery.event.special[orig] = {
delegateType: fix,
bindType: fix,
handle: function(event) {
var ret, target = this, related = event.relatedTarget, handleObj = event.handleObj;
if (!related || (related !== target && !jQuery.contains(target, related))) {
event.type = handleObj.origType;
ret = handleObj.handler.apply(this, arguments);
event.type = fix;
}
return ret;
}
};
});
jQuery.fn.extend({
on: function(types, selector, data, fn) {
return on(this, types, selector, data, fn);
},
one: function(types, selector, data, fn) {
return on(this, types, selector, data, fn, 1);
},
off: function(types, selector, fn) {
var handleObj, type;
if (types && types.preventDefault && types.handleObj) {
handleObj = types.handleObj;
jQuery(types.delegateTarget).off(handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, handleObj.selector, handleObj.handler);
return this;
}
if (typeof types === "object") {
for (type in types) {
this.off(type, selector, types[type]);
}
return this;
}
if (selector === false || typeof selector === "function") {
fn = selector;
selector = undefined;
}
if (fn === false) {
fn = returnFalse;
}
return this.each(function() {
jQuery.event.remove(this, types, fn, selector);
});
}
});
var rnoInnerhtml = /<script|<style|<link/i
, rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i
, rcleanScript = /^\s*<!\[CDATA\[|\]\]>\s*$/g;
function manipulationTarget(elem, content) {
if (nodeName(elem, "table") && nodeName(content.nodeType !== 11 ? content : content.firstChild, "tr")) {
return jQuery(elem).children("tbody")[0] || elem;
}
return elem;
}
function disableScript(elem) {
elem.type = (elem.getAttribute("type") !== null) + "/" + elem.type;
return elem;
}
function restoreScript(elem) {
if ((elem.type || "").slice(0, 5) === "true/") {
elem.type = elem.type.slice(5);
} else {
elem.removeAttribute("type");
}
return elem;
}
function cloneCopyEvent(src, dest) {
var i, l, type, pdataOld, udataOld, udataCur, events;
if (dest.nodeType !== 1) {
return;
}
if (dataPriv.hasData(src)) {
pdataOld = dataPriv.get(src);
events = pdataOld.events;
if (events) {
dataPriv.remove(dest, "handle events");
for (type in events) {
for (i = 0,
l = events[type].length; i < l; i++) {
jQuery.event.add(dest, type, events[type][i]);
}
}
}
}
if (dataUser.hasData(src)) {
udataOld = dataUser.access(src);
udataCur = jQuery.extend({}, udataOld);
dataUser.set(dest, udataCur);
}
}
function fixInput(src, dest) {
var nodeName = dest.nodeName.toLowerCase();
if (nodeName === "input" && rcheckableType.test(src.type)) {
dest.checked = src.checked;
} else if (nodeName === "input" || nodeName === "textarea") {
dest.defaultValue = src.defaultValue;
}
}
function domManip(collection, args, callback, ignored) {
args = flat(args);
var fragment, first, scripts, hasScripts, node, doc, i = 0, l = collection.length, iNoClone = l - 1, value = args[0], valueIsFunction = isFunction(value);
if (valueIsFunction || (l > 1 && typeof value === "string" && !support.checkClone && rchecked.test(value))) {
return collection.each(function(index) {
var self = collection.eq(index);
if (valueIsFunction) {
args[0] = value.call(this, index, self.html());
}
domManip(self, args, callback, ignored);
});
}
if (l) {
fragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);
first = fragment.firstChild;
if (fragment.childNodes.length === 1) {
fragment = first;
}
if (first || ignored) {
scripts = jQuery.map(getAll(fragment, "script"), disableScript);
hasScripts = scripts.length;
for (; i < l; i++) {
node = fragment;
if (i !== iNoClone) {
node = jQuery.clone(node, true, true);
if (hasScripts) {
jQuery.merge(scripts, getAll(node, "script"));
}
}
callback.call(collection[i], node, i);
}
if (hasScripts) {
doc = scripts[scripts.length - 1].ownerDocument;
jQuery.map(scripts, restoreScript);
for (i = 0; i < hasScripts; i++) {
node = scripts[i];
if (rscriptType.test(node.type || "") && !dataPriv.access(node, "globalEval") && jQuery.contains(doc, node)) {
if (node.src && (node.type || "").toLowerCase() !== "module") {
if (jQuery._evalUrl && !node.noModule) {
jQuery._evalUrl(node.src, {
nonce: node.nonce || node.getAttribute("nonce")
}, doc);
}
} else {
DOMEval(node.textContent.replace(rcleanScript, ""), node, doc);
}
}
}
}
}
}
return collection;
}
function remove(elem, selector, keepData) {
var node, nodes = selector ? jQuery.filter(selector, elem) : elem, i = 0;
for (; (node = nodes[i]) != null; i++) {
if (!keepData && node.nodeType === 1) {
jQuery.cleanData(getAll(node));
}
if (node.parentNode) {
if (keepData && isAttached(node)) {
setGlobalEval(getAll(node, "script"));
}
node.parentNode.removeChild(node);
}
}
return elem;
}
jQuery.extend({
htmlPrefilter: function(html) {
return html;
},
clone: function(elem, dataAndEvents, deepDataAndEvents) {
var i, l, srcElements, destElements, clone = elem.cloneNode(true), inPage = isAttached(elem);
if (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem)) {
destElements = getAll(clone);
srcElements = getAll(elem);
for (i = 0,
l = srcElements.length; i < l; i++) {
fixInput(srcElements[i], destElements[i]);
}
}
if (dataAndEvents) {
if (deepDataAndEvents) {
srcElements = srcElements || getAll(elem);
destElements = destElements || getAll(clone);
for (i = 0,
l = srcElements.length; i < l; i++) {
cloneCopyEvent(srcElements[i], destElements[i]);
}
} else {
cloneCopyEvent(elem, clone);
}
}
destElements = getAll(clone, "script");
if (destElements.length > 0) {
setGlobalEval(destElements, !inPage && getAll(elem, "script"));
}
return clone;
},
cleanData: function(elems) {
var data, elem, type, special = jQuery.event.special, i = 0;
for (; (elem = elems[i]) !== undefined; i++) {
if (acceptData(elem)) {
if ((data = elem[dataPriv.expando])) {
if (data.events) {
for (type in data.events) {
if (special[type]) {
jQuery.event.remove(elem, type);
} else {
jQuery.removeEvent(elem, type, data.handle);
}
}
}
elem[dataPriv.expando] = undefined;
}
if (elem[dataUser.expando]) {
elem[dataUser.expando] = undefined;
}
}
}
}
});
jQuery.fn.extend({
detach: function(selector) {
return remove(this, selector, true);
},
remove: function(selector) {
return remove(this, selector);
},
text: function(value) {
return access(this, function(value) {
return value === undefined ? jQuery.text(this) : this.empty().each(function() {
if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {
this.textContent = value;
}
});
}, null, value, arguments.length);
},
append: function() {
return domManip(this, arguments, function(elem) {
if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {
var target = manipulationTarget(this, elem);
target.appendChild(elem);
}
});
},
prepend: function() {
return domManip(this, arguments, function(elem) {
if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {
var target = manipulationTarget(this, elem);
target.insertBefore(elem, target.firstChild);
}
});
},
before: function() {
return domManip(this, arguments, function(elem) {
if (this.parentNode) {
this.parentNode.insertBefore(elem, this);
}
});
},
after: function() {
return domManip(this, arguments, function(elem) {
if (this.parentNode) {
this.parentNode.insertBefore(elem, this.nextSibling);
}
});
},
empty: function() {
var elem, i = 0;
for (; (elem = this[i]) != null; i++) {
if (elem.nodeType === 1) {
jQuery.cleanData(getAll(elem, false));
elem.textContent = "";
}
}
return this;
},
clone: function(dataAndEvents, deepDataAndEvents) {
dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
return this.map(function() {
return jQuery.clone(this, dataAndEvents, deepDataAndEvents);
});
},
html: function(value) {
return access(this, function(value) {
var elem = this[0] || {}
, i = 0
, l = this.length;
if (value === undefined && elem.nodeType === 1) {
return elem.innerHTML;
}
if (typeof value === "string" && !rnoInnerhtml.test(value) && !wrapMap[(rtagName.exec(value) || ["", ""])[1].toLowerCase()]) {
value = jQuery.htmlPrefilter(value);
try {
for (; i < l; i++) {
elem = this[i] || {};
if (elem.nodeType === 1) {
jQuery.cleanData(getAll(elem, false));
elem.innerHTML = value;
}
}
elem = 0;
} catch (e) {}
}
if (elem) {
this.empty().append(value);
}
}, null, value, arguments.length);
},
replaceWith: function() {
var ignored = [];
return domManip(this, arguments, function(elem) {
var parent = this.parentNode;
if (jQuery.inArray(this, ignored) < 0) {
jQuery.cleanData(getAll(this));
if (parent) {
parent.replaceChild(elem, this);
}
}
}, ignored);
}
});
jQuery.each({
appendTo: "append",
prependTo: "prepend",
insertBefore: "before",
insertAfter: "after",
replaceAll: "replaceWith"
}, function(name, original) {
jQuery.fn[name] = function(selector) {
var elems, ret = [], insert = jQuery(selector), last = insert.length - 1, i = 0;
for (; i <= last; i++) {
elems = i === last ? this : this.clone(true);
jQuery(insert[i])[original](elems);
push.apply(ret, elems.get());
}
return this.pushStack(ret);
}
;
});
var rnumnonpx = new RegExp("^(" + pnum + ")(?!px)[a-z%]+$","i");
var rcustomProp = /^--/;
var getStyles = function(elem) {
var view = elem.ownerDocument.defaultView;
if (!view || !view.opener) {
view = window;
}
return view.getComputedStyle(elem);
};
var swap = function(elem, options, callback) {
var ret, name, old = {};
for (name in options) {
old[name] = elem.style[name];
elem.style[name] = options[name];
}
ret = callback.call(elem);
for (name in options) {
elem.style[name] = old[name];
}
return ret;
};
var rboxStyle = new RegExp(cssExpand.join("|"),"i");
(function() {
function computeStyleTests() {
if (!div) {
return;
}
container.style.cssText = "position:absolute;left:-11111px;width:60px;" + "margin-top:1px;padding:0;border:0";
div.style.cssText = "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + "margin:auto;border:1px;padding:1px;" + "width:60%;top:1%";
documentElement.appendChild(container).appendChild(div);
var divStyle = window.getComputedStyle(div);
pixelPositionVal = divStyle.top !== "1%";
reliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12;
div.style.right = "60%";
pixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36;
boxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36;
div.style.position = "absolute";
scrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12;
documentElement.removeChild(container);
div = null;
}
function roundPixelMeasures(measure) {
return Math.round(parseFloat(measure));
}
var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, reliableTrDimensionsVal, reliableMarginLeftVal, container = document.createElement("div"), div = document.createElement("div");
if (!div.style) {
return;
}
div.style.backgroundClip = "content-box";
div.cloneNode(true).style.backgroundClip = "";
support.clearCloneStyle = div.style.backgroundClip === "content-box";
jQuery.extend(support, {
boxSizingReliable: function() {
computeStyleTests();
return boxSizingReliableVal;
},
pixelBoxStyles: function() {
computeStyleTests();
return pixelBoxStylesVal;
},
pixelPosition: function() {
computeStyleTests();
return pixelPositionVal;
},
reliableMarginLeft: function() {
computeStyleTests();
return reliableMarginLeftVal;
},
scrollboxSize: function() {
computeStyleTests();
return scrollboxSizeVal;
},
reliableTrDimensions: function() {
var table, tr, trChild, trStyle;
if (reliableTrDimensionsVal == null) {
table = document.createElement("table");
tr = document.createElement("tr");
trChild = document.createElement("div");
table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate";
tr.style.cssText = "box-sizing:content-box;border:1px solid";
tr.style.height = "1px";
trChild.style.height = "9px";
trChild.style.display = "block";
documentElement.appendChild(table).appendChild(tr).appendChild(trChild);
trStyle = window.getComputedStyle(tr);
reliableTrDimensionsVal = (parseInt(trStyle.height, 10) + parseInt(trStyle.borderTopWidth, 10) + parseInt(trStyle.borderBottomWidth, 10)) === tr.offsetHeight;
documentElement.removeChild(table);
}
return reliableTrDimensionsVal;
}
});
}
)();
function curCSS(elem, name, computed) {
var width, minWidth, maxWidth, ret, isCustomProp = rcustomProp.test(name), style = elem.style;
computed = computed || getStyles(elem);
if (computed) {
ret = computed.getPropertyValue(name) || computed[name];
if (isCustomProp && ret) {
ret = ret.replace(rtrimCSS, "$1") || undefined;
}
if (ret === "" && !isAttached(elem)) {
ret = jQuery.style(elem, name);
}
if (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) {
width = style.width;
minWidth = style.minWidth;
maxWidth = style.maxWidth;
style.minWidth = style.maxWidth = style.width = ret;
ret = computed.width;
style.width = width;
style.minWidth = minWidth;
style.maxWidth = maxWidth;
}
}
return ret !== undefined ? ret + "" : ret;
}
function addGetHookIf(conditionFn, hookFn) {
return {
get: function() {
if (conditionFn()) {
delete this.get;
return;
}
return (this.get = hookFn).apply(this, arguments);
}
};
}
var cssPrefixes = ["Webkit", "Moz", "ms"]
, emptyStyle = document.createElement("div").style
, vendorProps = {};
function vendorPropName(name) {
var capName = name[0].toUpperCase() + name.slice(1)
, i = cssPrefixes.length;
while (i--) {
name = cssPrefixes[i] + capName;
if (name in emptyStyle) {
return name;
}
}
}
function finalPropName(name) {
var final = jQuery.cssProps[name] || vendorProps[name];
if (final) {
return final;
}
if (name in emptyStyle) {
return name;
}
return vendorProps[name] = vendorPropName(name) || name;
}
var rdisplayswap = /^(none|table(?!-c[ea]).+)/
, cssShow = {
position: "absolute",
visibility: "hidden",
display: "block"
}
, cssNormalTransform = {
letterSpacing: "0",
fontWeight: "400"
};
function setPositiveNumber(_elem, value, subtract) {
var matches = rcssNum.exec(value);
return matches ? Math.max(0, matches[2] - (subtract || 0)) + (matches[3] || "px") : value;
}
function boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {
var i = dimension === "width" ? 1 : 0
, extra = 0
, delta = 0
, marginDelta = 0;
if (box === (isBorderBox ? "border" : "content")) {
return 0;
}
for (; i < 4; i += 2) {
if (box === "margin") {
marginDelta += jQuery.css(elem, box + cssExpand[i], true, styles);
}
if (!isBorderBox) {
delta += jQuery.css(elem, "padding" + cssExpand[i], true, styles);
if (box !== "padding") {
delta += jQuery.css(elem, "border" + cssExpand[i] + "Width", true, styles);
} else {
extra += jQuery.css(elem, "border" + cssExpand[i] + "Width", true, styles);
}
} else {
if (box === "content") {
delta -= jQuery.css(elem, "padding" + cssExpand[i], true, styles);
}
if (box !== "margin") {
delta -= jQuery.css(elem, "border" + cssExpand[i] + "Width", true, styles);
}
}
}
if (!isBorderBox && computedVal >= 0) {
delta += Math.max(0, Math.ceil(elem["offset" + dimension[0].toUpperCase() + dimension.slice(1)] - computedVal - delta - extra - 0.5)) || 0;
}
return delta + marginDelta;
}
function getWidthOrHeight(elem, dimension, extra) {
var styles = getStyles(elem)
, boxSizingNeeded = !support.boxSizingReliable() || extra
, isBorderBox = boxSizingNeeded && jQuery.css(elem, "boxSizing", false, styles) === "border-box"
, valueIsBorderBox = isBorderBox
, val = curCSS(elem, dimension, styles)
, offsetProp = "offset" + dimension[0].toUpperCase() + dimension.slice(1);
if (rnumnonpx.test(val)) {
if (!extra) {
return val;
}
val = "auto";
}
if ((!support.boxSizingReliable() && isBorderBox || !support.reliableTrDimensions() && nodeName(elem, "tr") || val === "auto" || !parseFloat(val) && jQuery.css(elem, "display", false, styles) === "inline") && elem.getClientRects().length) {
isBorderBox = jQuery.css(elem, "boxSizing", false, styles) === "border-box";
valueIsBorderBox = offsetProp in elem;
if (valueIsBorderBox) {
val = elem[offsetProp];
}
}
val = parseFloat(val) || 0;
return (val + boxModelAdjustment(elem, dimension, extra || (isBorderBox ? "border" : "content"), valueIsBorderBox, styles, val)) + "px";
}
jQuery.extend({
cssHooks: {
opacity: {
get: function(elem, computed) {
if (computed) {
var ret = curCSS(elem, "opacity");
return ret === "" ? "1" : ret;
}
}
}
},
cssNumber: {
animationIterationCount: true,
aspectRatio: true,
borderImageSlice: true,
columnCount: true,
flexGrow: true,
flexShrink: true,
fontWeight: true,
gridArea: true,
gridColumn: true,
gridColumnEnd: true,
gridColumnStart: true,
gridRow: true,
gridRowEnd: true,
gridRowStart: true,
lineHeight: true,
opacity: true,
order: true,
orphans: true,
scale: true,
widows: true,
zIndex: true,
zoom: true,
fillOpacity: true,
floodOpacity: true,
stopOpacity: true,
strokeMiterlimit: true,
strokeOpacity: true
},
cssProps: {},
style: function(elem, name, value, extra) {
if (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {
return;
}
var ret, type, hooks, origName = camelCase(name), isCustomProp = rcustomProp.test(name), style = elem.style;
if (!isCustomProp) {
name = finalPropName(origName);
}
hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];
if (value !== undefined) {
type = typeof value;
if (type === "string" && (ret = rcssNum.exec(value)) && ret[1]) {
value = adjustCSS(elem, name, ret);
type = "number";
}
if (value == null || value !== value) {
return;
}
if (type === "number" && !isCustomProp) {
value += ret && ret[3] || (jQuery.cssNumber[origName] ? "" : "px");
}
if (!support.clearCloneStyle && value === "" && name.indexOf("background") === 0) {
style[name] = "inherit";
}
if (!hooks || !("set"in hooks) || (value = hooks.set(elem, value, extra)) !== undefined) {
if (isCustomProp) {
style.setProperty(name, value);
} else {
style[name] = value;
}
}
} else {
if (hooks && "get"in hooks && (ret = hooks.get(elem, false, extra)) !== undefined) {
return ret;
}
return style[name];
}
},
css: function(elem, name, extra, styles) {
var val, num, hooks, origName = camelCase(name), isCustomProp = rcustomProp.test(name);
if (!isCustomProp) {
name = finalPropName(origName);
}
hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];
if (hooks && "get"in hooks) {
val = hooks.get(elem, true, extra);
}
if (val === undefined) {
val = curCSS(elem, name, styles);
}
if (val === "normal" && name in cssNormalTransform) {
val = cssNormalTransform[name];
}
if (extra === "" || extra) {
num = parseFloat(val);
return extra === true || isFinite(num) ? num || 0 : val;
}
return val;
}
});
jQuery.each(["height", "width"], function(_i, dimension) {
jQuery.cssHooks[dimension] = {
get: function(elem, computed, extra) {
if (computed) {
return rdisplayswap.test(jQuery.css(elem, "display")) && (!elem.getClientRects().length || !elem.getBoundingClientRect().width) ? swap(elem, cssShow, function() {
return getWidthOrHeight(elem, dimension, extra);
}) : getWidthOrHeight(elem, dimension, extra);
}
},
set: function(elem, value, extra) {
var matches, styles = getStyles(elem), scrollboxSizeBuggy = !support.scrollboxSize() && styles.position === "absolute", boxSizingNeeded = scrollboxSizeBuggy || extra, isBorderBox = boxSizingNeeded && jQuery.css(elem, "boxSizing", false, styles) === "border-box", subtract = extra ? boxModelAdjustment(elem, dimension, extra, isBorderBox, styles) : 0;
if (isBorderBox && scrollboxSizeBuggy) {
subtract -= Math.ceil(elem["offset" + dimension[0].toUpperCase() + dimension.slice(1)] - parseFloat(styles[dimension]) - boxModelAdjustment(elem, dimension, "border", false, styles) - 0.5);
}
if (subtract && (matches = rcssNum.exec(value)) && (matches[3] || "px") !== "px") {
elem.style[dimension] = value;
value = jQuery.css(elem, dimension);
}
return setPositiveNumber(elem, value, subtract);
}
};
});
jQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft, function(elem, computed) {
if (computed) {
return (parseFloat(curCSS(elem, "marginLeft")) || elem.getBoundingClientRect().left - swap(elem, {
marginLeft: 0
}, function() {
return elem.getBoundingClientRect().left;
})) + "px";
}
});
jQuery.each({
margin: "",
padding: "",
border: "Width"
}, function(prefix, suffix) {
jQuery.cssHooks[prefix + suffix] = {
expand: function(value) {
var i = 0
, expanded = {}
, parts = typeof value === "string" ? value.split(" ") : [value];
for (; i < 4; i++) {
expanded[prefix + cssExpand[i] + suffix] = parts[i] || parts[i - 2] || parts[0];
}
return expanded;
}
};
if (prefix !== "margin") {
jQuery.cssHooks[prefix + suffix].set = setPositiveNumber;
}
});
jQuery.fn.extend({
css: function(name, value) {
return access(this, function(elem, name, value) {
var styles, len, map = {}, i = 0;
if (Array.isArray(name)) {
styles = getStyles(elem);
len = name.length;
for (; i < len; i++) {
map[name[i]] = jQuery.css(elem, name[i], false, styles);
}
return map;
}
return value !== undefined ? jQuery.style(elem, name, value) : jQuery.css(elem, name);
}, name, value, arguments.length > 1);
}
});
function Tween(elem, options, prop, end, easing) {
return new Tween.prototype.init(elem,options,prop,end,easing);
}
jQuery.Tween = Tween;
Tween.prototype = {
constructor: Tween,
init: function(elem, options, prop, end, easing, unit) {
this.elem = elem;
this.prop = prop;
this.easing = easing || jQuery.easing._default;
this.options = options;
this.start = this.now = this.cur();
this.end = end;
this.unit = unit || (jQuery.cssNumber[prop] ? "" : "px");
},
cur: function() {
var hooks = Tween.propHooks[this.prop];
return hooks && hooks.get ? hooks.get(this) : Tween.propHooks._default.get(this);
},
run: function(percent) {
var eased, hooks = Tween.propHooks[this.prop];
if (this.options.duration) {
this.pos = eased = jQuery.easing[this.easing](percent, this.options.duration * percent, 0, 1, this.options.duration);
} else {
this.pos = eased = percent;
}
this.now = (this.end - this.start) * eased + this.start;
if (this.options.step) {
this.options.step.call(this.elem, this.now, this);
}
if (hooks && hooks.set) {
hooks.set(this);
} else {
Tween.propHooks._default.set(this);
}
return this;
}
};
Tween.prototype.init.prototype = Tween.prototype;
Tween.propHooks = {
_default: {
get: function(tween) {
var result;
if (tween.elem.nodeType !== 1 || tween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) {
return tween.elem[tween.prop];
}
result = jQuery.css(tween.elem, tween.prop, "");
return !result || result === "auto" ? 0 : result;
},
set: function(tween) {
if (jQuery.fx.step[tween.prop]) {
jQuery.fx.step[tween.prop](tween);
} else if (tween.elem.nodeType === 1 && (jQuery.cssHooks[tween.prop] || tween.elem.style[finalPropName(tween.prop)] != null)) {
jQuery.style(tween.elem, tween.prop, tween.now + tween.unit);
} else {
tween.elem[tween.prop] = tween.now;
}
}
}
};
Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
set: function(tween) {
if (tween.elem.nodeType && tween.elem.parentNode) {
tween.elem[tween.prop] = tween.now;
}
}
};
jQuery.easing = {
linear: function(p) {
return p;
},
swing: function(p) {
return 0.5 - Math.cos(p * Math.PI) / 2;
},
_default: "swing"
};
jQuery.fx = Tween.prototype.init;
jQuery.fx.step = {};
var fxNow, inProgress, rfxtypes = /^(?:toggle|show|hide)$/, rrun = /queueHooks$/;
function schedule() {
if (inProgress) {
if (document.hidden === false && window.requestAnimationFrame) {
window.requestAnimationFrame(schedule);
} else {
window.setTimeout(schedule, jQuery.fx.interval);
}
jQuery.fx.tick();
}
}
function createFxNow() {
window.setTimeout(function() {
fxNow = undefined;
});
return (fxNow = Date.now());
}
function genFx(type, includeWidth) {
var which, i = 0, attrs = {
height: type
};
includeWidth = includeWidth ? 1 : 0;
for (; i < 4; i += 2 - includeWidth) {
which = cssExpand[i];
attrs["margin" + which] = attrs["padding" + which] = type;
}
if (includeWidth) {
attrs.opacity = attrs.width = type;
}
return attrs;
}
function createTween(value, prop, animation) {
var tween, collection = (Animation.tweeners[prop] || []).concat(Animation.tweeners["*"]), index = 0, length = collection.length;
for (; index < length; index++) {
if ((tween = collection[index].call(animation, prop, value))) {
return tween;
}
}
}
function defaultPrefilter(elem, props, opts) {
var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, isBox = "width"in props || "height"in props, anim = this, orig = {}, style = elem.style, hidden = elem.nodeType && isHiddenWithinTree(elem), dataShow = dataPriv.get(elem, "fxshow");
if (!opts.queue) {
hooks = jQuery._queueHooks(elem, "fx");
if (hooks.unqueued == null) {
hooks.unqueued = 0;
oldfire = hooks.empty.fire;
hooks.empty.fire = function() {
if (!hooks.unqueued) {
oldfire();
}
}
;
}
hooks.unqueued++;
anim.always(function() {
anim.always(function() {
hooks.unqueued--;
if (!jQuery.queue(elem, "fx").length) {
hooks.empty.fire();
}
});
});
}
for (prop in props) {
value = props[prop];
if (rfxtypes.test(value)) {
delete props[prop];
toggle = toggle || value === "toggle";
if (value === (hidden ? "hide" : "show")) {
if (value === "show" && dataShow && dataShow[prop] !== undefined) {
hidden = true;
} else {
continue;
}
}
orig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);
}
}
propTween = !jQuery.isEmptyObject(props);
if (!propTween && jQuery.isEmptyObject(orig)) {
return;
}
if (isBox && elem.nodeType === 1) {
opts.overflow = [style.overflow, style.overflowX, style.overflowY];
restoreDisplay = dataShow && dataShow.display;
if (restoreDisplay == null) {
restoreDisplay = dataPriv.get(elem, "display");
}
display = jQuery.css(elem, "display");
if (display === "none") {
if (restoreDisplay) {
display = restoreDisplay;
} else {
showHide([elem], true);
restoreDisplay = elem.style.display || restoreDisplay;
display = jQuery.css(elem, "display");
showHide([elem]);
}
}
if (display === "inline" || display === "inline-block" && restoreDisplay != null) {
if (jQuery.css(elem, "float") === "none") {
if (!propTween) {
anim.done(function() {
style.display = restoreDisplay;
});
if (restoreDisplay == null) {
display = style.display;
restoreDisplay = display === "none" ? "" : display;
}
}
style.display = "inline-block";
}
}
}
if (opts.overflow) {
style.overflow = "hidden";
anim.always(function() {
style.overflow = opts.overflow[0];
style.overflowX = opts.overflow[1];
style.overflowY = opts.overflow[2];
});
}
propTween = false;
for (prop in orig) {
if (!propTween) {
if (dataShow) {
if ("hidden"in dataShow) {
hidden = dataShow.hidden;
}
} else {
dataShow = dataPriv.access(elem, "fxshow", {
display: restoreDisplay
});
}
if (toggle) {
dataShow.hidden = !hidden;
}
if (hidden) {
showHide([elem], true);
}
anim.done(function() {
if (!hidden) {
showHide([elem]);
}
dataPriv.remove(elem, "fxshow");
for (prop in orig) {
jQuery.style(elem, prop, orig[prop]);
}
});
}
propTween = createTween(hidden ? dataShow[prop] : 0, prop, anim);
if (!(prop in dataShow)) {
dataShow[prop] = propTween.start;
if (hidden) {
propTween.end = propTween.start;
propTween.start = 0;
}
}
}
}
function propFilter(props, specialEasing) {
var index, name, easing, value, hooks;
for (index in props) {
name = camelCase(index);
easing = specialEasing[name];
value = props[index];
if (Array.isArray(value)) {
easing = value[1];
value = props[index] = value[0];
}
if (index !== name) {
props[name] = value;
delete props[index];
}
hooks = jQuery.cssHooks[name];
if (hooks && "expand"in hooks) {
value = hooks.expand(value);
delete props[name];
for (index in value) {
if (!(index in props)) {
props[index] = value[index];
specialEasing[index] = easing;
}
}
} else {
specialEasing[name] = easing;
}
}
}
function Animation(elem, properties, options) {
var result, stopped, index = 0, length = Animation.prefilters.length, deferred = jQuery.Deferred().always(function() {
delete tick.elem;
}), tick = function() {
if (stopped) {
return false;
}
var currentTime = fxNow || createFxNow()
, remaining = Math.max(0, animation.startTime + animation.duration - currentTime)
, temp = remaining / animation.duration || 0
, percent = 1 - temp
, index = 0
, length = animation.tweens.length;
for (; index < length; index++) {
animation.tweens[index].run(percent);
}
deferred.notifyWith(elem, [animation, percent, remaining]);
if (percent < 1 && length) {
return remaining;
}
if (!length) {
deferred.notifyWith(elem, [animation, 1, 0]);
}
deferred.resolveWith(elem, [animation]);
return false;
}, animation = deferred.promise({
elem: elem,
props: jQuery.extend({}, properties),
opts: jQuery.extend(true, {
specialEasing: {},
easing: jQuery.easing._default
}, options),
originalProperties: properties,
originalOptions: options,
startTime: fxNow || createFxNow(),
duration: options.duration,
tweens: [],
createTween: function(prop, end) {
var tween = jQuery.Tween(elem, animation.opts, prop, end, animation.opts.specialEasing[prop] || animation.opts.easing);
animation.tweens.push(tween);
return tween;
},
stop: function(gotoEnd) {
var index = 0
, length = gotoEnd ? animation.tweens.length : 0;
if (stopped) {
return this;
}
stopped = true;
for (; index < length; index++) {
animation.tweens[index].run(1);
}
if (gotoEnd) {
deferred.notifyWith(elem, [animation, 1, 0]);
deferred.resolveWith(elem, [animation, gotoEnd]);
} else {
deferred.rejectWith(elem, [animation, gotoEnd]);
}
return this;
}
}), props = animation.props;
propFilter(props, animation.opts.specialEasing);
for (; index < length; index++) {
result = Animation.prefilters[index].call(animation, elem, props, animation.opts);
if (result) {
if (isFunction(result.stop)) {
jQuery._queueHooks(animation.elem, animation.opts.queue).stop = result.stop.bind(result);
}
return result;
}
}
jQuery.map(props, createTween, animation);
if (isFunction(animation.opts.start)) {
animation.opts.start.call(elem, animation);
}
animation.progress(animation.opts.progress).done(animation.opts.done, animation.opts.complete).fail(animation.opts.fail).always(animation.opts.always);
jQuery.fx.timer(jQuery.extend(tick, {
elem: elem,
anim: animation,
queue: animation.opts.queue
}));
return animation;
}
jQuery.Animation = jQuery.extend(Animation, {
tweeners: {
"*": [function(prop, value) {
var tween = this.createTween(prop, value);
adjustCSS(tween.elem, prop, rcssNum.exec(value), tween);
return tween;
}
]
},
tweener: function(props, callback) {
if (isFunction(props)) {
callback = props;
props = ["*"];
} else {
props = props.match(rnothtmlwhite);
}
var prop, index = 0, length = props.length;
for (; index < length; index++) {
prop = props[index];
Animation.tweeners[prop] = Animation.tweeners[prop] || [];
Animation.tweeners[prop].unshift(callback);
}
},
prefilters: [defaultPrefilter],
prefilter: function(callback, prepend) {
if (prepend) {
Animation.prefilters.unshift(callback);
} else {
Animation.prefilters.push(callback);
}
}
});
jQuery.speed = function(speed, easing, fn) {
var opt = speed && typeof speed === "object" ? jQuery.extend({}, speed) : {
complete: fn || !fn && easing || isFunction(speed) && speed,
duration: speed,
easing: fn && easing || easing && !isFunction(easing) && easing
};
if (jQuery.fx.off) {
opt.duration = 0;
} else {
if (typeof opt.duration !== "number") {
if (opt.duration in jQuery.fx.speeds) {
opt.duration = jQuery.fx.speeds[opt.duration];
} else {
opt.duration = jQuery.fx.speeds._default;
}
}
}
if (opt.queue == null || opt.queue === true) {
opt.queue = "fx";
}
opt.old = opt.complete;
opt.complete = function() {
if (isFunction(opt.old)) {
opt.old.call(this);
}
if (opt.queue) {
jQuery.dequeue(this, opt.queue);
}
}
;
return opt;
}
;
jQuery.fn.extend({
fadeTo: function(speed, to, easing, callback) {
return this.filter(isHiddenWithinTree).css("opacity", 0).show().end().animate({
opacity: to
}, speed, easing, callback);
},
animate: function(prop, speed, easing, callback) {
var empty = jQuery.isEmptyObject(prop)
, optall = jQuery.speed(speed, easing, callback)
, doAnimation = function() {
var anim = Animation(this, jQuery.extend({}, prop), optall);
if (empty || dataPriv.get(this, "finish")) {
anim.stop(true);
}
};
doAnimation.finish = doAnimation;
return empty || optall.queue === false ? this.each(doAnimation) : this.queue(optall.queue, doAnimation);
},
stop: function(type, clearQueue, gotoEnd) {
var stopQueue = function(hooks) {
var stop = hooks.stop;
delete hooks.stop;
stop(gotoEnd);
};
if (typeof type !== "string") {
gotoEnd = clearQueue;
clearQueue = type;
type = undefined;
}
if (clearQueue) {
this.queue(type || "fx", []);
}
return this.each(function() {
var dequeue = true
, index = type != null && type + "queueHooks"
, timers = jQuery.timers
, data = dataPriv.get(this);
if (index) {
if (data[index] && data[index].stop) {
stopQueue(data[index]);
}
} else {
for (index in data) {
if (data[index] && data[index].stop && rrun.test(index)) {
stopQueue(data[index]);
}
}
}
for (index = timers.length; index--; ) {
if (timers[index].elem === this && (type == null || timers[index].queue === type)) {
timers[index].anim.stop(gotoEnd);
dequeue = false;
timers.splice(index, 1);
}
}
if (dequeue || !gotoEnd) {
jQuery.dequeue(this, type);
}
});
},
finish: function(type) {
if (type !== false) {
type = type || "fx";
}
return this.each(function() {
var index, data = dataPriv.get(this), queue = data[type + "queue"], hooks = data[type + "queueHooks"], timers = jQuery.timers, length = queue ? queue.length : 0;
data.finish = true;
jQuery.queue(this, type, []);
if (hooks && hooks.stop) {
hooks.stop.call(this, true);
}
for (index = timers.length; index--; ) {
if (timers[index].elem === this && timers[index].queue === type) {
timers[index].anim.stop(true);
timers.splice(index, 1);
}
}
for (index = 0; index < length; index++) {
if (queue[index] && queue[index].finish) {
queue[index].finish.call(this);
}
}
delete data.finish;
});
}
});
jQuery.each(["toggle", "show", "hide"], function(_i, name) {
var cssFn = jQuery.fn[name];
jQuery.fn[name] = function(speed, easing, callback) {
return speed == null || typeof speed === "boolean" ? cssFn.apply(this, arguments) : this.animate(genFx(name, true), speed, easing, callback);
}
;
});
jQuery.each({
slideDown: genFx("show"),
slideUp: genFx("hide"),
slideToggle: genFx("toggle"),
fadeIn: {
opacity: "show"
},
fadeOut: {
opacity: "hide"
},
fadeToggle: {
opacity: "toggle"
}
}, function(name, props) {
jQuery.fn[name] = function(speed, easing, callback) {
return this.animate(props, speed, easing, callback);
}
;
});
jQuery.timers = [];
jQuery.fx.tick = function() {
var timer, i = 0, timers = jQuery.timers;
fxNow = Date.now();
for (; i < timers.length; i++) {
timer = timers[i];
if (!timer() && timers[i] === timer) {
timers.splice(i--, 1);
}
}
if (!timers.length) {
jQuery.fx.stop();
}
fxNow = undefined;
}
;
jQuery.fx.timer = function(timer) {
jQuery.timers.push(timer);
jQuery.fx.start();
}
;
jQuery.fx.interval = 13;
jQuery.fx.start = function() {
if (inProgress) {
return;
}
inProgress = true;
schedule();
}
;
jQuery.fx.stop = function() {
inProgress = null;
}
;
jQuery.fx.speeds = {
slow: 600,
fast: 200,
_default: 400
};
jQuery.fn.delay = function(time, type) {
time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
type = type || "fx";
return this.queue(type, function(next, hooks) {
var timeout = window.setTimeout(next, time);
hooks.stop = function() {
window.clearTimeout(timeout);
}
;
});
}
;
(function() {
var input = document.createElement("input")
, select = document.createElement("select")
, opt = select.appendChild(document.createElement("option"));
input.type = "checkbox";
support.checkOn = input.value !== "";
support.optSelected = opt.selected;
input = document.createElement("input");
input.value = "t";
input.type = "radio";
support.radioValue = input.value === "t";
}
)();
var boolHook, attrHandle = jQuery.expr.attrHandle;
jQuery.fn.extend({
attr: function(name, value) {
return access(this, jQuery.attr, name, value, arguments.length > 1);
},
removeAttr: function(name) {
return this.each(function() {
jQuery.removeAttr(this, name);
});
}
});
jQuery.extend({
attr: function(elem, name, value) {
var ret, hooks, nType = elem.nodeType;
if (nType === 3 || nType === 8 || nType === 2) {
return;
}
if (typeof elem.getAttribute === "undefined") {
return jQuery.prop(elem, name, value);
}
if (nType !== 1 || !jQuery.isXMLDoc(elem)) {
hooks = jQuery.attrHooks[name.toLowerCase()] || (jQuery.expr.match.bool.test(name) ? boolHook : undefined);
}
if (value !== undefined) {
if (value === null) {
jQuery.removeAttr(elem, name);
return;
}
if (hooks && "set"in hooks && (ret = hooks.set(elem, value, name)) !== undefined) {
return ret;
}
elem.setAttribute(name, value + "");
return value;
}
if (hooks && "get"in hooks && (ret = hooks.get(elem, name)) !== null) {
return ret;
}
ret = jQuery.find.attr(elem, name);
return ret == null ? undefined : ret;
},
attrHooks: {
type: {
set: function(elem, value) {
if (!support.radioValue && value === "radio" && nodeName(elem, "input")) {
var val = elem.value;
elem.setAttribute("type", value);
if (val) {
elem.value = val;
}
return value;
}
}
}
},
removeAttr: function(elem, value) {
var name, i = 0, attrNames = value && value.match(rnothtmlwhite);
if (attrNames && elem.nodeType === 1) {
while ((name = attrNames[i++])) {
elem.removeAttribute(name);
}
}
}
});
boolHook = {
set: function(elem, value, name) {
if (value === false) {
jQuery.removeAttr(elem, name);
} else {
elem.setAttribute(name, name);
}
return name;
}
};
jQuery.each(jQuery.expr.match.bool.source.match(/\w+/g), function(_i, name) {
var getter = attrHandle[name] || jQuery.find.attr;
attrHandle[name] = function(elem, name, isXML) {
var ret, handle, lowercaseName = name.toLowerCase();
if (!isXML) {
handle = attrHandle[lowercaseName];
attrHandle[lowercaseName] = ret;
ret = getter(elem, name, isXML) != null ? lowercaseName : null;
attrHandle[lowercaseName] = handle;
}
return ret;
}
;
});
var rfocusable = /^(?:input|select|textarea|button)$/i
, rclickable = /^(?:a|area)$/i;
jQuery.fn.extend({
prop: function(name, value) {
return access(this, jQuery.prop, name, value, arguments.length > 1);
},
removeProp: function(name) {
return this.each(function() {
delete this[jQuery.propFix[name] || name];
});
}
});
jQuery.extend({
prop: function(elem, name, value) {
var ret, hooks, nType = elem.nodeType;
if (nType === 3 || nType === 8 || nType === 2) {
return;
}
if (nType !== 1 || !jQuery.isXMLDoc(elem)) {
name = jQuery.propFix[name] || name;
hooks = jQuery.propHooks[name];
}
if (value !== undefined) {
if (hooks && "set"in hooks && (ret = hooks.set(elem, value, name)) !== undefined) {
return ret;
}
return (elem[name] = value);
}
if (hooks && "get"in hooks && (ret = hooks.get(elem, name)) !== null) {
return ret;
}
return elem[name];
},
propHooks: {
tabIndex: {
get: function(elem) {
var tabindex = jQuery.find.attr(elem, "tabindex");
if (tabindex) {
return parseInt(tabindex, 10);
}
if (rfocusable.test(elem.nodeName) || rclickable.test(elem.nodeName) && elem.href) {
return 0;
}
return -1;
}
}
},
propFix: {
"for": "htmlFor",
"class": "className"
}
});
if (!support.optSelected) {
jQuery.propHooks.selected = {
get: function(elem) {
var parent = elem.parentNode;
if (parent && parent.parentNode) {
parent.parentNode.selectedIndex;
}
return null;
},
set: function(elem) {
var parent = elem.parentNode;
if (parent) {
parent.selectedIndex;
if (parent.parentNode) {
parent.parentNode.selectedIndex;
}
}
}
};
}
jQuery.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function() {
jQuery.propFix[this.toLowerCase()] = this;
});
function stripAndCollapse(value) {
var tokens = value.match(rnothtmlwhite) || [];
return tokens.join(" ");
}
function getClass(elem) {
return elem.getAttribute && elem.getAttribute("class") || "";
}
function classesToArray(value) {
if (Array.isArray(value)) {
return value;
}
if (typeof value === "string") {
return value.match(rnothtmlwhite) || [];
}
return [];
}
jQuery.fn.extend({
addClass: function(value) {
var classNames, cur, curValue, className, i, finalValue;
if (isFunction(value)) {
return this.each(function(j) {
jQuery(this).addClass(value.call(this, j, getClass(this)));
});
}
classNames = classesToArray(value);
if (classNames.length) {
return this.each(function() {
curValue = getClass(this);
cur = this.nodeType === 1 && (" " + stripAndCollapse(curValue) + " ");
if (cur) {
for (i = 0; i < classNames.length; i++) {
className = classNames[i];
if (cur.indexOf(" " + className + " ") < 0) {
cur += className + " ";
}
}
finalValue = stripAndCollapse(cur);
if (curValue !== finalValue) {
this.setAttribute("class", finalValue);
}
}
});
}
return this;
},
removeClass: function(value) {
var classNames, cur, curValue, className, i, finalValue;
if (isFunction(value)) {
return this.each(function(j) {
jQuery(this).removeClass(value.call(this, j, getClass(this)));
});
}
if (!arguments.length) {
return this.attr("class", "");
}
classNames = classesToArray(value);
if (classNames.length) {
return this.each(function() {
curValue = getClass(this);
cur = this.nodeType === 1 && (" " + stripAndCollapse(curValue) + " ");
if (cur) {
for (i = 0; i < classNames.length; i++) {
className = classNames[i];
while (cur.indexOf(" " + className + " ") > -1) {
cur = cur.replace(" " + className + " ", " ");
}
}
finalValue = stripAndCollapse(cur);
if (curValue !== finalValue) {
this.setAttribute("class", finalValue);
}
}
});
}
return this;
},
toggleClass: function(value, stateVal) {
var classNames, className, i, self, type = typeof value, isValidValue = type === "string" || Array.isArray(value);
if (isFunction(value)) {
return this.each(function(i) {
jQuery(this).toggleClass(value.call(this, i, getClass(this), stateVal), stateVal);
});
}
if (typeof stateVal === "boolean" && isValidValue) {
return stateVal ? this.addClass(value) : this.removeClass(value);
}
classNames = classesToArray(value);
return this.each(function() {
if (isValidValue) {
self = jQuery(this);
for (i = 0; i < classNames.length; i++) {
className = classNames[i];
if (self.hasClass(className)) {
self.removeClass(className);
} else {
self.addClass(className);
}
}
} else if (value === undefined || type === "boolean") {
className = getClass(this);
if (className) {
dataPriv.set(this, "__className__", className);
}
if (this.setAttribute) {
this.setAttribute("class", className || value === false ? "" : dataPriv.get(this, "__className__") || "");
}
}
});
},
hasClass: function(selector) {
var className, elem, i = 0;
className = " " + selector + " ";
while ((elem = this[i++])) {
if (elem.nodeType === 1 && (" " + stripAndCollapse(getClass(elem)) + " ").indexOf(className) > -1) {
return true;
}
}
return false;
}
});
var rreturn = /\r/g;
jQuery.fn.extend({
val: function(value) {
var hooks, ret, valueIsFunction, elem = this[0];
if (!arguments.length) {
if (elem) {
hooks = jQuery.valHooks[elem.type] || jQuery.valHooks[elem.nodeName.toLowerCase()];
if (hooks && "get"in hooks && (ret = hooks.get(elem, "value")) !== undefined) {
return ret;
}
ret = elem.value;
if (typeof ret === "string") {
return ret.replace(rreturn, "");
}
return ret == null ? "" : ret;
}
return;
}
valueIsFunction = isFunction(value);
return this.each(function(i) {
var val;
if (this.nodeType !== 1) {
return;
}
if (valueIsFunction) {
val = value.call(this, i, jQuery(this).val());
} else {
val = value;
}
if (val == null) {
val = "";
} else if (typeof val === "number") {
val += "";
} else if (Array.isArray(val)) {
val = jQuery.map(val, function(value) {
return value == null ? "" : value + "";
});
}
hooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()];
if (!hooks || !("set"in hooks) || hooks.set(this, val, "value") === undefined) {
this.value = val;
}
});
}
});
jQuery.extend({
valHooks: {
option: {
get: function(elem) {
var val = jQuery.find.attr(elem, "value");
return val != null ? val : stripAndCollapse(jQuery.text(elem));
}
},
select: {
get: function(elem) {
var value, option, i, options = elem.options, index = elem.selectedIndex, one = elem.type === "select-one", values = one ? null : [], max = one ? index + 1 : options.length;
if (index < 0) {
i = max;
} else {
i = one ? index : 0;
}
for (; i < max; i++) {
option = options[i];
if ((option.selected || i === index) && !option.disabled && (!option.parentNode.disabled || !nodeName(option.parentNode, "optgroup"))) {
value = jQuery(option).val();
if (one) {
return value;
}
values.push(value);
}
}
return values;
},
set: function(elem, value) {
var optionSet, option, options = elem.options, values = jQuery.makeArray(value), i = options.length;
while (i--) {
option = options[i];
if (option.selected = jQuery.inArray(jQuery.valHooks.option.get(option), values) > -1) {
optionSet = true;
}
}
if (!optionSet) {
elem.selectedIndex = -1;
}
return values;
}
}
}
});
jQuery.each(["radio", "checkbox"], function() {
jQuery.valHooks[this] = {
set: function(elem, value) {
if (Array.isArray(value)) {
return (elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1);
}
}
};
if (!support.checkOn) {
jQuery.valHooks[this].get = function(elem) {
return elem.getAttribute("value") === null ? "on" : elem.value;
}
;
}
});
var location = window.location;
var nonce = {
guid: Date.now()
};
var rquery = (/\?/);
jQuery.parseXML = function(data) {
var xml, parserErrorElem;
if (!data || typeof data !== "string") {
return null;
}
try {
xml = (new window.DOMParser()).parseFromString(data, "text/xml");
} catch (e) {}
parserErrorElem = xml && xml.getElementsByTagName("parsererror")[0];
if (!xml || parserErrorElem) {
jQuery.error("Invalid XML: " + (parserErrorElem ? jQuery.map(parserErrorElem.childNodes, function(el) {
return el.textContent;
}).join("\n") : data));
}
return xml;
}
;
var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/
, stopPropagationCallback = function(e) {
e.stopPropagation();
};
jQuery.extend(jQuery.event, {
trigger: function(event, data, elem, onlyHandlers) {
var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, eventPath = [elem || document], type = hasOwn.call(event, "type") ? event.type : event, namespaces = hasOwn.call(event, "namespace") ? event.namespace.split(".") : [];
cur = lastElement = tmp = elem = elem || document;
if (elem.nodeType === 3 || elem.nodeType === 8) {
return;
}
if (rfocusMorph.test(type + jQuery.event.triggered)) {
return;
}
if (type.indexOf(".") > -1) {
namespaces = type.split(".");
type = namespaces.shift();
namespaces.sort();
}
ontype = type.indexOf(":") < 0 && "on" + type;
event = event[jQuery.expando] ? event : new jQuery.Event(type,typeof event === "object" && event);
event.isTrigger = onlyHandlers ? 2 : 3;
event.namespace = namespaces.join(".");
event.rnamespace = event.namespace ? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)") : null;
event.result = undefined;
if (!event.target) {
event.target = elem;
}
data = data == null ? [event] : jQuery.makeArray(data, [event]);
special = jQuery.event.special[type] || {};
if (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {
return;
}
if (!onlyHandlers && !special.noBubble && !isWindow(elem)) {
bubbleType = special.delegateType || type;
if (!rfocusMorph.test(bubbleType + type)) {
cur = cur.parentNode;
}
for (; cur; cur = cur.parentNode) {
eventPath.push(cur);
tmp = cur;
}
if (tmp === (elem.ownerDocument || document)) {
eventPath.push(tmp.defaultView || tmp.parentWindow || window);
}
}
i = 0;
while ((cur = eventPath[i++]) && !event.isPropagationStopped()) {
lastElement = cur;
event.type = i > 1 ? bubbleType : special.bindType || type;
handle = (dataPriv.get(cur, "events") || Object.create(null))[event.type] && dataPriv.get(cur, "handle");
if (handle) {
handle.apply(cur, data);
}
handle = ontype && cur[ontype];
if (handle && handle.apply && acceptData(cur)) {
event.result = handle.apply(cur, data);
if (event.result === false) {
event.preventDefault();
}
}
}
event.type = type;
if (!onlyHandlers && !event.isDefaultPrevented()) {
if ((!special._default || special._default.apply(eventPath.pop(), data) === false) && acceptData(elem)) {
if (ontype && isFunction(elem[type]) && !isWindow(elem)) {
tmp = elem[ontype];
if (tmp) {
elem[ontype] = null;
}
jQuery.event.triggered = type;
if (event.isPropagationStopped()) {
lastElement.addEventListener(type, stopPropagationCallback);
}
elem[type]();
if (event.isPropagationStopped()) {
lastElement.removeEventListener(type, stopPropagationCallback);
}
jQuery.event.triggered = undefined;
if (tmp) {
elem[ontype] = tmp;
}
}
}
}
return event.result;
},
simulate: function(type, elem, event) {
var e = jQuery.extend(new jQuery.Event(), event, {
type: type,
isSimulated: true
});
jQuery.event.trigger(e, null, elem);
}
});
jQuery.fn.extend({
trigger: function(type, data) {
return this.each(function() {
jQuery.event.trigger(type, data, this);
});
},
triggerHandler: function(type, data) {
var elem = this[0];
if (elem) {
return jQuery.event.trigger(type, data, elem, true);
}
}
});
var rbracket = /\[\]$/
, rCRLF = /\r?\n/g
, rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i
, rsubmittable = /^(?:input|select|textarea|keygen)/i;
function buildParams(prefix, obj, traditional, add) {
var name;
if (Array.isArray(obj)) {
jQuery.each(obj, function(i, v) {
if (traditional || rbracket.test(prefix)) {
add(prefix, v);
} else {
buildParams(prefix + "[" + (typeof v === "object" && v != null ? i : "") + "]", v, traditional, add);
}
});
} else if (!traditional && toType(obj) === "object") {
for (name in obj) {
buildParams(prefix + "[" + name + "]", obj[name], traditional, add);
}
} else {
add(prefix, obj);
}
}
jQuery.param = function(a, traditional) {
var prefix, s = [], add = function(key, valueOrFunction) {
var value = isFunction(valueOrFunction) ? valueOrFunction() : valueOrFunction;
s[s.length] = encodeURIComponent(key) + "=" + encodeURIComponent(value == null ? "" : value);
};
if (a == null) {
return "";
}
if (Array.isArray(a) || (a.jquery && !jQuery.isPlainObject(a))) {
jQuery.each(a, function() {
add(this.name, this.value);
});
} else {
for (prefix in a) {
buildParams(prefix, a[prefix], traditional, add);
}
}
return s.join("&");
}
;
jQuery.fn.extend({
serialize: function() {
return jQuery.param(this.serializeArray());
},
serializeArray: function() {
return this.map(function() {
var elements = jQuery.prop(this, "elements");
return elements ? jQuery.makeArray(elements) : this;
}).filter(function() {
var type = this.type;
return this.name && !jQuery(this).is(":disabled") && rsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) && (this.checked || !rcheckableType.test(type));
}).map(function(_i, elem) {
var val = jQuery(this).val();
if (val == null) {
return null;
}
if (Array.isArray(val)) {
return jQuery.map(val, function(val) {
return {
name: elem.name,
value: val.replace(rCRLF, "\r\n")
};
});
}
return {
name: elem.name,
value: val.replace(rCRLF, "\r\n")
};
}).get();
}
});
var r20 = /%20/g
, rhash = /#.*$/
, rantiCache = /([?&])_=[^&]*/
, rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg
, rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/
, rnoContent = /^(?:GET|HEAD)$/
, rprotocol = /^\/\//
, prefilters = {}
, transports = {}
, allTypes = "*/".concat("*")
, originAnchor = document.createElement("a");
originAnchor.href = location.href;
function addToPrefiltersOrTransports(structure) {
return function(dataTypeExpression, func) {
if (typeof dataTypeExpression !== "string") {
func = dataTypeExpression;
dataTypeExpression = "*";
}
var dataType, i = 0, dataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || [];
if (isFunction(func)) {
while ((dataType = dataTypes[i++])) {
if (dataType[0] === "+") {
dataType = dataType.slice(1) || "*";
(structure[dataType] = structure[dataType] || []).unshift(func);
} else {
(structure[dataType] = structure[dataType] || []).push(func);
}
}
}
}
;
}
function inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {
var inspected = {}
, seekingTransport = (structure === transports);
function inspect(dataType) {
var selected;
inspected[dataType] = true;
jQuery.each(structure[dataType] || [], function(_, prefilterOrFactory) {
var dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);
if (typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[dataTypeOrTransport]) {
options.dataTypes.unshift(dataTypeOrTransport);
inspect(dataTypeOrTransport);
return false;
} else if (seekingTransport) {
return !(selected = dataTypeOrTransport);
}
});
return selected;
}
return inspect(options.dataTypes[0]) || !inspected["*"] && inspect("*");
}
function ajaxExtend(target, src) {
var key, deep, flatOptions = jQuery.ajaxSettings.flatOptions || {};
for (key in src) {
if (src[key] !== undefined) {
(flatOptions[key] ? target : (deep || (deep = {})))[key] = src[key];
}
}
if (deep) {
jQuery.extend(true, target, deep);
}
return target;
}
function ajaxHandleResponses(s, jqXHR, responses) {
var ct, type, finalDataType, firstDataType, contents = s.contents, dataTypes = s.dataTypes;
while (dataTypes[0] === "*") {
dataTypes.shift();
if (ct === undefined) {
ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
}
}
if (ct) {
for (type in contents) {
if (contents[type] && contents[type].test(ct)) {
dataTypes.unshift(type);
break;
}
}
}
if (dataTypes[0]in responses) {
finalDataType = dataTypes[0];
} else {
for (type in responses) {
if (!dataTypes[0] || s.converters[type + " " + dataTypes[0]]) {
finalDataType = type;
break;
}
if (!firstDataType) {
firstDataType = type;
}
}
finalDataType = finalDataType || firstDataType;
}
if (finalDataType) {
if (finalDataType !== dataTypes[0]) {
dataTypes.unshift(finalDataType);
}
return responses[finalDataType];
}
}
function ajaxConvert(s, response, jqXHR, isSuccess) {
var conv2, current, conv, tmp, prev, converters = {}, dataTypes = s.dataTypes.slice();
if (dataTypes[1]) {
for (conv in s.converters) {
converters[conv.toLowerCase()] = s.converters[conv];
}
}
current = dataTypes.shift();
while (current) {
if (s.responseFields[current]) {
jqXHR[s.responseFields[current]] = response;
}
if (!prev && isSuccess && s.dataFilter) {
response = s.dataFilter(response, s.dataType);
}
prev = current;
current = dataTypes.shift();
if (current) {
if (current === "*") {
current = prev;
} else if (prev !== "*" && prev !== current) {
conv = converters[prev + " " + current] || converters["* " + current];
if (!conv) {
for (conv2 in converters) {
tmp = conv2.split(" ");
if (tmp[1] === current) {
conv = converters[prev + " " + tmp[0]] || converters["* " + tmp[0]];
if (conv) {
if (conv === true) {
conv = converters[conv2];
} else if (converters[conv2] !== true) {
current = tmp[0];
dataTypes.unshift(tmp[1]);
}
break;
}
}
}
}
if (conv !== true) {
if (conv && s.throws) {
response = conv(response);
} else {
try {
response = conv(response);
} catch (e) {
return {
state: "parsererror",
error: conv ? e : "No conversion from " + prev + " to " + current
};
}
}
}
}
}
}
return {
state: "success",
data: response
};
}
jQuery.extend({
active: 0,
lastModified: {},
etag: {},
ajaxSettings: {
url: location.href,
type: "GET",
isLocal: rlocalProtocol.test(location.protocol),
global: true,
processData: true,
async: true,
contentType: "application/x-www-form-urlencoded; charset=UTF-8",
accepts: {
"*": allTypes,
text: "text/plain",
html: "text/html",
xml: "application/xml, text/xml",
json: "application/json, text/javascript"
},
contents: {
xml: /\bxml\b/,
html: /\bhtml/,
json: /\bjson\b/
},
responseFields: {
xml: "responseXML",
text: "responseText",
json: "responseJSON"
},
converters: {
"* text": String,
"text html": true,
"text json": JSON.parse,
"text xml": jQuery.parseXML
},
flatOptions: {
url: true,
context: true
}
},
ajaxSetup: function(target, settings) {
return settings ? ajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) : ajaxExtend(jQuery.ajaxSettings, target);
},
ajaxPrefilter: addToPrefiltersOrTransports(prefilters),
ajaxTransport: addToPrefiltersOrTransports(transports),
ajax: function(url, options) {
if (typeof url === "object") {
options = url;
url = undefined;
}
options = options || {};
var transport, cacheURL, responseHeadersString, responseHeaders, timeoutTimer, urlAnchor, completed, fireGlobals, i, uncached, s = jQuery.ajaxSetup({}, options), callbackContext = s.context || s, globalEventContext = s.context && (callbackContext.nodeType || callbackContext.jquery) ? jQuery(callbackContext) : jQuery.event, deferred = jQuery.Deferred(), completeDeferred = jQuery.Callbacks("once memory"), statusCode = s.statusCode || {}, requestHeaders = {}, requestHeadersNames = {}, strAbort = "canceled", jqXHR = {
readyState: 0,
getResponseHeader: function(key) {
var match;
if (completed) {
if (!responseHeaders) {
responseHeaders = {};
while ((match = rheaders.exec(responseHeadersString))) {
responseHeaders[match[1].toLowerCase() + " "] = (responseHeaders[match[1].toLowerCase() + " "] || []).concat(match[2]);
}
}
match = responseHeaders[key.toLowerCase() + " "];
}
return match == null ? null : match.join(", ");
},
getAllResponseHeaders: function() {
return completed ? responseHeadersString : null;
},
setRequestHeader: function(name, value) {
if (completed == null) {
name = requestHeadersNames[name.toLowerCase()] = requestHeadersNames[name.toLowerCase()] || name;
requestHeaders[name] = value;
}
return this;
},
overrideMimeType: function(type) {
if (completed == null) {
s.mimeType = type;
}
return this;
},
statusCode: function(map) {
var code;
if (map) {
if (completed) {
jqXHR.always(map[jqXHR.status]);
} else {
for (code in map) {
statusCode[code] = [statusCode[code], map[code]];
}
}
}
return this;
},
abort: function(statusText) {
var finalText = statusText || strAbort;
if (transport) {
transport.abort(finalText);
}
done(0, finalText);
return this;
}
};
deferred.promise(jqXHR);
s.url = ((url || s.url || location.href) + "").replace(rprotocol, location.protocol + "//");
s.type = options.method || options.type || s.method || s.type;
s.dataTypes = (s.dataType || "*").toLowerCase().match(rnothtmlwhite) || [""];
if (s.crossDomain == null) {
urlAnchor = document.createElement("a");
try {
urlAnchor.href = s.url;
urlAnchor.href = urlAnchor.href;
s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== urlAnchor.protocol + "//" + urlAnchor.host;
} catch (e) {
s.crossDomain = true;
}
}
if (s.data && s.processData && typeof s.data !== "string") {
s.data = jQuery.param(s.data, s.traditional);
}
inspectPrefiltersOrTransports(prefilters, s, options, jqXHR);
if (completed) {
return jqXHR;
}
fireGlobals = jQuery.event && s.global;
if (fireGlobals && jQuery.active++ === 0) {
jQuery.event.trigger("ajaxStart");
}
s.type = s.type.toUpperCase();
s.hasContent = !rnoContent.test(s.type);
cacheURL = s.url.replace(rhash, "");
if (!s.hasContent) {
uncached = s.url.slice(cacheURL.length);
if (s.data && (s.processData || typeof s.data === "string")) {
cacheURL += (rquery.test(cacheURL) ? "&" : "?") + s.data;
delete s.data;
}
if (s.cache === false) {
cacheURL = cacheURL.replace(rantiCache, "$1");
uncached = (rquery.test(cacheURL) ? "&" : "?") + "_=" + (nonce.guid++) + uncached;
}
s.url = cacheURL + uncached;
} else if (s.data && s.processData && (s.contentType || "").indexOf("application/x-www-form-urlencoded") === 0) {
s.data = s.data.replace(r20, "+");
}
if (s.ifModified) {
if (jQuery.lastModified[cacheURL]) {
jqXHR.setRequestHeader("If-Modified-Since", jQuery.lastModified[cacheURL]);
}
if (jQuery.etag[cacheURL]) {
jqXHR.setRequestHeader("If-None-Match", jQuery.etag[cacheURL]);
}
}
if (s.data && s.hasContent && s.contentType !== false || options.contentType) {
jqXHR.setRequestHeader("Content-Type", s.contentType);
}
jqXHR.setRequestHeader("Accept", s.dataTypes[0] && s.accepts[s.dataTypes[0]] ? s.accepts[s.dataTypes[0]] + (s.dataTypes[0] !== "*" ? ", " + allTypes + "; q=0.01" : "") : s.accepts["*"]);
for (i in s.headers) {
jqXHR.setRequestHeader(i, s.headers[i]);
}
if (s.beforeSend && (s.beforeSend.call(callbackContext, jqXHR, s) === false || completed)) {
return jqXHR.abort();
}
strAbort = "abort";
completeDeferred.add(s.complete);
jqXHR.done(s.success);
jqXHR.fail(s.error);
transport = inspectPrefiltersOrTransports(transports, s, options, jqXHR);
if (!transport) {
done(-1, "No Transport");
} else {
jqXHR.readyState = 1;
if (fireGlobals) {
globalEventContext.trigger("ajaxSend", [jqXHR, s]);
}
if (completed) {
return jqXHR;
}
if (s.async && s.timeout > 0) {
timeoutTimer = window.setTimeout(function() {
jqXHR.abort("timeout");
}, s.timeout);
}
try {
completed = false;
transport.send(requestHeaders, done);
} catch (e) {
if (completed) {
throw e;
}
done(-1, e);
}
}
function done(status, nativeStatusText, responses, headers) {
var isSuccess, success, error, response, modified, statusText = nativeStatusText;
if (completed) {
return;
}
completed = true;
if (timeoutTimer) {
window.clearTimeout(timeoutTimer);
}
transport = undefined;
responseHeadersString = headers || "";
jqXHR.readyState = status > 0 ? 4 : 0;
isSuccess = status >= 200 && status < 300 || status === 304;
if (responses) {
response = ajaxHandleResponses(s, jqXHR, responses);
}
if (!isSuccess && jQuery.inArray("script", s.dataTypes) > -1 && jQuery.inArray("json", s.dataTypes) < 0) {
s.converters["text script"] = function() {}
;
}
response = ajaxConvert(s, response, jqXHR, isSuccess);
if (isSuccess) {
if (s.ifModified) {
modified = jqXHR.getResponseHeader("Last-Modified");
if (modified) {
jQuery.lastModified[cacheURL] = modified;
}
modified = jqXHR.getResponseHeader("etag");
if (modified) {
jQuery.etag[cacheURL] = modified;
}
}
if (status === 204 || s.type === "HEAD") {
statusText = "nocontent";
} else if (status === 304) {
statusText = "notmodified";
} else {
statusText = response.state;
success = response.data;
error = response.error;
isSuccess = !error;
}
} else {
error = statusText;
if (status || !statusText) {
statusText = "error";
if (status < 0) {
status = 0;
}
}
}
jqXHR.status = status;
jqXHR.statusText = (nativeStatusText || statusText) + "";
if (isSuccess) {
deferred.resolveWith(callbackContext, [success, statusText, jqXHR]);
} else {
deferred.rejectWith(callbackContext, [jqXHR, statusText, error]);
}
jqXHR.statusCode(statusCode);
statusCode = undefined;
if (fireGlobals) {
globalEventContext.trigger(isSuccess ? "ajaxSuccess" : "ajaxError", [jqXHR, s, isSuccess ? success : error]);
}
completeDeferred.fireWith(callbackContext, [jqXHR, statusText]);
if (fireGlobals) {
globalEventContext.trigger("ajaxComplete", [jqXHR, s]);
if (!(--jQuery.active)) {
jQuery.event.trigger("ajaxStop");
}
}
}
return jqXHR;
},
getJSON: function(url, data, callback) {
return jQuery.get(url, data, callback, "json");
},
getScript: function(url, callback) {
return jQuery.get(url, undefined, callback, "script");
}
});
jQuery.each(["get", "post"], function(_i, method) {
jQuery[method] = function(url, data, callback, type) {
if (isFunction(data)) {
type = type || callback;
callback = data;
data = undefined;
}
return jQuery.ajax(jQuery.extend({
url: url,
type: method,
dataType: type,
data: data,
success: callback
}, jQuery.isPlainObject(url) && url));
}
;
});
jQuery.ajaxPrefilter(function(s) {
var i;
for (i in s.headers) {
if (i.toLowerCase() === "content-type") {
s.contentType = s.headers[i] || "";
}
}
});
jQuery._evalUrl = function(url, options, doc) {
return jQuery.ajax({
url: url,
type: "GET",
dataType: "script",
cache: true,
async: false,
global: false,
converters: {
"text script": function() {}
},
dataFilter: function(response) {
jQuery.globalEval(response, options, doc);
}
});
}
;
jQuery.fn.extend({
wrapAll: function(html) {
var wrap;
if (this[0]) {
if (isFunction(html)) {
html = html.call(this[0]);
}
wrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);
if (this[0].parentNode) {
wrap.insertBefore(this[0]);
}
wrap.map(function() {
var elem = this;
while (elem.firstElementChild) {
elem = elem.firstElementChild;
}
return elem;
}).append(this);
}
return this;
},
wrapInner: function(html) {
if (isFunction(html)) {
return this.each(function(i) {
jQuery(this).wrapInner(html.call(this, i));
});
}
return this.each(function() {
var self = jQuery(this)
, contents = self.contents();
if (contents.length) {
contents.wrapAll(html);
} else {
self.append(html);
}
});
},
wrap: function(html) {
var htmlIsFunction = isFunction(html);
return this.each(function(i) {
jQuery(this).wrapAll(htmlIsFunction ? html.call(this, i) : html);
});
},
unwrap: function(selector) {
this.parent(selector).not("body").each(function() {
jQuery(this).replaceWith(this.childNodes);
});
return this;
}
});
jQuery.expr.pseudos.hidden = function(elem) {
return !jQuery.expr.pseudos.visible(elem);
}
;
jQuery.expr.pseudos.visible = function(elem) {
return !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);
}
;
jQuery.ajaxSettings.xhr = function() {
try {
return new window.XMLHttpRequest();
} catch (e) {}
}
;
var xhrSuccessStatus = {
0: 200,
1223: 204
}
, xhrSupported = jQuery.ajaxSettings.xhr();
support.cors = !!xhrSupported && ("withCredentials"in xhrSupported);
support.ajax = xhrSupported = !!xhrSupported;
jQuery.ajaxTransport(function(options) {
var callback, errorCallback;
if (support.cors || xhrSupported && !options.crossDomain) {
return {
send: function(headers, complete) {
var i, xhr = options.xhr();
xhr.open(options.type, options.url, options.async, options.username, options.password);
if (options.xhrFields) {
for (i in options.xhrFields) {
xhr[i] = options.xhrFields[i];
}
}
if (options.mimeType && xhr.overrideMimeType) {
xhr.overrideMimeType(options.mimeType);
}
if (!options.crossDomain && !headers["X-Requested-With"]) {
headers["X-Requested-With"] = "XMLHttpRequest";
}
for (i in headers) {
xhr.setRequestHeader(i, headers[i]);
}
callback = function(type) {
return function() {
if (callback) {
callback = errorCallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = xhr.onreadystatechange = null;
if (type === "abort") {
xhr.abort();
} else if (type === "error") {
if (typeof xhr.status !== "number") {
complete(0, "error");
} else {
complete(xhr.status, xhr.statusText);
}
} else {
complete(xhrSuccessStatus[xhr.status] || xhr.status, xhr.statusText, (xhr.responseType || "text") !== "text" || typeof xhr.responseText !== "string" ? {
binary: xhr.response
} : {
text: xhr.responseText
}, xhr.getAllResponseHeaders());
}
}
}
;
}
;
xhr.onload = callback();
errorCallback = xhr.onerror = xhr.ontimeout = callback("error");
if (xhr.onabort !== undefined) {
xhr.onabort = errorCallback;
} else {
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) {
window.setTimeout(function() {
if (callback) {
errorCallback();
}
});
}
}
;
}
callback = callback("abort");
try {
xhr.send(options.hasContent && options.data || null);
} catch (e) {
if (callback) {
throw e;
}
}
},
abort: function() {
if (callback) {
callback();
}
}
};
}
});
jQuery.ajaxPrefilter(function(s) {
if (s.crossDomain) {
s.contents.script = false;
}
});
jQuery.ajaxSetup({
accepts: {
script: "text/javascript, application/javascript, " + "application/ecmascript, application/x-ecmascript"
},
contents: {
script: /\b(?:java|ecma)script\b/
},
converters: {
"text script": function(text) {
jQuery.globalEval(text);
return text;
}
}
});
jQuery.ajaxPrefilter("script", function(s) {
if (s.cache === undefined) {
s.cache = false;
}
if (s.crossDomain) {
s.type = "GET";
}
});
jQuery.ajaxTransport("script", function(s) {
if (s.crossDomain || s.scriptAttrs) {
var script, callback;
return {
send: function(_, complete) {
script = jQuery("<script>").attr(s.scriptAttrs || {}).prop({
charset: s.scriptCharset,
src: s.url
}).on("load error", callback = function(evt) {
script.remove();
callback = null;
if (evt) {
complete(evt.type === "error" ? 404 : 200, evt.type);
}
}
);
document.head.appendChild(script[0]);
},
abort: function() {
if (callback) {
callback();
}
}
};
}
});
var oldCallbacks = []
, rjsonp = /(=)\?(?=&|$)|\?\?/;
jQuery.ajaxSetup({
jsonp: "callback",
jsonpCallback: function() {
var callback = oldCallbacks.pop() || (jQuery.expando + "_" + (nonce.guid++));
this[callback] = true;
return callback;
}
});
jQuery.ajaxPrefilter("json jsonp", function(s, originalSettings, jqXHR) {
var callbackName, overwritten, responseContainer, jsonProp = s.jsonp !== false && (rjsonp.test(s.url) ? "url" : typeof s.data === "string" && (s.contentType || "").indexOf("application/x-www-form-urlencoded") === 0 && rjsonp.test(s.data) && "data");
if (jsonProp || s.dataTypes[0] === "jsonp") {
callbackName = s.jsonpCallback = isFunction(s.jsonpCallback) ? s.jsonpCallback() : s.jsonpCallback;
if (jsonProp) {
s[jsonProp] = s[jsonProp].replace(rjsonp, "$1" + callbackName);
} else if (s.jsonp !== false) {
s.url += (rquery.test(s.url) ? "&" : "?") + s.jsonp + "=" + callbackName;
}
s.converters["script json"] = function() {
if (!responseContainer) {
jQuery.error(callbackName + " was not called");
}
return responseContainer[0];
}
;
s.dataTypes[0] = "json";
overwritten = window[callbackName];
window[callbackName] = function() {
responseContainer = arguments;
}
;
jqXHR.always(function() {
if (overwritten === undefined) {
jQuery(window).removeProp(callbackName);
} else {
window[callbackName] = overwritten;
}
if (s[callbackName]) {
s.jsonpCallback = originalSettings.jsonpCallback;
oldCallbacks.push(callbackName);
}
if (responseContainer && isFunction(overwritten)) {
overwritten(responseContainer[0]);
}
responseContainer = overwritten = undefined;
});
return "script";
}
});
support.createHTMLDocument = (function() {
var body = document.implementation.createHTMLDocument("").body;
body.innerHTML = "<form></form><form></form>";
return body.childNodes.length === 2;
}
)();
jQuery.parseHTML = function(data, context, keepScripts) {
if (typeof data !== "string") {
return [];
}
if (typeof context === "boolean") {
keepScripts = context;
context = false;
}
var base, parsed, scripts;
if (!context) {
if (support.createHTMLDocument) {
context = document.implementation.createHTMLDocument("");
base = context.createElement("base");
base.href = document.location.href;
context.head.appendChild(base);
} else {
context = document;
}
}
parsed = rsingleTag.exec(data);
scripts = !keepScripts && [];
if (parsed) {
return [context.createElement(parsed[1])];
}
parsed = buildFragment([data], context, scripts);
if (scripts && scripts.length) {
jQuery(scripts).remove();
}
return jQuery.merge([], parsed.childNodes);
}
;
jQuery.fn.load = function(url, params, callback) {
var selector, type, response, self = this, off = url.indexOf(" ");
if (off > -1) {
selector = stripAndCollapse(url.slice(off));
url = url.slice(0, off);
}
if (isFunction(params)) {
callback = params;
params = undefined;
} else if (params && typeof params === "object") {
type = "POST";
}
if (self.length > 0) {
jQuery.ajax({
url: url,
type: type || "GET",
dataType: "html",
data: params
}).done(function(responseText) {
response = arguments;
self.html(selector ? jQuery("<div>").append(jQuery.parseHTML(responseText)).find(selector) : responseText);
}).always(callback && function(jqXHR, status) {
self.each(function() {
callback.apply(this, response || [jqXHR.responseText, status, jqXHR]);
});
}
);
}
return this;
}
;
jQuery.expr.pseudos.animated = function(elem) {
return jQuery.grep(jQuery.timers, function(fn) {
return elem === fn.elem;
}).length;
}
;
jQuery.offset = {
setOffset: function(elem, options, i) {
var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, position = jQuery.css(elem, "position"), curElem = jQuery(elem), props = {};
if (position === "static") {
elem.style.position = "relative";
}
curOffset = curElem.offset();
curCSSTop = jQuery.css(elem, "top");
curCSSLeft = jQuery.css(elem, "left");
calculatePosition = (position === "absolute" || position === "fixed") && (curCSSTop + curCSSLeft).indexOf("auto") > -1;
if (calculatePosition) {
curPosition = curElem.position();
curTop = curPosition.top;
curLeft = curPosition.left;
} else {
curTop = parseFloat(curCSSTop) || 0;
curLeft = parseFloat(curCSSLeft) || 0;
}
if (isFunction(options)) {
options = options.call(elem, i, jQuery.extend({}, curOffset));
}
if (options.top != null) {
props.top = (options.top - curOffset.top) + curTop;
}
if (options.left != null) {
props.left = (options.left - curOffset.left) + curLeft;
}
if ("using"in options) {
options.using.call(elem, props);
} else {
curElem.css(props);
}
}
};
jQuery.fn.extend({
offset: function(options) {
if (arguments.length) {
return options === undefined ? this : this.each(function(i) {
jQuery.offset.setOffset(this, options, i);
});
}
var rect, win, elem = this[0];
if (!elem) {
return;
}
if (!elem.getClientRects().length) {
return {
top: 0,
left: 0
};
}
rect = elem.getBoundingClientRect();
win = elem.ownerDocument.defaultView;
return {
top: rect.top + win.pageYOffset,
left: rect.left + win.pageXOffset
};
},
position: function() {
if (!this[0]) {
return;
}
var offsetParent, offset, doc, elem = this[0], parentOffset = {
top: 0,
left: 0
};
if (jQuery.css(elem, "position") === "fixed") {
offset = elem.getBoundingClientRect();
} else {
offset = this.offset();
doc = elem.ownerDocument;
offsetParent = elem.offsetParent || doc.documentElement;
while (offsetParent && (offsetParent === doc.body || offsetParent === doc.documentElement) && jQuery.css(offsetParent, "position") === "static") {
offsetParent = offsetParent.parentNode;
}
if (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {
parentOffset = jQuery(offsetParent).offset();
parentOffset.top += jQuery.css(offsetParent, "borderTopWidth", true);
parentOffset.left += jQuery.css(offsetParent, "borderLeftWidth", true);
}
}
return {
top: offset.top - parentOffset.top - jQuery.css(elem, "marginTop", true),
left: offset.left - parentOffset.left - jQuery.css(elem, "marginLeft", true)
};
},
offsetParent: function() {
return this.map(function() {
var offsetParent = this.offsetParent;
while (offsetParent && jQuery.css(offsetParent, "position") === "static") {
offsetParent = offsetParent.offsetParent;
}
return offsetParent || documentElement;
});
}
});
jQuery.each({
scrollLeft: "pageXOffset",
scrollTop: "pageYOffset"
}, function(method, prop) {
var top = "pageYOffset" === prop;
jQuery.fn[method] = function(val) {
return access(this, function(elem, method, val) {
var win;
if (isWindow(elem)) {
win = elem;
} else if (elem.nodeType === 9) {
win = elem.defaultView;
}
if (val === undefined) {
return win ? win[prop] : elem[method];
}
if (win) {
win.scrollTo(!top ? val : win.pageXOffset, top ? val : win.pageYOffset);
} else {
elem[method] = val;
}
}, method, val, arguments.length);
}
;
});
jQuery.each(["top", "left"], function(_i, prop) {
jQuery.cssHooks[prop] = addGetHookIf(support.pixelPosition, function(elem, computed) {
if (computed) {
computed = curCSS(elem, prop);
return rnumnonpx.test(computed) ? jQuery(elem).position()[prop] + "px" : computed;
}
});
});
jQuery.each({
Height: "height",
Width: "width"
}, function(name, type) {
jQuery.each({
padding: "inner" + name,
content: type,
"": "outer" + name
}, function(defaultExtra, funcName) {
jQuery.fn[funcName] = function(margin, value) {
var chainable = arguments.length && (defaultExtra || typeof margin !== "boolean")
, extra = defaultExtra || (margin === true || value === true ? "margin" : "border");
return access(this, function(elem, type, value) {
var doc;
if (isWindow(elem)) {
return funcName.indexOf("outer") === 0 ? elem["inner" + name] : elem.document.documentElement["client" + name];
}
if (elem.nodeType === 9) {
doc = elem.documentElement;
return Math.max(elem.body["scroll" + name], doc["scroll" + name], elem.body["offset" + name], doc["offset" + name], doc["client" + name]);
}
return value === undefined ? jQuery.css(elem, type, extra) : jQuery.style(elem, type, value, extra);
}, type, chainable ? margin : undefined, chainable);
}
;
});
});
jQuery.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function(_i, type) {
jQuery.fn[type] = function(fn) {
return this.on(type, fn);
}
;
});
jQuery.fn.extend({
bind: function(types, data, fn) {
return this.on(types, null, data, fn);
},
unbind: function(types, fn) {
return this.off(types, null, fn);
},
delegate: function(selector, types, data, fn) {
return this.on(types, selector, data, fn);
},
undelegate: function(selector, types, fn) {
return arguments.length === 1 ? this.off(selector, "**") : this.off(types, selector || "**", fn);
},
hover: function(fnOver, fnOut) {
return this.on("mouseenter", fnOver).on("mouseleave", fnOut || fnOver);
}
});
jQuery.each(("blur focus focusin focusout resize scroll click dblclick " + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + "change select submit keydown keypress keyup contextmenu").split(" "), function(_i, name) {
jQuery.fn[name] = function(data, fn) {
return arguments.length > 0 ? this.on(name, null, data, fn) : this.trigger(name);
}
;
});
var rtrim = /^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;
jQuery.proxy = function(fn, context) {
var tmp, args, proxy;
if (typeof context === "string") {
tmp = fn[context];
context = fn;
fn = tmp;
}
if (!isFunction(fn)) {
return undefined;
}
args = slice.call(arguments, 2);
proxy = function() {
return fn.apply(context || this, args.concat(slice.call(arguments)));
}
;
proxy.guid = fn.guid = fn.guid || jQuery.guid++;
return proxy;
}
;
jQuery.holdReady = function(hold) {
if (hold) {
jQuery.readyWait++;
} else {
jQuery.ready(true);
}
}
;
jQuery.isArray = Array.isArray;
jQuery.parseJSON = JSON.parse;
jQuery.nodeName = nodeName;
jQuery.isFunction = isFunction;
jQuery.isWindow = isWindow;
jQuery.camelCase = camelCase;
jQuery.type = toType;
jQuery.now = Date.now;
jQuery.isNumeric = function(obj) {
var type = jQuery.type(obj);
return (type === "number" || type === "string") && !isNaN(obj - parseFloat(obj));
}
;
jQuery.trim = function(text) {
return text == null ? "" : (text + "").replace(rtrim, "$1");
}
;
if (typeof define === "function" && define.amd) {
define("jquery", [], function() {
return jQuery;
});
}
var _jQuery = window.jQuery
, _$ = window.$;
jQuery.noConflict = function(deep) {
if (window.$ === jQuery) {
window.$ = _$;
}
if (deep && window.jQuery === jQuery) {
window.jQuery = _jQuery;
}
return jQuery;
}
;
if (typeof noGlobal === "undefined") {
window.jQuery = window.$ = jQuery;
}
return jQuery;
});
});
function isCompatible(ua) {
return !!((function() {
'use strict';
return !this && Function.prototype.bind;
}()) && 'querySelector'in document && 'localStorage'in window && !ua.match(/MSIE 10|NetFront|Opera Mini|S40OviBrowser|MeeGo|Android.+Glass|^Mozilla\/5\.0 .+ Gecko\/$|googleweblight|PLAYSTATION|PlayStation/));
}
if (!isCompatible(navigator.userAgent)) {
document.documentElement.className = document.documentElement.className.replace(/(^|\s)client-js(\s|$)/, '$1client-nojs$2');
while (window.NORLQ && NORLQ[0]) {
NORLQ.shift()();
}
NORLQ = {
push: function(fn) {
fn();
}
};
RLQ = {
push: function() {}
};
} else {
if (window.performance && performance.mark) {
performance.mark('mwStartup');
}
(function() {
'use strict';
var con = window.console;
function logError(topic, data) {
var e = data.exception;
var msg = (e ? 'Exception' : 'Error') + ' in ' + data.source + (data.module ? ' in module ' + data.module : '') + (e ? ':' : '.');
con.log(msg);
if (e) {
con.warn(e);
}
}
function Map() {
this.values = Object.create(null);
}
Map.prototype = {
constructor: Map,
get: function(selection, fallback) {
if (arguments.length < 2) {
fallback = null;
}
if (typeof selection === 'string') {
return selection in this.values ? this.values[selection] : fallback;
}
var results;
if (Array.isArray(selection)) {
results = {};
for (var i = 0; i < selection.length; i++) {
if (typeof selection[i] === 'string') {
results[selection[i]] = selection[i]in this.values ? this.values[selection[i]] : fallback;
}
}
return results;
}
if (selection === undefined) {
results = {};
for (var key in this.values) {
results[key] = this.values[key];
}
return results;
}
return fallback;
},
set: function(selection, value) {
if (arguments.length > 1) {
if (typeof selection === 'string') {
this.values[selection] = value;
return true;
}
} else if (typeof selection === 'object') {
for (var key in selection) {
this.values[key] = selection[key];
}
return true;
}
return false;
},
exists: function(selection) {
return typeof selection === 'string' && selection in this.values;
}
};
var log = function() {};
log.warn = Function.prototype.bind.call(con.warn, con);
var mw = {
now: function() {
var perf = window.performance;
var navStart = perf && perf.timing && perf.timing.navigationStart;
mw.now = navStart && perf.now ? function() {
return navStart + perf.now();
}
: Date.now;
return mw.now();
},
trackQueue: [],
track: function(topic, data) {
mw.trackQueue.push({
topic: topic,
data: data
});
},
trackError: function(topic, data) {
mw.track(topic, data);
logError(topic, data);
},
Map: Map,
config: new Map(),
messages: new Map(),
templates: new Map(),
log: log
};
window.mw = window.mediaWiki = mw;
}());
(function() {
'use strict';
var StringSet, store, hasOwn = Object.hasOwnProperty;
function defineFallbacks() {
StringSet = window.Set || function() {
var set = Object.create(null);
return {
add: function(value) {
set[value] = true;
},
has: function(value) {
return value in set;
}
};
}
;
}
defineFallbacks();
function fnv132(str) {
var hash = 0x811C9DC5;
for (var i = 0; i < str.length; i++) {
hash += (hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24);
hash ^= str.charCodeAt(i);
}
hash = (hash >>> 0).toString(36).slice(0, 5);
while (hash.length < 5) {
hash = '0' + hash;
}
return hash;
}
var isES6Supported = typeof Promise === 'function' && Promise.prototype.finally && /./g.flags === 'g' && (function() {
try {
new Function('(a = 0) => a');
return true;
} catch (e) {
return false;
}
}());
var registry = Object.create(null), sources = Object.create(null), handlingPendingRequests = false, pendingRequests = [], queue = [], jobs = [], willPropagate = false, errorModules = [], baseModules = ["jquery", "mediawiki.base"], marker = document.querySelector('meta[name="ResourceLoaderDynamicStyles"]'), lastCssBuffer, rAF = window.requestAnimationFrame || setTimeout;
function addToHead(el, nextNode) {
if (nextNode && nextNode.parentNode) {
nextNode.parentNode.insertBefore(el, nextNode);
} else {
document.head.appendChild(el);
}
}
function newStyleTag(text, nextNode) {
var el = document.createElement('style');
el.appendChild(document.createTextNode(text));
addToHead(el, nextNode);
return el;
}
function flushCssBuffer(cssBuffer) {
if (cssBuffer === lastCssBuffer) {
lastCssBuffer = null;
}
newStyleTag(cssBuffer.cssText, marker);
for (var i = 0; i < cssBuffer.callbacks.length; i++) {
cssBuffer.callbacks[i]();
}
}
function addEmbeddedCSS(cssText, callback) {
if (!lastCssBuffer || cssText.slice(0, 7) === '@import') {
lastCssBuffer = {
cssText: '',
callbacks: []
};
rAF(flushCssBuffer.bind(null, lastCssBuffer));
}
lastCssBuffer.cssText += '\n' + cssText;
lastCssBuffer.callbacks.push(callback);
}
function getCombinedVersion(modules) {
var hashes = modules.reduce(function(result, module) {
return result + registry[module].version;
}, '');
return fnv132(hashes);
}
function allReady(modules) {
for (var i = 0; i < modules.length; i++) {
if (mw.loader.getState(modules[i]) !== 'ready') {
return false;
}
}
return true;
}
function allWithImplicitReady(module) {
return allReady(registry[module].dependencies) && (baseModules.indexOf(module) !== -1 || allReady(baseModules));
}
function anyFailed(modules) {
for (var i = 0; i < modules.length; i++) {
var state = mw.loader.getState(modules[i]);
if (state === 'error' || state === 'missing') {
return modules[i];
}
}
return false;
}
function doPropagation() {
var didPropagate = true;
var module;
while (didPropagate) {
didPropagate = false;
while (errorModules.length) {
var errorModule = errorModules.shift()
, baseModuleError = baseModules.indexOf(errorModule) !== -1;
for (module in registry) {
if (registry[module].state !== 'error' && registry[module].state !== 'missing') {
if (baseModuleError && baseModules.indexOf(module) === -1) {
registry[module].state = 'error';
didPropagate = true;
} else if (registry[module].dependencies.indexOf(errorModule) !== -1) {
registry[module].state = 'error';
errorModules.push(module);
didPropagate = true;
}
}
}
}
for (module in registry) {
if (registry[module].state === 'loaded' && allWithImplicitReady(module)) {
execute(module);
didPropagate = true;
}
}
for (var i = 0; i < jobs.length; i++) {
var job = jobs[i];
var failed = anyFailed(job.dependencies);
if (failed !== false || allReady(job.dependencies)) {
jobs.splice(i, 1);
i -= 1;
try {
if (failed !== false && job.error) {
job.error(new Error('Failed dependency: ' + failed), job.dependencies);
} else if (failed === false && job.ready) {
job.ready();
}
} catch (e) {
mw.trackError('resourceloader.exception', {
exception: e,
source: 'load-callback'
});
}
didPropagate = true;
}
}
}
willPropagate = false;
}
function setAndPropagate(module, state) {
registry[module].state = state;
if (state === 'ready') {
store.add(module);
} else if (state === 'error' || state === 'missing') {
errorModules.push(module);
} else if (state !== 'loaded') {
return;
}
if (willPropagate) {
return;
}
willPropagate = true;
mw.requestIdleCallback(doPropagation, {
timeout: 1
});
}
function sortDependencies(module, resolved, unresolved) {
if (!(module in registry)) {
throw new Error('Unknown module: ' + module);
}
if (typeof registry[module].skip === 'string') {
var skip = (new Function(registry[module].skip)());
registry[module].skip = !!skip;
if (skip) {
registry[module].dependencies = [];
setAndPropagate(module, 'ready');
return;
}
}
if (!unresolved) {
unresolved = new StringSet();
}
var deps = registry[module].dependencies;
unresolved.add(module);
for (var i = 0; i < deps.length; i++) {
if (resolved.indexOf(deps[i]) === -1) {
if (unresolved.has(deps[i])) {
throw new Error('Circular reference detected: ' + module + ' -> ' + deps[i]);
}
sortDependencies(deps[i], resolved, unresolved);
}
}
resolved.push(module);
}
function resolve(modules) {
var resolved = baseModules.slice();
for (var i = 0; i < modules.length; i++) {
sortDependencies(modules[i], resolved);
}
return resolved;
}
function resolveStubbornly(modules) {
var resolved = baseModules.slice();
for (var i = 0; i < modules.length; i++) {
var saved = resolved.slice();
try {
sortDependencies(modules[i], resolved);
} catch (err) {
resolved = saved;
mw.log.warn('Skipped unavailable module ' + modules[i]);
if (modules[i]in registry) {
mw.trackError('resourceloader.exception', {
exception: err,
source: 'resolve'
});
}
}
}
return resolved;
}
function resolveRelativePath(relativePath, basePath) {
var relParts = relativePath.match(/^((?:\.\.?\/)+)(.*)$/);
if (!relParts) {
return null;
}
var baseDirParts = basePath.split('/');
baseDirParts.pop();
var prefixes = relParts[1].split('/');
prefixes.pop();
var prefix;
while ((prefix = prefixes.pop()) !== undefined) {
if (prefix === '..') {
baseDirParts.pop();
}
}
return (baseDirParts.length ? baseDirParts.join('/') + '/' : '') + relParts[2];
}
function makeRequireFunction(moduleObj, basePath) {
return function require(moduleName) {
var fileName = resolveRelativePath(moduleName, basePath);
if (fileName === null) {
return mw.loader.require(moduleName);
}
if (hasOwn.call(moduleObj.packageExports, fileName)) {
return moduleObj.packageExports[fileName];
}
var scriptFiles = moduleObj.script.files;
if (!hasOwn.call(scriptFiles, fileName)) {
throw new Error('Cannot require undefined file ' + fileName);
}
var result, fileContent = scriptFiles[fileName];
if (typeof fileContent === 'function') {
var moduleParam = {
exports: {}
};
fileContent(makeRequireFunction(moduleObj, fileName), moduleParam, moduleParam.exports);
result = moduleParam.exports;
} else {
result = fileContent;
}
moduleObj.packageExports[fileName] = result;
return result;
}
;
}
function addScript(src, callback) {
var script = document.createElement('script');
script.src = src;
script.onload = script.onerror = function() {
if (script.parentNode) {
script.parentNode.removeChild(script);
}
if (callback) {
callback();
callback = null;
}
}
;
document.head.appendChild(script);
return script;
}
function queueModuleScript(src, moduleName, callback) {
pendingRequests.push(function() {
if (moduleName !== 'jquery') {
window.require = mw.loader.require;
window.module = registry[moduleName].module;
}
addScript(src, function() {
delete window.module;
callback();
if (pendingRequests[0]) {
pendingRequests.shift()();
} else {
handlingPendingRequests = false;
}
});
});
if (!handlingPendingRequests && pendingRequests[0]) {
handlingPendingRequests = true;
pendingRequests.shift()();
}
}
function addLink(url, media, nextNode) {
var el = document.createElement('link');
el.rel = 'stylesheet';
if (media) {
el.media = media;
}
el.href = url;
addToHead(el, nextNode);
return el;
}
function domEval(code) {
var script = document.createElement('script');
if (mw.config.get('wgCSPNonce') !== false) {
script.nonce = mw.config.get('wgCSPNonce');
}
script.text = code;
document.head.appendChild(script);
script.parentNode.removeChild(script);
}
function enqueue(dependencies, ready, error) {
if (allReady(dependencies)) {
if (ready) {
ready();
}
return;
}
var failed = anyFailed(dependencies);
if (failed !== false) {
if (error) {
error(new Error('Dependency ' + failed + ' failed to load'), dependencies);
}
return;
}
if (ready || error) {
jobs.push({
dependencies: dependencies.filter(function(module) {
var state = registry[module].state;
return state === 'registered' || state === 'loaded' || state === 'loading' || state === 'executing';
}),
ready: ready,
error: error
});
}
dependencies.forEach(function(module) {
if (registry[module].state === 'registered' && queue.indexOf(module) === -1) {
queue.push(module);
}
});
mw.loader.work();
}
function execute(module) {
if (registry[module].state !== 'loaded') {
throw new Error('Module in state "' + registry[module].state + '" may not execute: ' + module);
}
registry[module].state = 'executing';
var runScript = function() {
var script = registry[module].script;
var markModuleReady = function() {
setAndPropagate(module, 'ready');
};
var nestedAddScript = function(arr, offset) {
if (offset >= arr.length) {
markModuleReady();
return;
}
queueModuleScript(arr[offset], module, function() {
nestedAddScript(arr, offset + 1);
});
};
try {
if (Array.isArray(script)) {
nestedAddScript(script, 0);
} else if (typeof script === 'function') {
if (module === 'jquery') {
script();
} else {
script(window.$, window.$, mw.loader.require, registry[module].module);
}
markModuleReady();
} else if (typeof script === 'object' && script !== null) {
var mainScript = script.files[script.main];
if (typeof mainScript !== 'function') {
throw new Error('Main file in module ' + module + ' must be a function');
}
mainScript(makeRequireFunction(registry[module], script.main), registry[module].module, registry[module].module.exports);
markModuleReady();
} else if (typeof script === 'string') {
domEval(script);
markModuleReady();
} else {
markModuleReady();
}
} catch (e) {
setAndPropagate(module, 'error');
mw.trackError('resourceloader.exception', {
exception: e,
module: module,
source: 'module-execute'
});
}
};
if (registry[module].messages) {
mw.messages.set(registry[module].messages);
}
if (registry[module].templates) {
mw.templates.set(module, registry[module].templates);
}
var cssPending = 0;
var cssHandle = function() {
cssPending++;
return function() {
cssPending--;
if (cssPending === 0) {
var runScriptCopy = runScript;
runScript = undefined;
runScriptCopy();
}
}
;
};
var style = registry[module].style;
if (style) {
if ('css'in style) {
for (var i = 0; i < style.css.length; i++) {
addEmbeddedCSS(style.css[i], cssHandle());
}
}
if ('url'in style) {
for (var media in style.url) {
var urls = style.url[media];
for (var j = 0; j < urls.length; j++) {
addLink(urls[j], media, marker);
}
}
}
}
if (module === 'user') {
var siteDeps;
var siteDepErr;
try {
siteDeps = resolve(['site']);
} catch (e) {
siteDepErr = e;
runScript();
}
if (!siteDepErr) {
enqueue(siteDeps, runScript, runScript);
}
} else if (cssPending === 0) {
runScript();
}
}
function sortQuery(o) {
var sorted = {};
var list = [];
for (var key in o) {
list.push(key);
}
list.sort();
for (var i = 0; i < list.length; i++) {
sorted[list[i]] = o[list[i]];
}
return sorted;
}
function buildModulesString(moduleMap) {
var str = [];
var list = [];
var p;
function restore(suffix) {
return p + suffix;
}
for (var prefix in moduleMap) {
p = prefix === '' ? '' : prefix + '.';
str.push(p + moduleMap[prefix].join(','));
list.push.apply(list, moduleMap[prefix].map(restore));
}
return {
str: str.join('|'),
list: list
};
}
function makeQueryString(params) {
var str = '';
for (var key in params) {
str += (str ? '&' : '') + encodeURIComponent(key) + '=' + encodeURIComponent(params[key]);
}
return str;
}
function batchRequest(batch) {
if (!batch.length) {
return;
}
var sourceLoadScript, currReqBase, moduleMap;
function doRequest() {
var query = Object.create(currReqBase)
, packed = buildModulesString(moduleMap);
query.modules = packed.str;
query.version = getCombinedVersion(packed.list);
query = sortQuery(query);
addScript(sourceLoadScript + '?' + makeQueryString(query));
}
batch.sort();
var reqBase = {
"lang": "ko",
"skin": "liberty"
};
var splits = Object.create(null);
for (var b = 0; b < batch.length; b++) {
var bSource = registry[batch[b]].source;
var bGroup = registry[batch[b]].group;
if (!splits[bSource]) {
splits[bSource] = Object.create(null);
}
if (!splits[bSource][bGroup]) {
splits[bSource][bGroup] = [];
}
splits[bSource][bGroup].push(batch[b]);
}
for (var source in splits) {
sourceLoadScript = sources[source];
for (var group in splits[source]) {
var modules = splits[source][group];
currReqBase = Object.create(reqBase);
if (group === 0 && mw.config.get('wgUserName') !== null) {
currReqBase.user = mw.config.get('wgUserName');
}
var currReqBaseLength = makeQueryString(currReqBase).length + 23;
var length = 0;
moduleMap = Object.create(null);
for (var i = 0; i < modules.length; i++) {
var lastDotIndex = modules[i].lastIndexOf('.')
, prefix = modules[i].slice(0, Math.max(0, lastDotIndex))
, suffix = modules[i].slice(lastDotIndex + 1)
, bytesAdded = moduleMap[prefix] ? suffix.length + 3 : modules[i].length + 3;
if (length && length + currReqBaseLength + bytesAdded > mw.loader.maxQueryLength) {
doRequest();
length = 0;
moduleMap = Object.create(null);
}
if (!moduleMap[prefix]) {
moduleMap[prefix] = [];
}
length += bytesAdded;
moduleMap[prefix].push(suffix);
}
doRequest();
}
}
}
function asyncEval(implementations, cb) {
if (!implementations.length) {
return;
}
mw.requestIdleCallback(function() {
try {
domEval(implementations.join(';'));
} catch (err) {
cb(err);
}
});
}
function getModuleKey(module) {
return module in registry ? (module + '@' + registry[module].version) : null;
}
function splitModuleKey(key) {
var index = key.lastIndexOf('@');
if (index === -1 || index === 0) {
return {
name: key,
version: ''
};
}
return {
name: key.slice(0, index),
version: key.slice(index + 1)
};
}
function registerOne(module, version, dependencies, group, source, skip) {
if (module in registry) {
throw new Error('module already registered: ' + module);
}
version = String(version || '');
if (version.slice(-1) === '!') {
if (!isES6Supported) {
return;
}
version = version.slice(0, -1);
}
registry[module] = {
module: {
exports: {}
},
packageExports: {},
version: version,
dependencies: dependencies || [],
group: typeof group === 'undefined' ? null : group,
source: typeof source === 'string' ? source : 'local',
state: 'registered',
skip: typeof skip === 'string' ? skip : null
};
}
mw.loader = {
moduleRegistry: registry,
maxQueryLength: 2000,
addStyleTag: newStyleTag,
addScriptTag: addScript,
addLinkTag: addLink,
enqueue: enqueue,
resolve: resolve,
work: function() {
store.init();
var q = queue.length
, storedImplementations = []
, storedNames = []
, requestNames = []
, batch = new StringSet();
while (q--) {
var module = queue[q];
if (mw.loader.getState(module) === 'registered' && !batch.has(module)) {
registry[module].state = 'loading';
batch.add(module);
var implementation = store.get(module);
if (implementation) {
storedImplementations.push(implementation);
storedNames.push(module);
} else {
requestNames.push(module);
}
}
}
queue = [];
asyncEval(storedImplementations, function(err) {
store.stats.failed++;
store.clear();
mw.trackError('resourceloader.exception', {
exception: err,
source: 'store-eval'
});
var failed = storedNames.filter(function(name) {
return registry[name].state === 'loading';
});
batchRequest(failed);
});
batchRequest(requestNames);
},
addSource: function(ids) {
for (var id in ids) {
if (id in sources) {
throw new Error('source already registered: ' + id);
}
sources[id] = ids[id];
}
},
register: function(modules) {
if (typeof modules !== 'object') {
registerOne.apply(null, arguments);
return;
}
function resolveIndex(dep) {
return typeof dep === 'number' ? modules[dep][0] : dep;
}
for (var i = 0; i < modules.length; i++) {
var deps = modules[i][2];
if (deps) {
for (var j = 0; j < deps.length; j++) {
deps[j] = resolveIndex(deps[j]);
}
}
registerOne.apply(null, modules[i]);
}
},
implement: function(module, script, style, messages, templates) {
var split = splitModuleKey(module)
, name = split.name
, version = split.version;
if (!(name in registry)) {
mw.loader.register(name);
}
if (registry[name].script !== undefined) {
throw new Error('module already implemented: ' + name);
}
if (version) {
registry[name].version = version;
}
registry[name].script = script || null;
registry[name].style = style || null;
registry[name].messages = messages || null;
registry[name].templates = templates || null;
if (registry[name].state !== 'error' && registry[name].state !== 'missing') {
setAndPropagate(name, 'loaded');
}
},
load: function(modules, type) {
if (typeof modules === 'string' && /^(https?:)?\/?\//.test(modules)) {
if (type === 'text/css') {
addLink(modules);
} else if (type === 'text/javascript' || type === undefined) {
addScript(modules);
} else {
throw new Error('Invalid type ' + type);
}
} else {
modules = typeof modules === 'string' ? [modules] : modules;
enqueue(resolveStubbornly(modules));
}
},
state: function(states) {
for (var module in states) {
if (!(module in registry)) {
mw.loader.register(module);
}
setAndPropagate(module, states[module]);
}
},
getState: function(module) {
return module in registry ? registry[module].state : null;
},
require: function(moduleName) {
if (mw.loader.getState(moduleName) !== 'ready') {
throw new Error('Module "' + moduleName + '" is not loaded');
}
return registry[moduleName].module.exports;
}
};
var hasPendingWrites = false;
function flushWrites() {
store.prune();
while (store.queue.length) {
store.set(store.queue.shift());
}
try {
localStorage.removeItem(store.key);
var data = JSON.stringify(store);
localStorage.setItem(store.key, data);
} catch (e) {
mw.trackError('resourceloader.exception', {
exception: e,
source: 'store-localstorage-update'
});
}
hasPendingWrites = false;
}
mw.loader.store = store = {
enabled: null,
items: {},
queue: [],
stats: {
hits: 0,
misses: 0,
expired: 0,
failed: 0
},
toJSON: function() {
return {
items: store.items,
vary: store.vary,
asOf: Math.ceil(Date.now() / 1e7)
};
},
key: "MediaWikiModuleStore:my_wiki",
vary: "liberty:1:ko",
init: function() {
if (this.enabled === null) {
this.enabled = false;
if (true) {
this.load();
} else {
this.clear();
}
}
},
load: function() {
try {
var raw = localStorage.getItem(this.key);
this.enabled = true;
var data = JSON.parse(raw);
if (data && data.vary === this.vary && data.items && Date.now() < (data.asOf * 1e7) + 259e7) {
this.items = data.items;
}
} catch (e) {}
},
get: function(module) {
if (this.enabled) {
var key = getModuleKey(module);
if (key in this.items) {
this.stats.hits++;
return this.items[key];
}
this.stats.misses++;
}
return false;
},
add: function(module) {
if (this.enabled) {
this.queue.push(module);
this.requestUpdate();
}
},
set: function(module) {
var args, encodedScript, descriptor = registry[module], key = getModuleKey(module);
if (key in this.items || !descriptor || descriptor.state !== 'ready' || !descriptor.version || descriptor.group === 1 || descriptor.group === 0 || [descriptor.script, descriptor.style, descriptor.messages, descriptor.templates].indexOf(undefined) !== -1) {
return;
}
try {
if (typeof descriptor.script === 'function') {
encodedScript = String(descriptor.script);
} else if (typeof descriptor.script === 'object' && descriptor.script && !Array.isArray(descriptor.script)) {
encodedScript = '{' + 'main:' + JSON.stringify(descriptor.script.main) + ',' + 'files:{' + Object.keys(descriptor.script.files).map(function(file) {
var value = descriptor.script.files[file];
return JSON.stringify(file) + ':' + (typeof value === 'function' ? value : JSON.stringify(value));
}).join(',') + '}}';
} else {
encodedScript = JSON.stringify(descriptor.script);
}
args = [JSON.stringify(key), encodedScript, JSON.stringify(descriptor.style), JSON.stringify(descriptor.messages), JSON.stringify(descriptor.templates)];
} catch (e) {
mw.trackError('resourceloader.exception', {
exception: e,
source: 'store-localstorage-json'
});
return;
}
var src = 'mw.loader.implement(' + args.join(',') + ');';
if (src.length > 1e5) {
return;
}
this.items[key] = src;
},
prune: function() {
for (var key in this.items) {
if (getModuleKey(splitModuleKey(key).name) !== key) {
this.stats.expired++;
delete this.items[key];
}
}
},
clear: function() {
this.items = {};
try {
localStorage.removeItem(this.key);
} catch (e) {}
},
requestUpdate: function() {
if (!hasPendingWrites) {
hasPendingWrites = true;
setTimeout(function() {
mw.requestIdleCallback(flushWrites);
}, 2000);
}
}
};
}());
mw.requestIdleCallbackInternal = function(callback) {
setTimeout(function() {
var start = mw.now();
callback({
didTimeout: false,
timeRemaining: function() {
return Math.max(0, 50 - (mw.now() - start));
}
});
}, 1);
}
;
mw.requestIdleCallback = window.requestIdleCallback ? window.requestIdleCallback.bind(window) : mw.requestIdleCallbackInternal;
(function() {
var queue;
mw.loader.addSource({
"local": "/w/load.php"
});
mw.loader.register([["site", "1rbym", [1]], ["site.styles", "ek6et", [], 2], ["filepage", "1ljys"], ["user", "1tdkc", [], 0], ["user.styles", "18fec", [], 0], ["user.options", "12s5i", [], 1], ["mediawiki.skinning.interface", "1j058"], ["jquery.makeCollapsible.styles", "1gqq5"], ["mediawiki.skinning.content.parsoid", "qddj9"], ["jquery", "ef683"], ["es6-polyfills", "1ihgd", [], null, null, "return Array.prototype.find\u0026\u0026Array.prototype.findIndex\u0026\u0026Array.prototype.includes\u0026\u0026typeof Promise==='function'\u0026\u0026Promise.prototype.finally;"], ["web2017-polyfills", "5cxhc", [10], null, null, "return'IntersectionObserver'in window\u0026\u0026typeof fetch==='function'\u0026\u0026typeof URL==='function'\u0026\u0026'toJSON'in URL.prototype;"], ["mediawiki.base", "17fas", [9]], ["jquery.chosen", "fjvzv"], ["jquery.client", "1jnox"], ["jquery.color", "1y5ur"], ["jquery.confirmable", "iie8m", [104]], ["jquery.cookie", "emj1l"], ["jquery.form", "1djyv"], ["jquery.fullscreen", "1lanf"], ["jquery.highlightText", "a2wnf", [80]], ["jquery.hoverIntent", "1cahm"], ["jquery.i18n", "1pu0k", [103]], ["jquery.lengthLimit", "k5zgm", [64]], ["jquery.makeCollapsible", "1c8c5", [7, 80]], ["jquery.spinner", "9br9t", [26]], ["jquery.spinner.styles", "1q2bj"], ["jquery.suggestions", "1g6wh", [20]], ["jquery.tablesorter", "17w3p", [29, 105, 80]], ["jquery.tablesorter.styles", "vfgav"], ["jquery.textSelection", "m1do8", [14]], ["jquery.tipsy", "1rhhm"], ["jquery.ui", "11hxn"], ["moment", "12iqd", [101, 80]], ["vue", "eyq5j!"], ["@vue/composition-api", "scw0q!", [34]], ["vuex", "1twvy!", [34]], ["@wikimedia/codex", "ademh!", [34]], ["@wikimedia/codex-search", "9lsei!", [34]], ["mediawiki.template", "bca94"], ["mediawiki.template.mustache", "199kg", [39]], ["mediawiki.apipretty", "wiuwr"], ["mediawiki.api", "1hdsk", [70, 104]], ["mediawiki.content.json", "uh6qc"], ["mediawiki.confirmCloseWindow", "116pk"], ["mediawiki.debug", "1wj56", [187]], ["mediawiki.diff", "paqy5"], ["mediawiki.diff.styles", "wiu2h"], ["mediawiki.feedback", "oltus", [419, 195]], ["mediawiki.feedlink", "12foc"], ["mediawiki.filewarning", "1wies", [187, 199]], ["mediawiki.ForeignApi", "6vgsr", [52]], ["mediawiki.ForeignApi.core", "llzm2", [77, 42, 184]], ["mediawiki.helplink", "wjdrt"], ["mediawiki.hlist", "1eh1m"], ["mediawiki.htmlform", "a8sap", [23, 80]], ["mediawiki.htmlform.ooui", "1m5pb", [187]], ["mediawiki.htmlform.styles", "mpdtq"], ["mediawiki.htmlform.ooui.styles", "1vb22"], ["mediawiki.icon", "17xpk"], ["mediawiki.inspect", "88qa7", [64, 80]], ["mediawiki.notification", "1g9vg", [80, 86]], ["mediawiki.notification.convertmessagebox", "1kd6x", [61]], ["mediawiki.notification.convertmessagebox.styles", "19vc0"], ["mediawiki.String", "1vc9s"], ["mediawiki.pager.styles", "zv8uz"], ["mediawiki.pager.tablePager", "1tupc"], ["mediawiki.pulsatingdot", "1i1zo"], ["mediawiki.searchSuggest", "96in6", [27, 42]], ["mediawiki.storage", "2gicm", [80]], ["mediawiki.Title", "1cw9f", [64, 80]], ["mediawiki.Upload", "ooev2", [42]], ["mediawiki.ForeignUpload", "14sdx", [51, 71]], ["mediawiki.Upload.Dialog", "v3bgk", [74]], ["mediawiki.Upload.BookletLayout", "s6cw5", [71, 78, 33, 190, 195, 200, 201]], ["mediawiki.ForeignStructuredUpload.BookletLayout", "17bnm", [72, 74, 108, 167, 161]], ["mediawiki.toc", "1jhap", [83]], ["mediawiki.Uri", "7vjqw", [80]], ["mediawiki.user", "5mz30", [42, 83]], ["mediawiki.userSuggest", "1hhzv", [27, 42]], ["mediawiki.util", "xooi3", [14, 11]], ["mediawiki.checkboxtoggle", "159pl"], ["mediawiki.checkboxtoggle.styles", "1b0zv"], ["mediawiki.cookie", "1pinl", [17]], ["mediawiki.experiments", "dhcyy"], ["mediawiki.editfont.styles", "v7tga"], ["mediawiki.visibleTimeout", "xcitq"], ["mediawiki.action.edit", "mstk4", [30, 88, 42, 85, 163]], ["mediawiki.action.edit.styles", "1ttdg"], ["mediawiki.action.edit.collapsibleFooter", "za3yf", [24, 59, 69]], ["mediawiki.action.edit.preview", "zrghj", [25, 114, 78]], ["mediawiki.action.history", "psppn", [24]], ["mediawiki.action.history.styles", "183tr"], ["mediawiki.action.protect", "ymezb", [23, 187]], ["mediawiki.action.view.metadata", "5e7wy", [99]], ["mediawiki.action.view.postEdit", "1nkbh", [104, 61, 187, 206]], ["mediawiki.action.view.redirect", "iqcjx"], ["mediawiki.action.view.redirectPage", "iy19o"], ["mediawiki.action.edit.editWarning", "ihdqq", [30, 44, 104]], ["mediawiki.action.view.filepage", "1d274"], ["mediawiki.action.styles", "1jp30"], ["mediawiki.language", "1wesf", [102]], ["mediawiki.cldr", "w8zqb", [103]], ["mediawiki.libs.pluralruleparser", "1kwne"], ["mediawiki.jqueryMsg", "yf64f", [64, 101, 80, 5]], ["mediawiki.language.months", "1yuv4", [101]], ["mediawiki.language.names", "41ki5", [101]], ["mediawiki.language.specialCharacters", "rchei", [101]], ["mediawiki.libs.jpegmeta", "1h4oh"], ["mediawiki.page.gallery", "1n4q2", [110, 80]], ["mediawiki.page.gallery.styles", "iqykm"], ["mediawiki.page.gallery.slideshow", "1smjn", [42, 190, 209, 211]], ["mediawiki.page.ready", "1oi8t", [42]], ["mediawiki.page.watch.ajax", "es038", [42]], ["mediawiki.page.preview", "37tu6", [24, 30, 42, 46, 47, 187]], ["mediawiki.page.image.pagination", "iyctm", [25, 80]], ["mediawiki.rcfilters.filters.base.styles", "130u4"], ["mediawiki.rcfilters.highlightCircles.seenunseen.styles", "1rc4r"], ["mediawiki.rcfilters.filters.ui", "7kuih", [24, 77, 78, 158, 196, 203, 205, 206, 207, 209, 210]], ["mediawiki.interface.helpers.styles", "cjg0p"], ["mediawiki.special", "1ezii"], ["mediawiki.special.apisandbox", "cvq0t", [24, 77, 178, 164, 186]], ["mediawiki.special.block", "1sepj", [55, 161, 177, 168, 178, 175, 203]], ["mediawiki.misc-authed-ooui", "g3hvq", [56, 158, 163]], ["mediawiki.misc-authed-pref", "16eja", [5]], ["mediawiki.misc-authed-curate", "1hvtz", [16, 25, 42]], ["mediawiki.special.changeslist", "t2fz9"], ["mediawiki.special.changeslist.watchlistexpiry", "1gqgj", [120, 206]], ["mediawiki.special.changeslist.enhanced", "1plr1"], ["mediawiki.special.changeslist.legend", "173yq"], ["mediawiki.special.changeslist.legend.js", "qa88i", [24, 83]], ["mediawiki.special.contributions", "1luqq", [24, 104, 161, 186]], ["mediawiki.special.edittags", "1fdd4", [13, 23]], ["mediawiki.special.import.styles.ooui", "1hzv9"], ["mediawiki.special.changecredentials", "f9fqt"], ["mediawiki.special.changeemail", "10bxu"], ["mediawiki.special.preferences.ooui", "12bpi", [44, 85, 62, 69, 168, 163, 195]], ["mediawiki.special.preferences.styles.ooui", "17391"], ["mediawiki.special.revisionDelete", "cvqd5", [163]], ["mediawiki.special.search", "11pp3", [180]], ["mediawiki.special.search.commonsInterwikiWidget", "fbtxd", [77, 42]], ["mediawiki.special.search.interwikiwidget.styles", "148p8"], ["mediawiki.special.search.styles", "ljzvl"], ["mediawiki.special.unwatchedPages", "1ifn8", [42]], ["mediawiki.special.upload", "me44v", [25, 42, 44, 108, 120, 39]], ["mediawiki.special.userlogin.common.styles", "e3t84"], ["mediawiki.special.userlogin.login.styles", "j42ei"], ["mediawiki.special.createaccount", "zqc6b", [42]], ["mediawiki.special.userlogin.signup.styles", "38r74"], ["mediawiki.special.userrights", "4k0n6", [23, 62]], ["mediawiki.special.watchlist", "m2tug", [42, 187, 206]], ["mediawiki.ui", "hiex9"], ["mediawiki.ui.checkbox", "hxxtc"], ["mediawiki.ui.radio", "modow"], ["mediawiki.ui.anchor", "jztwq"], ["mediawiki.ui.button", "1h3ni"], ["mediawiki.ui.input", "e9ozn"], ["mediawiki.ui.icon", "6ahkw"], ["mediawiki.widgets", "1jqcm", [42, 159, 190, 200, 201]], ["mediawiki.widgets.styles", "1x5du"], ["mediawiki.widgets.AbandonEditDialog", "f4488", [195]], ["mediawiki.widgets.DateInputWidget", "11daz", [162, 33, 190, 211]], ["mediawiki.widgets.DateInputWidget.styles", "xmyns"], ["mediawiki.widgets.visibleLengthLimit", "m325n", [23, 187]], ["mediawiki.widgets.datetime", "8boni", [80, 187, 206, 210, 211]], ["mediawiki.widgets.expiry", "m5uji", [164, 33, 190]], ["mediawiki.widgets.CheckMatrixWidget", "k9si1", [187]], ["mediawiki.widgets.CategoryMultiselectWidget", "864qf", [51, 190]], ["mediawiki.widgets.SelectWithInputWidget", "yzuek", [169, 190]], ["mediawiki.widgets.SelectWithInputWidget.styles", "vkr7h"], ["mediawiki.widgets.SizeFilterWidget", "1clfy", [171, 190]], ["mediawiki.widgets.SizeFilterWidget.styles", "ceybj"], ["mediawiki.widgets.MediaSearch", "1tctv", [51, 78, 190]], ["mediawiki.widgets.Table", "fvtg6", [190]], ["mediawiki.widgets.TagMultiselectWidget", "1erse", [190]], ["mediawiki.widgets.UserInputWidget", "jsk5k", [42, 190]], ["mediawiki.widgets.UsersMultiselectWidget", "1m6vb", [42, 190]], ["mediawiki.widgets.NamespacesMultiselectWidget", "pwj2l", [190]], ["mediawiki.widgets.TitlesMultiselectWidget", "gt95w", [158]], ["mediawiki.widgets.TagMultiselectWidget.styles", "1rjw4"], ["mediawiki.widgets.SearchInputWidget", "z70j2", [68, 158, 206]], ["mediawiki.widgets.SearchInputWidget.styles", "9327p"], ["mediawiki.watchstar.widgets", "qo1rt", [186]], ["mediawiki.deflate", "1ci7b"], ["oojs", "ewqeo"], ["mediawiki.router", "1fux1", [184]], ["oojs-ui", "1jh3r", [193, 190, 195]], ["oojs-ui-core", "jr0b9", [101, 184, 189, 188, 197]], ["oojs-ui-core.styles", "i6wlq"], ["oojs-ui-core.icons", "1w5ot"], ["oojs-ui-widgets", "qg0r1", [187, 192]], ["oojs-ui-widgets.styles", "1cuis"], ["oojs-ui-widgets.icons", "18wx8"], ["oojs-ui-toolbars", "1d6zj", [187, 194]], ["oojs-ui-toolbars.icons", "hyq0q"], ["oojs-ui-windows", "1p8r9", [187, 196]], ["oojs-ui-windows.icons", "j2zql"], ["oojs-ui.styles.indicators", "1i2vf"], ["oojs-ui.styles.icons-accessibility", "1d3v3"], ["oojs-ui.styles.icons-alerts", "xenmi"], ["oojs-ui.styles.icons-content", "14qmb"], ["oojs-ui.styles.icons-editing-advanced", "1dcza"], ["oojs-ui.styles.icons-editing-citation", "mwtsx"], ["oojs-ui.styles.icons-editing-core", "1avws"], ["oojs-ui.styles.icons-editing-list", "bztld"], ["oojs-ui.styles.icons-editing-styling", "swcfz"], ["oojs-ui.styles.icons-interactions", "1dpuu"], ["oojs-ui.styles.icons-layout", "r1694"], ["oojs-ui.styles.icons-location", "1whgs"], ["oojs-ui.styles.icons-media", "1qt5c"], ["oojs-ui.styles.icons-moderation", "11nz5"], ["oojs-ui.styles.icons-movement", "1q2kl"], ["oojs-ui.styles.icons-user", "nwcc0"], ["oojs-ui.styles.icons-wikimedia", "4ee5t"], ["skins.minerva.base.styles", "jve28"], ["skins.minerva.content.styles.images", "1w2mt"], ["skins.minerva.icons.loggedin", "5snrf"], ["skins.minerva.amc.styles", "bf5y6"], ["skins.minerva.overflow.icons", "uggqd"], ["skins.minerva.icons.wikimedia", "ph7gg"], ["skins.minerva.icons.images.scripts.misc", "3c6jz"], ["skins.minerva.icons.page.issues.uncolored", "jvnwm"], ["skins.minerva.icons.page.issues.default.color", "g6l6a"], ["skins.minerva.icons.page.issues.medium.color", "kgojz"], ["skins.minerva.mainPage.styles", "1em1d"], ["skins.minerva.userpage.styles", "19xse"], ["skins.minerva.talk.styles", "5gxxp"], ["skins.minerva.personalMenu.icons", "z45sy"], ["skins.minerva.mainMenu.advanced.icons", "1rlpp"], ["skins.minerva.mainMenu.icons", "z3piz"], ["skins.minerva.mainMenu.styles", "1z108"], ["skins.minerva.loggedin.styles", "1jy2s"], ["skins.minerva.scripts", "1mkkc", [77, 84, 113, 185, 69, 154, 78, 413, 220, 222, 223, 221, 229, 230, 233, 40]], ["skins.minerva.messageBox.styles", "1mxw2"], ["skins.minerva.categories.styles", "acyz1"], ["skins.monobook.styles", "14lq0"], ["skins.monobook.scripts", "vl9le", [78, 199]], ["skins.timeless", "gbju1"], ["skins.timeless.js", "158q7"], ["skins.vector.user", "1b93e", [], 0], ["skins.vector.user.styles", "1rlz1", [], 0], ["skins.vector.search", "1ovmt!", [38, 77]], ["skins.vector.styles.legacy", "14n1u"], ["skins.vector.styles", "858dh"], ["skins.vector.icons.js", "19pz2"], ["skins.vector.icons", "kpohr"], ["skins.vector.es6", "3hh3q!", [84, 112, 113, 69, 78, 244]], ["skins.vector.js", "1uiwa", [112, 244]], ["skins.vector.legacy.js", "omaiv", [112]], ["skins.liberty.styles", "1vnup"], ["skins.liberty.ads", "1dztv"], ["skins.liberty.bootstrap", "ivdpu"], ["skins.liberty.layoutjs", "1ugqn", [83]], ["skins.liberty.liverc", "1tl78", [80]], ["skins.liberty.loginjs", "10s7q", [80]], ["skins.citizen.styles", "1laub"], ["skins.citizen.styles.fonts.cjk", "1slav"], ["skins.citizen.styles.fonts.ar", "1170g"], ["skins.citizen.scripts", "1ylwu", [112]], ["skins.citizen.search", "72pf3!", [69, 40, 78]], ["skins.citizen.preferences", "lk5in", [69]], ["skins.citizen.serviceWorker", "1ir4g"], ["skins.citizen.icons", "15en9"], ["ext.abuseFilter", "1h0j4"], ["ext.abuseFilter.edit", "1nlwu", [25, 30, 42, 44, 190]], ["ext.abuseFilter.tools", "w28i7", [25, 42]], ["ext.abuseFilter.examine", "1bvqg", [25, 42]], ["ext.abuseFilter.ace", "1918f", [280]], ["ext.abuseFilter.visualEditor", "5wt0f"], ["ext.categoryTree", "ncl6k", [42]], ["ext.categoryTree.styles", "1d80w"], ["ext.cite.styles", "11zbe"], ["ext.cite.style", "gn7m1"], ["ext.cite.visualEditor.core", "1vmkp", ["ext.visualEditor.mwcore", "ext.visualEditor.mwtransclusion"]], ["ext.cite.visualEditor", "sqaex", [272, 271, 273, "ext.visualEditor.base", "ext.visualEditor.mediawiki", 199, 202, 206]], ["ext.cite.ux-enhancements", "1va4k"], ["ext.citeThisPage", "1moeo"], ["ext.codeEditor", "1ma6m", [278], 3], ["jquery.codeEditor", "uqklj", [280, 279, 323, 195], 3], ["ext.codeEditor.icons", "10rjf"], ["ext.codeEditor.ace", "1lkcf", [], 4], ["ext.codeEditor.ace.modes", "1o3y6", [280], 4], ["ext.confirmEdit.editPreview.ipwhitelist.styles", "11y4q"], ["ext.confirmEdit.visualEditor", "rlq1b", [414]], ["ext.confirmEdit.simpleCaptcha", "14a9d"], ["ext.inputBox.styles", "1d5ae"], ["ext.interwiki.specialpage", "1ci50"], ["ext.math.styles", "p4mfk"], ["ext.math.scripts", "tzadd"], ["ext.math.popup", "ifcad!", [42]], ["mw.widgets.MathWbEntitySelector", "zc14e", [51, 158, "mw.config.values.wbRepo", 195]], ["ext.math.visualEditor", "yxfu0", [287, "ext.visualEditor.mwcore", 201]], ["ext.math.visualEditor.mathSymbols", "vbj28"], ["ext.math.visualEditor.chemSymbols", "1elc7"], ["mmv", "v0tno", [15, 19, 31, 77, 299]], ["mmv.ui.ondemandshareddependencies", "py41v", [294, 186]], ["mmv.ui.download.pane", "q7g56", [151, 158, 295]], ["mmv.ui.reuse.shareembed", "a8wqb", [158, 295]], ["mmv.ui.tipsyDialog", "1fg1n", [294]], ["mmv.bootstrap", "lgyc9", [185, 155, 157, 301]], ["mmv.bootstrap.autostart", "dgnjl", [299]], ["mmv.head", "1vrgu", [69, 78]], ["ext.nuke.confirm", "1snx1", [104]], ["ext.oath.totp.showqrcode", "vp9jv"], ["ext.oath.totp.showqrcode.styles", "16j3z"], ["pdfhandler.messages", "11swy"], ["ext.ReplaceText", "1ola7"], ["ext.ReplaceTextStyles", "5t6qc"], ["ext.scribunto.errors", "1micz", [190]], ["ext.scribunto.logs", "c053i"], ["ext.scribunto.edit", "u01r2", [25, 42]], ["ext.spamBlacklist.visualEditor", "xlus7"], ["ext.pygments", "rzknq"], ["ext.pygments.linenumbers", "1ra7j", [80]], ["ext.geshi.visualEditor", "xlbcm", ["ext.visualEditor.mwcore", 201]], ["ext.templateData", "1fyxq"], ["ext.templateDataGenerator.editPage", "1e7eh"], ["ext.templateDataGenerator.data", "hmz7t", [184]], ["ext.templateDataGenerator.editTemplatePage.loading", "60i01"], ["ext.templateDataGenerator.editTemplatePage", "x0lf2", [315, 320, 317, 30, 412, 78, 190, 195, 206, 207, 210]], ["ext.templateData.images", "1cjso"], ["mediawiki.api.titleblacklist", "63y45", [42]], ["ext.titleblacklist.visualEditor", "105v1"], ["ext.wikiEditor", "1jxsf", [30, 32, 107, 78, 158, 202, 203, 204, 205, 209, 39], 3], ["ext.wikiEditor.styles", "1jyx4", [], 3], ["ext.wikiEditor.images", "1rf56"], ["ext.wikiEditor.realtimepreview", "4s2sb", [323, 325, 114, 67, 69, 206]], ["ext.CodeMirror", "1u4rt", [328, 30, 32, 78, 205]], ["ext.CodeMirror.data", "1d203"], ["ext.CodeMirror.lib", "1x3af"], ["ext.CodeMirror.addons", "1s5sd", [329]], ["ext.CodeMirror.mode.mediawiki", "1pri8", [329]], ["ext.CodeMirror.lib.mode.css", "ri6yn", [329]], ["ext.CodeMirror.lib.mode.javascript", "tkjyf", [329]], ["ext.CodeMirror.lib.mode.xml", "lulkh", [329]], ["ext.CodeMirror.lib.mode.htmlmixed", "55n3v", [332, 333, 334]], ["ext.CodeMirror.lib.mode.clike", "x6dn7", [329]], ["ext.CodeMirror.lib.mode.php", "d3qbf", [336, 335]], ["ext.CodeMirror.visualEditor.init", "1gvjl"], ["ext.CodeMirror.visualEditor", "e9bti", ["ext.visualEditor.mwcore", 42]], ["ext.checkUser", "174ki", [28, 77, 65, 69, 158, 203, 206, 208, 210, 212]], ["ext.checkUser.styles", "7zh9a"], ["ext.guidedTour.tour.checkuserinvestigateform", "2tjv7", ["ext.guidedTour"]], ["ext.guidedTour.tour.checkuserinvestigate", "1hv9s", [340, "ext.guidedTour"]], ["ext.echo.logger", "1eha4", [78, 184]], ["ext.echo.ui.desktop", "rblc7", [352, 346]], ["ext.echo.ui", "s6p7p", [347, 344, 418, 190, 199, 200, 203, 206, 210, 211, 212]], ["ext.echo.dm", "8j8t6", [350, 33]], ["ext.echo.api", "14pf5", [51]], ["ext.echo.mobile", "11bps", [346, 185, 40]], ["ext.echo.init", "19aem", [348]], ["ext.echo.centralauth", "18s7e"], ["ext.echo.styles.badge", "16niy"], ["ext.echo.styles.notifications", "1pine"], ["ext.echo.styles.alert", "uc6nq"], ["ext.echo.special", "1lne3", [356, 346]], ["ext.echo.styles.special", "17ikf"], ["ext.youtube.lazyload", "16y1w"], ["ext.graph.styles", "ny0w6"], ["ext.graph.data", "y7ui8"], ["ext.graph.loader", "1thuf", [42]], ["ext.graph.vega1", "c7m2s", [359, 77]], ["ext.graph.vega2", "1ffju", [359, 77]], ["ext.graph.sandbox", "xpx7g", [277, 362, 44]], ["ext.graph.visualEditor", "deioz", [359, "ext.visualEditor.mwcore", "ext.visualEditor.mwimage.core", 173, 201]], ["ext.jsonConfig", "12w9a"], ["ext.jsonConfig.edit", "qhdh3", [30, 173, 195]], ["ext.CommentStreams", "11c5l", [186, 199, 203, 206, 210, 211]], ["ext.CommentStreamsAllComments", "1r2ny"], ["ext.securepoll.htmlform", "1a8xj", [25, 175]], ["ext.securepoll", "1utoq"], ["ext.securepoll.special", "1ow6x"], ["ext.socialprofile.systemgifts.css", "110kn"], ["ext.socialprofile.special.removemastersystemgift.css", "1xcaj"], ["ext.socialprofile.special.systemgiftmanager.css", "bw8d0"], ["ext.socialprofile.special.systemgiftmanagerlogo.css", "jnm2x"], ["ext.socialprofile.special.topawards.css", "sngow"], ["ext.socialprofile.special.viewsystemgift.css", "1ilkj"], ["ext.socialprofile.special.viewsystemgifts.css", "1x2a7"], ["ext.socialprofile.useractivity.css", "15ys7"], ["ext.socialprofile.userboard.js", "3qjvq", [42]], ["ext.socialprofile.userboard.wikiEditor", "1nt9y", [323]], ["ext.socialprofile.userboard.css", "77m9c"], ["ext.socialprofile.userboard.boardblast.css", "xq555"], ["ext.socialprofile.userboard.boardblast.js", "1dyvn"], ["ext.socialprofile.userrelationship.css", "1kteo"], ["ext.socialprofile.userrelationship.js", "1fsze", [80]], ["ext.socialprofile.userstats.css", "1il8e"], ["ext.socialprofile.userstats.randomfeatureduser.styles", "1bykn"], ["ext.socialprofile.usergifts.css", "e330v"], ["ext.socialprofile.special.giftmanager.css", "s8q8t"], ["ext.socialprofile.special.givegift.css", "3x00b"], ["ext.socialprofile.special.viewgift.css", "jub06"], ["ext.socialprofile.special.viewgifts.css", "1xtp2"], ["ext.socialprofile.usergifts.js", "5vt2s"], ["ext.MultiMaps", "rl2u0"], ["ext.MultiMaps.Leaflet", "yvk12"], ["ext.MultiMaps.Google", "mrsjv"], ["ext.MultiMaps.Yandex", "ilhef"], ["ext.socialprofile.userprofile.css", "19z70"], ["ext.socialprofile.userprofile.js", "1m8pc", [42]], ["ext.userProfile.updateProfile", "9mf2r", [32, 42]], ["ext.socialprofile.userprofile.diff", "1m87m"], ["ext.socialprofile.userprofile.tabs.css", "jdibk"], ["ext.socialprofile.special.uploadavatar.css", "1tmgi"], ["ext.socialprofile.special.uploadavatar.js", "1oyfx"], ["ext.socialprofile.special.updateprofile.css", "lzlxi"], ["ext.socialprofile.userprofile.randomfeatureduser.styles", "jdzy4"], ["ext.socialprofile.clearfix", "6kc0l"], ["ext.socialprofile.responsive", "16tkk"], ["ext.socialprofile.flash", "14hrk"], ["ext.socialprofile.LightBox", "rgwvk"], ["jquery.uls.data", "149oa"], ["mobile.startup", "1pa3r", [68]], ["ext.confirmEdit.CaptchaInputWidget", "amvgg", [187]], ["ext.gadget.autonum", "18wim", [], 2], ["ext.gadget.ReferenceTooltips", "1pu6d", [], 2], ["ext.echo.emailicons", "1kdsh"], ["ext.echo.secondaryicons", "xvwr9"], ["mediawiki.messagePoster", "13b1w", [51]]]);
mw.config.set(window.RLCONF || {});
mw.loader.state(window.RLSTATE || {});
mw.loader.load(window.RLPAGEMODULES || []);
queue = window.RLQ || [];
RLQ = [];
RLQ.push = function(fn) {
if (typeof fn === 'function') {
fn();
} else {
RLQ[RLQ.length] = fn;
}
}
;
while (queue[0]) {
RLQ.push(queue.shift());
}
NORLQ = {
push: function() {}
};
}());
}