module_jquery_XiaoYing

$_jquery

此脚本不应直接安装,它是一个供其他脚本使用的外部库。如果您需要使用该库,请在脚本元属性加入:// @require https://update.gf.qytechs.cn/scripts/464929/1181945/module_jquery_XiaoYing.js

  1. (function (global, factory) {
  2. "use strict";
  3. if (typeof module === "object" && typeof module.exports === "object") {
  4. module.exports = global.document ?
  5. factory(global, true) :
  6. function (w) {
  7. if (!w.document) {
  8. throw new Error("jQuery requires a window with a document");
  9. }
  10. return factory(w);
  11. };
  12. } else {
  13. factory(global);
  14. }
  15. })(typeof window !== "undefined" ? window : this, function (window, noGlobal) {
  16. "use strict";
  17. var arr = [];
  18. var getProto = Object.getPrototypeOf;
  19. var slice = arr.slice;
  20. var flat = arr.flat ?
  21. function (array) {
  22. return arr.flat.call(array);
  23. } :
  24. function (array) {
  25. return arr.concat.apply([], array);
  26. };
  27. var push = arr.push;
  28. var indexOf = arr.indexOf;
  29. var class2type = {};
  30. var toString = class2type.toString;
  31. var hasOwn = class2type.hasOwnProperty;
  32. var fnToString = hasOwn.toString;
  33. var ObjectFunctionString = fnToString.call(Object);
  34. var support = {};
  35. var isFunction = function isFunction(obj) {
  36. return typeof obj === "function" && typeof obj.nodeType !== "number" && typeof obj.item !== "function";
  37. };
  38. var isWindow = function isWindow(obj) {
  39. return obj != null && obj === obj.window;
  40. };
  41. var document = window.document;
  42. var preservedScriptAttributes = {
  43. type: true,
  44. src: true,
  45. nonce: true,
  46. noModule: true
  47. };
  48.  
  49. function DOMEval(code, node, doc) {
  50. doc = doc || document;
  51. var i,
  52. val,
  53. script = doc.createElement("script");
  54. script.text = code;
  55. if (node) {
  56. for (i in preservedScriptAttributes) {
  57. val = node[i] || (node.getAttribute && node.getAttribute(i));
  58. if (val) {
  59. script.setAttribute(i, val);
  60. }
  61. }
  62. }
  63. doc.head.appendChild(script).parentNode.removeChild(script);
  64. }
  65.  
  66. function toType(obj) {
  67. if (obj == null) {
  68. return obj + "";
  69. }
  70. return typeof obj === "object" || typeof obj === "function" ? class2type[toString.call(obj)] || "object" : typeof obj;
  71. }
  72. var version = "3.6.4",
  73. jQuery = function (selector, context) {
  74. return new jQuery.fn.init(selector, context);
  75. };
  76. jQuery.fn = jQuery.prototype = {
  77. jquery: version,
  78. constructor: jQuery,
  79. length: 0,
  80. toArray: function () {
  81. return slice.call(this);
  82. },
  83. get: function (num) {
  84. if (num == null) {
  85. return slice.call(this);
  86. }
  87. return num < 0 ? this[num + this.length] : this[num];
  88. },
  89. pushStack: function (elems) {
  90. var ret = jQuery.merge(this.constructor(), elems);
  91. ret.prevObject = this;
  92. return ret;
  93. },
  94. each: function (callback) {
  95. return jQuery.each(this, callback);
  96. },
  97. map: function (callback) {
  98. return this.pushStack(
  99. jQuery.map(this, function (elem, i) {
  100. return callback.call(elem, i, elem);
  101. })
  102. );
  103. },
  104. slice: function () {
  105. return this.pushStack(slice.apply(this, arguments));
  106. },
  107. first: function () {
  108. return this.eq(0);
  109. },
  110. last: function () {
  111. return this.eq(-1);
  112. },
  113. even: function () {
  114. return this.pushStack(
  115. jQuery.grep(this, function (_elem, i) {
  116. return (i + 1) % 2;
  117. })
  118. );
  119. },
  120. odd: function () {
  121. return this.pushStack(
  122. jQuery.grep(this, function (_elem, i) {
  123. return i % 2;
  124. })
  125. );
  126. },
  127. eq: function (i) {
  128. var len = this.length,
  129. j = +i + (i < 0 ? len : 0);
  130. return this.pushStack(j >= 0 && j < len ? [this[j]] : []);
  131. },
  132. end: function () {
  133. return this.prevObject || this.constructor();
  134. },
  135. push: push,
  136. sort: arr.sort,
  137. splice: arr.splice,
  138. };
  139. jQuery.extend = jQuery.fn.extend = function () {
  140. var options,
  141. name,
  142. src,
  143. copy,
  144. copyIsArray,
  145. clone,
  146. target = arguments[0] || {},
  147. i = 1,
  148. length = arguments.length,
  149. deep = false;
  150. if (typeof target === "boolean") {
  151. deep = target;
  152. target = arguments[i] || {};
  153. i++;
  154. }
  155. if (typeof target !== "object" && !isFunction(target)) {
  156. target = {};
  157. }
  158. if (i === length) {
  159. target = this;
  160. i--;
  161. }
  162. for (; i < length; i++) {
  163. if ((options = arguments[i]) != null) {
  164. for (name in options) {
  165. copy = options[name];
  166. if (name === "__proto__" || target === copy) {
  167. continue;
  168. }
  169. if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = Array.isArray(copy)))) {
  170. src = target[name];
  171. if (copyIsArray && !Array.isArray(src)) {
  172. clone = [];
  173. } else if (!copyIsArray && !jQuery.isPlainObject(src)) {
  174. clone = {};
  175. } else {
  176. clone = src;
  177. }
  178. copyIsArray = false;
  179. target[name] = jQuery.extend(deep, clone, copy);
  180. } else if (copy !== undefined) {
  181. target[name] = copy;
  182. }
  183. }
  184. }
  185. }
  186. return target;
  187. };
  188. jQuery.extend({
  189. expando: "jQuery" + (version + Math.random()).replace(/\D/g, ""),
  190. isReady: true,
  191. error: function (msg) {
  192. throw new Error(msg);
  193. },
  194. noop: function () { },
  195. isPlainObject: function (obj) {
  196. var proto, Ctor;
  197. if (!obj || toString.call(obj) !== "[object Object]") {
  198. return false;
  199. }
  200. proto = getProto(obj);
  201. if (!proto) {
  202. return true;
  203. }
  204. Ctor = hasOwn.call(proto, "constructor") && proto.constructor;
  205. return typeof Ctor === "function" && fnToString.call(Ctor) === ObjectFunctionString;
  206. },
  207. isEmptyObject: function (obj) {
  208. var name;
  209. for (name in obj) {
  210. return false;
  211. }
  212. return true;
  213. },
  214. globalEval: function (code, options, doc) {
  215. DOMEval(code, {
  216. nonce: options && options.nonce
  217. }, doc);
  218. },
  219. each: function (obj, callback) {
  220. var length,
  221. i = 0;
  222. if (isArrayLike(obj)) {
  223. length = obj.length;
  224. for (; i < length; i++) {
  225. if (callback.call(obj[i], i, obj[i]) === false) {
  226. break;
  227. }
  228. }
  229. } else {
  230. for (i in obj) {
  231. if (callback.call(obj[i], i, obj[i]) === false) {
  232. break;
  233. }
  234. }
  235. }
  236. return obj;
  237. },
  238. makeArray: function (arr, results) {
  239. var ret = results || [];
  240. if (arr != null) {
  241. if (isArrayLike(Object(arr))) {
  242. jQuery.merge(ret, typeof arr === "string" ? [arr] : arr);
  243. } else {
  244. push.call(ret, arr);
  245. }
  246. }
  247. return ret;
  248. },
  249. inArray: function (elem, arr, i) {
  250. return arr == null ? -1 : indexOf.call(arr, elem, i);
  251. },
  252. merge: function (first, second) {
  253. var len = +second.length,
  254. j = 0,
  255. i = first.length;
  256. for (; j < len; j++) {
  257. first[i++] = second[j];
  258. }
  259. first.length = i;
  260. return first;
  261. },
  262. grep: function (elems, callback, invert) {
  263. var callbackInverse,
  264. matches = [],
  265. i = 0,
  266. length = elems.length,
  267. callbackExpect = !invert;
  268. for (; i < length; i++) {
  269. callbackInverse = !callback(elems[i], i);
  270. if (callbackInverse !== callbackExpect) {
  271. matches.push(elems[i]);
  272. }
  273. }
  274. return matches;
  275. },
  276. map: function (elems, callback, arg) {
  277. var length,
  278. value,
  279. i = 0,
  280. ret = [];
  281. if (isArrayLike(elems)) {
  282. length = elems.length;
  283. for (; i < length; i++) {
  284. value = callback(elems[i], i, arg);
  285. if (value != null) {
  286. ret.push(value);
  287. }
  288. }
  289. } else {
  290. for (i in elems) {
  291. value = callback(elems[i], i, arg);
  292. if (value != null) {
  293. ret.push(value);
  294. }
  295. }
  296. }
  297. return flat(ret);
  298. },
  299. guid: 1,
  300. support: support,
  301. });
  302. if (typeof Symbol === "function") {
  303. jQuery.fn[Symbol.iterator] = arr[Symbol.iterator];
  304. }
  305. jQuery.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), function (_i, name) {
  306. class2type["[object " + name + "]"] = name.toLowerCase();
  307. });
  308.  
  309. function isArrayLike(obj) {
  310. var length = !!obj && "length" in obj && obj.length,
  311. type = toType(obj);
  312. if (isFunction(obj) || isWindow(obj)) {
  313. return false;
  314. }
  315. return type === "array" || length === 0 || (typeof length === "number" && length > 0 && length - 1 in obj);
  316. }
  317. var Sizzle = (function (window) {
  318. var i,
  319. support,
  320. Expr,
  321. getText,
  322. isXML,
  323. tokenize,
  324. compile,
  325. select,
  326. outermostContext,
  327. sortInput,
  328. hasDuplicate,
  329. setDocument,
  330. document,
  331. docElem,
  332. documentIsHTML,
  333. rbuggyQSA,
  334. rbuggyMatches,
  335. matches,
  336. contains,
  337. expando = "sizzle" + 1 * new Date(),
  338. preferredDoc = window.document,
  339. dirruns = 0,
  340. done = 0,
  341. classCache = createCache(),
  342. tokenCache = createCache(),
  343. compilerCache = createCache(),
  344. nonnativeSelectorCache = createCache(),
  345. sortOrder = function (a, b) {
  346. if (a === b) {
  347. hasDuplicate = true;
  348. }
  349. return 0;
  350. },
  351. hasOwn = {}.hasOwnProperty,
  352. arr = [],
  353. pop = arr.pop,
  354. pushNative = arr.push,
  355. push = arr.push,
  356. slice = arr.slice,
  357. indexOf = function (list, elem) {
  358. var i = 0,
  359. len = list.length;
  360. for (; i < len; i++) {
  361. if (list[i] === elem) {
  362. return i;
  363. }
  364. }
  365. return -1;
  366. },
  367. booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + "ismap|loop|multiple|open|readonly|required|scoped",
  368. whitespace = "[\\x20\\t\\r\\n\\f]",
  369. identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",
  370. attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + "*([*^$|!~]?=)" + whitespace + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + "*\\]",
  371. pseudos = ":(" + identifier + ")(?:\\((" + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + ".*" + ")\\)|)",
  372. rwhitespace = new RegExp(whitespace + "+", "g"),
  373. rtrim = new RegExp("^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g"),
  374. rcomma = new RegExp("^" + whitespace + "*," + whitespace + "*"),
  375. rleadingCombinator = new RegExp("^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*"),
  376. rdescend = new RegExp(whitespace + "|>"),
  377. rpseudo = new RegExp(pseudos),
  378. ridentifier = new RegExp("^" + identifier + "$"),
  379. matchExpr = {
  380. ID: new RegExp("^#(" + identifier + ")"),
  381. CLASS: new RegExp("^\\.(" + identifier + ")"),
  382. TAG: new RegExp("^(" + identifier + "|[*])"),
  383. ATTR: new RegExp("^" + attributes),
  384. PSEUDO: new RegExp("^" + pseudos),
  385. CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i"),
  386. bool: new RegExp("^(?:" + booleans + ")$", "i"),
  387. needsContext: new RegExp("^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i"),
  388. },
  389. rhtml = /HTML$/i,
  390. rinputs = /^(?:input|select|textarea|button)$/i,
  391. rheader = /^h\d$/i,
  392. rnative = /^[^{]+\{\s*\[native \w/,
  393. rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
  394. rsibling = /[+~]/,
  395. runescape = new RegExp("\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g"),
  396. funescape = function (escape, nonHex) {
  397. var high = "0x" + escape.slice(1) - 0x10000;
  398. return nonHex ? nonHex : high < 0 ? String.fromCharCode(high + 0x10000) : String.fromCharCode((high >> 10) | 0xd800, (high & 0x3ff) | 0xdc00);
  399. },
  400. rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
  401. fcssescape = function (ch, asCodePoint) {
  402. if (asCodePoint) {
  403. if (ch === "\0") {
  404. return "\uFFFD";
  405. }
  406. return ch.slice(0, -1) + "\\" + ch.charCodeAt(ch.length - 1).toString(16) + " ";
  407. }
  408. return "\\" + ch;
  409. },
  410. unloadHandler = function () {
  411. setDocument();
  412. },
  413. inDisabledFieldset = addCombinator(
  414. function (elem) {
  415. return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset";
  416. },
  417. {
  418. dir: "parentNode",
  419. next: "legend"
  420. }
  421. );
  422. try {
  423. push.apply((arr = slice.call(preferredDoc.childNodes)), preferredDoc.childNodes);
  424. arr[preferredDoc.childNodes.length].nodeType;
  425. } catch (e) {
  426. push = {
  427. apply: arr.length ?
  428. function (target, els) {
  429. pushNative.apply(target, slice.call(els));
  430. } :
  431. function (target, els) {
  432. var j = target.length,
  433. i = 0;
  434. while ((target[j++] = els[i++])) { }
  435. target.length = j - 1;
  436. },
  437. };
  438. }
  439.  
  440. function Sizzle(selector, context, results, seed) {
  441. var m,
  442. i,
  443. elem,
  444. nid,
  445. match,
  446. groups,
  447. newSelector,
  448. newContext = context && context.ownerDocument,
  449. nodeType = context ? context.nodeType : 9;
  450. results = results || [];
  451. if (typeof selector !== "string" || !selector || (nodeType !== 1 && nodeType !== 9 && nodeType !== 11)) {
  452. return results;
  453. }
  454. if (!seed) {
  455. setDocument(context);
  456. context = context || document;
  457. if (documentIsHTML) {
  458. if (nodeType !== 11 && (match = rquickExpr.exec(selector))) {
  459. if ((m = match[1])) {
  460. if (nodeType === 9) {
  461. if ((elem = context.getElementById(m))) {
  462. if (elem.id === m) {
  463. results.push(elem);
  464. return results;
  465. }
  466. } else {
  467. return results;
  468. }
  469. } else {
  470. if (newContext && (elem = newContext.getElementById(m)) && contains(context, elem) && elem.id === m) {
  471. results.push(elem);
  472. return results;
  473. }
  474. }
  475. } else if (match[2]) {
  476. push.apply(results, context.getElementsByTagName(selector));
  477. return results;
  478. } else if ((m = match[3]) && support.getElementsByClassName && context.getElementsByClassName) {
  479. push.apply(results, context.getElementsByClassName(m));
  480. return results;
  481. }
  482. }
  483. if (support.qsa && !nonnativeSelectorCache[selector + " "] && (!rbuggyQSA || !rbuggyQSA.test(selector)) && (nodeType !== 1 || context.nodeName.toLowerCase() !== "object")) {
  484. newSelector = selector;
  485. newContext = context;
  486. if (nodeType === 1 && (rdescend.test(selector) || rleadingCombinator.test(selector))) {
  487. newContext = (rsibling.test(selector) && testContext(context.parentNode)) || context;
  488. if (newContext !== context || !support.scope) {
  489. if ((nid = context.getAttribute("id"))) {
  490. nid = nid.replace(rcssescape, fcssescape);
  491. } else {
  492. context.setAttribute("id", (nid = expando));
  493. }
  494. }
  495. groups = tokenize(selector);
  496. i = groups.length;
  497. while (i--) {
  498. groups[i] = (nid ? "#" + nid : ":scope") + " " + toSelector(groups[i]);
  499. }
  500. newSelector = groups.join(",");
  501. }
  502. try {
  503. push.apply(results, newContext.querySelectorAll(newSelector));
  504. return results;
  505. } catch (qsaError) {
  506. nonnativeSelectorCache(selector, true);
  507. } finally {
  508. if (nid === expando) {
  509. context.removeAttribute("id");
  510. }
  511. }
  512. }
  513. }
  514. }
  515. return select(selector.replace(rtrim, "$1"), context, results, seed);
  516. }
  517.  
  518. function createCache() {
  519. var keys = [];
  520.  
  521. function cache(key, value) {
  522. if (keys.push(key + " ") > Expr.cacheLength) {
  523. delete cache[keys.shift()];
  524. }
  525. return (cache[key + " "] = value);
  526. }
  527. return cache;
  528. }
  529.  
  530. function markFunction(fn) {
  531. fn[expando] = true;
  532. return fn;
  533. }
  534.  
  535. function assert(fn) {
  536. var el = document.createElement("fieldset");
  537. try {
  538. return !!fn(el);
  539. } catch (e) {
  540. return false;
  541. } finally {
  542. if (el.parentNode) {
  543. el.parentNode.removeChild(el);
  544. }
  545. el = null;
  546. }
  547. }
  548.  
  549. function addHandle(attrs, handler) {
  550. var arr = attrs.split("|"),
  551. i = arr.length;
  552. while (i--) {
  553. Expr.attrHandle[arr[i]] = handler;
  554. }
  555. }
  556.  
  557. function siblingCheck(a, b) {
  558. var cur = b && a,
  559. diff = cur && a.nodeType === 1 && b.nodeType === 1 && a.sourceIndex - b.sourceIndex;
  560. if (diff) {
  561. return diff;
  562. }
  563. if (cur) {
  564. while ((cur = cur.nextSibling)) {
  565. if (cur === b) {
  566. return -1;
  567. }
  568. }
  569. }
  570. return a ? 1 : -1;
  571. }
  572.  
  573. function createInputPseudo(type) {
  574. return function (elem) {
  575. var name = elem.nodeName.toLowerCase();
  576. return name === "input" && elem.type === type;
  577. };
  578. }
  579.  
  580. function createButtonPseudo(type) {
  581. return function (elem) {
  582. var name = elem.nodeName.toLowerCase();
  583. return (name === "input" || name === "button") && elem.type === type;
  584. };
  585. }
  586.  
  587. function createDisabledPseudo(disabled) {
  588. return function (elem) {
  589. if ("form" in elem) {
  590. if (elem.parentNode && elem.disabled === false) {
  591. if ("label" in elem) {
  592. if ("label" in elem.parentNode) {
  593. return elem.parentNode.disabled === disabled;
  594. } else {
  595. return elem.disabled === disabled;
  596. }
  597. }
  598. return elem.isDisabled === disabled || (elem.isDisabled !== !disabled && inDisabledFieldset(elem) === disabled);
  599. }
  600. return elem.disabled === disabled;
  601. } else if ("label" in elem) {
  602. return elem.disabled === disabled;
  603. }
  604. return false;
  605. };
  606. }
  607.  
  608. function createPositionalPseudo(fn) {
  609. return markFunction(function (argument) {
  610. argument = +argument;
  611. return markFunction(function (seed, matches) {
  612. var j,
  613. matchIndexes = fn([], seed.length, argument),
  614. i = matchIndexes.length;
  615. while (i--) {
  616. if (seed[(j = matchIndexes[i])]) {
  617. seed[j] = !(matches[j] = seed[j]);
  618. }
  619. }
  620. });
  621. });
  622. }
  623.  
  624. function testContext(context) {
  625. return context && typeof context.getElementsByTagName !== "undefined" && context;
  626. }
  627. support = Sizzle.support = {};
  628. isXML = Sizzle.isXML = function (elem) {
  629. var namespace = elem && elem.namespaceURI,
  630. docElem = elem && (elem.ownerDocument || elem).documentElement;
  631. return !rhtml.test(namespace || (docElem && docElem.nodeName) || "HTML");
  632. };
  633. setDocument = Sizzle.setDocument = function (node) {
  634. var hasCompare,
  635. subWindow,
  636. doc = node ? node.ownerDocument || node : preferredDoc;
  637. if (doc == document || doc.nodeType !== 9 || !doc.documentElement) {
  638. return document;
  639. }
  640. document = doc;
  641. docElem = document.documentElement;
  642. documentIsHTML = !isXML(document);
  643. if (preferredDoc != document && (subWindow = document.defaultView) && subWindow.top !== subWindow) {
  644. if (subWindow.addEventListener) {
  645. subWindow.addEventListener("unload", unloadHandler, false);
  646. } else if (subWindow.attachEvent) {
  647. subWindow.attachEvent("onunload", unloadHandler);
  648. }
  649. }
  650. support.scope = assert(function (el) {
  651. docElem.appendChild(el).appendChild(document.createElement("div"));
  652. return typeof el.querySelectorAll !== "undefined" && !el.querySelectorAll(":scope fieldset div").length;
  653. });
  654. support.cssHas = assert(function () {
  655. try {
  656. document.querySelector(":has(*,:jqfake)");
  657. return false;
  658. } catch (e) {
  659. return true;
  660. }
  661. });
  662. support.attributes = assert(function (el) {
  663. el.className = "i";
  664. return !el.getAttribute("className");
  665. });
  666. support.getElementsByTagName = assert(function (el) {
  667. el.appendChild(document.createComment(""));
  668. return !el.getElementsByTagName("*").length;
  669. });
  670. support.getElementsByClassName = rnative.test(document.getElementsByClassName);
  671. support.getById = assert(function (el) {
  672. docElem.appendChild(el).id = expando;
  673. return !document.getElementsByName || !document.getElementsByName(expando).length;
  674. });
  675. if (support.getById) {
  676. Expr.filter["ID"] = function (id) {
  677. var attrId = id.replace(runescape, funescape);
  678. return function (elem) {
  679. return elem.getAttribute("id") === attrId;
  680. };
  681. };
  682. Expr.find["ID"] = function (id, context) {
  683. if (typeof context.getElementById !== "undefined" && documentIsHTML) {
  684. var elem = context.getElementById(id);
  685. return elem ? [elem] : [];
  686. }
  687. };
  688. } else {
  689. Expr.filter["ID"] = function (id) {
  690. var attrId = id.replace(runescape, funescape);
  691. return function (elem) {
  692. var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
  693. return node && node.value === attrId;
  694. };
  695. };
  696. Expr.find["ID"] = function (id, context) {
  697. if (typeof context.getElementById !== "undefined" && documentIsHTML) {
  698. var node,
  699. i,
  700. elems,
  701. elem = context.getElementById(id);
  702. if (elem) {
  703. node = elem.getAttributeNode("id");
  704. if (node && node.value === id) {
  705. return [elem];
  706. }
  707. elems = context.getElementsByName(id);
  708. i = 0;
  709. while ((elem = elems[i++])) {
  710. node = elem.getAttributeNode("id");
  711. if (node && node.value === id) {
  712. return [elem];
  713. }
  714. }
  715. }
  716. return [];
  717. }
  718. };
  719. }
  720. Expr.find["TAG"] = support.getElementsByTagName ?
  721. function (tag, context) {
  722. if (typeof context.getElementsByTagName !== "undefined") {
  723. return context.getElementsByTagName(tag);
  724. } else if (support.qsa) {
  725. return context.querySelectorAll(tag);
  726. }
  727. } :
  728. function (tag, context) {
  729. var elem,
  730. tmp = [],
  731. i = 0,
  732. results = context.getElementsByTagName(tag);
  733. if (tag === "*") {
  734. while ((elem = results[i++])) {
  735. if (elem.nodeType === 1) {
  736. tmp.push(elem);
  737. }
  738. }
  739. return tmp;
  740. }
  741. return results;
  742. };
  743. Expr.find["CLASS"] =
  744. support.getElementsByClassName &&
  745. function (className, context) {
  746. if (typeof context.getElementsByClassName !== "undefined" && documentIsHTML) {
  747. return context.getElementsByClassName(className);
  748. }
  749. };
  750. rbuggyMatches = [];
  751. rbuggyQSA = [];
  752. if ((support.qsa = rnative.test(document.querySelectorAll))) {
  753. assert(function (el) {
  754. var input;
  755. docElem.appendChild(el).innerHTML = "<a id='" + expando + "'></a>" + "<select id='" + expando + "-\r\\' msallowcapture=''>" + "<option selected=''></option></select>";
  756. if (el.querySelectorAll("[msallowcapture^='']").length) {
  757. rbuggyQSA.push("[*^$]=" + whitespace + "*(?:''|\"\")");
  758. }
  759. if (!el.querySelectorAll("[selected]").length) {
  760. rbuggyQSA.push("\\[" + whitespace + "*(?:value|" + booleans + ")");
  761. }
  762. if (!el.querySelectorAll("[id~=" + expando + "-]").length) {
  763. rbuggyQSA.push("~=");
  764. }
  765. input = document.createElement("input");
  766. input.setAttribute("name", "");
  767. el.appendChild(input);
  768. if (!el.querySelectorAll("[name='']").length) {
  769. rbuggyQSA.push("\\[" + whitespace + "*name" + whitespace + "*=" + whitespace + "*(?:''|\"\")");
  770. }
  771. if (!el.querySelectorAll(":checked").length) {
  772. rbuggyQSA.push(":checked");
  773. }
  774. if (!el.querySelectorAll("a#" + expando + "+*").length) {
  775. rbuggyQSA.push(".#.+[+~]");
  776. }
  777. el.querySelectorAll("\\\f");
  778. rbuggyQSA.push("[\\r\\n\\f]");
  779. });
  780. assert(function (el) {
  781. el.innerHTML = "<a href='' disabled='disabled'></a>" + "<select disabled='disabled'><option/></select>";
  782. var input = document.createElement("input");
  783. input.setAttribute("type", "hidden");
  784. el.appendChild(input).setAttribute("name", "D");
  785. if (el.querySelectorAll("[name=d]").length) {
  786. rbuggyQSA.push("name" + whitespace + "*[*^$|!~]?=");
  787. }
  788. if (el.querySelectorAll(":enabled").length !== 2) {
  789. rbuggyQSA.push(":enabled", ":disabled");
  790. }
  791. docElem.appendChild(el).disabled = true;
  792. if (el.querySelectorAll(":disabled").length !== 2) {
  793. rbuggyQSA.push(":enabled", ":disabled");
  794. }
  795. el.querySelectorAll("*,:x");
  796. rbuggyQSA.push(",.*:");
  797. });
  798. }
  799. if ((support.matchesSelector = rnative.test((matches = docElem.matches || docElem.webkitMatchesSelector || docElem.mozMatchesSelector || docElem.oMatchesSelector || docElem.msMatchesSelector)))) {
  800. assert(function (el) {
  801. support.disconnectedMatch = matches.call(el, "*");
  802. matches.call(el, "[s!='']:x");
  803. rbuggyMatches.push("!=", pseudos);
  804. });
  805. }
  806. if (!support.cssHas) {
  807. rbuggyQSA.push(":has");
  808. }
  809. rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join("|"));
  810. rbuggyMatches = rbuggyMatches.length && new RegExp(rbuggyMatches.join("|"));
  811. hasCompare = rnative.test(docElem.compareDocumentPosition);
  812. contains =
  813. hasCompare || rnative.test(docElem.contains) ?
  814. function (a, b) {
  815. var adown = (a.nodeType === 9 && a.documentElement) || a,
  816. bup = b && b.parentNode;
  817. return a === bup || !!(bup && bup.nodeType === 1 && (adown.contains ? adown.contains(bup) : a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16));
  818. } :
  819. function (a, b) {
  820. if (b) {
  821. while ((b = b.parentNode)) {
  822. if (b === a) {
  823. return true;
  824. }
  825. }
  826. }
  827. return false;
  828. };
  829. sortOrder = hasCompare ?
  830. function (a, b) {
  831. if (a === b) {
  832. hasDuplicate = true;
  833. return 0;
  834. }
  835. var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
  836. if (compare) {
  837. return compare;
  838. }
  839. compare = (a.ownerDocument || a) == (b.ownerDocument || b) ? a.compareDocumentPosition(b) : 1;
  840. if (compare & 1 || (!support.sortDetached && b.compareDocumentPosition(a) === compare)) {
  841. if (a == document || (a.ownerDocument == preferredDoc && contains(preferredDoc, a))) {
  842. return -1;
  843. }
  844. if (b == document || (b.ownerDocument == preferredDoc && contains(preferredDoc, b))) {
  845. return 1;
  846. }
  847. return sortInput ? indexOf(sortInput, a) - indexOf(sortInput, b) : 0;
  848. }
  849. return compare & 4 ? -1 : 1;
  850. } :
  851. function (a, b) {
  852. if (a === b) {
  853. hasDuplicate = true;
  854. return 0;
  855. }
  856. var cur,
  857. i = 0,
  858. aup = a.parentNode,
  859. bup = b.parentNode,
  860. ap = [a],
  861. bp = [b];
  862. if (!aup || !bup) {
  863. return a == document ? -1 : b == document ? 1 : aup ? -1 : bup ? 1 : sortInput ? indexOf(sortInput, a) - indexOf(sortInput, b) : 0;
  864. } else if (aup === bup) {
  865. return siblingCheck(a, b);
  866. }
  867. cur = a;
  868. while ((cur = cur.parentNode)) {
  869. ap.unshift(cur);
  870. }
  871. cur = b;
  872. while ((cur = cur.parentNode)) {
  873. bp.unshift(cur);
  874. }
  875. while (ap[i] === bp[i]) {
  876. i++;
  877. }
  878. return i ? siblingCheck(ap[i], bp[i]) : ap[i] == preferredDoc ? -1 : bp[i] == preferredDoc ? 1 : 0;
  879. };
  880. return document;
  881. };
  882. Sizzle.matches = function (expr, elements) {
  883. return Sizzle(expr, null, null, elements);
  884. };
  885. Sizzle.matchesSelector = function (elem, expr) {
  886. setDocument(elem);
  887. if (support.matchesSelector && documentIsHTML && !nonnativeSelectorCache[expr + " "] && (!rbuggyMatches || !rbuggyMatches.test(expr)) && (!rbuggyQSA || !rbuggyQSA.test(expr))) {
  888. try {
  889. var ret = matches.call(elem, expr);
  890. if (ret || support.disconnectedMatch || (elem.document && elem.document.nodeType !== 11)) {
  891. return ret;
  892. }
  893. } catch (e) {
  894. nonnativeSelectorCache(expr, true);
  895. }
  896. }
  897. return Sizzle(expr, document, null, [elem]).length > 0;
  898. };
  899. Sizzle.contains = function (context, elem) {
  900. if ((context.ownerDocument || context) != document) {
  901. setDocument(context);
  902. }
  903. return contains(context, elem);
  904. };
  905. Sizzle.attr = function (elem, name) {
  906. if ((elem.ownerDocument || elem) != document) {
  907. setDocument(elem);
  908. }
  909. var fn = Expr.attrHandle[name.toLowerCase()],
  910. val = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ? fn(elem, name, !documentIsHTML) : undefined;
  911. return val !== undefined ? val : support.attributes || !documentIsHTML ? elem.getAttribute(name) : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;
  912. };
  913. Sizzle.escape = function (sel) {
  914. return (sel + "").replace(rcssescape, fcssescape);
  915. };
  916. Sizzle.error = function (msg) {
  917. throw new Error("Syntax error, unrecognized expression: " + msg);
  918. };
  919. Sizzle.uniqueSort = function (results) {
  920. var elem,
  921. duplicates = [],
  922. j = 0,
  923. i = 0;
  924. hasDuplicate = !support.detectDuplicates;
  925. sortInput = !support.sortStable && results.slice(0);
  926. results.sort(sortOrder);
  927. if (hasDuplicate) {
  928. while ((elem = results[i++])) {
  929. if (elem === results[i]) {
  930. j = duplicates.push(i);
  931. }
  932. }
  933. while (j--) {
  934. results.splice(duplicates[j], 1);
  935. }
  936. }
  937. sortInput = null;
  938. return results;
  939. };
  940. getText = Sizzle.getText = function (elem) {
  941. var node,
  942. ret = "",
  943. i = 0,
  944. nodeType = elem.nodeType;
  945. if (!nodeType) {
  946. while ((node = elem[i++])) {
  947. ret += getText(node);
  948. }
  949. } else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {
  950. if (typeof elem.textContent === "string") {
  951. return elem.textContent;
  952. } else {
  953. for (elem = elem.firstChild; elem; elem = elem.nextSibling) {
  954. ret += getText(elem);
  955. }
  956. }
  957. } else if (nodeType === 3 || nodeType === 4) {
  958. return elem.nodeValue;
  959. }
  960. return ret;
  961. };
  962. Expr = Sizzle.selectors = {
  963. cacheLength: 50,
  964. createPseudo: markFunction,
  965. match: matchExpr,
  966. attrHandle: {},
  967. find: {},
  968. relative: {
  969. ">": {
  970. dir: "parentNode",
  971. first: true
  972. },
  973. " ": {
  974. dir: "parentNode"
  975. },
  976. "+": {
  977. dir: "previousSibling",
  978. first: true
  979. },
  980. "~": {
  981. dir: "previousSibling"
  982. }
  983. },
  984. preFilter: {
  985. ATTR: function (match) {
  986. match[1] = match[1].replace(runescape, funescape);
  987. match[3] = (match[3] || match[4] || match[5] || "").replace(runescape, funescape);
  988. if (match[2] === "~=") {
  989. match[3] = " " + match[3] + " ";
  990. }
  991. return match.slice(0, 4);
  992. },
  993. CHILD: function (match) {
  994. match[1] = match[1].toLowerCase();
  995. if (match[1].slice(0, 3) === "nth") {
  996. if (!match[3]) {
  997. Sizzle.error(match[0]);
  998. }
  999. match[4] = +(match[4] ? match[5] + (match[6] || 1) : 2 * (match[3] === "even" || match[3] === "odd"));
  1000. match[5] = +(match[7] + match[8] || match[3] === "odd");
  1001. } else if (match[3]) {
  1002. Sizzle.error(match[0]);
  1003. }
  1004. return match;
  1005. },
  1006. PSEUDO: function (match) {
  1007. var excess,
  1008. unquoted = !match[6] && match[2];
  1009. if (matchExpr["CHILD"].test(match[0])) {
  1010. return null;
  1011. }
  1012. if (match[3]) {
  1013. match[2] = match[4] || match[5] || "";
  1014. } else if (unquoted && rpseudo.test(unquoted) && (excess = tokenize(unquoted, true)) && (excess = unquoted.indexOf(")", unquoted.length - excess) - unquoted.length)) {
  1015. match[0] = match[0].slice(0, excess);
  1016. match[2] = unquoted.slice(0, excess);
  1017. }
  1018. return match.slice(0, 3);
  1019. },
  1020. },
  1021. filter: {
  1022. TAG: function (nodeNameSelector) {
  1023. var nodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();
  1024. return nodeNameSelector === "*" ?
  1025. function () {
  1026. return true;
  1027. } :
  1028. function (elem) {
  1029. return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
  1030. };
  1031. },
  1032. CLASS: function (className) {
  1033. var pattern = classCache[className + " "];
  1034. return (
  1035. pattern ||
  1036. ((pattern = new RegExp("(^|" + whitespace + ")" + className + "(" + whitespace + "|$)")) &&
  1037. classCache(className, function (elem) {
  1038. return pattern.test((typeof elem.className === "string" && elem.className) || (typeof elem.getAttribute !== "undefined" && elem.getAttribute("class")) || "");
  1039. }))
  1040. );
  1041. },
  1042. ATTR: function (name, operator, check) {
  1043. return function (elem) {
  1044. var result = Sizzle.attr(elem, name);
  1045. if (result == null) {
  1046. return operator === "!=";
  1047. }
  1048. if (!operator) {
  1049. return true;
  1050. }
  1051. result += "";
  1052. return operator === "=" ? result === check : operator === "!=" ? result !== check : operator === "^=" ? check && result.indexOf(check) === 0 : operator === "*=" ? check && result.indexOf(check) > -1 : operator === "$=" ? check && result.slice(-check.length) === check : operator === "~=" ? (" " + result.replace(rwhitespace, " ") + " ").indexOf(check) > -1 : operator === "|=" ? result === check || result.slice(0, check.length + 1) === check + "-" : false;
  1053. };
  1054. },
  1055. CHILD: function (type, what, _argument, first, last) {
  1056. var simple = type.slice(0, 3) !== "nth",
  1057. forward = type.slice(-4) !== "last",
  1058. ofType = what === "of-type";
  1059. return first === 1 && last === 0 ?
  1060. function (elem) {
  1061. return !!elem.parentNode;
  1062. } :
  1063. function (elem, _context, xml) {
  1064. var cache,
  1065. uniqueCache,
  1066. outerCache,
  1067. node,
  1068. nodeIndex,
  1069. start,
  1070. dir = simple !== forward ? "nextSibling" : "previousSibling",
  1071. parent = elem.parentNode,
  1072. name = ofType && elem.nodeName.toLowerCase(),
  1073. useCache = !xml && !ofType,
  1074. diff = false;
  1075. if (parent) {
  1076. if (simple) {
  1077. while (dir) {
  1078. node = elem;
  1079. while ((node = node[dir])) {
  1080. if (ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) {
  1081. return false;
  1082. }
  1083. }
  1084. start = dir = type === "only" && !start && "nextSibling";
  1085. }
  1086. return true;
  1087. }
  1088. start = [forward ? parent.firstChild : parent.lastChild];
  1089. if (forward && useCache) {
  1090. node = parent;
  1091. outerCache = node[expando] || (node[expando] = {});
  1092. uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});
  1093. cache = uniqueCache[type] || [];
  1094. nodeIndex = cache[0] === dirruns && cache[1];
  1095. diff = nodeIndex && cache[2];
  1096. node = nodeIndex && parent.childNodes[nodeIndex];
  1097. while ((node = (++nodeIndex && node && node[dir]) || (diff = nodeIndex = 0) || start.pop())) {
  1098. if (node.nodeType === 1 && ++diff && node === elem) {
  1099. uniqueCache[type] = [dirruns, nodeIndex, diff];
  1100. break;
  1101. }
  1102. }
  1103. } else {
  1104. if (useCache) {
  1105. node = elem;
  1106. outerCache = node[expando] || (node[expando] = {});
  1107. uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});
  1108. cache = uniqueCache[type] || [];
  1109. nodeIndex = cache[0] === dirruns && cache[1];
  1110. diff = nodeIndex;
  1111. }
  1112. if (diff === false) {
  1113. while ((node = (++nodeIndex && node && node[dir]) || (diff = nodeIndex = 0) || start.pop())) {
  1114. if ((ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) && ++diff) {
  1115. if (useCache) {
  1116. outerCache = node[expando] || (node[expando] = {});
  1117. uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});
  1118. uniqueCache[type] = [dirruns, diff];
  1119. }
  1120. if (node === elem) {
  1121. break;
  1122. }
  1123. }
  1124. }
  1125. }
  1126. }
  1127. diff -= last;
  1128. return diff === first || (diff % first === 0 && diff / first >= 0);
  1129. }
  1130. };
  1131. },
  1132. PSEUDO: function (pseudo, argument) {
  1133. var args,
  1134. fn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] || Sizzle.error("unsupported pseudo: " + pseudo);
  1135. if (fn[expando]) {
  1136. return fn(argument);
  1137. }
  1138. if (fn.length > 1) {
  1139. args = [pseudo, pseudo, "", argument];
  1140. return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ?
  1141. markFunction(function (seed, matches) {
  1142. var idx,
  1143. matched = fn(seed, argument),
  1144. i = matched.length;
  1145. while (i--) {
  1146. idx = indexOf(seed, matched[i]);
  1147. seed[idx] = !(matches[idx] = matched[i]);
  1148. }
  1149. }) :
  1150. function (elem) {
  1151. return fn(elem, 0, args);
  1152. };
  1153. }
  1154. return fn;
  1155. },
  1156. },
  1157. pseudos: {
  1158. not: markFunction(function (selector) {
  1159. var input = [],
  1160. results = [],
  1161. matcher = compile(selector.replace(rtrim, "$1"));
  1162. return matcher[expando] ?
  1163. markFunction(function (seed, matches, _context, xml) {
  1164. var elem,
  1165. unmatched = matcher(seed, null, xml, []),
  1166. i = seed.length;
  1167. while (i--) {
  1168. if ((elem = unmatched[i])) {
  1169. seed[i] = !(matches[i] = elem);
  1170. }
  1171. }
  1172. }) :
  1173. function (elem, _context, xml) {
  1174. input[0] = elem;
  1175. matcher(input, null, xml, results);
  1176. input[0] = null;
  1177. return !results.pop();
  1178. };
  1179. }),
  1180. has: markFunction(function (selector) {
  1181. return function (elem) {
  1182. return Sizzle(selector, elem).length > 0;
  1183. };
  1184. }),
  1185. contains: markFunction(function (text) {
  1186. text = text.replace(runescape, funescape);
  1187. return function (elem) {
  1188. return (elem.textContent || getText(elem)).indexOf(text) > -1;
  1189. };
  1190. }),
  1191. lang: markFunction(function (lang) {
  1192. if (!ridentifier.test(lang || "")) {
  1193. Sizzle.error("unsupported lang: " + lang);
  1194. }
  1195. lang = lang.replace(runescape, funescape).toLowerCase();
  1196. return function (elem) {
  1197. var elemLang;
  1198. do {
  1199. if ((elemLang = documentIsHTML ? elem.lang : elem.getAttribute("xml:lang") || elem.getAttribute("lang"))) {
  1200. elemLang = elemLang.toLowerCase();
  1201. return elemLang === lang || elemLang.indexOf(lang + "-") === 0;
  1202. }
  1203. } while ((elem = elem.parentNode) && elem.nodeType === 1);
  1204. return false;
  1205. };
  1206. }),
  1207. target: function (elem) {
  1208. var hash = window.location && window.location.hash;
  1209. return hash && hash.slice(1) === elem.id;
  1210. },
  1211. root: function (elem) {
  1212. return elem === docElem;
  1213. },
  1214. focus: function (elem) {
  1215. return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
  1216. },
  1217. enabled: createDisabledPseudo(false),
  1218. disabled: createDisabledPseudo(true),
  1219. checked: function (elem) {
  1220. var nodeName = elem.nodeName.toLowerCase();
  1221. return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
  1222. },
  1223. selected: function (elem) {
  1224. if (elem.parentNode) {
  1225. elem.parentNode.selectedIndex;
  1226. }
  1227. return elem.selected === true;
  1228. },
  1229. empty: function (elem) {
  1230. for (elem = elem.firstChild; elem; elem = elem.nextSibling) {
  1231. if (elem.nodeType < 6) {
  1232. return false;
  1233. }
  1234. }
  1235. return true;
  1236. },
  1237. parent: function (elem) {
  1238. return !Expr.pseudos["empty"](elem);
  1239. },
  1240. header: function (elem) {
  1241. return rheader.test(elem.nodeName);
  1242. },
  1243. input: function (elem) {
  1244. return rinputs.test(elem.nodeName);
  1245. },
  1246. button: function (elem) {
  1247. var name = elem.nodeName.toLowerCase();
  1248. return (name === "input" && elem.type === "button") || name === "button";
  1249. },
  1250. text: function (elem) {
  1251. var attr;
  1252. return elem.nodeName.toLowerCase() === "input" && elem.type === "text" && ((attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text");
  1253. },
  1254. first: createPositionalPseudo(function () {
  1255. return [0];
  1256. }),
  1257. last: createPositionalPseudo(function (_matchIndexes, length) {
  1258. return [length - 1];
  1259. }),
  1260. eq: createPositionalPseudo(function (_matchIndexes, length, argument) {
  1261. return [argument < 0 ? argument + length : argument];
  1262. }),
  1263. even: createPositionalPseudo(function (matchIndexes, length) {
  1264. var i = 0;
  1265. for (; i < length; i += 2) {
  1266. matchIndexes.push(i);
  1267. }
  1268. return matchIndexes;
  1269. }),
  1270. odd: createPositionalPseudo(function (matchIndexes, length) {
  1271. var i = 1;
  1272. for (; i < length; i += 2) {
  1273. matchIndexes.push(i);
  1274. }
  1275. return matchIndexes;
  1276. }),
  1277. lt: createPositionalPseudo(function (matchIndexes, length, argument) {
  1278. var i = argument < 0 ? argument + length : argument > length ? length : argument;
  1279. for (; --i >= 0;) {
  1280. matchIndexes.push(i);
  1281. }
  1282. return matchIndexes;
  1283. }),
  1284. gt: createPositionalPseudo(function (matchIndexes, length, argument) {
  1285. var i = argument < 0 ? argument + length : argument;
  1286. for (; ++i < length;) {
  1287. matchIndexes.push(i);
  1288. }
  1289. return matchIndexes;
  1290. }),
  1291. },
  1292. };
  1293. Expr.pseudos["nth"] = Expr.pseudos["eq"];
  1294. for (i in {
  1295. radio: true,
  1296. checkbox: true,
  1297. file: true,
  1298. password: true,
  1299. image: true
  1300. }) {
  1301. Expr.pseudos[i] = createInputPseudo(i);
  1302. }
  1303. for (i in {
  1304. submit: true,
  1305. reset: true
  1306. }) {
  1307. Expr.pseudos[i] = createButtonPseudo(i);
  1308. }
  1309.  
  1310. function setFilters() { }
  1311. setFilters.prototype = Expr.filters = Expr.pseudos;
  1312. Expr.setFilters = new setFilters();
  1313. tokenize = Sizzle.tokenize = function (selector, parseOnly) {
  1314. var matched,
  1315. match,
  1316. tokens,
  1317. type,
  1318. soFar,
  1319. groups,
  1320. preFilters,
  1321. cached = tokenCache[selector + " "];
  1322. if (cached) {
  1323. return parseOnly ? 0 : cached.slice(0);
  1324. }
  1325. soFar = selector;
  1326. groups = [];
  1327. preFilters = Expr.preFilter;
  1328. while (soFar) {
  1329. if (!matched || (match = rcomma.exec(soFar))) {
  1330. if (match) {
  1331. soFar = soFar.slice(match[0].length) || soFar;
  1332. }
  1333. groups.push((tokens = []));
  1334. }
  1335. matched = false;
  1336. if ((match = rleadingCombinator.exec(soFar))) {
  1337. matched = match.shift();
  1338. tokens.push({
  1339. value: matched,
  1340. type: match[0].replace(rtrim, " "),
  1341. });
  1342. soFar = soFar.slice(matched.length);
  1343. }
  1344. for (type in Expr.filter) {
  1345. if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] || (match = preFilters[type](match)))) {
  1346. matched = match.shift();
  1347. tokens.push({
  1348. value: matched,
  1349. type: type,
  1350. matches: match
  1351. });
  1352. soFar = soFar.slice(matched.length);
  1353. }
  1354. }
  1355. if (!matched) {
  1356. break;
  1357. }
  1358. }
  1359. return parseOnly ? soFar.length : soFar ? Sizzle.error(selector) : tokenCache(selector, groups).slice(0);
  1360. };
  1361.  
  1362. function toSelector(tokens) {
  1363. var i = 0,
  1364. len = tokens.length,
  1365. selector = "";
  1366. for (; i < len; i++) {
  1367. selector += tokens[i].value;
  1368. }
  1369. return selector;
  1370. }
  1371.  
  1372. function addCombinator(matcher, combinator, base) {
  1373. var dir = combinator.dir,
  1374. skip = combinator.next,
  1375. key = skip || dir,
  1376. checkNonElements = base && key === "parentNode",
  1377. doneName = done++;
  1378. return combinator.first ?
  1379. function (elem, context, xml) {
  1380. while ((elem = elem[dir])) {
  1381. if (elem.nodeType === 1 || checkNonElements) {
  1382. return matcher(elem, context, xml);
  1383. }
  1384. }
  1385. return false;
  1386. } :
  1387. function (elem, context, xml) {
  1388. var oldCache,
  1389. uniqueCache,
  1390. outerCache,
  1391. newCache = [dirruns, doneName];
  1392. if (xml) {
  1393. while ((elem = elem[dir])) {
  1394. if (elem.nodeType === 1 || checkNonElements) {
  1395. if (matcher(elem, context, xml)) {
  1396. return true;
  1397. }
  1398. }
  1399. }
  1400. } else {
  1401. while ((elem = elem[dir])) {
  1402. if (elem.nodeType === 1 || checkNonElements) {
  1403. outerCache = elem[expando] || (elem[expando] = {});
  1404. uniqueCache = outerCache[elem.uniqueID] || (outerCache[elem.uniqueID] = {});
  1405. if (skip && skip === elem.nodeName.toLowerCase()) {
  1406. elem = elem[dir] || elem;
  1407. } else if ((oldCache = uniqueCache[key]) && oldCache[0] === dirruns && oldCache[1] === doneName) {
  1408. return (newCache[2] = oldCache[2]);
  1409. } else {
  1410. uniqueCache[key] = newCache;
  1411. if ((newCache[2] = matcher(elem, context, xml))) {
  1412. return true;
  1413. }
  1414. }
  1415. }
  1416. }
  1417. }
  1418. return false;
  1419. };
  1420. }
  1421.  
  1422. function elementMatcher(matchers) {
  1423. return matchers.length > 1 ?
  1424. function (elem, context, xml) {
  1425. var i = matchers.length;
  1426. while (i--) {
  1427. if (!matchers[i](elem, context, xml)) {
  1428. return false;
  1429. }
  1430. }
  1431. return true;
  1432. } :
  1433. matchers[0];
  1434. }
  1435.  
  1436. function multipleContexts(selector, contexts, results) {
  1437. var i = 0,
  1438. len = contexts.length;
  1439. for (; i < len; i++) {
  1440. Sizzle(selector, contexts[i], results);
  1441. }
  1442. return results;
  1443. }
  1444.  
  1445. function condense(unmatched, map, filter, context, xml) {
  1446. var elem,
  1447. newUnmatched = [],
  1448. i = 0,
  1449. len = unmatched.length,
  1450. mapped = map != null;
  1451. for (; i < len; i++) {
  1452. if ((elem = unmatched[i])) {
  1453. if (!filter || filter(elem, context, xml)) {
  1454. newUnmatched.push(elem);
  1455. if (mapped) {
  1456. map.push(i);
  1457. }
  1458. }
  1459. }
  1460. }
  1461. return newUnmatched;
  1462. }
  1463.  
  1464. function setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {
  1465. if (postFilter && !postFilter[expando]) {
  1466. postFilter = setMatcher(postFilter);
  1467. }
  1468. if (postFinder && !postFinder[expando]) {
  1469. postFinder = setMatcher(postFinder, postSelector);
  1470. }
  1471. return markFunction(function (seed, results, context, xml) {
  1472. var temp,
  1473. i,
  1474. elem,
  1475. preMap = [],
  1476. postMap = [],
  1477. preexisting = results.length,
  1478. elems = seed || multipleContexts(selector || "*", context.nodeType ? [context] : context, []),
  1479. matcherIn = preFilter && (seed || !selector) ? condense(elems, preMap, preFilter, context, xml) : elems,
  1480. matcherOut = matcher ? (postFinder || (seed ? preFilter : preexisting || postFilter) ? [] : results) : matcherIn;
  1481. if (matcher) {
  1482. matcher(matcherIn, matcherOut, context, xml);
  1483. }
  1484. if (postFilter) {
  1485. temp = condense(matcherOut, postMap);
  1486. postFilter(temp, [], context, xml);
  1487. i = temp.length;
  1488. while (i--) {
  1489. if ((elem = temp[i])) {
  1490. matcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);
  1491. }
  1492. }
  1493. }
  1494. if (seed) {
  1495. if (postFinder || preFilter) {
  1496. if (postFinder) {
  1497. temp = [];
  1498. i = matcherOut.length;
  1499. while (i--) {
  1500. if ((elem = matcherOut[i])) {
  1501. temp.push((matcherIn[i] = elem));
  1502. }
  1503. }
  1504. postFinder(null, (matcherOut = []), temp, xml);
  1505. }
  1506. i = matcherOut.length;
  1507. while (i--) {
  1508. if ((elem = matcherOut[i]) && (temp = postFinder ? indexOf(seed, elem) : preMap[i]) > -1) {
  1509. seed[temp] = !(results[temp] = elem);
  1510. }
  1511. }
  1512. }
  1513. } else {
  1514. matcherOut = condense(matcherOut === results ? matcherOut.splice(preexisting, matcherOut.length) : matcherOut);
  1515. if (postFinder) {
  1516. postFinder(null, results, matcherOut, xml);
  1517. } else {
  1518. push.apply(results, matcherOut);
  1519. }
  1520. }
  1521. });
  1522. }
  1523.  
  1524. function matcherFromTokens(tokens) {
  1525. var checkContext,
  1526. matcher,
  1527. j,
  1528. len = tokens.length,
  1529. leadingRelative = Expr.relative[tokens[0].type],
  1530. implicitRelative = leadingRelative || Expr.relative[" "],
  1531. i = leadingRelative ? 1 : 0,
  1532. matchContext = addCombinator(
  1533. function (elem) {
  1534. return elem === checkContext;
  1535. },
  1536. implicitRelative,
  1537. true
  1538. ),
  1539. matchAnyContext = addCombinator(
  1540. function (elem) {
  1541. return indexOf(checkContext, elem) > -1;
  1542. },
  1543. implicitRelative,
  1544. true
  1545. ),
  1546. matchers = [
  1547. function (elem, context, xml) {
  1548. var ret = (!leadingRelative && (xml || context !== outermostContext)) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml));
  1549. checkContext = null;
  1550. return ret;
  1551. },
  1552. ];
  1553. for (; i < len; i++) {
  1554. if ((matcher = Expr.relative[tokens[i].type])) {
  1555. matchers = [addCombinator(elementMatcher(matchers), matcher)];
  1556. } else {
  1557. matcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches);
  1558. if (matcher[expando]) {
  1559. j = ++i;
  1560. for (; j < len; j++) {
  1561. if (Expr.relative[tokens[j].type]) {
  1562. break;
  1563. }
  1564. }
  1565. return setMatcher(i > 1 && elementMatcher(matchers), i > 1 && toSelector(tokens.slice(0, i - 1).concat({
  1566. value: tokens[i - 2].type === " " ? "*" : ""
  1567. })).replace(rtrim, "$1"), matcher, i < j && matcherFromTokens(tokens.slice(i, j)), j < len && matcherFromTokens((tokens = tokens.slice(j))), j < len && toSelector(tokens));
  1568. }
  1569. matchers.push(matcher);
  1570. }
  1571. }
  1572. return elementMatcher(matchers);
  1573. }
  1574.  
  1575. function matcherFromGroupMatchers(elementMatchers, setMatchers) {
  1576. var bySet = setMatchers.length > 0,
  1577. byElement = elementMatchers.length > 0,
  1578. superMatcher = function (seed, context, xml, results, outermost) {
  1579. var elem,
  1580. j,
  1581. matcher,
  1582. matchedCount = 0,
  1583. i = "0",
  1584. unmatched = seed && [],
  1585. setMatched = [],
  1586. contextBackup = outermostContext,
  1587. elems = seed || (byElement && Expr.find["TAG"]("*", outermost)),
  1588. dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
  1589. len = elems.length;
  1590. if (outermost) {
  1591. outermostContext = context == document || context || outermost;
  1592. }
  1593. for (; i !== len && (elem = elems[i]) != null; i++) {
  1594. if (byElement && elem) {
  1595. j = 0;
  1596. if (!context && elem.ownerDocument != document) {
  1597. setDocument(elem);
  1598. xml = !documentIsHTML;
  1599. }
  1600. while ((matcher = elementMatchers[j++])) {
  1601. if (matcher(elem, context || document, xml)) {
  1602. results.push(elem);
  1603. break;
  1604. }
  1605. }
  1606. if (outermost) {
  1607. dirruns = dirrunsUnique;
  1608. }
  1609. }
  1610. if (bySet) {
  1611. if ((elem = !matcher && elem)) {
  1612. matchedCount--;
  1613. }
  1614. if (seed) {
  1615. unmatched.push(elem);
  1616. }
  1617. }
  1618. }
  1619. matchedCount += i;
  1620. if (bySet && i !== matchedCount) {
  1621. j = 0;
  1622. while ((matcher = setMatchers[j++])) {
  1623. matcher(unmatched, setMatched, context, xml);
  1624. }
  1625. if (seed) {
  1626. if (matchedCount > 0) {
  1627. while (i--) {
  1628. if (!(unmatched[i] || setMatched[i])) {
  1629. setMatched[i] = pop.call(results);
  1630. }
  1631. }
  1632. }
  1633. setMatched = condense(setMatched);
  1634. }
  1635. push.apply(results, setMatched);
  1636. if (outermost && !seed && setMatched.length > 0 && matchedCount + setMatchers.length > 1) {
  1637. Sizzle.uniqueSort(results);
  1638. }
  1639. }
  1640. if (outermost) {
  1641. dirruns = dirrunsUnique;
  1642. outermostContext = contextBackup;
  1643. }
  1644. return unmatched;
  1645. };
  1646. return bySet ? markFunction(superMatcher) : superMatcher;
  1647. }
  1648. compile = Sizzle.compile = function (selector, match) {
  1649. var i,
  1650. setMatchers = [],
  1651. elementMatchers = [],
  1652. cached = compilerCache[selector + " "];
  1653. if (!cached) {
  1654. if (!match) {
  1655. match = tokenize(selector);
  1656. }
  1657. i = match.length;
  1658. while (i--) {
  1659. cached = matcherFromTokens(match[i]);
  1660. if (cached[expando]) {
  1661. setMatchers.push(cached);
  1662. } else {
  1663. elementMatchers.push(cached);
  1664. }
  1665. }
  1666. cached = compilerCache(selector, matcherFromGroupMatchers(elementMatchers, setMatchers));
  1667. cached.selector = selector;
  1668. }
  1669. return cached;
  1670. };
  1671. select = Sizzle.select = function (selector, context, results, seed) {
  1672. var i,
  1673. tokens,
  1674. token,
  1675. type,
  1676. find,
  1677. compiled = typeof selector === "function" && selector,
  1678. match = !seed && tokenize((selector = compiled.selector || selector));
  1679. results = results || [];
  1680. if (match.length === 1) {
  1681. tokens = match[0] = match[0].slice(0);
  1682. if (tokens.length > 2 && (token = tokens[0]).type === "ID" && context.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {
  1683. context = (Expr.find["ID"](token.matches[0].replace(runescape, funescape), context) || [])[0];
  1684. if (!context) {
  1685. return results;
  1686. } else if (compiled) {
  1687. context = context.parentNode;
  1688. }
  1689. selector = selector.slice(tokens.shift().value.length);
  1690. }
  1691. i = matchExpr["needsContext"].test(selector) ? 0 : tokens.length;
  1692. while (i--) {
  1693. token = tokens[i];
  1694. if (Expr.relative[(type = token.type)]) {
  1695. break;
  1696. }
  1697. if ((find = Expr.find[type])) {
  1698. if ((seed = find(token.matches[0].replace(runescape, funescape), (rsibling.test(tokens[0].type) && testContext(context.parentNode)) || context))) {
  1699. tokens.splice(i, 1);
  1700. selector = seed.length && toSelector(tokens);
  1701. if (!selector) {
  1702. push.apply(results, seed);
  1703. return results;
  1704. }
  1705. break;
  1706. }
  1707. }
  1708. }
  1709. }
  1710. (compiled || compile(selector, match))(seed, context, !documentIsHTML, results, !context || (rsibling.test(selector) && testContext(context.parentNode)) || context);
  1711. return results;
  1712. };
  1713. support.sortStable = expando.split("").sort(sortOrder).join("") === expando;
  1714. support.detectDuplicates = !!hasDuplicate;
  1715. setDocument();
  1716. support.sortDetached = assert(function (el) {
  1717. return el.compareDocumentPosition(document.createElement("fieldset")) & 1;
  1718. });
  1719. if (
  1720. !assert(function (el) {
  1721. el.innerHTML = "<a href='#'></a>";
  1722. return el.firstChild.getAttribute("href") === "#";
  1723. })
  1724. ) {
  1725. addHandle("type|href|height|width", function (elem, name, isXML) {
  1726. if (!isXML) {
  1727. return elem.getAttribute(name, name.toLowerCase() === "type" ? 1 : 2);
  1728. }
  1729. });
  1730. }
  1731. if (
  1732. !support.attributes ||
  1733. !assert(function (el) {
  1734. el.innerHTML = "<input/>";
  1735. el.firstChild.setAttribute("value", "");
  1736. return el.firstChild.getAttribute("value") === "";
  1737. })
  1738. ) {
  1739. addHandle("value", function (elem, _name, isXML) {
  1740. if (!isXML && elem.nodeName.toLowerCase() === "input") {
  1741. return elem.defaultValue;
  1742. }
  1743. });
  1744. }
  1745. if (
  1746. !assert(function (el) {
  1747. return el.getAttribute("disabled") == null;
  1748. })
  1749. ) {
  1750. addHandle(booleans, function (elem, name, isXML) {
  1751. var val;
  1752. if (!isXML) {
  1753. return elem[name] === true ? name.toLowerCase() : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;
  1754. }
  1755. });
  1756. }
  1757. return Sizzle;
  1758. })(window);
  1759. jQuery.find = Sizzle;
  1760. jQuery.expr = Sizzle.selectors;
  1761. jQuery.expr[":"] = jQuery.expr.pseudos;
  1762. jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
  1763. jQuery.text = Sizzle.getText;
  1764. jQuery.isXMLDoc = Sizzle.isXML;
  1765. jQuery.contains = Sizzle.contains;
  1766. jQuery.escapeSelector = Sizzle.escape;
  1767. var dir = function (elem, dir, until) {
  1768. var matched = [],
  1769. truncate = until !== undefined;
  1770. while ((elem = elem[dir]) && elem.nodeType !== 9) {
  1771. if (elem.nodeType === 1) {
  1772. if (truncate && jQuery(elem).is(until)) {
  1773. break;
  1774. }
  1775. matched.push(elem);
  1776. }
  1777. }
  1778. return matched;
  1779. };
  1780. var siblings = function (n, elem) {
  1781. var matched = [];
  1782. for (; n; n = n.nextSibling) {
  1783. if (n.nodeType === 1 && n !== elem) {
  1784. matched.push(n);
  1785. }
  1786. }
  1787. return matched;
  1788. };
  1789. var rneedsContext = jQuery.expr.match.needsContext;
  1790.  
  1791. function nodeName(elem, name) {
  1792. return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
  1793. }
  1794. var rsingleTag = /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;
  1795.  
  1796. function winnow(elements, qualifier, not) {
  1797. if (isFunction(qualifier)) {
  1798. return jQuery.grep(elements, function (elem, i) {
  1799. return !!qualifier.call(elem, i, elem) !== not;
  1800. });
  1801. }
  1802. if (qualifier.nodeType) {
  1803. return jQuery.grep(elements, function (elem) {
  1804. return (elem === qualifier) !== not;
  1805. });
  1806. }
  1807. if (typeof qualifier !== "string") {
  1808. return jQuery.grep(elements, function (elem) {
  1809. return indexOf.call(qualifier, elem) > -1 !== not;
  1810. });
  1811. }
  1812. return jQuery.filter(qualifier, elements, not);
  1813. }
  1814. jQuery.filter = function (expr, elems, not) {
  1815. var elem = elems[0];
  1816. if (not) {
  1817. expr = ":not(" + expr + ")";
  1818. }
  1819. if (elems.length === 1 && elem.nodeType === 1) {
  1820. return jQuery.find.matchesSelector(elem, expr) ? [elem] : [];
  1821. }
  1822. return jQuery.find.matches(
  1823. expr,
  1824. jQuery.grep(elems, function (elem) {
  1825. return elem.nodeType === 1;
  1826. })
  1827. );
  1828. };
  1829. jQuery.fn.extend({
  1830. find: function (selector) {
  1831. var i,
  1832. ret,
  1833. len = this.length,
  1834. self = this;
  1835. if (typeof selector !== "string") {
  1836. return this.pushStack(
  1837. jQuery(selector).filter(function () {
  1838. for (i = 0; i < len; i++) {
  1839. if (jQuery.contains(self[i], this)) {
  1840. return true;
  1841. }
  1842. }
  1843. })
  1844. );
  1845. }
  1846. ret = this.pushStack([]);
  1847. for (i = 0; i < len; i++) {
  1848. jQuery.find(selector, self[i], ret);
  1849. }
  1850. return len > 1 ? jQuery.uniqueSort(ret) : ret;
  1851. },
  1852. filter: function (selector) {
  1853. return this.pushStack(winnow(this, selector || [], false));
  1854. },
  1855. not: function (selector) {
  1856. return this.pushStack(winnow(this, selector || [], true));
  1857. },
  1858. is: function (selector) {
  1859. return !!winnow(this, typeof selector === "string" && rneedsContext.test(selector) ? jQuery(selector) : selector || [], false).length;
  1860. },
  1861. });
  1862. var rootjQuery,
  1863. rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
  1864. init = (jQuery.fn.init = function (selector, context, root) {
  1865. var match, elem;
  1866. if (!selector) {
  1867. return this;
  1868. }
  1869. root = root || rootjQuery;
  1870. if (typeof selector === "string") {
  1871. if (selector[0] === "<" && selector[selector.length - 1] === ">" && selector.length >= 3) {
  1872. match = [null, selector, null];
  1873. } else {
  1874. match = rquickExpr.exec(selector);
  1875. }
  1876. if (match && (match[1] || !context)) {
  1877. if (match[1]) {
  1878. context = context instanceof jQuery ? context[0] : context;
  1879. jQuery.merge(this, jQuery.parseHTML(match[1], context && context.nodeType ? context.ownerDocument || context : document, true));
  1880. if (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {
  1881. for (match in context) {
  1882. if (isFunction(this[match])) {
  1883. this[match](context[match]);
  1884. } else {
  1885. this.attr(match, context[match]);
  1886. }
  1887. }
  1888. }
  1889. return this;
  1890. } else {
  1891. elem = document.getElementById(match[2]);
  1892. if (elem) {
  1893. this[0] = elem;
  1894. this.length = 1;
  1895. }
  1896. return this;
  1897. }
  1898. } else if (!context || context.jquery) {
  1899. return (context || root).find(selector);
  1900. } else {
  1901. return this.constructor(context).find(selector);
  1902. }
  1903. } else if (selector.nodeType) {
  1904. this[0] = selector;
  1905. this.length = 1;
  1906. return this;
  1907. } else if (isFunction(selector)) {
  1908. return root.ready !== undefined ? root.ready(selector) : selector(jQuery);
  1909. }
  1910. return jQuery.makeArray(selector, this);
  1911. });
  1912. init.prototype = jQuery.fn;
  1913. rootjQuery = jQuery(document);
  1914. var rparentsprev = /^(?:parents|prev(?:Until|All))/,
  1915. guaranteedUnique = {
  1916. children: true,
  1917. contents: true,
  1918. next: true,
  1919. prev: true
  1920. };
  1921. jQuery.fn.extend({
  1922. has: function (target) {
  1923. var targets = jQuery(target, this),
  1924. l = targets.length;
  1925. return this.filter(function () {
  1926. var i = 0;
  1927. for (; i < l; i++) {
  1928. if (jQuery.contains(this, targets[i])) {
  1929. return true;
  1930. }
  1931. }
  1932. });
  1933. },
  1934. closest: function (selectors, context) {
  1935. var cur,
  1936. i = 0,
  1937. l = this.length,
  1938. matched = [],
  1939. targets = typeof selectors !== "string" && jQuery(selectors);
  1940. if (!rneedsContext.test(selectors)) {
  1941. for (; i < l; i++) {
  1942. for (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {
  1943. if (cur.nodeType < 11 && (targets ? targets.index(cur) > -1 : cur.nodeType === 1 && jQuery.find.matchesSelector(cur, selectors))) {
  1944. matched.push(cur);
  1945. break;
  1946. }
  1947. }
  1948. }
  1949. }
  1950. return this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched);
  1951. },
  1952. index: function (elem) {
  1953. if (!elem) {
  1954. return this[0] && this[0].parentNode ? this.first().prevAll().length : -1;
  1955. }
  1956. if (typeof elem === "string") {
  1957. return indexOf.call(jQuery(elem), this[0]);
  1958. }
  1959. return indexOf.call(this, elem.jquery ? elem[0] : elem);
  1960. },
  1961. add: function (selector, context) {
  1962. return this.pushStack(jQuery.uniqueSort(jQuery.merge(this.get(), jQuery(selector, context))));
  1963. },
  1964. addBack: function (selector) {
  1965. return this.add(selector == null ? this.prevObject : this.prevObject.filter(selector));
  1966. },
  1967. });
  1968.  
  1969. function sibling(cur, dir) {
  1970. while ((cur = cur[dir]) && cur.nodeType !== 1) { }
  1971. return cur;
  1972. }
  1973. jQuery.each(
  1974. {
  1975. parent: function (elem) {
  1976. var parent = elem.parentNode;
  1977. return parent && parent.nodeType !== 11 ? parent : null;
  1978. },
  1979. parents: function (elem) {
  1980. return dir(elem, "parentNode");
  1981. },
  1982. parentsUntil: function (elem, _i, until) {
  1983. return dir(elem, "parentNode", until);
  1984. },
  1985. next: function (elem) {
  1986. return sibling(elem, "nextSibling");
  1987. },
  1988. prev: function (elem) {
  1989. return sibling(elem, "previousSibling");
  1990. },
  1991. nextAll: function (elem) {
  1992. return dir(elem, "nextSibling");
  1993. },
  1994. prevAll: function (elem) {
  1995. return dir(elem, "previousSibling");
  1996. },
  1997. nextUntil: function (elem, _i, until) {
  1998. return dir(elem, "nextSibling", until);
  1999. },
  2000. prevUntil: function (elem, _i, until) {
  2001. return dir(elem, "previousSibling", until);
  2002. },
  2003. siblings: function (elem) {
  2004. return siblings((elem.parentNode || {}).firstChild, elem);
  2005. },
  2006. children: function (elem) {
  2007. return siblings(elem.firstChild);
  2008. },
  2009. contents: function (elem) {
  2010. if (elem.contentDocument != null && getProto(elem.contentDocument)) {
  2011. return elem.contentDocument;
  2012. }
  2013. if (nodeName(elem, "template")) {
  2014. elem = elem.content || elem;
  2015. }
  2016. return jQuery.merge([], elem.childNodes);
  2017. },
  2018. },
  2019. function (name, fn) {
  2020. jQuery.fn[name] = function (until, selector) {
  2021. var matched = jQuery.map(this, fn, until);
  2022. if (name.slice(-5) !== "Until") {
  2023. selector = until;
  2024. }
  2025. if (selector && typeof selector === "string") {
  2026. matched = jQuery.filter(selector, matched);
  2027. }
  2028. if (this.length > 1) {
  2029. if (!guaranteedUnique[name]) {
  2030. jQuery.uniqueSort(matched);
  2031. }
  2032. if (rparentsprev.test(name)) {
  2033. matched.reverse();
  2034. }
  2035. }
  2036. return this.pushStack(matched);
  2037. };
  2038. }
  2039. );
  2040. var rnothtmlwhite = /[^\x20\t\r\n\f]+/g;
  2041.  
  2042. function createOptions(options) {
  2043. var object = {};
  2044. jQuery.each(options.match(rnothtmlwhite) || [], function (_, flag) {
  2045. object[flag] = true;
  2046. });
  2047. return object;
  2048. }
  2049. jQuery.Callbacks = function (options) {
  2050. options = typeof options === "string" ? createOptions(options) : jQuery.extend({}, options);
  2051. var firing,
  2052. memory,
  2053. fired,
  2054. locked,
  2055. list = [],
  2056. queue = [],
  2057. firingIndex = -1,
  2058. fire = function () {
  2059. locked = locked || options.once;
  2060. fired = firing = true;
  2061. for (; queue.length; firingIndex = -1) {
  2062. memory = queue.shift();
  2063. while (++firingIndex < list.length) {
  2064. if (list[firingIndex].apply(memory[0], memory[1]) === false && options.stopOnFalse) {
  2065. firingIndex = list.length;
  2066. memory = false;
  2067. }
  2068. }
  2069. }
  2070. if (!options.memory) {
  2071. memory = false;
  2072. }
  2073. firing = false;
  2074. if (locked) {
  2075. if (memory) {
  2076. list = [];
  2077. } else {
  2078. list = "";
  2079. }
  2080. }
  2081. },
  2082. self = {
  2083. add: function () {
  2084. if (list) {
  2085. if (memory && !firing) {
  2086. firingIndex = list.length - 1;
  2087. queue.push(memory);
  2088. }
  2089. (function add(args) {
  2090. jQuery.each(args, function (_, arg) {
  2091. if (isFunction(arg)) {
  2092. if (!options.unique || !self.has(arg)) {
  2093. list.push(arg);
  2094. }
  2095. } else if (arg && arg.length && toType(arg) !== "string") {
  2096. add(arg);
  2097. }
  2098. });
  2099. })(arguments);
  2100. if (memory && !firing) {
  2101. fire();
  2102. }
  2103. }
  2104. return this;
  2105. },
  2106. remove: function () {
  2107. jQuery.each(arguments, function (_, arg) {
  2108. var index;
  2109. while ((index = jQuery.inArray(arg, list, index)) > -1) {
  2110. list.splice(index, 1);
  2111. if (index <= firingIndex) {
  2112. firingIndex--;
  2113. }
  2114. }
  2115. });
  2116. return this;
  2117. },
  2118. has: function (fn) {
  2119. return fn ? jQuery.inArray(fn, list) > -1 : list.length > 0;
  2120. },
  2121. empty: function () {
  2122. if (list) {
  2123. list = [];
  2124. }
  2125. return this;
  2126. },
  2127. disable: function () {
  2128. locked = queue = [];
  2129. list = memory = "";
  2130. return this;
  2131. },
  2132. disabled: function () {
  2133. return !list;
  2134. },
  2135. lock: function () {
  2136. locked = queue = [];
  2137. if (!memory && !firing) {
  2138. list = memory = "";
  2139. }
  2140. return this;
  2141. },
  2142. locked: function () {
  2143. return !!locked;
  2144. },
  2145. fireWith: function (context, args) {
  2146. if (!locked) {
  2147. args = args || [];
  2148. args = [context, args.slice ? args.slice() : args];
  2149. queue.push(args);
  2150. if (!firing) {
  2151. fire();
  2152. }
  2153. }
  2154. return this;
  2155. },
  2156. fire: function () {
  2157. self.fireWith(this, arguments);
  2158. return this;
  2159. },
  2160. fired: function () {
  2161. return !!fired;
  2162. },
  2163. };
  2164. return self;
  2165. };
  2166.  
  2167. function Identity(v) {
  2168. return v;
  2169. }
  2170.  
  2171. function Thrower(ex) {
  2172. throw ex;
  2173. }
  2174.  
  2175. function adoptValue(value, resolve, reject, noValue) {
  2176. var method;
  2177. try {
  2178. if (value && isFunction((method = value.promise))) {
  2179. method.call(value).done(resolve).fail(reject);
  2180. } else if (value && isFunction((method = value.then))) {
  2181. method.call(value, resolve, reject);
  2182. } else {
  2183. resolve.apply(undefined, [value].slice(noValue));
  2184. }
  2185. } catch (value) {
  2186. reject.apply(undefined, [value]);
  2187. }
  2188. }
  2189. jQuery.extend({
  2190. Deferred: function (func) {
  2191. var tuples = [
  2192. ["notify", "progress", jQuery.Callbacks("memory"), jQuery.Callbacks("memory"), 2],
  2193. ["resolve", "done", jQuery.Callbacks("once memory"), jQuery.Callbacks("once memory"), 0, "resolved"],
  2194. ["reject", "fail", jQuery.Callbacks("once memory"), jQuery.Callbacks("once memory"), 1, "rejected"],
  2195. ],
  2196. state = "pending",
  2197. promise = {
  2198. state: function () {
  2199. return state;
  2200. },
  2201. always: function () {
  2202. deferred.done(arguments).fail(arguments);
  2203. return this;
  2204. },
  2205. catch: function (fn) {
  2206. return promise.then(null, fn);
  2207. },
  2208. pipe: function () {
  2209. var fns = arguments;
  2210. return jQuery
  2211. .Deferred(function (newDefer) {
  2212. jQuery.each(tuples, function (_i, tuple) {
  2213. var fn = isFunction(fns[tuple[4]]) && fns[tuple[4]];
  2214. deferred[tuple[1]](function () {
  2215. var returned = fn && fn.apply(this, arguments);
  2216. if (returned && isFunction(returned.promise)) {
  2217. returned.promise().progress(newDefer.notify).done(newDefer.resolve).fail(newDefer.reject);
  2218. } else {
  2219. newDefer[tuple[0] + "With"](this, fn ? [returned] : arguments);
  2220. }
  2221. });
  2222. });
  2223. fns = null;
  2224. })
  2225. .promise();
  2226. },
  2227. then: function (onFulfilled, onRejected, onProgress) {
  2228. var maxDepth = 0;
  2229.  
  2230. function resolve(depth, deferred, handler, special) {
  2231. return function () {
  2232. var that = this,
  2233. args = arguments,
  2234. mightThrow = function () {
  2235. var returned, then;
  2236. if (depth < maxDepth) {
  2237. return;
  2238. }
  2239. returned = handler.apply(that, args);
  2240. if (returned === deferred.promise()) {
  2241. throw new TypeError("Thenable self-resolution");
  2242. }
  2243. then = returned && (typeof returned === "object" || typeof returned === "function") && returned.then;
  2244. if (isFunction(then)) {
  2245. if (special) {
  2246. then.call(returned, resolve(maxDepth, deferred, Identity, special), resolve(maxDepth, deferred, Thrower, special));
  2247. } else {
  2248. maxDepth++;
  2249. then.call(returned, resolve(maxDepth, deferred, Identity, special), resolve(maxDepth, deferred, Thrower, special), resolve(maxDepth, deferred, Identity, deferred.notifyWith));
  2250. }
  2251. } else {
  2252. if (handler !== Identity) {
  2253. that = undefined;
  2254. args = [returned];
  2255. }
  2256. (special || deferred.resolveWith)(that, args);
  2257. }
  2258. },
  2259. process = special ?
  2260. mightThrow :
  2261. function () {
  2262. try {
  2263. mightThrow();
  2264. } catch (e) {
  2265. if (jQuery.Deferred.exceptionHook) {
  2266. jQuery.Deferred.exceptionHook(e, process.stackTrace);
  2267. }
  2268. if (depth + 1 >= maxDepth) {
  2269. if (handler !== Thrower) {
  2270. that = undefined;
  2271. args = [e];
  2272. }
  2273. deferred.rejectWith(that, args);
  2274. }
  2275. }
  2276. };
  2277. if (depth) {
  2278. process();
  2279. } else {
  2280. if (jQuery.Deferred.getStackHook) {
  2281. process.stackTrace = jQuery.Deferred.getStackHook();
  2282. }
  2283. window.setTimeout(process);
  2284. }
  2285. };
  2286. }
  2287. return jQuery
  2288. .Deferred(function (newDefer) {
  2289. tuples[0][3].add(resolve(0, newDefer, isFunction(onProgress) ? onProgress : Identity, newDefer.notifyWith));
  2290. tuples[1][3].add(resolve(0, newDefer, isFunction(onFulfilled) ? onFulfilled : Identity));
  2291. tuples[2][3].add(resolve(0, newDefer, isFunction(onRejected) ? onRejected : Thrower));
  2292. })
  2293. .promise();
  2294. },
  2295. promise: function (obj) {
  2296. return obj != null ? jQuery.extend(obj, promise) : promise;
  2297. },
  2298. },
  2299. deferred = {};
  2300. jQuery.each(tuples, function (i, tuple) {
  2301. var list = tuple[2],
  2302. stateString = tuple[5];
  2303. promise[tuple[1]] = list.add;
  2304. if (stateString) {
  2305. list.add(
  2306. function () {
  2307. state = stateString;
  2308. },
  2309. tuples[3 - i][2].disable,
  2310. tuples[3 - i][3].disable,
  2311. tuples[0][2].lock,
  2312. tuples[0][3].lock
  2313. );
  2314. }
  2315. list.add(tuple[3].fire);
  2316. deferred[tuple[0]] = function () {
  2317. deferred[tuple[0] + "With"](this === deferred ? undefined : this, arguments);
  2318. return this;
  2319. };
  2320. deferred[tuple[0] + "With"] = list.fireWith;
  2321. });
  2322. promise.promise(deferred);
  2323. if (func) {
  2324. func.call(deferred, deferred);
  2325. }
  2326. return deferred;
  2327. },
  2328. when: function (singleValue) {
  2329. var remaining = arguments.length,
  2330. i = remaining,
  2331. resolveContexts = Array(i),
  2332. resolveValues = slice.call(arguments),
  2333. primary = jQuery.Deferred(),
  2334. updateFunc = function (i) {
  2335. return function (value) {
  2336. resolveContexts[i] = this;
  2337. resolveValues[i] = arguments.length > 1 ? slice.call(arguments) : value;
  2338. if (!--remaining) {
  2339. primary.resolveWith(resolveContexts, resolveValues);
  2340. }
  2341. };
  2342. };
  2343. if (remaining <= 1) {
  2344. adoptValue(singleValue, primary.done(updateFunc(i)).resolve, primary.reject, !remaining);
  2345. if (primary.state() === "pending" || isFunction(resolveValues[i] && resolveValues[i].then)) {
  2346. return primary.then();
  2347. }
  2348. }
  2349. while (i--) {
  2350. adoptValue(resolveValues[i], updateFunc(i), primary.reject);
  2351. }
  2352. return primary.promise();
  2353. },
  2354. });
  2355. var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
  2356. jQuery.Deferred.exceptionHook = function (error, stack) {
  2357. if (window.console && window.console.warn && error && rerrorNames.test(error.name)) {
  2358. window.console.warn("jQuery.Deferred exception: " + error.message, error.stack, stack);
  2359. }
  2360. };
  2361. jQuery.readyException = function (error) {
  2362. window.setTimeout(function () {
  2363. throw error;
  2364. });
  2365. };
  2366. var readyList = jQuery.Deferred();
  2367. jQuery.fn.ready = function (fn) {
  2368. readyList.then(fn).catch(function (error) {
  2369. jQuery.readyException(error);
  2370. });
  2371. return this;
  2372. };
  2373. jQuery.extend({
  2374. isReady: false,
  2375. readyWait: 1,
  2376. ready: function (wait) {
  2377. if (wait === true ? --jQuery.readyWait : jQuery.isReady) {
  2378. return;
  2379. }
  2380. jQuery.isReady = true;
  2381. if (wait !== true && --jQuery.readyWait > 0) {
  2382. return;
  2383. }
  2384. readyList.resolveWith(document, [jQuery]);
  2385. },
  2386. });
  2387. jQuery.ready.then = readyList.then;
  2388.  
  2389. function completed() {
  2390. document.removeEventListener("DOMContentLoaded", completed);
  2391. window.removeEventListener("load", completed);
  2392. jQuery.ready();
  2393. }
  2394. if (document.readyState === "complete" || (document.readyState !== "loading" && !document.documentElement.doScroll)) {
  2395. window.setTimeout(jQuery.ready);
  2396. } else {
  2397. document.addEventListener("DOMContentLoaded", completed);
  2398. window.addEventListener("load", completed);
  2399. }
  2400. var access = function (elems, fn, key, value, chainable, emptyGet, raw) {
  2401. var i = 0,
  2402. len = elems.length,
  2403. bulk = key == null;
  2404. if (toType(key) === "object") {
  2405. chainable = true;
  2406. for (i in key) {
  2407. access(elems, fn, i, key[i], true, emptyGet, raw);
  2408. }
  2409. } else if (value !== undefined) {
  2410. chainable = true;
  2411. if (!isFunction(value)) {
  2412. raw = true;
  2413. }
  2414. if (bulk) {
  2415. if (raw) {
  2416. fn.call(elems, value);
  2417. fn = null;
  2418. } else {
  2419. bulk = fn;
  2420. fn = function (elem, _key, value) {
  2421. return bulk.call(jQuery(elem), value);
  2422. };
  2423. }
  2424. }
  2425. if (fn) {
  2426. for (; i < len; i++) {
  2427. fn(elems[i], key, raw ? value : value.call(elems[i], i, fn(elems[i], key)));
  2428. }
  2429. }
  2430. }
  2431. if (chainable) {
  2432. return elems;
  2433. }
  2434. if (bulk) {
  2435. return fn.call(elems);
  2436. }
  2437. return len ? fn(elems[0], key) : emptyGet;
  2438. };
  2439. var rmsPrefix = /^-ms-/,
  2440. rdashAlpha = /-([a-z])/g;
  2441.  
  2442. function fcamelCase(_all, letter) {
  2443. return letter.toUpperCase();
  2444. }
  2445.  
  2446. function camelCase(string) {
  2447. return string.replace(rmsPrefix, "ms-").replace(rdashAlpha, fcamelCase);
  2448. }
  2449. var acceptData = function (owner) {
  2450. return owner.nodeType === 1 || owner.nodeType === 9 || !+owner.nodeType;
  2451. };
  2452.  
  2453. function Data() {
  2454. this.expando = jQuery.expando + Data.uid++;
  2455. }
  2456. Data.uid = 1;
  2457. Data.prototype = {
  2458. cache: function (owner) {
  2459. var value = owner[this.expando];
  2460. if (!value) {
  2461. value = {};
  2462. if (acceptData(owner)) {
  2463. if (owner.nodeType) {
  2464. owner[this.expando] = value;
  2465. } else {
  2466. Object.defineProperty(owner, this.expando, {
  2467. value: value,
  2468. configurable: true
  2469. });
  2470. }
  2471. }
  2472. }
  2473. return value;
  2474. },
  2475. set: function (owner, data, value) {
  2476. var prop,
  2477. cache = this.cache(owner);
  2478. if (typeof data === "string") {
  2479. cache[camelCase(data)] = value;
  2480. } else {
  2481. for (prop in data) {
  2482. cache[camelCase(prop)] = data[prop];
  2483. }
  2484. }
  2485. return cache;
  2486. },
  2487. get: function (owner, key) {
  2488. return key === undefined ? this.cache(owner) : owner[this.expando] && owner[this.expando][camelCase(key)];
  2489. },
  2490. access: function (owner, key, value) {
  2491. if (key === undefined || (key && typeof key === "string" && value === undefined)) {
  2492. return this.get(owner, key);
  2493. }
  2494. this.set(owner, key, value);
  2495. return value !== undefined ? value : key;
  2496. },
  2497. remove: function (owner, key) {
  2498. var i,
  2499. cache = owner[this.expando];
  2500. if (cache === undefined) {
  2501. return;
  2502. }
  2503. if (key !== undefined) {
  2504. if (Array.isArray(key)) {
  2505. key = key.map(camelCase);
  2506. } else {
  2507. key = camelCase(key);
  2508. key = key in cache ? [key] : key.match(rnothtmlwhite) || [];
  2509. }
  2510. i = key.length;
  2511. while (i--) {
  2512. delete cache[key[i]];
  2513. }
  2514. }
  2515. if (key === undefined || jQuery.isEmptyObject(cache)) {
  2516. if (owner.nodeType) {
  2517. owner[this.expando] = undefined;
  2518. } else {
  2519. delete owner[this.expando];
  2520. }
  2521. }
  2522. },
  2523. hasData: function (owner) {
  2524. var cache = owner[this.expando];
  2525. return cache !== undefined && !jQuery.isEmptyObject(cache);
  2526. },
  2527. };
  2528. var dataPriv = new Data();
  2529. var dataUser = new Data();
  2530. var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
  2531. rmultiDash = /[A-Z]/g;
  2532.  
  2533. function getData(data) {
  2534. if (data === "true") {
  2535. return true;
  2536. }
  2537. if (data === "false") {
  2538. return false;
  2539. }
  2540. if (data === "null") {
  2541. return null;
  2542. }
  2543. if (data === +data + "") {
  2544. return +data;
  2545. }
  2546. if (rbrace.test(data)) {
  2547. return JSON.parse(data);
  2548. }
  2549. return data;
  2550. }
  2551.  
  2552. function dataAttr(elem, key, data) {
  2553. var name;
  2554. if (data === undefined && elem.nodeType === 1) {
  2555. name = "data-" + key.replace(rmultiDash, "-$&").toLowerCase();
  2556. data = elem.getAttribute(name);
  2557. if (typeof data === "string") {
  2558. try {
  2559. data = getData(data);
  2560. } catch (e) { }
  2561. dataUser.set(elem, key, data);
  2562. } else {
  2563. data = undefined;
  2564. }
  2565. }
  2566. return data;
  2567. }
  2568. jQuery.extend({
  2569. hasData: function (elem) {
  2570. return dataUser.hasData(elem) || dataPriv.hasData(elem);
  2571. },
  2572. data: function (elem, name, data) {
  2573. return dataUser.access(elem, name, data);
  2574. },
  2575. removeData: function (elem, name) {
  2576. dataUser.remove(elem, name);
  2577. },
  2578. _data: function (elem, name, data) {
  2579. return dataPriv.access(elem, name, data);
  2580. },
  2581. _removeData: function (elem, name) {
  2582. dataPriv.remove(elem, name);
  2583. },
  2584. });
  2585. jQuery.fn.extend({
  2586. data: function (key, value) {
  2587. var i,
  2588. name,
  2589. data,
  2590. elem = this[0],
  2591. attrs = elem && elem.attributes;
  2592. if (key === undefined) {
  2593. if (this.length) {
  2594. data = dataUser.get(elem);
  2595. if (elem.nodeType === 1 && !dataPriv.get(elem, "hasDataAttrs")) {
  2596. i = attrs.length;
  2597. while (i--) {
  2598. if (attrs[i]) {
  2599. name = attrs[i].name;
  2600. if (name.indexOf("data-") === 0) {
  2601. name = camelCase(name.slice(5));
  2602. dataAttr(elem, name, data[name]);
  2603. }
  2604. }
  2605. }
  2606. dataPriv.set(elem, "hasDataAttrs", true);
  2607. }
  2608. }
  2609. return data;
  2610. }
  2611. if (typeof key === "object") {
  2612. return this.each(function () {
  2613. dataUser.set(this, key);
  2614. });
  2615. }
  2616. return access(
  2617. this,
  2618. function (value) {
  2619. var data;
  2620. if (elem && value === undefined) {
  2621. data = dataUser.get(elem, key);
  2622. if (data !== undefined) {
  2623. return data;
  2624. }
  2625. data = dataAttr(elem, key);
  2626. if (data !== undefined) {
  2627. return data;
  2628. }
  2629. return;
  2630. }
  2631. this.each(function () {
  2632. dataUser.set(this, key, value);
  2633. });
  2634. },
  2635. null,
  2636. value,
  2637. arguments.length > 1,
  2638. null,
  2639. true
  2640. );
  2641. },
  2642. removeData: function (key) {
  2643. return this.each(function () {
  2644. dataUser.remove(this, key);
  2645. });
  2646. },
  2647. });
  2648. jQuery.extend({
  2649. queue: function (elem, type, data) {
  2650. var queue;
  2651. if (elem) {
  2652. type = (type || "fx") + "queue";
  2653. queue = dataPriv.get(elem, type);
  2654. if (data) {
  2655. if (!queue || Array.isArray(data)) {
  2656. queue = dataPriv.access(elem, type, jQuery.makeArray(data));
  2657. } else {
  2658. queue.push(data);
  2659. }
  2660. }
  2661. return queue || [];
  2662. }
  2663. },
  2664. dequeue: function (elem, type) {
  2665. type = type || "fx";
  2666. var queue = jQuery.queue(elem, type),
  2667. startLength = queue.length,
  2668. fn = queue.shift(),
  2669. hooks = jQuery._queueHooks(elem, type),
  2670. next = function () {
  2671. jQuery.dequeue(elem, type);
  2672. };
  2673. if (fn === "inprogress") {
  2674. fn = queue.shift();
  2675. startLength--;
  2676. }
  2677. if (fn) {
  2678. if (type === "fx") {
  2679. queue.unshift("inprogress");
  2680. }
  2681. delete hooks.stop;
  2682. fn.call(elem, next, hooks);
  2683. }
  2684. if (!startLength && hooks) {
  2685. hooks.empty.fire();
  2686. }
  2687. },
  2688. _queueHooks: function (elem, type) {
  2689. var key = type + "queueHooks";
  2690. return (
  2691. dataPriv.get(elem, key) ||
  2692. dataPriv.access(elem, key, {
  2693. empty: jQuery.Callbacks("once memory").add(function () {
  2694. dataPriv.remove(elem, [type + "queue", key]);
  2695. }),
  2696. })
  2697. );
  2698. },
  2699. });
  2700. jQuery.fn.extend({
  2701. queue: function (type, data) {
  2702. var setter = 2;
  2703. if (typeof type !== "string") {
  2704. data = type;
  2705. type = "fx";
  2706. setter--;
  2707. }
  2708. if (arguments.length < setter) {
  2709. return jQuery.queue(this[0], type);
  2710. }
  2711. return data === undefined ?
  2712. this :
  2713. this.each(function () {
  2714. var queue = jQuery.queue(this, type, data);
  2715. jQuery._queueHooks(this, type);
  2716. if (type === "fx" && queue[0] !== "inprogress") {
  2717. jQuery.dequeue(this, type);
  2718. }
  2719. });
  2720. },
  2721. dequeue: function (type) {
  2722. return this.each(function () {
  2723. jQuery.dequeue(this, type);
  2724. });
  2725. },
  2726. clearQueue: function (type) {
  2727. return this.queue(type || "fx", []);
  2728. },
  2729. promise: function (type, obj) {
  2730. var tmp,
  2731. count = 1,
  2732. defer = jQuery.Deferred(),
  2733. elements = this,
  2734. i = this.length,
  2735. resolve = function () {
  2736. if (!--count) {
  2737. defer.resolveWith(elements, [elements]);
  2738. }
  2739. };
  2740. if (typeof type !== "string") {
  2741. obj = type;
  2742. type = undefined;
  2743. }
  2744. type = type || "fx";
  2745. while (i--) {
  2746. tmp = dataPriv.get(elements[i], type + "queueHooks");
  2747. if (tmp && tmp.empty) {
  2748. count++;
  2749. tmp.empty.add(resolve);
  2750. }
  2751. }
  2752. resolve();
  2753. return defer.promise(obj);
  2754. },
  2755. });
  2756. var pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source;
  2757. var rcssNum = new RegExp("^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i");
  2758. var cssExpand = ["Top", "Right", "Bottom", "Left"];
  2759. var documentElement = document.documentElement;
  2760. var isAttached = function (elem) {
  2761. return jQuery.contains(elem.ownerDocument, elem);
  2762. },
  2763. composed = {
  2764. composed: true
  2765. };
  2766. if (documentElement.getRootNode) {
  2767. isAttached = function (elem) {
  2768. return jQuery.contains(elem.ownerDocument, elem) || elem.getRootNode(composed) === elem.ownerDocument;
  2769. };
  2770. }
  2771. var isHiddenWithinTree = function (elem, el) {
  2772. elem = el || elem;
  2773. return elem.style.display === "none" || (elem.style.display === "" && isAttached(elem) && jQuery.css(elem, "display") === "none");
  2774. };
  2775.  
  2776. function adjustCSS(elem, prop, valueParts, tween) {
  2777. var adjusted,
  2778. scale,
  2779. maxIterations = 20,
  2780. currentValue = tween ?
  2781. function () {
  2782. return tween.cur();
  2783. } :
  2784. function () {
  2785. return jQuery.css(elem, prop, "");
  2786. },
  2787. initial = currentValue(),
  2788. unit = (valueParts && valueParts[3]) || (jQuery.cssNumber[prop] ? "" : "px"),
  2789. initialInUnit = elem.nodeType && (jQuery.cssNumber[prop] || (unit !== "px" && +initial)) && rcssNum.exec(jQuery.css(elem, prop));
  2790. if (initialInUnit && initialInUnit[3] !== unit) {
  2791. initial = initial / 2;
  2792. unit = unit || initialInUnit[3];
  2793. initialInUnit = +initial || 1;
  2794. while (maxIterations--) {
  2795. jQuery.style(elem, prop, initialInUnit + unit);
  2796. if ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) {
  2797. maxIterations = 0;
  2798. }
  2799. initialInUnit = initialInUnit / scale;
  2800. }
  2801. initialInUnit = initialInUnit * 2;
  2802. jQuery.style(elem, prop, initialInUnit + unit);
  2803. valueParts = valueParts || [];
  2804. }
  2805. if (valueParts) {
  2806. initialInUnit = +initialInUnit || +initial || 0;
  2807. adjusted = valueParts[1] ? initialInUnit + (valueParts[1] + 1) * valueParts[2] : +valueParts[2];
  2808. if (tween) {
  2809. tween.unit = unit;
  2810. tween.start = initialInUnit;
  2811. tween.end = adjusted;
  2812. }
  2813. }
  2814. return adjusted;
  2815. }
  2816. var defaultDisplayMap = {};
  2817.  
  2818. function getDefaultDisplay(elem) {
  2819. var temp,
  2820. doc = elem.ownerDocument,
  2821. nodeName = elem.nodeName,
  2822. display = defaultDisplayMap[nodeName];
  2823. if (display) {
  2824. return display;
  2825. }
  2826. temp = doc.body.appendChild(doc.createElement(nodeName));
  2827. display = jQuery.css(temp, "display");
  2828. temp.parentNode.removeChild(temp);
  2829. if (display === "none") {
  2830. display = "block";
  2831. }
  2832. defaultDisplayMap[nodeName] = display;
  2833. return display;
  2834. }
  2835.  
  2836. function showHide(elements, show) {
  2837. var display,
  2838. elem,
  2839. values = [],
  2840. index = 0,
  2841. length = elements.length;
  2842. for (; index < length; index++) {
  2843. elem = elements[index];
  2844. if (!elem.style) {
  2845. continue;
  2846. }
  2847. display = elem.style.display;
  2848. if (show) {
  2849. if (display === "none") {
  2850. values[index] = dataPriv.get(elem, "display") || null;
  2851. if (!values[index]) {
  2852. elem.style.display = "";
  2853. }
  2854. }
  2855. if (elem.style.display === "" && isHiddenWithinTree(elem)) {
  2856. values[index] = getDefaultDisplay(elem);
  2857. }
  2858. } else {
  2859. if (display !== "none") {
  2860. values[index] = "none";
  2861. dataPriv.set(elem, "display", display);
  2862. }
  2863. }
  2864. }
  2865. for (index = 0; index < length; index++) {
  2866. if (values[index] != null) {
  2867. elements[index].style.display = values[index];
  2868. }
  2869. }
  2870. return elements;
  2871. }
  2872. jQuery.fn.extend({
  2873. show: function () {
  2874. return showHide(this, true);
  2875. },
  2876. hide: function () {
  2877. return showHide(this);
  2878. },
  2879. toggle: function (state) {
  2880. if (typeof state === "boolean") {
  2881. return state ? this.show() : this.hide();
  2882. }
  2883. return this.each(function () {
  2884. if (isHiddenWithinTree(this)) {
  2885. jQuery(this).show();
  2886. } else {
  2887. jQuery(this).hide();
  2888. }
  2889. });
  2890. },
  2891. });
  2892. var rcheckableType = /^(?:checkbox|radio)$/i;
  2893. var rtagName = /<([a-z][^\/\0>\x20\t\r\n\f]*)/i;
  2894. var rscriptType = /^$|^module$|\/(?:java|ecma)script/i;
  2895. (function () {
  2896. var fragment = document.createDocumentFragment(),
  2897. div = fragment.appendChild(document.createElement("div")),
  2898. input = document.createElement("input");
  2899. input.setAttribute("type", "radio");
  2900. input.setAttribute("checked", "checked");
  2901. input.setAttribute("name", "t");
  2902. div.appendChild(input);
  2903. support.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked;
  2904. div.innerHTML = "<textarea>x</textarea>";
  2905. support.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue;
  2906. div.innerHTML = "<option></option>";
  2907. support.option = !!div.lastChild;
  2908. })();
  2909. var wrapMap = {
  2910. thead: [1, "<table>", "</table>"],
  2911. col: [2, "<table><colgroup>", "</colgroup></table>"],
  2912. tr: [2, "<table><tbody>", "</tbody></table>"],
  2913. td: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
  2914. _default: [0, "", ""],
  2915. };
  2916. wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
  2917. wrapMap.th = wrapMap.td;
  2918. if (!support.option) {
  2919. wrapMap.optgroup = wrapMap.option = [1, "<select multiple='multiple'>", "</select>"];
  2920. }
  2921.  
  2922. function getAll(context, tag) {
  2923. var ret;
  2924. if (typeof context.getElementsByTagName !== "undefined") {
  2925. ret = context.getElementsByTagName(tag || "*");
  2926. } else if (typeof context.querySelectorAll !== "undefined") {
  2927. ret = context.querySelectorAll(tag || "*");
  2928. } else {
  2929. ret = [];
  2930. }
  2931. if (tag === undefined || (tag && nodeName(context, tag))) {
  2932. return jQuery.merge([context], ret);
  2933. }
  2934. return ret;
  2935. }
  2936.  
  2937. function setGlobalEval(elems, refElements) {
  2938. var i = 0,
  2939. l = elems.length;
  2940. for (; i < l; i++) {
  2941. dataPriv.set(elems[i], "globalEval", !refElements || dataPriv.get(refElements[i], "globalEval"));
  2942. }
  2943. }
  2944. var rhtml = /<|&#?\w+;/;
  2945.  
  2946. function buildFragment(elems, context, scripts, selection, ignored) {
  2947. var elem,
  2948. tmp,
  2949. tag,
  2950. wrap,
  2951. attached,
  2952. j,
  2953. fragment = context.createDocumentFragment(),
  2954. nodes = [],
  2955. i = 0,
  2956. l = elems.length;
  2957. for (; i < l; i++) {
  2958. elem = elems[i];
  2959. if (elem || elem === 0) {
  2960. if (toType(elem) === "object") {
  2961. jQuery.merge(nodes, elem.nodeType ? [elem] : elem);
  2962. } else if (!rhtml.test(elem)) {
  2963. nodes.push(context.createTextNode(elem));
  2964. } else {
  2965. tmp = tmp || fragment.appendChild(context.createElement("div"));
  2966. tag = (rtagName.exec(elem) || ["", ""])[1].toLowerCase();
  2967. wrap = wrapMap[tag] || wrapMap._default;
  2968. tmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2];
  2969. j = wrap[0];
  2970. while (j--) {
  2971. tmp = tmp.lastChild;
  2972. }
  2973. jQuery.merge(nodes, tmp.childNodes);
  2974. tmp = fragment.firstChild;
  2975. tmp.textContent = "";
  2976. }
  2977. }
  2978. }
  2979. fragment.textContent = "";
  2980. i = 0;
  2981. while ((elem = nodes[i++])) {
  2982. if (selection && jQuery.inArray(elem, selection) > -1) {
  2983. if (ignored) {
  2984. ignored.push(elem);
  2985. }
  2986. continue;
  2987. }
  2988. attached = isAttached(elem);
  2989. tmp = getAll(fragment.appendChild(elem), "script");
  2990. if (attached) {
  2991. setGlobalEval(tmp);
  2992. }
  2993. if (scripts) {
  2994. j = 0;
  2995. while ((elem = tmp[j++])) {
  2996. if (rscriptType.test(elem.type || "")) {
  2997. scripts.push(elem);
  2998. }
  2999. }
  3000. }
  3001. }
  3002. return fragment;
  3003. }
  3004. var rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
  3005.  
  3006. function returnTrue() {
  3007. return true;
  3008. }
  3009.  
  3010. function returnFalse() {
  3011. return false;
  3012. }
  3013.  
  3014. function expectSync(elem, type) {
  3015. return (elem === safeActiveElement()) === (type === "focus");
  3016. }
  3017.  
  3018. function safeActiveElement() {
  3019. try {
  3020. return document.activeElement;
  3021. } catch (err) { }
  3022. }
  3023.  
  3024. function on(elem, types, selector, data, fn, one) {
  3025. var origFn, type;
  3026. if (typeof types === "object") {
  3027. if (typeof selector !== "string") {
  3028. data = data || selector;
  3029. selector = undefined;
  3030. }
  3031. for (type in types) {
  3032. on(elem, type, selector, data, types[type], one);
  3033. }
  3034. return elem;
  3035. }
  3036. if (data == null && fn == null) {
  3037. fn = selector;
  3038. data = selector = undefined;
  3039. } else if (fn == null) {
  3040. if (typeof selector === "string") {
  3041. fn = data;
  3042. data = undefined;
  3043. } else {
  3044. fn = data;
  3045. data = selector;
  3046. selector = undefined;
  3047. }
  3048. }
  3049. if (fn === false) {
  3050. fn = returnFalse;
  3051. } else if (!fn) {
  3052. return elem;
  3053. }
  3054. if (one === 1) {
  3055. origFn = fn;
  3056. fn = function (event) {
  3057. jQuery().off(event);
  3058. return origFn.apply(this, arguments);
  3059. };
  3060. fn.guid = origFn.guid || (origFn.guid = jQuery.guid++);
  3061. }
  3062. return elem.each(function () {
  3063. jQuery.event.add(this, types, fn, data, selector);
  3064. });
  3065. }
  3066. jQuery.event = {
  3067. global: {},
  3068. add: function (elem, types, handler, data, selector) {
  3069. var handleObjIn,
  3070. eventHandle,
  3071. tmp,
  3072. events,
  3073. t,
  3074. handleObj,
  3075. special,
  3076. handlers,
  3077. type,
  3078. namespaces,
  3079. origType,
  3080. elemData = dataPriv.get(elem);
  3081. if (!acceptData(elem)) {
  3082. return;
  3083. }
  3084. if (handler.handler) {
  3085. handleObjIn = handler;
  3086. handler = handleObjIn.handler;
  3087. selector = handleObjIn.selector;
  3088. }
  3089. if (selector) {
  3090. jQuery.find.matchesSelector(documentElement, selector);
  3091. }
  3092. if (!handler.guid) {
  3093. handler.guid = jQuery.guid++;
  3094. }
  3095. if (!(events = elemData.events)) {
  3096. events = elemData.events = Object.create(null);
  3097. }
  3098. if (!(eventHandle = elemData.handle)) {
  3099. eventHandle = elemData.handle = function (e) {
  3100. return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? jQuery.event.dispatch.apply(elem, arguments) : undefined;
  3101. };
  3102. }
  3103. types = (types || "").match(rnothtmlwhite) || [""];
  3104. t = types.length;
  3105. while (t--) {
  3106. tmp = rtypenamespace.exec(types[t]) || [];
  3107. type = origType = tmp[1];
  3108. namespaces = (tmp[2] || "").split(".").sort();
  3109. if (!type) {
  3110. continue;
  3111. }
  3112. special = jQuery.event.special[type] || {};
  3113. type = (selector ? special.delegateType : special.bindType) || type;
  3114. special = jQuery.event.special[type] || {};
  3115. handleObj = jQuery.extend({
  3116. type: type,
  3117. origType: origType,
  3118. data: data,
  3119. handler: handler,
  3120. guid: handler.guid,
  3121. selector: selector,
  3122. needsContext: selector && jQuery.expr.match.needsContext.test(selector),
  3123. namespace: namespaces.join(".")
  3124. }, handleObjIn);
  3125. if (!(handlers = events[type])) {
  3126. handlers = events[type] = [];
  3127. handlers.delegateCount = 0;
  3128. if (!special.setup || special.setup.call(elem, data, namespaces, eventHandle) === false) {
  3129. if (elem.addEventListener) {
  3130. elem.addEventListener(type, eventHandle);
  3131. }
  3132. }
  3133. }
  3134. if (special.add) {
  3135. special.add.call(elem, handleObj);
  3136. if (!handleObj.handler.guid) {
  3137. handleObj.handler.guid = handler.guid;
  3138. }
  3139. }
  3140. if (selector) {
  3141. handlers.splice(handlers.delegateCount++, 0, handleObj);
  3142. } else {
  3143. handlers.push(handleObj);
  3144. }
  3145. jQuery.event.global[type] = true;
  3146. }
  3147. },
  3148. remove: function (elem, types, handler, selector, mappedTypes) {
  3149. var j,
  3150. origCount,
  3151. tmp,
  3152. events,
  3153. t,
  3154. handleObj,
  3155. special,
  3156. handlers,
  3157. type,
  3158. namespaces,
  3159. origType,
  3160. elemData = dataPriv.hasData(elem) && dataPriv.get(elem);
  3161. if (!elemData || !(events = elemData.events)) {
  3162. return;
  3163. }
  3164. types = (types || "").match(rnothtmlwhite) || [""];
  3165. t = types.length;
  3166. while (t--) {
  3167. tmp = rtypenamespace.exec(types[t]) || [];
  3168. type = origType = tmp[1];
  3169. namespaces = (tmp[2] || "").split(".").sort();
  3170. if (!type) {
  3171. for (type in events) {
  3172. jQuery.event.remove(elem, type + types[t], handler, selector, true);
  3173. }
  3174. continue;
  3175. }
  3176. special = jQuery.event.special[type] || {};
  3177. type = (selector ? special.delegateType : special.bindType) || type;
  3178. handlers = events[type] || [];
  3179. tmp = tmp[2] && new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)");
  3180. origCount = j = handlers.length;
  3181. while (j--) {
  3182. handleObj = handlers[j];
  3183. if ((mappedTypes || origType === handleObj.origType) && (!handler || handler.guid === handleObj.guid) && (!tmp || tmp.test(handleObj.namespace)) && (!selector || selector === handleObj.selector || (selector === "**" && handleObj.selector))) {
  3184. handlers.splice(j, 1);
  3185. if (handleObj.selector) {
  3186. handlers.delegateCount--;
  3187. }
  3188. if (special.remove) {
  3189. special.remove.call(elem, handleObj);
  3190. }
  3191. }
  3192. }
  3193. if (origCount && !handlers.length) {
  3194. if (!special.teardown || special.teardown.call(elem, namespaces, elemData.handle) === false) {
  3195. jQuery.removeEvent(elem, type, elemData.handle);
  3196. }
  3197. delete events[type];
  3198. }
  3199. }
  3200. if (jQuery.isEmptyObject(events)) {
  3201. dataPriv.remove(elem, "handle events");
  3202. }
  3203. },
  3204. dispatch: function (nativeEvent) {
  3205. var i,
  3206. j,
  3207. ret,
  3208. matched,
  3209. handleObj,
  3210. handlerQueue,
  3211. args = new Array(arguments.length),
  3212. event = jQuery.event.fix(nativeEvent),
  3213. handlers = (dataPriv.get(this, "events") || Object.create(null))[event.type] || [],
  3214. special = jQuery.event.special[event.type] || {};
  3215. args[0] = event;
  3216. for (i = 1; i < arguments.length; i++) {
  3217. args[i] = arguments[i];
  3218. }
  3219. event.delegateTarget = this;
  3220. if (special.preDispatch && special.preDispatch.call(this, event) === false) {
  3221. return;
  3222. }
  3223. handlerQueue = jQuery.event.handlers.call(this, event, handlers);
  3224. i = 0;
  3225. while ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {
  3226. event.currentTarget = matched.elem;
  3227. j = 0;
  3228. while ((handleObj = matched.handlers[j++]) && !event.isImmediatePropagationStopped()) {
  3229. if (!event.rnamespace || handleObj.namespace === false || event.rnamespace.test(handleObj.namespace)) {
  3230. event.handleObj = handleObj;
  3231. event.data = handleObj.data;
  3232. ret = ((jQuery.event.special[handleObj.origType] || {}).handle || handleObj.handler).apply(matched.elem, args);
  3233. if (ret !== undefined) {
  3234. if ((event.result = ret) === false) {
  3235. event.preventDefault();
  3236. event.stopPropagation();
  3237. }
  3238. }
  3239. }
  3240. }
  3241. }
  3242. if (special.postDispatch) {
  3243. special.postDispatch.call(this, event);
  3244. }
  3245. return event.result;
  3246. },
  3247. handlers: function (event, handlers) {
  3248. var i,
  3249. handleObj,
  3250. sel,
  3251. matchedHandlers,
  3252. matchedSelectors,
  3253. handlerQueue = [],
  3254. delegateCount = handlers.delegateCount,
  3255. cur = event.target;
  3256. if (delegateCount && cur.nodeType && !(event.type === "click" && event.button >= 1)) {
  3257. for (; cur !== this; cur = cur.parentNode || this) {
  3258. if (cur.nodeType === 1 && !(event.type === "click" && cur.disabled === true)) {
  3259. matchedHandlers = [];
  3260. matchedSelectors = {};
  3261. for (i = 0; i < delegateCount; i++) {
  3262. handleObj = handlers[i];
  3263. sel = handleObj.selector + " ";
  3264. if (matchedSelectors[sel] === undefined) {
  3265. matchedSelectors[sel] = handleObj.needsContext ? jQuery(sel, this).index(cur) > -1 : jQuery.find(sel, this, null, [cur]).length;
  3266. }
  3267. if (matchedSelectors[sel]) {
  3268. matchedHandlers.push(handleObj);
  3269. }
  3270. }
  3271. if (matchedHandlers.length) {
  3272. handlerQueue.push({
  3273. elem: cur,
  3274. handlers: matchedHandlers
  3275. });
  3276. }
  3277. }
  3278. }
  3279. }
  3280. cur = this;
  3281. if (delegateCount < handlers.length) {
  3282. handlerQueue.push({
  3283. elem: cur,
  3284. handlers: handlers.slice(delegateCount)
  3285. });
  3286. }
  3287. return handlerQueue;
  3288. },
  3289. addProp: function (name, hook) {
  3290. Object.defineProperty(jQuery.Event.prototype, name, {
  3291. enumerable: true,
  3292. configurable: true,
  3293. get: isFunction(hook) ?
  3294. function () {
  3295. if (this.originalEvent) {
  3296. return hook(this.originalEvent);
  3297. }
  3298. } :
  3299. function () {
  3300. if (this.originalEvent) {
  3301. return this.originalEvent[name];
  3302. }
  3303. },
  3304. set: function (value) {
  3305. Object.defineProperty(this, name, {
  3306. enumerable: true,
  3307. configurable: true,
  3308. writable: true,
  3309. value: value
  3310. });
  3311. },
  3312. });
  3313. },
  3314. fix: function (originalEvent) {
  3315. return originalEvent[jQuery.expando] ? originalEvent : new jQuery.Event(originalEvent);
  3316. },
  3317. special: {
  3318. load: {
  3319. noBubble: true
  3320. },
  3321. click: {
  3322. setup: function (data) {
  3323. var el = this || data;
  3324. if (rcheckableType.test(el.type) && el.click && nodeName(el, "input")) {
  3325. leverageNative(el, "click", returnTrue);
  3326. }
  3327. return false;
  3328. },
  3329. trigger: function (data) {
  3330. var el = this || data;
  3331. if (rcheckableType.test(el.type) && el.click && nodeName(el, "input")) {
  3332. leverageNative(el, "click");
  3333. }
  3334. return true;
  3335. },
  3336. _default: function (event) {
  3337. var target = event.target;
  3338. return (rcheckableType.test(target.type) && target.click && nodeName(target, "input") && dataPriv.get(target, "click")) || nodeName(target, "a");
  3339. },
  3340. },
  3341. beforeunload: {
  3342. postDispatch: function (event) {
  3343. if (event.result !== undefined && event.originalEvent) {
  3344. event.originalEvent.returnValue = event.result;
  3345. }
  3346. },
  3347. },
  3348. },
  3349. };
  3350.  
  3351. function leverageNative(el, type, expectSync) {
  3352. if (!expectSync) {
  3353. if (dataPriv.get(el, type) === undefined) {
  3354. jQuery.event.add(el, type, returnTrue);
  3355. }
  3356. return;
  3357. }
  3358. dataPriv.set(el, type, false);
  3359. jQuery.event.add(el, type, {
  3360. namespace: false,
  3361. handler: function (event) {
  3362. var notAsync,
  3363. result,
  3364. saved = dataPriv.get(this, type);
  3365. if (event.isTrigger & 1 && this[type]) {
  3366. if (!saved.length) {
  3367. saved = slice.call(arguments);
  3368. dataPriv.set(this, type, saved);
  3369. notAsync = expectSync(this, type);
  3370. this[type]();
  3371. result = dataPriv.get(this, type);
  3372. if (saved !== result || notAsync) {
  3373. dataPriv.set(this, type, false);
  3374. } else {
  3375. result = {};
  3376. }
  3377. if (saved !== result) {
  3378. event.stopImmediatePropagation();
  3379. event.preventDefault();
  3380. return result && result.value;
  3381. }
  3382. } else if ((jQuery.event.special[type] || {}).delegateType) {
  3383. event.stopPropagation();
  3384. }
  3385. } else if (saved.length) {
  3386. dataPriv.set(this, type, {
  3387. value: jQuery.event.trigger(jQuery.extend(saved[0], jQuery.Event.prototype), saved.slice(1), this)
  3388. });
  3389. event.stopImmediatePropagation();
  3390. }
  3391. },
  3392. });
  3393. }
  3394. jQuery.removeEvent = function (elem, type, handle) {
  3395. if (elem.removeEventListener) {
  3396. elem.removeEventListener(type, handle);
  3397. }
  3398. };
  3399. jQuery.Event = function (src, props) {
  3400. if (!(this instanceof jQuery.Event)) {
  3401. return new jQuery.Event(src, props);
  3402. }
  3403. if (src && src.type) {
  3404. this.originalEvent = src;
  3405. this.type = src.type;
  3406. this.isDefaultPrevented = src.defaultPrevented || (src.defaultPrevented === undefined && src.returnValue === false) ? returnTrue : returnFalse;
  3407. this.target = src.target && src.target.nodeType === 3 ? src.target.parentNode : src.target;
  3408. this.currentTarget = src.currentTarget;
  3409. this.relatedTarget = src.relatedTarget;
  3410. } else {
  3411. this.type = src;
  3412. }
  3413. if (props) {
  3414. jQuery.extend(this, props);
  3415. }
  3416. this.timeStamp = (src && src.timeStamp) || Date.now();
  3417. this[jQuery.expando] = true;
  3418. };
  3419. jQuery.Event.prototype = {
  3420. constructor: jQuery.Event,
  3421. isDefaultPrevented: returnFalse,
  3422. isPropagationStopped: returnFalse,
  3423. isImmediatePropagationStopped: returnFalse,
  3424. isSimulated: false,
  3425. preventDefault: function () {
  3426. var e = this.originalEvent;
  3427. this.isDefaultPrevented = returnTrue;
  3428. if (e && !this.isSimulated) {
  3429. e.preventDefault();
  3430. }
  3431. },
  3432. stopPropagation: function () {
  3433. var e = this.originalEvent;
  3434. this.isPropagationStopped = returnTrue;
  3435. if (e && !this.isSimulated) {
  3436. e.stopPropagation();
  3437. }
  3438. },
  3439. stopImmediatePropagation: function () {
  3440. var e = this.originalEvent;
  3441. this.isImmediatePropagationStopped = returnTrue;
  3442. if (e && !this.isSimulated) {
  3443. e.stopImmediatePropagation();
  3444. }
  3445. this.stopPropagation();
  3446. },
  3447. };
  3448. jQuery.each({
  3449. altKey: true,
  3450. bubbles: true,
  3451. cancelable: true,
  3452. changedTouches: true,
  3453. ctrlKey: true,
  3454. detail: true,
  3455. eventPhase: true,
  3456. metaKey: true,
  3457. pageX: true,
  3458. pageY: true,
  3459. shiftKey: true,
  3460. view: true,
  3461. char: true,
  3462. code: true,
  3463. charCode: true,
  3464. key: true,
  3465. keyCode: true,
  3466. button: true,
  3467. buttons: true,
  3468. clientX: true,
  3469. clientY: true,
  3470. offsetX: true,
  3471. offsetY: true,
  3472. pointerId: true,
  3473. pointerType: true,
  3474. screenX: true,
  3475. screenY: true,
  3476. targetTouches: true,
  3477. toElement: true,
  3478. touches: true,
  3479. which: true
  3480. }, jQuery.event.addProp);
  3481. jQuery.each({
  3482. focus: "focusin",
  3483. blur: "focusout"
  3484. }, function (type, delegateType) {
  3485. jQuery.event.special[type] = {
  3486. setup: function () {
  3487. leverageNative(this, type, expectSync);
  3488. return false;
  3489. },
  3490. trigger: function () {
  3491. leverageNative(this, type);
  3492. return true;
  3493. },
  3494. _default: function (event) {
  3495. return dataPriv.get(event.target, type);
  3496. },
  3497. delegateType: delegateType,
  3498. };
  3499. });
  3500. jQuery.each({
  3501. mouseenter: "mouseover",
  3502. mouseleave: "mouseout",
  3503. pointerenter: "pointerover",
  3504. pointerleave: "pointerout"
  3505. }, function (orig, fix) {
  3506. jQuery.event.special[orig] = {
  3507. delegateType: fix,
  3508. bindType: fix,
  3509. handle: function (event) {
  3510. var ret,
  3511. target = this,
  3512. related = event.relatedTarget,
  3513. handleObj = event.handleObj;
  3514. if (!related || (related !== target && !jQuery.contains(target, related))) {
  3515. event.type = handleObj.origType;
  3516. ret = handleObj.handler.apply(this, arguments);
  3517. event.type = fix;
  3518. }
  3519. return ret;
  3520. },
  3521. };
  3522. });
  3523. jQuery.fn.extend({
  3524. on: function (types, selector, data, fn) {
  3525. return on(this, types, selector, data, fn);
  3526. },
  3527. one: function (types, selector, data, fn) {
  3528. return on(this, types, selector, data, fn, 1);
  3529. },
  3530. off: function (types, selector, fn) {
  3531. var handleObj, type;
  3532. if (types && types.preventDefault && types.handleObj) {
  3533. handleObj = types.handleObj;
  3534. jQuery(types.delegateTarget).off(handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, handleObj.selector, handleObj.handler);
  3535. return this;
  3536. }
  3537. if (typeof types === "object") {
  3538. for (type in types) {
  3539. this.off(type, selector, types[type]);
  3540. }
  3541. return this;
  3542. }
  3543. if (selector === false || typeof selector === "function") {
  3544. fn = selector;
  3545. selector = undefined;
  3546. }
  3547. if (fn === false) {
  3548. fn = returnFalse;
  3549. }
  3550. return this.each(function () {
  3551. jQuery.event.remove(this, types, fn, selector);
  3552. });
  3553. },
  3554. });
  3555. var rnoInnerhtml = /<script|<style|<link/i,
  3556. rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
  3557. rcleanScript = /^\s*<!\[CDATA\[|\]\]>\s*$/g;
  3558.  
  3559. function manipulationTarget(elem, content) {
  3560. if (nodeName(elem, "table") && nodeName(content.nodeType !== 11 ? content : content.firstChild, "tr")) {
  3561. return jQuery(elem).children("tbody")[0] || elem;
  3562. }
  3563. return elem;
  3564. }
  3565.  
  3566. function disableScript(elem) {
  3567. elem.type = (elem.getAttribute("type") !== null) + "/" + elem.type;
  3568. return elem;
  3569. }
  3570.  
  3571. function restoreScript(elem) {
  3572. if ((elem.type || "").slice(0, 5) === "true/") {
  3573. elem.type = elem.type.slice(5);
  3574. } else {
  3575. elem.removeAttribute("type");
  3576. }
  3577. return elem;
  3578. }
  3579.  
  3580. function cloneCopyEvent(src, dest) {
  3581. var i, l, type, pdataOld, udataOld, udataCur, events;
  3582. if (dest.nodeType !== 1) {
  3583. return;
  3584. }
  3585. if (dataPriv.hasData(src)) {
  3586. pdataOld = dataPriv.get(src);
  3587. events = pdataOld.events;
  3588. if (events) {
  3589. dataPriv.remove(dest, "handle events");
  3590. for (type in events) {
  3591. for (i = 0, l = events[type].length; i < l; i++) {
  3592. jQuery.event.add(dest, type, events[type][i]);
  3593. }
  3594. }
  3595. }
  3596. }
  3597. if (dataUser.hasData(src)) {
  3598. udataOld = dataUser.access(src);
  3599. udataCur = jQuery.extend({}, udataOld);
  3600. dataUser.set(dest, udataCur);
  3601. }
  3602. }
  3603.  
  3604. function fixInput(src, dest) {
  3605. var nodeName = dest.nodeName.toLowerCase();
  3606. if (nodeName === "input" && rcheckableType.test(src.type)) {
  3607. dest.checked = src.checked;
  3608. } else if (nodeName === "input" || nodeName === "textarea") {
  3609. dest.defaultValue = src.defaultValue;
  3610. }
  3611. }
  3612.  
  3613. function domManip(collection, args, callback, ignored) {
  3614. args = flat(args);
  3615. var fragment,
  3616. first,
  3617. scripts,
  3618. hasScripts,
  3619. node,
  3620. doc,
  3621. i = 0,
  3622. l = collection.length,
  3623. iNoClone = l - 1,
  3624. value = args[0],
  3625. valueIsFunction = isFunction(value);
  3626. if (valueIsFunction || (l > 1 && typeof value === "string" && !support.checkClone && rchecked.test(value))) {
  3627. return collection.each(function (index) {
  3628. var self = collection.eq(index);
  3629. if (valueIsFunction) {
  3630. args[0] = value.call(this, index, self.html());
  3631. }
  3632. domManip(self, args, callback, ignored);
  3633. });
  3634. }
  3635. if (l) {
  3636. fragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);
  3637. first = fragment.firstChild;
  3638. if (fragment.childNodes.length === 1) {
  3639. fragment = first;
  3640. }
  3641. if (first || ignored) {
  3642. scripts = jQuery.map(getAll(fragment, "script"), disableScript);
  3643. hasScripts = scripts.length;
  3644. for (; i < l; i++) {
  3645. node = fragment;
  3646. if (i !== iNoClone) {
  3647. node = jQuery.clone(node, true, true);
  3648. if (hasScripts) {
  3649. jQuery.merge(scripts, getAll(node, "script"));
  3650. }
  3651. }
  3652. callback.call(collection[i], node, i);
  3653. }
  3654. if (hasScripts) {
  3655. doc = scripts[scripts.length - 1].ownerDocument;
  3656. jQuery.map(scripts, restoreScript);
  3657. for (i = 0; i < hasScripts; i++) {
  3658. node = scripts[i];
  3659. if (rscriptType.test(node.type || "") && !dataPriv.access(node, "globalEval") && jQuery.contains(doc, node)) {
  3660. if (node.src && (node.type || "").toLowerCase() !== "module") {
  3661. if (jQuery._evalUrl && !node.noModule) {
  3662. jQuery._evalUrl(node.src, {
  3663. nonce: node.nonce || node.getAttribute("nonce")
  3664. }, doc);
  3665. }
  3666. } else {
  3667. DOMEval(node.textContent.replace(rcleanScript, ""), node, doc);
  3668. }
  3669. }
  3670. }
  3671. }
  3672. }
  3673. }
  3674. return collection;
  3675. }
  3676.  
  3677. function remove(elem, selector, keepData) {
  3678. var node,
  3679. nodes = selector ? jQuery.filter(selector, elem) : elem,
  3680. i = 0;
  3681. for (;
  3682. (node = nodes[i]) != null; i++) {
  3683. if (!keepData && node.nodeType === 1) {
  3684. jQuery.cleanData(getAll(node));
  3685. }
  3686. if (node.parentNode) {
  3687. if (keepData && isAttached(node)) {
  3688. setGlobalEval(getAll(node, "script"));
  3689. }
  3690. node.parentNode.removeChild(node);
  3691. }
  3692. }
  3693. return elem;
  3694. }
  3695. jQuery.extend({
  3696. htmlPrefilter: function (html) {
  3697. return html;
  3698. },
  3699. clone: function (elem, dataAndEvents, deepDataAndEvents) {
  3700. var i,
  3701. l,
  3702. srcElements,
  3703. destElements,
  3704. clone = elem.cloneNode(true),
  3705. inPage = isAttached(elem);
  3706. if (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem)) {
  3707. destElements = getAll(clone);
  3708. srcElements = getAll(elem);
  3709. for (i = 0, l = srcElements.length; i < l; i++) {
  3710. fixInput(srcElements[i], destElements[i]);
  3711. }
  3712. }
  3713. if (dataAndEvents) {
  3714. if (deepDataAndEvents) {
  3715. srcElements = srcElements || getAll(elem);
  3716. destElements = destElements || getAll(clone);
  3717. for (i = 0, l = srcElements.length; i < l; i++) {
  3718. cloneCopyEvent(srcElements[i], destElements[i]);
  3719. }
  3720. } else {
  3721. cloneCopyEvent(elem, clone);
  3722. }
  3723. }
  3724. destElements = getAll(clone, "script");
  3725. if (destElements.length > 0) {
  3726. setGlobalEval(destElements, !inPage && getAll(elem, "script"));
  3727. }
  3728. return clone;
  3729. },
  3730. cleanData: function (elems) {
  3731. var data,
  3732. elem,
  3733. type,
  3734. special = jQuery.event.special,
  3735. i = 0;
  3736. for (;
  3737. (elem = elems[i]) !== undefined; i++) {
  3738. if (acceptData(elem)) {
  3739. if ((data = elem[dataPriv.expando])) {
  3740. if (data.events) {
  3741. for (type in data.events) {
  3742. if (special[type]) {
  3743. jQuery.event.remove(elem, type);
  3744. } else {
  3745. jQuery.removeEvent(elem, type, data.handle);
  3746. }
  3747. }
  3748. }
  3749. elem[dataPriv.expando] = undefined;
  3750. }
  3751. if (elem[dataUser.expando]) {
  3752. elem[dataUser.expando] = undefined;
  3753. }
  3754. }
  3755. }
  3756. },
  3757. });
  3758. jQuery.fn.extend({
  3759. detach: function (selector) {
  3760. return remove(this, selector, true);
  3761. },
  3762. remove: function (selector) {
  3763. return remove(this, selector);
  3764. },
  3765. text: function (value) {
  3766. return access(
  3767. this,
  3768. function (value) {
  3769. return value === undefined ?
  3770. jQuery.text(this) :
  3771. this.empty().each(function () {
  3772. if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {
  3773. this.textContent = value;
  3774. }
  3775. });
  3776. },
  3777. null,
  3778. value,
  3779. arguments.length
  3780. );
  3781. },
  3782. append: function () {
  3783. return domManip(this, arguments, function (elem) {
  3784. if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {
  3785. var target = manipulationTarget(this, elem);
  3786. target.appendChild(elem);
  3787. }
  3788. });
  3789. },
  3790. prepend: function () {
  3791. return domManip(this, arguments, function (elem) {
  3792. if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {
  3793. var target = manipulationTarget(this, elem);
  3794. target.insertBefore(elem, target.firstChild);
  3795. }
  3796. });
  3797. },
  3798. before: function () {
  3799. return domManip(this, arguments, function (elem) {
  3800. if (this.parentNode) {
  3801. this.parentNode.insertBefore(elem, this);
  3802. }
  3803. });
  3804. },
  3805. after: function () {
  3806. return domManip(this, arguments, function (elem) {
  3807. if (this.parentNode) {
  3808. this.parentNode.insertBefore(elem, this.nextSibling);
  3809. }
  3810. });
  3811. },
  3812. empty: function () {
  3813. var elem,
  3814. i = 0;
  3815. for (;
  3816. (elem = this[i]) != null; i++) {
  3817. if (elem.nodeType === 1) {
  3818. jQuery.cleanData(getAll(elem, false));
  3819. elem.textContent = "";
  3820. }
  3821. }
  3822. return this;
  3823. },
  3824. clone: function (dataAndEvents, deepDataAndEvents) {
  3825. dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
  3826. deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
  3827. return this.map(function () {
  3828. return jQuery.clone(this, dataAndEvents, deepDataAndEvents);
  3829. });
  3830. },
  3831. html: function (value) {
  3832. return access(
  3833. this,
  3834. function (value) {
  3835. var elem = this[0] || {},
  3836. i = 0,
  3837. l = this.length;
  3838. if (value === undefined && elem.nodeType === 1) {
  3839. return elem.innerHTML;
  3840. }
  3841. if (typeof value === "string" && !rnoInnerhtml.test(value) && !wrapMap[(rtagName.exec(value) || ["", ""])[1].toLowerCase()]) {
  3842. value = jQuery.htmlPrefilter(value);
  3843. try {
  3844. for (; i < l; i++) {
  3845. elem = this[i] || {};
  3846. if (elem.nodeType === 1) {
  3847. jQuery.cleanData(getAll(elem, false));
  3848. elem.innerHTML = value;
  3849. }
  3850. }
  3851. elem = 0;
  3852. } catch (e) { }
  3853. }
  3854. if (elem) {
  3855. this.empty().append(value);
  3856. }
  3857. },
  3858. null,
  3859. value,
  3860. arguments.length
  3861. );
  3862. },
  3863. replaceWith: function () {
  3864. var ignored = [];
  3865. return domManip(
  3866. this,
  3867. arguments,
  3868. function (elem) {
  3869. var parent = this.parentNode;
  3870. if (jQuery.inArray(this, ignored) < 0) {
  3871. jQuery.cleanData(getAll(this));
  3872. if (parent) {
  3873. parent.replaceChild(elem, this);
  3874. }
  3875. }
  3876. },
  3877. ignored
  3878. );
  3879. },
  3880. });
  3881. jQuery.each({
  3882. appendTo: "append",
  3883. prependTo: "prepend",
  3884. insertBefore: "before",
  3885. insertAfter: "after",
  3886. replaceAll: "replaceWith"
  3887. }, function (name, original) {
  3888. jQuery.fn[name] = function (selector) {
  3889. var elems,
  3890. ret = [],
  3891. insert = jQuery(selector),
  3892. last = insert.length - 1,
  3893. i = 0;
  3894. for (; i <= last; i++) {
  3895. elems = i === last ? this : this.clone(true);
  3896. jQuery(insert[i])[original](elems);
  3897. push.apply(ret, elems.get());
  3898. }
  3899. return this.pushStack(ret);
  3900. };
  3901. });
  3902. var rnumnonpx = new RegExp("^(" + pnum + ")(?!px)[a-z%]+$", "i");
  3903. var rcustomProp = /^--/;
  3904. var getStyles = function (elem) {
  3905. var view = elem.ownerDocument.defaultView;
  3906. if (!view || !view.opener) {
  3907. view = window;
  3908. }
  3909. return view.getComputedStyle(elem);
  3910. };
  3911. var swap = function (elem, options, callback) {
  3912. var ret,
  3913. name,
  3914. old = {};
  3915. for (name in options) {
  3916. old[name] = elem.style[name];
  3917. elem.style[name] = options[name];
  3918. }
  3919. ret = callback.call(elem);
  3920. for (name in options) {
  3921. elem.style[name] = old[name];
  3922. }
  3923. return ret;
  3924. };
  3925. var rboxStyle = new RegExp(cssExpand.join("|"), "i");
  3926. var whitespace = "[\\x20\\t\\r\\n\\f]";
  3927. var rtrimCSS = new RegExp("^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g");
  3928. (function () {
  3929. function computeStyleTests() {
  3930. if (!div) {
  3931. return;
  3932. }
  3933. container.style.cssText = "position:absolute;left:-11111px;width:60px;" + "margin-top:1px;padding:0;border:0";
  3934. div.style.cssText = "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + "margin:auto;border:1px;padding:1px;" + "width:60%;top:1%";
  3935. documentElement.appendChild(container).appendChild(div);
  3936. var divStyle = window.getComputedStyle(div);
  3937. pixelPositionVal = divStyle.top !== "1%";
  3938. reliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12;
  3939. div.style.right = "60%";
  3940. pixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36;
  3941. boxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36;
  3942. div.style.position = "absolute";
  3943. scrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12;
  3944. documentElement.removeChild(container);
  3945. div = null;
  3946. }
  3947.  
  3948. function roundPixelMeasures(measure) {
  3949. return Math.round(parseFloat(measure));
  3950. }
  3951. var pixelPositionVal,
  3952. boxSizingReliableVal,
  3953. scrollboxSizeVal,
  3954. pixelBoxStylesVal,
  3955. reliableTrDimensionsVal,
  3956. reliableMarginLeftVal,
  3957. container = document.createElement("div"),
  3958. div = document.createElement("div");
  3959. if (!div.style) {
  3960. return;
  3961. }
  3962. div.style.backgroundClip = "content-box";
  3963. div.cloneNode(true).style.backgroundClip = "";
  3964. support.clearCloneStyle = div.style.backgroundClip === "content-box";
  3965. jQuery.extend(support, {
  3966. boxSizingReliable: function () {
  3967. computeStyleTests();
  3968. return boxSizingReliableVal;
  3969. },
  3970. pixelBoxStyles: function () {
  3971. computeStyleTests();
  3972. return pixelBoxStylesVal;
  3973. },
  3974. pixelPosition: function () {
  3975. computeStyleTests();
  3976. return pixelPositionVal;
  3977. },
  3978. reliableMarginLeft: function () {
  3979. computeStyleTests();
  3980. return reliableMarginLeftVal;
  3981. },
  3982. scrollboxSize: function () {
  3983. computeStyleTests();
  3984. return scrollboxSizeVal;
  3985. },
  3986. reliableTrDimensions: function () {
  3987. var table, tr, trChild, trStyle;
  3988. if (reliableTrDimensionsVal == null) {
  3989. table = document.createElement("table");
  3990. tr = document.createElement("tr");
  3991. trChild = document.createElement("div");
  3992. table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate";
  3993. tr.style.cssText = "border:1px solid";
  3994. tr.style.height = "1px";
  3995. trChild.style.height = "9px";
  3996. trChild.style.display = "block";
  3997. documentElement.appendChild(table).appendChild(tr).appendChild(trChild);
  3998. trStyle = window.getComputedStyle(tr);
  3999. reliableTrDimensionsVal = parseInt(trStyle.height, 10) + parseInt(trStyle.borderTopWidth, 10) + parseInt(trStyle.borderBottomWidth, 10) === tr.offsetHeight;
  4000. documentElement.removeChild(table);
  4001. }
  4002. return reliableTrDimensionsVal;
  4003. },
  4004. });
  4005. })();
  4006.  
  4007. function curCSS(elem, name, computed) {
  4008. var width,
  4009. minWidth,
  4010. maxWidth,
  4011. ret,
  4012. isCustomProp = rcustomProp.test(name),
  4013. style = elem.style;
  4014. computed = computed || getStyles(elem);
  4015. if (computed) {
  4016. ret = computed.getPropertyValue(name) || computed[name];
  4017. if (isCustomProp && ret) {
  4018. ret = ret.replace(rtrimCSS, "$1") || undefined;
  4019. }
  4020. if (ret === "" && !isAttached(elem)) {
  4021. ret = jQuery.style(elem, name);
  4022. }
  4023. if (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) {
  4024. width = style.width;
  4025. minWidth = style.minWidth;
  4026. maxWidth = style.maxWidth;
  4027. style.minWidth = style.maxWidth = style.width = ret;
  4028. ret = computed.width;
  4029. style.width = width;
  4030. style.minWidth = minWidth;
  4031. style.maxWidth = maxWidth;
  4032. }
  4033. }
  4034. return ret !== undefined ? ret + "" : ret;
  4035. }
  4036.  
  4037. function addGetHookIf(conditionFn, hookFn) {
  4038. return {
  4039. get: function () {
  4040. if (conditionFn()) {
  4041. delete this.get;
  4042. return;
  4043. }
  4044. return (this.get = hookFn).apply(this, arguments);
  4045. },
  4046. };
  4047. }
  4048. var cssPrefixes = ["Webkit", "Moz", "ms"],
  4049. emptyStyle = document.createElement("div").style,
  4050. vendorProps = {};
  4051.  
  4052. function vendorPropName(name) {
  4053. var capName = name[0].toUpperCase() + name.slice(1),
  4054. i = cssPrefixes.length;
  4055. while (i--) {
  4056. name = cssPrefixes[i] + capName;
  4057. if (name in emptyStyle) {
  4058. return name;
  4059. }
  4060. }
  4061. }
  4062.  
  4063. function finalPropName(name) {
  4064. var final = jQuery.cssProps[name] || vendorProps[name];
  4065. if (final) {
  4066. return final;
  4067. }
  4068. if (name in emptyStyle) {
  4069. return name;
  4070. }
  4071. return (vendorProps[name] = vendorPropName(name) || name);
  4072. }
  4073. var rdisplayswap = /^(none|table(?!-c[ea]).+)/,
  4074. cssShow = {
  4075. position: "absolute",
  4076. visibility: "hidden",
  4077. display: "block"
  4078. },
  4079. cssNormalTransform = {
  4080. letterSpacing: "0",
  4081. fontWeight: "400"
  4082. };
  4083.  
  4084. function setPositiveNumber(_elem, value, subtract) {
  4085. var matches = rcssNum.exec(value);
  4086. return matches ? Math.max(0, matches[2] - (subtract || 0)) + (matches[3] || "px") : value;
  4087. }
  4088.  
  4089. function boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {
  4090. var i = dimension === "width" ? 1 : 0,
  4091. extra = 0,
  4092. delta = 0;
  4093. if (box === (isBorderBox ? "border" : "content")) {
  4094. return 0;
  4095. }
  4096. for (; i < 4; i += 2) {
  4097. if (box === "margin") {
  4098. delta += jQuery.css(elem, box + cssExpand[i], true, styles);
  4099. }
  4100. if (!isBorderBox) {
  4101. delta += jQuery.css(elem, "padding" + cssExpand[i], true, styles);
  4102. if (box !== "padding") {
  4103. delta += jQuery.css(elem, "border" + cssExpand[i] + "Width", true, styles);
  4104. } else {
  4105. extra += jQuery.css(elem, "border" + cssExpand[i] + "Width", true, styles);
  4106. }
  4107. } else {
  4108. if (box === "content") {
  4109. delta -= jQuery.css(elem, "padding" + cssExpand[i], true, styles);
  4110. }
  4111. if (box !== "margin") {
  4112. delta -= jQuery.css(elem, "border" + cssExpand[i] + "Width", true, styles);
  4113. }
  4114. }
  4115. }
  4116. if (!isBorderBox && computedVal >= 0) {
  4117. delta += Math.max(0, Math.ceil(elem["offset" + dimension[0].toUpperCase() + dimension.slice(1)] - computedVal - delta - extra - 0.5)) || 0;
  4118. }
  4119. return delta;
  4120. }
  4121.  
  4122. function getWidthOrHeight(elem, dimension, extra) {
  4123. var styles = getStyles(elem),
  4124. boxSizingNeeded = !support.boxSizingReliable() || extra,
  4125. isBorderBox = boxSizingNeeded && jQuery.css(elem, "boxSizing", false, styles) === "border-box",
  4126. valueIsBorderBox = isBorderBox,
  4127. val = curCSS(elem, dimension, styles),
  4128. offsetProp = "offset" + dimension[0].toUpperCase() + dimension.slice(1);
  4129. if (rnumnonpx.test(val)) {
  4130. if (!extra) {
  4131. return val;
  4132. }
  4133. val = "auto";
  4134. }
  4135. if (((!support.boxSizingReliable() && isBorderBox) || (!support.reliableTrDimensions() && nodeName(elem, "tr")) || val === "auto" || (!parseFloat(val) && jQuery.css(elem, "display", false, styles) === "inline")) && elem.getClientRects().length) {
  4136. isBorderBox = jQuery.css(elem, "boxSizing", false, styles) === "border-box";
  4137. valueIsBorderBox = offsetProp in elem;
  4138. if (valueIsBorderBox) {
  4139. val = elem[offsetProp];
  4140. }
  4141. }
  4142. val = parseFloat(val) || 0;
  4143. return val + boxModelAdjustment(elem, dimension, extra || (isBorderBox ? "border" : "content"), valueIsBorderBox, styles, val) + "px";
  4144. }
  4145. jQuery.extend({
  4146. cssHooks: {
  4147. opacity: {
  4148. get: function (elem, computed) {
  4149. if (computed) {
  4150. var ret = curCSS(elem, "opacity");
  4151. return ret === "" ? "1" : ret;
  4152. }
  4153. },
  4154. },
  4155. },
  4156. cssNumber: {
  4157. animationIterationCount: true,
  4158. columnCount: true,
  4159. fillOpacity: true,
  4160. flexGrow: true,
  4161. flexShrink: true,
  4162. fontWeight: true,
  4163. gridArea: true,
  4164. gridColumn: true,
  4165. gridColumnEnd: true,
  4166. gridColumnStart: true,
  4167. gridRow: true,
  4168. gridRowEnd: true,
  4169. gridRowStart: true,
  4170. lineHeight: true,
  4171. opacity: true,
  4172. order: true,
  4173. orphans: true,
  4174. widows: true,
  4175. zIndex: true,
  4176. zoom: true
  4177. },
  4178. cssProps: {},
  4179. style: function (elem, name, value, extra) {
  4180. if (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {
  4181. return;
  4182. }
  4183. var ret,
  4184. type,
  4185. hooks,
  4186. origName = camelCase(name),
  4187. isCustomProp = rcustomProp.test(name),
  4188. style = elem.style;
  4189. if (!isCustomProp) {
  4190. name = finalPropName(origName);
  4191. }
  4192. hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];
  4193. if (value !== undefined) {
  4194. type = typeof value;
  4195. if (type === "string" && (ret = rcssNum.exec(value)) && ret[1]) {
  4196. value = adjustCSS(elem, name, ret);
  4197. type = "number";
  4198. }
  4199. if (value == null || value !== value) {
  4200. return;
  4201. }
  4202. if (type === "number" && !isCustomProp) {
  4203. value += (ret && ret[3]) || (jQuery.cssNumber[origName] ? "" : "px");
  4204. }
  4205. if (!support.clearCloneStyle && value === "" && name.indexOf("background") === 0) {
  4206. style[name] = "inherit";
  4207. }
  4208. if (!hooks || !("set" in hooks) || (value = hooks.set(elem, value, extra)) !== undefined) {
  4209. if (isCustomProp) {
  4210. style.setProperty(name, value);
  4211. } else {
  4212. style[name] = value;
  4213. }
  4214. }
  4215. } else {
  4216. if (hooks && "get" in hooks && (ret = hooks.get(elem, false, extra)) !== undefined) {
  4217. return ret;
  4218. }
  4219. return style[name];
  4220. }
  4221. },
  4222. css: function (elem, name, extra, styles) {
  4223. var val,
  4224. num,
  4225. hooks,
  4226. origName = camelCase(name),
  4227. isCustomProp = rcustomProp.test(name);
  4228. if (!isCustomProp) {
  4229. name = finalPropName(origName);
  4230. }
  4231. hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];
  4232. if (hooks && "get" in hooks) {
  4233. val = hooks.get(elem, true, extra);
  4234. }
  4235. if (val === undefined) {
  4236. val = curCSS(elem, name, styles);
  4237. }
  4238. if (val === "normal" && name in cssNormalTransform) {
  4239. val = cssNormalTransform[name];
  4240. }
  4241. if (extra === "" || extra) {
  4242. num = parseFloat(val);
  4243. return extra === true || isFinite(num) ? num || 0 : val;
  4244. }
  4245. return val;
  4246. },
  4247. });
  4248. jQuery.each(["height", "width"], function (_i, dimension) {
  4249. jQuery.cssHooks[dimension] = {
  4250. get: function (elem, computed, extra) {
  4251. if (computed) {
  4252. return rdisplayswap.test(jQuery.css(elem, "display")) && (!elem.getClientRects().length || !elem.getBoundingClientRect().width) ?
  4253. swap(elem, cssShow, function () {
  4254. return getWidthOrHeight(elem, dimension, extra);
  4255. }) :
  4256. getWidthOrHeight(elem, dimension, extra);
  4257. }
  4258. },
  4259. set: function (elem, value, extra) {
  4260. var matches,
  4261. styles = getStyles(elem),
  4262. scrollboxSizeBuggy = !support.scrollboxSize() && styles.position === "absolute",
  4263. boxSizingNeeded = scrollboxSizeBuggy || extra,
  4264. isBorderBox = boxSizingNeeded && jQuery.css(elem, "boxSizing", false, styles) === "border-box",
  4265. subtract = extra ? boxModelAdjustment(elem, dimension, extra, isBorderBox, styles) : 0;
  4266. if (isBorderBox && scrollboxSizeBuggy) {
  4267. subtract -= Math.ceil(elem["offset" + dimension[0].toUpperCase() + dimension.slice(1)] - parseFloat(styles[dimension]) - boxModelAdjustment(elem, dimension, "border", false, styles) - 0.5);
  4268. }
  4269. if (subtract && (matches = rcssNum.exec(value)) && (matches[3] || "px") !== "px") {
  4270. elem.style[dimension] = value;
  4271. value = jQuery.css(elem, dimension);
  4272. }
  4273. return setPositiveNumber(elem, value, subtract);
  4274. },
  4275. };
  4276. });
  4277. jQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft, function (elem, computed) {
  4278. if (computed) {
  4279. return (
  4280. (parseFloat(curCSS(elem, "marginLeft")) ||
  4281. elem.getBoundingClientRect().left -
  4282. swap(elem, {
  4283. marginLeft: 0
  4284. }, function () {
  4285. return elem.getBoundingClientRect().left;
  4286. })) + "px"
  4287. );
  4288. }
  4289. });
  4290. jQuery.each({
  4291. margin: "",
  4292. padding: "",
  4293. border: "Width"
  4294. }, function (prefix, suffix) {
  4295. jQuery.cssHooks[prefix + suffix] = {
  4296. expand: function (value) {
  4297. var i = 0,
  4298. expanded = {},
  4299. parts = typeof value === "string" ? value.split(" ") : [value];
  4300. for (; i < 4; i++) {
  4301. expanded[prefix + cssExpand[i] + suffix] = parts[i] || parts[i - 2] || parts[0];
  4302. }
  4303. return expanded;
  4304. },
  4305. };
  4306. if (prefix !== "margin") {
  4307. jQuery.cssHooks[prefix + suffix].set = setPositiveNumber;
  4308. }
  4309. });
  4310. jQuery.fn.extend({
  4311. css: function (name, value) {
  4312. return access(
  4313. this,
  4314. function (elem, name, value) {
  4315. var styles,
  4316. len,
  4317. map = {},
  4318. i = 0;
  4319. if (Array.isArray(name)) {
  4320. styles = getStyles(elem);
  4321. len = name.length;
  4322. for (; i < len; i++) {
  4323. map[name[i]] = jQuery.css(elem, name[i], false, styles);
  4324. }
  4325. return map;
  4326. }
  4327. return value !== undefined ? jQuery.style(elem, name, value) : jQuery.css(elem, name);
  4328. },
  4329. name,
  4330. value,
  4331. arguments.length > 1
  4332. );
  4333. },
  4334. });
  4335.  
  4336. function Tween(elem, options, prop, end, easing) {
  4337. return new Tween.prototype.init(elem, options, prop, end, easing);
  4338. }
  4339. jQuery.Tween = Tween;
  4340. Tween.prototype = {
  4341. constructor: Tween,
  4342. init: function (elem, options, prop, end, easing, unit) {
  4343. this.elem = elem;
  4344. this.prop = prop;
  4345. this.easing = easing || jQuery.easing._default;
  4346. this.options = options;
  4347. this.start = this.now = this.cur();
  4348. this.end = end;
  4349. this.unit = unit || (jQuery.cssNumber[prop] ? "" : "px");
  4350. },
  4351. cur: function () {
  4352. var hooks = Tween.propHooks[this.prop];
  4353. return hooks && hooks.get ? hooks.get(this) : Tween.propHooks._default.get(this);
  4354. },
  4355. run: function (percent) {
  4356. var eased,
  4357. hooks = Tween.propHooks[this.prop];
  4358. if (this.options.duration) {
  4359. this.pos = eased = jQuery.easing[this.easing](percent, this.options.duration * percent, 0, 1, this.options.duration);
  4360. } else {
  4361. this.pos = eased = percent;
  4362. }
  4363. this.now = (this.end - this.start) * eased + this.start;
  4364. if (this.options.step) {
  4365. this.options.step.call(this.elem, this.now, this);
  4366. }
  4367. if (hooks && hooks.set) {
  4368. hooks.set(this);
  4369. } else {
  4370. Tween.propHooks._default.set(this);
  4371. }
  4372. return this;
  4373. },
  4374. };
  4375. Tween.prototype.init.prototype = Tween.prototype;
  4376. Tween.propHooks = {
  4377. _default: {
  4378. get: function (tween) {
  4379. var result;
  4380. if (tween.elem.nodeType !== 1 || (tween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null)) {
  4381. return tween.elem[tween.prop];
  4382. }
  4383. result = jQuery.css(tween.elem, tween.prop, "");
  4384. return !result || result === "auto" ? 0 : result;
  4385. },
  4386. set: function (tween) {
  4387. if (jQuery.fx.step[tween.prop]) {
  4388. jQuery.fx.step[tween.prop](tween);
  4389. } else if (tween.elem.nodeType === 1 && (jQuery.cssHooks[tween.prop] || tween.elem.style[finalPropName(tween.prop)] != null)) {
  4390. jQuery.style(tween.elem, tween.prop, tween.now + tween.unit);
  4391. } else {
  4392. tween.elem[tween.prop] = tween.now;
  4393. }
  4394. },
  4395. },
  4396. };
  4397. Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
  4398. set: function (tween) {
  4399. if (tween.elem.nodeType && tween.elem.parentNode) {
  4400. tween.elem[tween.prop] = tween.now;
  4401. }
  4402. },
  4403. };
  4404. jQuery.easing = {
  4405. linear: function (p) {
  4406. return p;
  4407. },
  4408. swing: function (p) {
  4409. return 0.5 - Math.cos(p * Math.PI) / 2;
  4410. },
  4411. _default: "swing",
  4412. };
  4413. jQuery.fx = Tween.prototype.init;
  4414. jQuery.fx.step = {};
  4415. var fxNow,
  4416. inProgress,
  4417. rfxtypes = /^(?:toggle|show|hide)$/,
  4418. rrun = /queueHooks$/;
  4419.  
  4420. function schedule() {
  4421. if (inProgress) {
  4422. if (document.hidden === false && window.requestAnimationFrame) {
  4423. window.requestAnimationFrame(schedule);
  4424. } else {
  4425. window.setTimeout(schedule, jQuery.fx.interval);
  4426. }
  4427. jQuery.fx.tick();
  4428. }
  4429. }
  4430.  
  4431. function createFxNow() {
  4432. window.setTimeout(function () {
  4433. fxNow = undefined;
  4434. });
  4435. return (fxNow = Date.now());
  4436. }
  4437.  
  4438. function genFx(type, includeWidth) {
  4439. var which,
  4440. i = 0,
  4441. attrs = {
  4442. height: type
  4443. };
  4444. includeWidth = includeWidth ? 1 : 0;
  4445. for (; i < 4; i += 2 - includeWidth) {
  4446. which = cssExpand[i];
  4447. attrs["margin" + which] = attrs["padding" + which] = type;
  4448. }
  4449. if (includeWidth) {
  4450. attrs.opacity = attrs.width = type;
  4451. }
  4452. return attrs;
  4453. }
  4454.  
  4455. function createTween(value, prop, animation) {
  4456. var tween,
  4457. collection = (Animation.tweeners[prop] || []).concat(Animation.tweeners["*"]),
  4458. index = 0,
  4459. length = collection.length;
  4460. for (; index < length; index++) {
  4461. if ((tween = collection[index].call(animation, prop, value))) {
  4462. return tween;
  4463. }
  4464. }
  4465. }
  4466.  
  4467. function defaultPrefilter(elem, props, opts) {
  4468. var prop,
  4469. value,
  4470. toggle,
  4471. hooks,
  4472. oldfire,
  4473. propTween,
  4474. restoreDisplay,
  4475. display,
  4476. isBox = "width" in props || "height" in props,
  4477. anim = this,
  4478. orig = {},
  4479. style = elem.style,
  4480. hidden = elem.nodeType && isHiddenWithinTree(elem),
  4481. dataShow = dataPriv.get(elem, "fxshow");
  4482. if (!opts.queue) {
  4483. hooks = jQuery._queueHooks(elem, "fx");
  4484. if (hooks.unqueued == null) {
  4485. hooks.unqueued = 0;
  4486. oldfire = hooks.empty.fire;
  4487. hooks.empty.fire = function () {
  4488. if (!hooks.unqueued) {
  4489. oldfire();
  4490. }
  4491. };
  4492. }
  4493. hooks.unqueued++;
  4494. anim.always(function () {
  4495. anim.always(function () {
  4496. hooks.unqueued--;
  4497. if (!jQuery.queue(elem, "fx").length) {
  4498. hooks.empty.fire();
  4499. }
  4500. });
  4501. });
  4502. }
  4503. for (prop in props) {
  4504. value = props[prop];
  4505. if (rfxtypes.test(value)) {
  4506. delete props[prop];
  4507. toggle = toggle || value === "toggle";
  4508. if (value === (hidden ? "hide" : "show")) {
  4509. if (value === "show" && dataShow && dataShow[prop] !== undefined) {
  4510. hidden = true;
  4511. } else {
  4512. continue;
  4513. }
  4514. }
  4515. orig[prop] = (dataShow && dataShow[prop]) || jQuery.style(elem, prop);
  4516. }
  4517. }
  4518. propTween = !jQuery.isEmptyObject(props);
  4519. if (!propTween && jQuery.isEmptyObject(orig)) {
  4520. return;
  4521. }
  4522. if (isBox && elem.nodeType === 1) {
  4523. opts.overflow = [style.overflow, style.overflowX, style.overflowY];
  4524. restoreDisplay = dataShow && dataShow.display;
  4525. if (restoreDisplay == null) {
  4526. restoreDisplay = dataPriv.get(elem, "display");
  4527. }
  4528. display = jQuery.css(elem, "display");
  4529. if (display === "none") {
  4530. if (restoreDisplay) {
  4531. display = restoreDisplay;
  4532. } else {
  4533. showHide([elem], true);
  4534. restoreDisplay = elem.style.display || restoreDisplay;
  4535. display = jQuery.css(elem, "display");
  4536. showHide([elem]);
  4537. }
  4538. }
  4539. if (display === "inline" || (display === "inline-block" && restoreDisplay != null)) {
  4540. if (jQuery.css(elem, "float") === "none") {
  4541. if (!propTween) {
  4542. anim.done(function () {
  4543. style.display = restoreDisplay;
  4544. });
  4545. if (restoreDisplay == null) {
  4546. display = style.display;
  4547. restoreDisplay = display === "none" ? "" : display;
  4548. }
  4549. }
  4550. style.display = "inline-block";
  4551. }
  4552. }
  4553. }
  4554. if (opts.overflow) {
  4555. style.overflow = "hidden";
  4556. anim.always(function () {
  4557. style.overflow = opts.overflow[0];
  4558. style.overflowX = opts.overflow[1];
  4559. style.overflowY = opts.overflow[2];
  4560. });
  4561. }
  4562. propTween = false;
  4563. for (prop in orig) {
  4564. if (!propTween) {
  4565. if (dataShow) {
  4566. if ("hidden" in dataShow) {
  4567. hidden = dataShow.hidden;
  4568. }
  4569. } else {
  4570. dataShow = dataPriv.access(elem, "fxshow", {
  4571. display: restoreDisplay
  4572. });
  4573. }
  4574. if (toggle) {
  4575. dataShow.hidden = !hidden;
  4576. }
  4577. if (hidden) {
  4578. showHide([elem], true);
  4579. }
  4580. anim.done(function () {
  4581. if (!hidden) {
  4582. showHide([elem]);
  4583. }
  4584. dataPriv.remove(elem, "fxshow");
  4585. for (prop in orig) {
  4586. jQuery.style(elem, prop, orig[prop]);
  4587. }
  4588. });
  4589. }
  4590. propTween = createTween(hidden ? dataShow[prop] : 0, prop, anim);
  4591. if (!(prop in dataShow)) {
  4592. dataShow[prop] = propTween.start;
  4593. if (hidden) {
  4594. propTween.end = propTween.start;
  4595. propTween.start = 0;
  4596. }
  4597. }
  4598. }
  4599. }
  4600.  
  4601. function propFilter(props, specialEasing) {
  4602. var index, name, easing, value, hooks;
  4603. for (index in props) {
  4604. name = camelCase(index);
  4605. easing = specialEasing[name];
  4606. value = props[index];
  4607. if (Array.isArray(value)) {
  4608. easing = value[1];
  4609. value = props[index] = value[0];
  4610. }
  4611. if (index !== name) {
  4612. props[name] = value;
  4613. delete props[index];
  4614. }
  4615. hooks = jQuery.cssHooks[name];
  4616. if (hooks && "expand" in hooks) {
  4617. value = hooks.expand(value);
  4618. delete props[name];
  4619. for (index in value) {
  4620. if (!(index in props)) {
  4621. props[index] = value[index];
  4622. specialEasing[index] = easing;
  4623. }
  4624. }
  4625. } else {
  4626. specialEasing[name] = easing;
  4627. }
  4628. }
  4629. }
  4630.  
  4631. function Animation(elem, properties, options) {
  4632. var result,
  4633. stopped,
  4634. index = 0,
  4635. length = Animation.prefilters.length,
  4636. deferred = jQuery.Deferred().always(function () {
  4637. delete tick.elem;
  4638. }),
  4639. tick = function () {
  4640. if (stopped) {
  4641. return false;
  4642. }
  4643. var currentTime = fxNow || createFxNow(),
  4644. remaining = Math.max(0, animation.startTime + animation.duration - currentTime),
  4645. temp = remaining / animation.duration || 0,
  4646. percent = 1 - temp,
  4647. index = 0,
  4648. length = animation.tweens.length;
  4649. for (; index < length; index++) {
  4650. animation.tweens[index].run(percent);
  4651. }
  4652. deferred.notifyWith(elem, [animation, percent, remaining]);
  4653. if (percent < 1 && length) {
  4654. return remaining;
  4655. }
  4656. if (!length) {
  4657. deferred.notifyWith(elem, [animation, 1, 0]);
  4658. }
  4659. deferred.resolveWith(elem, [animation]);
  4660. return false;
  4661. },
  4662. animation = deferred.promise({
  4663. elem: elem,
  4664. props: jQuery.extend({}, properties),
  4665. opts: jQuery.extend(true, {
  4666. specialEasing: {},
  4667. easing: jQuery.easing._default
  4668. }, options),
  4669. originalProperties: properties,
  4670. originalOptions: options,
  4671. startTime: fxNow || createFxNow(),
  4672. duration: options.duration,
  4673. tweens: [],
  4674. createTween: function (prop, end) {
  4675. var tween = jQuery.Tween(elem, animation.opts, prop, end, animation.opts.specialEasing[prop] || animation.opts.easing);
  4676. animation.tweens.push(tween);
  4677. return tween;
  4678. },
  4679. stop: function (gotoEnd) {
  4680. var index = 0,
  4681. length = gotoEnd ? animation.tweens.length : 0;
  4682. if (stopped) {
  4683. return this;
  4684. }
  4685. stopped = true;
  4686. for (; index < length; index++) {
  4687. animation.tweens[index].run(1);
  4688. }
  4689. if (gotoEnd) {
  4690. deferred.notifyWith(elem, [animation, 1, 0]);
  4691. deferred.resolveWith(elem, [animation, gotoEnd]);
  4692. } else {
  4693. deferred.rejectWith(elem, [animation, gotoEnd]);
  4694. }
  4695. return this;
  4696. },
  4697. }),
  4698. props = animation.props;
  4699. propFilter(props, animation.opts.specialEasing);
  4700. for (; index < length; index++) {
  4701. result = Animation.prefilters[index].call(animation, elem, props, animation.opts);
  4702. if (result) {
  4703. if (isFunction(result.stop)) {
  4704. jQuery._queueHooks(animation.elem, animation.opts.queue).stop = result.stop.bind(result);
  4705. }
  4706. return result;
  4707. }
  4708. }
  4709. jQuery.map(props, createTween, animation);
  4710. if (isFunction(animation.opts.start)) {
  4711. animation.opts.start.call(elem, animation);
  4712. }
  4713. animation.progress(animation.opts.progress).done(animation.opts.done, animation.opts.complete).fail(animation.opts.fail).always(animation.opts.always);
  4714. jQuery.fx.timer(jQuery.extend(tick, {
  4715. elem: elem,
  4716. anim: animation,
  4717. queue: animation.opts.queue
  4718. }));
  4719. return animation;
  4720. }
  4721. jQuery.Animation = jQuery.extend(Animation, {
  4722. tweeners: {
  4723. "*": [
  4724. function (prop, value) {
  4725. var tween = this.createTween(prop, value);
  4726. adjustCSS(tween.elem, prop, rcssNum.exec(value), tween);
  4727. return tween;
  4728. },
  4729. ],
  4730. },
  4731. tweener: function (props, callback) {
  4732. if (isFunction(props)) {
  4733. callback = props;
  4734. props = ["*"];
  4735. } else {
  4736. props = props.match(rnothtmlwhite);
  4737. }
  4738. var prop,
  4739. index = 0,
  4740. length = props.length;
  4741. for (; index < length; index++) {
  4742. prop = props[index];
  4743. Animation.tweeners[prop] = Animation.tweeners[prop] || [];
  4744. Animation.tweeners[prop].unshift(callback);
  4745. }
  4746. },
  4747. prefilters: [defaultPrefilter],
  4748. prefilter: function (callback, prepend) {
  4749. if (prepend) {
  4750. Animation.prefilters.unshift(callback);
  4751. } else {
  4752. Animation.prefilters.push(callback);
  4753. }
  4754. },
  4755. });
  4756. jQuery.speed = function (speed, easing, fn) {
  4757. var opt = speed && typeof speed === "object" ? jQuery.extend({}, speed) : {
  4758. complete: fn || (!fn && easing) || (isFunction(speed) && speed),
  4759. duration: speed,
  4760. easing: (fn && easing) || (easing && !isFunction(easing) && easing)
  4761. };
  4762. if (jQuery.fx.off) {
  4763. opt.duration = 0;
  4764. } else {
  4765. if (typeof opt.duration !== "number") {
  4766. if (opt.duration in jQuery.fx.speeds) {
  4767. opt.duration = jQuery.fx.speeds[opt.duration];
  4768. } else {
  4769. opt.duration = jQuery.fx.speeds._default;
  4770. }
  4771. }
  4772. }
  4773. if (opt.queue == null || opt.queue === true) {
  4774. opt.queue = "fx";
  4775. }
  4776. opt.old = opt.complete;
  4777. opt.complete = function () {
  4778. if (isFunction(opt.old)) {
  4779. opt.old.call(this);
  4780. }
  4781. if (opt.queue) {
  4782. jQuery.dequeue(this, opt.queue);
  4783. }
  4784. };
  4785. return opt;
  4786. };
  4787. jQuery.fn.extend({
  4788. fadeTo: function (speed, to, easing, callback) {
  4789. return this.filter(isHiddenWithinTree).css("opacity", 0).show().end().animate({
  4790. opacity: to
  4791. }, speed, easing, callback);
  4792. },
  4793. animate: function (prop, speed, easing, callback) {
  4794. var empty = jQuery.isEmptyObject(prop),
  4795. optall = jQuery.speed(speed, easing, callback),
  4796. doAnimation = function () {
  4797. var anim = Animation(this, jQuery.extend({}, prop), optall);
  4798. if (empty || dataPriv.get(this, "finish")) {
  4799. anim.stop(true);
  4800. }
  4801. };
  4802. doAnimation.finish = doAnimation;
  4803. return empty || optall.queue === false ? this.each(doAnimation) : this.queue(optall.queue, doAnimation);
  4804. },
  4805. stop: function (type, clearQueue, gotoEnd) {
  4806. var stopQueue = function (hooks) {
  4807. var stop = hooks.stop;
  4808. delete hooks.stop;
  4809. stop(gotoEnd);
  4810. };
  4811. if (typeof type !== "string") {
  4812. gotoEnd = clearQueue;
  4813. clearQueue = type;
  4814. type = undefined;
  4815. }
  4816. if (clearQueue) {
  4817. this.queue(type || "fx", []);
  4818. }
  4819. return this.each(function () {
  4820. var dequeue = true,
  4821. index = type != null && type + "queueHooks",
  4822. timers = jQuery.timers,
  4823. data = dataPriv.get(this);
  4824. if (index) {
  4825. if (data[index] && data[index].stop) {
  4826. stopQueue(data[index]);
  4827. }
  4828. } else {
  4829. for (index in data) {
  4830. if (data[index] && data[index].stop && rrun.test(index)) {
  4831. stopQueue(data[index]);
  4832. }
  4833. }
  4834. }
  4835. for (index = timers.length; index--;) {
  4836. if (timers[index].elem === this && (type == null || timers[index].queue === type)) {
  4837. timers[index].anim.stop(gotoEnd);
  4838. dequeue = false;
  4839. timers.splice(index, 1);
  4840. }
  4841. }
  4842. if (dequeue || !gotoEnd) {
  4843. jQuery.dequeue(this, type);
  4844. }
  4845. });
  4846. },
  4847. finish: function (type) {
  4848. if (type !== false) {
  4849. type = type || "fx";
  4850. }
  4851. return this.each(function () {
  4852. var index,
  4853. data = dataPriv.get(this),
  4854. queue = data[type + "queue"],
  4855. hooks = data[type + "queueHooks"],
  4856. timers = jQuery.timers,
  4857. length = queue ? queue.length : 0;
  4858. data.finish = true;
  4859. jQuery.queue(this, type, []);
  4860. if (hooks && hooks.stop) {
  4861. hooks.stop.call(this, true);
  4862. }
  4863. for (index = timers.length; index--;) {
  4864. if (timers[index].elem === this && timers[index].queue === type) {
  4865. timers[index].anim.stop(true);
  4866. timers.splice(index, 1);
  4867. }
  4868. }
  4869. for (index = 0; index < length; index++) {
  4870. if (queue[index] && queue[index].finish) {
  4871. queue[index].finish.call(this);
  4872. }
  4873. }
  4874. delete data.finish;
  4875. });
  4876. },
  4877. });
  4878. jQuery.each(["toggle", "show", "hide"], function (_i, name) {
  4879. var cssFn = jQuery.fn[name];
  4880. jQuery.fn[name] = function (speed, easing, callback) {
  4881. return speed == null || typeof speed === "boolean" ? cssFn.apply(this, arguments) : this.animate(genFx(name, true), speed, easing, callback);
  4882. };
  4883. });
  4884. jQuery.each({
  4885. slideDown: genFx("show"),
  4886. slideUp: genFx("hide"),
  4887. slideToggle: genFx("toggle"),
  4888. fadeIn: {
  4889. opacity: "show"
  4890. },
  4891. fadeOut: {
  4892. opacity: "hide"
  4893. },
  4894. fadeToggle: {
  4895. opacity: "toggle"
  4896. }
  4897. }, function (name, props) {
  4898. jQuery.fn[name] = function (speed, easing, callback) {
  4899. return this.animate(props, speed, easing, callback);
  4900. };
  4901. });
  4902. jQuery.timers = [];
  4903. jQuery.fx.tick = function () {
  4904. var timer,
  4905. i = 0,
  4906. timers = jQuery.timers;
  4907. fxNow = Date.now();
  4908. for (; i < timers.length; i++) {
  4909. timer = timers[i];
  4910. if (!timer() && timers[i] === timer) {
  4911. timers.splice(i--, 1);
  4912. }
  4913. }
  4914. if (!timers.length) {
  4915. jQuery.fx.stop();
  4916. }
  4917. fxNow = undefined;
  4918. };
  4919. jQuery.fx.timer = function (timer) {
  4920. jQuery.timers.push(timer);
  4921. jQuery.fx.start();
  4922. };
  4923. jQuery.fx.interval = 13;
  4924. jQuery.fx.start = function () {
  4925. if (inProgress) {
  4926. return;
  4927. }
  4928. inProgress = true;
  4929. schedule();
  4930. };
  4931. jQuery.fx.stop = function () {
  4932. inProgress = null;
  4933. };
  4934. jQuery.fx.speeds = {
  4935. slow: 600,
  4936. fast: 200,
  4937. _default: 400,
  4938. };
  4939. jQuery.fn.delay = function (time, type) {
  4940. time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
  4941. type = type || "fx";
  4942. return this.queue(type, function (next, hooks) {
  4943. var timeout = window.setTimeout(next, time);
  4944. hooks.stop = function () {
  4945. window.clearTimeout(timeout);
  4946. };
  4947. });
  4948. };
  4949. (function () {
  4950. var input = document.createElement("input"),
  4951. select = document.createElement("select"),
  4952. opt = select.appendChild(document.createElement("option"));
  4953. input.type = "checkbox";
  4954. support.checkOn = input.value !== "";
  4955. support.optSelected = opt.selected;
  4956. input = document.createElement("input");
  4957. input.value = "t";
  4958. input.type = "radio";
  4959. support.radioValue = input.value === "t";
  4960. })();
  4961. var boolHook,
  4962. attrHandle = jQuery.expr.attrHandle;
  4963. jQuery.fn.extend({
  4964. attr: function (name, value) {
  4965. return access(this, jQuery.attr, name, value, arguments.length > 1);
  4966. },
  4967. removeAttr: function (name) {
  4968. return this.each(function () {
  4969. jQuery.removeAttr(this, name);
  4970. });
  4971. },
  4972. });
  4973. jQuery.extend({
  4974. attr: function (elem, name, value) {
  4975. var ret,
  4976. hooks,
  4977. nType = elem.nodeType;
  4978. if (nType === 3 || nType === 8 || nType === 2) {
  4979. return;
  4980. }
  4981. if (typeof elem.getAttribute === "undefined") {
  4982. return jQuery.prop(elem, name, value);
  4983. }
  4984. if (nType !== 1 || !jQuery.isXMLDoc(elem)) {
  4985. hooks = jQuery.attrHooks[name.toLowerCase()] || (jQuery.expr.match.bool.test(name) ? boolHook : undefined);
  4986. }
  4987. if (value !== undefined) {
  4988. if (value === null) {
  4989. jQuery.removeAttr(elem, name);
  4990. return;
  4991. }
  4992. if (hooks && "set" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) {
  4993. return ret;
  4994. }
  4995. elem.setAttribute(name, value + "");
  4996. return value;
  4997. }
  4998. if (hooks && "get" in hooks && (ret = hooks.get(elem, name)) !== null) {
  4999. return ret;
  5000. }
  5001. ret = jQuery.find.attr(elem, name);
  5002. return ret == null ? undefined : ret;
  5003. },
  5004. attrHooks: {
  5005. type: {
  5006. set: function (elem, value) {
  5007. if (!support.radioValue && value === "radio" && nodeName(elem, "input")) {
  5008. var val = elem.value;
  5009. elem.setAttribute("type", value);
  5010. if (val) {
  5011. elem.value = val;
  5012. }
  5013. return value;
  5014. }
  5015. },
  5016. },
  5017. },
  5018. removeAttr: function (elem, value) {
  5019. var name,
  5020. i = 0,
  5021. attrNames = value && value.match(rnothtmlwhite);
  5022. if (attrNames && elem.nodeType === 1) {
  5023. while ((name = attrNames[i++])) {
  5024. elem.removeAttribute(name);
  5025. }
  5026. }
  5027. },
  5028. });
  5029. boolHook = {
  5030. set: function (elem, value, name) {
  5031. if (value === false) {
  5032. jQuery.removeAttr(elem, name);
  5033. } else {
  5034. elem.setAttribute(name, name);
  5035. }
  5036. return name;
  5037. },
  5038. };
  5039. jQuery.each(jQuery.expr.match.bool.source.match(/\w+/g), function (_i, name) {
  5040. var getter = attrHandle[name] || jQuery.find.attr;
  5041. attrHandle[name] = function (elem, name, isXML) {
  5042. var ret,
  5043. handle,
  5044. lowercaseName = name.toLowerCase();
  5045. if (!isXML) {
  5046. handle = attrHandle[lowercaseName];
  5047. attrHandle[lowercaseName] = ret;
  5048. ret = getter(elem, name, isXML) != null ? lowercaseName : null;
  5049. attrHandle[lowercaseName] = handle;
  5050. }
  5051. return ret;
  5052. };
  5053. });
  5054. var rfocusable = /^(?:input|select|textarea|button)$/i,
  5055. rclickable = /^(?:a|area)$/i;
  5056. jQuery.fn.extend({
  5057. prop: function (name, value) {
  5058. return access(this, jQuery.prop, name, value, arguments.length > 1);
  5059. },
  5060. removeProp: function (name) {
  5061. return this.each(function () {
  5062. delete this[jQuery.propFix[name] || name];
  5063. });
  5064. },
  5065. });
  5066. jQuery.extend({
  5067. prop: function (elem, name, value) {
  5068. var ret,
  5069. hooks,
  5070. nType = elem.nodeType;
  5071. if (nType === 3 || nType === 8 || nType === 2) {
  5072. return;
  5073. }
  5074. if (nType !== 1 || !jQuery.isXMLDoc(elem)) {
  5075. name = jQuery.propFix[name] || name;
  5076. hooks = jQuery.propHooks[name];
  5077. }
  5078. if (value !== undefined) {
  5079. if (hooks && "set" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) {
  5080. return ret;
  5081. }
  5082. return (elem[name] = value);
  5083. }
  5084. if (hooks && "get" in hooks && (ret = hooks.get(elem, name)) !== null) {
  5085. return ret;
  5086. }
  5087. return elem[name];
  5088. },
  5089. propHooks: {
  5090. tabIndex: {
  5091. get: function (elem) {
  5092. var tabindex = jQuery.find.attr(elem, "tabindex");
  5093. if (tabindex) {
  5094. return parseInt(tabindex, 10);
  5095. }
  5096. if (rfocusable.test(elem.nodeName) || (rclickable.test(elem.nodeName) && elem.href)) {
  5097. return 0;
  5098. }
  5099. return -1;
  5100. },
  5101. },
  5102. },
  5103. propFix: {
  5104. for: "htmlFor",
  5105. class: "className"
  5106. },
  5107. });
  5108. if (!support.optSelected) {
  5109. jQuery.propHooks.selected = {
  5110. get: function (elem) {
  5111. var parent = elem.parentNode;
  5112. if (parent && parent.parentNode) {
  5113. parent.parentNode.selectedIndex;
  5114. }
  5115. return null;
  5116. },
  5117. set: function (elem) {
  5118. var parent = elem.parentNode;
  5119. if (parent) {
  5120. parent.selectedIndex;
  5121. if (parent.parentNode) {
  5122. parent.parentNode.selectedIndex;
  5123. }
  5124. }
  5125. },
  5126. };
  5127. }
  5128. jQuery.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function () {
  5129. jQuery.propFix[this.toLowerCase()] = this;
  5130. });
  5131.  
  5132. function stripAndCollapse(value) {
  5133. var tokens = value.match(rnothtmlwhite) || [];
  5134. return tokens.join(" ");
  5135. }
  5136.  
  5137. function getClass(elem) {
  5138. return (elem.getAttribute && elem.getAttribute("class")) || "";
  5139. }
  5140.  
  5141. function classesToArray(value) {
  5142. if (Array.isArray(value)) {
  5143. return value;
  5144. }
  5145. if (typeof value === "string") {
  5146. return value.match(rnothtmlwhite) || [];
  5147. }
  5148. return [];
  5149. }
  5150. jQuery.fn.extend({
  5151. addClass: function (value) {
  5152. var classNames, cur, curValue, className, i, finalValue;
  5153. if (isFunction(value)) {
  5154. return this.each(function (j) {
  5155. jQuery(this).addClass(value.call(this, j, getClass(this)));
  5156. });
  5157. }
  5158. classNames = classesToArray(value);
  5159. if (classNames.length) {
  5160. return this.each(function () {
  5161. curValue = getClass(this);
  5162. cur = this.nodeType === 1 && " " + stripAndCollapse(curValue) + " ";
  5163. if (cur) {
  5164. for (i = 0; i < classNames.length; i++) {
  5165. className = classNames[i];
  5166. if (cur.indexOf(" " + className + " ") < 0) {
  5167. cur += className + " ";
  5168. }
  5169. }
  5170. finalValue = stripAndCollapse(cur);
  5171. if (curValue !== finalValue) {
  5172. this.setAttribute("class", finalValue);
  5173. }
  5174. }
  5175. });
  5176. }
  5177. return this;
  5178. },
  5179. removeClass: function (value) {
  5180. var classNames, cur, curValue, className, i, finalValue;
  5181. if (isFunction(value)) {
  5182. return this.each(function (j) {
  5183. jQuery(this).removeClass(value.call(this, j, getClass(this)));
  5184. });
  5185. }
  5186. if (!arguments.length) {
  5187. return this.attr("class", "");
  5188. }
  5189. classNames = classesToArray(value);
  5190. if (classNames.length) {
  5191. return this.each(function () {
  5192. curValue = getClass(this);
  5193. cur = this.nodeType === 1 && " " + stripAndCollapse(curValue) + " ";
  5194. if (cur) {
  5195. for (i = 0; i < classNames.length; i++) {
  5196. className = classNames[i];
  5197. while (cur.indexOf(" " + className + " ") > -1) {
  5198. cur = cur.replace(" " + className + " ", " ");
  5199. }
  5200. }
  5201. finalValue = stripAndCollapse(cur);
  5202. if (curValue !== finalValue) {
  5203. this.setAttribute("class", finalValue);
  5204. }
  5205. }
  5206. });
  5207. }
  5208. return this;
  5209. },
  5210. toggleClass: function (value, stateVal) {
  5211. var classNames,
  5212. className,
  5213. i,
  5214. self,
  5215. type = typeof value,
  5216. isValidValue = type === "string" || Array.isArray(value);
  5217. if (isFunction(value)) {
  5218. return this.each(function (i) {
  5219. jQuery(this).toggleClass(value.call(this, i, getClass(this), stateVal), stateVal);
  5220. });
  5221. }
  5222. if (typeof stateVal === "boolean" && isValidValue) {
  5223. return stateVal ? this.addClass(value) : this.removeClass(value);
  5224. }
  5225. classNames = classesToArray(value);
  5226. return this.each(function () {
  5227. if (isValidValue) {
  5228. self = jQuery(this);
  5229. for (i = 0; i < classNames.length; i++) {
  5230. className = classNames[i];
  5231. if (self.hasClass(className)) {
  5232. self.removeClass(className);
  5233. } else {
  5234. self.addClass(className);
  5235. }
  5236. }
  5237. } else if (value === undefined || type === "boolean") {
  5238. className = getClass(this);
  5239. if (className) {
  5240. dataPriv.set(this, "__className__", className);
  5241. }
  5242. if (this.setAttribute) {
  5243. this.setAttribute("class", className || value === false ? "" : dataPriv.get(this, "__className__") || "");
  5244. }
  5245. }
  5246. });
  5247. },
  5248. hasClass: function (selector) {
  5249. var className,
  5250. elem,
  5251. i = 0;
  5252. className = " " + selector + " ";
  5253. while ((elem = this[i++])) {
  5254. if (elem.nodeType === 1 && (" " + stripAndCollapse(getClass(elem)) + " ").indexOf(className) > -1) {
  5255. return true;
  5256. }
  5257. }
  5258. return false;
  5259. },
  5260. });
  5261. var rreturn = /\r/g;
  5262. jQuery.fn.extend({
  5263. val: function (value) {
  5264. var hooks,
  5265. ret,
  5266. valueIsFunction,
  5267. elem = this[0];
  5268. if (!arguments.length) {
  5269. if (elem) {
  5270. hooks = jQuery.valHooks[elem.type] || jQuery.valHooks[elem.nodeName.toLowerCase()];
  5271. if (hooks && "get" in hooks && (ret = hooks.get(elem, "value")) !== undefined) {
  5272. return ret;
  5273. }
  5274. ret = elem.value;
  5275. if (typeof ret === "string") {
  5276. return ret.replace(rreturn, "");
  5277. }
  5278. return ret == null ? "" : ret;
  5279. }
  5280. return;
  5281. }
  5282. valueIsFunction = isFunction(value);
  5283. return this.each(function (i) {
  5284. var val;
  5285. if (this.nodeType !== 1) {
  5286. return;
  5287. }
  5288. if (valueIsFunction) {
  5289. val = value.call(this, i, jQuery(this).val());
  5290. } else {
  5291. val = value;
  5292. }
  5293. if (val == null) {
  5294. val = "";
  5295. } else if (typeof val === "number") {
  5296. val += "";
  5297. } else if (Array.isArray(val)) {
  5298. val = jQuery.map(val, function (value) {
  5299. return value == null ? "" : value + "";
  5300. });
  5301. }
  5302. hooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()];
  5303. if (!hooks || !("set" in hooks) || hooks.set(this, val, "value") === undefined) {
  5304. this.value = val;
  5305. }
  5306. });
  5307. },
  5308. });
  5309. jQuery.extend({
  5310. valHooks: {
  5311. option: {
  5312. get: function (elem) {
  5313. var val = jQuery.find.attr(elem, "value");
  5314. return val != null ? val : stripAndCollapse(jQuery.text(elem));
  5315. },
  5316. },
  5317. select: {
  5318. get: function (elem) {
  5319. var value,
  5320. option,
  5321. i,
  5322. options = elem.options,
  5323. index = elem.selectedIndex,
  5324. one = elem.type === "select-one",
  5325. values = one ? null : [],
  5326. max = one ? index + 1 : options.length;
  5327. if (index < 0) {
  5328. i = max;
  5329. } else {
  5330. i = one ? index : 0;
  5331. }
  5332. for (; i < max; i++) {
  5333. option = options[i];
  5334. if ((option.selected || i === index) && !option.disabled && (!option.parentNode.disabled || !nodeName(option.parentNode, "optgroup"))) {
  5335. value = jQuery(option).val();
  5336. if (one) {
  5337. return value;
  5338. }
  5339. values.push(value);
  5340. }
  5341. }
  5342. return values;
  5343. },
  5344. set: function (elem, value) {
  5345. var optionSet,
  5346. option,
  5347. options = elem.options,
  5348. values = jQuery.makeArray(value),
  5349. i = options.length;
  5350. while (i--) {
  5351. option = options[i];
  5352. if ((option.selected = jQuery.inArray(jQuery.valHooks.option.get(option), values) > -1)) {
  5353. optionSet = true;
  5354. }
  5355. }
  5356. if (!optionSet) {
  5357. elem.selectedIndex = -1;
  5358. }
  5359. return values;
  5360. },
  5361. },
  5362. },
  5363. });
  5364. jQuery.each(["radio", "checkbox"], function () {
  5365. jQuery.valHooks[this] = {
  5366. set: function (elem, value) {
  5367. if (Array.isArray(value)) {
  5368. return (elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1);
  5369. }
  5370. },
  5371. };
  5372. if (!support.checkOn) {
  5373. jQuery.valHooks[this].get = function (elem) {
  5374. return elem.getAttribute("value") === null ? "on" : elem.value;
  5375. };
  5376. }
  5377. });
  5378. support.focusin = "onfocusin" in window;
  5379. var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
  5380. stopPropagationCallback = function (e) {
  5381. e.stopPropagation();
  5382. };
  5383. jQuery.extend(jQuery.event, {
  5384. trigger: function (event, data, elem, onlyHandlers) {
  5385. var i,
  5386. cur,
  5387. tmp,
  5388. bubbleType,
  5389. ontype,
  5390. handle,
  5391. special,
  5392. lastElement,
  5393. eventPath = [elem || document],
  5394. type = hasOwn.call(event, "type") ? event.type : event,
  5395. namespaces = hasOwn.call(event, "namespace") ? event.namespace.split(".") : [];
  5396. cur = lastElement = tmp = elem = elem || document;
  5397. if (elem.nodeType === 3 || elem.nodeType === 8) {
  5398. return;
  5399. }
  5400. if (rfocusMorph.test(type + jQuery.event.triggered)) {
  5401. return;
  5402. }
  5403. if (type.indexOf(".") > -1) {
  5404. namespaces = type.split(".");
  5405. type = namespaces.shift();
  5406. namespaces.sort();
  5407. }
  5408. ontype = type.indexOf(":") < 0 && "on" + type;
  5409. event = event[jQuery.expando] ? event : new jQuery.Event(type, typeof event === "object" && event);
  5410. event.isTrigger = onlyHandlers ? 2 : 3;
  5411. event.namespace = namespaces.join(".");
  5412. event.rnamespace = event.namespace ? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)") : null;
  5413. event.result = undefined;
  5414. if (!event.target) {
  5415. event.target = elem;
  5416. }
  5417. data = data == null ? [event] : jQuery.makeArray(data, [event]);
  5418. special = jQuery.event.special[type] || {};
  5419. if (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {
  5420. return;
  5421. }
  5422. if (!onlyHandlers && !special.noBubble && !isWindow(elem)) {
  5423. bubbleType = special.delegateType || type;
  5424. if (!rfocusMorph.test(bubbleType + type)) {
  5425. cur = cur.parentNode;
  5426. }
  5427. for (; cur; cur = cur.parentNode) {
  5428. eventPath.push(cur);
  5429. tmp = cur;
  5430. }
  5431. if (tmp === (elem.ownerDocument || document)) {
  5432. eventPath.push(tmp.defaultView || tmp.parentWindow || window);
  5433. }
  5434. }
  5435. i = 0;
  5436. while ((cur = eventPath[i++]) && !event.isPropagationStopped()) {
  5437. lastElement = cur;
  5438. event.type = i > 1 ? bubbleType : special.bindType || type;
  5439. handle = (dataPriv.get(cur, "events") || Object.create(null))[event.type] && dataPriv.get(cur, "handle");
  5440. if (handle) {
  5441. handle.apply(cur, data);
  5442. }
  5443. handle = ontype && cur[ontype];
  5444. if (handle && handle.apply && acceptData(cur)) {
  5445. event.result = handle.apply(cur, data);
  5446. if (event.result === false) {
  5447. event.preventDefault();
  5448. }
  5449. }
  5450. }
  5451. event.type = type;
  5452. if (!onlyHandlers && !event.isDefaultPrevented()) {
  5453. if ((!special._default || special._default.apply(eventPath.pop(), data) === false) && acceptData(elem)) {
  5454. if (ontype && isFunction(elem[type]) && !isWindow(elem)) {
  5455. tmp = elem[ontype];
  5456. if (tmp) {
  5457. elem[ontype] = null;
  5458. }
  5459. jQuery.event.triggered = type;
  5460. if (event.isPropagationStopped()) {
  5461. lastElement.addEventListener(type, stopPropagationCallback);
  5462. }
  5463. elem[type]();
  5464. if (event.isPropagationStopped()) {
  5465. lastElement.removeEventListener(type, stopPropagationCallback);
  5466. }
  5467. jQuery.event.triggered = undefined;
  5468. if (tmp) {
  5469. elem[ontype] = tmp;
  5470. }
  5471. }
  5472. }
  5473. }
  5474. return event.result;
  5475. },
  5476. simulate: function (type, elem, event) {
  5477. var e = jQuery.extend(new jQuery.Event(), event, {
  5478. type: type,
  5479. isSimulated: true
  5480. });
  5481. jQuery.event.trigger(e, null, elem);
  5482. },
  5483. });
  5484. jQuery.fn.extend({
  5485. trigger: function (type, data) {
  5486. return this.each(function () {
  5487. jQuery.event.trigger(type, data, this);
  5488. });
  5489. },
  5490. triggerHandler: function (type, data) {
  5491. var elem = this[0];
  5492. if (elem) {
  5493. return jQuery.event.trigger(type, data, elem, true);
  5494. }
  5495. },
  5496. });
  5497. if (!support.focusin) {
  5498. jQuery.each({
  5499. focus: "focusin",
  5500. blur: "focusout"
  5501. }, function (orig, fix) {
  5502. var handler = function (event) {
  5503. jQuery.event.simulate(fix, event.target, jQuery.event.fix(event));
  5504. };
  5505. jQuery.event.special[fix] = {
  5506. setup: function () {
  5507. var doc = this.ownerDocument || this.document || this,
  5508. attaches = dataPriv.access(doc, fix);
  5509. if (!attaches) {
  5510. doc.addEventListener(orig, handler, true);
  5511. }
  5512. dataPriv.access(doc, fix, (attaches || 0) + 1);
  5513. },
  5514. teardown: function () {
  5515. var doc = this.ownerDocument || this.document || this,
  5516. attaches = dataPriv.access(doc, fix) - 1;
  5517. if (!attaches) {
  5518. doc.removeEventListener(orig, handler, true);
  5519. dataPriv.remove(doc, fix);
  5520. } else {
  5521. dataPriv.access(doc, fix, attaches);
  5522. }
  5523. },
  5524. };
  5525. });
  5526. }
  5527. var location = window.location;
  5528. var nonce = {
  5529. guid: Date.now()
  5530. };
  5531. var rquery = /\?/;
  5532. jQuery.parseXML = function (data) {
  5533. var xml, parserErrorElem;
  5534. if (!data || typeof data !== "string") {
  5535. return null;
  5536. }
  5537. try {
  5538. xml = new window.DOMParser().parseFromString(data, "text/xml");
  5539. } catch (e) { }
  5540. parserErrorElem = xml && xml.getElementsByTagName("parsererror")[0];
  5541. if (!xml || parserErrorElem) {
  5542. jQuery.error(
  5543. "Invalid XML: " +
  5544. (parserErrorElem ?
  5545. jQuery
  5546. .map(parserErrorElem.childNodes, function (el) {
  5547. return el.textContent;
  5548. })
  5549. .join("\n") :
  5550. data)
  5551. );
  5552. }
  5553. return xml;
  5554. };
  5555. var rbracket = /\[\]$/,
  5556. rCRLF = /\r?\n/g,
  5557. rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
  5558. rsubmittable = /^(?:input|select|textarea|keygen)/i;
  5559.  
  5560. function buildParams(prefix, obj, traditional, add) {
  5561. var name;
  5562. if (Array.isArray(obj)) {
  5563. jQuery.each(obj, function (i, v) {
  5564. if (traditional || rbracket.test(prefix)) {
  5565. add(prefix, v);
  5566. } else {
  5567. buildParams(prefix + "[" + (typeof v === "object" && v != null ? i : "") + "]", v, traditional, add);
  5568. }
  5569. });
  5570. } else if (!traditional && toType(obj) === "object") {
  5571. for (name in obj) {
  5572. buildParams(prefix + "[" + name + "]", obj[name], traditional, add);
  5573. }
  5574. } else {
  5575. add(prefix, obj);
  5576. }
  5577. }
  5578. jQuery.param = function (a, traditional) {
  5579. var prefix,
  5580. s = [],
  5581. add = function (key, valueOrFunction) {
  5582. var value = isFunction(valueOrFunction) ? valueOrFunction() : valueOrFunction;
  5583. s[s.length] = encodeURIComponent(key) + "=" + encodeURIComponent(value == null ? "" : value);
  5584. };
  5585. if (a == null) {
  5586. return "";
  5587. }
  5588. if (Array.isArray(a) || (a.jquery && !jQuery.isPlainObject(a))) {
  5589. jQuery.each(a, function () {
  5590. add(this.name, this.value);
  5591. });
  5592. } else {
  5593. for (prefix in a) {
  5594. buildParams(prefix, a[prefix], traditional, add);
  5595. }
  5596. }
  5597. return s.join("&");
  5598. };
  5599. jQuery.fn.extend({
  5600. serialize: function () {
  5601. return jQuery.param(this.serializeArray());
  5602. },
  5603. serializeArray: function () {
  5604. return this.map(function () {
  5605. var elements = jQuery.prop(this, "elements");
  5606. return elements ? jQuery.makeArray(elements) : this;
  5607. })
  5608. .filter(function () {
  5609. var type = this.type;
  5610. return this.name && !jQuery(this).is(":disabled") && rsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) && (this.checked || !rcheckableType.test(type));
  5611. })
  5612. .map(function (_i, elem) {
  5613. var val = jQuery(this).val();
  5614. if (val == null) {
  5615. return null;
  5616. }
  5617. if (Array.isArray(val)) {
  5618. return jQuery.map(val, function (val) {
  5619. return {
  5620. name: elem.name,
  5621. value: val.replace(rCRLF, "\r\n")
  5622. };
  5623. });
  5624. }
  5625. return {
  5626. name: elem.name,
  5627. value: val.replace(rCRLF, "\r\n")
  5628. };
  5629. })
  5630. .get();
  5631. },
  5632. });
  5633. var r20 = /%20/g,
  5634. rhash = /#.*$/,
  5635. rantiCache = /([?&])_=[^&]*/,
  5636. rheaders = /^(.*?):[ \t]*([^\r\n]*)$/gm,
  5637. rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
  5638. rnoContent = /^(?:GET|HEAD)$/,
  5639. rprotocol = /^\/\//,
  5640. prefilters = {},
  5641. transports = {},
  5642. allTypes = "*/".concat("*"),
  5643. originAnchor = document.createElement("a");
  5644. originAnchor.href = location.href;
  5645.  
  5646. function addToPrefiltersOrTransports(structure) {
  5647. return function (dataTypeExpression, func) {
  5648. if (typeof dataTypeExpression !== "string") {
  5649. func = dataTypeExpression;
  5650. dataTypeExpression = "*";
  5651. }
  5652. var dataType,
  5653. i = 0,
  5654. dataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || [];
  5655. if (isFunction(func)) {
  5656. while ((dataType = dataTypes[i++])) {
  5657. if (dataType[0] === "+") {
  5658. dataType = dataType.slice(1) || "*";
  5659. (structure[dataType] = structure[dataType] || []).unshift(func);
  5660. } else {
  5661. (structure[dataType] = structure[dataType] || []).push(func);
  5662. }
  5663. }
  5664. }
  5665. };
  5666. }
  5667.  
  5668. function inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {
  5669. var inspected = {},
  5670. seekingTransport = structure === transports;
  5671.  
  5672. function inspect(dataType) {
  5673. var selected;
  5674. inspected[dataType] = true;
  5675. jQuery.each(structure[dataType] || [], function (_, prefilterOrFactory) {
  5676. var dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);
  5677. if (typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[dataTypeOrTransport]) {
  5678. options.dataTypes.unshift(dataTypeOrTransport);
  5679. inspect(dataTypeOrTransport);
  5680. return false;
  5681. } else if (seekingTransport) {
  5682. return !(selected = dataTypeOrTransport);
  5683. }
  5684. });
  5685. return selected;
  5686. }
  5687. return inspect(options.dataTypes[0]) || (!inspected["*"] && inspect("*"));
  5688. }
  5689.  
  5690. function ajaxExtend(target, src) {
  5691. var key,
  5692. deep,
  5693. flatOptions = jQuery.ajaxSettings.flatOptions || {};
  5694. for (key in src) {
  5695. if (src[key] !== undefined) {
  5696. (flatOptions[key] ? target : deep || (deep = {}))[key] = src[key];
  5697. }
  5698. }
  5699. if (deep) {
  5700. jQuery.extend(true, target, deep);
  5701. }
  5702. return target;
  5703. }
  5704.  
  5705. function ajaxHandleResponses(s, jqXHR, responses) {
  5706. var ct,
  5707. type,
  5708. finalDataType,
  5709. firstDataType,
  5710. contents = s.contents,
  5711. dataTypes = s.dataTypes;
  5712. while (dataTypes[0] === "*") {
  5713. dataTypes.shift();
  5714. if (ct === undefined) {
  5715. ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
  5716. }
  5717. }
  5718. if (ct) {
  5719. for (type in contents) {
  5720. if (contents[type] && contents[type].test(ct)) {
  5721. dataTypes.unshift(type);
  5722. break;
  5723. }
  5724. }
  5725. }
  5726. if (dataTypes[0] in responses) {
  5727. finalDataType = dataTypes[0];
  5728. } else {
  5729. for (type in responses) {
  5730. if (!dataTypes[0] || s.converters[type + " " + dataTypes[0]]) {
  5731. finalDataType = type;
  5732. break;
  5733. }
  5734. if (!firstDataType) {
  5735. firstDataType = type;
  5736. }
  5737. }
  5738. finalDataType = finalDataType || firstDataType;
  5739. }
  5740. if (finalDataType) {
  5741. if (finalDataType !== dataTypes[0]) {
  5742. dataTypes.unshift(finalDataType);
  5743. }
  5744. return responses[finalDataType];
  5745. }
  5746. }
  5747.  
  5748. function ajaxConvert(s, response, jqXHR, isSuccess) {
  5749. var conv2,
  5750. current,
  5751. conv,
  5752. tmp,
  5753. prev,
  5754. converters = {},
  5755. dataTypes = s.dataTypes.slice();
  5756. if (dataTypes[1]) {
  5757. for (conv in s.converters) {
  5758. converters[conv.toLowerCase()] = s.converters[conv];
  5759. }
  5760. }
  5761. current = dataTypes.shift();
  5762. while (current) {
  5763. if (s.responseFields[current]) {
  5764. jqXHR[s.responseFields[current]] = response;
  5765. }
  5766. if (!prev && isSuccess && s.dataFilter) {
  5767. response = s.dataFilter(response, s.dataType);
  5768. }
  5769. prev = current;
  5770. current = dataTypes.shift();
  5771. if (current) {
  5772. if (current === "*") {
  5773. current = prev;
  5774. } else if (prev !== "*" && prev !== current) {
  5775. conv = converters[prev + " " + current] || converters["* " + current];
  5776. if (!conv) {
  5777. for (conv2 in converters) {
  5778. tmp = conv2.split(" ");
  5779. if (tmp[1] === current) {
  5780. conv = converters[prev + " " + tmp[0]] || converters["* " + tmp[0]];
  5781. if (conv) {
  5782. if (conv === true) {
  5783. conv = converters[conv2];
  5784. } else if (converters[conv2] !== true) {
  5785. current = tmp[0];
  5786. dataTypes.unshift(tmp[1]);
  5787. }
  5788. break;
  5789. }
  5790. }
  5791. }
  5792. }
  5793. if (conv !== true) {
  5794. if (conv && s.throws) {
  5795. response = conv(response);
  5796. } else {
  5797. try {
  5798. response = conv(response);
  5799. } catch (e) {
  5800. return {
  5801. state: "parsererror",
  5802. error: conv ? e : "No conversion from " + prev + " to " + current
  5803. };
  5804. }
  5805. }
  5806. }
  5807. }
  5808. }
  5809. }
  5810. return {
  5811. state: "success",
  5812. data: response
  5813. };
  5814. }
  5815. jQuery.extend({
  5816. active: 0,
  5817. lastModified: {},
  5818. etag: {},
  5819. ajaxSettings: {
  5820. url: location.href,
  5821. type: "GET",
  5822. isLocal: rlocalProtocol.test(location.protocol),
  5823. global: true,
  5824. processData: true,
  5825. async: true,
  5826. contentType: "application/x-www-form-urlencoded; charset=UTF-8",
  5827. accepts: {
  5828. "*": allTypes,
  5829. text: "text/plain",
  5830. html: "text/html",
  5831. xml: "application/xml, text/xml",
  5832. json: "application/json, text/javascript"
  5833. },
  5834. contents: {
  5835. xml: /\bxml\b/,
  5836. html: /\bhtml/,
  5837. json: /\bjson\b/
  5838. },
  5839. responseFields: {
  5840. xml: "responseXML",
  5841. text: "responseText",
  5842. json: "responseJSON"
  5843. },
  5844. converters: {
  5845. "* text": String,
  5846. "text html": true,
  5847. "text json": JSON.parse,
  5848. "text xml": jQuery.parseXML,
  5849. },
  5850. flatOptions: {
  5851. url: true,
  5852. context: true
  5853. },
  5854. },
  5855. ajaxSetup: function (target, settings) {
  5856. return settings ? ajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) : ajaxExtend(jQuery.ajaxSettings, target);
  5857. },
  5858. ajaxPrefilter: addToPrefiltersOrTransports(prefilters),
  5859. ajaxTransport: addToPrefiltersOrTransports(transports),
  5860. ajax: function (url, options) {
  5861. if (typeof url === "object") {
  5862. options = url;
  5863. url = undefined;
  5864. }
  5865. options = options || {};
  5866. var transport,
  5867. cacheURL,
  5868. responseHeadersString,
  5869. responseHeaders,
  5870. timeoutTimer,
  5871. urlAnchor,
  5872. completed,
  5873. fireGlobals,
  5874. i,
  5875. uncached,
  5876. s = jQuery.ajaxSetup({}, options),
  5877. callbackContext = s.context || s,
  5878. globalEventContext = s.context && (callbackContext.nodeType || callbackContext.jquery) ? jQuery(callbackContext) : jQuery.event,
  5879. deferred = jQuery.Deferred(),
  5880. completeDeferred = jQuery.Callbacks("once memory"),
  5881. statusCode = s.statusCode || {},
  5882. requestHeaders = {},
  5883. requestHeadersNames = {},
  5884. strAbort = "canceled",
  5885. jqXHR = {
  5886. readyState: 0,
  5887. getResponseHeader: function (key) {
  5888. var match;
  5889. if (completed) {
  5890. if (!responseHeaders) {
  5891. responseHeaders = {};
  5892. while ((match = rheaders.exec(responseHeadersString))) {
  5893. responseHeaders[match[1].toLowerCase() + " "] = (responseHeaders[match[1].toLowerCase() + " "] || []).concat(match[2]);
  5894. }
  5895. }
  5896. match = responseHeaders[key.toLowerCase() + " "];
  5897. }
  5898. return match == null ? null : match.join(", ");
  5899. },
  5900. getAllResponseHeaders: function () {
  5901. return completed ? responseHeadersString : null;
  5902. },
  5903. setRequestHeader: function (name, value) {
  5904. if (completed == null) {
  5905. name = requestHeadersNames[name.toLowerCase()] = requestHeadersNames[name.toLowerCase()] || name;
  5906. requestHeaders[name] = value;
  5907. }
  5908. return this;
  5909. },
  5910. overrideMimeType: function (type) {
  5911. if (completed == null) {
  5912. s.mimeType = type;
  5913. }
  5914. return this;
  5915. },
  5916. statusCode: function (map) {
  5917. var code;
  5918. if (map) {
  5919. if (completed) {
  5920. jqXHR.always(map[jqXHR.status]);
  5921. } else {
  5922. for (code in map) {
  5923. statusCode[code] = [statusCode[code], map[code]];
  5924. }
  5925. }
  5926. }
  5927. return this;
  5928. },
  5929. abort: function (statusText) {
  5930. var finalText = statusText || strAbort;
  5931. if (transport) {
  5932. transport.abort(finalText);
  5933. }
  5934. done(0, finalText);
  5935. return this;
  5936. },
  5937. };
  5938. deferred.promise(jqXHR);
  5939. s.url = ((url || s.url || location.href) + "").replace(rprotocol, location.protocol + "//");
  5940. s.type = options.method || options.type || s.method || s.type;
  5941. s.dataTypes = (s.dataType || "*").toLowerCase().match(rnothtmlwhite) || [""];
  5942. if (s.crossDomain == null) {
  5943. urlAnchor = document.createElement("a");
  5944. try {
  5945. urlAnchor.href = s.url;
  5946. urlAnchor.href = urlAnchor.href;
  5947. s.crossDomain = originAnchor.protocol + " urlAnchor.protocol + ";
  5948. } catch (e) {
  5949. s.crossDomain = true;
  5950. }
  5951. }
  5952. if (s.data && s.processData && typeof s.data !== "string") {
  5953. s.data = jQuery.param(s.data, s.traditional);
  5954. }
  5955. inspectPrefiltersOrTransports(prefilters, s, options, jqXHR);
  5956. if (completed) {
  5957. return jqXHR;
  5958. }
  5959. fireGlobals = jQuery.event && s.global;
  5960. if (fireGlobals && jQuery.active++ === 0) {
  5961. jQuery.event.trigger("ajaxStart");
  5962. }
  5963. s.type = s.type.toUpperCase();
  5964. s.hasContent = !rnoContent.test(s.type);
  5965. cacheURL = s.url.replace(rhash, "");
  5966. if (!s.hasContent) {
  5967. uncached = s.url.slice(cacheURL.length);
  5968. if (s.data && (s.processData || typeof s.data === "string")) {
  5969. cacheURL += (rquery.test(cacheURL) ? "&" : "?") + s.data;
  5970. delete s.data;
  5971. }
  5972. if (s.cache === false) {
  5973. cacheURL = cacheURL.replace(rantiCache, "$1");
  5974. uncached = (rquery.test(cacheURL) ? "&" : "?") + "_=" + nonce.guid++ + uncached;
  5975. }
  5976. s.url = cacheURL + uncached;
  5977. } else if (s.data && s.processData && (s.contentType || "").indexOf("application/x-www-form-urlencoded") === 0) {
  5978. s.data = s.data.replace(r20, "+");
  5979. }
  5980. if (s.ifModified) {
  5981. if (jQuery.lastModified[cacheURL]) {
  5982. jqXHR.setRequestHeader("If-Modified-Since", jQuery.lastModified[cacheURL]);
  5983. }
  5984. if (jQuery.etag[cacheURL]) {
  5985. jqXHR.setRequestHeader("If-None-Match", jQuery.etag[cacheURL]);
  5986. }
  5987. }
  5988. if ((s.data && s.hasContent && s.contentType !== false) || options.contentType) {
  5989. jqXHR.setRequestHeader("Content-Type", s.contentType);
  5990. }
  5991. 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["*"]);
  5992. for (i in s.headers) {
  5993. jqXHR.setRequestHeader(i, s.headers[i]);
  5994. }
  5995. if (s.beforeSend && (s.beforeSend.call(callbackContext, jqXHR, s) === false || completed)) {
  5996. return jqXHR.abort();
  5997. }
  5998. strAbort = "abort";
  5999. completeDeferred.add(s.complete);
  6000. jqXHR.done(s.success);
  6001. jqXHR.fail(s.error);
  6002. transport = inspectPrefiltersOrTransports(transports, s, options, jqXHR);
  6003. if (!transport) {
  6004. done(-1, "No Transport");
  6005. } else {
  6006. jqXHR.readyState = 1;
  6007. if (fireGlobals) {
  6008. globalEventContext.trigger("ajaxSend", [jqXHR, s]);
  6009. }
  6010. if (completed) {
  6011. return jqXHR;
  6012. }
  6013. if (s.async && s.timeout > 0) {
  6014. timeoutTimer = window.setTimeout(function () {
  6015. jqXHR.abort("timeout");
  6016. }, s.timeout);
  6017. }
  6018. try {
  6019. completed = false;
  6020. transport.send(requestHeaders, done);
  6021. } catch (e) {
  6022. if (completed) {
  6023. throw e;
  6024. }
  6025. done(-1, e);
  6026. }
  6027. }
  6028.  
  6029. function done(status, nativeStatusText, responses, headers) {
  6030. var isSuccess,
  6031. success,
  6032. error,
  6033. response,
  6034. modified,
  6035. statusText = nativeStatusText;
  6036. if (completed) {
  6037. return;
  6038. }
  6039. completed = true;
  6040. if (timeoutTimer) {
  6041. window.clearTimeout(timeoutTimer);
  6042. }
  6043. transport = undefined;
  6044. responseHeadersString = headers || "";
  6045. jqXHR.readyState = status > 0 ? 4 : 0;
  6046. isSuccess = (status >= 200 && status < 300) || status === 304;
  6047. if (responses) {
  6048. response = ajaxHandleResponses(s, jqXHR, responses);
  6049. }
  6050. if (!isSuccess && jQuery.inArray("script", s.dataTypes) > -1 && jQuery.inArray("json", s.dataTypes) < 0) {
  6051. s.converters["text script"] = function () { };
  6052. }
  6053. response = ajaxConvert(s, response, jqXHR, isSuccess);
  6054. if (isSuccess) {
  6055. if (s.ifModified) {
  6056. modified = jqXHR.getResponseHeader("Last-Modified");
  6057. if (modified) {
  6058. jQuery.lastModified[cacheURL] = modified;
  6059. }
  6060. modified = jqXHR.getResponseHeader("etag");
  6061. if (modified) {
  6062. jQuery.etag[cacheURL] = modified;
  6063. }
  6064. }
  6065. if (status === 204 || s.type === "HEAD") {
  6066. statusText = "nocontent";
  6067. } else if (status === 304) {
  6068. statusText = "notmodified";
  6069. } else {
  6070. statusText = response.state;
  6071. success = response.data;
  6072. error = response.error;
  6073. isSuccess = !error;
  6074. }
  6075. } else {
  6076. error = statusText;
  6077. if (status || !statusText) {
  6078. statusText = "error";
  6079. if (status < 0) {
  6080. status = 0;
  6081. }
  6082. }
  6083. }
  6084. jqXHR.status = status;
  6085. jqXHR.statusText = (nativeStatusText || statusText) + "";
  6086. if (isSuccess) {
  6087. deferred.resolveWith(callbackContext, [success, statusText, jqXHR]);
  6088. } else {
  6089. deferred.rejectWith(callbackContext, [jqXHR, statusText, error]);
  6090. }
  6091. jqXHR.statusCode(statusCode);
  6092. statusCode = undefined;
  6093. if (fireGlobals) {
  6094. globalEventContext.trigger(isSuccess ? "ajaxSuccess" : "ajaxError", [jqXHR, s, isSuccess ? success : error]);
  6095. }
  6096. completeDeferred.fireWith(callbackContext, [jqXHR, statusText]);
  6097. if (fireGlobals) {
  6098. globalEventContext.trigger("ajaxComplete", [jqXHR, s]);
  6099. if (!--jQuery.active) {
  6100. jQuery.event.trigger("ajaxStop");
  6101. }
  6102. }
  6103. }
  6104. return jqXHR;
  6105. },
  6106. getJSON: function (url, data, callback) {
  6107. return jQuery.get(url, data, callback, "json");
  6108. },
  6109. getScript: function (url, callback) {
  6110. return jQuery.get(url, undefined, callback, "script");
  6111. },
  6112. });
  6113. jQuery.each(["get", "post"], function (_i, method) {
  6114. jQuery[method] = function (url, data, callback, type) {
  6115. if (isFunction(data)) {
  6116. type = type || callback;
  6117. callback = data;
  6118. data = undefined;
  6119. }
  6120. return jQuery.ajax(jQuery.extend({
  6121. url: url,
  6122. type: method,
  6123. dataType: type,
  6124. data: data,
  6125. success: callback
  6126. }, jQuery.isPlainObject(url) && url));
  6127. };
  6128. });
  6129. jQuery.ajaxPrefilter(function (s) {
  6130. var i;
  6131. for (i in s.headers) {
  6132. if (i.toLowerCase() === "content-type") {
  6133. s.contentType = s.headers[i] || "";
  6134. }
  6135. }
  6136. });
  6137. jQuery._evalUrl = function (url, options, doc) {
  6138. return jQuery.ajax({
  6139. url: url,
  6140. type: "GET",
  6141. dataType: "script",
  6142. cache: true,
  6143. async: false,
  6144. global: false,
  6145. converters: {
  6146. "text script": function () { }
  6147. },
  6148. dataFilter: function (response) {
  6149. jQuery.globalEval(response, options, doc);
  6150. },
  6151. });
  6152. };
  6153. jQuery.fn.extend({
  6154. wrapAll: function (html) {
  6155. var wrap;
  6156. if (this[0]) {
  6157. if (isFunction(html)) {
  6158. html = html.call(this[0]);
  6159. }
  6160. wrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);
  6161. if (this[0].parentNode) {
  6162. wrap.insertBefore(this[0]);
  6163. }
  6164. wrap.map(function () {
  6165. var elem = this;
  6166. while (elem.firstElementChild) {
  6167. elem = elem.firstElementChild;
  6168. }
  6169. return elem;
  6170. }).append(this);
  6171. }
  6172. return this;
  6173. },
  6174. wrapInner: function (html) {
  6175. if (isFunction(html)) {
  6176. return this.each(function (i) {
  6177. jQuery(this).wrapInner(html.call(this, i));
  6178. });
  6179. }
  6180. return this.each(function () {
  6181. var self = jQuery(this),
  6182. contents = self.contents();
  6183. if (contents.length) {
  6184. contents.wrapAll(html);
  6185. } else {
  6186. self.append(html);
  6187. }
  6188. });
  6189. },
  6190. wrap: function (html) {
  6191. var htmlIsFunction = isFunction(html);
  6192. return this.each(function (i) {
  6193. jQuery(this).wrapAll(htmlIsFunction ? html.call(this, i) : html);
  6194. });
  6195. },
  6196. unwrap: function (selector) {
  6197. this.parent(selector)
  6198. .not("body")
  6199. .each(function () {
  6200. jQuery(this).replaceWith(this.childNodes);
  6201. });
  6202. return this;
  6203. },
  6204. });
  6205. jQuery.expr.pseudos.hidden = function (elem) {
  6206. return !jQuery.expr.pseudos.visible(elem);
  6207. };
  6208. jQuery.expr.pseudos.visible = function (elem) {
  6209. return !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);
  6210. };
  6211. jQuery.ajaxSettings.xhr = function () {
  6212. try {
  6213. return new window.XMLHttpRequest();
  6214. } catch (e) { }
  6215. };
  6216. var xhrSuccessStatus = {
  6217. 0: 200,
  6218. 1223: 204,
  6219. },
  6220. xhrSupported = jQuery.ajaxSettings.xhr();
  6221. support.cors = !!xhrSupported && "withCredentials" in xhrSupported;
  6222. support.ajax = xhrSupported = !!xhrSupported;
  6223. jQuery.ajaxTransport(function (options) {
  6224. var callback, errorCallback;
  6225. if (support.cors || (xhrSupported && !options.crossDomain)) {
  6226. return {
  6227. send: function (headers, complete) {
  6228. var i,
  6229. xhr = options.xhr();
  6230. xhr.open(options.type, options.url, options.async, options.username, options.password);
  6231. if (options.xhrFields) {
  6232. for (i in options.xhrFields) {
  6233. xhr[i] = options.xhrFields[i];
  6234. }
  6235. }
  6236. if (options.mimeType && xhr.overrideMimeType) {
  6237. xhr.overrideMimeType(options.mimeType);
  6238. }
  6239. if (!options.crossDomain && !headers["X-Requested-With"]) {
  6240. headers["X-Requested-With"] = "XMLHttpRequest";
  6241. }
  6242. for (i in headers) {
  6243. xhr.setRequestHeader(i, headers[i]);
  6244. }
  6245. callback = function (type) {
  6246. return function () {
  6247. if (callback) {
  6248. callback = errorCallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = xhr.onreadystatechange = null;
  6249. if (type === "abort") {
  6250. xhr.abort();
  6251. } else if (type === "error") {
  6252. if (typeof xhr.status !== "number") {
  6253. complete(0, "error");
  6254. } else {
  6255. complete(xhr.status, xhr.statusText);
  6256. }
  6257. } else {
  6258. complete(xhrSuccessStatus[xhr.status] || xhr.status, xhr.statusText, (xhr.responseType || "text") !== "text" || typeof xhr.responseText !== "string" ? {
  6259. binary: xhr.response
  6260. } : {
  6261. text: xhr.responseText
  6262. }, xhr.getAllResponseHeaders());
  6263. }
  6264. }
  6265. };
  6266. };
  6267. xhr.onload = callback();
  6268. errorCallback = xhr.onerror = xhr.ontimeout = callback("error");
  6269. if (xhr.onabort !== undefined) {
  6270. xhr.onabort = errorCallback;
  6271. } else {
  6272. xhr.onreadystatechange = function () {
  6273. if (xhr.readyState === 4) {
  6274. window.setTimeout(function () {
  6275. if (callback) {
  6276. errorCallback();
  6277. }
  6278. });
  6279. }
  6280. };
  6281. }
  6282. callback = callback("abort");
  6283. try {
  6284. xhr.send((options.hasContent && options.data) || null);
  6285. } catch (e) {
  6286. if (callback) {
  6287. throw e;
  6288. }
  6289. }
  6290. },
  6291. abort: function () {
  6292. if (callback) {
  6293. callback();
  6294. }
  6295. },
  6296. };
  6297. }
  6298. });
  6299. jQuery.ajaxPrefilter(function (s) {
  6300. if (s.crossDomain) {
  6301. s.contents.script = false;
  6302. }
  6303. });
  6304. jQuery.ajaxSetup({
  6305. accepts: {
  6306. script: "text/javascript, application/javascript, " + "application/ecmascript, application/x-ecmascript"
  6307. },
  6308. contents: {
  6309. script: /\b(?:java|ecma)script\b/
  6310. },
  6311. converters: {
  6312. "text script": function (text) {
  6313. jQuery.globalEval(text);
  6314. return text;
  6315. },
  6316. },
  6317. });
  6318. jQuery.ajaxPrefilter("script", function (s) {
  6319. if (s.cache === undefined) {
  6320. s.cache = false;
  6321. }
  6322. if (s.crossDomain) {
  6323. s.type = "GET";
  6324. }
  6325. });
  6326. jQuery.ajaxTransport("script", function (s) {
  6327. if (s.crossDomain || s.scriptAttrs) {
  6328. var script, callback;
  6329. return {
  6330. send: function (_, complete) {
  6331. script = jQuery("<script>")
  6332. .attr(s.scriptAttrs || {})
  6333. .prop({
  6334. charset: s.scriptCharset,
  6335. src: s.url
  6336. })
  6337. .on(
  6338. "load error",
  6339. (callback = function (evt) {
  6340. script.remove();
  6341. callback = null;
  6342. if (evt) {
  6343. complete(evt.type === "error" ? 404 : 200, evt.type);
  6344. }
  6345. })
  6346. );
  6347. document.head.appendChild(script[0]);
  6348. },
  6349. abort: function () {
  6350. if (callback) {
  6351. callback();
  6352. }
  6353. },
  6354. };
  6355. }
  6356. });
  6357. var oldCallbacks = [],
  6358. rjsonp = /(=)\?(?=&|$)|\?\?/;
  6359. jQuery.ajaxSetup({
  6360. jsonp: "callback",
  6361. jsonpCallback: function () {
  6362. var callback = oldCallbacks.pop() || jQuery.expando + "_" + nonce.guid++;
  6363. this[callback] = true;
  6364. return callback;
  6365. },
  6366. });
  6367. jQuery.ajaxPrefilter("json jsonp", function (s, originalSettings, jqXHR) {
  6368. var callbackName,
  6369. overwritten,
  6370. responseContainer,
  6371. 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");
  6372. if (jsonProp || s.dataTypes[0] === "jsonp") {
  6373. callbackName = s.jsonpCallback = isFunction(s.jsonpCallback) ? s.jsonpCallback() : s.jsonpCallback;
  6374. if (jsonProp) {
  6375. s[jsonProp] = s[jsonProp].replace(rjsonp, "$1" + callbackName);
  6376. } else if (s.jsonp !== false) {
  6377. s.url += (rquery.test(s.url) ? "&" : "?") + s.jsonp + "=" + callbackName;
  6378. }
  6379. s.converters["script json"] = function () {
  6380. if (!responseContainer) {
  6381. jQuery.error(callbackName + " was not called");
  6382. }
  6383. return responseContainer[0];
  6384. };
  6385. s.dataTypes[0] = "json";
  6386. overwritten = window[callbackName];
  6387. window[callbackName] = function () {
  6388. responseContainer = arguments;
  6389. };
  6390. jqXHR.always(function () {
  6391. if (overwritten === undefined) {
  6392. jQuery(window).removeProp(callbackName);
  6393. } else {
  6394. window[callbackName] = overwritten;
  6395. }
  6396. if (s[callbackName]) {
  6397. s.jsonpCallback = originalSettings.jsonpCallback;
  6398. oldCallbacks.push(callbackName);
  6399. }
  6400. if (responseContainer && isFunction(overwritten)) {
  6401. overwritten(responseContainer[0]);
  6402. }
  6403. responseContainer = overwritten = undefined;
  6404. });
  6405. return "script";
  6406. }
  6407. });
  6408. support.createHTMLDocument = (function () {
  6409. var body = document.implementation.createHTMLDocument("").body;
  6410. body.innerHTML = "<form></form><form></form>";
  6411. return body.childNodes.length === 2;
  6412. })();
  6413. jQuery.parseHTML = function (data, context, keepScripts) {
  6414. if (typeof data !== "string") {
  6415. return [];
  6416. }
  6417. if (typeof context === "boolean") {
  6418. keepScripts = context;
  6419. context = false;
  6420. }
  6421. var base, parsed, scripts;
  6422. if (!context) {
  6423. if (support.createHTMLDocument) {
  6424. context = document.implementation.createHTMLDocument("");
  6425. base = context.createElement("base");
  6426. base.href = document.location.href;
  6427. context.head.appendChild(base);
  6428. } else {
  6429. context = document;
  6430. }
  6431. }
  6432. parsed = rsingleTag.exec(data);
  6433. scripts = !keepScripts && [];
  6434. if (parsed) {
  6435. return [context.createElement(parsed[1])];
  6436. }
  6437. parsed = buildFragment([data], context, scripts);
  6438. if (scripts && scripts.length) {
  6439. jQuery(scripts).remove();
  6440. }
  6441. return jQuery.merge([], parsed.childNodes);
  6442. };
  6443. jQuery.fn.load = function (url, params, callback) {
  6444. var selector,
  6445. type,
  6446. response,
  6447. self = this,
  6448. off = url.indexOf(" ");
  6449. if (off > -1) {
  6450. selector = stripAndCollapse(url.slice(off));
  6451. url = url.slice(0, off);
  6452. }
  6453. if (isFunction(params)) {
  6454. callback = params;
  6455. params = undefined;
  6456. } else if (params && typeof params === "object") {
  6457. type = "POST";
  6458. }
  6459. if (self.length > 0) {
  6460. jQuery
  6461. .ajax({
  6462. url: url,
  6463. type: type || "GET",
  6464. dataType: "html",
  6465. data: params,
  6466. })
  6467. .done(function (responseText) {
  6468. response = arguments;
  6469. self.html(selector ? jQuery("<div>").append(jQuery.parseHTML(responseText)).find(selector) : responseText);
  6470. })
  6471. .always(
  6472. callback &&
  6473. function (jqXHR, status) {
  6474. self.each(function () {
  6475. callback.apply(this, response || [jqXHR.responseText, status, jqXHR]);
  6476. });
  6477. }
  6478. );
  6479. }
  6480. return this;
  6481. };
  6482. jQuery.expr.pseudos.animated = function (elem) {
  6483. return jQuery.grep(jQuery.timers, function (fn) {
  6484. return elem === fn.elem;
  6485. }).length;
  6486. };
  6487. jQuery.offset = {
  6488. setOffset: function (elem, options, i) {
  6489. var curPosition,
  6490. curLeft,
  6491. curCSSTop,
  6492. curTop,
  6493. curOffset,
  6494. curCSSLeft,
  6495. calculatePosition,
  6496. position = jQuery.css(elem, "position"),
  6497. curElem = jQuery(elem),
  6498. props = {};
  6499. if (position === "static") {
  6500. elem.style.position = "relative";
  6501. }
  6502. curOffset = curElem.offset();
  6503. curCSSTop = jQuery.css(elem, "top");
  6504. curCSSLeft = jQuery.css(elem, "left");
  6505. calculatePosition = (position === "absolute" || position === "fixed") && (curCSSTop + curCSSLeft).indexOf("auto") > -1;
  6506. if (calculatePosition) {
  6507. curPosition = curElem.position();
  6508. curTop = curPosition.top;
  6509. curLeft = curPosition.left;
  6510. } else {
  6511. curTop = parseFloat(curCSSTop) || 0;
  6512. curLeft = parseFloat(curCSSLeft) || 0;
  6513. }
  6514. if (isFunction(options)) {
  6515. options = options.call(elem, i, jQuery.extend({}, curOffset));
  6516. }
  6517. if (options.top != null) {
  6518. props.top = options.top - curOffset.top + curTop;
  6519. }
  6520. if (options.left != null) {
  6521. props.left = options.left - curOffset.left + curLeft;
  6522. }
  6523. if ("using" in options) {
  6524. options.using.call(elem, props);
  6525. } else {
  6526. curElem.css(props);
  6527. }
  6528. },
  6529. };
  6530. jQuery.fn.extend({
  6531. offset: function (options) {
  6532. if (arguments.length) {
  6533. return options === undefined ?
  6534. this :
  6535. this.each(function (i) {
  6536. jQuery.offset.setOffset(this, options, i);
  6537. });
  6538. }
  6539. var rect,
  6540. win,
  6541. elem = this[0];
  6542. if (!elem) {
  6543. return;
  6544. }
  6545. if (!elem.getClientRects().length) {
  6546. return {
  6547. top: 0,
  6548. left: 0
  6549. };
  6550. }
  6551. rect = elem.getBoundingClientRect();
  6552. win = elem.ownerDocument.defaultView;
  6553. return {
  6554. top: rect.top + win.pageYOffset,
  6555. left: rect.left + win.pageXOffset
  6556. };
  6557. },
  6558. position: function () {
  6559. if (!this[0]) {
  6560. return;
  6561. }
  6562. var offsetParent,
  6563. offset,
  6564. doc,
  6565. elem = this[0],
  6566. parentOffset = {
  6567. top: 0,
  6568. left: 0
  6569. };
  6570. if (jQuery.css(elem, "position") === "fixed") {
  6571. offset = elem.getBoundingClientRect();
  6572. } else {
  6573. offset = this.offset();
  6574. doc = elem.ownerDocument;
  6575. offsetParent = elem.offsetParent || doc.documentElement;
  6576. while (offsetParent && (offsetParent === doc.body || offsetParent === doc.documentElement) && jQuery.css(offsetParent, "position") === "static") {
  6577. offsetParent = offsetParent.parentNode;
  6578. }
  6579. if (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {
  6580. parentOffset = jQuery(offsetParent).offset();
  6581. parentOffset.top += jQuery.css(offsetParent, "borderTopWidth", true);
  6582. parentOffset.left += jQuery.css(offsetParent, "borderLeftWidth", true);
  6583. }
  6584. }
  6585. return {
  6586. top: offset.top - parentOffset.top - jQuery.css(elem, "marginTop", true),
  6587. left: offset.left - parentOffset.left - jQuery.css(elem, "marginLeft", true)
  6588. };
  6589. },
  6590. offsetParent: function () {
  6591. return this.map(function () {
  6592. var offsetParent = this.offsetParent;
  6593. while (offsetParent && jQuery.css(offsetParent, "position") === "static") {
  6594. offsetParent = offsetParent.offsetParent;
  6595. }
  6596. return offsetParent || documentElement;
  6597. });
  6598. },
  6599. });
  6600. jQuery.each({
  6601. scrollLeft: "pageXOffset",
  6602. scrollTop: "pageYOffset"
  6603. }, function (method, prop) {
  6604. var top = "pageYOffset" === prop;
  6605. jQuery.fn[method] = function (val) {
  6606. return access(
  6607. this,
  6608. function (elem, method, val) {
  6609. var win;
  6610. if (isWindow(elem)) {
  6611. win = elem;
  6612. } else if (elem.nodeType === 9) {
  6613. win = elem.defaultView;
  6614. }
  6615. if (val === undefined) {
  6616. return win ? win[prop] : elem[method];
  6617. }
  6618. if (win) {
  6619. win.scrollTo(!top ? val : win.pageXOffset, top ? val : win.pageYOffset);
  6620. } else {
  6621. elem[method] = val;
  6622. }
  6623. },
  6624. method,
  6625. val,
  6626. arguments.length
  6627. );
  6628. };
  6629. });
  6630. jQuery.each(["top", "left"], function (_i, prop) {
  6631. jQuery.cssHooks[prop] = addGetHookIf(support.pixelPosition, function (elem, computed) {
  6632. if (computed) {
  6633. computed = curCSS(elem, prop);
  6634. return rnumnonpx.test(computed) ? jQuery(elem).position()[prop] + "px" : computed;
  6635. }
  6636. });
  6637. });
  6638. jQuery.each({
  6639. Height: "height",
  6640. Width: "width"
  6641. }, function (name, type) {
  6642. jQuery.each({
  6643. padding: "inner" + name,
  6644. content: type,
  6645. "": "outer" + name
  6646. }, function (defaultExtra, funcName) {
  6647. jQuery.fn[funcName] = function (margin, value) {
  6648. var chainable = arguments.length && (defaultExtra || typeof margin !== "boolean"),
  6649. extra = defaultExtra || (margin === true || value === true ? "margin" : "border");
  6650. return access(
  6651. this,
  6652. function (elem, type, value) {
  6653. var doc;
  6654. if (isWindow(elem)) {
  6655. return funcName.indexOf("outer") === 0 ? elem["inner" + name] : elem.document.documentElement["client" + name];
  6656. }
  6657. if (elem.nodeType === 9) {
  6658. doc = elem.documentElement;
  6659. return Math.max(elem.body["scroll" + name], doc["scroll" + name], elem.body["offset" + name], doc["offset" + name], doc["client" + name]);
  6660. }
  6661. return value === undefined ? jQuery.css(elem, type, extra) : jQuery.style(elem, type, value, extra);
  6662. },
  6663. type,
  6664. chainable ? margin : undefined,
  6665. chainable
  6666. );
  6667. };
  6668. });
  6669. });
  6670. jQuery.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function (_i, type) {
  6671. jQuery.fn[type] = function (fn) {
  6672. return this.on(type, fn);
  6673. };
  6674. });
  6675. jQuery.fn.extend({
  6676. bind: function (types, data, fn) {
  6677. return this.on(types, null, data, fn);
  6678. },
  6679. unbind: function (types, fn) {
  6680. return this.off(types, null, fn);
  6681. },
  6682. delegate: function (selector, types, data, fn) {
  6683. return this.on(types, selector, data, fn);
  6684. },
  6685. undelegate: function (selector, types, fn) {
  6686. return arguments.length === 1 ? this.off(selector, "**") : this.off(types, selector || "**", fn);
  6687. },
  6688. hover: function (fnOver, fnOut) {
  6689. return this.mouseenter(fnOver).mouseleave(fnOut || fnOver);
  6690. },
  6691. });
  6692. 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) {
  6693. jQuery.fn[name] = function (data, fn) {
  6694. return arguments.length > 0 ? this.on(name, null, data, fn) : this.trigger(name);
  6695. };
  6696. });
  6697. var rtrim = /^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;
  6698. jQuery.proxy = function (fn, context) {
  6699. var tmp, args, proxy;
  6700. if (typeof context === "string") {
  6701. tmp = fn[context];
  6702. context = fn;
  6703. fn = tmp;
  6704. }
  6705. if (!isFunction(fn)) {
  6706. return undefined;
  6707. }
  6708. args = slice.call(arguments, 2);
  6709. proxy = function () {
  6710. return fn.apply(context || this, args.concat(slice.call(arguments)));
  6711. };
  6712. proxy.guid = fn.guid = fn.guid || jQuery.guid++;
  6713. return proxy;
  6714. };
  6715. jQuery.holdReady = function (hold) {
  6716. if (hold) {
  6717. jQuery.readyWait++;
  6718. } else {
  6719. jQuery.ready(true);
  6720. }
  6721. };
  6722. jQuery.isArray = Array.isArray;
  6723. jQuery.parseJSON = JSON.parse;
  6724. jQuery.nodeName = nodeName;
  6725. jQuery.isFunction = isFunction;
  6726. jQuery.isWindow = isWindow;
  6727. jQuery.camelCase = camelCase;
  6728. jQuery.type = toType;
  6729. jQuery.now = Date.now;
  6730. jQuery.isNumeric = function (obj) {
  6731. var type = jQuery.type(obj);
  6732. return (type === "number" || type === "string") && !isNaN(obj - parseFloat(obj));
  6733. };
  6734. jQuery.trim = function (text) {
  6735. return text == null ? "" : (text + "").replace(rtrim, "$1");
  6736. };
  6737. if (typeof define === "function" && define.amd) {
  6738. define("jquery", [], function () {
  6739. return jQuery;
  6740. });
  6741. }
  6742. var _jQuery = window.jQuery,
  6743. _$ = window.$;
  6744. jQuery.noConflict = function (deep) {
  6745. if (window.$ === jQuery) {
  6746. window.$ = _$;
  6747. }
  6748. if (deep && window.jQuery === jQuery) {
  6749. window.jQuery = _jQuery;
  6750. }
  6751. return jQuery;
  6752. };
  6753. if (typeof noGlobal === "undefined") {
  6754. window.jQuery = window.$ = jQuery;
  6755. }
  6756. return jQuery;
  6757. });

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址