1/******/ (function(modules) { // webpackBootstrap 2/******/ // The module cache 3/******/ var installedModules = {}; 4/******/ 5/******/ // The require function 6/******/ function __webpack_require__(moduleId) { 7/******/ 8/******/ // Check if module is in cache 9/******/ if(installedModules[moduleId]) { 10/******/ return installedModules[moduleId].exports; 11/******/ } 12/******/ // Create a new module (and put it into the cache) 13/******/ var module = installedModules[moduleId] = { 14/******/ i: moduleId, 15/******/ l: false, 16/******/ exports: {} 17/******/ }; 18/******/ 19/******/ // Execute the module function 20/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); 21/******/ 22/******/ // Flag the module as loaded 23/******/ module.l = true; 24/******/ 25/******/ // Return the exports of the module 26/******/ return module.exports; 27/******/ } 28/******/ 29/******/ 30/******/ // expose the modules object (__webpack_modules__) 31/******/ __webpack_require__.m = modules; 32/******/ 33/******/ // expose the module cache 34/******/ __webpack_require__.c = installedModules; 35/******/ 36/******/ // define getter function for harmony exports 37/******/ __webpack_require__.d = function(exports, name, getter) { 38/******/ if(!__webpack_require__.o(exports, name)) { 39/******/ Object.defineProperty(exports, name, { 40/******/ configurable: false, 41/******/ enumerable: true, 42/******/ get: getter 43/******/ }); 44/******/ } 45/******/ }; 46/******/ 47/******/ // getDefaultExport function for compatibility with non-harmony modules 48/******/ __webpack_require__.n = function(module) { 49/******/ var getter = module && module.__esModule ? 50/******/ function getDefault() { return module['default']; } : 51/******/ function getModuleExports() { return module; }; 52/******/ __webpack_require__.d(getter, 'a', getter); 53/******/ return getter; 54/******/ }; 55/******/ 56/******/ // Object.prototype.hasOwnProperty.call 57/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; 58/******/ 59/******/ // __webpack_public_path__ 60/******/ __webpack_require__.p = ""; 61/******/ 62/******/ // Load entry module and return exports 63/******/ return __webpack_require__(__webpack_require__.s = 56); 64/******/ }) 65/************************************************************************/ 66/******/ ({ 67 68/***/ 0: 69/***/ (function(module, exports, __webpack_require__) { 70 71var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! 72 * jQuery JavaScript Library v1.12.4 73 * http://jquery.com/ 74 * 75 * Includes Sizzle.js 76 * http://sizzlejs.com/ 77 * 78 * Copyright jQuery Foundation and other contributors 79 * Released under the MIT license 80 * http://jquery.org/license 81 * 82 * Date: 2016-05-20T17:17Z 83 */ 84 85(function (global, factory) { 86 87 if (typeof module === "object" && typeof module.exports === "object") { 88 // For CommonJS and CommonJS-like environments where a proper `window` 89 // is present, execute the factory and get jQuery. 90 // For environments that do not have a `window` with a `document` 91 // (such as Node.js), expose a factory as module.exports. 92 // This accentuates the need for the creation of a real `window`. 93 // e.g. var jQuery = require("jquery")(window); 94 // See ticket #14549 for more info. 95 module.exports = global.document ? factory(global, true) : function (w) { 96 if (!w.document) { 97 throw new Error("jQuery requires a window with a document"); 98 } 99 return factory(w); 100 }; 101 } else { 102 factory(global); 103 } 104 105 // Pass this if window is not defined yet 106})(typeof window !== "undefined" ? window : this, function (window, noGlobal) { 107 108 // Support: Firefox 18+ 109 // Can't be in strict mode, several libs including ASP.NET trace 110 // the stack via arguments.caller.callee and Firefox dies if
vendor: 4,159 bytes, lines 111-295
111 // you try to trace through "use strict" call chains. (#13335) 112 //"use strict"; 113 var deletedIds = []; 114 115 var document = window.document; 116 117 var slice = deletedIds.slice; 118 119 var concat = deletedIds.concat; 120 121 var push = deletedIds.push; 122 123 var indexOf = deletedIds.indexOf; 124 125 var class2type = {}; 126 127 var toString = class2type.toString; 128 129 var hasOwn = class2type.hasOwnProperty; 130 131 var support = {}; 132 133 var version = "1.12.4", 134 135 136 // Define a local copy of jQuery 137 jQuery = function (selector, context) { 138 139 // The jQuery object is actually just the init constructor 'enhanced' 140 // Need init if jQuery is called (just allow error to be thrown if not included) 141 return new jQuery.fn.init(selector, context); 142 }, 143 144 145 // Support: Android<4.1, IE<9 146 // Make sure we trim BOM and NBSP 147 rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, 148 149 150 // Matches dashed string for camelizing 151 rmsPrefix = /^-ms-/, 152 rdashAlpha = /-([\da-z])/gi, 153 154 155 // Used by jQuery.camelCase as callback to replace() 156 fcamelCase = function (all, letter) { 157 return letter.toUpperCase(); 158 }; 159 160 jQuery.fn = jQuery.prototype = { 161 162 // The current version of jQuery being used 163 jquery: version, 164 165 constructor: jQuery, 166 167 // Start with an empty selector 168 selector: "", 169 170 // The default length of a jQuery object is 0 171 length: 0, 172 173 toArray: function () { 174 return slice.call(this); 175 }, 176 177 // Get the Nth element in the matched element set OR 178 // Get the whole matched element set as a clean array 179 get: function (num) { 180 return num != null ? 181 182 // Return just the one element from the set 183 num < 0 ? this[num + this.length] : this[num] : 184 185 // Return all the elements in a clean array 186 slice.call(this); 187 }, 188 189 // Take an array of elements and push it onto the stack 190 // (returning the new matched element set) 191 pushStack: function (elems) { 192 193 // Build a new jQuery matched element set 194 var ret = jQuery.merge(this.constructor(), elems); 195 196 // Add the old object onto the stack (as a reference) 197 ret.prevObject = this; 198 ret.context = this.context; 199 200 // Return the newly-formed element set 201 return ret; 202 }, 203 204 // Execute a callback for every element in the matched set. 205 each: function (callback) { 206 return jQuery.each(this, callback); 207 }, 208 209 map: function (callback) { 210 return this.pushStack(jQuery.map(this, function (elem, i) { 211 return callback.call(elem, i, elem); 212 })); 213 }, 214 215 slice: function () { 216 return this.pushStack(slice.apply(this, arguments)); 217 }, 218 219 first: function () { 220 return this.eq(0); 221 }, 222 223 last: function () { 224 return this.eq(-1); 225 }, 226 227 eq: function (i) { 228 var len = this.length, 229 j = +i + (i < 0 ? len : 0); 230 return this.pushStack(j >= 0 && j < len ? [this[j]] : []); 231 }, 232 233 end: function () { 234 return this.prevObject || this.constructor(); 235 }, 236 237 // For internal use only. 238 // Behaves like an Array's method, not like a jQuery method. 239 push: push, 240 sort: deletedIds.sort, 241 splice: deletedIds.splice 242 }; 243 244 jQuery.extend = jQuery.fn.extend = function () { 245 var src, 246 copyIsArray, 247 copy, 248 name, 249 options, 250 clone, 251 target = arguments[0] || {}, 252 i = 1, 253 length = arguments.length, 254 deep = false; 255 256 // Handle a deep copy situation 257 if (typeof target === "boolean") { 258 deep = target; 259 260 // skip the boolean and the target 261 target = arguments[i] || {}; 262 i++; 263 } 264 265 // Handle case when target is a string or something (possible in deep copy) 266 if (typeof target !== "object" && !jQuery.isFunction(target)) { 267 target = {}; 268 } 269 270 // extend jQuery itself if only one argument is passed 271 if (i === length) { 272 target = this; 273 i--; 274 } 275 276 for (; i < length; i++) { 277 278 // Only deal with non-null/undefined values 279 if ((options = arguments[i]) != null) { 280 281 // Extend the base object 282 for (name in options) { 283 src = target[name]; 284 copy = options[name]; 285 286 // Prevent never-ending loop 287 if (target === copy) { 288 continue; 289 } 290 291 // Recurse if we're merging plain objects or arrays 292 if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)))) { 293 294 if (copyIsArray) { 295 copyIsArray = false;
vendor: 8,553 bytes, lines 296-637
296 clone = src && jQuery.isArray(src) ? src : []; 297 } else { 298 clone = src && jQuery.isPlainObject(src) ? src : {}; 299 } 300 301 // Never move original objects, clone them 302 target[name] = jQuery.extend(deep, clone, copy); 303 304 // Don't bring in undefined values 305 } else if (copy !== undefined) { 306 target[name] = copy; 307 } 308 } 309 } 310 } 311 312 // Return the modified object 313 return target; 314 }; 315 316 jQuery.extend({ 317 318 // Unique for each copy of jQuery on the page 319 expando: "jQuery" + (version + Math.random()).replace(/\D/g, ""), 320 321 // Assume jQuery is ready without the ready module 322 isReady: true, 323 324 error: function (msg) { 325 throw new Error(msg); 326 }, 327 328 noop: function () {}, 329 330 // See test/unit/core.js for details concerning isFunction. 331 // Since version 1.3, DOM methods and functions like alert 332 // aren't supported. They return false on IE (#2968). 333 isFunction: function (obj) { 334 return jQuery.type(obj) === "function"; 335 }, 336 337 isArray: Array.isArray || function (obj) { 338 return jQuery.type(obj) === "array"; 339 }, 340 341 isWindow: function (obj) { 342 /* jshint eqeqeq: false */ 343 return obj != null && obj == obj.window; 344 }, 345 346 isNumeric: function (obj) { 347 348 // parseFloat NaNs numeric-cast false positives (null|true|false|"") 349 // ...but misinterprets leading-number strings, particularly hex literals ("0x...") 350 // subtraction forces infinities to NaN 351 // adding 1 corrects loss of precision from parseFloat (#15100) 352 var realStringObj = obj && obj.toString(); 353 return !jQuery.isArray(obj) && realStringObj - parseFloat(realStringObj) + 1 >= 0; 354 }, 355 356 isEmptyObject: function (obj) { 357 var name; 358 for (name in obj) { 359 return false; 360 } 361 return true; 362 }, 363 364 isPlainObject: function (obj) { 365 var key; 366 367 // Must be an Object. 368 // Because of IE, we also have to check the presence of the constructor property. 369 // Make sure that DOM nodes and window objects don't pass through, as well 370 if (!obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow(obj)) { 371 return false; 372 } 373 374 try { 375 376 // Not own constructor property must be Object 377 if (obj.constructor && !hasOwn.call(obj, "constructor") && !hasOwn.call(obj.constructor.prototype, "isPrototypeOf")) { 378 return false; 379 } 380 } catch (e) { 381 382 // IE8,9 Will throw exceptions on certain host objects #9897 383 return false; 384 } 385 386 // Support: IE<9 387 // Handle iteration over inherited properties before own properties. 388 if (!support.ownFirst) { 389 for (key in obj) { 390 return hasOwn.call(obj, key); 391 } 392 } 393 394 // Own properties are enumerated firstly, so to speed up, 395 // if last one is own, then all properties are own. 396 for (key in obj) {} 397 398 return key === undefined || hasOwn.call(obj, key); 399 }, 400 401 type: function (obj) { 402 if (obj == null) { 403 return obj + ""; 404 } 405 return typeof obj === "object" || typeof obj === "function" ? class2type[toString.call(obj)] || "object" : typeof obj; 406 }, 407 408 // Workarounds based on findings by Jim Driscoll 409 // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context 410 globalEval: function (data) { 411 if (data && jQuery.trim(data)) { 412 413 // We use execScript on Internet Explorer 414 // We use an anonymous function so that context is window 415 // rather than jQuery in Firefox 416 (window.execScript || function (data) { 417 window["eval"].call(window, data); // jscs:ignore requireDotNotation 418 })(data); 419 } 420 }, 421 422 // Convert dashed to camelCase; used by the css and data modules 423 // Microsoft forgot to hump their vendor prefix (#9572) 424 camelCase: function (string) { 425 return string.replace(rmsPrefix, "ms-").replace(rdashAlpha, fcamelCase); 426 }, 427 428 nodeName: function (elem, name) { 429 return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); 430 }, 431 432 each: function (obj, callback) { 433 var length, 434 i = 0; 435 436 if (isArrayLike(obj)) { 437 length = obj.length; 438 for (; i < length; i++) { 439 if (callback.call(obj[i], i, obj[i]) === false) { 440 break; 441 } 442 } 443 } else { 444 for (i in obj) { 445 if (callback.call(obj[i], i, obj[i]) === false) { 446 break; 447 } 448 } 449 } 450 451 return obj; 452 }, 453 454 // Support: Android<4.1, IE<9 455 trim: function (text) { 456 return text == null ? "" : (text + "").replace(rtrim, ""); 457 }, 458 459 // results is for internal usage only 460 makeArray: function (arr, results) { 461 var ret = results || []; 462 463 if (arr != null) { 464 if (isArrayLike(Object(arr))) { 465 jQuery.merge(ret, typeof arr === "string" ? [arr] : arr); 466 } else { 467 push.call(ret, arr); 468 } 469 } 470 471 return ret; 472 }, 473 474 inArray: function (elem, arr, i) { 475 var len; 476 477 if (arr) { 478 if (indexOf) { 479 return indexOf.call(arr, elem, i); 480 } 481 482 len = arr.length; 483 i = i ? i < 0 ? Math.max(0, len + i) : i : 0; 484 485 for (; i < len; i++) { 486 487 // Skip accessing in sparse arrays 488 if (i in arr && arr[i] === elem) { 489 return i; 490 } 491 } 492 } 493 494 return -1; 495 }, 496 497 merge: function (first, second) { 498 var len = +second.length, 499 j = 0, 500 i = first.length; 501 502 while (j < len) { 503 first[i++] = second[j++]; 504 } 505 506 // Support: IE<9 507 // Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists) 508 if (len !== len) { 509 while (second[j] !== undefined) { 510 first[i++] = second[j++]; 511 } 512 } 513 514 first.length = i; 515 516 return first; 517 }, 518 519 grep: function (elems, callback, invert) { 520 var callbackInverse, 521 matches = [], 522 i = 0, 523 length = elems.length, 524 callbackExpect = !invert; 525 526 // Go through the array, only saving the items 527 // that pass the validator function 528 for (; i < length; i++) { 529 callbackInverse = !callback(elems[i], i); 530 if (callbackInverse !== callbackExpect) { 531 matches.push(elems[i]); 532 } 533 } 534 535 return matches; 536 }, 537 538 // arg is for internal usage only 539 map: function (elems, callback, arg) { 540 var length, 541 value, 542 i = 0, 543 ret = []; 544 545 // Go through the array, translating each of the items to their new values 546 if (isArrayLike(elems)) { 547 length = elems.length; 548 for (; i < length; i++) { 549 value = callback(elems[i], i, arg); 550 551 if (value != null) { 552 ret.push(value); 553 } 554 } 555 556 // Go through every key on the object, 557 } else { 558 for (i in elems) { 559 value = callback(elems[i], i, arg); 560 561 if (value != null) { 562 ret.push(value); 563 } 564 } 565 } 566 567 // Flatten any nested arrays 568 return concat.apply([], ret); 569 }, 570 571 // A global GUID counter for objects 572 guid: 1, 573 574 // Bind a function to a context, optionally partially applying any 575 // arguments. 576 proxy: function (fn, context) { 577 var args, proxy, tmp; 578 579 if (typeof context === "string") { 580 tmp = fn[context]; 581 context = fn; 582 fn = tmp; 583 } 584 585 // Quick check to determine if target is callable, in the spec 586 // this throws a TypeError, but we will just return undefined. 587 if (!jQuery.isFunction(fn)) { 588 return undefined; 589 } 590 591 // Simulated bind 592 args = slice.call(arguments, 2); 593 proxy = function () { 594 return fn.apply(context || this, args.concat(slice.call(arguments))); 595 }; 596 597 // Set the guid of unique handler to the same of original handler, so it can be removed 598 proxy.guid = fn.guid = fn.guid || jQuery.guid++; 599 600 return proxy; 601 }, 602 603 now: function () { 604 return +new Date(); 605 }, 606 607 // jQuery.support is not used in Core but other projects attach their 608 // properties to it so it needs to exist. 609 support: support 610 }); 611 612 // JSHint would error on this code due to the Symbol not being defined in ES5. 613 // Defining this global in .jshintrc would create a danger of using the global 614 // unguarded in another place, it seems safer to just disable JSHint for these 615 // three lines. 616 /* jshint ignore: start */ 617 if (typeof Symbol === "function") { 618 jQuery.fn[Symbol.iterator] = deletedIds[Symbol.iterator]; 619 } 620 /* jshint ignore: end */ 621 622 // Populate the class2type map 623 jQuery.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), function (i, name) { 624 class2type["[object " + name + "]"] = name.toLowerCase(); 625 }); 626 627 function isArrayLike(obj) { 628 629 // Support: iOS 8.2 (not reproducible in simulator) 630 // `in` check used to prevent JIT error (gh-2145) 631 // hasOwn isn't used here due to false negatives 632 // regarding Nodelist length in IE 633 var length = !!obj && "length" in obj && obj.length, 634 type = jQuery.type(obj); 635 636 if (type === "function" || jQuery.isWindow(obj)) { 637 return false;
vendor: 4,770 bytes, lines 638-783
638 } 639 640 return type === "array" || length === 0 || typeof length === "number" && length > 0 && length - 1 in obj; 641 } 642 var Sizzle = 643 /*! 644 * Sizzle CSS Selector Engine v2.2.1 645 * http://sizzlejs.com/ 646 * 647 * Copyright jQuery Foundation and other contributors 648 * Released under the MIT license 649 * http://jquery.org/license 650 * 651 * Date: 2015-10-17 652 */ 653 function (window) { 654 655 var i, 656 support, 657 Expr, 658 getText, 659 isXML, 660 tokenize, 661 compile, 662 select, 663 outermostContext, 664 sortInput, 665 hasDuplicate, 666 667 668 // Local document vars 669 setDocument, 670 document, 671 docElem, 672 documentIsHTML, 673 rbuggyQSA, 674 rbuggyMatches, 675 matches, 676 contains, 677 678 679 // Instance-specific data 680 expando = "sizzle" + 1 * new Date(), 681 preferredDoc = window.document, 682 dirruns = 0, 683 done = 0, 684 classCache = createCache(), 685 tokenCache = createCache(), 686 compilerCache = createCache(), 687 sortOrder = function (a, b) { 688 if (a === b) { 689 hasDuplicate = true; 690 } 691 return 0; 692 }, 693 694 695 // General-purpose constants 696 MAX_NEGATIVE = 1 << 31, 697 698 699 // Instance methods 700 hasOwn = {}.hasOwnProperty, 701 arr = [], 702 pop = arr.pop, 703 push_native = arr.push, 704 push = arr.push, 705 slice = arr.slice, 706 707 // Use a stripped-down indexOf as it's faster than native 708 // http://jsperf.com/thor-indexof-vs-for/5 709 indexOf = function (list, elem) { 710 var i = 0, 711 len = list.length; 712 for (; i < len; i++) { 713 if (list[i] === elem) { 714 return i; 715 } 716 } 717 return -1; 718 }, 719 booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", 720 721 722 // Regular expressions 723 724 // http://www.w3.org/TR/css3-selectors/#whitespace 725 whitespace = "[\\x20\\t\\r\\n\\f]", 726 727 728 // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier 729 identifier = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", 730 731 732 // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors 733 attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + 734 // Operator (capture 2) 735 "*([*^$|!~]?=)" + whitespace + 736 // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" 737 "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + "*\\]", 738 pseudos = ":(" + identifier + ")(?:\\((" + 739 // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: 740 // 1. quoted (capture 3; capture 4 or capture 5) 741 "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + 742 // 2. simple (capture 6) 743 "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + 744 // 3. anything else (capture 2) 745 ".*" + ")\\)|)", 746 747 748 // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter 749 rwhitespace = new RegExp(whitespace + "+", "g"), 750 rtrim = new RegExp("^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g"), 751 rcomma = new RegExp("^" + whitespace + "*," + whitespace + "*"), 752 rcombinators = new RegExp("^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*"), 753 rattributeQuotes = new RegExp("=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g"), 754 rpseudo = new RegExp(pseudos), 755 ridentifier = new RegExp("^" + identifier + "$"), 756 matchExpr = { 757 "ID": new RegExp("^#(" + identifier + ")"), 758 "CLASS": new RegExp("^\\.(" + identifier + ")"), 759 "TAG": new RegExp("^(" + identifier + "|[*])"), 760 "ATTR": new RegExp("^" + attributes), 761 "PSEUDO": new RegExp("^" + pseudos), 762 "CHILD": new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i"), 763 "bool": new RegExp("^(?:" + booleans + ")$", "i"), 764 // For use in libraries implementing .is() 765 // We use this for POS matching in `select` 766 "needsContext": new RegExp("^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i") 767 }, 768 rinputs = /^(?:input|select|textarea|button)$/i, 769 rheader = /^h\d$/i, 770 rnative = /^[^{]+\{\s*\[native \w/, 771 772 773 // Easily-parseable/retrievable ID or TAG or CLASS selectors 774 rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, 775 rsibling = /[+~]/, 776 rescape = /'|\\/g, 777 778 779 // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters 780 runescape = new RegExp("\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig"), 781 funescape = function (_, escaped, escapedWhitespace) { 782 var high = "0x" + escaped - 0x10000; 783 // NaN means non-codepoint
784 // Support: Firefox<24 785 // Workaround erroneous numeric interpretation of +"0x" 786 return high !== high || escapedWhitespace ? escaped : high < 0 ? 787 // BMP codepoint 788 String.fromCharCode(high + 0x10000) : 789 // Supplemental Plane codepoint (surrogate pair) 790 String.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00); 791 }, 792 793 794 // Used for iframes 795 // See setDocument() 796 // Removing the function wrapper causes a "Permission Denied" 797 // error in IE 798 unloadHandler = function () { 799 setDocument(); 800 }; 801 802 // Optimize for push.apply( _, NodeList ) 803 try { 804 push.apply(arr = slice.call(preferredDoc.childNodes), preferredDoc.childNodes); 805 // Support: Android<4.0 806 // Detect silently failing push.apply 807 arr[preferredDoc.childNodes.length].nodeType; 808 } catch (e) { 809 push = { apply: arr.length ? 810 811 // Leverage slice if possible 812 function (target, els) { 813 push_native.apply(target, slice.call(els)); 814 } : 815 816 // Support: IE<9 817 // Otherwise append directly 818 function (target, els) { 819 var j = target.length, 820 i = 0; 821 // Can't trust NodeList.length 822 while (target[j++] = els[i++]) {} 823 target.length = j - 1; 824 } 825 }; 826 } 827 828 function Sizzle(selector, context, results, seed) { 829 var m, 830 i, 831 elem, 832 nid, 833 nidselect, 834 match, 835 groups, 836 newSelector, 837 newContext = context && context.ownerDocument, 838 839 840 // nodeType defaults to 9, since context defaults to document 841 nodeType = context ? context.nodeType : 9; 842 843 results = results || []; 844 845 // Return early from calls with invalid selector or context 846 if (typeof selector !== "string" || !selector || nodeType !== 1 && nodeType !== 9 && nodeType !== 11) { 847 848 return results; 849 } 850 851 // Try to shortcut find operations (as opposed to filters) in HTML documents 852 if (!seed) { 853 854 if ((context ? context.ownerDocument || context : preferredDoc) !== document) { 855 setDocument(context); 856 } 857 context = context || document; 858 859 if (documentIsHTML) { 860 861 // If the selector is sufficiently simple, try using a "get*By*" DOM method 862 // (excepting DocumentFragment context, where the methods don't exist) 863 if (nodeType !== 11 && (match = rquickExpr.exec(selector))) { 864 865 // ID selector 866 if (m = match[1]) { 867 868 // Document context 869 if (nodeType === 9) { 870 if (elem = context.getElementById(m)) { 871 872 // Support: IE, Opera, Webkit 873 // TODO: identify versions 874 // getElementById can match elements by name instead of ID 875 if (elem.id === m) { 876 results.push(elem); 877 return results; 878 } 879 } else { 880 return results; 881 } 882 883 // Element context 884 } else { 885 886 // Support: IE, Opera, Webkit 887 // TODO: identify versions 888 // getElementById can match elements by name instead of ID 889 if (newContext && (elem = newContext.getElementById(m)) && contains(context, elem) && elem.id === m) { 890 891 results.push(elem); 892 return results; 893 } 894 } 895 896 // Type selector 897 } else if (match[2]) { 898 push.apply(results, context.getElementsByTagName(selector)); 899 return results; 900 901 // Class selector 902 } else if ((m = match[3]) && support.getElementsByClassName && context.getElementsByClassName) { 903 904 push.apply(results, context.getElementsByClassName(m)); 905 return results; 906 } 907 } 908 909 // Take advantage of querySelectorAll 910 if (support.qsa && !compilerCache[selector + " "] && (!rbuggyQSA || !rbuggyQSA.test(selector))) { 911 912 if (nodeType !== 1) { 913 newContext = context; 914 newSelector = selector; 915 916 // qSA looks outside Element context, which is not what we want 917 // Thanks to Andrew Dupont for this workaround technique 918 // Support: IE <=8 919 // Exclude object elements 920 } else if (context.nodeName.toLowerCase() !== "object") { 921 922 // Capture the context ID, setting it first if necessary 923 if (nid = context.getAttribute("id")) { 924 nid = nid.replace(rescape, "\\$&"); 925 } else { 926 context.setAttribute("id", nid = expando); 927 } 928 929 // Prefix every selector in the list 930 groups = tokenize(selector); 931 i = groups.length; 932 nidselect = ridentifier.test(nid) ? "#" + nid : "[id='" + nid + "']"; 933 while (i--) { 934 groups[i] = nidselect + " " + toSelector(groups[i]); 935 } 936 newSelector = groups.join(","); 937 938 // Expand context for sibling selectors
vendor: 18,442 bytes, lines 939-1533
939 newContext = rsibling.test(selector) && testContext(context.parentNode) || context; 940 } 941 942 if (newSelector) { 943 try { 944 push.apply(results, newContext.querySelectorAll(newSelector)); 945 return results; 946 } catch (qsaError) {} finally { 947 if (nid === expando) { 948 context.removeAttribute("id"); 949 } 950 } 951 } 952 } 953 } 954 } 955 956 // All others 957 return select(selector.replace(rtrim, "$1"), context, results, seed); 958 } 959 960 /** 961 * Create key-value caches of limited size 962 * @returns {function(string, object)} Returns the Object data after storing it on itself with 963 * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) 964 * deleting the oldest entry 965 */ 966 function createCache() { 967 var keys = []; 968 969 function cache(key, value) { 970 // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) 971 if (keys.push(key + " ") > Expr.cacheLength) { 972 // Only keep the most recent entries 973 delete cache[keys.shift()]; 974 } 975 return cache[key + " "] = value; 976 } 977 return cache; 978 } 979 980 /** 981 * Mark a function for special use by Sizzle 982 * @param {Function} fn The function to mark 983 */ 984 function markFunction(fn) { 985 fn[expando] = true; 986 return fn; 987 } 988 989 /** 990 * Support testing using an element 991 * @param {Function} fn Passed the created div and expects a boolean result 992 */ 993 function assert(fn) { 994 var div = document.createElement("div"); 995 996 try { 997 return !!fn(div); 998 } catch (e) { 999 return false; 1000 } finally { 1001 // Remove from its parent by default 1002 if (div.parentNode) { 1003 div.parentNode.removeChild(div); 1004 } 1005 // release memory in IE 1006 div = null; 1007 } 1008 } 1009 1010 /** 1011 * Adds the same handler for all of the specified attrs 1012 * @param {String} attrs Pipe-separated list of attributes 1013 * @param {Function} handler The method that will be applied 1014 */ 1015 function addHandle(attrs, handler) { 1016 var arr = attrs.split("|"), 1017 i = arr.length; 1018 1019 while (i--) { 1020 Expr.attrHandle[arr[i]] = handler; 1021 } 1022 } 1023 1024 /** 1025 * Checks document order of two siblings 1026 * @param {Element} a 1027 * @param {Element} b 1028 * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b 1029 */ 1030 function siblingCheck(a, b) { 1031 var cur = b && a, 1032 diff = cur && a.nodeType === 1 && b.nodeType === 1 && (~b.sourceIndex || MAX_NEGATIVE) - (~a.sourceIndex || MAX_NEGATIVE); 1033 1034 // Use IE sourceIndex if available on both nodes 1035 if (diff) { 1036 return diff; 1037 } 1038 1039 // Check if b follows a 1040 if (cur) { 1041 while (cur = cur.nextSibling) { 1042 if (cur === b) { 1043 return -1; 1044 } 1045 } 1046 } 1047 1048 return a ? 1 : -1; 1049 } 1050 1051 /** 1052 * Returns a function to use in pseudos for input types 1053 * @param {String} type 1054 */ 1055 function createInputPseudo(type) { 1056 return function (elem) { 1057 var name = elem.nodeName.toLowerCase(); 1058 return name === "input" && elem.type === type; 1059 }; 1060 } 1061 1062 /** 1063 * Returns a function to use in pseudos for buttons 1064 * @param {String} type 1065 */ 1066 function createButtonPseudo(type) { 1067 return function (elem) { 1068 var name = elem.nodeName.toLowerCase(); 1069 return (name === "input" || name === "button") && elem.type === type; 1070 }; 1071 } 1072 1073 /** 1074 * Returns a function to use in pseudos for positionals 1075 * @param {Function} fn 1076 */ 1077 function createPositionalPseudo(fn) { 1078 return markFunction(function (argument) { 1079 argument = +argument; 1080 return markFunction(function (seed, matches) { 1081 var j, 1082 matchIndexes = fn([], seed.length, argument), 1083 i = matchIndexes.length; 1084 1085 // Match elements found at the specified indexes 1086 while (i--) { 1087 if (seed[j = matchIndexes[i]]) { 1088 seed[j] = !(matches[j] = seed[j]); 1089 } 1090 } 1091 }); 1092 }); 1093 } 1094 1095 /** 1096 * Checks a node for validity as a Sizzle context 1097 * @param {Element|Object=} context 1098 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value 1099 */ 1100 function testContext(context) { 1101 return context && typeof context.getElementsByTagName !== "undefined" && context; 1102 } 1103 1104 // Expose support vars for convenience 1105 support = Sizzle.support = {}; 1106 1107 /** 1108 * Detects XML nodes 1109 * @param {Element|Object} elem An element or a document 1110 * @returns {Boolean} True iff elem is a non-HTML XML node 1111 */ 1112 isXML = Sizzle.isXML = function (elem) { 1113 // documentElement is verified for cases where it doesn't yet exist 1114 // (such as loading iframes in IE - #4833) 1115 var documentElement = elem && (elem.ownerDocument || elem).documentElement; 1116 return documentElement ? documentElement.nodeName !== "HTML" : false; 1117 }; 1118 1119 /** 1120 * Sets document-related variables once based on the current document 1121 * @param {Element|Object} [doc] An element or document object to use to set the document 1122 * @returns {Object} Returns the current document 1123 */ 1124 setDocument = Sizzle.setDocument = function (node) { 1125 var hasCompare, 1126 parent, 1127 doc = node ? node.ownerDocument || node : preferredDoc; 1128 1129 // Return early if doc is invalid or already selected 1130 if (doc === document || doc.nodeType !== 9 || !doc.documentElement) { 1131 return document; 1132 } 1133 1134 // Update global variables 1135 document = doc; 1136 docElem = document.documentElement; 1137 documentIsHTML = !isXML(document); 1138 1139 // Support: IE 9-11, Edge 1140 // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) 1141 if ((parent = document.defaultView) && parent.top !== parent) { 1142 // Support: IE 11 1143 if (parent.addEventListener) { 1144 parent.addEventListener("unload", unloadHandler, false); 1145 1146 // Support: IE 9 - 10 only 1147 } else if (parent.attachEvent) { 1148 parent.attachEvent("onunload", unloadHandler); 1149 } 1150 } 1151 1152 /* Attributes 1153 ---------------------------------------------------------------------- */ 1154 1155 // Support: IE<8 1156 // Verify that getAttribute really returns attributes and not properties 1157 // (excepting IE8 booleans) 1158 support.attributes = assert(function (div) { 1159 div.className = "i"; 1160 return !div.getAttribute("className"); 1161 }); 1162 1163 /* getElement(s)By* 1164 ---------------------------------------------------------------------- */ 1165 1166 // Check if getElementsByTagName("*") returns only elements 1167 support.getElementsByTagName = assert(function (div) { 1168 div.appendChild(document.createComment("")); 1169 return !div.getElementsByTagName("*").length; 1170 }); 1171 1172 // Support: IE<9 1173 support.getElementsByClassName = rnative.test(document.getElementsByClassName); 1174 1175 // Support: IE<10 1176 // Check if getElementById returns elements by name 1177 // The broken getElementById methods don't pick up programatically-set names, 1178 // so use a roundabout getElementsByName test 1179 support.getById = assert(function (div) { 1180 docElem.appendChild(div).id = expando; 1181 return !document.getElementsByName || !document.getElementsByName(expando).length; 1182 }); 1183 1184 // ID find and filter 1185 if (support.getById) { 1186 Expr.find["ID"] = function (id, context) { 1187 if (typeof context.getElementById !== "undefined" && documentIsHTML) { 1188 var m = context.getElementById(id); 1189 return m ? [m] : []; 1190 } 1191 }; 1192 Expr.filter["ID"] = function (id) { 1193 var attrId = id.replace(runescape, funescape); 1194 return function (elem) { 1195 return elem.getAttribute("id") === attrId; 1196 }; 1197 }; 1198 } else { 1199 // Support: IE6/7 1200 // getElementById is not reliable as a find shortcut 1201 delete Expr.find["ID"]; 1202 1203 Expr.filter["ID"] = function (id) { 1204 var attrId = id.replace(runescape, funescape); 1205 return function (elem) { 1206 var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); 1207 return node && node.value === attrId; 1208 }; 1209 }; 1210 } 1211 1212 // Tag 1213 Expr.find["TAG"] = support.getElementsByTagName ? function (tag, context) { 1214 if (typeof context.getElementsByTagName !== "undefined") { 1215 return context.getElementsByTagName(tag); 1216 1217 // DocumentFragment nodes don't have gEBTN 1218 } else if (support.qsa) { 1219 return context.querySelectorAll(tag); 1220 } 1221 } : function (tag, context) { 1222 var elem, 1223 tmp = [], 1224 i = 0, 1225 1226 // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too 1227 results = context.getElementsByTagName(tag); 1228 1229 // Filter out possible comments 1230 if (tag === "*") { 1231 while (elem = results[i++]) { 1232 if (elem.nodeType === 1) { 1233 tmp.push(elem); 1234 } 1235 } 1236 1237 return tmp; 1238 } 1239 return results; 1240 }; 1241 1242 // Class 1243 Expr.find["CLASS"] = support.getElementsByClassName && function (className, context) { 1244 if (typeof context.getElementsByClassName !== "undefined" && documentIsHTML) { 1245 return context.getElementsByClassName(className); 1246 } 1247 }; 1248 1249 /* QSA/matchesSelector 1250 ---------------------------------------------------------------------- */ 1251 1252 // QSA and matchesSelector support 1253 1254 // matchesSelector(:active) reports false when true (IE9/Opera 11.5) 1255 rbuggyMatches = []; 1256 1257 // qSa(:focus) reports false when true (Chrome 21) 1258 // We allow this because of a bug in IE8/9 that throws an error 1259 // whenever `document.activeElement` is accessed on an iframe 1260 // So, we allow :focus to pass through QSA all the time to avoid the IE error 1261 // See http://bugs.jquery.com/ticket/13378 1262 rbuggyQSA = []; 1263 1264 if (support.qsa = rnative.test(document.querySelectorAll)) { 1265 // Build QSA regex 1266 // Regex strategy adopted from Diego Perini 1267 assert(function (div) { 1268 // Select is set to empty string on purpose 1269 // This is to test IE's treatment of not explicitly 1270 // setting a boolean content attribute, 1271 // since its presence should be enough 1272 // http://bugs.jquery.com/ticket/12359 1273 docElem.appendChild(div).innerHTML = "<a id='" + expando + "'></a>" + "<select id='" + expando + "-\r\\' msallowcapture=''>" + "<option selected=''></option></select>"; 1274 1275 // Support: IE8, Opera 11-12.16 1276 // Nothing should be selected when empty strings follow ^= or $= or *= 1277 // The test attribute must be unknown in Opera but "safe" for WinRT 1278 // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section 1279 if (div.querySelectorAll("[msallowcapture^='']").length) { 1280 rbuggyQSA.push("[*^$]=" + whitespace + "*(?:''|\"\")"); 1281 } 1282 1283 // Support: IE8 1284 // Boolean attributes and "value" are not treated correctly 1285 if (!div.querySelectorAll("[selected]").length) { 1286 rbuggyQSA.push("\\[" + whitespace + "*(?:value|" + booleans + ")"); 1287 } 1288 1289 // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ 1290 if (!div.querySelectorAll("[id~=" + expando + "-]").length) { 1291 rbuggyQSA.push("~="); 1292 } 1293 1294 // Webkit/Opera - :checked should return selected option elements 1295 // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked 1296 // IE8 throws error here and will not see later tests 1297 if (!div.querySelectorAll(":checked").length) { 1298 rbuggyQSA.push(":checked"); 1299 } 1300 1301 // Support: Safari 8+, iOS 8+ 1302 // https://bugs.webkit.org/show_bug.cgi?id=136851 1303 // In-page `selector#id sibing-combinator selector` fails 1304 if (!div.querySelectorAll("a#" + expando + "+*").length) { 1305 rbuggyQSA.push(".#.+[+~]"); 1306 } 1307 }); 1308 1309 assert(function (div) { 1310 // Support: Windows 8 Native Apps 1311 // The type and name attributes are restricted during .innerHTML assignment 1312 var input = document.createElement("input"); 1313 input.setAttribute("type", "hidden"); 1314 div.appendChild(input).setAttribute("name", "D"); 1315 1316 // Support: IE8 1317 // Enforce case-sensitivity of name attribute 1318 if (div.querySelectorAll("[name=d]").length) { 1319 rbuggyQSA.push("name" + whitespace + "*[*^$|!~]?="); 1320 } 1321 1322 // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) 1323 // IE8 throws error here and will not see later tests 1324 if (!div.querySelectorAll(":enabled").length) { 1325 rbuggyQSA.push(":enabled", ":disabled"); 1326 } 1327 1328 // Opera 10-11 does not throw on post-comma invalid pseudos 1329 div.querySelectorAll("*,:x"); 1330 rbuggyQSA.push(",.*:"); 1331 }); 1332 } 1333 1334 if (support.matchesSelector = rnative.test(matches = docElem.matches || docElem.webkitMatchesSelector || docElem.mozMatchesSelector || docElem.oMatchesSelector || docElem.msMatchesSelector)) { 1335 1336 assert(function (div) { 1337 // Check to see if it's possible to do matchesSelector 1338 // on a disconnected node (IE 9) 1339 support.disconnectedMatch = matches.call(div, "div"); 1340 1341 // This should fail with an exception 1342 // Gecko does not error, returns false instead 1343 matches.call(div, "[s!='']:x"); 1344 rbuggyMatches.push("!=", pseudos); 1345 }); 1346 } 1347 1348 rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join("|")); 1349 rbuggyMatches = rbuggyMatches.length && new RegExp(rbuggyMatches.join("|")); 1350 1351 /* Contains 1352 ---------------------------------------------------------------------- */ 1353 hasCompare = rnative.test(docElem.compareDocumentPosition); 1354 1355 // Element contains another 1356 // Purposefully self-exclusive 1357 // As in, an element does not contain itself 1358 contains = hasCompare || rnative.test(docElem.contains) ? function (a, b) { 1359 var adown = a.nodeType === 9 ? a.documentElement : a, 1360 bup = b && b.parentNode; 1361 return a === bup || !!(bup && bup.nodeType === 1 && (adown.contains ? adown.contains(bup) : a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16)); 1362 } : function (a, b) { 1363 if (b) { 1364 while (b = b.parentNode) { 1365 if (b === a) { 1366 return true; 1367 } 1368 } 1369 } 1370 return false; 1371 }; 1372 1373 /* Sorting 1374 ---------------------------------------------------------------------- */ 1375 1376 // Document order sorting 1377 sortOrder = hasCompare ? function (a, b) { 1378 1379 // Flag for duplicate removal 1380 if (a === b) { 1381 hasDuplicate = true; 1382 return 0; 1383 } 1384 1385 // Sort on method existence if only one input has compareDocumentPosition 1386 var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; 1387 if (compare) { 1388 return compare; 1389 } 1390 1391 // Calculate position if both inputs belong to the same document 1392 compare = (a.ownerDocument || a) === (b.ownerDocument || b) ? a.compareDocumentPosition(b) : 1393 1394 // Otherwise we know they are disconnected 1395 1; 1396 1397 // Disconnected nodes 1398 if (compare & 1 || !support.sortDetached && b.compareDocumentPosition(a) === compare) { 1399 1400 // Choose the first element that is related to our preferred document 1401 if (a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a)) { 1402 return -1; 1403 } 1404 if (b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b)) { 1405 return 1; 1406 } 1407 1408 // Maintain original order 1409 return sortInput ? indexOf(sortInput, a) - indexOf(sortInput, b) : 0; 1410 } 1411 1412 return compare & 4 ? -1 : 1; 1413 } : function (a, b) { 1414 // Exit early if the nodes are identical 1415 if (a === b) { 1416 hasDuplicate = true; 1417 return 0; 1418 } 1419 1420 var cur, 1421 i = 0, 1422 aup = a.parentNode, 1423 bup = b.parentNode, 1424 ap = [a], 1425 bp = [b]; 1426 1427 // Parentless nodes are either documents or disconnected 1428 if (!aup || !bup) { 1429 return a === document ? -1 : b === document ? 1 : aup ? -1 : bup ? 1 : sortInput ? indexOf(sortInput, a) - indexOf(sortInput, b) : 0; 1430 1431 // If the nodes are siblings, we can do a quick check 1432 } else if (aup === bup) { 1433 return siblingCheck(a, b); 1434 } 1435 1436 // Otherwise we need full lists of their ancestors for comparison 1437 cur = a; 1438 while (cur = cur.parentNode) { 1439 ap.unshift(cur); 1440 } 1441 cur = b; 1442 while (cur = cur.parentNode) { 1443 bp.unshift(cur); 1444 } 1445 1446 // Walk down the tree looking for a discrepancy 1447 while (ap[i] === bp[i]) { 1448 i++; 1449 } 1450 1451 return i ? 1452 // Do a sibling check if the nodes have a common ancestor 1453 siblingCheck(ap[i], bp[i]) : 1454 1455 // Otherwise nodes in our document sort first 1456 ap[i] === preferredDoc ? -1 : bp[i] === preferredDoc ? 1 : 0; 1457 }; 1458 1459 return document; 1460 }; 1461 1462 Sizzle.matches = function (expr, elements) { 1463 return Sizzle(expr, null, null, elements); 1464 }; 1465 1466 Sizzle.matchesSelector = function (elem, expr) { 1467 // Set document vars if needed 1468 if ((elem.ownerDocument || elem) !== document) { 1469 setDocument(elem); 1470 } 1471 1472 // Make sure that attribute selectors are quoted 1473 expr = expr.replace(rattributeQuotes, "='$1']"); 1474 1475 if (support.matchesSelector && documentIsHTML && !compilerCache[expr + " "] && (!rbuggyMatches || !rbuggyMatches.test(expr)) && (!rbuggyQSA || !rbuggyQSA.test(expr))) { 1476 1477 try { 1478 var ret = matches.call(elem, expr); 1479 1480 // IE 9's matchesSelector returns false on disconnected nodes 1481 if (ret || support.disconnectedMatch || 1482 // As well, disconnected nodes are said to be in a document 1483 // fragment in IE 9 1484 elem.document && elem.document.nodeType !== 11) { 1485 return ret; 1486 } 1487 } catch (e) {} 1488 } 1489 1490 return Sizzle(expr, document, null, [elem]).length > 0; 1491 }; 1492 1493 Sizzle.contains = function (context, elem) { 1494 // Set document vars if needed 1495 if ((context.ownerDocument || context) !== document) { 1496 setDocument(context); 1497 } 1498 return contains(context, elem); 1499 }; 1500 1501 Sizzle.attr = function (elem, name) { 1502 // Set document vars if needed 1503 if ((elem.ownerDocument || elem) !== document) { 1504 setDocument(elem); 1505 } 1506 1507 var fn = Expr.attrHandle[name.toLowerCase()], 1508 1509 // Don't get fooled by Object.prototype properties (jQuery #13807) 1510 val = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ? fn(elem, name, !documentIsHTML) : undefined; 1511 1512 return val !== undefined ? val : support.attributes || !documentIsHTML ? elem.getAttribute(name) : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null; 1513 }; 1514 1515 Sizzle.error = function (msg) { 1516 throw new Error("Syntax error, unrecognized expression: " + msg); 1517 }; 1518 1519 /** 1520 * Document sorting and removing duplicates 1521 * @param {ArrayLike} results 1522 */ 1523 Sizzle.uniqueSort = function (results) { 1524 var elem, 1525 duplicates = [], 1526 j = 0, 1527 i = 0; 1528 1529 // Unless we *know* we can detect duplicates, assume their presence 1530 hasDuplicate = !support.detectDuplicates; 1531 sortInput = !support.sortStable && results.slice(0); 1532 results.sort(sortOrder); 1533
vendor: 12,805 bytes, lines 1534-1940
1534 if (hasDuplicate) { 1535 while (elem = results[i++]) { 1536 if (elem === results[i]) { 1537 j = duplicates.push(i); 1538 } 1539 } 1540 while (j--) { 1541 results.splice(duplicates[j], 1); 1542 } 1543 } 1544 1545 // Clear input after sorting to release objects 1546 // See https://github.com/jquery/sizzle/pull/225 1547 sortInput = null; 1548 1549 return results; 1550 }; 1551 1552 /** 1553 * Utility function for retrieving the text value of an array of DOM nodes 1554 * @param {Array|Element} elem 1555 */ 1556 getText = Sizzle.getText = function (elem) { 1557 var node, 1558 ret = "", 1559 i = 0, 1560 nodeType = elem.nodeType; 1561 1562 if (!nodeType) { 1563 // If no nodeType, this is expected to be an array 1564 while (node = elem[i++]) { 1565 // Do not traverse comment nodes 1566 ret += getText(node); 1567 } 1568 } else if (nodeType === 1 || nodeType === 9 || nodeType === 11) { 1569 // Use textContent for elements 1570 // innerText usage removed for consistency of new lines (jQuery #11153) 1571 if (typeof elem.textContent === "string") { 1572 return elem.textContent; 1573 } else { 1574 // Traverse its children 1575 for (elem = elem.firstChild; elem; elem = elem.nextSibling) { 1576 ret += getText(elem); 1577 } 1578 } 1579 } else if (nodeType === 3 || nodeType === 4) { 1580 return elem.nodeValue; 1581 } 1582 // Do not include comment or processing instruction nodes 1583 1584 return ret; 1585 }; 1586 1587 Expr = Sizzle.selectors = { 1588 1589 // Can be adjusted by the user 1590 cacheLength: 50, 1591 1592 createPseudo: markFunction, 1593 1594 match: matchExpr, 1595 1596 attrHandle: {}, 1597 1598 find: {}, 1599 1600 relative: { 1601 ">": { dir: "parentNode", first: true }, 1602 " ": { dir: "parentNode" }, 1603 "+": { dir: "previousSibling", first: true }, 1604 "~": { dir: "previousSibling" } 1605 }, 1606 1607 preFilter: { 1608 "ATTR": function (match) { 1609 match[1] = match[1].replace(runescape, funescape); 1610 1611 // Move the given value to match[3] whether quoted or unquoted 1612 match[3] = (match[3] || match[4] || match[5] || "").replace(runescape, funescape); 1613 1614 if (match[2] === "~=") { 1615 match[3] = " " + match[3] + " "; 1616 } 1617 1618 return match.slice(0, 4); 1619 }, 1620 1621 "CHILD": function (match) { 1622 /* matches from matchExpr["CHILD"] 1623 1 type (only|nth|...) 1624 2 what (child|of-type) 1625 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) 1626 4 xn-component of xn+y argument ([+-]?\d*n|) 1627 5 sign of xn-component 1628 6 x of xn-component 1629 7 sign of y-component 1630 8 y of y-component 1631 */ 1632 match[1] = match[1].toLowerCase(); 1633 1634 if (match[1].slice(0, 3) === "nth") { 1635 // nth-* requires argument 1636 if (!match[3]) { 1637 Sizzle.error(match[0]); 1638 } 1639 1640 // numeric x and y parameters for Expr.filter.CHILD 1641 // remember that false/true cast respectively to 0/1 1642 match[4] = +(match[4] ? match[5] + (match[6] || 1) : 2 * (match[3] === "even" || match[3] === "odd")); 1643 match[5] = +(match[7] + match[8] || match[3] === "odd"); 1644 1645 // other types prohibit arguments 1646 } else if (match[3]) { 1647 Sizzle.error(match[0]); 1648 } 1649 1650 return match; 1651 }, 1652 1653 "PSEUDO": function (match) { 1654 var excess, 1655 unquoted = !match[6] && match[2]; 1656 1657 if (matchExpr["CHILD"].test(match[0])) { 1658 return null; 1659 } 1660 1661 // Accept quoted arguments as-is 1662 if (match[3]) { 1663 match[2] = match[4] || match[5] || ""; 1664 1665 // Strip excess characters from unquoted arguments 1666 } else if (unquoted && rpseudo.test(unquoted) && ( 1667 // Get excess from tokenize (recursively) 1668 excess = tokenize(unquoted, true)) && ( 1669 // advance to the next closing parenthesis 1670 excess = unquoted.indexOf(")", unquoted.length - excess) - unquoted.length)) { 1671 1672 // excess is a negative index 1673 match[0] = match[0].slice(0, excess); 1674 match[2] = unquoted.slice(0, excess); 1675 } 1676 1677 // Return only captures needed by the pseudo filter method (type and argument) 1678 return match.slice(0, 3); 1679 } 1680 }, 1681 1682 filter: { 1683 1684 "TAG": function (nodeNameSelector) { 1685 var nodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase(); 1686 return nodeNameSelector === "*" ? function () { 1687 return true; 1688 } : function (elem) { 1689 return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; 1690 }; 1691 }, 1692 1693 "CLASS": function (className) { 1694 var pattern = classCache[className + " "]; 1695 1696 return pattern || (pattern = new RegExp("(^|" + whitespace + ")" + className + "(" + whitespace + "|$)")) && classCache(className, function (elem) { 1697 return pattern.test(typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || ""); 1698 }); 1699 }, 1700 1701 "ATTR": function (name, operator, check) { 1702 return function (elem) { 1703 var result = Sizzle.attr(elem, name); 1704 1705 if (result == null) { 1706 return operator === "!="; 1707 } 1708 if (!operator) { 1709 return true; 1710 } 1711 1712 result += ""; 1713 1714 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; 1715 }; 1716 }, 1717 1718 "CHILD": function (type, what, argument, first, last) { 1719 var simple = type.slice(0, 3) !== "nth", 1720 forward = type.slice(-4) !== "last", 1721 ofType = what === "of-type"; 1722 1723 return first === 1 && last === 0 ? 1724 1725 // Shortcut for :nth-*(n) 1726 function (elem) { 1727 return !!elem.parentNode; 1728 } : function (elem, context, xml) { 1729 var cache, 1730 uniqueCache, 1731 outerCache, 1732 node, 1733 nodeIndex, 1734 start, 1735 dir = simple !== forward ? "nextSibling" : "previousSibling", 1736 parent = elem.parentNode, 1737 name = ofType && elem.nodeName.toLowerCase(), 1738 useCache = !xml && !ofType, 1739 diff = false; 1740 1741 if (parent) { 1742 1743 // :(first|last|only)-(child|of-type) 1744 if (simple) { 1745 while (dir) { 1746 node = elem; 1747 while (node = node[dir]) { 1748 if (ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) { 1749 1750 return false; 1751 } 1752 } 1753 // Reverse direction for :only-* (if we haven't yet done so) 1754 start = dir = type === "only" && !start && "nextSibling"; 1755 } 1756 return true; 1757 } 1758 1759 start = [forward ? parent.firstChild : parent.lastChild]; 1760 1761 // non-xml :nth-child(...) stores cache data on `parent` 1762 if (forward && useCache) { 1763 1764 // Seek `elem` from a previously-cached index 1765 1766 // ...in a gzip-friendly way 1767 node = parent; 1768 outerCache = node[expando] || (node[expando] = {}); 1769 1770 // Support: IE <9 only 1771 // Defend against cloned attroperties (jQuery gh-1709) 1772 uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {}); 1773 1774 cache = uniqueCache[type] || []; 1775 nodeIndex = cache[0] === dirruns && cache[1]; 1776 diff = nodeIndex && cache[2]; 1777 node = nodeIndex && parent.childNodes[nodeIndex]; 1778 1779 while (node = ++nodeIndex && node && node[dir] || ( 1780 1781 // Fallback to seeking `elem` from the start 1782 diff = nodeIndex = 0) || start.pop()) { 1783 1784 // When found, cache indexes on `parent` and break 1785 if (node.nodeType === 1 && ++diff && node === elem) { 1786 uniqueCache[type] = [dirruns, nodeIndex, diff]; 1787 break; 1788 } 1789 } 1790 } else { 1791 // Use previously-cached element index if available 1792 if (useCache) { 1793 // ...in a gzip-friendly way 1794 node = elem; 1795 outerCache = node[expando] || (node[expando] = {}); 1796 1797 // Support: IE <9 only 1798 // Defend against cloned attroperties (jQuery gh-1709) 1799 uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {}); 1800 1801 cache = uniqueCache[type] || []; 1802 nodeIndex = cache[0] === dirruns && cache[1]; 1803 diff = nodeIndex; 1804 } 1805 1806 // xml :nth-child(...) 1807 // or :nth-last-child(...) or :nth(-last)?-of-type(...) 1808 if (diff === false) { 1809 // Use the same loop as above to seek `elem` from the start 1810 while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) { 1811 1812 if ((ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) && ++diff) { 1813 1814 // Cache the index of each encountered element 1815 if (useCache) { 1816 outerCache = node[expando] || (node[expando] = {}); 1817 1818 // Support: IE <9 only 1819 // Defend against cloned attroperties (jQuery gh-1709) 1820 uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {}); 1821 1822 uniqueCache[type] = [dirruns, diff]; 1823 } 1824 1825 if (node === elem) { 1826 break; 1827 } 1828 } 1829 } 1830 } 1831 } 1832 1833 // Incorporate the offset, then check against cycle size 1834 diff -= last; 1835 return diff === first || diff % first === 0 && diff / first >= 0; 1836 } 1837 }; 1838 }, 1839 1840 "PSEUDO": function (pseudo, argument) { 1841 // pseudo-class names are case-insensitive 1842 // http://www.w3.org/TR/selectors/#pseudo-classes 1843 // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters 1844 // Remember that setFilters inherits from pseudos 1845 var args, 1846 fn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] || Sizzle.error("unsupported pseudo: " + pseudo); 1847 1848 // The user may use createPseudo to indicate that 1849 // arguments are needed to create the filter function 1850 // just as Sizzle does 1851 if (fn[expando]) { 1852 return fn(argument); 1853 } 1854 1855 // But maintain support for old signatures 1856 if (fn.length > 1) { 1857 args = [pseudo, pseudo, "", argument]; 1858 return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ? markFunction(function (seed, matches) { 1859 var idx, 1860 matched = fn(seed, argument), 1861 i = matched.length; 1862 while (i--) { 1863 idx = indexOf(seed, matched[i]); 1864 seed[idx] = !(matches[idx] = matched[i]); 1865 } 1866 }) : function (elem) { 1867 return fn(elem, 0, args); 1868 }; 1869 } 1870 1871 return fn; 1872 } 1873 }, 1874 1875 pseudos: { 1876 // Potentially complex pseudos 1877 "not": markFunction(function (selector) { 1878 // Trim the selector passed to compile 1879 // to avoid treating leading and trailing 1880 // spaces as combinators 1881 var input = [], 1882 results = [], 1883 matcher = compile(selector.replace(rtrim, "$1")); 1884 1885 return matcher[expando] ? markFunction(function (seed, matches, context, xml) { 1886 var elem, 1887 unmatched = matcher(seed, null, xml, []), 1888 i = seed.length; 1889 1890 // Match elements unmatched by `matcher` 1891 while (i--) { 1892 if (elem = unmatched[i]) { 1893 seed[i] = !(matches[i] = elem); 1894 } 1895 } 1896 }) : function (elem, context, xml) { 1897 input[0] = elem; 1898 matcher(input, null, xml, results); 1899 // Don't keep the element (issue #299) 1900 input[0] = null; 1901 return !results.pop(); 1902 }; 1903 }), 1904 1905 "has": markFunction(function (selector) { 1906 return function (elem) { 1907 return Sizzle(selector, elem).length > 0; 1908 }; 1909 }), 1910 1911 "contains": markFunction(function (text) { 1912 text = text.replace(runescape, funescape); 1913 return function (elem) { 1914 return (elem.textContent || elem.innerText || getText(elem)).indexOf(text) > -1; 1915 }; 1916 }), 1917 1918 // "Whether an element is represented by a :lang() selector 1919 // is based solely on the element's language value 1920 // being equal to the identifier C, 1921 // or beginning with the identifier C immediately followed by "-". 1922 // The matching of C against the element's language value is performed case-insensitively. 1923 // The identifier C does not have to be a valid language name." 1924 // http://www.w3.org/TR/selectors/#lang-pseudo 1925 "lang": markFunction(function (lang) { 1926 // lang value must be a valid identifier 1927 if (!ridentifier.test(lang || "")) { 1928 Sizzle.error("unsupported lang: " + lang); 1929 } 1930 lang = lang.replace(runescape, funescape).toLowerCase(); 1931 return function (elem) { 1932 var elemLang; 1933 do { 1934 if (elemLang = documentIsHTML ? elem.lang : elem.getAttribute("xml:lang") || elem.getAttribute("lang")) { 1935 1936 elemLang = elemLang.toLowerCase(); 1937 return elemLang === lang || elemLang.indexOf(lang + "-") === 0; 1938 } 1939 } while ((elem = elem.parentNode) && elem.nodeType === 1); 1940 return false;
vendor: 4,299 bytes, lines 1941-2094
1941 }; 1942 }), 1943 1944 // Miscellaneous 1945 "target": function (elem) { 1946 var hash = window.location && window.location.hash; 1947 return hash && hash.slice(1) === elem.id; 1948 }, 1949 1950 "root": function (elem) { 1951 return elem === docElem; 1952 }, 1953 1954 "focus": function (elem) { 1955 return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); 1956 }, 1957 1958 // Boolean properties 1959 "enabled": function (elem) { 1960 return elem.disabled === false; 1961 }, 1962 1963 "disabled": function (elem) { 1964 return elem.disabled === true; 1965 }, 1966 1967 "checked": function (elem) { 1968 // In CSS3, :checked should return both checked and selected elements 1969 // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked 1970 var nodeName = elem.nodeName.toLowerCase(); 1971 return nodeName === "input" && !!elem.checked || nodeName === "option" && !!elem.selected; 1972 }, 1973 1974 "selected": function (elem) { 1975 // Accessing this property makes selected-by-default 1976 // options in Safari work properly 1977 if (elem.parentNode) { 1978 elem.parentNode.selectedIndex; 1979 } 1980 1981 return elem.selected === true; 1982 }, 1983 1984 // Contents 1985 "empty": function (elem) { 1986 // http://www.w3.org/TR/selectors/#empty-pseudo 1987 // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), 1988 // but not by others (comment: 8; processing instruction: 7; etc.) 1989 // nodeType < 6 works because attributes (2) do not appear as children 1990 for (elem = elem.firstChild; elem; elem = elem.nextSibling) { 1991 if (elem.nodeType < 6) { 1992 return false; 1993 } 1994 } 1995 return true; 1996 }, 1997 1998 "parent": function (elem) { 1999 return !Expr.pseudos["empty"](elem); 2000 }, 2001 2002 // Element/input types 2003 "header": function (elem) { 2004 return rheader.test(elem.nodeName); 2005 }, 2006 2007 "input": function (elem) { 2008 return rinputs.test(elem.nodeName); 2009 }, 2010 2011 "button": function (elem) { 2012 var name = elem.nodeName.toLowerCase(); 2013 return name === "input" && elem.type === "button" || name === "button"; 2014 }, 2015 2016 "text": function (elem) { 2017 var attr; 2018 return elem.nodeName.toLowerCase() === "input" && elem.type === "text" && ( 2019 2020 // Support: IE<8 2021 // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" 2022 (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text"); 2023 }, 2024 2025 // Position-in-collection 2026 "first": createPositionalPseudo(function () { 2027 return [0]; 2028 }), 2029 2030 "last": createPositionalPseudo(function (matchIndexes, length) { 2031 return [length - 1]; 2032 }), 2033 2034 "eq": createPositionalPseudo(function (matchIndexes, length, argument) { 2035 return [argument < 0 ? argument + length : argument]; 2036 }), 2037 2038 "even": createPositionalPseudo(function (matchIndexes, length) { 2039 var i = 0; 2040 for (; i < length; i += 2) { 2041 matchIndexes.push(i); 2042 } 2043 return matchIndexes; 2044 }), 2045 2046 "odd": createPositionalPseudo(function (matchIndexes, length) { 2047 var i = 1; 2048 for (; i < length; i += 2) { 2049 matchIndexes.push(i); 2050 } 2051 return matchIndexes; 2052 }), 2053 2054 "lt": createPositionalPseudo(function (matchIndexes, length, argument) { 2055 var i = argument < 0 ? argument + length : argument; 2056 for (; --i >= 0;) { 2057 matchIndexes.push(i); 2058 } 2059 return matchIndexes; 2060 }), 2061 2062 "gt": createPositionalPseudo(function (matchIndexes, length, argument) { 2063 var i = argument < 0 ? argument + length : argument; 2064 for (; ++i < length;) { 2065 matchIndexes.push(i); 2066 } 2067 return matchIndexes; 2068 }) 2069 } 2070 }; 2071 2072 Expr.pseudos["nth"] = Expr.pseudos["eq"]; 2073 2074 // Add button/input type pseudos 2075 for (i in { radio: true, checkbox: true, file: true, password: true, image: true }) { 2076 Expr.pseudos[i] = createInputPseudo(i); 2077 } 2078 for (i in { submit: true, reset: true }) { 2079 Expr.pseudos[i] = createButtonPseudo(i); 2080 } 2081 2082 // Easy API for creating new setFilters 2083 function setFilters() {} 2084 setFilters.prototype = Expr.filters = Expr.pseudos; 2085 Expr.setFilters = new setFilters(); 2086 2087 tokenize = Sizzle.tokenize = function (selector, parseOnly) { 2088 var matched, 2089 match, 2090 tokens, 2091 type, 2092 soFar, 2093 groups, 2094 preFilters,
vendor: 7,182 bytes, lines 2095-2360
2095 cached = tokenCache[selector + " "]; 2096 2097 if (cached) { 2098 return parseOnly ? 0 : cached.slice(0); 2099 } 2100 2101 soFar = selector; 2102 groups = []; 2103 preFilters = Expr.preFilter; 2104 2105 while (soFar) { 2106 2107 // Comma and first run 2108 if (!matched || (match = rcomma.exec(soFar))) { 2109 if (match) { 2110 // Don't consume trailing commas as valid 2111 soFar = soFar.slice(match[0].length) || soFar; 2112 } 2113 groups.push(tokens = []); 2114 } 2115 2116 matched = false; 2117 2118 // Combinators 2119 if (match = rcombinators.exec(soFar)) { 2120 matched = match.shift(); 2121 tokens.push({ 2122 value: matched, 2123 // Cast descendant combinators to space 2124 type: match[0].replace(rtrim, " ") 2125 }); 2126 soFar = soFar.slice(matched.length); 2127 } 2128 2129 // Filters 2130 for (type in Expr.filter) { 2131 if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] || (match = preFilters[type](match)))) { 2132 matched = match.shift(); 2133 tokens.push({ 2134 value: matched, 2135 type: type, 2136 matches: match 2137 }); 2138 soFar = soFar.slice(matched.length); 2139 } 2140 } 2141 2142 if (!matched) { 2143 break; 2144 } 2145 } 2146 2147 // Return the length of the invalid excess 2148 // if we're just parsing 2149 // Otherwise, throw an error or return tokens 2150 return parseOnly ? soFar.length : soFar ? Sizzle.error(selector) : 2151 // Cache the tokens 2152 tokenCache(selector, groups).slice(0); 2153 }; 2154 2155 function toSelector(tokens) { 2156 var i = 0, 2157 len = tokens.length, 2158 selector = ""; 2159 for (; i < len; i++) { 2160 selector += tokens[i].value; 2161 } 2162 return selector; 2163 } 2164 2165 function addCombinator(matcher, combinator, base) { 2166 var dir = combinator.dir, 2167 checkNonElements = base && dir === "parentNode", 2168 doneName = done++; 2169 2170 return combinator.first ? 2171 // Check against closest ancestor/preceding element 2172 function (elem, context, xml) { 2173 while (elem = elem[dir]) { 2174 if (elem.nodeType === 1 || checkNonElements) { 2175 return matcher(elem, context, xml); 2176 } 2177 } 2178 } : 2179 2180 // Check against all ancestor/preceding elements 2181 function (elem, context, xml) { 2182 var oldCache, 2183 uniqueCache, 2184 outerCache, 2185 newCache = [dirruns, doneName]; 2186 2187 // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching 2188 if (xml) { 2189 while (elem = elem[dir]) { 2190 if (elem.nodeType === 1 || checkNonElements) { 2191 if (matcher(elem, context, xml)) { 2192 return true; 2193 } 2194 } 2195 } 2196 } else { 2197 while (elem = elem[dir]) { 2198 if (elem.nodeType === 1 || checkNonElements) { 2199 outerCache = elem[expando] || (elem[expando] = {}); 2200 2201 // Support: IE <9 only 2202 // Defend against cloned attroperties (jQuery gh-1709) 2203 uniqueCache = outerCache[elem.uniqueID] || (outerCache[elem.uniqueID] = {}); 2204 2205 if ((oldCache = uniqueCache[dir]) && oldCache[0] === dirruns && oldCache[1] === doneName) { 2206 2207 // Assign to newCache so results back-propagate to previous elements 2208 return newCache[2] = oldCache[2]; 2209 } else { 2210 // Reuse newcache so results back-propagate to previous elements 2211 uniqueCache[dir] = newCache; 2212 2213 // A match means we're done; a fail means we have to keep checking 2214 if (newCache[2] = matcher(elem, context, xml)) { 2215 return true; 2216 } 2217 } 2218 } 2219 } 2220 } 2221 }; 2222 } 2223 2224 function elementMatcher(matchers) { 2225 return matchers.length > 1 ? function (elem, context, xml) { 2226 var i = matchers.length; 2227 while (i--) { 2228 if (!matchers[i](elem, context, xml)) { 2229 return false; 2230 } 2231 } 2232 return true; 2233 } : matchers[0]; 2234 } 2235 2236 function multipleContexts(selector, contexts, results) { 2237 var i = 0, 2238 len = contexts.length; 2239 for (; i < len; i++) { 2240 Sizzle(selector, contexts[i], results); 2241 } 2242 return results; 2243 } 2244 2245 function condense(unmatched, map, filter, context, xml) { 2246 var elem, 2247 newUnmatched = [], 2248 i = 0, 2249 len = unmatched.length, 2250 mapped = map != null; 2251 2252 for (; i < len; i++) { 2253 if (elem = unmatched[i]) { 2254 if (!filter || filter(elem, context, xml)) { 2255 newUnmatched.push(elem); 2256 if (mapped) { 2257 map.push(i); 2258 } 2259 } 2260 } 2261 } 2262 2263 return newUnmatched; 2264 } 2265 2266 function setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) { 2267 if (postFilter && !postFilter[expando]) { 2268 postFilter = setMatcher(postFilter); 2269 } 2270 if (postFinder && !postFinder[expando]) { 2271 postFinder = setMatcher(postFinder, postSelector); 2272 } 2273 return markFunction(function (seed, results, context, xml) { 2274 var temp, 2275 i, 2276 elem, 2277 preMap = [], 2278 postMap = [], 2279 preexisting = results.length, 2280 2281 2282 // Get initial elements from seed or context 2283 elems = seed || multipleContexts(selector || "*", context.nodeType ? [context] : context, []), 2284 2285 2286 // Prefilter to get matcher input, preserving a map for seed-results synchronization 2287 matcherIn = preFilter && (seed || !selector) ? condense(elems, preMap, preFilter, context, xml) : elems, 2288 matcherOut = matcher ? 2289 // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, 2290 postFinder || (seed ? preFilter : preexisting || postFilter) ? 2291 2292 // ...intermediate processing is necessary 2293 [] : 2294 2295 // ...otherwise use results directly 2296 results : matcherIn; 2297 2298 // Find primary matches 2299 if (matcher) { 2300 matcher(matcherIn, matcherOut, context, xml); 2301 } 2302 2303 // Apply postFilter 2304 if (postFilter) { 2305 temp = condense(matcherOut, postMap); 2306 postFilter(temp, [], context, xml); 2307 2308 // Un-match failing elements by moving them back to matcherIn 2309 i = temp.length; 2310 while (i--) { 2311 if (elem = temp[i]) { 2312 matcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem); 2313 } 2314 } 2315 } 2316 2317 if (seed) { 2318 if (postFinder || preFilter) { 2319 if (postFinder) { 2320 // Get the final matcherOut by condensing this intermediate into postFinder contexts 2321 temp = []; 2322 i = matcherOut.length; 2323 while (i--) { 2324 if (elem = matcherOut[i]) { 2325 // Restore matcherIn since elem is not yet a final match 2326 temp.push(matcherIn[i] = elem); 2327 } 2328 } 2329 postFinder(null, matcherOut = [], temp, xml); 2330 } 2331 2332 // Move matched elements from seed to results to keep them synchronized 2333 i = matcherOut.length; 2334 while (i--) { 2335 if ((elem = matcherOut[i]) && (temp = postFinder ? indexOf(seed, elem) : preMap[i]) > -1) { 2336 2337 seed[temp] = !(results[temp] = elem); 2338 } 2339 } 2340 } 2341 2342 // Add elements to results, through postFinder if defined 2343 } else { 2344 matcherOut = condense(matcherOut === results ? matcherOut.splice(preexisting, matcherOut.length) : matcherOut); 2345 if (postFinder) { 2346 postFinder(null, results, matcherOut, xml); 2347 } else { 2348 push.apply(results, matcherOut); 2349 } 2350 } 2351 }); 2352 } 2353 2354 function matcherFromTokens(tokens) { 2355 var checkContext, 2356 matcher, 2357 j, 2358 len = tokens.length, 2359 leadingRelative = Expr.relative[tokens[0].type], 2360 implicitRelative = leadingRelative || Expr.relative[" "],
vendor: 7,952 bytes, lines 2361-2597
2361 i = leadingRelative ? 1 : 0, 2362 2363 2364 // The foundational matcher ensures that elements are reachable from top-level context(s) 2365 matchContext = addCombinator(function (elem) { 2366 return elem === checkContext; 2367 }, implicitRelative, true), 2368 matchAnyContext = addCombinator(function (elem) { 2369 return indexOf(checkContext, elem) > -1; 2370 }, implicitRelative, true), 2371 matchers = [function (elem, context, xml) { 2372 var ret = !leadingRelative && (xml || context !== outermostContext) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml)); 2373 // Avoid hanging onto element (issue #299) 2374 checkContext = null; 2375 return ret; 2376 }]; 2377 2378 for (; i < len; i++) { 2379 if (matcher = Expr.relative[tokens[i].type]) { 2380 matchers = [addCombinator(elementMatcher(matchers), matcher)]; 2381 } else { 2382 matcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches); 2383 2384 // Return special upon seeing a positional matcher 2385 if (matcher[expando]) { 2386 // Find the next relative operator (if any) for proper handling 2387 j = ++i; 2388 for (; j < len; j++) { 2389 if (Expr.relative[tokens[j].type]) { 2390 break; 2391 } 2392 } 2393 return setMatcher(i > 1 && elementMatcher(matchers), i > 1 && toSelector( 2394 // If the preceding token was a descendant combinator, insert an implicit any-element `*` 2395 tokens.slice(0, i - 1).concat({ value: tokens[i - 2].type === " " ? "*" : "" })).replace(rtrim, "$1"), matcher, i < j && matcherFromTokens(tokens.slice(i, j)), j < len && matcherFromTokens(tokens = tokens.slice(j)), j < len && toSelector(tokens)); 2396 } 2397 matchers.push(matcher); 2398 } 2399 } 2400 2401 return elementMatcher(matchers); 2402 } 2403 2404 function matcherFromGroupMatchers(elementMatchers, setMatchers) { 2405 var bySet = setMatchers.length > 0, 2406 byElement = elementMatchers.length > 0, 2407 superMatcher = function (seed, context, xml, results, outermost) { 2408 var elem, 2409 j, 2410 matcher, 2411 matchedCount = 0, 2412 i = "0", 2413 unmatched = seed && [], 2414 setMatched = [], 2415 contextBackup = outermostContext, 2416 2417 // We must always have either seed elements or outermost context 2418 elems = seed || byElement && Expr.find["TAG"]("*", outermost), 2419 2420 // Use integer dirruns iff this is the outermost matcher 2421 dirrunsUnique = dirruns += contextBackup == null ? 1 : Math.random() || 0.1, 2422 len = elems.length; 2423 2424 if (outermost) { 2425 outermostContext = context === document || context || outermost; 2426 } 2427 2428 // Add elements passing elementMatchers directly to results 2429 // Support: IE<9, Safari 2430 // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id 2431 for (; i !== len && (elem = elems[i]) != null; i++) { 2432 if (byElement && elem) { 2433 j = 0; 2434 if (!context && elem.ownerDocument !== document) { 2435 setDocument(elem); 2436 xml = !documentIsHTML; 2437 } 2438 while (matcher = elementMatchers[j++]) { 2439 if (matcher(elem, context || document, xml)) { 2440 results.push(elem); 2441 break; 2442 } 2443 } 2444 if (outermost) { 2445 dirruns = dirrunsUnique; 2446 } 2447 } 2448 2449 // Track unmatched elements for set filters 2450 if (bySet) { 2451 // They will have gone through all possible matchers 2452 if (elem = !matcher && elem) { 2453 matchedCount--; 2454 } 2455 2456 // Lengthen the array for every element, matched or not 2457 if (seed) { 2458 unmatched.push(elem); 2459 } 2460 } 2461 } 2462 2463 // `i` is now the count of elements visited above, and adding it to `matchedCount` 2464 // makes the latter nonnegative. 2465 matchedCount += i; 2466 2467 // Apply set filters to unmatched elements 2468 // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` 2469 // equals `i`), unless we didn't visit _any_ elements in the above loop because we have 2470 // no element matchers and no seed. 2471 // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that 2472 // case, which will result in a "00" `matchedCount` that differs from `i` but is also 2473 // numerically zero. 2474 if (bySet && i !== matchedCount) { 2475 j = 0; 2476 while (matcher = setMatchers[j++]) { 2477 matcher(unmatched, setMatched, context, xml); 2478 } 2479 2480 if (seed) { 2481 // Reintegrate element matches to eliminate the need for sorting 2482 if (matchedCount > 0) { 2483 while (i--) { 2484 if (!(unmatched[i] || setMatched[i])) { 2485 setMatched[i] = pop.call(results); 2486 } 2487 } 2488 } 2489 2490 // Discard index placeholder values to get only actual matches 2491 setMatched = condense(setMatched); 2492 } 2493 2494 // Add matches to results 2495 push.apply(results, setMatched); 2496 2497 // Seedless set matches succeeding multiple successful matchers stipulate sorting 2498 if (outermost && !seed && setMatched.length > 0 && matchedCount + setMatchers.length > 1) { 2499 2500 Sizzle.uniqueSort(results); 2501 } 2502 } 2503 2504 // Override manipulation of globals by nested matchers 2505 if (outermost) { 2506 dirruns = dirrunsUnique; 2507 outermostContext = contextBackup; 2508 } 2509 2510 return unmatched; 2511 }; 2512 2513 return bySet ? markFunction(superMatcher) : superMatcher; 2514 } 2515 2516 compile = Sizzle.compile = function (selector, match /* Internal Use Only */) { 2517 var i, 2518 setMatchers = [], 2519 elementMatchers = [], 2520 cached = compilerCache[selector + " "]; 2521 2522 if (!cached) { 2523 // Generate a function of recursive functions that can be used to check each element 2524 if (!match) { 2525 match = tokenize(selector); 2526 } 2527 i = match.length; 2528 while (i--) { 2529 cached = matcherFromTokens(match[i]); 2530 if (cached[expando]) { 2531 setMatchers.push(cached); 2532 } else { 2533 elementMatchers.push(cached); 2534 } 2535 } 2536 2537 // Cache the compiled function 2538 cached = compilerCache(selector, matcherFromGroupMatchers(elementMatchers, setMatchers)); 2539 2540 // Save selector and tokenization 2541 cached.selector = selector; 2542 } 2543 return cached; 2544 }; 2545 2546 /** 2547 * A low-level selection function that works with Sizzle's compiled 2548 * selector functions 2549 * @param {String|Function} selector A selector or a pre-compiled 2550 * selector function built with Sizzle.compile 2551 * @param {Element} context 2552 * @param {Array} [results] 2553 * @param {Array} [seed] A set of elements to match against 2554 */ 2555 select = Sizzle.select = function (selector, context, results, seed) { 2556 var i, 2557 tokens, 2558 token, 2559 type, 2560 find, 2561 compiled = typeof selector === "function" && selector, 2562 match = !seed && tokenize(selector = compiled.selector || selector); 2563 2564 results = results || []; 2565 2566 // Try to minimize operations if there is only one selector in the list and no seed 2567 // (the latter of which guarantees us context) 2568 if (match.length === 1) { 2569 2570 // Reduce context if the leading compound selector is an ID 2571 tokens = match[0] = match[0].slice(0); 2572 if (tokens.length > 2 && (token = tokens[0]).type === "ID" && support.getById && context.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) { 2573 2574 context = (Expr.find["ID"](token.matches[0].replace(runescape, funescape), context) || [])[0]; 2575 if (!context) { 2576 return results; 2577 2578 // Precompiled matchers will still verify ancestry, so step up a level 2579 } else if (compiled) { 2580 context = context.parentNode; 2581 } 2582 2583 selector = selector.slice(tokens.shift().value.length); 2584 } 2585 2586 // Fetch a seed set for right-to-left matching 2587 i = matchExpr["needsContext"].test(selector) ? 0 : tokens.length; 2588 while (i--) { 2589 token = tokens[i]; 2590 2591 // Abort if we hit a combinator 2592 if (Expr.relative[type = token.type]) { 2593 break; 2594 } 2595 if (find = Expr.find[type]) { 2596 // Search, expanding context for leading sibling combinators 2597 if (seed = find(token.matches[0].replace(runescape, funescape), rsibling.test(tokens[0].type) && testC
vendor: 5,935 bytes, lines 2597-2811
2597ontext(context.parentNode) || context)) { 2598 2599 // If seed is empty or no tokens remain, we can return early 2600 tokens.splice(i, 1); 2601 selector = seed.length && toSelector(tokens); 2602 if (!selector) { 2603 push.apply(results, seed); 2604 return results; 2605 } 2606 2607 break; 2608 } 2609 } 2610 } 2611 } 2612 2613 // Compile and execute a filtering function if one is not provided 2614 // Provide `match` to avoid retokenization if we modified the selector above 2615 (compiled || compile(selector, match))(seed, context, !documentIsHTML, results, !context || rsibling.test(selector) && testContext(context.parentNode) || context); 2616 return results; 2617 }; 2618 2619 // One-time assignments 2620 2621 // Sort stability 2622 support.sortStable = expando.split("").sort(sortOrder).join("") === expando; 2623 2624 // Support: Chrome 14-35+ 2625 // Always assume duplicates if they aren't passed to the comparison function 2626 support.detectDuplicates = !!hasDuplicate; 2627 2628 // Initialize against the default document 2629 setDocument(); 2630 2631 // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) 2632 // Detached nodes confoundingly follow *each other* 2633 support.sortDetached = assert(function (div1) { 2634 // Should return 1, but returns 4 (following) 2635 return div1.compareDocumentPosition(document.createElement("div")) & 1; 2636 }); 2637 2638 // Support: IE<8 2639 // Prevent attribute/property "interpolation" 2640 // http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx 2641 if (!assert(function (div) { 2642 div.innerHTML = "<a href='#'></a>"; 2643 return div.firstChild.getAttribute("href") === "#"; 2644 })) { 2645 addHandle("type|href|height|width", function (elem, name, isXML) { 2646 if (!isXML) { 2647 return elem.getAttribute(name, name.toLowerCase() === "type" ? 1 : 2); 2648 } 2649 }); 2650 } 2651 2652 // Support: IE<9 2653 // Use defaultValue in place of getAttribute("value") 2654 if (!support.attributes || !assert(function (div) { 2655 div.innerHTML = "<input/>"; 2656 div.firstChild.setAttribute("value", ""); 2657 return div.firstChild.getAttribute("value") === ""; 2658 })) { 2659 addHandle("value", function (elem, name, isXML) { 2660 if (!isXML && elem.nodeName.toLowerCase() === "input") { 2661 return elem.defaultValue; 2662 } 2663 }); 2664 } 2665 2666 // Support: IE<9 2667 // Use getAttributeNode to fetch booleans when getAttribute lies 2668 if (!assert(function (div) { 2669 return div.getAttribute("disabled") == null; 2670 })) { 2671 addHandle(booleans, function (elem, name, isXML) { 2672 var val; 2673 if (!isXML) { 2674 return elem[name] === true ? name.toLowerCase() : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null; 2675 } 2676 }); 2677 } 2678 2679 return Sizzle; 2680 }(window); 2681 2682 jQuery.find = Sizzle; 2683 jQuery.expr = Sizzle.selectors; 2684 jQuery.expr[":"] = jQuery.expr.pseudos; 2685 jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; 2686 jQuery.text = Sizzle.getText; 2687 jQuery.isXMLDoc = Sizzle.isXML; 2688 jQuery.contains = Sizzle.contains; 2689 2690 var dir = function (elem, dir, until) { 2691 var matched = [], 2692 truncate = until !== undefined; 2693 2694 while ((elem = elem[dir]) && elem.nodeType !== 9) { 2695 if (elem.nodeType === 1) { 2696 if (truncate && jQuery(elem).is(until)) { 2697 break; 2698 } 2699 matched.push(elem); 2700 } 2701 } 2702 return matched; 2703 }; 2704 2705 var siblings = function (n, elem) { 2706 var matched = []; 2707 2708 for (; n; n = n.nextSibling) { 2709 if (n.nodeType === 1 && n !== elem) { 2710 matched.push(n); 2711 } 2712 } 2713 2714 return matched; 2715 }; 2716 2717 var rneedsContext = jQuery.expr.match.needsContext; 2718 2719 var rsingleTag = /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/; 2720 2721 var risSimple = /^.[^:#\[\.,]*$/; 2722 2723 // Implement the identical functionality for filter and not 2724 function winnow(elements, qualifier, not) { 2725 if (jQuery.isFunction(qualifier)) { 2726 return jQuery.grep(elements, function (elem, i) { 2727 /* jshint -W018 */ 2728 return !!qualifier.call(elem, i, elem) !== not; 2729 }); 2730 } 2731 2732 if (qualifier.nodeType) { 2733 return jQuery.grep(elements, function (elem) { 2734 return elem === qualifier !== not; 2735 }); 2736 } 2737 2738 if (typeof qualifier === "string") { 2739 if (risSimple.test(qualifier)) { 2740 return jQuery.filter(qualifier, elements, not); 2741 } 2742 2743 qualifier = jQuery.filter(qualifier, elements); 2744 } 2745 2746 return jQuery.grep(elements, function (elem) { 2747 return jQuery.inArray(elem, qualifier) > -1 !== not; 2748 }); 2749 } 2750 2751 jQuery.filter = function (expr, elems, not) { 2752 var elem = elems[0]; 2753 2754 if (not) { 2755 expr = ":not(" + expr + ")"; 2756 } 2757 2758 return elems.length === 1 && elem.nodeType === 1 ? jQuery.find.matchesSelector(elem, expr) ? [elem] : [] : jQuery.find.matches(expr, jQuery.grep(elems, function (elem) { 2759 return elem.nodeType === 1; 2760 })); 2761 }; 2762 2763 jQuery.fn.extend({ 2764 find: function (selector) { 2765 var i, 2766 ret = [], 2767 self = this, 2768 len = self.length; 2769 2770 if (typeof selector !== "string") { 2771 return this.pushStack(jQuery(selector).filter(function () { 2772 for (i = 0; i < len; i++) { 2773 if (jQuery.contains(self[i], this)) { 2774 return true; 2775 } 2776 } 2777 })); 2778 } 2779 2780 for (i = 0; i < len; i++) { 2781 jQuery.find(selector, self[i], ret); 2782 } 2783 2784 // Needed because $( selector, context ) becomes $( context ).find( selector ) 2785 ret = this.pushStack(len > 1 ? jQuery.unique(ret) : ret); 2786 ret.selector = this.selector ? this.selector + " " + selector : selector; 2787 return ret; 2788 }, 2789 filter: function (selector) { 2790 return this.pushStack(winnow(this, selector || [], false)); 2791 }, 2792 not: function (selector) { 2793 return this.pushStack(winnow(this, selector || [], true)); 2794 }, 2795 is: function (selector) { 2796 return !!winnow(this, 2797 2798 // If this is a positional/relative selector, check membership in the returned set 2799 // so $("p:first").is("p:last") won't return true for a doc with two "p". 2800 typeof selector === "string" && rneedsContext.test(selector) ? jQuery(selector) : selector || [], false).length; 2801 } 2802 }); 2803 2804 // Initialize a jQuery object 2805 2806 2807 // A central reference to the root jQuery(document) 2808 var rootjQuery, 2809 2810 2811 // A simple way to check for HTML strings
vendor: 9,553 bytes, lines 2812-3168
2812 // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) 2813 // Strict HTML recognition (#11290: must start with <) 2814 rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, 2815 init = jQuery.fn.init = function (selector, context, root) { 2816 var match, elem; 2817 2818 // HANDLE: $(""), $(null), $(undefined), $(false) 2819 if (!selector) { 2820 return this; 2821 } 2822 2823 // init accepts an alternate rootjQuery 2824 // so migrate can support jQuery.sub (gh-2101) 2825 root = root || rootjQuery; 2826 2827 // Handle HTML strings 2828 if (typeof selector === "string") { 2829 if (selector.charAt(0) === "<" && selector.charAt(selector.length - 1) === ">" && selector.length >= 3) { 2830 2831 // Assume that strings that start and end with <> are HTML and skip the regex check 2832 match = [null, selector, null]; 2833 } else { 2834 match = rquickExpr.exec(selector); 2835 } 2836 2837 // Match html or make sure no context is specified for #id 2838 if (match && (match[1] || !context)) { 2839 2840 // HANDLE: $(html) -> $(array) 2841 if (match[1]) { 2842 context = context instanceof jQuery ? context[0] : context; 2843 2844 // scripts is true for back-compat 2845 // Intentionally let the error be thrown if parseHTML is not present 2846 jQuery.merge(this, jQuery.parseHTML(match[1], context && context.nodeType ? context.ownerDocument || context : document, true)); 2847 2848 // HANDLE: $(html, props) 2849 if (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) { 2850 for (match in context) { 2851 2852 // Properties of context are called as methods if possible 2853 if (jQuery.isFunction(this[match])) { 2854 this[match](context[match]); 2855 2856 // ...and otherwise set as attributes 2857 } else { 2858 this.attr(match, context[match]); 2859 } 2860 } 2861 } 2862 2863 return this; 2864 2865 // HANDLE: $(#id) 2866 } else { 2867 elem = document.getElementById(match[2]); 2868 2869 // Check parentNode to catch when Blackberry 4.6 returns 2870 // nodes that are no longer in the document #6963 2871 if (elem && elem.parentNode) { 2872 2873 // Handle the case where IE and Opera return items 2874 // by name instead of ID 2875 if (elem.id !== match[2]) { 2876 return rootjQuery.find(selector); 2877 } 2878 2879 // Otherwise, we inject the element directly into the jQuery object 2880 this.length = 1; 2881 this[0] = elem; 2882 } 2883 2884 this.context = document; 2885 this.selector = selector; 2886 return this; 2887 } 2888 2889 // HANDLE: $(expr, $(...)) 2890 } else if (!context || context.jquery) { 2891 return (context || root).find(selector); 2892 2893 // HANDLE: $(expr, context) 2894 // (which is just equivalent to: $(context).find(expr) 2895 } else { 2896 return this.constructor(context).find(selector); 2897 } 2898 2899 // HANDLE: $(DOMElement) 2900 } else if (selector.nodeType) { 2901 this.context = this[0] = selector; 2902 this.length = 1; 2903 return this; 2904 2905 // HANDLE: $(function) 2906 // Shortcut for document ready 2907 } else if (jQuery.isFunction(selector)) { 2908 return typeof root.ready !== "undefined" ? root.ready(selector) : 2909 2910 // Execute immediately if ready is not present 2911 selector(jQuery); 2912 } 2913 2914 if (selector.selector !== undefined) { 2915 this.selector = selector.selector; 2916 this.context = selector.context; 2917 } 2918 2919 return jQuery.makeArray(selector, this); 2920 }; 2921 2922 // Give the init function the jQuery prototype for later instantiation 2923 init.prototype = jQuery.fn; 2924 2925 // Initialize central reference 2926 rootjQuery = jQuery(document); 2927 2928 var rparentsprev = /^(?:parents|prev(?:Until|All))/, 2929 2930 2931 // methods guaranteed to produce a unique set when starting from a unique set 2932 guaranteedUnique = { 2933 children: true, 2934 contents: true, 2935 next: true, 2936 prev: true 2937 }; 2938 2939 jQuery.fn.extend({ 2940 has: function (target) { 2941 var i, 2942 targets = jQuery(target, this), 2943 len = targets.length; 2944 2945 return this.filter(function () { 2946 for (i = 0; i < len; i++) { 2947 if (jQuery.contains(this, targets[i])) { 2948 return true; 2949 } 2950 } 2951 }); 2952 }, 2953 2954 closest: function (selectors, context) { 2955 var cur, 2956 i = 0, 2957 l = this.length, 2958 matched = [], 2959 pos = rneedsContext.test(selectors) || typeof selectors !== "string" ? jQuery(selectors, context || this.context) : 0; 2960 2961 for (; i < l; i++) { 2962 for (cur = this[i]; cur && cur !== context; cur = cur.parentNode) { 2963 2964 // Always skip document fragments 2965 if (cur.nodeType < 11 && (pos ? pos.index(cur) > -1 : 2966 2967 // Don't pass non-elements to Sizzle 2968 cur.nodeType === 1 && jQuery.find.matchesSelector(cur, selectors))) { 2969 2970 matched.push(cur); 2971 break; 2972 } 2973 } 2974 } 2975 2976 return this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched); 2977 }, 2978 2979 // Determine the position of an element within 2980 // the matched set of elements 2981 index: function (elem) { 2982 2983 // No argument, return index in parent 2984 if (!elem) { 2985 return this[0] && this[0].parentNode ? this.first().prevAll().length : -1; 2986 } 2987 2988 // index in selector 2989 if (typeof elem === "string") { 2990 return jQuery.inArray(this[0], jQuery(elem)); 2991 } 2992 2993 // Locate the position of the desired element 2994 return jQuery.inArray( 2995 2996 // If it receives a jQuery object, the first element is used 2997 elem.jquery ? elem[0] : elem, this); 2998 }, 2999 3000 add: function (selector, context) { 3001 return this.pushStack(jQuery.uniqueSort(jQuery.merge(this.get(), jQuery(selector, context)))); 3002 }, 3003 3004 addBack: function (selector) { 3005 return this.add(selector == null ? this.prevObject : this.prevObject.filter(selector)); 3006 } 3007 }); 3008 3009 function sibling(cur, dir) { 3010 do { 3011 cur = cur[dir]; 3012 } while (cur && cur.nodeType !== 1); 3013 3014 return cur; 3015 } 3016 3017 jQuery.each({ 3018 parent: function (elem) { 3019 var parent = elem.parentNode; 3020 return parent && parent.nodeType !== 11 ? parent : null; 3021 }, 3022 parents: function (elem) { 3023 return dir(elem, "parentNode"); 3024 }, 3025 parentsUntil: function (elem, i, until) { 3026 return dir(elem, "parentNode", until); 3027 }, 3028 next: function (elem) { 3029 return sibling(elem, "nextSibling"); 3030 }, 3031 prev: function (elem) { 3032 return sibling(elem, "previousSibling"); 3033 }, 3034 nextAll: function (elem) { 3035 return dir(elem, "nextSibling"); 3036 }, 3037 prevAll: function (elem) { 3038 return dir(elem, "previousSibling"); 3039 }, 3040 nextUntil: function (elem, i, until) { 3041 return dir(elem, "nextSibling", until); 3042 }, 3043 prevUntil: function (elem, i, until) { 3044 return dir(elem, "previousSibling", until); 3045 }, 3046 siblings: function (elem) { 3047 return siblings((elem.parentNode || {}).firstChild, elem); 3048 }, 3049 children: function (elem) { 3050 return siblings(elem.firstChild); 3051 }, 3052 contents: function (elem) { 3053 return jQuery.nodeName(elem, "iframe") ? elem.contentDocument || elem.contentWindow.document : jQuery.merge([], elem.childNodes); 3054 } 3055 }, function (name, fn) { 3056 jQuery.fn[name] = function (until, selector) { 3057 var ret = jQuery.map(this, fn, until); 3058 3059 if (name.slice(-5) !== "Until") { 3060 selector = until; 3061 } 3062 3063 if (selector && typeof selector === "string") { 3064 ret = jQuery.filter(selector, ret); 3065 } 3066 3067 if (this.length > 1) { 3068 3069 // Remove duplicates 3070 if (!guaranteedUnique[name]) { 3071 ret = jQuery.uniqueSort(ret); 3072 } 3073 3074 // Reverse order for parents* and prev-derivatives 3075 if (rparentsprev.test(name)) { 3076 ret = ret.reverse(); 3077 } 3078 } 3079 3080 return this.pushStack(ret); 3081 }; 3082 }); 3083 var rnotwhite = /\S+/g; 3084 3085 // Convert String-formatted options into Object-formatted ones 3086 function createOptions(options) { 3087 var object = {}; 3088 jQuery.each(options.match(rnotwhite) || [], function (_, flag) { 3089 object[flag] = true; 3090 }); 3091 return object; 3092 } 3093 3094 /* 3095 * Create a callback list using the following parameters: 3096 * 3097 * options: an optional list of space-separated options that will change how 3098 * the callback list behaves or a more traditional option object 3099 * 3100 * By default a callback list will act like an event callback list and can be 3101 * "fired" multiple times. 3102 * 3103 * Possible options: 3104 * 3105 * once: will ensure the callback list can only be fired once (like a Deferred) 3106 * 3107 * memory: will keep track of previous values and will call any callback added 3108 * after the list has been fired right away with the latest "memorized" 3109 * values (like a Deferred) 3110 * 3111 * unique: will ensure a callback can only be added once (no duplicate in the list) 3112 * 3113 * stopOnFalse: interrupt callings when a callback returns false 3114 * 3115 */ 3116 jQuery.Callbacks = function (options) { 3117 3118 // Convert options from String-formatted to Object-formatted if needed 3119 // (we check in cache first) 3120 options = typeof options === "string" ? createOptions(options) : jQuery.extend({}, options); 3121 3122 var // Flag to know if list is currently firing 3123 firing, 3124 3125 3126 // Last fire value for non-forgettable lists 3127 memory, 3128 3129 3130 // Flag to know if list was already fired 3131 fired, 3132 3133 3134 // Flag to prevent firing 3135 locked, 3136 3137 3138 // Actual callback list 3139 list = [], 3140 3141 3142 // Queue of execution data for repeatable lists 3143 queue = [], 3144 3145 3146 // Index of currently firing callback (modified by add/remove as needed) 3147 firingIndex = -1, 3148 3149 3150 // Fire callbacks 3151 fire = function () { 3152 3153 // Enforce single-firing 3154 locked = options.once; 3155 3156 // Execute callbacks for all pending executions, 3157 // respecting firingIndex overrides and runtime changes 3158 fired = firing = true; 3159 for (; queue.length; firingIndex = -1) { 3160 memory = queue.shift(); 3161 while (++firingIndex < list.length) { 3162 3163 // Run callback and check for early termination 3164 if (list[firingIndex].apply(memory[0], memory[1]) === false && options.stopOnFalse) { 3165 3166 // Jump to end and forget the data so .add doesn't re-fire 3167 firingIndex = list.length; 3168 memory = false;
vendor: 8,134 bytes, lines 3169-3498
3169 } 3170 } 3171 } 3172 3173 // Forget the data if we're done with it 3174 if (!options.memory) { 3175 memory = false; 3176 } 3177 3178 firing = false; 3179 3180 // Clean up if we're done firing for good 3181 if (locked) { 3182 3183 // Keep an empty list if we have data for future add calls 3184 if (memory) { 3185 list = []; 3186 3187 // Otherwise, this object is spent 3188 } else { 3189 list = ""; 3190 } 3191 } 3192 }, 3193 3194 3195 // Actual Callbacks object 3196 self = { 3197 3198 // Add a callback or a collection of callbacks to the list 3199 add: function () { 3200 if (list) { 3201 3202 // If we have memory from a past run, we should fire after adding 3203 if (memory && !firing) { 3204 firingIndex = list.length - 1; 3205 queue.push(memory); 3206 } 3207 3208 (function add(args) { 3209 jQuery.each(args, function (_, arg) { 3210 if (jQuery.isFunction(arg)) { 3211 if (!options.unique || !self.has(arg)) { 3212 list.push(arg); 3213 } 3214 } else if (arg && arg.length && jQuery.type(arg) !== "string") { 3215 3216 // Inspect recursively 3217 add(arg); 3218 } 3219 }); 3220 })(arguments); 3221 3222 if (memory && !firing) { 3223 fire(); 3224 } 3225 } 3226 return this; 3227 }, 3228 3229 // Remove a callback from the list 3230 remove: function () { 3231 jQuery.each(arguments, function (_, arg) { 3232 var index; 3233 while ((index = jQuery.inArray(arg, list, index)) > -1) { 3234 list.splice(index, 1); 3235 3236 // Handle firing indexes 3237 if (index <= firingIndex) { 3238 firingIndex--; 3239 } 3240 } 3241 }); 3242 return this; 3243 }, 3244 3245 // Check if a given callback is in the list. 3246 // If no argument is given, return whether or not list has callbacks attached. 3247 has: function (fn) { 3248 return fn ? jQuery.inArray(fn, list) > -1 : list.length > 0; 3249 }, 3250 3251 // Remove all callbacks from the list 3252 empty: function () { 3253 if (list) { 3254 list = []; 3255 } 3256 return this; 3257 }, 3258 3259 // Disable .fire and .add 3260 // Abort any current/pending executions 3261 // Clear all callbacks and values 3262 disable: function () { 3263 locked = queue = []; 3264 list = memory = ""; 3265 return this; 3266 }, 3267 disabled: function () { 3268 return !list; 3269 }, 3270 3271 // Disable .fire 3272 // Also disable .add unless we have memory (since it would have no effect) 3273 // Abort any pending executions 3274 lock: function () { 3275 locked = true; 3276 if (!memory) { 3277 self.disable(); 3278 } 3279 return this; 3280 }, 3281 locked: function () { 3282 return !!locked; 3283 }, 3284 3285 // Call all callbacks with the given context and arguments 3286 fireWith: function (context, args) { 3287 if (!locked) { 3288 args = args || []; 3289 args = [context, args.slice ? args.slice() : args]; 3290 queue.push(args); 3291 if (!firing) { 3292 fire(); 3293 } 3294 } 3295 return this; 3296 }, 3297 3298 // Call all the callbacks with the given arguments 3299 fire: function () { 3300 self.fireWith(this, arguments); 3301 return this; 3302 }, 3303 3304 // To know if the callbacks have already been called at least once 3305 fired: function () { 3306 return !!fired; 3307 } 3308 }; 3309 3310 return self; 3311 }; 3312 3313 jQuery.extend({ 3314 3315 Deferred: function (func) { 3316 var tuples = [ 3317 3318 // action, add listener, listener list, final state 3319 ["resolve", "done", jQuery.Callbacks("once memory"), "resolved"], ["reject", "fail", jQuery.Callbacks("once memory"), "rejected"], ["notify", "progress", jQuery.Callbacks("memory")]], 3320 state = "pending", 3321 promise = { 3322 state: function () { 3323 return state; 3324 }, 3325 always: function () { 3326 deferred.done(arguments).fail(arguments); 3327 return this; 3328 }, 3329 then: function () /* fnDone, fnFail, fnProgress */{ 3330 var fns = arguments; 3331 return jQuery.Deferred(function (newDefer) { 3332 jQuery.each(tuples, function (i, tuple) { 3333 var fn = jQuery.isFunction(fns[i]) && fns[i]; 3334 3335 // deferred[ done | fail | progress ] for forwarding actions to newDefer 3336 deferred[tuple[1]](function () { 3337 var returned = fn && fn.apply(this, arguments); 3338 if (returned && jQuery.isFunction(returned.promise)) { 3339 returned.promise().progress(newDefer.notify).done(newDefer.resolve).fail(newDefer.reject); 3340 } else { 3341 newDefer[tuple[0] + "With"](this === promise ? newDefer.promise() : this, fn ? [returned] : arguments); 3342 } 3343 }); 3344 }); 3345 fns = null; 3346 }).promise(); 3347 }, 3348 3349 // Get a promise for this deferred 3350 // If obj is provided, the promise aspect is added to the object 3351 promise: function (obj) { 3352 return obj != null ? jQuery.extend(obj, promise) : promise; 3353 } 3354 }, 3355 deferred = {}; 3356 3357 // Keep pipe for back-compat 3358 promise.pipe = promise.then; 3359 3360 // Add list-specific methods 3361 jQuery.each(tuples, function (i, tuple) { 3362 var list = tuple[2], 3363 stateString = tuple[3]; 3364 3365 // promise[ done | fail | progress ] = list.add 3366 promise[tuple[1]] = list.add; 3367 3368 // Handle state 3369 if (stateString) { 3370 list.add(function () { 3371 3372 // state = [ resolved | rejected ] 3373 state = stateString; 3374 3375 // [ reject_list | resolve_list ].disable; progress_list.lock 3376 }, tuples[i ^ 1][2].disable, tuples[2][2].lock); 3377 } 3378 3379 // deferred[ resolve | reject | notify ] 3380 deferred[tuple[0]] = function () { 3381 deferred[tuple[0] + "With"](this === deferred ? promise : this, arguments); 3382 return this; 3383 }; 3384 deferred[tuple[0] + "With"] = list.fireWith; 3385 }); 3386 3387 // Make the deferred a promise 3388 promise.promise(deferred); 3389 3390 // Call given func if any 3391 if (func) { 3392 func.call(deferred, deferred); 3393 } 3394 3395 // All done! 3396 return deferred; 3397 }, 3398 3399 // Deferred helper 3400 when: function (subordinate /* , ..., subordinateN */) { 3401 var i = 0, 3402 resolveValues = slice.call(arguments), 3403 length = resolveValues.length, 3404 3405 3406 // the count of uncompleted subordinates 3407 remaining = length !== 1 || subordinate && jQuery.isFunction(subordinate.promise) ? length : 0, 3408 3409 3410 // the master Deferred. 3411 // If resolveValues consist of only a single Deferred, just use that. 3412 deferred = remaining === 1 ? subordinate : jQuery.Deferred(), 3413 3414 3415 // Update function for both resolve and progress values 3416 updateFunc = function (i, contexts, values) { 3417 return function (value) { 3418 contexts[i] = this; 3419 values[i] = arguments.length > 1 ? slice.call(arguments) : value; 3420 if (values === progressValues) { 3421 deferred.notifyWith(contexts, values); 3422 } else if (! --remaining) { 3423 deferred.resolveWith(contexts, values); 3424 } 3425 }; 3426 }, 3427 progressValues, 3428 progressContexts, 3429 resolveContexts; 3430 3431 // add listeners to Deferred subordinates; treat others as resolved 3432 if (length > 1) { 3433 progressValues = new Array(length); 3434 progressContexts = new Array(length); 3435 resolveContexts = new Array(length); 3436 for (; i < length; i++) { 3437 if (resolveValues[i] && jQuery.isFunction(resolveValues[i].promise)) { 3438 resolveValues[i].promise().progress(updateFunc(i, progressContexts, progressValues)).done(updateFunc(i, resolveContexts, resolveValues)).fail(deferred.reject); 3439 } else { 3440 --remaining; 3441 } 3442 } 3443 } 3444 3445 // if we're not waiting on anything, resolve the master 3446 if (!remaining) { 3447 deferred.resolveWith(resolveContexts, resolveValues); 3448 } 3449 3450 return deferred.promise(); 3451 } 3452 }); 3453 3454 // The deferred used on DOM ready 3455 var readyList; 3456 3457 jQuery.fn.ready = function (fn) { 3458 3459 // Add the callback 3460 jQuery.ready.promise().done(fn); 3461 3462 return this; 3463 }; 3464 3465 jQuery.extend({ 3466 3467 // Is the DOM ready to be used? Set to true once it occurs. 3468 isReady: false, 3469 3470 // A counter to track how many items to wait for before 3471 // the ready event fires. See #6781 3472 readyWait: 1, 3473 3474 // Hold (or release) the ready event 3475 holdReady: function (hold) { 3476 if (hold) { 3477 jQuery.readyWait++; 3478 } else { 3479 jQuery.ready(true); 3480 } 3481 }, 3482 3483 // Handle when the DOM is ready 3484 ready: function (wait) { 3485 3486 // Abort if there are pending holds or we're already ready 3487 if (wait === true ? --jQuery.readyWait : jQuery.isReady) { 3488 return; 3489 } 3490 3491 // Remember that the DOM is ready 3492 jQuery.isReady = true; 3493 3494 // If a normal DOM Ready event fired, decrement, and wait if need be 3495 if (wait !== true && --jQuery.readyWait > 0) { 3496 return; 3497 } 3498
3499 // If there are functions bound, to execute 3500 readyList.resolveWith(document, [jQuery]); 3501 3502 // Trigger any bound ready events 3503 if (jQuery.fn.triggerHandler) { 3504 jQuery(document).triggerHandler("ready"); 3505 jQuery(document).off("ready"); 3506 } 3507 } 3508 }); 3509 3510 /** 3511 * Clean-up method for dom ready events 3512 */ 3513 function detach() { 3514 if (document.addEventListener) { 3515 document.removeEventListener("DOMContentLoaded", completed); 3516 window.removeEventListener("load", completed); 3517 } else { 3518 document.detachEvent("onreadystatechange", completed); 3519 window.detachEvent("onload", completed); 3520 } 3521 } 3522 3523 /** 3524 * The ready event handler and self cleanup method 3525 */ 3526 function completed() { 3527 3528 // readyState === "complete" is good enough for us to call the dom ready in oldIE 3529 if (document.addEventListener || window.event.type === "load" || document.readyState === "complete") { 3530 3531 detach(); 3532 jQuery.ready(); 3533 } 3534 } 3535 3536 jQuery.ready.promise = function (obj) { 3537 if (!readyList) { 3538 3539 readyList = jQuery.Deferred(); 3540 3541 // Catch cases where $(document).ready() is called 3542 // after the browser event has already occurred. 3543 // Support: IE6-10 3544 // Older IE sometimes signals "interactive" too soon 3545 if (document.readyState === "complete" || document.readyState !== "loading" && !document.documentElement.doScroll) { 3546 3547 // Handle it asynchronously to allow scripts the opportunity to delay ready 3548 window.setTimeout(jQuery.ready); 3549 3550 // Standards-based browsers support DOMContentLoaded 3551 } else if (document.addEventListener) { 3552 3553 // Use the handy event callback 3554 document.addEventListener("DOMContentLoaded", completed); 3555 3556 // A fallback to window.onload, that will always work 3557 window.addEventListener("load", completed); 3558 3559 // If IE event model is used 3560 } else { 3561 3562 // Ensure firing before onload, maybe late but safe also for iframes 3563 document.attachEvent("onreadystatechange", completed); 3564 3565 // A fallback to window.onload, that will always work 3566 window.attachEvent("onload", completed); 3567 3568 // If IE and not a frame 3569 // continually check to see if the document is ready 3570 var top = false; 3571 3572 try { 3573 top = window.frameElement == null && document.documentElement; 3574 } catch (e) {} 3575 3576 if (top && top.doScroll) { 3577 (function doScrollCheck() { 3578 if (!jQuery.isReady) { 3579 3580 try { 3581 3582 // Use the trick by Diego Perini 3583 // http://javascript.nwbox.com/IEContentLoaded/ 3584 top.doScroll("left"); 3585 } catch (e) { 3586 return window.setTimeout(doScrollCheck, 50); 3587 } 3588 3589 // detach all dom ready events 3590 detach(); 3591 3592 // and execute any waiting functions 3593 jQuery.ready(); 3594 } 3595 })(); 3596 } 3597 } 3598 } 3599 return readyList.promise(obj); 3600 }; 3601 3602 // Kick off the DOM ready check even if the user does not 3603 jQuery.ready.promise(); 3604 3605 // Support: IE<9 3606 // Iteration over object's inherited properties before its own 3607 var i; 3608 for (i in jQuery(support)) { 3609 break; 3610 } 3611 support.ownFirst = i === "0"; 3612 3613 // Note: most support tests are defined in their respective modules. 3614 // false until the test is run 3615 support.inlineBlockNeedsLayout = false; 3616 3617 // Execute ASAP in case we need to set body.style.zoom 3618 jQuery(function () { 3619 3620 // Minified: var a,b,c,d 3621 var val, div, body, container; 3622 3623 body = document.getElementsByTagName("body")[0]; 3624 if (!body || !body.style) { 3625 3626 // Return for frameset docs that don't have a body 3627 return; 3628 } 3629 3630 // Setup 3631 div = document.createElement("div"); 3632 container = document.createElement("div"); 3633 container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px"; 3634 body.appendChild(container).appendChild(div); 3635 3636 if (typeof div.style.zoom !== "undefined") { 3637 3638 // Support: IE<8 3639 // Check if natively block-level elements act like inline-block 3640 // elements when setting their display to 'inline' and giving 3641 // them layout 3642 div.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1"; 3643 3644 support.inlineBlockNeedsLayout = val = div.offsetWidth === 3; 3645 if (val) { 3646 3647 // Prevent IE 6 from affecting layout for positioned elements #11048 3648 // Prevent IE from shrinking the body in IE 7 mode #12869
vendor: 12,463 bytes, lines 3649-4160
3649 // Support: IE<8 3650 body.style.zoom = 1; 3651 } 3652 } 3653 3654 body.removeChild(container); 3655 }); 3656 3657 (function () { 3658 var div = document.createElement("div"); 3659 3660 // Support: IE<9 3661 support.deleteExpando = true; 3662 try { 3663 delete div.test; 3664 } catch (e) { 3665 support.deleteExpando = false; 3666 } 3667 3668 // Null elements to avoid leaks in IE. 3669 div = null; 3670 })(); 3671 var acceptData = function (elem) { 3672 var noData = jQuery.noData[(elem.nodeName + " ").toLowerCase()], 3673 nodeType = +elem.nodeType || 1; 3674 3675 // Do not set data on non-element DOM nodes because it will not be cleared (#8335). 3676 return nodeType !== 1 && nodeType !== 9 ? false : 3677 3678 // Nodes accept data unless otherwise specified; rejection can be conditional 3679 !noData || noData !== true && elem.getAttribute("classid") === noData; 3680 }; 3681 3682 var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, 3683 rmultiDash = /([A-Z])/g; 3684 3685 function dataAttr(elem, key, data) { 3686 3687 // If nothing was found internally, try to fetch any 3688 // data from the HTML5 data-* attribute 3689 if (data === undefined && elem.nodeType === 1) { 3690 3691 var name = "data-" + key.replace(rmultiDash, "-$1").toLowerCase(); 3692 3693 data = elem.getAttribute(name); 3694 3695 if (typeof data === "string") { 3696 try { 3697 data = data === "true" ? true : data === "false" ? false : data === "null" ? null : 3698 3699 // Only convert to a number if it doesn't change the string 3700 +data + "" === data ? +data : rbrace.test(data) ? jQuery.parseJSON(data) : data; 3701 } catch (e) {} 3702 3703 // Make sure we set the data so it isn't changed later 3704 jQuery.data(elem, key, data); 3705 } else { 3706 data = undefined; 3707 } 3708 } 3709 3710 return data; 3711 } 3712 3713 // checks a cache object for emptiness 3714 function isEmptyDataObject(obj) { 3715 var name; 3716 for (name in obj) { 3717 3718 // if the public data object is empty, the private is still empty 3719 if (name === "data" && jQuery.isEmptyObject(obj[name])) { 3720 continue; 3721 } 3722 if (name !== "toJSON") { 3723 return false; 3724 } 3725 } 3726 3727 return true; 3728 } 3729 3730 function internalData(elem, name, data, pvt /* Internal Use Only */) { 3731 if (!acceptData(elem)) { 3732 return; 3733 } 3734 3735 var ret, 3736 thisCache, 3737 internalKey = jQuery.expando, 3738 3739 3740 // We have to handle DOM nodes and JS objects differently because IE6-7 3741 // can't GC object references properly across the DOM-JS boundary 3742 isNode = elem.nodeType, 3743 3744 3745 // Only DOM nodes need the global jQuery cache; JS object data is 3746 // attached directly to the object so GC can occur automatically 3747 cache = isNode ? jQuery.cache : elem, 3748 3749 3750 // Only defining an ID for JS objects if its cache already exists allows 3751 // the code to shortcut on the same path as a DOM node with no cache 3752 id = isNode ? elem[internalKey] : elem[internalKey] && internalKey; 3753 3754 // Avoid doing any more work than we need to when trying to get data on an 3755 // object that has no data at all 3756 if ((!id || !cache[id] || !pvt && !cache[id].data) && data === undefined && typeof name === "string") { 3757 return; 3758 } 3759 3760 if (!id) { 3761 3762 // Only DOM nodes need a new unique ID for each element since their data 3763 // ends up in the global cache 3764 if (isNode) { 3765 id = elem[internalKey] = deletedIds.pop() || jQuery.guid++; 3766 } else { 3767 id = internalKey; 3768 } 3769 } 3770 3771 if (!cache[id]) { 3772 3773 // Avoid exposing jQuery metadata on plain JS objects when the object 3774 // is serialized using JSON.stringify 3775 cache[id] = isNode ? {} : { toJSON: jQuery.noop }; 3776 } 3777 3778 // An object can be passed to jQuery.data instead of a key/value pair; this gets 3779 // shallow copied over onto the existing cache 3780 if (typeof name === "object" || typeof name === "function") { 3781 if (pvt) { 3782 cache[id] = jQuery.extend(cache[id], name); 3783 } else { 3784 cache[id].data = jQuery.extend(cache[id].data, name); 3785 } 3786 } 3787 3788 thisCache = cache[id]; 3789 3790 // jQuery data() is stored in a separate object inside the object's internal data 3791 // cache in order to avoid key collisions between internal data and user-defined 3792 // data. 3793 if (!pvt) { 3794 if (!thisCache.data) { 3795 thisCache.data = {}; 3796 } 3797 3798 thisCache = thisCache.data; 3799 } 3800 3801 if (data !== undefined) { 3802 thisCache[jQuery.camelCase(name)] = data; 3803 } 3804 3805 // Check for both converted-to-camel and non-converted data property names 3806 // If a data property was specified 3807 if (typeof name === "string") { 3808 3809 // First Try to find as-is property data 3810 ret = thisCache[name]; 3811 3812 // Test for null|undefined property data 3813 if (ret == null) { 3814 3815 // Try to find the camelCased property 3816 ret = thisCache[jQuery.camelCase(name)]; 3817 } 3818 } else { 3819 ret = thisCache; 3820 } 3821 3822 return ret; 3823 } 3824 3825 function internalRemoveData(elem, name, pvt) { 3826 if (!acceptData(elem)) { 3827 return; 3828 } 3829 3830 var thisCache, 3831 i, 3832 isNode = elem.nodeType, 3833 3834 3835 // See jQuery.data for more information 3836 cache = isNode ? jQuery.cache : elem, 3837 id = isNode ? elem[jQuery.expando] : jQuery.expando; 3838 3839 // If there is already no cache entry for this object, there is no 3840 // purpose in continuing 3841 if (!cache[id]) { 3842 return; 3843 } 3844 3845 if (name) { 3846 3847 thisCache = pvt ? cache[id] : cache[id].data; 3848 3849 if (thisCache) { 3850 3851 // Support array or space separated string names for data keys 3852 if (!jQuery.isArray(name)) { 3853 3854 // try the string as a key before any manipulation 3855 if (name in thisCache) { 3856 name = [name]; 3857 } else { 3858 3859 // split the camel cased version by spaces unless a key with the spaces exists 3860 name = jQuery.camelCase(name); 3861 if (name in thisCache) { 3862 name = [name]; 3863 } else { 3864 name = name.split(" "); 3865 } 3866 } 3867 } else { 3868 3869 // If "name" is an array of keys... 3870 // When data is initially created, via ("key", "val") signature, 3871 // keys will be converted to camelCase. 3872 // Since there is no way to tell _how_ a key was added, remove 3873 // both plain key and camelCase key. #12786 3874 // This will only penalize the array argument path. 3875 name = name.concat(jQuery.map(name, jQuery.camelCase)); 3876 } 3877 3878 i = name.length; 3879 while (i--) { 3880 delete thisCache[name[i]]; 3881 } 3882 3883 // If there is no data left in the cache, we want to continue 3884 // and let the cache object itself get destroyed 3885 if (pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache)) { 3886 return; 3887 } 3888 } 3889 } 3890 3891 // See jQuery.data for more information 3892 if (!pvt) { 3893 delete cache[id].data; 3894 3895 // Don't destroy the parent cache unless the internal data object 3896 // had been the only thing left in it 3897 if (!isEmptyDataObject(cache[id])) { 3898 return; 3899 } 3900 } 3901 3902 // Destroy the cache 3903 if (isNode) { 3904 jQuery.cleanData([elem], true); 3905 3906 // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) 3907 /* jshint eqeqeq: false */ 3908 } else if (support.deleteExpando || cache != cache.window) { 3909 /* jshint eqeqeq: true */ 3910 delete cache[id]; 3911 3912 // When all else fails, undefined 3913 } else { 3914 cache[id] = undefined; 3915 } 3916 } 3917 3918 jQuery.extend({ 3919 cache: {}, 3920 3921 // The following elements (space-suffixed to avoid Object.prototype collisions) 3922 // throw uncatchable exceptions if you attempt to set expando properties 3923 noData: { 3924 "applet ": true, 3925 "embed ": true, 3926 3927 // ...but Flash objects (which have this classid) *can* handle expandos 3928 "object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" 3929 }, 3930 3931 hasData: function (elem) { 3932 elem = elem.nodeType ? jQuery.cache[elem[jQuery.expando]] : elem[jQuery.expando]; 3933 return !!elem && !isEmptyDataObject(elem); 3934 }, 3935 3936 data: function (elem, name, data) { 3937 return internalData(elem, name, data); 3938 }, 3939 3940 removeData: function (elem, name) { 3941 return internalRemoveData(elem, name); 3942 }, 3943 3944 // For internal use only. 3945 _data: function (elem, name, data) { 3946 return internalData(elem, name, data, true); 3947 }, 3948 3949 _removeData: function (elem, name) { 3950 return internalRemoveData(elem, name, true); 3951 } 3952 }); 3953 3954 jQuery.fn.extend({ 3955 data: function (key, value) { 3956 var i, 3957 name, 3958 data, 3959 elem = this[0], 3960 attrs = elem && elem.attributes; 3961 3962 // Special expections of .data basically thwart jQuery.access, 3963 // so implement the relevant behavior ourselves 3964 3965 // Gets all values 3966 if (key === undefined) { 3967 if (this.length) { 3968 data = jQuery.data(elem); 3969 3970 if (elem.nodeType === 1 && !jQuery._data(elem, "parsedAttrs")) { 3971 i = attrs.length; 3972 while (i--) { 3973 3974 // Support: IE11+ 3975 // The attrs elements can be null (#14894) 3976 if (attrs[i]) { 3977 name = attrs[i].name; 3978 if (name.indexOf("data-") === 0) { 3979 name = jQuery.camelCase(name.slice(5)); 3980 dataAttr(elem, name, data[name]); 3981 } 3982 } 3983 } 3984 jQuery._data(elem, "parsedAttrs", true); 3985 } 3986 } 3987 3988 return data; 3989 } 3990 3991 // Sets multiple values 3992 if (typeof key === "object") { 3993 return this.each(function () { 3994 jQuery.data(this, key); 3995 }); 3996 } 3997 3998 return arguments.length > 1 ? 3999 4000 // Sets one value 4001 this.each(function () { 4002 jQuery.data(this, key, value); 4003 }) : 4004 4005 // Gets one value 4006 // Try to fetch any internally stored data first 4007 elem ? dataAttr(elem, key, jQuery.data(elem, key)) : undefined; 4008 }, 4009 4010 removeData: function (key) { 4011 return this.each(function () { 4012 jQuery.removeData(this, key); 4013 }); 4014 } 4015 }); 4016 4017 jQuery.extend({ 4018 queue: function (elem, type, data) { 4019 var queue; 4020 4021 if (elem) { 4022 type = (type || "fx") + "queue"; 4023 queue = jQuery._data(elem, type); 4024 4025 // Speed up dequeue by getting out quickly if this is just a lookup 4026 if (data) { 4027 if (!queue || jQuery.isArray(data)) { 4028 queue = jQuery._data(elem, type, jQuery.makeArray(data)); 4029 } else { 4030 queue.push(data); 4031 } 4032 } 4033 return queue || []; 4034 } 4035 }, 4036 4037 dequeue: function (elem, type) { 4038 type = type || "fx"; 4039 4040 var queue = jQuery.queue(elem, type), 4041 startLength = queue.length, 4042 fn = queue.shift(), 4043 hooks = jQuery._queueHooks(elem, type), 4044 next = function () { 4045 jQuery.dequeue(elem, type); 4046 }; 4047 4048 // If the fx queue is dequeued, always remove the progress sentinel 4049 if (fn === "inprogress") { 4050 fn = queue.shift(); 4051 startLength--; 4052 } 4053 4054 if (fn) { 4055 4056 // Add a progress sentinel to prevent the fx queue from being 4057 // automatically dequeued 4058 if (type === "fx") { 4059 queue.unshift("inprogress"); 4060 } 4061 4062 // clear up the last queue stop function 4063 delete hooks.stop; 4064 fn.call(elem, next, hooks); 4065 } 4066 4067 if (!startLength && hooks) { 4068 hooks.empty.fire(); 4069 } 4070 }, 4071 4072 // not intended for public consumption - generates a queueHooks object, 4073 // or returns the current one 4074 _queueHooks: function (elem, type) { 4075 var key = type + "queueHooks"; 4076 return jQuery._data(elem, key) || jQuery._data(elem, key, { 4077 empty: jQuery.Callbacks("once memory").add(function () { 4078 jQuery._removeData(elem, type + "queue"); 4079 jQuery._removeData(elem, key); 4080 }) 4081 }); 4082 } 4083 }); 4084 4085 jQuery.fn.extend({ 4086 queue: function (type, data) { 4087 var setter = 2; 4088 4089 if (typeof type !== "string") { 4090 data = type; 4091 type = "fx"; 4092 setter--; 4093 } 4094 4095 if (arguments.length < setter) { 4096 return jQuery.queue(this[0], type); 4097 } 4098 4099 return data === undefined ? this : this.each(function () { 4100 var queue = jQuery.queue(this, type, data); 4101 4102 // ensure a hooks for this queue 4103 jQuery._queueHooks(this, type); 4104 4105 if (type === "fx" && queue[0] !== "inprogress") { 4106 jQuery.dequeue(this, type); 4107 } 4108 }); 4109 }, 4110 dequeue: function (type) { 4111 return this.each(function () { 4112 jQuery.dequeue(this, type); 4113 }); 4114 }, 4115 clearQueue: function (type) { 4116 return this.queue(type || "fx", []); 4117 }, 4118 4119 // Get a promise resolved when queues of a certain type 4120 // are emptied (fx is the type by default) 4121 promise: function (type, obj) { 4122 var tmp, 4123 count = 1, 4124 defer = jQuery.Deferred(), 4125 elements = this, 4126 i = this.length, 4127 resolve = function () { 4128 if (! --count) { 4129 defer.resolveWith(elements, [elements]); 4130 } 4131 }; 4132 4133 if (typeof type !== "string") { 4134 obj = type; 4135 type = undefined; 4136 } 4137 type = type || "fx"; 4138 4139 while (i--) { 4140 tmp = jQuery._data(elements[i], type + "queueHooks"); 4141 if (tmp && tmp.empty) { 4142 count++; 4143 tmp.empty.add(resolve); 4144 } 4145 } 4146 resolve(); 4147 return defer.promise(obj); 4148 } 4149 }); 4150 4151 (function () { 4152 var shrinkWrapBlocksVal; 4153 4154 support.shrinkWrapBlocks = function () { 4155 if (shrinkWrapBlocksVal != null) { 4156 return shrinkWrapBlocksVal; 4157 } 4158 4159 // Will be changed later if needed. 4160 shrinkWrapBlocksVal = false;
4161 4162 // Minified: var b,c,d 4163 var div, body, container; 4164 4165 body = document.getElementsByTagName("body")[0]; 4166 if (!body || !body.style) { 4167 4168 // Test fired too early or in an unsupported environment, exit. 4169 return; 4170 } 4171 4172 // Setup 4173 div = document.createElement("div"); 4174 container = document.createElement("div"); 4175 container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px"; 4176 body.appendChild(container).appendChild(div); 4177 4178 // Support: IE6 4179 // Check if elements with layout shrink-wrap their children 4180 if (typeof div.style.zoom !== "undefined") { 4181 4182 // Reset CSS: box-sizing; display; margin; border 4183 div.style.cssText = 4184 4185 // Support: Firefox<29, Android 2.3 4186 // Vendor-prefix box-sizing 4187 "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" + "box-sizing:content-box;display:block;margin:0;border:0;" + "padding:1px;width:1px;zoom:1"; 4188 div.appendChild(document.createElement("div")).style.width = "5px"; 4189 shrinkWrapBlocksVal = div.offsetWidth !== 3; 4190 } 4191 4192 body.removeChild(container); 4193 4194 return shrinkWrapBlocksVal; 4195 }; 4196 })(); 4197 var pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source; 4198 4199 var rcssNum = new RegExp("^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i"); 4200 4201 var cssExpand = ["Top", "Right", "Bottom", "Left"]; 4202 4203 var isHidden = function (elem, el) { 4204 4205 // isHidden might be called from jQuery#filter function; 4206 // in that case, element will be second argument 4207 elem = el || elem; 4208 return jQuery.css(elem, "display") === "none" || !jQuery.contains(elem.ownerDocument, elem); 4209 }; 4210 4211 function adjustCSS(elem, prop, valueParts, tween) { 4212 var adjusted, 4213 scale = 1, 4214 maxIterations = 20, 4215 currentValue = tween ? function () { 4216 return tween.cur(); 4217 } : function () { 4218 return jQuery.css(elem, prop, ""); 4219 }, 4220 initial = currentValue(), 4221 unit = valueParts && valueParts[3] || (jQuery.cssNumber[prop] ? "" : "px"), 4222 4223 4224 // Starting value computation is required for potential unit mismatches 4225 initialInUnit = (jQuery.cssNumber[prop] || unit !== "px" && +initial) && rcssNum.exec(jQuery.css(elem, prop)); 4226 4227 if (initialInUnit && initialInUnit[3] !== unit) { 4228 4229 // Trust units reported by jQuery.css 4230 unit = unit || initialInUnit[3]; 4231 4232 // Make sure we update the tween properties later on 4233 valueParts = valueParts || []; 4234 4235 // Iteratively approximate from a nonzero starting point 4236 initialInUnit = +initial || 1; 4237 4238 do { 4239 4240 // If previous iteration zeroed out, double until we get *something*. 4241 // Use string for doubling so we don't accidentally see scale as unchanged below 4242 scale = scale || ".5"; 4243 4244 // Adjust and apply 4245 initialInUnit = initialInUnit / scale; 4246 jQuery.style(elem, prop, initialInUnit + unit); 4247 4248 // Update scale, tolerating zero or NaN from tween.cur() 4249 // Break the loop if scale is unchanged or perfect, or if we've just had enough. 4250 } while (scale !== (scale = currentValue() / initial) && scale !== 1 && --maxIterations); 4251 } 4252 4253 if (valueParts) { 4254 initialInUnit = +initialInUnit || +initial || 0; 4255 4256 // Apply relative offset (+=/-=) if specified 4257 adjusted = valueParts[1] ? initialInUnit + (valueParts[1] + 1) * valueParts[2] : +valueParts[2]; 4258 if (tween) { 4259 tween.unit = unit; 4260 tween.start = initialInUnit; 4261 tween.end = adjusted; 4262 } 4263 } 4264 return adjusted; 4265 } 4266 4267 // Multifunctional method to get and set values of a collection 4268 // The value/s can optionally be executed if it's a function 4269 var access = function (elems, fn, key, value, chainable, emptyGet, raw) { 4270 var i = 0, 4271 length = elems.length, 4272 bulk = key == null; 4273 4274 // Sets many values 4275 if (jQuery.type(key) === "object") { 4276 chainable = true; 4277 for (i in key) { 4278 access(elems, fn, i, key[i], true, emptyGet, raw); 4279 } 4280 4281 // Sets one value 4282 } else if (value !== undefined) { 4283 chainable = true; 4284 4285 if (!jQuery.isFunction(value)) { 4286 raw = true; 4287 } 4288 4289 if (bulk) { 4290 4291 // Bulk operations run against the entire set 4292 if (raw) { 4293 fn.call(elems, value); 4294 fn = null; 4295 4296 // ...except when executing function values 4297 } else { 4298 bulk = fn; 4299 fn = function (elem, key, value) {
4300 return bulk.call(jQuery(elem), value); 4301 }; 4302 } 4303 } 4304 4305 if (fn) { 4306 for (; i < length; i++) { 4307 fn(elems[i], key, raw ? value : value.call(elems[i], i, fn(elems[i], key))); 4308 } 4309 } 4310 } 4311 4312 return chainable ? elems : 4313 4314 // Gets 4315 bulk ? fn.call(elems) : length ? fn(elems[0], key) : emptyGet; 4316 }; 4317 var rcheckableType = /^(?:checkbox|radio)$/i; 4318 4319 var rtagName = /<([\w:-]+)/; 4320 4321 var rscriptType = /^$|\/(?:java|ecma)script/i; 4322 4323 var rleadingWhitespace = /^\s+/; 4324 4325 var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|" + "details|dialog|figcaption|figure|footer|header|hgroup|main|" + "mark|meter|nav|output|picture|progress|section|summary|template|time|video"; 4326 4327 function createSafeFragment(document) { 4328 var list = nodeNames.split("|"), 4329 safeFrag = document.createDocumentFragment(); 4330 4331 if (safeFrag.createElement) { 4332 while (list.length) { 4333 safeFrag.createElement(list.pop()); 4334 } 4335 } 4336 return safeFrag; 4337 } 4338 4339 (function () { 4340 var div = document.createElement("div"), 4341 fragment = document.createDocumentFragment(), 4342 input = document.createElement("input"); 4343 4344 // Setup 4345 div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>"; 4346 4347 // IE strips leading whitespace when .innerHTML is used 4348 support.leadingWhitespace = div.firstChild.nodeType === 3; 4349 4350 // Make sure that tbody elements aren't automatically inserted 4351 // IE will insert them into empty tables 4352 support.tbody = !div.getElementsByTagName("tbody").length; 4353 4354 // Make sure that link elements get serialized correctly by innerHTML 4355 // This requires a wrapper element in IE 4356 support.htmlSerialize = !!div.getElementsByTagName("link").length; 4357 4358 // Makes sure cloning an html5 element does not cause problems 4359 // Where outerHTML is undefined, this still works 4360 support.html5Clone = document.createElement("nav").cloneNode(true).outerHTML !== "<:nav></:nav>"; 4361 4362 // Check if a disconnected checkbox will retain its checked 4363 // value of true after appended to the DOM (IE6/7) 4364 input.type = "checkbox"; 4365 input.checked = true; 4366 fragment.appendChild(input); 4367 support.appendChecked = input.checked; 4368 4369 // Make sure textarea (and checkbox) defaultValue is properly cloned 4370 // Support: IE6-IE11+ 4371 div.innerHTML = "<textarea>x</textarea>"; 4372 support.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue; 4373 4374 // #11217 - WebKit loses check when the name is after the checked attribute 4375 fragment.appendChild(div); 4376 4377 // Support: Windows Web Apps (WWA) 4378 // `name` and `type` must use .setAttribute for WWA (#14901) 4379 input = document.createElement("input"); 4380 input.setAttribute("type", "radio"); 4381 input.setAttribute("checked", "checked"); 4382 input.setAttribute("name", "t"); 4383 4384 div.appendChild(input); 4385 4386 // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3 4387 // old WebKit doesn't clone checked state correctly in fragments 4388 support.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked; 4389 4390 // Support: IE<9 4391 // Cloned elements keep attachEvent handlers, we use addEventListener on IE9+ 4392 support.noCloneEvent = !!div.addEventListener; 4393 4394 // Support: IE<9 4395 // Since attributes and properties are the same in IE, 4396 // cleanData must set properties to undefined rather than use removeAttribute 4397 div[jQuery.expando] = 1; 4398 support.attributes = !div.getAttribute(jQuery.expando); 4399 })(); 4400 4401 // We have to close these tags to support XHTML (#13200) 4402 var wrapMap = { 4403 option: [1, "<select multiple='multiple'>", "</select>"], 4404 legend: [1, "<fieldset>", "</fieldset>"], 4405 area: [1, "<map>", "</map>"], 4406 4407 // Support: IE8 4408 param: [1, "<object>", "</object>"], 4409 thead: [1, "<table>", "</table>"], 4410 tr: [2, "<table><tbody>", "</tbody></table>"], 4411 col: [2, "<table><tbody></tbody><colgroup>", "</colgroup></table>"], 4412 td: [3, "<table><tbody><tr>", "</tr></tbody></table>"], 4413 4414 // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, 4415 // unless wrapped in a div with non-breaking characters in front of it. 4416 _default: support.htmlSerialize ? [0, "", ""] : [1, "X<div>", "</div>"] 4417 }; 4418 4419 // Support: IE8-IE9 4420 wrapMap.optgroup = wrapMap.option; 4421 4422 wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; 4423 wrapMap.th = wrapMap.td; 4424 4425 function getAll(context, tag) { 4426 var elems, 4427 elem, 4428 i = 0, 4429 found = typeof context.getElementsByTagName !== "undefined" ? context.getElementsByTagName(tag || "*") : typeof context.querySelectorAll !== "undefined" ? context.querySelectorAll(tag || "*") : undefined; 4430 4431 if (!found) { 4432 for (found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++) { 4433 if (!tag || jQuery.nodeName(elem, tag)) { 4434 found.push(elem); 4435 } else { 4436 jQuery.merge(found, getAll(elem, tag)); 4437 } 4438 } 4439 } 4440 4441 return tag === undefined || tag && jQuery.nodeName(context, tag) ? jQuery.merge([context], found) : found; 4442 } 4443 4444 // Mark scripts as having already been evaluated 4445 function setGlobalEval(elems, refElements) { 4446 var elem, 4447 i = 0; 4448 for (; (elem = elems[i]) != null; i++) { 4449 jQuery._data(elem, "globalEval", !refElements || jQuery._data(refElements[i], "globalEval")); 4450 } 4451 } 4452
4453 var rhtml = /<|&#?\w+;/, 4454 rtbody = /<tbody/i; 4455 4456 function fixDefaultChecked(elem) { 4457 if (rcheckableType.test(elem.type)) { 4458 elem.defaultChecked = elem.checked; 4459 } 4460 } 4461 4462 function buildFragment(elems, context, scripts, selection, ignored) { 4463 var j, 4464 elem, 4465 contains, 4466 tmp, 4467 tag, 4468 tbody, 4469 wrap, 4470 l = elems.length, 4471 4472 4473 // Ensure a safe fragment 4474 safe = createSafeFragment(context), 4475 nodes = [], 4476 i = 0; 4477 4478 for (; i < l; i++) { 4479 elem = elems[i]; 4480 4481 if (elem || elem === 0) { 4482 4483 // Add nodes directly 4484 if (jQuery.type(elem) === "object") { 4485 jQuery.merge(nodes, elem.nodeType ? [elem] : elem); 4486 4487 // Convert non-html into a text node 4488 } else if (!rhtml.test(elem)) { 4489 nodes.push(context.createTextNode(elem)); 4490 4491 // Convert html into DOM nodes 4492 } else { 4493 tmp = tmp || safe.appendChild(context.createElement("div")); 4494 4495 // Deserialize a standard representation 4496 tag = (rtagName.exec(elem) || ["", ""])[1].toLowerCase(); 4497 wrap = wrapMap[tag] || wrapMap._default; 4498 4499 tmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2]; 4500 4501 // Descend through wrappers to the right content 4502 j = wrap[0]; 4503 while (j--) { 4504 tmp = tmp.lastChild; 4505 } 4506 4507 // Manually add leading whitespace removed by IE 4508 if (!support.leadingWhitespace && rleadingWhitespace.test(elem)) { 4509 nodes.push(context.createTextNode(rleadingWhitespace.exec(elem)[0])); 4510 } 4511 4512 // Remove IE's autoinserted <tbody> from table fragments 4513 if (!support.tbody) { 4514 4515 // String was a <table>, *may* have spurious <tbody> 4516 elem = tag === "table" && !rtbody.test(elem) ? tmp.firstChild : 4517 4518 // String was a bare <thead> or <tfoot> 4519 wrap[1] === "<table>" && !rtbody.test(elem) ? tmp : 0; 4520 4521 j = elem && elem.childNodes.length; 4522 while (j--) { 4523 if (jQuery.nodeName(tbody = elem.childNodes[j], "tbody") && !tbody.childNodes.length) { 4524 4525 elem.removeChild(tbody); 4526 } 4527 } 4528 } 4529 4530 jQuery.merge(nodes, tmp.childNodes); 4531 4532 // Fix #12392 for WebKit and IE > 9 4533 tmp.textContent = ""; 4534 4535 // Fix #12392 for oldIE 4536 while (tmp.firstChild) { 4537 tmp.removeChild(tmp.firstChild); 4538 } 4539 4540 // Remember the top-level container for proper cleanup 4541 tmp = safe.lastChild; 4542 } 4543 } 4544 } 4545 4546 // Fix #11356: Clear elements from fragment 4547 if (tmp) { 4548 safe.removeChild(tmp); 4549 } 4550 4551 // Reset defaultChecked for any radios and checkboxes 4552 // about to be appended to the DOM in IE 6/7 (#8060) 4553 if (!support.appendChecked) { 4554 jQuery.grep(getAll(nodes, "input"), fixDefaultChecked); 4555 } 4556 4557 i = 0; 4558 while (elem = nodes[i++]) { 4559 4560 // Skip elements already in the context collection (trac-4087) 4561 if (selection && jQuery.inArray(elem, selection) > -1) { 4562 if (ignored) { 4563 ignored.push(elem); 4564 } 4565 4566 continue; 4567 } 4568 4569 contains = jQuery.contains(elem.ownerDocument, elem); 4570 4571 // Append to fragment 4572 tmp = getAll(safe.appendChild(elem), "script"); 4573 4574 // Preserve script evaluation history 4575 if (contains) { 4576 setGlobalEval(tmp); 4577 } 4578 4579 // Capture executables 4580 if (scripts) { 4581 j = 0; 4582 while (elem = tmp[j++]) { 4583 if (rscriptType.test(elem.type || "")) { 4584 scripts.push(elem); 4585 } 4586 } 4587 } 4588 } 4589 4590 tmp = null; 4591 4592 return safe; 4593 } 4594 4595 (function () { 4596 var i, 4597 eventName, 4598 div = document.createElement("div"); 4599 4600 // Support: IE<9 (lack submit/change bubble), Firefox (lack focus(in | out) events) 4601 for (i in { submit: true, change: true, focusin: true }) { 4602 eventName = "on" + i; 4603
vendor: 28,100 bytes, lines 4604-5572
4604 if (!(support[i] = eventName in window)) { 4605 4606 // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP) 4607 div.setAttribute(eventName, "t"); 4608 support[i] = div.attributes[eventName].expando === false; 4609 } 4610 } 4611 4612 // Null elements to avoid leaks in IE. 4613 div = null; 4614 })(); 4615 4616 var rformElems = /^(?:input|select|textarea)$/i, 4617 rkeyEvent = /^key/, 4618 rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, 4619 rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, 4620 rtypenamespace = /^([^.]*)(?:\.(.+)|)/; 4621 4622 function returnTrue() { 4623 return true; 4624 } 4625 4626 function returnFalse() { 4627 return false; 4628 } 4629 4630 // Support: IE9 4631 // See #13393 for more info 4632 function safeActiveElement() { 4633 try { 4634 return document.activeElement; 4635 } catch (err) {} 4636 } 4637 4638 function on(elem, types, selector, data, fn, one) { 4639 var origFn, type; 4640 4641 // Types can be a map of types/handlers 4642 if (typeof types === "object") { 4643 4644 // ( types-Object, selector, data ) 4645 if (typeof selector !== "string") { 4646 4647 // ( types-Object, data ) 4648 data = data || selector; 4649 selector = undefined; 4650 } 4651 for (type in types) { 4652 on(elem, type, selector, data, types[type], one); 4653 } 4654 return elem; 4655 } 4656 4657 if (data == null && fn == null) { 4658 4659 // ( types, fn ) 4660 fn = selector; 4661 data = selector = undefined; 4662 } else if (fn == null) { 4663 if (typeof selector === "string") { 4664 4665 // ( types, selector, fn ) 4666 fn = data; 4667 data = undefined; 4668 } else { 4669 4670 // ( types, data, fn ) 4671 fn = data; 4672 data = selector; 4673 selector = undefined; 4674 } 4675 } 4676 if (fn === false) { 4677 fn = returnFalse; 4678 } else if (!fn) { 4679 return elem; 4680 } 4681 4682 if (one === 1) { 4683 origFn = fn; 4684 fn = function (event) { 4685 4686 // Can use an empty set, since event contains the info 4687 jQuery().off(event); 4688 return origFn.apply(this, arguments); 4689 }; 4690 4691 // Use same guid so caller can remove using origFn 4692 fn.guid = origFn.guid || (origFn.guid = jQuery.guid++); 4693 } 4694 return elem.each(function () { 4695 jQuery.event.add(this, types, fn, data, selector); 4696 }); 4697 } 4698 4699 /* 4700 * Helper functions for managing events -- not part of the public interface. 4701 * Props to Dean Edwards' addEvent library for many of the ideas. 4702 */ 4703 jQuery.event = { 4704 4705 global: {}, 4706 4707 add: function (elem, types, handler, data, selector) { 4708 var tmp, 4709 events, 4710 t, 4711 handleObjIn, 4712 special, 4713 eventHandle, 4714 handleObj, 4715 handlers, 4716 type, 4717 namespaces, 4718 origType, 4719 elemData = jQuery._data(elem); 4720 4721 // Don't attach events to noData or text/comment nodes (but allow plain objects) 4722 if (!elemData) { 4723 return; 4724 } 4725 4726 // Caller can pass in an object of custom data in lieu of the handler 4727 if (handler.handler) { 4728 handleObjIn = handler; 4729 handler = handleObjIn.handler; 4730 selector = handleObjIn.selector; 4731 } 4732 4733 // Make sure that the handler has a unique ID, used to find/remove it later 4734 if (!handler.guid) { 4735 handler.guid = jQuery.guid++; 4736 } 4737 4738 // Init the element's event structure and main handler, if this is the first 4739 if (!(events = elemData.events)) { 4740 events = elemData.events = {}; 4741 } 4742 if (!(eventHandle = elemData.handle)) { 4743 eventHandle = elemData.handle = function (e) { 4744 4745 // Discard the second event of a jQuery.event.trigger() and 4746 // when an event is called after a page has unloaded 4747 return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? jQuery.event.dispatch.apply(eventHandle.elem, arguments) : undefined; 4748 }; 4749 4750 // Add elem as a property of the handle fn to prevent a memory leak 4751 // with IE non-native events 4752 eventHandle.elem = elem; 4753 } 4754 4755 // Handle multiple events separated by a space 4756 types = (types || "").match(rnotwhite) || [""]; 4757 t = types.length; 4758 while (t--) { 4759 tmp = rtypenamespace.exec(types[t]) || []; 4760 type = origType = tmp[1]; 4761 namespaces = (tmp[2] || "").split(".").sort(); 4762 4763 // There *must* be a type, no attaching namespace-only handlers 4764 if (!type) { 4765 continue; 4766 } 4767 4768 // If event changes its type, use the special event handlers for the changed type 4769 special = jQuery.event.special[type] || {}; 4770 4771 // If selector defined, determine special event api type, otherwise given type 4772 type = (selector ? special.delegateType : special.bindType) || type; 4773 4774 // Update special based on newly reset type 4775 special = jQuery.event.special[type] || {}; 4776 4777 // handleObj is passed to all event handlers 4778 handleObj = jQuery.extend({ 4779 type: type, 4780 origType: origType, 4781 data: data, 4782 handler: handler, 4783 guid: handler.guid, 4784 selector: selector, 4785 needsContext: selector && jQuery.expr.match.needsContext.test(selector), 4786 namespace: namespaces.join(".") 4787 }, handleObjIn); 4788 4789 // Init the event handler queue if we're the first 4790 if (!(handlers = events[type])) { 4791 handlers = events[type] = []; 4792 handlers.delegateCount = 0; 4793 4794 // Only use addEventListener/attachEvent if the special events handler returns false 4795 if (!special.setup || special.setup.call(elem, data, namespaces, eventHandle) === false) { 4796 4797 // Bind the global event handler to the element 4798 if (elem.addEventListener) { 4799 elem.addEventListener(type, eventHandle, false); 4800 } else if (elem.attachEvent) { 4801 elem.attachEvent("on" + type, eventHandle); 4802 } 4803 } 4804 } 4805 4806 if (special.add) { 4807 special.add.call(elem, handleObj); 4808 4809 if (!handleObj.handler.guid) { 4810 handleObj.handler.guid = handler.guid; 4811 } 4812 } 4813 4814 // Add to the element's handler list, delegates in front 4815 if (selector) { 4816 handlers.splice(handlers.delegateCount++, 0, handleObj); 4817 } else { 4818 handlers.push(handleObj); 4819 } 4820 4821 // Keep track of which events have ever been used, for event optimization 4822 jQuery.event.global[type] = true; 4823 } 4824 4825 // Nullify elem to prevent memory leaks in IE 4826 elem = null; 4827 }, 4828 4829 // Detach an event or set of events from an element 4830 remove: function (elem, types, handler, selector, mappedTypes) { 4831 var j, 4832 handleObj, 4833 tmp, 4834 origCount, 4835 t, 4836 events, 4837 special, 4838 handlers, 4839 type, 4840 namespaces, 4841 origType, 4842 elemData = jQuery.hasData(elem) && jQuery._data(elem); 4843 4844 if (!elemData || !(events = elemData.events)) { 4845 return; 4846 } 4847 4848 // Once for each type.namespace in types; type may be omitted 4849 types = (types || "").match(rnotwhite) || [""]; 4850 t = types.length; 4851 while (t--) { 4852 tmp = rtypenamespace.exec(types[t]) || []; 4853 type = origType = tmp[1]; 4854 namespaces = (tmp[2] || "").split(".").sort(); 4855 4856 // Unbind all events (on this namespace, if provided) for the element 4857 if (!type) { 4858 for (type in events) { 4859 jQuery.event.remove(elem, type + types[t], handler, selector, true); 4860 } 4861 continue; 4862 } 4863 4864 special = jQuery.event.special[type] || {}; 4865 type = (selector ? special.delegateType : special.bindType) || type; 4866 handlers = events[type] || []; 4867 tmp = tmp[2] && new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)"); 4868 4869 // Remove matching events 4870 origCount = j = handlers.length; 4871 while (j--) { 4872 handleObj = handlers[j]; 4873 4874 if ((mappedTypes || origType === handleObj.origType) && (!handler || handler.guid === handleObj.guid) && (!tmp || tmp.test(handleObj.namespace)) && (!selector || selector === handleObj.selector || selector === "**" && handleObj.selector)) { 4875 handlers.splice(j, 1); 4876 4877 if (handleObj.selector) { 4878 handlers.delegateCount--; 4879 } 4880 if (special.remove) { 4881 special.remove.call(elem, handleObj); 4882 } 4883 } 4884 } 4885 4886 // Remove generic event handler if we removed something and no more handlers exist 4887 // (avoids potential for endless recursion during removal of special event handlers) 4888 if (origCount && !handlers.length) { 4889 if (!special.teardown || special.teardown.call(elem, namespaces, elemData.handle) === false) { 4890 4891 jQuery.removeEvent(elem, type, elemData.handle); 4892 } 4893 4894 delete events[type]; 4895 } 4896 } 4897 4898 // Remove the expando if it's no longer used 4899 if (jQuery.isEmptyObject(events)) { 4900 delete elemData.handle; 4901 4902 // removeData also checks for emptiness and clears the expando if empty 4903 // so use it instead of delete 4904 jQuery._removeData(elem, "events"); 4905 } 4906 }, 4907 4908 trigger: function (event, data, elem, onlyHandlers) { 4909 var handle, 4910 ontype, 4911 cur, 4912 bubbleType, 4913 special, 4914 tmp, 4915 i, 4916 eventPath = [elem || document], 4917 type = hasOwn.call(event, "type") ? event.type : event, 4918 namespaces = hasOwn.call(event, "namespace") ? event.namespace.split(".") : []; 4919 4920 cur = tmp = elem = elem || document; 4921 4922 // Don't do events on text and comment nodes 4923 if (elem.nodeType === 3 || elem.nodeType === 8) { 4924 return; 4925 } 4926 4927 // focus/blur morphs to focusin/out; ensure we're not firing them right now 4928 if (rfocusMorph.test(type + jQuery.event.triggered)) { 4929 return; 4930 } 4931 4932 if (type.indexOf(".") > -1) { 4933 4934 // Namespaced trigger; create a regexp to match event type in handle() 4935 namespaces = type.split("."); 4936 type = namespaces.shift(); 4937 namespaces.sort(); 4938 } 4939 ontype = type.indexOf(":") < 0 && "on" + type; 4940 4941 // Caller can pass in a jQuery.Event object, Object, or just an event type string 4942 event = event[jQuery.expando] ? event : new jQuery.Event(type, typeof event === "object" && event); 4943 4944 // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) 4945 event.isTrigger = onlyHandlers ? 2 : 3; 4946 event.namespace = namespaces.join("."); 4947 event.rnamespace = event.namespace ? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)") : null; 4948 4949 // Clean up the event in case it is being reused 4950 event.result = undefined; 4951 if (!event.target) { 4952 event.target = elem; 4953 } 4954 4955 // Clone any incoming data and prepend the event, creating the handler arg list 4956 data = data == null ? [event] : jQuery.makeArray(data, [event]); 4957 4958 // Allow special events to draw outside the lines 4959 special = jQuery.event.special[type] || {}; 4960 if (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) { 4961 return; 4962 } 4963 4964 // Determine event propagation path in advance, per W3C events spec (#9951) 4965 // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) 4966 if (!onlyHandlers && !special.noBubble && !jQuery.isWindow(elem)) { 4967 4968 bubbleType = special.delegateType || type; 4969 if (!rfocusMorph.test(bubbleType + type)) { 4970 cur = cur.parentNode; 4971 } 4972 for (; cur; cur = cur.parentNode) { 4973 eventPath.push(cur); 4974 tmp = cur; 4975 } 4976 4977 // Only add window if we got to document (e.g., not plain obj or detached DOM) 4978 if (tmp === (elem.ownerDocument || document)) { 4979 eventPath.push(tmp.defaultView || tmp.parentWindow || window); 4980 } 4981 } 4982 4983 // Fire handlers on the event path 4984 i = 0; 4985 while ((cur = eventPath[i++]) && !event.isPropagationStopped()) { 4986 4987 event.type = i > 1 ? bubbleType : special.bindType || type; 4988 4989 // jQuery handler 4990 handle = (jQuery._data(cur, "events") || {})[event.type] && jQuery._data(cur, "handle"); 4991 4992 if (handle) { 4993 handle.apply(cur, data); 4994 } 4995 4996 // Native handler 4997 handle = ontype && cur[ontype]; 4998 if (handle && handle.apply && acceptData(cur)) { 4999 event.result = handle.apply(cur, data); 5000 if (event.result === false) { 5001 event.preventDefault(); 5002 } 5003 } 5004 } 5005 event.type = type; 5006 5007 // If nobody prevented the default action, do it now 5008 if (!onlyHandlers && !event.isDefaultPrevented()) { 5009 5010 if ((!special._default || special._default.apply(eventPath.pop(), data) === false) && acceptData(elem)) { 5011 5012 // Call a native DOM method on the target with the same name name as the event. 5013 // Can't use an .isFunction() check here because IE6/7 fails that test. 5014 // Don't do default actions on window, that's where global variables be (#6170) 5015 if (ontype && elem[type] && !jQuery.isWindow(elem)) { 5016 5017 // Don't re-trigger an onFOO event when we call its FOO() method 5018 tmp = elem[ontype]; 5019 5020 if (tmp) { 5021 elem[ontype] = null; 5022 } 5023 5024 // Prevent re-triggering of the same event, since we already bubbled it above 5025 jQuery.event.triggered = type; 5026 try { 5027 elem[type](); 5028 } catch (e) { 5029 5030 // IE<9 dies on focus/blur to hidden element (#1486,#12518) 5031 // only reproducible on winXP IE8 native, not IE9 in IE8 mode 5032 } 5033 jQuery.event.triggered = undefined; 5034 5035 if (tmp) { 5036 elem[ontype] = tmp; 5037 } 5038 } 5039 } 5040 } 5041 5042 return event.result; 5043 }, 5044 5045 dispatch: function (event) { 5046 5047 // Make a writable jQuery.Event from the native event object 5048 event = jQuery.event.fix(event); 5049 5050 var i, 5051 j, 5052 ret, 5053 matched, 5054 handleObj, 5055 handlerQueue = [], 5056 args = slice.call(arguments), 5057 handlers = (jQuery._data(this, "events") || {})[event.type] || [], 5058 special = jQuery.event.special[event.type] || {}; 5059 5060 // Use the fix-ed jQuery.Event rather than the (read-only) native event 5061 args[0] = event; 5062 event.delegateTarget = this; 5063 5064 // Call the preDispatch hook for the mapped type, and let it bail if desired 5065 if (special.preDispatch && special.preDispatch.call(this, event) === false) { 5066 return; 5067 } 5068 5069 // Determine handlers 5070 handlerQueue = jQuery.event.handlers.call(this, event, handlers); 5071 5072 // Run delegates first; they may want to stop propagation beneath us 5073 i = 0; 5074 while ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) { 5075 event.currentTarget = matched.elem; 5076 5077 j = 0; 5078 while ((handleObj = matched.handlers[j++]) && !event.isImmediatePropagationStopped()) { 5079 5080 // Triggered event must either 1) have no namespace, or 2) have namespace(s) 5081 // a subset or equal to those in the bound event (both can have no namespace). 5082 if (!event.rnamespace || event.rnamespace.test(handleObj.namespace)) { 5083 5084 event.handleObj = handleObj; 5085 event.data = handleObj.data; 5086 5087 ret = ((jQuery.event.special[handleObj.origType] || {}).handle || handleObj.handler).apply(matched.elem, args); 5088 5089 if (ret !== undefined) { 5090 if ((event.result = ret) === false) { 5091 event.preventDefault(); 5092 event.stopPropagation(); 5093 } 5094 } 5095 } 5096 } 5097 } 5098 5099 // Call the postDispatch hook for the mapped type 5100 if (special.postDispatch) { 5101 special.postDispatch.call(this, event); 5102 } 5103 5104 return event.result; 5105 }, 5106 5107 handlers: function (event, handlers) { 5108 var i, 5109 matches, 5110 sel, 5111 handleObj, 5112 handlerQueue = [], 5113 delegateCount = handlers.delegateCount, 5114 cur = event.target; 5115 5116 // Support (at least): Chrome, IE9 5117 // Find delegate handlers 5118 // Black-hole SVG <use> instance trees (#13180) 5119 // 5120 // Support: Firefox<=42+ 5121 // Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343) 5122 if (delegateCount && cur.nodeType && (event.type !== "click" || isNaN(event.button) || event.button < 1)) { 5123 5124 /* jshint eqeqeq: false */ 5125 for (; cur != this; cur = cur.parentNode || this) { 5126 /* jshint eqeqeq: true */ 5127 5128 // Don't check non-elements (#13208) 5129 // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) 5130 if (cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click")) { 5131 matches = []; 5132 for (i = 0; i < delegateCount; i++) { 5133 handleObj = handlers[i]; 5134 5135 // Don't conflict with Object.prototype properties (#13203) 5136 sel = handleObj.selector + " "; 5137 5138 if (matches[sel] === undefined) { 5139 matches[sel] = handleObj.needsContext ? jQuery(sel, this).index(cur) > -1 : jQuery.find(sel, this, null, [cur]).length; 5140 } 5141 if (matches[sel]) { 5142 matches.push(handleObj); 5143 } 5144 } 5145 if (matches.length) { 5146 handlerQueue.push({ elem: cur, handlers: matches }); 5147 } 5148 } 5149 } 5150 } 5151 5152 // Add the remaining (directly-bound) handlers 5153 if (delegateCount < handlers.length) { 5154 handlerQueue.push({ elem: this, handlers: handlers.slice(delegateCount) }); 5155 } 5156 5157 return handlerQueue; 5158 }, 5159 5160 fix: function (event) { 5161 if (event[jQuery.expando]) { 5162 return event; 5163 } 5164 5165 // Create a writable copy of the event object and normalize some properties 5166 var i, 5167 prop, 5168 copy, 5169 type = event.type, 5170 originalEvent = event, 5171 fixHook = this.fixHooks[type]; 5172 5173 if (!fixHook) { 5174 this.fixHooks[type] = fixHook = rmouseEvent.test(type) ? this.mouseHooks : rkeyEvent.test(type) ? this.keyHooks : {}; 5175 } 5176 copy = fixHook.props ? this.props.concat(fixHook.props) : this.props; 5177 5178 event = new jQuery.Event(originalEvent); 5179 5180 i = copy.length; 5181 while (i--) { 5182 prop = copy[i]; 5183 event[prop] = originalEvent[prop]; 5184 } 5185 5186 // Support: IE<9 5187 // Fix target property (#1925) 5188 if (!event.target) { 5189 event.target = originalEvent.srcElement || document; 5190 } 5191 5192 // Support: Safari 6-8+ 5193 // Target should not be a text node (#504, #13143) 5194 if (event.target.nodeType === 3) { 5195 event.target = event.target.parentNode; 5196 } 5197 5198 // Support: IE<9 5199 // For mouse/key events, metaKey==false if it's undefined (#3368, #11328) 5200 event.metaKey = !!event.metaKey; 5201 5202 return fixHook.filter ? fixHook.filter(event, originalEvent) : event; 5203 }, 5204 5205 // Includes some event props shared by KeyEvent and MouseEvent 5206 props: ("altKey bubbles cancelable ctrlKey currentTarget detail eventPhase " + "metaKey relatedTarget shiftKey target timeStamp view which").split(" "), 5207 5208 fixHooks: {}, 5209 5210 keyHooks: { 5211 props: "char charCode key keyCode".split(" "), 5212 filter: function (event, original) { 5213 5214 // Add which for key events 5215 if (event.which == null) { 5216 event.which = original.charCode != null ? original.charCode : original.keyCode; 5217 } 5218 5219 return event; 5220 } 5221 }, 5222 5223 mouseHooks: { 5224 props: ("button buttons clientX clientY fromElement offsetX offsetY " + "pageX pageY screenX screenY toElement").split(" "), 5225 filter: function (event, original) { 5226 var body, 5227 eventDoc, 5228 doc, 5229 button = original.button, 5230 fromElement = original.fromElement; 5231 5232 // Calculate pageX/Y if missing and clientX/Y available 5233 if (event.pageX == null && original.clientX != null) { 5234 eventDoc = event.target.ownerDocument || document; 5235 doc = eventDoc.documentElement; 5236 body = eventDoc.body; 5237 5238 event.pageX = original.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0); 5239 event.pageY = original.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0); 5240 } 5241 5242 // Add relatedTarget, if necessary 5243 if (!event.relatedTarget && fromElement) { 5244 event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; 5245 } 5246 5247 // Add which for click: 1 === left; 2 === middle; 3 === right 5248 // Note: button is not normalized, so don't use it 5249 if (!event.which && button !== undefined) { 5250 event.which = button & 1 ? 1 : button & 2 ? 3 : button & 4 ? 2 : 0; 5251 } 5252 5253 return event; 5254 } 5255 }, 5256 5257 special: { 5258 load: { 5259 5260 // Prevent triggered image.load events from bubbling to window.load 5261 noBubble: true 5262 }, 5263 focus: { 5264 5265 // Fire native event if possible so blur/focus sequence is correct 5266 trigger: function () { 5267 if (this !== safeActiveElement() && this.focus) { 5268 try { 5269 this.focus(); 5270 return false; 5271 } catch (e) { 5272 5273 // Support: IE<9 5274 // If we error on focus to hidden element (#1486, #12518), 5275 // let .trigger() run the handlers 5276 } 5277 } 5278 }, 5279 delegateType: "focusin" 5280 }, 5281 blur: { 5282 trigger: function () { 5283 if (this === safeActiveElement() && this.blur) { 5284 this.blur(); 5285 return false; 5286 } 5287 }, 5288 delegateType: "focusout" 5289 }, 5290 click: { 5291 5292 // For checkbox, fire native event so checked state will be right 5293 trigger: function () { 5294 if (jQuery.nodeName(this, "input") && this.type === "checkbox" && this.click) { 5295 this.click(); 5296 return false; 5297 } 5298 }, 5299 5300 // For cross-browser consistency, don't fire native .click() on links 5301 _default: function (event) { 5302 return jQuery.nodeName(event.target, "a"); 5303 } 5304 }, 5305 5306 beforeunload: { 5307 postDispatch: function (event) { 5308 5309 // Support: Firefox 20+ 5310 // Firefox doesn't alert if the returnValue field is not set. 5311 if (event.result !== undefined && event.originalEvent) { 5312 event.originalEvent.returnValue = event.result; 5313 } 5314 } 5315 } 5316 }, 5317 5318 // Piggyback on a donor event to simulate a different one 5319 simulate: function (type, elem, event) { 5320 var e = jQuery.extend(new jQuery.Event(), event, { 5321 type: type, 5322 isSimulated: true 5323 5324 // Previously, `originalEvent: {}` was set here, so stopPropagation call 5325 // would not be triggered on donor event, since in our own 5326 // jQuery.event.stopPropagation function we had a check for existence of 5327 // originalEvent.stopPropagation method, so, consequently it would be a noop. 5328 // 5329 // Guard for simulated events was moved to jQuery.event.stopPropagation function 5330 // since `originalEvent` should point to the original event for the 5331 // constancy with other events and for more focused logic 5332 }); 5333 5334 jQuery.event.trigger(e, null, elem); 5335 5336 if (e.isDefaultPrevented()) { 5337 event.preventDefault(); 5338 } 5339 } 5340 }; 5341 5342 jQuery.removeEvent = document.removeEventListener ? function (elem, type, handle) { 5343 5344 // This "if" is needed for plain objects 5345 if (elem.removeEventListener) { 5346 elem.removeEventListener(type, handle); 5347 } 5348 } : function (elem, type, handle) { 5349 var name = "on" + type; 5350 5351 if (elem.detachEvent) { 5352 5353 // #8545, #7054, preventing memory leaks for custom events in IE6-8 5354 // detachEvent needed property on element, by name of that event, 5355 // to properly expose it to GC 5356 if (typeof elem[name] === "undefined") { 5357 elem[name] = null; 5358 } 5359 5360 elem.detachEvent(name, handle); 5361 } 5362 }; 5363 5364 jQuery.Event = function (src, props) { 5365 5366 // Allow instantiation without the 'new' keyword 5367 if (!(this instanceof jQuery.Event)) { 5368 return new jQuery.Event(src, props); 5369 } 5370 5371 // Event object 5372 if (src && src.type) { 5373 this.originalEvent = src; 5374 this.type = src.type; 5375 5376 // Events bubbling up the document may have been marked as prevented 5377 // by a handler lower down the tree; reflect the correct value. 5378 this.isDefaultPrevented = src.defaultPrevented || src.defaultPrevented === undefined && 5379 5380 // Support: IE < 9, Android < 4.0 5381 src.returnValue === false ? returnTrue : returnFalse; 5382 5383 // Event type 5384 } else { 5385 this.type = src; 5386 } 5387 5388 // Put explicitly provided properties onto the event object 5389 if (props) { 5390 jQuery.extend(this, props); 5391 } 5392 5393 // Create a timestamp if incoming event doesn't have one 5394 this.timeStamp = src && src.timeStamp || jQuery.now(); 5395 5396 // Mark it as fixed 5397 this[jQuery.expando] = true; 5398 }; 5399 5400 // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding 5401 // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html 5402 jQuery.Event.prototype = { 5403 constructor: jQuery.Event, 5404 isDefaultPrevented: returnFalse, 5405 isPropagationStopped: returnFalse, 5406 isImmediatePropagationStopped: returnFalse, 5407 5408 preventDefault: function () { 5409 var e = this.originalEvent; 5410 5411 this.isDefaultPrevented = returnTrue; 5412 if (!e) { 5413 return; 5414 } 5415 5416 // If preventDefault exists, run it on the original event 5417 if (e.preventDefault) { 5418 e.preventDefault(); 5419 5420 // Support: IE 5421 // Otherwise set the returnValue property of the original event to false 5422 } else { 5423 e.returnValue = false; 5424 } 5425 }, 5426 stopPropagation: function () { 5427 var e = this.originalEvent; 5428 5429 this.isPropagationStopped = returnTrue; 5430 5431 if (!e || this.isSimulated) { 5432 return; 5433 } 5434 5435 // If stopPropagation exists, run it on the original event 5436 if (e.stopPropagation) { 5437 e.stopPropagation(); 5438 } 5439 5440 // Support: IE 5441 // Set the cancelBubble property of the original event to true 5442 e.cancelBubble = true; 5443 }, 5444 stopImmediatePropagation: function () { 5445 var e = this.originalEvent; 5446 5447 this.isImmediatePropagationStopped = returnTrue; 5448 5449 if (e && e.stopImmediatePropagation) { 5450 e.stopImmediatePropagation(); 5451 } 5452 5453 this.stopPropagation(); 5454 } 5455 }; 5456 5457 // Create mouseenter/leave events using mouseover/out and event-time checks 5458 // so that event delegation works in jQuery. 5459 // Do the same for pointerenter/pointerleave and pointerover/pointerout 5460 // 5461 // Support: Safari 7 only 5462 // Safari sends mouseenter too often; see: 5463 // https://code.google.com/p/chromium/issues/detail?id=470258 5464 // for the description of the bug (it existed in older Chrome versions as well). 5465 jQuery.each({ 5466 mouseenter: "mouseover", 5467 mouseleave: "mouseout", 5468 pointerenter: "pointerover", 5469 pointerleave: "pointerout" 5470 }, function (orig, fix) { 5471 jQuery.event.special[orig] = { 5472 delegateType: fix, 5473 bindType: fix, 5474 5475 handle: function (event) { 5476 var ret, 5477 target = this, 5478 related = event.relatedTarget, 5479 handleObj = event.handleObj; 5480 5481 // For mouseenter/leave call the handler if related is outside the target. 5482 // NB: No relatedTarget if the mouse left/entered the browser window 5483 if (!related || related !== target && !jQuery.contains(target, related)) { 5484 event.type = handleObj.origType; 5485 ret = handleObj.handler.apply(this, arguments); 5486 event.type = fix; 5487 } 5488 return ret; 5489 } 5490 }; 5491 }); 5492 5493 // IE submit delegation 5494 if (!support.submit) { 5495 5496 jQuery.event.special.submit = { 5497 setup: function () { 5498 5499 // Only need this for delegated form submit events 5500 if (jQuery.nodeName(this, "form")) { 5501 return false; 5502 } 5503 5504 // Lazy-add a submit handler when a descendant form may potentially be submitted 5505 jQuery.event.add(this, "click._submit keypress._submit", function (e) { 5506 5507 // Node name check avoids a VML-related crash in IE (#9807) 5508 var elem = e.target, 5509 form = jQuery.nodeName(elem, "input") || jQuery.nodeName(elem, "button") ? 5510 5511 // Support: IE <=8 5512 // We use jQuery.prop instead of elem.form 5513 // to allow fixing the IE8 delegated submit issue (gh-2332) 5514 // by 3rd party polyfills/workarounds. 5515 jQuery.prop(elem, "form") : undefined; 5516 5517 if (form && !jQuery._data(form, "submit")) { 5518 jQuery.event.add(form, "submit._submit", function (event) { 5519 event._submitBubble = true; 5520 }); 5521 jQuery._data(form, "submit", true); 5522 } 5523 }); 5524 5525 // return undefined since we don't need an event listener 5526 }, 5527 5528 postDispatch: function (event) { 5529 5530 // If form was submitted by the user, bubble the event up the tree 5531 if (event._submitBubble) { 5532 delete event._submitBubble; 5533 if (this.parentNode && !event.isTrigger) { 5534 jQuery.event.simulate("submit", this.parentNode, event); 5535 } 5536 } 5537 }, 5538 5539 teardown: function () { 5540 5541 // Only need this for delegated form submit events 5542 if (jQuery.nodeName(this, "form")) { 5543 return false; 5544 } 5545 5546 // Remove delegated handlers; cleanData eventually reaps submit handlers attached above 5547 jQuery.event.remove(this, "._submit"); 5548 } 5549 }; 5550 } 5551 5552 // IE change delegation and checkbox/radio fix 5553 if (!support.change) { 5554 5555 jQuery.event.special.change = { 5556 5557 setup: function () { 5558 5559 if (rformElems.test(this.nodeName)) { 5560 5561 // IE doesn't fire change on a check/radio until blur; trigger it on click 5562 // after a propertychange. Eat the blur-change in special.change.handle. 5563 // This still fires onchange a second time for check/radio after blur. 5564 if (this.type === "checkbox" || this.type === "radio") { 5565 jQuery.event.add(this, "propertychange._change", function (event) { 5566 if (event.originalEvent.propertyName === "checked") { 5567 this._justChanged = true; 5568 } 5569 }); 5570 jQuery.event.add(this, "click._change", function (event) { 5571 if (this._justChanged && !event.isTrigger) { 5572 this._justChanged = false;
5573 } 5574 5575 // Allow triggered, simulated change events (#11500) 5576 jQuery.event.simulate("change", this, event); 5577 }); 5578 } 5579 return false; 5580 } 5581 5582 // Delegated event; lazy-add a change handler on descendant inputs 5583 jQuery.event.add(this, "beforeactivate._change", function (e) { 5584 var elem = e.target; 5585 5586 if (rformElems.test(elem.nodeName) && !jQuery._data(elem, "change")) { 5587 jQuery.event.add(elem, "change._change", function (event) { 5588 if (this.parentNode && !event.isSimulated && !event.isTrigger) { 5589 jQuery.event.simulate("change", this.parentNode, event); 5590 } 5591 }); 5592 jQuery._data(elem, "change", true); 5593 } 5594 }); 5595 }, 5596 5597 handle: function (event) { 5598 var elem = event.target; 5599 5600 // Swallow native change events from checkbox/radio, we already triggered them above 5601 if (this !== elem || event.isSimulated || event.isTrigger || elem.type !== "radio" && elem.type !== "checkbox") { 5602 5603 return event.handleObj.handler.apply(this, arguments); 5604 } 5605 }, 5606 5607 teardown: function () { 5608 jQuery.event.remove(this, "._change"); 5609 5610 return !rformElems.test(this.nodeName); 5611 } 5612 }; 5613 } 5614 5615 // Support: Firefox 5616 // Firefox doesn't have focus(in | out) events
vendor: 1,180 bytes, lines 5617-5648
5617 // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 5618 // 5619 // Support: Chrome, Safari 5620 // focus(in | out) events fire after focus & blur events, 5621 // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order 5622 // Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857 5623 if (!support.focusin) { 5624 jQuery.each({ focus: "focusin", blur: "focusout" }, function (orig, fix) { 5625 5626 // Attach a single capturing handler on the document while someone wants focusin/focusout 5627 var handler = function (event) { 5628 jQuery.event.simulate(fix, event.target, jQuery.event.fix(event)); 5629 }; 5630 5631 jQuery.event.special[fix] = { 5632 setup: function () { 5633 var doc = this.ownerDocument || this, 5634 attaches = jQuery._data(doc, fix); 5635 5636 if (!attaches) { 5637 doc.addEventListener(orig, handler, true); 5638 } 5639 jQuery._data(doc, fix, (attaches || 0) + 1); 5640 }, 5641 teardown: function () { 5642 var doc = this.ownerDocument || this, 5643 attaches = jQuery._data(doc, fix) - 1; 5644 5645 if (!attaches) { 5646 doc.removeEventListener(orig, handler, true); 5647 jQuery._removeData(doc, fix); 5648 } else {
vendor: 11,646 bytes, lines 5649-6058
5649 jQuery._data(doc, fix, attaches); 5650 } 5651 } 5652 }; 5653 }); 5654 } 5655 5656 jQuery.fn.extend({ 5657 5658 on: function (types, selector, data, fn) { 5659 return on(this, types, selector, data, fn); 5660 }, 5661 one: function (types, selector, data, fn) { 5662 return on(this, types, selector, data, fn, 1); 5663 }, 5664 off: function (types, selector, fn) { 5665 var handleObj, type; 5666 if (types && types.preventDefault && types.handleObj) { 5667 5668 // ( event ) dispatched jQuery.Event 5669 handleObj = types.handleObj; 5670 jQuery(types.delegateTarget).off(handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, handleObj.selector, handleObj.handler); 5671 return this; 5672 } 5673 if (typeof types === "object") { 5674 5675 // ( types-object [, selector] ) 5676 for (type in types) { 5677 this.off(type, selector, types[type]); 5678 } 5679 return this; 5680 } 5681 if (selector === false || typeof selector === "function") { 5682 5683 // ( types [, fn] ) 5684 fn = selector; 5685 selector = undefined; 5686 } 5687 if (fn === false) { 5688 fn = returnFalse; 5689 } 5690 return this.each(function () { 5691 jQuery.event.remove(this, types, fn, selector); 5692 }); 5693 }, 5694 5695 trigger: function (type, data) { 5696 return this.each(function () { 5697 jQuery.event.trigger(type, data, this); 5698 }); 5699 }, 5700 triggerHandler: function (type, data) { 5701 var elem = this[0]; 5702 if (elem) { 5703 return jQuery.event.trigger(type, data, elem, true); 5704 } 5705 } 5706 }); 5707 5708 var rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, 5709 rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"), 5710 rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi, 5711 5712 5713 // Support: IE 10-11, Edge 10240+ 5714 // In IE/Edge using regex groups here causes severe slowdowns. 5715 // See https://connect.microsoft.com/IE/feedback/details/1736512/ 5716 rnoInnerhtml = /<script|<style|<link/i, 5717 5718 5719 // checked="checked" or checked 5720 rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, 5721 rscriptTypeMasked = /^true\/(.*)/, 5722 rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g, 5723 safeFragment = createSafeFragment(document), 5724 fragmentDiv = safeFragment.appendChild(document.createElement("div")); 5725 5726 // Support: IE<8 5727 // Manipulating tables requires a tbody 5728 function manipulationTarget(elem, content) { 5729 return jQuery.nodeName(elem, "table") && jQuery.nodeName(content.nodeType !== 11 ? content : content.firstChild, "tr") ? elem.getElementsByTagName("tbody")[0] || elem.appendChild(elem.ownerDocument.createElement("tbody")) : elem; 5730 } 5731 5732 // Replace/restore the type attribute of script elements for safe DOM manipulation 5733 function disableScript(elem) { 5734 elem.type = (jQuery.find.attr(elem, "type") !== null) + "/" + elem.type; 5735 return elem; 5736 } 5737 function restoreScript(elem) { 5738 var match = rscriptTypeMasked.exec(elem.type); 5739 if (match) { 5740 elem.type = match[1]; 5741 } else { 5742 elem.removeAttribute("type"); 5743 } 5744 return elem; 5745 } 5746 5747 function cloneCopyEvent(src, dest) { 5748 if (dest.nodeType !== 1 || !jQuery.hasData(src)) { 5749 return; 5750 } 5751 5752 var type, 5753 i, 5754 l, 5755 oldData = jQuery._data(src), 5756 curData = jQuery._data(dest, oldData), 5757 events = oldData.events; 5758 5759 if (events) { 5760 delete curData.handle; 5761 curData.events = {}; 5762 5763 for (type in events) { 5764 for (i = 0, l = events[type].length; i < l; i++) { 5765 jQuery.event.add(dest, type, events[type][i]); 5766 } 5767 } 5768 } 5769 5770 // make the cloned public data object a copy from the original 5771 if (curData.data) { 5772 curData.data = jQuery.extend({}, curData.data); 5773 } 5774 } 5775 5776 function fixCloneNodeIssues(src, dest) { 5777 var nodeName, e, data; 5778 5779 // We do not need to do anything for non-Elements 5780 if (dest.nodeType !== 1) { 5781 return; 5782 } 5783 5784 nodeName = dest.nodeName.toLowerCase(); 5785 5786 // IE6-8 copies events bound via attachEvent when using cloneNode. 5787 if (!support.noCloneEvent && dest[jQuery.expando]) { 5788 data = jQuery._data(dest); 5789 5790 for (e in data.events) { 5791 jQuery.removeEvent(dest, e, data.handle); 5792 } 5793 5794 // Event data gets referenced instead of copied if the expando gets copied too 5795 dest.removeAttribute(jQuery.expando); 5796 } 5797 5798 // IE blanks contents when cloning scripts, and tries to evaluate newly-set text 5799 if (nodeName === "script" && dest.text !== src.text) { 5800 disableScript(dest).text = src.text; 5801 restoreScript(dest); 5802 5803 // IE6-10 improperly clones children of object elements using classid. 5804 // IE10 throws NoModificationAllowedError if parent is null, #12132. 5805 } else if (nodeName === "object") { 5806 if (dest.parentNode) { 5807 dest.outerHTML = src.outerHTML; 5808 } 5809 5810 // This path appears unavoidable for IE9. When cloning an object 5811 // element in IE9, the outerHTML strategy above is not sufficient. 5812 // If the src has innerHTML and the destination does not, 5813 // copy the src.innerHTML into the dest.innerHTML. #10324 5814 if (support.html5Clone && src.innerHTML && !jQuery.trim(dest.innerHTML)) { 5815 dest.innerHTML = src.innerHTML; 5816 } 5817 } else if (nodeName === "input" && rcheckableType.test(src.type)) { 5818 5819 // IE6-8 fails to persist the checked state of a cloned checkbox 5820 // or radio button. Worse, IE6-7 fail to give the cloned element 5821 // a checked appearance if the defaultChecked value isn't also set 5822 5823 dest.defaultChecked = dest.checked = src.checked; 5824 5825 // IE6-7 get confused and end up setting the value of a cloned 5826 // checkbox/radio button to an empty string instead of "on" 5827 if (dest.value !== src.value) { 5828 dest.value = src.value; 5829 } 5830 5831 // IE6-8 fails to return the selected option to the default selected 5832 // state when cloning options 5833 } else if (nodeName === "option") { 5834 dest.defaultSelected = dest.selected = src.defaultSelected; 5835 5836 // IE6-8 fails to set the defaultValue to the correct value when 5837 // cloning other types of input fields 5838 } else if (nodeName === "input" || nodeName === "textarea") { 5839 dest.defaultValue = src.defaultValue; 5840 } 5841 } 5842 5843 function domManip(collection, args, callback, ignored) { 5844 5845 // Flatten any nested arrays 5846 args = concat.apply([], args); 5847 5848 var first, 5849 node, 5850 hasScripts, 5851 scripts, 5852 doc, 5853 fragment, 5854 i = 0, 5855 l = collection.length, 5856 iNoClone = l - 1, 5857 value = args[0], 5858 isFunction = jQuery.isFunction(value); 5859 5860 // We can't cloneNode fragments that contain checked, in WebKit 5861 if (isFunction || l > 1 && typeof value === "string" && !support.checkClone && rchecked.test(value)) { 5862 return collection.each(function (index) { 5863 var self = collection.eq(index); 5864 if (isFunction) { 5865 args[0] = value.call(this, index, self.html()); 5866 } 5867 domManip(self, args, callback, ignored); 5868 }); 5869 } 5870 5871 if (l) { 5872 fragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored); 5873 first = fragment.firstChild; 5874 5875 if (fragment.childNodes.length === 1) { 5876 fragment = first; 5877 } 5878 5879 // Require either new content or an interest in ignored elements to invoke the callback 5880 if (first || ignored) { 5881 scripts = jQuery.map(getAll(fragment, "script"), disableScript); 5882 hasScripts = scripts.length; 5883 5884 // Use the original fragment for the last item 5885 // instead of the first because it can end up 5886 // being emptied incorrectly in certain situations (#8070). 5887 for (; i < l; i++) { 5888 node = fragment; 5889 5890 if (i !== iNoClone) { 5891 node = jQuery.clone(node, true, true); 5892 5893 // Keep references to cloned scripts for later restoration 5894 if (hasScripts) { 5895 5896 // Support: Android<4.1, PhantomJS<2 5897 // push.apply(_, arraylike) throws on ancient WebKit 5898 jQuery.merge(scripts, getAll(node, "script")); 5899 } 5900 } 5901 5902 callback.call(collection[i], node, i); 5903 } 5904 5905 if (hasScripts) { 5906 doc = scripts[scripts.length - 1].ownerDocument; 5907 5908 // Reenable scripts 5909 jQuery.map(scripts, restoreScript); 5910 5911 // Evaluate executable scripts on first document insertion 5912 for (i = 0; i < hasScripts; i++) { 5913 node = scripts[i]; 5914 if (rscriptType.test(node.type || "") && !jQuery._data(node, "globalEval") && jQuery.contains(doc, node)) { 5915 5916 if (node.src) { 5917 5918 // Optional AJAX dependency, but won't run scripts if not present 5919 if (jQuery._evalUrl) { 5920 jQuery._evalUrl(node.src); 5921 } 5922 } else { 5923 jQuery.globalEval((node.text || node.textContent || node.innerHTML || "").replace(rcleanScript, "")); 5924 } 5925 } 5926 } 5927 } 5928 5929 // Fix #11809: Avoid leaking memory 5930 fragment = first = null; 5931 } 5932 } 5933 5934 return collection; 5935 } 5936 5937 function remove(elem, selector, keepData) { 5938 var node, 5939 elems = selector ? jQuery.filter(selector, elem) : elem, 5940 i = 0; 5941 5942 for (; (node = elems[i]) != null; i++) { 5943 5944 if (!keepData && node.nodeType === 1) { 5945 jQuery.cleanData(getAll(node)); 5946 } 5947 5948 if (node.parentNode) { 5949 if (keepData && jQuery.contains(node.ownerDocument, node)) { 5950 setGlobalEval(getAll(node, "script")); 5951 } 5952 node.parentNode.removeChild(node); 5953 } 5954 } 5955 5956 return elem; 5957 } 5958 5959 jQuery.extend({ 5960 htmlPrefilter: function (html) { 5961 return html.replace(rxhtmlTag, "<$1></$2>"); 5962 }, 5963 5964 clone: function (elem, dataAndEvents, deepDataAndEvents) { 5965 var destElements, 5966 node, 5967 clone, 5968 i, 5969 srcElements, 5970 inPage = jQuery.contains(elem.ownerDocument, elem); 5971 5972 if (support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test("<" + elem.nodeName + ">")) { 5973 5974 clone = elem.cloneNode(true); 5975 5976 // IE<=8 does not properly clone detached, unknown element nodes 5977 } else { 5978 fragmentDiv.innerHTML = elem.outerHTML; 5979 fragmentDiv.removeChild(clone = fragmentDiv.firstChild); 5980 } 5981 5982 if ((!support.noCloneEvent || !support.noCloneChecked) && (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem)) { 5983 5984 // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 5985 destElements = getAll(clone); 5986 srcElements = getAll(elem); 5987 5988 // Fix all IE cloning issues 5989 for (i = 0; (node = srcElements[i]) != null; ++i) { 5990 5991 // Ensure that the destination node is not null; Fixes #9587 5992 if (destElements[i]) { 5993 fixCloneNodeIssues(node, destElements[i]); 5994 } 5995 } 5996 } 5997 5998 // Copy the events from the original to the clone 5999 if (dataAndEvents) { 6000 if (deepDataAndEvents) { 6001 srcElements = srcElements || getAll(elem); 6002 destElements = destElements || getAll(clone); 6003 6004 for (i = 0; (node = srcElements[i]) != null; i++) { 6005 cloneCopyEvent(node, destElements[i]); 6006 } 6007 } else { 6008 cloneCopyEvent(elem, clone); 6009 } 6010 } 6011 6012 // Preserve script evaluation history 6013 destElements = getAll(clone, "script"); 6014 if (destElements.length > 0) { 6015 setGlobalEval(destElements, !inPage && getAll(elem, "script")); 6016 } 6017 6018 destElements = srcElements = node = null; 6019 6020 // Return the cloned set 6021 return clone; 6022 }, 6023 6024 cleanData: function (elems, /* internal */forceAcceptData) { 6025 var elem, 6026 type, 6027 id, 6028 data, 6029 i = 0, 6030 internalKey = jQuery.expando, 6031 cache = jQuery.cache, 6032 attributes = support.attributes, 6033 special = jQuery.event.special; 6034 6035 for (; (elem = elems[i]) != null; i++) { 6036 if (forceAcceptData || acceptData(elem)) { 6037 6038 id = elem[internalKey]; 6039 data = id && cache[id]; 6040 6041 if (data) { 6042 if (data.events) { 6043 for (type in data.events) { 6044 if (special[type]) { 6045 jQuery.event.remove(elem, type); 6046 6047 // This is a shortcut to avoid jQuery.event.remove's overhead 6048 } else { 6049 jQuery.removeEvent(elem, type, data.handle); 6050 } 6051 } 6052 } 6053 6054 // Remove cache only if it was not already removed by jQuery.event.remove 6055 if (cache[id]) { 6056 6057 delete cache[id]; 6058
6059 // Support: IE<9 6060 // IE does not allow us to delete expando properties from nodes 6061 // IE creates expando attributes along with the property 6062 // IE does not have a removeAttribute function on Document nodes 6063 if (!attributes && typeof elem.removeAttribute !== "undefined") { 6064 elem.removeAttribute(internalKey); 6065 6066 // Webkit & Blink performance suffers when deleting properties 6067 // from DOM nodes, so set to undefined instead 6068 // https://code.google.com/p/chromium/issues/detail?id=378607 6069 } else { 6070 elem[internalKey] = undefined; 6071 } 6072 6073 deletedIds.push(id); 6074 } 6075 } 6076 } 6077 } 6078 } 6079 }); 6080 6081 jQuery.fn.extend({ 6082 6083 // Keep domManip exposed until 3.0 (gh-2225) 6084 domManip: domManip, 6085 6086 detach: function (selector) { 6087 return remove(this, selector, true); 6088 }, 6089 6090 remove: function (selector) { 6091 return remove(this, selector); 6092 }, 6093 6094 text: function (value) { 6095 return access(this, function (value) { 6096 return value === undefined ? jQuery.text(this) : this.empty().append((this[0] && this[0].ownerDocument || document).createTextNode(value)); 6097 }, null, value, arguments.length); 6098 }, 6099 6100 append: function () { 6101 return domManip(this, arguments, function (elem) { 6102 if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) { 6103 var target = manipulationTarget(this, elem); 6104 target.appendChild(elem); 6105 } 6106 }); 6107 }, 6108 6109 prepend: function () { 6110 return domManip(this, arguments, function (elem) { 6111 if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) { 6112 var target = manipulationTarget(this, elem); 6113 target.insertBefore(elem, target.firstChild); 6114 } 6115 }); 6116 }, 6117 6118 before: function () { 6119 return domManip(this, arguments, function (elem) { 6120 if (this.parentNode) { 6121 this.parentNode.insertBefore(elem, this); 6122 } 6123 }); 6124 }, 6125 6126 after: function () { 6127 return domManip(this, arguments, function (elem) { 6128 if (this.parentNode) { 6129 this.parentNode.insertBefore(elem, this.nextSibling); 6130 } 6131 }); 6132 }, 6133 6134 empty: function () { 6135 var elem, 6136 i = 0; 6137 6138 for (; (elem = this[i]) != null; i++) { 6139 6140 // Remove element nodes and prevent memory leaks 6141 if (elem.nodeType === 1) { 6142 jQuery.cleanData(getAll(elem, false)); 6143 } 6144 6145 // Remove any remaining nodes 6146 while (elem.firstChild) { 6147 elem.removeChild(elem.firstChild); 6148 } 6149 6150 // If this is a select, ensure that it displays empty (#12336) 6151 // Support: IE<9 6152 if (elem.options && jQuery.nodeName(elem, "select")) { 6153 elem.options.length = 0; 6154 } 6155 } 6156 6157 return this; 6158 }, 6159 6160 clone: function (dataAndEvents, deepDataAndEvents) { 6161 dataAndEvents = dataAndEvents == null ? false : dataAndEvents; 6162 deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; 6163 6164 return this.map(function () { 6165 return jQuery.clone(this, dataAndEvents, deepDataAndEvents); 6166 }); 6167 }, 6168 6169 html: function (value) { 6170 return access(this, function (value) { 6171 var elem = this[0] || {}, 6172 i = 0, 6173 l = this.length; 6174 6175 if (value === undefined) { 6176 return elem.nodeType === 1 ? elem.innerHTML.replace(rinlinejQuery, "") : undefined; 6177 } 6178 6179 // See if we can take a shortcut and just use innerHTML 6180 if (typeof value === "string" && !rnoInnerhtml.test(value) && (support.htmlSerialize || !rnoshimcache.test(value)) && (support.leadingWhitespace || !rleadingWhitespace.test(value)) && !wrapMap[(rtagName.exec(value) || ["", ""])[1].toLowerCase()]) { 6181 6182 value = jQuery.htmlPrefilter(value); 6183 6184 try { 6185 for (; i < l; i++) { 6186 6187 // Remove element nodes and prevent memory leaks 6188 elem = this[i] || {}; 6189 if (elem.nodeType === 1) { 6190 jQuery.cleanData(getAll(elem, false)); 6191 elem.innerHTML = value; 6192 } 6193 } 6194 6195 elem = 0; 6196 6197 // If using innerHTML throws an exception, use the fallback method 6198 } catch (e) {} 6199 } 6200 6201 if (elem) { 6202 this.empty().append(value); 6203 } 6204 }, null, value, arguments.length); 6205 }, 6206 6207 replaceWith: function () { 6208 var ignored = []; 6209 6210 // Make the changes, replacing each non-ignored context element with the new content 6211 return domManip(this, arguments, function (elem) { 6212 var parent = this.parentNode; 6213 6214 if (jQuery.inArray(this, ignored) < 0) { 6215 jQuery.cleanData(getAll(this)); 6216 if (parent) { 6217 parent.replaceChild(elem, this); 6218 } 6219 } 6220 6221 // Force callback invocation 6222 }, ignored); 6223 } 6224 }); 6225 6226 jQuery.each({ 6227 appendTo: "append",
vendor: 1,203 bytes, lines 6228-6275
6228 prependTo: "prepend", 6229 insertBefore: "before", 6230 insertAfter: "after", 6231 replaceAll: "replaceWith" 6232 }, function (name, original) { 6233 jQuery.fn[name] = function (selector) { 6234 var elems, 6235 i = 0, 6236 ret = [], 6237 insert = jQuery(selector), 6238 last = insert.length - 1; 6239 6240 for (; i <= last; i++) { 6241 elems = i === last ? this : this.clone(true); 6242 jQuery(insert[i])[original](elems); 6243 6244 // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() 6245 push.apply(ret, elems.get()); 6246 } 6247 6248 return this.pushStack(ret); 6249 }; 6250 }); 6251 6252 var iframe, 6253 elemdisplay = { 6254 6255 // Support: Firefox 6256 // We have to pre-define these values for FF (#10227) 6257 HTML: "block", 6258 BODY: "block" 6259 }; 6260 6261 /** 6262 * Retrieve the actual display of a element 6263 * @param {String} name nodeName of the element 6264 * @param {Object} doc Document object 6265 */ 6266 6267 // Called only from within defaultDisplay 6268 function actualDisplay(name, doc) { 6269 var elem = jQuery(doc.createElement(name)).appendTo(doc.body), 6270 display = jQuery.css(elem[0], "display"); 6271 6272 // We don't have any data stored on the element, 6273 // so use "detach" method as fast way to get rid of the element 6274 elem.detach(); 6275
6276 return display; 6277 } 6278 6279 /** 6280 * Try to determine the default display value of an element 6281 * @param {String} nodeName 6282 */ 6283 function defaultDisplay(nodeName) { 6284 var doc = document, 6285 display = elemdisplay[nodeName]; 6286 6287 if (!display) { 6288 display = actualDisplay(nodeName, doc); 6289 6290 // If the simple way fails, read from inside an iframe 6291 if (display === "none" || !display) { 6292 6293 // Use the already-created iframe if possible 6294 iframe = (iframe || jQuery("<iframe frameborder='0' width='0' height='0'/>")).appendTo(doc.documentElement); 6295 6296 // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse 6297 doc = (iframe[0].contentWindow || iframe[0].contentDocument).document; 6298 6299 // Support: IE 6300 doc.write(); 6301 doc.close(); 6302 6303 display = actualDisplay(nodeName, doc); 6304 iframe.detach(); 6305 } 6306 6307 // Store the correct default display 6308 elemdisplay[nodeName] = display; 6309 } 6310 6311 return display; 6312 } 6313 var rmargin = /^margin/; 6314 6315 var rnumnonpx = new RegExp("^(" + pnum + ")(?!px)[a-z%]+$", "i"); 6316 6317 var swap = function (elem, options, callback, args) { 6318 var ret, 6319 name, 6320 old = {}; 6321 6322 // Remember the old values, and insert the new ones 6323 for (name in options) { 6324 old[name] = elem.style[name]; 6325 elem.style[name] = options[name]; 6326 } 6327 6328 ret = callback.apply(elem, args || []); 6329 6330 // Revert the old values 6331 for (name in options) { 6332 elem.style[name] = old[name]; 6333 } 6334 6335 return ret; 6336 }; 6337 6338 var documentElement = document.documentElement; 6339 6340 (function () { 6341 var pixelPositionVal, 6342 pixelMarginRightVal, 6343 boxSizingReliableVal, 6344 reliableHiddenOffsetsVal, 6345 reliableMarginRightVal, 6346 reliableMarginLeftVal, 6347 container = document.createElement("div"), 6348 div = document.createElement("div"); 6349 6350 // Finish early in limited (non-browser) environments 6351 if (!div.style) { 6352 return; 6353 } 6354 6355 div.style.cssText = "float:left;opacity:.5"; 6356 6357 // Support: IE<9 6358 // Make sure that element opacity exists (as opposed to filter) 6359 support.opacity = div.style.opacity === "0.5"; 6360 6361 // Verify style float existence 6362 // (IE uses styleFloat instead of cssFloat) 6363 support.cssFloat = !!div.style.cssFloat; 6364 6365 div.style.backgroundClip = "content-box"; 6366 div.cloneNode(true).style.backgroundClip = ""; 6367 support.clearCloneStyle = div.style.backgroundClip === "content-box"; 6368 6369 container = document.createElement("div"); 6370 container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" + "padding:0;margin-top:1px;position:absolute"; 6371 div.innerHTML = ""; 6372 container.appendChild(div); 6373 6374 // Support: Firefox<29, Android 2.3 6375 // Vendor-prefix box-sizing 6376 support.boxSizing = div.style.boxSizing === "" || div.style.MozBoxSizing === "" || div.style.WebkitBoxSizing === ""; 6377 6378 jQuery.extend(support, { 6379 reliableHiddenOffsets: function () { 6380 if (pixelPositionVal == null) { 6381 computeStyleTests(); 6382 } 6383 return reliableHiddenOffsetsVal; 6384 }, 6385 6386 boxSizingReliable: function () { 6387 6388 // We're checking for pixelPositionVal here instead of boxSizingReliableVal 6389 // since that compresses better and they're computed together anyway. 6390 if (pixelPositionVal == null) { 6391 computeStyleTests(); 6392 } 6393 return boxSizingReliableVal; 6394 }, 6395 6396 pixelMarginRight: function () { 6397 6398 // Support: Android 4.0-4.3 6399 if (pixelPositionVal == null) { 6400 computeStyleTests(); 6401 } 6402 return pixelMarginRightVal; 6403 }, 6404 6405 pixelPosition: function () { 6406 if (pixelPositionVal == null) { 6407 computeStyleTests(); 6408 } 6409 return pixelPositionVal; 6410 }, 6411 6412 reliableMarginRight: function () { 6413 6414 // Support: Android 2.3 6415 if (pixelPositionVal == null) { 6416 computeStyleTests(); 6417 } 6418 return reliableMarginRightVal; 6419 }, 6420 6421 reliableMarginLeft: function () { 6422 6423 // Support: IE <=8 only, Android 4.0 - 4.3 only, Firefox <=3 - 37 6424 if (pixelPositionVal == null) { 6425 computeStyleTests(); 6426 } 6427 return reliableMarginLeftVal; 6428 } 6429 }); 6430 6431 function computeStyleTests() { 6432 var contents, 6433 divStyle, 6434 documentElement = document.documentElement; 6435 6436 // Setup 6437 documentElement.appendChild(container); 6438 6439 div.style.cssText = 6440
6441 // Support: Android 2.3 6442 // Vendor-prefix box-sizing 6443 "-webkit-box-sizing:border-box;box-sizing:border-box;" + "position:relative;display:block;" + "margin:auto;border:1px;padding:1px;" + "top:1%;width:50%"; 6444 6445 // Support: IE<9 6446 // Assume reasonable values in the absence of getComputedStyle 6447 pixelPositionVal = boxSizingReliableVal = reliableMarginLeftVal = false; 6448 pixelMarginRightVal = reliableMarginRightVal = true; 6449 6450 // Check for getComputedStyle so that this code is not run in IE<9. 6451 if (window.getComputedStyle) { 6452 divStyle = window.getComputedStyle(div); 6453 pixelPositionVal = (divStyle || {}).top !== "1%"; 6454 reliableMarginLeftVal = (divStyle || {}).marginLeft === "2px"; 6455 boxSizingReliableVal = (divStyle || { width: "4px" }).width === "4px"; 6456 6457 // Support: Android 4.0 - 4.3 only 6458 // Some styles come back with percentage values, even though they shouldn't 6459 div.style.marginRight = "50%"; 6460 pixelMarginRightVal = (divStyle || { marginRight: "4px" }).marginRight === "4px"; 6461 6462 // Support: Android 2.3 only 6463 // Div with explicit width and no margin-right incorrectly 6464 // gets computed margin-right based on width of container (#3333) 6465 // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right 6466 contents = div.appendChild(document.createElement("div")); 6467 6468 // Reset CSS: box-sizing; display; margin; border; padding 6469 contents.style.cssText = div.style.cssText = 6470 6471 // Support: Android 2.3 6472 // Vendor-prefix box-sizing 6473 "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" + "box-sizing:content-box;display:block;margin:0;border:0;padding:0"; 6474 contents.style.marginRight = contents.style.width = "0"; 6475 div.style.width = "1px"; 6476 6477 reliableMarginRightVal = !parseFloat((window.getComputedStyle(contents) || {}).marginRight); 6478 6479 div.removeChild(contents); 6480 } 6481 6482 // Support: IE6-8 6483 // First check that getClientRects works as expected 6484 // Check if table cells still have offsetWidth/Height when they are set 6485 // to display:none and there are still other visible table cells in a 6486 // table row; if so, offsetWidth/Height are not reliable for use when 6487 // determining if an element has been hidden directly using 6488 // display:none (it is still safe to use offsets if a parent element is 6489 // hidden; don safety goggles and see bug #4512 for more information). 6490 div.style.display = "none"; 6491 reliableHiddenOffsetsVal = div.getClientRects().length === 0; 6492 if (reliableHiddenOffsetsVal) { 6493 div.style.display = ""; 6494 div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>"; 6495 div.childNodes[0].style.borderCollapse = "separate"; 6496 contents = div.getElementsByTagName("td"); 6497 contents[0].style.cssText = "margin:0;border:0;padding:0;display:none"; 6498 reliableHiddenOffsetsVal = contents[0].offsetHeight === 0; 6499 if (reliableHiddenOffsetsVal) { 6500 contents[0].style.display = ""; 6501 contents[1].style.display = "none"; 6502 reliableHiddenOffsetsVal = contents[0].offsetHeight === 0; 6503 } 6504 } 6505 6506 // Teardown 6507 documentElement.removeChild(container); 6508 } 6509 })(); 6510 6511 var getStyles, 6512 curCSS, 6513 rposition = /^(top|right|bottom|left)$/; 6514 6515 if (window.getComputedStyle) { 6516 getStyles = function (elem) { 6517 6518 // Support: IE<=11+, Firefox<=30+ (#15098, #14150) 6519 // IE throws on elements created in popups 6520 // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" 6521 var view = elem.ownerDocument.defaultView; 6522 6523 if (!view || !view.opener) { 6524 view = window; 6525 } 6526 6527 return view.getComputedStyle(elem); 6528 }; 6529 6530 curCSS = function (elem, name, computed) { 6531 var width, 6532 minWidth, 6533 maxWidth, 6534 ret, 6535 style = elem.style; 6536 6537 computed = computed || getStyles(elem); 6538 6539 // getPropertyValue is only needed for .css('filter') in IE9, see #12537 6540 ret = computed ? computed.getPropertyValue(name) || computed[name] : undefined; 6541 6542 // Support: Opera 12.1x only 6543 // Fall back to style even without computed 6544 // computed is undefined for elems on document fragments 6545 if ((ret === "" || ret === undefined) && !jQuery.contains(elem.ownerDocument, elem)) { 6546 ret = jQuery.style(elem, name); 6547 } 6548 6549 if (computed) { 6550 6551 // A tribute to the "awesome hack by Dean Edwards" 6552 // Chrome < 17 and Safari 5.0 uses "computed value" 6553 // instead of "used value" for margin-right 6554 // Safari 5.1.7 (at least) returns percentage for a larger set of values, 6555 // but width seems to be reliably pixels 6556 // this is against the CSSOM draft spec: 6557 // http://dev.w3.org/csswg/cssom/#resolved-values 6558 if (!support.pixelMarginRight() && rnumnonpx.test(ret) && rmargin.test(name)) { 6559 6560 // Remember the original values 6561 width = style.width; 6562 minWidth = style.minWidth; 6563 maxWidth = style.maxWidth; 6564 6565 // Put in the new values to get a computed value out 6566 style.minWidth = style.maxWidth = style.width = ret; 6567 ret = computed.width; 6568 6569 // Revert the changed values 6570 style.width = width; 6571 style.minWidth = minWidth; 6572 style.maxWidth = maxWidth; 6573 } 6574 } 6575
vendor: 4,252 bytes, lines 6576-6728
6576 // Support: IE 6577 // IE returns zIndex value as an integer. 6578 return ret === undefined ? ret : ret + ""; 6579 }; 6580 } else if (documentElement.currentStyle) { 6581 getStyles = function (elem) { 6582 return elem.currentStyle; 6583 }; 6584 6585 curCSS = function (elem, name, computed) { 6586 var left, 6587 rs, 6588 rsLeft, 6589 ret, 6590 style = elem.style; 6591 6592 computed = computed || getStyles(elem); 6593 ret = computed ? computed[name] : undefined; 6594 6595 // Avoid setting ret to empty string here 6596 // so we don't default to auto 6597 if (ret == null && style && style[name]) { 6598 ret = style[name]; 6599 } 6600 6601 // From the awesome hack by Dean Edwards 6602 // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 6603 6604 // If we're not dealing with a regular pixel number 6605 // but a number that has a weird ending, we need to convert it to pixels 6606 // but not position css attributes, as those are 6607 // proportional to the parent element instead 6608 // and we can't measure the parent instead because it 6609 // might trigger a "stacking dolls" problem 6610 if (rnumnonpx.test(ret) && !rposition.test(name)) { 6611 6612 // Remember the original values 6613 left = style.left; 6614 rs = elem.runtimeStyle; 6615 rsLeft = rs && rs.left; 6616 6617 // Put in the new values to get a computed value out 6618 if (rsLeft) { 6619 rs.left = elem.currentStyle.left; 6620 } 6621 style.left = name === "fontSize" ? "1em" : ret; 6622 ret = style.pixelLeft + "px"; 6623 6624 // Revert the changed values 6625 style.left = left; 6626 if (rsLeft) { 6627 rs.left = rsLeft; 6628 } 6629 } 6630 6631 // Support: IE 6632 // IE returns zIndex value as an integer. 6633 return ret === undefined ? ret : ret + "" || "auto"; 6634 }; 6635 } 6636 6637 function addGetHookIf(conditionFn, hookFn) { 6638 6639 // Define the hook, we'll check on the first run if it's really needed. 6640 return { 6641 get: function () { 6642 if (conditionFn()) { 6643 6644 // Hook not needed (or it's not possible to use it due 6645 // to missing dependency), remove it. 6646 delete this.get; 6647 return; 6648 } 6649 6650 // Hook needed; redefine it so that the support test is not executed again. 6651 return (this.get = hookFn).apply(this, arguments); 6652 } 6653 }; 6654 } 6655 6656 var ralpha = /alpha\([^)]*\)/i, 6657 ropacity = /opacity\s*=\s*([^)]*)/i, 6658 6659 6660 // swappable if display is none or starts with table except 6661 // "table", "table-cell", or "table-caption" 6662 // see here for display values: 6663 // https://developer.mozilla.org/en-US/docs/CSS/display 6664 rdisplayswap = /^(none|table(?!-c[ea]).+)/, 6665 rnumsplit = new RegExp("^(" + pnum + ")(.*)$", "i"), 6666 cssShow = { position: "absolute", visibility: "hidden", display: "block" }, 6667 cssNormalTransform = { 6668 letterSpacing: "0", 6669 fontWeight: "400" 6670 }, 6671 cssPrefixes = ["Webkit", "O", "Moz", "ms"], 6672 emptyStyle = document.createElement("div").style; 6673 6674 // return a css property mapped to a potentially vendor prefixed property 6675 function vendorPropName(name) { 6676 6677 // shortcut for names that are not vendor prefixed 6678 if (name in emptyStyle) { 6679 return name; 6680 } 6681 6682 // check for vendor prefixed names 6683 var capName = name.charAt(0).toUpperCase() + name.slice(1), 6684 i = cssPrefixes.length; 6685 6686 while (i--) { 6687 name = cssPrefixes[i] + capName; 6688 if (name in emptyStyle) { 6689 return name; 6690 } 6691 } 6692 } 6693 6694 function showHide(elements, show) { 6695 var display, 6696 elem, 6697 hidden, 6698 values = [], 6699 index = 0, 6700 length = elements.length; 6701 6702 for (; index < length; index++) { 6703 elem = elements[index]; 6704 if (!elem.style) { 6705 continue; 6706 } 6707 6708 values[index] = jQuery._data(elem, "olddisplay"); 6709 display = elem.style.display; 6710 if (show) { 6711 6712 // Reset the inline display of this element to learn if it is 6713 // being hidden by cascaded rules or not 6714 if (!values[index] && display === "none") { 6715 elem.style.display = ""; 6716 } 6717 6718 // Set elements which have been overridden with display: none 6719 // in a stylesheet to whatever the default browser style is 6720 // for such an element 6721 if (elem.style.display === "" && isHidden(elem)) { 6722 values[index] = jQuery._data(elem, "olddisplay", defaultDisplay(elem.nodeName)); 6723 } 6724 } else { 6725 hidden = isHidden(elem); 6726 6727 if (display && display !== "none" || !hidden) { 6728 jQuery._data(elem, "olddisplay", hidden ? display : jQuery.css(elem, "dis
vendor: 6,095 bytes, lines 6728-6929
6728play")); 6729 } 6730 } 6731 } 6732 6733 // Set the display of most of the elements in a second loop 6734 // to avoid the constant reflow 6735 for (index = 0; index < length; index++) { 6736 elem = elements[index]; 6737 if (!elem.style) { 6738 continue; 6739 } 6740 if (!show || elem.style.display === "none" || elem.style.display === "") { 6741 elem.style.display = show ? values[index] || "" : "none"; 6742 } 6743 } 6744 6745 return elements; 6746 } 6747 6748 function setPositiveNumber(elem, value, subtract) { 6749 var matches = rnumsplit.exec(value); 6750 return matches ? 6751 6752 // Guard against undefined "subtract", e.g., when used as in cssHooks 6753 Math.max(0, matches[1] - (subtract || 0)) + (matches[2] || "px") : value; 6754 } 6755 6756 function augmentWidthOrHeight(elem, name, extra, isBorderBox, styles) { 6757 var i = extra === (isBorderBox ? "border" : "content") ? 6758 6759 // If we already have the right measurement, avoid augmentation 6760 4 : 6761 6762 // Otherwise initialize for horizontal or vertical properties 6763 name === "width" ? 1 : 0, 6764 val = 0; 6765 6766 for (; i < 4; i += 2) { 6767 6768 // both box models exclude margin, so add it if we want it 6769 if (extra === "margin") { 6770 val += jQuery.css(elem, extra + cssExpand[i], true, styles); 6771 } 6772 6773 if (isBorderBox) { 6774 6775 // border-box includes padding, so remove it if we want content 6776 if (extra === "content") { 6777 val -= jQuery.css(elem, "padding" + cssExpand[i], true, styles); 6778 } 6779 6780 // at this point, extra isn't border nor margin, so remove border 6781 if (extra !== "margin") { 6782 val -= jQuery.css(elem, "border" + cssExpand[i] + "Width", true, styles); 6783 } 6784 } else { 6785 6786 // at this point, extra isn't content, so add padding 6787 val += jQuery.css(elem, "padding" + cssExpand[i], true, styles); 6788 6789 // at this point, extra isn't content nor padding, so add border 6790 if (extra !== "padding") { 6791 val += jQuery.css(elem, "border" + cssExpand[i] + "Width", true, styles); 6792 } 6793 } 6794 } 6795 6796 return val; 6797 } 6798 6799 function getWidthOrHeight(elem, name, extra) { 6800 6801 // Start with offset property, which is equivalent to the border-box value 6802 var valueIsBorderBox = true, 6803 val = name === "width" ? elem.offsetWidth : elem.offsetHeight, 6804 styles = getStyles(elem), 6805 isBorderBox = support.boxSizing && jQuery.css(elem, "boxSizing", false, styles) === "border-box"; 6806 6807 // some non-html elements return undefined for offsetWidth, so check for null/undefined 6808 // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 6809 // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 6810 if (val <= 0 || val == null) { 6811 6812 // Fall back to computed then uncomputed css if necessary 6813 val = curCSS(elem, name, styles); 6814 if (val < 0 || val == null) { 6815 val = elem.style[name]; 6816 } 6817 6818 // Computed unit is not pixels. Stop here and return. 6819 if (rnumnonpx.test(val)) { 6820 return val; 6821 } 6822 6823 // we need the check for style in case a browser which returns unreliable values 6824 // for getComputedStyle silently falls back to the reliable elem.style 6825 valueIsBorderBox = isBorderBox && (support.boxSizingReliable() || val === elem.style[name]); 6826 6827 // Normalize "", auto, and prepare for extra 6828 val = parseFloat(val) || 0; 6829 } 6830 6831 // use the active box-sizing model to add/subtract irrelevant styles 6832 return val + augmentWidthOrHeight(elem, name, extra || (isBorderBox ? "border" : "content"), valueIsBorderBox, styles) + "px"; 6833 } 6834 6835 jQuery.extend({ 6836 6837 // Add in style property hooks for overriding the default 6838 // behavior of getting and setting a style property 6839 cssHooks: { 6840 opacity: { 6841 get: function (elem, computed) { 6842 if (computed) { 6843 6844 // We should always get a number back from opacity 6845 var ret = curCSS(elem, "opacity"); 6846 return ret === "" ? "1" : ret; 6847 } 6848 } 6849 } 6850 }, 6851 6852 // Don't automatically add "px" to these possibly-unitless properties 6853 cssNumber: { 6854 "animationIterationCount": true, 6855 "columnCount": true, 6856 "fillOpacity": true, 6857 "flexGrow": true, 6858 "flexShrink": true, 6859 "fontWeight": true, 6860 "lineHeight": true, 6861 "opacity": true, 6862 "order": true, 6863 "orphans": true, 6864 "widows": true, 6865 "zIndex": true, 6866 "zoom": true 6867 }, 6868 6869 // Add in properties whose names you wish to fix before 6870 // setting or getting the value 6871 cssProps: { 6872 6873 // normalize float css property 6874 "float": support.cssFloat ? "cssFloat" : "styleFloat" 6875 }, 6876 6877 // Get and set the style property on a DOM Node 6878 style: function (elem, name, value, extra) { 6879 6880 // Don't set styles on text and comment nodes 6881 if (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) { 6882 return; 6883 } 6884 6885 // Make sure that we're working with the right name 6886 var ret, 6887 type, 6888 hooks, 6889 origName = jQuery.camelCase(name), 6890 style = elem.style; 6891 6892 name = jQuery.cssProps[origName] || (jQuery.cssProps[origName] = vendorPropName(origName) || origName); 6893 6894 // gets hook for the prefixed version 6895 // followed by the unprefixed version 6896 hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName]; 6897 6898 // Check if we're setting a value 6899 if (value !== undefined) { 6900 type = typeof value; 6901 6902 // Convert "+=" or "-=" to relative numbers (#7345) 6903 if (type === "string" && (ret = rcssNum.exec(value)) && ret[1]) { 6904 value = adjustCSS(elem, name, ret); 6905 6906 // Fixes bug #9237 6907 type = "number"; 6908 } 6909 6910 // Make sure that null and NaN values aren't set. See: #7116 6911 if (value == null || value !== value) { 6912 return; 6913 } 6914 6915 // If a number was passed in, add the unit (except for certain CSS properties) 6916 if (type === "number") { 6917 value += ret && ret[3] || (jQuery.cssNumber[origName] ? "" : "px"); 6918 } 6919 6920 // Fixes #8908, it can be done more correctly by specifing setters in cssHooks, 6921 // but it would mean to define eight 6922 // (for every problematic property) identical functions 6923 if (!support.clearCloneStyle && value === "" && name.indexOf("background") === 0) { 6924 style[name] = "inherit"; 6925 } 6926 6927 // If a hook was provided, use that value, otherwise just set the specified value 6928 if (!hooks || !("set" in hooks) || (value = hooks.set(elem, value, extra)) !== undefined) { 6929
vendor: 4,360 bytes, lines 6930-7056
6930 // Support: IE 6931 // Swallow errors from 'invalid' CSS values (#5509) 6932 try { 6933 style[name] = value; 6934 } catch (e) {} 6935 } 6936 } else { 6937 6938 // If a hook was provided get the non-computed value from there 6939 if (hooks && "get" in hooks && (ret = hooks.get(elem, false, extra)) !== undefined) { 6940 6941 return ret; 6942 } 6943 6944 // Otherwise just get the value from the style object 6945 return style[name]; 6946 } 6947 }, 6948 6949 css: function (elem, name, extra, styles) { 6950 var num, 6951 val, 6952 hooks, 6953 origName = jQuery.camelCase(name); 6954 6955 // Make sure that we're working with the right name 6956 name = jQuery.cssProps[origName] || (jQuery.cssProps[origName] = vendorPropName(origName) || origName); 6957 6958 // gets hook for the prefixed version 6959 // followed by the unprefixed version 6960 hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName]; 6961 6962 // If a hook was provided get the computed value from there 6963 if (hooks && "get" in hooks) { 6964 val = hooks.get(elem, true, extra); 6965 } 6966 6967 // Otherwise, if a way to get the computed value exists, use that 6968 if (val === undefined) { 6969 val = curCSS(elem, name, styles); 6970 } 6971 6972 //convert "normal" to computed value 6973 if (val === "normal" && name in cssNormalTransform) { 6974 val = cssNormalTransform[name]; 6975 } 6976 6977 // Return, converting to number if forced or a qualifier was provided and val looks numeric 6978 if (extra === "" || extra) { 6979 num = parseFloat(val); 6980 return extra === true || isFinite(num) ? num || 0 : val; 6981 } 6982 return val; 6983 } 6984 }); 6985 6986 jQuery.each(["height", "width"], function (i, name) { 6987 jQuery.cssHooks[name] = { 6988 get: function (elem, computed, extra) { 6989 if (computed) { 6990 6991 // certain elements can have dimension info if we invisibly show them 6992 // however, it must have a current display style that would benefit from this 6993 return rdisplayswap.test(jQuery.css(elem, "display")) && elem.offsetWidth === 0 ? swap(elem, cssShow, function () { 6994 return getWidthOrHeight(elem, name, extra); 6995 }) : getWidthOrHeight(elem, name, extra); 6996 } 6997 }, 6998 6999 set: function (elem, value, extra) { 7000 var styles = extra && getStyles(elem); 7001 return setPositiveNumber(elem, value, extra ? augmentWidthOrHeight(elem, name, extra, support.boxSizing && jQuery.css(elem, "boxSizing", false, styles) === "border-box", styles) : 0); 7002 } 7003 }; 7004 }); 7005 7006 if (!support.opacity) { 7007 jQuery.cssHooks.opacity = { 7008 get: function (elem, computed) { 7009 7010 // IE uses filters for opacity 7011 return ropacity.test((computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "") ? 0.01 * parseFloat(RegExp.$1) + "" : computed ? "1" : ""; 7012 }, 7013 7014 set: function (elem, value) { 7015 var style = elem.style, 7016 currentStyle = elem.currentStyle, 7017 opacity = jQuery.isNumeric(value) ? "alpha(opacity=" + value * 100 + ")" : "", 7018 filter = currentStyle && currentStyle.filter || style.filter || ""; 7019 7020 // IE has trouble with opacity if it does not have layout 7021 // Force it by setting the zoom level 7022 style.zoom = 1; 7023 7024 // if setting opacity to 1, and no other filters exist - 7025 // attempt to remove filter attribute #6652 7026 // if value === "", then remove inline opacity #12685 7027 if ((value >= 1 || value === "") && jQuery.trim(filter.replace(ralpha, "")) === "" && style.removeAttribute) { 7028 7029 // Setting style.filter to null, "" & " " still leave "filter:" in the cssText 7030 // if "filter:" is present at all, clearType is disabled, we want to avoid this 7031 // style.removeAttribute is IE Only, but so apparently is this code path... 7032 style.removeAttribute("filter"); 7033 7034 // if there is no filter style applied in a css rule 7035 // or unset inline opacity, we are done 7036 if (value === "" || currentStyle && !currentStyle.filter) { 7037 return; 7038 } 7039 } 7040 7041 // otherwise, set new filter values 7042 style.filter = ralpha.test(filter) ? filter.replace(ralpha, opacity) : filter + " " + opacity; 7043 } 7044 }; 7045 } 7046 7047 jQuery.cssHooks.marginRight = addGetHookIf(support.reliableMarginRight, function (elem, computed) { 7048 if (computed) { 7049 return swap(elem, { "display": "inline-block" }, curCSS, [elem, "marginRight"]); 7050 } 7051 }); 7052 7053 jQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft, function (elem, computed) { 7054 if (computed) { 7055 return (parseFloat(curCSS(elem, "marginLeft")) || ( 7056
vendor: 4,554 bytes, lines 7057-7220
7057 // Support: IE<=11+ 7058 // Running getBoundingClientRect on a disconnected node in IE throws an error 7059 // Support: IE8 only 7060 // getClientRects() errors on disconnected elems 7061 jQuery.contains(elem.ownerDocument, elem) ? elem.getBoundingClientRect().left - swap(elem, { marginLeft: 0 }, function () { 7062 return elem.getBoundingClientRect().left; 7063 }) : 0)) + "px"; 7064 } 7065 }); 7066 7067 // These hooks are used by animate to expand properties 7068 jQuery.each({ 7069 margin: "", 7070 padding: "", 7071 border: "Width" 7072 }, function (prefix, suffix) { 7073 jQuery.cssHooks[prefix + suffix] = { 7074 expand: function (value) { 7075 var i = 0, 7076 expanded = {}, 7077 7078 7079 // assumes a single number if not a string 7080 parts = typeof value === "string" ? value.split(" ") : [value]; 7081 7082 for (; i < 4; i++) { 7083 expanded[prefix + cssExpand[i] + suffix] = parts[i] || parts[i - 2] || parts[0]; 7084 } 7085 7086 return expanded; 7087 } 7088 }; 7089 7090 if (!rmargin.test(prefix)) { 7091 jQuery.cssHooks[prefix + suffix].set = setPositiveNumber; 7092 } 7093 }); 7094 7095 jQuery.fn.extend({ 7096 css: function (name, value) { 7097 return access(this, function (elem, name, value) { 7098 var styles, 7099 len, 7100 map = {}, 7101 i = 0; 7102 7103 if (jQuery.isArray(name)) { 7104 styles = getStyles(elem); 7105 len = name.length; 7106 7107 for (; i < len; i++) { 7108 map[name[i]] = jQuery.css(elem, name[i], false, styles); 7109 } 7110 7111 return map; 7112 } 7113 7114 return value !== undefined ? jQuery.style(elem, name, value) : jQuery.css(elem, name); 7115 }, name, value, arguments.length > 1); 7116 }, 7117 show: function () { 7118 return showHide(this, true); 7119 }, 7120 hide: function () { 7121 return showHide(this); 7122 }, 7123 toggle: function (state) { 7124 if (typeof state === "boolean") { 7125 return state ? this.show() : this.hide(); 7126 } 7127 7128 return this.each(function () { 7129 if (isHidden(this)) { 7130 jQuery(this).show(); 7131 } else { 7132 jQuery(this).hide(); 7133 } 7134 }); 7135 } 7136 }); 7137 7138 function Tween(elem, options, prop, end, easing) { 7139 return new Tween.prototype.init(elem, options, prop, end, easing); 7140 } 7141 jQuery.Tween = Tween; 7142 7143 Tween.prototype = { 7144 constructor: Tween, 7145 init: function (elem, options, prop, end, easing, unit) { 7146 this.elem = elem; 7147 this.prop = prop; 7148 this.easing = easing || jQuery.easing._default; 7149 this.options = options; 7150 this.start = this.now = this.cur(); 7151 this.end = end; 7152 this.unit = unit || (jQuery.cssNumber[prop] ? "" : "px"); 7153 }, 7154 cur: function () { 7155 var hooks = Tween.propHooks[this.prop]; 7156 7157 return hooks && hooks.get ? hooks.get(this) : Tween.propHooks._default.get(this); 7158 }, 7159 run: function (percent) { 7160 var eased, 7161 hooks = Tween.propHooks[this.prop]; 7162 7163 if (this.options.duration) { 7164 this.pos = eased = jQuery.easing[this.easing](percent, this.options.duration * percent, 0, 1, this.options.duration); 7165 } else { 7166 this.pos = eased = percent; 7167 } 7168 this.now = (this.end - this.start) * eased + this.start; 7169 7170 if (this.options.step) { 7171 this.options.step.call(this.elem, this.now, this); 7172 } 7173 7174 if (hooks && hooks.set) { 7175 hooks.set(this); 7176 } else { 7177 Tween.propHooks._default.set(this); 7178 } 7179 return this; 7180 } 7181 }; 7182 7183 Tween.prototype.init.prototype = Tween.prototype; 7184 7185 Tween.propHooks = { 7186 _default: { 7187 get: function (tween) { 7188 var result; 7189 7190 // Use a property on the element directly when it is not a DOM element, 7191 // or when there is no matching style property that exists. 7192 if (tween.elem.nodeType !== 1 || tween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) { 7193 return tween.elem[tween.prop]; 7194 } 7195 7196 // passing an empty string as a 3rd parameter to .css will automatically 7197 // attempt a parseFloat and fallback to a string if the parse fails 7198 // so, simple values such as "10px" are parsed to Float. 7199 // complex values such as "rotate(1rad)" are returned as is. 7200 result = jQuery.css(tween.elem, tween.prop, ""); 7201 7202 // Empty strings, null, undefined and "auto" are converted to 0. 7203 return !result || result === "auto" ? 0 : result; 7204 }, 7205 set: function (tween) { 7206 7207 // use step hook for back compat - use cssHook if its there - use .style if its 7208 // available and use plain properties where available 7209 if (jQuery.fx.step[tween.prop]) { 7210 jQuery.fx.step[tween.prop](tween); 7211 } else if (tween.elem.nodeType === 1 && (tween.elem.style[jQuery.cssProps[tween.prop]] != null || jQuery.cssHooks[tween.prop])) { 7212 jQuery.style(tween.elem, tween.prop, tween.now + tween.unit); 7213 } else { 7214 tween.elem[tween.prop] = tween.now; 7215 } 7216 } 7217 } 7218 }; 7219 7220 // Support: IE <=9
vendor: 5,745 bytes, lines 7221-7440
7221 // Panic based approach to setting things on disconnected nodes 7222 7223 Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { 7224 set: function (tween) { 7225 if (tween.elem.nodeType && tween.elem.parentNode) { 7226 tween.elem[tween.prop] = tween.now; 7227 } 7228 } 7229 }; 7230 7231 jQuery.easing = { 7232 linear: function (p) { 7233 return p; 7234 }, 7235 swing: function (p) { 7236 return 0.5 - Math.cos(p * Math.PI) / 2; 7237 }, 7238 _default: "swing" 7239 }; 7240 7241 jQuery.fx = Tween.prototype.init; 7242 7243 // Back Compat <1.8 extension point 7244 jQuery.fx.step = {}; 7245 7246 var fxNow, 7247 timerId, 7248 rfxtypes = /^(?:toggle|show|hide)$/, 7249 rrun = /queueHooks$/; 7250 7251 // Animations created synchronously will run synchronously 7252 function createFxNow() { 7253 window.setTimeout(function () { 7254 fxNow = undefined; 7255 }); 7256 return fxNow = jQuery.now(); 7257 } 7258 7259 // Generate parameters to create a standard animation 7260 function genFx(type, includeWidth) { 7261 var which, 7262 attrs = { height: type }, 7263 i = 0; 7264 7265 // if we include width, step value is 1 to do all cssExpand values, 7266 // if we don't include width, step value is 2 to skip over Left and Right 7267 includeWidth = includeWidth ? 1 : 0; 7268 for (; i < 4; i += 2 - includeWidth) { 7269 which = cssExpand[i]; 7270 attrs["margin" + which] = attrs["padding" + which] = type; 7271 } 7272 7273 if (includeWidth) { 7274 attrs.opacity = attrs.width = type; 7275 } 7276 7277 return attrs; 7278 } 7279 7280 function createTween(value, prop, animation) { 7281 var tween, 7282 collection = (Animation.tweeners[prop] || []).concat(Animation.tweeners["*"]), 7283 index = 0, 7284 length = collection.length; 7285 for (; index < length; index++) { 7286 if (tween = collection[index].call(animation, prop, value)) { 7287 7288 // we're done with this property 7289 return tween; 7290 } 7291 } 7292 } 7293 7294 function defaultPrefilter(elem, props, opts) { 7295 /* jshint validthis: true */ 7296 var prop, 7297 value, 7298 toggle, 7299 tween, 7300 hooks, 7301 oldfire, 7302 display, 7303 checkDisplay, 7304 anim = this, 7305 orig = {}, 7306 style = elem.style, 7307 hidden = elem.nodeType && isHidden(elem), 7308 dataShow = jQuery._data(elem, "fxshow"); 7309 7310 // handle queue: false promises 7311 if (!opts.queue) { 7312 hooks = jQuery._queueHooks(elem, "fx"); 7313 if (hooks.unqueued == null) { 7314 hooks.unqueued = 0; 7315 oldfire = hooks.empty.fire; 7316 hooks.empty.fire = function () { 7317 if (!hooks.unqueued) { 7318 oldfire(); 7319 } 7320 }; 7321 } 7322 hooks.unqueued++; 7323 7324 anim.always(function () { 7325 7326 // doing this makes sure that the complete handler will be called 7327 // before this completes 7328 anim.always(function () { 7329 hooks.unqueued--; 7330 if (!jQuery.queue(elem, "fx").length) { 7331 hooks.empty.fire(); 7332 } 7333 }); 7334 }); 7335 } 7336 7337 // height/width overflow pass 7338 if (elem.nodeType === 1 && ("height" in props || "width" in props)) { 7339 7340 // Make sure that nothing sneaks out 7341 // Record all 3 overflow attributes because IE does not 7342 // change the overflow attribute when overflowX and 7343 // overflowY are set to the same value 7344 opts.overflow = [style.overflow, style.overflowX, style.overflowY]; 7345 7346 // Set display property to inline-block for height/width 7347 // animations on inline elements that are having width/height animated 7348 display = jQuery.css(elem, "display"); 7349 7350 // Test default display if display is currently "none" 7351 checkDisplay = display === "none" ? jQuery._data(elem, "olddisplay") || defaultDisplay(elem.nodeName) : display; 7352 7353 if (checkDisplay === "inline" && jQuery.css(elem, "float") === "none") { 7354 7355 // inline-level elements accept inline-block; 7356 // block-level elements need to be inline with layout 7357 if (!support.inlineBlockNeedsLayout || defaultDisplay(elem.nodeName) === "inline") { 7358 style.display = "inline-block"; 7359 } else { 7360 style.zoom = 1; 7361 } 7362 } 7363 } 7364 7365 if (opts.overflow) { 7366 style.overflow = "hidden"; 7367 if (!support.shrinkWrapBlocks()) { 7368 anim.always(function () { 7369 style.overflow = opts.overflow[0]; 7370 style.overflowX = opts.overflow[1]; 7371 style.overflowY = opts.overflow[2]; 7372 }); 7373 } 7374 } 7375 7376 // show/hide pass 7377 for (prop in props) { 7378 value = props[prop]; 7379 if (rfxtypes.exec(value)) { 7380 delete props[prop]; 7381 toggle = toggle || value === "toggle"; 7382 if (value === (hidden ? "hide" : "show")) { 7383 7384 // If there is dataShow left over from a stopped hide or show 7385 // and we are going to proceed with show, we should pretend to be hidden 7386 if (value === "show" && dataShow && dataShow[prop] !== undefined) { 7387 hidden = true; 7388 } else { 7389 continue; 7390 } 7391 } 7392 orig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop); 7393 7394 // Any non-fx value stops us from restoring the original display value 7395 } else { 7396 display = undefined; 7397 } 7398 } 7399 7400 if (!jQuery.isEmptyObject(orig)) { 7401 if (dataShow) { 7402 if ("hidden" in dataShow) { 7403 hidden = dataShow.hidden; 7404 } 7405 } else { 7406 dataShow = jQuery._data(elem, "fxshow", {}); 7407 } 7408 7409 // store state if its toggle - enables .stop().toggle() to "reverse" 7410 if (toggle) { 7411 dataShow.hidden = !hidden; 7412 } 7413 if (hidden) { 7414 jQuery(elem).show(); 7415 } else { 7416 anim.done(function () { 7417 jQuery(elem).hide(); 7418 }); 7419 } 7420 anim.done(function () { 7421 var prop; 7422 jQuery._removeData(elem, "fxshow"); 7423 for (prop in orig) { 7424 jQuery.style(elem, prop, orig[prop]); 7425 } 7426 }); 7427 for (prop in orig) { 7428 tween = createTween(hidden ? dataShow[prop] : 0, prop, anim); 7429 7430 if (!(prop in dataShow)) { 7431 dataShow[prop] = tween.start; 7432 if (hidden) { 7433 tween.end = tween.start; 7434 tween.start = prop === "width" || prop === "height" ? 1 : 0; 7435 } 7436 } 7437 } 7438 7439 // If this is a noop like .hide().hide(), restore an overwritten display value 7440 } else if ((display === "none" ? defaultDisplay(elem.nodeName) : dis
vendor: 5,869 bytes, lines 7440-7666
7440play) === "inline") { 7441 style.display = display; 7442 } 7443 } 7444 7445 function propFilter(props, specialEasing) { 7446 var index, name, easing, value, hooks; 7447 7448 // camelCase, specialEasing and expand cssHook pass 7449 for (index in props) { 7450 name = jQuery.camelCase(index); 7451 easing = specialEasing[name]; 7452 value = props[index]; 7453 if (jQuery.isArray(value)) { 7454 easing = value[1]; 7455 value = props[index] = value[0]; 7456 } 7457 7458 if (index !== name) { 7459 props[name] = value; 7460 delete props[index]; 7461 } 7462 7463 hooks = jQuery.cssHooks[name]; 7464 if (hooks && "expand" in hooks) { 7465 value = hooks.expand(value); 7466 delete props[name]; 7467 7468 // not quite $.extend, this wont overwrite keys already present. 7469 // also - reusing 'index' from above because we have the correct "name" 7470 for (index in value) { 7471 if (!(index in props)) { 7472 props[index] = value[index]; 7473 specialEasing[index] = easing; 7474 } 7475 } 7476 } else { 7477 specialEasing[name] = easing; 7478 } 7479 } 7480 } 7481 7482 function Animation(elem, properties, options) { 7483 var result, 7484 stopped, 7485 index = 0, 7486 length = Animation.prefilters.length, 7487 deferred = jQuery.Deferred().always(function () { 7488 7489 // don't match elem in the :animated selector 7490 delete tick.elem; 7491 }), 7492 tick = function () { 7493 if (stopped) { 7494 return false; 7495 } 7496 var currentTime = fxNow || createFxNow(), 7497 remaining = Math.max(0, animation.startTime + animation.duration - currentTime), 7498 7499 7500 // Support: Android 2.3 7501 // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) 7502 temp = remaining / animation.duration || 0, 7503 percent = 1 - temp, 7504 index = 0, 7505 length = animation.tweens.length; 7506 7507 for (; index < length; index++) { 7508 animation.tweens[index].run(percent); 7509 } 7510 7511 deferred.notifyWith(elem, [animation, percent, remaining]); 7512 7513 if (percent < 1 && length) { 7514 return remaining; 7515 } else { 7516 deferred.resolveWith(elem, [animation]); 7517 return false; 7518 } 7519 }, 7520 animation = deferred.promise({ 7521 elem: elem, 7522 props: jQuery.extend({}, properties), 7523 opts: jQuery.extend(true, { 7524 specialEasing: {}, 7525 easing: jQuery.easing._default 7526 }, options), 7527 originalProperties: properties, 7528 originalOptions: options, 7529 startTime: fxNow || createFxNow(), 7530 duration: options.duration, 7531 tweens: [], 7532 createTween: function (prop, end) { 7533 var tween = jQuery.Tween(elem, animation.opts, prop, end, animation.opts.specialEasing[prop] || animation.opts.easing); 7534 animation.tweens.push(tween); 7535 return tween; 7536 }, 7537 stop: function (gotoEnd) { 7538 var index = 0, 7539 7540 7541 // if we are going to the end, we want to run all the tweens 7542 // otherwise we skip this part 7543 length = gotoEnd ? animation.tweens.length : 0; 7544 if (stopped) { 7545 return this; 7546 } 7547 stopped = true; 7548 for (; index < length; index++) { 7549 animation.tweens[index].run(1); 7550 } 7551 7552 // resolve when we played the last frame 7553 // otherwise, reject 7554 if (gotoEnd) { 7555 deferred.notifyWith(elem, [animation, 1, 0]); 7556 deferred.resolveWith(elem, [animation, gotoEnd]); 7557 } else { 7558 deferred.rejectWith(elem, [animation, gotoEnd]); 7559 } 7560 return this; 7561 } 7562 }), 7563 props = animation.props; 7564 7565 propFilter(props, animation.opts.specialEasing); 7566 7567 for (; index < length; index++) { 7568 result = Animation.prefilters[index].call(animation, elem, props, animation.opts); 7569 if (result) { 7570 if (jQuery.isFunction(result.stop)) { 7571 jQuery._queueHooks(animation.elem, animation.opts.queue).stop = jQuery.proxy(result.stop, result); 7572 } 7573 return result; 7574 } 7575 } 7576 7577 jQuery.map(props, createTween, animation); 7578 7579 if (jQuery.isFunction(animation.opts.start)) { 7580 animation.opts.start.call(elem, animation); 7581 } 7582 7583 jQuery.fx.timer(jQuery.extend(tick, { 7584 elem: elem, 7585 anim: animation, 7586 queue: animation.opts.queue 7587 })); 7588 7589 // attach callbacks from options 7590 return animation.progress(animation.opts.progress).done(animation.opts.done, animation.opts.complete).fail(animation.opts.fail).always(animation.opts.always); 7591 } 7592 7593 jQuery.Animation = jQuery.extend(Animation, { 7594 7595 tweeners: { 7596 "*": [function (prop, value) { 7597 var tween = this.createTween(prop, value); 7598 adjustCSS(tween.elem, prop, rcssNum.exec(value), tween); 7599 return tween; 7600 }] 7601 }, 7602 7603 tweener: function (props, callback) { 7604 if (jQuery.isFunction(props)) { 7605 callback = props; 7606 props = ["*"]; 7607 } else { 7608 props = props.match(rnotwhite); 7609 } 7610 7611 var prop, 7612 index = 0, 7613 length = props.length; 7614 7615 for (; index < length; index++) { 7616 prop = props[index]; 7617 Animation.tweeners[prop] = Animation.tweeners[prop] || []; 7618 Animation.tweeners[prop].unshift(callback); 7619 } 7620 }, 7621 7622 prefilters: [defaultPrefilter], 7623 7624 prefilter: function (callback, prepend) { 7625 if (prepend) { 7626 Animation.prefilters.unshift(callback); 7627 } else { 7628 Animation.prefilters.push(callback); 7629 } 7630 } 7631 }); 7632 7633 jQuery.speed = function (speed, easing, fn) { 7634 var opt = speed && typeof speed === "object" ? jQuery.extend({}, speed) : { 7635 complete: fn || !fn && easing || jQuery.isFunction(speed) && speed, 7636 duration: speed, 7637 easing: fn && easing || easing && !jQuery.isFunction(easing) && easing 7638 }; 7639 7640 opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration : opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[opt.duration] : jQuery.fx.speeds._default; 7641 7642 // normalize opt.queue - true/undefined/null -> "fx" 7643 if (opt.queue == null || opt.queue === true) { 7644 opt.queue = "fx"; 7645 } 7646 7647 // Queueing 7648 opt.old = opt.complete; 7649 7650 opt.complete = function () { 7651 if (jQuery.isFunction(opt.old)) { 7652 opt.old.call(this); 7653 } 7654 7655 if (opt.queue) { 7656 jQuery.dequeue(this, opt.queue); 7657 } 7658 }; 7659 7660 return opt; 7661 }; 7662 7663 jQuery.fn.extend({ 7664 fadeTo: function (speed, to, easing, callback) { 7665 7666 // show any hidden elements after setting opacity to 0
vendor: 8,995 bytes, lines 7667-8007
7667 return this.filter(isHidden).css("opacity", 0).show() 7668 7669 // animate to the value specified 7670 .end().animate({ opacity: to }, speed, easing, callback); 7671 }, 7672 animate: function (prop, speed, easing, callback) { 7673 var empty = jQuery.isEmptyObject(prop), 7674 optall = jQuery.speed(speed, easing, callback), 7675 doAnimation = function () { 7676 7677 // Operate on a copy of prop so per-property easing won't be lost 7678 var anim = Animation(this, jQuery.extend({}, prop), optall); 7679 7680 // Empty animations, or finishing resolves immediately 7681 if (empty || jQuery._data(this, "finish")) { 7682 anim.stop(true); 7683 } 7684 }; 7685 doAnimation.finish = doAnimation; 7686 7687 return empty || optall.queue === false ? this.each(doAnimation) : this.queue(optall.queue, doAnimation); 7688 }, 7689 stop: function (type, clearQueue, gotoEnd) { 7690 var stopQueue = function (hooks) { 7691 var stop = hooks.stop; 7692 delete hooks.stop; 7693 stop(gotoEnd); 7694 }; 7695 7696 if (typeof type !== "string") { 7697 gotoEnd = clearQueue; 7698 clearQueue = type; 7699 type = undefined; 7700 } 7701 if (clearQueue && type !== false) { 7702 this.queue(type || "fx", []); 7703 } 7704 7705 return this.each(function () { 7706 var dequeue = true, 7707 index = type != null && type + "queueHooks", 7708 timers = jQuery.timers, 7709 data = jQuery._data(this); 7710 7711 if (index) { 7712 if (data[index] && data[index].stop) { 7713 stopQueue(data[index]); 7714 } 7715 } else { 7716 for (index in data) { 7717 if (data[index] && data[index].stop && rrun.test(index)) { 7718 stopQueue(data[index]); 7719 } 7720 } 7721 } 7722 7723 for (index = timers.length; index--;) { 7724 if (timers[index].elem === this && (type == null || timers[index].queue === type)) { 7725 7726 timers[index].anim.stop(gotoEnd); 7727 dequeue = false; 7728 timers.splice(index, 1); 7729 } 7730 } 7731 7732 // start the next in the queue if the last step wasn't forced 7733 // timers currently will call their complete callbacks, which will dequeue 7734 // but only if they were gotoEnd 7735 if (dequeue || !gotoEnd) { 7736 jQuery.dequeue(this, type); 7737 } 7738 }); 7739 }, 7740 finish: function (type) { 7741 if (type !== false) { 7742 type = type || "fx"; 7743 } 7744 return this.each(function () { 7745 var index, 7746 data = jQuery._data(this), 7747 queue = data[type + "queue"], 7748 hooks = data[type + "queueHooks"], 7749 timers = jQuery.timers, 7750 length = queue ? queue.length : 0; 7751 7752 // enable finishing flag on private data 7753 data.finish = true; 7754 7755 // empty the queue first 7756 jQuery.queue(this, type, []); 7757 7758 if (hooks && hooks.stop) { 7759 hooks.stop.call(this, true); 7760 } 7761 7762 // look for any active animations, and finish them 7763 for (index = timers.length; index--;) { 7764 if (timers[index].elem === this && timers[index].queue === type) { 7765 timers[index].anim.stop(true); 7766 timers.splice(index, 1); 7767 } 7768 } 7769 7770 // look for any animations in the old queue and finish them 7771 for (index = 0; index < length; index++) { 7772 if (queue[index] && queue[index].finish) { 7773 queue[index].finish.call(this); 7774 } 7775 } 7776 7777 // turn off finishing flag 7778 delete data.finish; 7779 }); 7780 } 7781 }); 7782 7783 jQuery.each(["toggle", "show", "hide"], function (i, name) { 7784 var cssFn = jQuery.fn[name]; 7785 jQuery.fn[name] = function (speed, easing, callback) { 7786 return speed == null || typeof speed === "boolean" ? cssFn.apply(this, arguments) : this.animate(genFx(name, true), speed, easing, callback); 7787 }; 7788 }); 7789 7790 // Generate shortcuts for custom animations 7791 jQuery.each({ 7792 slideDown: genFx("show"), 7793 slideUp: genFx("hide"), 7794 slideToggle: genFx("toggle"), 7795 fadeIn: { opacity: "show" }, 7796 fadeOut: { opacity: "hide" }, 7797 fadeToggle: { opacity: "toggle" } 7798 }, function (name, props) { 7799 jQuery.fn[name] = function (speed, easing, callback) { 7800 return this.animate(props, speed, easing, callback); 7801 }; 7802 }); 7803 7804 jQuery.timers = []; 7805 jQuery.fx.tick = function () { 7806 var timer, 7807 timers = jQuery.timers, 7808 i = 0; 7809 7810 fxNow = jQuery.now(); 7811 7812 for (; i < timers.length; i++) { 7813 timer = timers[i]; 7814 7815 // Checks the timer has not already been removed 7816 if (!timer() && timers[i] === timer) { 7817 timers.splice(i--, 1); 7818 } 7819 } 7820 7821 if (!timers.length) { 7822 jQuery.fx.stop(); 7823 } 7824 fxNow = undefined; 7825 }; 7826 7827 jQuery.fx.timer = function (timer) { 7828 jQuery.timers.push(timer); 7829 if (timer()) { 7830 jQuery.fx.start(); 7831 } else { 7832 jQuery.timers.pop(); 7833 } 7834 }; 7835 7836 jQuery.fx.interval = 13; 7837 7838 jQuery.fx.start = function () { 7839 if (!timerId) { 7840 timerId = window.setInterval(jQuery.fx.tick, jQuery.fx.interval); 7841 } 7842 }; 7843 7844 jQuery.fx.stop = function () { 7845 window.clearInterval(timerId); 7846 timerId = null; 7847 }; 7848 7849 jQuery.fx.speeds = { 7850 slow: 600, 7851 fast: 200, 7852 7853 // Default speed 7854 _default: 400 7855 }; 7856 7857 // Based off of the plugin by Clint Helfers, with permission. 7858 // http://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ 7859 jQuery.fn.delay = function (time, type) { 7860 time = jQuery.fx ? jQuery.fx.speeds[time] || time : time; 7861 type = type || "fx"; 7862 7863 return this.queue(type, function (next, hooks) { 7864 var timeout = window.setTimeout(next, time); 7865 hooks.stop = function () { 7866 window.clearTimeout(timeout); 7867 }; 7868 }); 7869 }; 7870 7871 (function () { 7872 var a, 7873 input = document.createElement("input"), 7874 div = document.createElement("div"), 7875 select = document.createElement("select"), 7876 opt = select.appendChild(document.createElement("option")); 7877 7878 // Setup 7879 div = document.createElement("div"); 7880 div.setAttribute("className", "t"); 7881 div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>"; 7882 a = div.getElementsByTagName("a")[0]; 7883 7884 // Support: Windows Web Apps (WWA) 7885 // `type` must use .setAttribute for WWA (#14901) 7886 input.setAttribute("type", "checkbox"); 7887 div.appendChild(input); 7888 7889 a = div.getElementsByTagName("a")[0]; 7890 7891 // First batch of tests. 7892 a.style.cssText = "top:1px"; 7893 7894 // Test setAttribute on camelCase class. 7895 // If it works, we need attrFixes when doing get/setAttribute (ie6/7) 7896 support.getSetAttribute = div.className !== "t"; 7897 7898 // Get the style information from getAttribute 7899 // (IE uses .cssText instead) 7900 support.style = /top/.test(a.getAttribute("style")); 7901 7902 // Make sure that URLs aren't manipulated 7903 // (IE normalizes it by default) 7904 support.hrefNormalized = a.getAttribute("href") === "/a"; 7905 7906 // Check the default checkbox/radio value ("" on WebKit; "on" elsewhere) 7907 support.checkOn = !!input.value; 7908 7909 // Make sure that a selected-by-default option has a working selected property. 7910 // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) 7911 support.optSelected = opt.selected; 7912 7913 // Tests for enctype support on a form (#6743) 7914 support.enctype = !!document.createElement("form").enctype; 7915 7916 // Make sure that the options inside disabled selects aren't marked as disabled 7917 // (WebKit marks them as disabled) 7918 select.disabled = true; 7919 support.optDisabled = !opt.disabled; 7920 7921 // Support: IE8 only 7922 // Check if we can trust getAttribute("value") 7923 input = document.createElement("input"); 7924 input.setAttribute("value", ""); 7925 support.input = input.getAttribute("value") === ""; 7926 7927 // Check if an input maintains its value after becoming a radio 7928 input.value = "t"; 7929 input.setAttribute("type", "radio"); 7930 support.radioValue = input.value === "t"; 7931 })(); 7932 7933 var rreturn = /\r/g, 7934 rspaces = /[\x20\t\r\n\f]+/g; 7935 7936 jQuery.fn.extend({ 7937 val: function (value) { 7938 var hooks, 7939 ret, 7940 isFunction, 7941 elem = this[0]; 7942 7943 if (!arguments.length) { 7944 if (elem) { 7945 hooks = jQuery.valHooks[elem.type] || jQuery.valHooks[elem.nodeName.toLowerCase()]; 7946 7947 if (hooks && "get" in hooks && (ret = hooks.get(elem, "value")) !== undefined) { 7948 return ret; 7949 } 7950 7951 ret = elem.value; 7952 7953 return typeof ret === "string" ? 7954 7955 // handle most common string cases 7956 ret.replace(rreturn, "") : 7957 7958 // handle cases where value is null/undef or number 7959 ret == null ? "" : ret; 7960 } 7961 7962 return; 7963 } 7964 7965 isFunction = jQuery.isFunction(value); 7966 7967 return this.each(function (i) { 7968 var val; 7969 7970 if (this.nodeType !== 1) { 7971 return; 7972 } 7973 7974 if (isFunction) { 7975 val = value.call(this, i, jQuery(this).val()); 7976 } else { 7977 val = value; 7978 } 7979 7980 // Treat null/undefined as ""; convert numbers to string 7981 if (val == null) { 7982 val = ""; 7983 } else if (typeof val === "number") { 7984 val += ""; 7985 } else if (jQuery.isArray(val)) { 7986 val = jQuery.map(val, function (value) { 7987 return value == null ? "" : value + ""; 7988 }); 7989 } 7990 7991 hooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()]; 7992 7993 // If set returns undefined, fall back to normal setting 7994 if (!hooks || !("set" in hooks) || hooks.set(this, val, "value") === undefined) { 7995 this.value = val; 7996 } 7997 }); 7998 } 7999 }); 8000 8001 jQuery.extend({ 8002 valHooks: { 8003 option: { 8004 get: function (elem) { 8005 var val = jQuery.find.attr(elem, "value"); 8006 return val != null ? val : 8007
vendor: 4,966 bytes, lines 8008-8196
8008 // Support: IE10-11+ 8009 // option.text throws exceptions (#14686, #14858) 8010 // Strip and collapse whitespace 8011 // https://html.spec.whatwg.org/#strip-and-collapse-whitespace 8012 jQuery.trim(jQuery.text(elem)).replace(rspaces, " "); 8013 } 8014 }, 8015 select: { 8016 get: function (elem) { 8017 var value, 8018 option, 8019 options = elem.options, 8020 index = elem.selectedIndex, 8021 one = elem.type === "select-one" || index < 0, 8022 values = one ? null : [], 8023 max = one ? index + 1 : options.length, 8024 i = index < 0 ? max : one ? index : 0; 8025 8026 // Loop through all the selected options 8027 for (; i < max; i++) { 8028 option = options[i]; 8029 8030 // oldIE doesn't update selected after form reset (#2551) 8031 if ((option.selected || i === index) && ( 8032 8033 // Don't return options that are disabled or in a disabled optgroup 8034 support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) && (!option.parentNode.disabled || !jQuery.nodeName(option.parentNode, "optgroup"))) { 8035 8036 // Get the specific value for the option 8037 value = jQuery(option).val(); 8038 8039 // We don't need an array for one selects 8040 if (one) { 8041 return value; 8042 } 8043 8044 // Multi-Selects return an array 8045 values.push(value); 8046 } 8047 } 8048 8049 return values; 8050 }, 8051 8052 set: function (elem, value) { 8053 var optionSet, 8054 option, 8055 options = elem.options, 8056 values = jQuery.makeArray(value), 8057 i = options.length; 8058 8059 while (i--) { 8060 option = options[i]; 8061 8062 if (jQuery.inArray(jQuery.valHooks.option.get(option), values) > -1) { 8063 8064 // Support: IE6 8065 // When new option element is added to select box we need to 8066 // force reflow of newly added node in order to workaround delay 8067 // of initialization properties 8068 try { 8069 option.selected = optionSet = true; 8070 } catch (_) { 8071 8072 // Will be executed only in IE6 8073 option.scrollHeight; 8074 } 8075 } else { 8076 option.selected = false; 8077 } 8078 } 8079 8080 // Force browsers to behave consistently when non-matching value is set 8081 if (!optionSet) { 8082 elem.selectedIndex = -1; 8083 } 8084 8085 return options; 8086 } 8087 } 8088 } 8089 }); 8090 8091 // Radios and checkboxes getter/setter 8092 jQuery.each(["radio", "checkbox"], function () { 8093 jQuery.valHooks[this] = { 8094 set: function (elem, value) { 8095 if (jQuery.isArray(value)) { 8096 return elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1; 8097 } 8098 } 8099 }; 8100 if (!support.checkOn) { 8101 jQuery.valHooks[this].get = function (elem) { 8102 return elem.getAttribute("value") === null ? "on" : elem.value; 8103 }; 8104 } 8105 }); 8106 8107 var nodeHook, 8108 boolHook, 8109 attrHandle = jQuery.expr.attrHandle, 8110 ruseDefault = /^(?:checked|selected)$/i, 8111 getSetAttribute = support.getSetAttribute, 8112 getSetInput = support.input; 8113 8114 jQuery.fn.extend({ 8115 attr: function (name, value) { 8116 return access(this, jQuery.attr, name, value, arguments.length > 1); 8117 }, 8118 8119 removeAttr: function (name) { 8120 return this.each(function () { 8121 jQuery.removeAttr(this, name); 8122 }); 8123 } 8124 }); 8125 8126 jQuery.extend({ 8127 attr: function (elem, name, value) { 8128 var ret, 8129 hooks, 8130 nType = elem.nodeType; 8131 8132 // Don't get/set attributes on text, comment and attribute nodes 8133 if (nType === 3 || nType === 8 || nType === 2) { 8134 return; 8135 } 8136 8137 // Fallback to prop when attributes are not supported 8138 if (typeof elem.getAttribute === "undefined") { 8139 return jQuery.prop(elem, name, value); 8140 } 8141 8142 // All attributes are lowercase 8143 // Grab necessary hook if one is defined 8144 if (nType !== 1 || !jQuery.isXMLDoc(elem)) { 8145 name = name.toLowerCase(); 8146 hooks = jQuery.attrHooks[name] || (jQuery.expr.match.bool.test(name) ? boolHook : nodeHook); 8147 } 8148 8149 if (value !== undefined) { 8150 if (value === null) { 8151 jQuery.removeAttr(elem, name); 8152 return; 8153 } 8154 8155 if (hooks && "set" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) { 8156 return ret; 8157 } 8158 8159 elem.setAttribute(name, value + ""); 8160 return value; 8161 } 8162 8163 if (hooks && "get" in hooks && (ret = hooks.get(elem, name)) !== null) { 8164 return ret; 8165 } 8166 8167 ret = jQuery.find.attr(elem, name); 8168 8169 // Non-existent attributes return null, we normalize to undefined 8170 return ret == null ? undefined : ret; 8171 }, 8172 8173 attrHooks: { 8174 type: { 8175 set: function (elem, value) { 8176 if (!support.radioValue && value === "radio" && jQuery.nodeName(elem, "input")) { 8177 8178 // Setting the type on a radio button after the value resets the value in IE8-9 8179 // Reset value to default in case type is set after value during creation 8180 var val = elem.value; 8181 elem.setAttribute("type", value); 8182 if (val) { 8183 elem.value = val; 8184 } 8185 return value; 8186 } 8187 } 8188 } 8189 }, 8190 8191 removeAttr: function (elem, value) { 8192 var name, 8193 propName, 8194 i = 0, 8195 attrNames = value && value.match(rnotwhite); 8196
vendor: 4,714 bytes, lines 8197-8360
8197 if (attrNames && elem.nodeType === 1) { 8198 while (name = attrNames[i++]) { 8199 propName = jQuery.propFix[name] || name; 8200 8201 // Boolean attributes get special treatment (#10870) 8202 if (jQuery.expr.match.bool.test(name)) { 8203 8204 // Set corresponding property to false 8205 if (getSetInput && getSetAttribute || !ruseDefault.test(name)) { 8206 elem[propName] = false; 8207 8208 // Support: IE<9 8209 // Also clear defaultChecked/defaultSelected (if appropriate) 8210 } else { 8211 elem[jQuery.camelCase("default-" + name)] = elem[propName] = false; 8212 } 8213 8214 // See #9699 for explanation of this approach (setting first, then removal) 8215 } else { 8216 jQuery.attr(elem, name, ""); 8217 } 8218 8219 elem.removeAttribute(getSetAttribute ? name : propName); 8220 } 8221 } 8222 } 8223 }); 8224 8225 // Hooks for boolean attributes 8226 boolHook = { 8227 set: function (elem, value, name) { 8228 if (value === false) { 8229 8230 // Remove boolean attributes when set to false 8231 jQuery.removeAttr(elem, name); 8232 } else if (getSetInput && getSetAttribute || !ruseDefault.test(name)) { 8233 8234 // IE<8 needs the *property* name 8235 elem.setAttribute(!getSetAttribute && jQuery.propFix[name] || name, name); 8236 } else { 8237 8238 // Support: IE<9 8239 // Use defaultChecked and defaultSelected for oldIE 8240 elem[jQuery.camelCase("default-" + name)] = elem[name] = true; 8241 } 8242 return name; 8243 } 8244 }; 8245 8246 jQuery.each(jQuery.expr.match.bool.source.match(/\w+/g), function (i, name) { 8247 var getter = attrHandle[name] || jQuery.find.attr; 8248 8249 if (getSetInput && getSetAttribute || !ruseDefault.test(name)) { 8250 attrHandle[name] = function (elem, name, isXML) { 8251 var ret, handle; 8252 if (!isXML) { 8253 8254 // Avoid an infinite loop by temporarily removing this function from the getter 8255 handle = attrHandle[name]; 8256 attrHandle[name] = ret; 8257 ret = getter(elem, name, isXML) != null ? name.toLowerCase() : null; 8258 attrHandle[name] = handle; 8259 } 8260 return ret; 8261 }; 8262 } else { 8263 attrHandle[name] = function (elem, name, isXML) { 8264 if (!isXML) { 8265 return elem[jQuery.camelCase("default-" + name)] ? name.toLowerCase() : null; 8266 } 8267 }; 8268 } 8269 }); 8270 8271 // fix oldIE attroperties 8272 if (!getSetInput || !getSetAttribute) { 8273 jQuery.attrHooks.value = { 8274 set: function (elem, value, name) { 8275 if (jQuery.nodeName(elem, "input")) { 8276 8277 // Does not return so that setAttribute is also used 8278 elem.defaultValue = value; 8279 } else { 8280 8281 // Use nodeHook if defined (#1954); otherwise setAttribute is fine 8282 return nodeHook && nodeHook.set(elem, value, name); 8283 } 8284 } 8285 }; 8286 } 8287 8288 // IE6/7 do not support getting/setting some attributes with get/setAttribute 8289 if (!getSetAttribute) { 8290 8291 // Use this for any attribute in IE6/7 8292 // This fixes almost every IE6/7 issue 8293 nodeHook = { 8294 set: function (elem, value, name) { 8295 8296 // Set the existing or create a new attribute node 8297 var ret = elem.getAttributeNode(name); 8298 if (!ret) { 8299 elem.setAttributeNode(ret = elem.ownerDocument.createAttribute(name)); 8300 } 8301 8302 ret.value = value += ""; 8303 8304 // Break association with cloned elements by also using setAttribute (#9646) 8305 if (name === "value" || value === elem.getAttribute(name)) { 8306 return value; 8307 } 8308 } 8309 }; 8310 8311 // Some attributes are constructed with empty-string values when not defined 8312 attrHandle.id = attrHandle.name = attrHandle.coords = function (elem, name, isXML) { 8313 var ret; 8314 if (!isXML) { 8315 return (ret = elem.getAttributeNode(name)) && ret.value !== "" ? ret.value : null; 8316 } 8317 }; 8318 8319 // Fixing value retrieval on a button requires this module 8320 jQuery.valHooks.button = { 8321 get: function (elem, name) { 8322 var ret = elem.getAttributeNode(name); 8323 if (ret && ret.specified) { 8324 return ret.value; 8325 } 8326 }, 8327 set: nodeHook.set 8328 }; 8329 8330 // Set contenteditable to false on removals(#10429) 8331 // Setting to empty string throws an error as an invalid value 8332 jQuery.attrHooks.contenteditable = { 8333 set: function (elem, value, name) { 8334 nodeHook.set(elem, value === "" ? false : value, name); 8335 } 8336 }; 8337 8338 // Set width and height to auto instead of 0 on empty string( Bug #8150 ) 8339 // This is for removals 8340 jQuery.each(["width", "height"], function (i, name) { 8341 jQuery.attrHooks[name] = { 8342 set: function (elem, value) { 8343 if (value === "") { 8344 elem.setAttribute(name, "auto"); 8345 return value; 8346 } 8347 } 8348 }; 8349 }); 8350 } 8351 8352 if (!support.style) { 8353 jQuery.attrHooks.style = { 8354 get: function (elem) { 8355 8356 // Return undefined in the case of empty string 8357 // Note: IE uppercases css property names, but if we were to .toLowerCase() 8358 // .cssText, that would destroy case sensitivity in URL's, like in "background" 8359 return elem.style.cssText || undefined; 8360 },
8361 set: function (elem, value) { 8362 return elem.style.cssText = value + ""; 8363 } 8364 }; 8365 } 8366 8367 var rfocusable = /^(?:input|select|textarea|button|object)$/i, 8368 rclickable = /^(?:a|area)$/i; 8369 8370 jQuery.fn.extend({ 8371 prop: function (name, value) { 8372 return access(this, jQuery.prop, name, value, arguments.length > 1); 8373 }, 8374 8375 removeProp: function (name) { 8376 name = jQuery.propFix[name] || name; 8377 return this.each(function () { 8378 8379 // try/catch handles cases where IE balks (such as removing a property on window) 8380 try { 8381 this[name] = undefined; 8382 delete this[name]; 8383 } catch (e) {} 8384 }); 8385 } 8386 }); 8387 8388 jQuery.extend({ 8389 prop: function (elem, name, value) { 8390 var ret, 8391 hooks, 8392 nType = elem.nodeType; 8393 8394 // Don't get/set properties on text, comment and attribute nodes 8395 if (nType === 3 || nType === 8 || nType === 2) { 8396 return; 8397 } 8398 8399 if (nType !== 1 || !jQuery.isXMLDoc(elem)) { 8400 8401 // Fix name and attach hooks 8402 name = jQuery.propFix[name] || name; 8403 hooks = jQuery.propHooks[name]; 8404 } 8405 8406 if (value !== undefined) { 8407 if (hooks && "set" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) { 8408 return ret; 8409 } 8410 8411 return elem[name] = value; 8412 } 8413 8414 if (hooks && "get" in hooks && (ret = hooks.get(elem, name)) !== null) { 8415 return ret; 8416 } 8417 8418 return elem[name]; 8419 }, 8420 8421 propHooks: { 8422 tabIndex: { 8423 get: function (elem) { 8424 8425 // elem.tabIndex doesn't always return the 8426 // correct value when it hasn't been explicitly set 8427 // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ 8428 // Use proper attribute retrieval(#12072) 8429 var tabindex = jQuery.find.attr(elem, "tabindex"); 8430 8431 return tabindex ? parseInt(tabindex, 10) : rfocusable.test(elem.nodeName) || rclickable.test(elem.nodeName) && elem.href ? 0 : -1; 8432 } 8433 } 8434 }, 8435 8436 propFix: { 8437 "for": "htmlFor", 8438 "class": "className" 8439 } 8440 }); 8441 8442 // Some attributes require a special call on IE 8443 // http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx 8444 if (!support.hrefNormalized) { 8445 8446 // href/src property should get the full normalized URL (#10299/#12915) 8447 jQuery.each(["href", "src"], function (i, name) { 8448 jQuery.propHooks[name] = { 8449 get: function (elem) { 8450 return elem.getAttribute(name, 4); 8451 } 8452 }; 8453 }); 8454 } 8455 8456 // Support: Safari, IE9+ 8457 // Accessing the selectedIndex property 8458 // forces the browser to respect setting selected 8459 // on the option 8460 // The getter ensures a default option is selected 8461 // when in an optgroup 8462 if (!support.optSelected) { 8463 jQuery.propHooks.selected = { 8464 get: function (elem) { 8465 var parent = elem.parentNode; 8466 8467 if (parent) { 8468 parent.selectedIndex; 8469 8470 // Make sure that it also works with optgroups, see #5701 8471 if (parent.parentNode) { 8472 parent.parentNode.selectedIndex; 8473 } 8474 } 8475 return null; 8476 }, 8477 set: function (elem) { 8478 var parent = elem.parentNode; 8479 if (parent) { 8480 parent.selectedIndex; 8481 8482 if (parent.parentNode) { 8483 parent.parentNode.selectedIndex; 8484 } 8485 } 8486 } 8487 }; 8488 } 8489 8490 jQuery.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function () { 8491 jQuery.propFix[this.toLowerCase()] = this; 8492 }); 8493 8494 // IE6/7 call enctype encoding 8495 if (!support.enctype) { 8496 jQuery.propFix.enctype = "encoding"; 8497 } 8498 8499 var rclass = /[\t\r\n\f]/g; 8500 8501 function getClass(elem) { 8502 return jQuery.attr(elem, "class") || ""; 8503 } 8504 8505 jQuery.fn.extend({ 8506 addClass: function (value) { 8507 var classes, 8508 elem, 8509 cur, 8510 curValue, 8511 clazz, 8512 j, 8513 finalValue, 8514 i = 0; 8515 8516 if (jQuery.isFunction(value)) { 8517 return this.each(function (j) { 8518 jQuery(this).addClass(value.call(this, j, getClass(this))); 8519 }); 8520 } 8521 8522 if (typeof value === "string" && value) { 8523 classes = value.match(rnotwhite) || []; 8524 8525 while (elem = this[i++]) { 8526 curValue = getClass(elem); 8527 cur = elem.nodeType === 1 && (" " + curValue + " ").replace(rclass, " "); 8528 8529 if (cur) { 8530 j = 0; 8531 while (clazz = classes[j++]) { 8532 if (cur.indexOf(" " + clazz + " ") < 0) { 8533 cur += clazz + " "; 8534 } 8535 } 8536 8537 // only assign if different to avoid unneeded rendering. 8538 finalValue = jQuery.trim(cur); 8539 if (curValue !== finalValue) { 8540 jQuery.attr(elem, "class", finalValue); 8541 } 8542 } 8543 } 8544 } 8545 8546 return this; 8547 }, 8548 8549 removeClass: function (value) { 8550 var classes, 8551 elem, 8552 cur, 8553 curValue, 8554 clazz, 8555 j, 8556 finalValue, 8557 i = 0; 8558 8559 if (jQuery.isFunction(value)) { 8560 return this.each(function (j) { 8561 jQuery(this).removeClass(value.call(this, j, getClass(this))); 8562 }); 8563 } 8564 8565 if (!arguments.length) { 8566 return this.attr("class", ""); 8567 } 8568 8569 if (typeof value === "string" && value) { 8570 classes = value.match(rnotwhite) || []; 8571 8572 while (elem = this[i++]) { 8573 curValue = getClass(elem); 8574 8575 // This expression is here for better compressibility (see addClass) 8576 cur = elem.nodeType === 1 && (" " + curValue + " ").replace(rclass, " "); 8577 8578 if (cur) { 8579 j = 0; 8580 while (clazz = classes[j++]) { 8581
8582 // Remove *all* instances 8583 while (cur.indexOf(" " + clazz + " ") > -1) { 8584 cur = cur.replace(" " + clazz + " ", " "); 8585 } 8586 } 8587 8588 // Only assign if different to avoid unneeded rendering. 8589 finalValue = jQuery.trim(cur); 8590 if (curValue !== finalValue) { 8591 jQuery.attr(elem, "class", finalValue); 8592 } 8593 } 8594 } 8595 } 8596 8597 return this; 8598 }, 8599 8600 toggleClass: function (value, stateVal) { 8601 var type = typeof value; 8602 8603 if (typeof stateVal === "boolean" && type === "string") { 8604 return stateVal ? this.addClass(value) : this.removeClass(value); 8605 } 8606 8607 if (jQuery.isFunction(value)) { 8608 return this.each(function (i) { 8609 jQuery(this).toggleClass(value.call(this, i, getClass(this), stateVal), stateVal); 8610 }); 8611 } 8612 8613 return this.each(function () { 8614 var className, i, self, classNames; 8615 8616 if (type === "string") { 8617 8618 // Toggle individual class names 8619 i = 0; 8620 self = jQuery(this); 8621 classNames = value.match(rnotwhite) || []; 8622 8623 while (className = classNames[i++]) { 8624 8625 // Check each className given, space separated list 8626 if (self.hasClass(className)) { 8627 self.removeClass(className); 8628 } else { 8629 self.addClass(className); 8630 } 8631 } 8632 8633 // Toggle whole class name 8634 } else if (value === undefined || type === "boolean") { 8635 className = getClass(this); 8636 if (className) { 8637 8638 // store className if set 8639 jQuery._data(this, "__className__", className); 8640 } 8641 8642 // If the element has a class name or if we're passed "false", 8643 // then remove the whole classname (if there was one, the above saved it). 8644 // Otherwise bring back whatever was previously saved (if anything), 8645 // falling back to the empty string if nothing was stored. 8646 jQuery.attr(this, "class", className || value === false ? "" : jQuery._data(this, "__className__") || ""); 8647 } 8648 }); 8649 }, 8650 8651 hasClass: function (selector) { 8652 var className, 8653 elem, 8654 i = 0; 8655 8656 className = " " + selector + " "; 8657 while (elem = this[i++]) { 8658 if (elem.nodeType === 1 && (" " + getClass(elem) + " ").replace(rclass, " ").indexOf(className) > -1) { 8659 return true; 8660 } 8661 } 8662 8663 return false; 8664 } 8665 }); 8666 8667 // Return jQuery for attributes-only inclusion 8668 8669 8670 jQuery.each(("blur focus focusin focusout load resize scroll unload click dblclick " + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + "change select submit keydown keypress keyup error contextmenu").split(" "), function (i, name) { 8671 8672 // Handle event binding 8673 jQuery.fn[name] = function (data, fn) { 8674 return arguments.length > 0 ? this.on(name, null, data, fn) : this.trigger(name); 8675 }; 8676 }); 8677 8678 jQuery.fn.extend({ 8679 hover: function (fnOver, fnOut) { 8680 return this.mouseenter(fnOver).mouseleave(fnOut || fnOver); 8681 } 8682 }); 8683 8684 var location = window.location; 8685 8686 var nonce = jQuery.now(); 8687 8688 var rquery = /\?/; 8689 8690 var rvalidtokens = /(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g; 8691 8692 jQuery.parseJSON = function (data) { 8693 8694 // Attempt to parse using the native JSON parser first 8695 if (window.JSON && window.JSON.parse) { 8696 8697 // Support: Android 2.3 8698 // Workaround failure to string-cast null input 8699 return window.JSON.parse(data + ""); 8700 } 8701 8702 var requireNonComma, 8703 depth = null, 8704 str = jQuery.trim(data + ""); 8705 8706 // Guard against invalid (and possibly dangerous) input by ensuring that nothing remains 8707 // after removing valid tokens 8708 return str && !jQuery.trim(str.replace(rvalidtokens, function (token, comma, open, close) { 8709 8710 // Force termination if we see a misplaced comma 8711 if (requireNonComma && comma) { 8712 depth = 0; 8713 } 8714 8715 // Perform no more replacements after returning to outermost depth 8716 if (depth === 0) { 8717 return token; 8718 } 8719 8720 // Commas must not follow "[", "{", or "," 8721 requireNonComma = open || comma; 8722 8723 // Determine new depth 8724 // array/object open ("[" or "{"): depth += true - false (increment) 8725 // array/object close ("]" or "}"): depth += false - true (decrement) 8726 // other cases ("," or primitive): depth += true - true (numeric cast) 8727 depth += !close - !open; 8728 8729 // Remove this token 8730 return ""; 8731 })) ? Function("return " + str)() : jQuery.error("Invalid JSON: " + data); 8732 }; 8733 8734 // Cross-browser xml parsing 8735 jQuery.parseXML = function (data) { 8736 var xml, tmp; 8737 if (!data || typeof data !== "string") { 8738 return null; 8739 } 8740 try { 8741 if (window.DOMParser) { 8742 // Standard 8743 tmp = new window.DOMParser(); 8744 xml = tmp.parseFromString(data, "text/xml"); 8745 } else { 8746 // IE 8747 xml = new window.ActiveXObject("Microsoft.XMLDOM"); 8748 xml.async = "false"; 8749 xml.loadXML(data); 8750 } 8751 } catch (e) { 8752 xml = undefined; 8753 } 8754 if (!xml || !xml.documentElement || xml.getElementsByTagName("parsererror").length) { 8755 jQuery.error("Invalid XML: " + data); 8756 } 8757 return xml; 8758 }; 8759 8760 var rhash = /#.*$/, 8761 rts = /([?&])_=[^&]*/, 8762 8763 8764 // IE leaves an \r character at EOL 8765 rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, 8766 8767
vendor: 13,733 bytes, lines 8768-9312
8768 // #7653, #8125, #8152: local protocol detection 8769 rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, 8770 rnoContent = /^(?:GET|HEAD)$/, 8771 rprotocol = /^\/\//, 8772 rurl = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/, 8773 8774 8775 /* Prefilters 8776 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) 8777 * 2) These are called: 8778 * - BEFORE asking for a transport 8779 * - AFTER param serialization (s.data is a string if s.processData is true) 8780 * 3) key is the dataType 8781 * 4) the catchall symbol "*" can be used 8782 * 5) execution will start with transport dataType and THEN continue down to "*" if needed 8783 */ 8784 prefilters = {}, 8785 8786 8787 /* Transports bindings 8788 * 1) key is the dataType 8789 * 2) the catchall symbol "*" can be used 8790 * 3) selection will start with transport dataType and THEN go to "*" if needed 8791 */ 8792 transports = {}, 8793 8794 8795 // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression 8796 allTypes = "*/".concat("*"), 8797 8798 8799 // Document location 8800 ajaxLocation = location.href, 8801 8802 8803 // Segment location into parts 8804 ajaxLocParts = rurl.exec(ajaxLocation.toLowerCase()) || []; 8805 8806 // Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport 8807 function addToPrefiltersOrTransports(structure) { 8808 8809 // dataTypeExpression is optional and defaults to "*" 8810 return function (dataTypeExpression, func) { 8811 8812 if (typeof dataTypeExpression !== "string") { 8813 func = dataTypeExpression; 8814 dataTypeExpression = "*"; 8815 } 8816 8817 var dataType, 8818 i = 0, 8819 dataTypes = dataTypeExpression.toLowerCase().match(rnotwhite) || []; 8820 8821 if (jQuery.isFunction(func)) { 8822 8823 // For each dataType in the dataTypeExpression 8824 while (dataType = dataTypes[i++]) { 8825 8826 // Prepend if requested 8827 if (dataType.charAt(0) === "+") { 8828 dataType = dataType.slice(1) || "*"; 8829 (structure[dataType] = structure[dataType] || []).unshift(func); 8830 8831 // Otherwise append 8832 } else { 8833 (structure[dataType] = structure[dataType] || []).push(func); 8834 } 8835 } 8836 } 8837 }; 8838 } 8839 8840 // Base inspection function for prefilters and transports 8841 function inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) { 8842 8843 var inspected = {}, 8844 seekingTransport = structure === transports; 8845 8846 function inspect(dataType) { 8847 var selected; 8848 inspected[dataType] = true; 8849 jQuery.each(structure[dataType] || [], function (_, prefilterOrFactory) { 8850 var dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR); 8851 if (typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[dataTypeOrTransport]) { 8852 8853 options.dataTypes.unshift(dataTypeOrTransport); 8854 inspect(dataTypeOrTransport); 8855 return false; 8856 } else if (seekingTransport) { 8857 return !(selected = dataTypeOrTransport); 8858 } 8859 }); 8860 return selected; 8861 } 8862 8863 return inspect(options.dataTypes[0]) || !inspected["*"] && inspect("*"); 8864 } 8865 8866 // A special extend for ajax options 8867 // that takes "flat" options (not to be deep extended) 8868 // Fixes #9887 8869 function ajaxExtend(target, src) { 8870 var deep, 8871 key, 8872 flatOptions = jQuery.ajaxSettings.flatOptions || {}; 8873 8874 for (key in src) { 8875 if (src[key] !== undefined) { 8876 (flatOptions[key] ? target : deep || (deep = {}))[key] = src[key]; 8877 } 8878 } 8879 if (deep) { 8880 jQuery.extend(true, target, deep); 8881 } 8882 8883 return target; 8884 } 8885 8886 /* Handles responses to an ajax request: 8887 * - finds the right dataType (mediates between content-type and expected dataType) 8888 * - returns the corresponding response 8889 */ 8890 function ajaxHandleResponses(s, jqXHR, responses) { 8891 var firstDataType, 8892 ct, 8893 finalDataType, 8894 type, 8895 contents = s.contents, 8896 dataTypes = s.dataTypes; 8897 8898 // Remove auto dataType and get content-type in the process 8899 while (dataTypes[0] === "*") { 8900 dataTypes.shift(); 8901 if (ct === undefined) { 8902 ct = s.mimeType || jqXHR.getResponseHeader("Content-Type"); 8903 } 8904 } 8905 8906 // Check if we're dealing with a known content-type 8907 if (ct) { 8908 for (type in contents) { 8909 if (contents[type] && contents[type].test(ct)) { 8910 dataTypes.unshift(type); 8911 break; 8912 } 8913 } 8914 } 8915 8916 // Check to see if we have a response for the expected dataType 8917 if (dataTypes[0] in responses) { 8918 finalDataType = dataTypes[0]; 8919 } else { 8920 8921 // Try convertible dataTypes 8922 for (type in responses) { 8923 if (!dataTypes[0] || s.converters[type + " " + dataTypes[0]]) { 8924 finalDataType = type; 8925 break; 8926 } 8927 if (!firstDataType) { 8928 firstDataType = type; 8929 } 8930 } 8931 8932 // Or just use first one 8933 finalDataType = finalDataType || firstDataType; 8934 } 8935 8936 // If we found a dataType 8937 // We add the dataType to the list if needed 8938 // and return the corresponding response 8939 if (finalDataType) { 8940 if (finalDataType !== dataTypes[0]) { 8941 dataTypes.unshift(finalDataType); 8942 } 8943 return responses[finalDataType]; 8944 } 8945 } 8946 8947 /* Chain conversions given the request and the original response 8948 * Also sets the responseXXX fields on the jqXHR instance 8949 */ 8950 function ajaxConvert(s, response, jqXHR, isSuccess) { 8951 var conv2, 8952 current, 8953 conv, 8954 tmp, 8955 prev, 8956 converters = {}, 8957 8958 8959 // Work with a copy of dataTypes in case we need to modify it for conversion 8960 dataTypes = s.dataTypes.slice(); 8961 8962 // Create converters map with lowercased keys 8963 if (dataTypes[1]) { 8964 for (conv in s.converters) { 8965 converters[conv.toLowerCase()] = s.converters[conv]; 8966 } 8967 } 8968 8969 current = dataTypes.shift(); 8970 8971 // Convert to each sequential dataType 8972 while (current) { 8973 8974 if (s.responseFields[current]) { 8975 jqXHR[s.responseFields[current]] = response; 8976 } 8977 8978 // Apply the dataFilter if provided 8979 if (!prev && isSuccess && s.dataFilter) { 8980 response = s.dataFilter(response, s.dataType); 8981 } 8982 8983 prev = current; 8984 current = dataTypes.shift(); 8985 8986 if (current) { 8987 8988 // There's only work to do if current dataType is non-auto 8989 if (current === "*") { 8990 8991 current = prev; 8992 8993 // Convert response if prev dataType is non-auto and differs from current 8994 } else if (prev !== "*" && prev !== current) { 8995 8996 // Seek a direct converter 8997 conv = converters[prev + " " + current] || converters["* " + current]; 8998 8999 // If none found, seek a pair 9000 if (!conv) { 9001 for (conv2 in converters) { 9002 9003 // If conv2 outputs current 9004 tmp = conv2.split(" "); 9005 if (tmp[1] === current) { 9006 9007 // If prev can be converted to accepted input 9008 conv = converters[prev + " " + tmp[0]] || converters["* " + tmp[0]]; 9009 if (conv) { 9010 9011 // Condense equivalence converters 9012 if (conv === true) { 9013 conv = converters[conv2]; 9014 9015 // Otherwise, insert the intermediate dataType 9016 } else if (converters[conv2] !== true) { 9017 current = tmp[0]; 9018 dataTypes.unshift(tmp[1]); 9019 } 9020 break; 9021 } 9022 } 9023 } 9024 } 9025 9026 // Apply converter (if not an equivalence) 9027 if (conv !== true) { 9028 9029 // Unless errors are allowed to bubble, catch and return them 9030 if (conv && s["throws"]) { 9031 // jscs:ignore requireDotNotation 9032 response = conv(response); 9033 } else { 9034 try { 9035 response = conv(response); 9036 } catch (e) { 9037 return { 9038 state: "parsererror", 9039 error: conv ? e : "No conversion from " + prev + " to " + current 9040 }; 9041 } 9042 } 9043 } 9044 } 9045 } 9046 } 9047 9048 return { state: "success", data: response }; 9049 } 9050 9051 jQuery.extend({ 9052 9053 // Counter for holding the number of active queries 9054 active: 0, 9055 9056 // Last-Modified header cache for next request 9057 lastModified: {}, 9058 etag: {}, 9059 9060 ajaxSettings: { 9061 url: ajaxLocation, 9062 type: "GET", 9063 isLocal: rlocalProtocol.test(ajaxLocParts[1]), 9064 global: true, 9065 processData: true, 9066 async: true, 9067 contentType: "application/x-www-form-urlencoded; charset=UTF-8", 9068 /* 9069 timeout: 0, 9070 data: null, 9071 dataType: null, 9072 username: null, 9073 password: null, 9074 cache: null, 9075 throws: false, 9076 traditional: false, 9077 headers: {}, 9078 */ 9079 9080 accepts: { 9081 "*": allTypes, 9082 text: "text/plain", 9083 html: "text/html", 9084 xml: "application/xml, text/xml", 9085 json: "application/json, text/javascript" 9086 }, 9087 9088 contents: { 9089 xml: /\bxml\b/, 9090 html: /\bhtml/, 9091 json: /\bjson\b/ 9092 }, 9093 9094 responseFields: { 9095 xml: "responseXML", 9096 text: "responseText", 9097 json: "responseJSON" 9098 }, 9099 9100 // Data converters 9101 // Keys separate source (or catchall "*") and destination types with a single space 9102 converters: { 9103 9104 // Convert anything to text 9105 "* text": String, 9106 9107 // Text to html (true = no transformation) 9108 "text html": true, 9109 9110 // Evaluate text as a json expression 9111 "text json": jQuery.parseJSON, 9112 9113 // Parse text as xml 9114 "text xml": jQuery.parseXML 9115 }, 9116 9117 // For options that shouldn't be deep extended: 9118 // you can add your own custom options here if 9119 // and when you create one that shouldn't be 9120 // deep extended (see ajaxExtend) 9121 flatOptions: { 9122 url: true, 9123 context: true 9124 } 9125 }, 9126 9127 // Creates a full fledged settings object into target 9128 // with both ajaxSettings and settings fields. 9129 // If target is omitted, writes into ajaxSettings. 9130 ajaxSetup: function (target, settings) { 9131 return settings ? 9132 9133 // Building a settings object 9134 ajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) : 9135 9136 // Extending ajaxSettings 9137 ajaxExtend(jQuery.ajaxSettings, target); 9138 }, 9139 9140 ajaxPrefilter: addToPrefiltersOrTransports(prefilters), 9141 ajaxTransport: addToPrefiltersOrTransports(transports), 9142 9143 // Main method 9144 ajax: function (url, options) { 9145 9146 // If url is an object, simulate pre-1.5 signature 9147 if (typeof url === "object") { 9148 options = url; 9149 url = undefined; 9150 } 9151 9152 // Force options to be an object 9153 options = options || {}; 9154 9155 var 9156 9157 // Cross-domain detection vars 9158 parts, 9159 9160 9161 // Loop variable 9162 i, 9163 9164 9165 // URL without anti-cache param 9166 cacheURL, 9167 9168 9169 // Response headers as string 9170 responseHeadersString, 9171 9172 9173 // timeout handle 9174 timeoutTimer, 9175 9176 9177 // To know if global events are to be dispatched 9178 fireGlobals, 9179 transport, 9180 9181 9182 // Response headers 9183 responseHeaders, 9184 9185 9186 // Create the final options object 9187 s = jQuery.ajaxSetup({}, options), 9188 9189 9190 // Callbacks context 9191 callbackContext = s.context || s, 9192 9193 9194 // Context for global events is callbackContext if it is a DOM node or jQuery collection 9195 globalEventContext = s.context && (callbackContext.nodeType || callbackContext.jquery) ? jQuery(callbackContext) : jQuery.event, 9196 9197 9198 // Deferreds 9199 deferred = jQuery.Deferred(), 9200 completeDeferred = jQuery.Callbacks("once memory"), 9201 9202 9203 // Status-dependent callbacks 9204 statusCode = s.statusCode || {}, 9205 9206 9207 // Headers (they are sent all at once) 9208 requestHeaders = {}, 9209 requestHeadersNames = {}, 9210 9211 9212 // The jqXHR state 9213 state = 0, 9214 9215 9216 // Default abort message 9217 strAbort = "canceled", 9218 9219 9220 // Fake xhr 9221 jqXHR = { 9222 readyState: 0, 9223 9224 // Builds headers hashtable if needed 9225 getResponseHeader: function (key) { 9226 var match; 9227 if (state === 2) { 9228 if (!responseHeaders) { 9229 responseHeaders = {}; 9230 while (match = rheaders.exec(responseHeadersString)) { 9231 responseHeaders[match[1].toLowerCase()] = match[2]; 9232 } 9233 } 9234 match = responseHeaders[key.toLowerCase()]; 9235 } 9236 return match == null ? null : match; 9237 }, 9238 9239 // Raw string 9240 getAllResponseHeaders: function () { 9241 return state === 2 ? responseHeadersString : null; 9242 }, 9243 9244 // Caches the header 9245 setRequestHeader: function (name, value) { 9246 var lname = name.toLowerCase(); 9247 if (!state) { 9248 name = requestHeadersNames[lname] = requestHeadersNames[lname] || name; 9249 requestHeaders[name] = value; 9250 } 9251 return this; 9252 }, 9253 9254 // Overrides response content-type header 9255 overrideMimeType: function (type) { 9256 if (!state) { 9257 s.mimeType = type; 9258 } 9259 return this; 9260 }, 9261 9262 // Status-dependent callbacks 9263 statusCode: function (map) { 9264 var code; 9265 if (map) { 9266 if (state < 2) { 9267 for (code in map) { 9268 9269 // Lazy-add the new callback in a way that preserves old ones 9270 statusCode[code] = [statusCode[code], map[code]]; 9271 } 9272 } else { 9273 9274 // Execute the appropriate callbacks 9275 jqXHR.always(map[jqXHR.status]); 9276 } 9277 } 9278 return this; 9279 }, 9280 9281 // Cancel the request 9282 abort: function (statusText) { 9283 var finalText = statusText || strAbort; 9284 if (transport) { 9285 transport.abort(finalText); 9286 } 9287 done(0, finalText); 9288 return this; 9289 } 9290 }; 9291 9292 // Attach deferreds 9293 deferred.promise(jqXHR).complete = completeDeferred.add; 9294 jqXHR.success = jqXHR.done; 9295 jqXHR.error = jqXHR.fail; 9296 9297 // Remove hash character (#7531: and string promotion) 9298 // Add protocol if not provided (#5866: IE7 issue with protocol-less urls) 9299 // Handle falsy url in the settings object (#10093: consistency with old signature) 9300 // We also use the url parameter if available 9301 s.url = ((url || s.url || ajaxLocation) + "").replace(rhash, "").replace(rprotocol, ajaxLocParts[1] + "//"); 9302 9303 // Alias method option to type as per ticket #12004 9304 s.type = options.method || options.type || s.method || s.type; 9305 9306 // Extract dataTypes list 9307 s.dataTypes = jQuery.trim(s.dataType || "*").toLowerCase().match(rnotwhite) || [""]; 9308 9309 // A cross-domain request is in order when we have a protocol:host:port mismatch 9310 if (s.crossDomain == null) { 9311 parts = rurl.exec(s.url.toLowerCase()); 9312 s.crossDomain = !!(parts && (parts[1] !== ajaxLocParts[1] || parts[2] !== ajaxLocParts[2] || (parts[3] || (parts[1] === "http:" ? "80" : "443")) !== (ajaxLocParts[3] || (ajaxLocParts[1] === "http:" ? "80" : "443")))
vendor: 9,321 bytes, lines 9312-9683
9312); 9313 } 9314 9315 // Convert data if not already a string 9316 if (s.data && s.processData && typeof s.data !== "string") { 9317 s.data = jQuery.param(s.data, s.traditional); 9318 } 9319 9320 // Apply prefilters 9321 inspectPrefiltersOrTransports(prefilters, s, options, jqXHR); 9322 9323 // If request was aborted inside a prefilter, stop there 9324 if (state === 2) { 9325 return jqXHR; 9326 } 9327 9328 // We can fire global events as of now if asked to 9329 // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) 9330 fireGlobals = jQuery.event && s.global; 9331 9332 // Watch for a new set of requests 9333 if (fireGlobals && jQuery.active++ === 0) { 9334 jQuery.event.trigger("ajaxStart"); 9335 } 9336 9337 // Uppercase the type 9338 s.type = s.type.toUpperCase(); 9339 9340 // Determine if request has content 9341 s.hasContent = !rnoContent.test(s.type); 9342 9343 // Save the URL in case we're toying with the If-Modified-Since 9344 // and/or If-None-Match header later on 9345 cacheURL = s.url; 9346 9347 // More options handling for requests with no content 9348 if (!s.hasContent) { 9349 9350 // If data is available, append data to url 9351 if (s.data) { 9352 cacheURL = s.url += (rquery.test(cacheURL) ? "&" : "?") + s.data; 9353 9354 // #9682: remove data so that it's not used in an eventual retry 9355 delete s.data; 9356 } 9357 9358 // Add anti-cache in url if needed 9359 if (s.cache === false) { 9360 s.url = rts.test(cacheURL) ? 9361 9362 // If there is already a '_' parameter, set its value 9363 cacheURL.replace(rts, "$1_=" + nonce++) : 9364 9365 // Otherwise add one to the end 9366 cacheURL + (rquery.test(cacheURL) ? "&" : "?") + "_=" + nonce++; 9367 } 9368 } 9369 9370 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. 9371 if (s.ifModified) { 9372 if (jQuery.lastModified[cacheURL]) { 9373 jqXHR.setRequestHeader("If-Modified-Since", jQuery.lastModified[cacheURL]); 9374 } 9375 if (jQuery.etag[cacheURL]) { 9376 jqXHR.setRequestHeader("If-None-Match", jQuery.etag[cacheURL]); 9377 } 9378 } 9379 9380 // Set the correct header, if data is being sent 9381 if (s.data && s.hasContent && s.contentType !== false || options.contentType) { 9382 jqXHR.setRequestHeader("Content-Type", s.contentType); 9383 } 9384 9385 // Set the Accepts header for the server, depending on the dataType 9386 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["*"]); 9387 9388 // Check for headers option 9389 for (i in s.headers) { 9390 jqXHR.setRequestHeader(i, s.headers[i]); 9391 } 9392 9393 // Allow custom headers/mimetypes and early abort 9394 if (s.beforeSend && (s.beforeSend.call(callbackContext, jqXHR, s) === false || state === 2)) { 9395 9396 // Abort if not done already and return 9397 return jqXHR.abort(); 9398 } 9399 9400 // aborting is no longer a cancellation 9401 strAbort = "abort"; 9402 9403 // Install callbacks on deferreds 9404 for (i in { success: 1, error: 1, complete: 1 }) { 9405 jqXHR[i](s[i]); 9406 } 9407 9408 // Get transport 9409 transport = inspectPrefiltersOrTransports(transports, s, options, jqXHR); 9410 9411 // If no transport, we auto-abort 9412 if (!transport) { 9413 done(-1, "No Transport"); 9414 } else { 9415 jqXHR.readyState = 1; 9416 9417 // Send global event 9418 if (fireGlobals) { 9419 globalEventContext.trigger("ajaxSend", [jqXHR, s]); 9420 } 9421 9422 // If request was aborted inside ajaxSend, stop there 9423 if (state === 2) { 9424 return jqXHR; 9425 } 9426 9427 // Timeout 9428 if (s.async && s.timeout > 0) { 9429 timeoutTimer = window.setTimeout(function () { 9430 jqXHR.abort("timeout"); 9431 }, s.timeout); 9432 } 9433 9434 try { 9435 state = 1; 9436 transport.send(requestHeaders, done); 9437 } catch (e) { 9438 9439 // Propagate exception as error if not done 9440 if (state < 2) { 9441 done(-1, e); 9442 9443 // Simply rethrow otherwise 9444 } else { 9445 throw e; 9446 } 9447 } 9448 } 9449 9450 // Callback for when everything is done 9451 function done(status, nativeStatusText, responses, headers) { 9452 var isSuccess, 9453 success, 9454 error, 9455 response, 9456 modified, 9457 statusText = nativeStatusText; 9458 9459 // Called once 9460 if (state === 2) { 9461 return; 9462 } 9463 9464 // State is "done" now 9465 state = 2; 9466 9467 // Clear timeout if it exists 9468 if (timeoutTimer) { 9469 window.clearTimeout(timeoutTimer); 9470 } 9471 9472 // Dereference transport for early garbage collection 9473 // (no matter how long the jqXHR object will be used) 9474 transport = undefined; 9475 9476 // Cache response headers 9477 responseHeadersString = headers || ""; 9478 9479 // Set readyState 9480 jqXHR.readyState = status > 0 ? 4 : 0; 9481 9482 // Determine if successful 9483 isSuccess = status >= 200 && status < 300 || status === 304; 9484 9485 // Get response data 9486 if (responses) { 9487 response = ajaxHandleResponses(s, jqXHR, responses); 9488 } 9489 9490 // Convert no matter what (that way responseXXX fields are always set) 9491 response = ajaxConvert(s, response, jqXHR, isSuccess); 9492 9493 // If successful, handle type chaining 9494 if (isSuccess) { 9495 9496 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. 9497 if (s.ifModified) { 9498 modified = jqXHR.getResponseHeader("Last-Modified"); 9499 if (modified) { 9500 jQuery.lastModified[cacheURL] = modified; 9501 } 9502 modified = jqXHR.getResponseHeader("etag"); 9503 if (modified) { 9504 jQuery.etag[cacheURL] = modified; 9505 } 9506 } 9507 9508 // if no content 9509 if (status === 204 || s.type === "HEAD") { 9510 statusText = "nocontent"; 9511 9512 // if not modified 9513 } else if (status === 304) { 9514 statusText = "notmodified"; 9515 9516 // If we have data, let's convert it 9517 } else { 9518 statusText = response.state; 9519 success = response.data; 9520 error = response.error; 9521 isSuccess = !error; 9522 } 9523 } else { 9524 9525 // We extract error from statusText 9526 // then normalize statusText and status for non-aborts 9527 error = statusText; 9528 if (status || !statusText) { 9529 statusText = "error"; 9530 if (status < 0) { 9531 status = 0; 9532 } 9533 } 9534 } 9535 9536 // Set data for the fake xhr object 9537 jqXHR.status = status; 9538 jqXHR.statusText = (nativeStatusText || statusText) + ""; 9539 9540 // Success/Error 9541 if (isSuccess) { 9542 deferred.resolveWith(callbackContext, [success, statusText, jqXHR]); 9543 } else { 9544 deferred.rejectWith(callbackContext, [jqXHR, statusText, error]); 9545 } 9546 9547 // Status-dependent callbacks 9548 jqXHR.statusCode(statusCode); 9549 statusCode = undefined; 9550 9551 if (fireGlobals) { 9552 globalEventContext.trigger(isSuccess ? "ajaxSuccess" : "ajaxError", [jqXHR, s, isSuccess ? success : error]); 9553 } 9554 9555 // Complete 9556 completeDeferred.fireWith(callbackContext, [jqXHR, statusText]); 9557 9558 if (fireGlobals) { 9559 globalEventContext.trigger("ajaxComplete", [jqXHR, s]); 9560 9561 // Handle the global AJAX counter 9562 if (! --jQuery.active) { 9563 jQuery.event.trigger("ajaxStop"); 9564 } 9565 } 9566 } 9567 9568 return jqXHR; 9569 }, 9570 9571 getJSON: function (url, data, callback) { 9572 return jQuery.get(url, data, callback, "json"); 9573 }, 9574 9575 getScript: function (url, callback) { 9576 return jQuery.get(url, undefined, callback, "script"); 9577 } 9578 }); 9579 9580 jQuery.each(["get", "post"], function (i, method) { 9581 jQuery[method] = function (url, data, callback, type) { 9582 9583 // shift arguments if data argument was omitted 9584 if (jQuery.isFunction(data)) { 9585 type = type || callback; 9586 callback = data; 9587 data = undefined; 9588 } 9589 9590 // The url can be an options object (which then must have .url) 9591 return jQuery.ajax(jQuery.extend({ 9592 url: url, 9593 type: method, 9594 dataType: type, 9595 data: data, 9596 success: callback 9597 }, jQuery.isPlainObject(url) && url)); 9598 }; 9599 }); 9600 9601 jQuery._evalUrl = function (url) { 9602 return jQuery.ajax({ 9603 url: url, 9604 9605 // Make this explicit, since user can override this through ajaxSetup (#11264) 9606 type: "GET", 9607 dataType: "script", 9608 cache: true, 9609 async: false, 9610 global: false, 9611 "throws": true 9612 }); 9613 }; 9614 9615 jQuery.fn.extend({ 9616 wrapAll: function (html) { 9617 if (jQuery.isFunction(html)) { 9618 return this.each(function (i) { 9619 jQuery(this).wrapAll(html.call(this, i)); 9620 }); 9621 } 9622 9623 if (this[0]) { 9624 9625 // The elements to wrap the target around 9626 var wrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true); 9627 9628 if (this[0].parentNode) { 9629 wrap.insertBefore(this[0]); 9630 } 9631 9632 wrap.map(function () { 9633 var elem = this; 9634 9635 while (elem.firstChild && elem.firstChild.nodeType === 1) { 9636 elem = elem.firstChild; 9637 } 9638 9639 return elem; 9640 }).append(this); 9641 } 9642 9643 return this; 9644 }, 9645 9646 wrapInner: function (html) { 9647 if (jQuery.isFunction(html)) { 9648 return this.each(function (i) { 9649 jQuery(this).wrapInner(html.call(this, i)); 9650 }); 9651 } 9652 9653 return this.each(function () { 9654 var self = jQuery(this), 9655 contents = self.contents(); 9656 9657 if (contents.length) { 9658 contents.wrapAll(html); 9659 } else { 9660 self.append(html); 9661 } 9662 }); 9663 }, 9664 9665 wrap: function (html) { 9666 var isFunction = jQuery.isFunction(html); 9667 9668 return this.each(function (i) { 9669 jQuery(this).wrapAll(isFunction ? html.call(this, i) : html); 9670 }); 9671 }, 9672 9673 unwrap: function () { 9674 return this.parent().each(function () { 9675 if (!jQuery.nodeName(this, "body")) { 9676 jQuery(this).replaceWith(this.childNodes); 9677 } 9678 }).end(); 9679 } 9680 }); 9681 9682 function getDisplay(elem) { 9683 return elem.style && elem.style.display || jQuery.css(elem, "dis
9683play"); 9684 } 9685 9686 function filterHidden(elem) { 9687 9688 // Disconnected elements are considered hidden 9689 if (!jQuery.contains(elem.ownerDocument || document, elem)) { 9690 return true; 9691 } 9692 while (elem && elem.nodeType === 1) { 9693 if (getDisplay(elem) === "none" || elem.type === "hidden") { 9694 return true; 9695 } 9696 elem = elem.parentNode; 9697 } 9698 return false; 9699 } 9700 9701 jQuery.expr.filters.hidden = function (elem) { 9702 9703 // Support: Opera <= 12.12 9704 // Opera reports offsetWidths and offsetHeights less than zero on some elements 9705 return support.reliableHiddenOffsets() ? elem.offsetWidth <= 0 && elem.offsetHeight <= 0 && !elem.getClientRects().length : filterHidden(elem); 9706 }; 9707 9708 jQuery.expr.filters.visible = function (elem) { 9709 return !jQuery.expr.filters.hidden(elem); 9710 }; 9711 9712 var r20 = /%20/g, 9713 rbracket = /\[\]$/, 9714 rCRLF = /\r?\n/g, 9715 rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, 9716 rsubmittable = /^(?:input|select|textarea|keygen)/i; 9717 9718 function buildParams(prefix, obj, traditional, add) { 9719 var name; 9720 9721 if (jQuery.isArray(obj)) { 9722 9723 // Serialize array item. 9724 jQuery.each(obj, function (i, v) { 9725 if (traditional || rbracket.test(prefix)) { 9726 9727 // Treat each array item as a scalar. 9728 add(prefix, v); 9729 } else { 9730 9731 // Item is non-scalar (array or object), encode its numeric index. 9732 buildParams(prefix + "[" + (typeof v === "object" && v != null ? i : "") + "]", v, traditional, add); 9733 } 9734 }); 9735 } else if (!traditional && jQuery.type(obj) === "object") { 9736 9737 // Serialize object item. 9738 for (name in obj) { 9739 buildParams(prefix + "[" + name + "]", obj[name], traditional, add); 9740 } 9741 } else { 9742 9743 // Serialize scalar item. 9744 add(prefix, obj); 9745 } 9746 } 9747 9748 // Serialize an array of form elements or a set of 9749 // key/values into a query string 9750 jQuery.param = function (a, traditional) { 9751 var prefix, 9752 s = [], 9753 add = function (key, value) { 9754 9755 // If value is a function, invoke it and return its value 9756 value = jQuery.isFunction(value) ? value() : value == null ? "" : value; 9757 s[s.length] = encodeURIComponent(key) + "=" + encodeURIComponent(value); 9758 }; 9759 9760 // Set traditional to true for jQuery <= 1.3.2 behavior. 9761 if (traditional === undefined) { 9762 traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional; 9763 } 9764 9765 // If an array was passed in, assume that it is an array of form elements. 9766 if (jQuery.isArray(a) || a.jquery && !jQuery.isPlainObject(a)) { 9767 9768 // Serialize the form elements 9769 jQuery.each(a, function () { 9770 add(this.name, this.value); 9771 }); 9772 } else { 9773 9774 // If traditional, encode the "old" way (the way 1.3.2 or older 9775 // did it), otherwise encode params recursively. 9776 for (prefix in a) { 9777 buildParams(prefix, a[prefix], traditional, add); 9778 } 9779 } 9780 9781 // Return the resulting serialization 9782 return s.join("&").replace(r20, "+"); 9783 }; 9784 9785 jQuery.fn.extend({ 9786 serialize: function () { 9787 return jQuery.param(this.serializeArray()); 9788 }, 9789 serializeArray: function () { 9790 return this.map(function () { 9791 9792 // Can add propHook for "elements" to filter or add form elements 9793 var elements = jQuery.prop(this, "elements"); 9794 return elements ? jQuery.makeArray(elements) : this; 9795 }).filter(function () { 9796 var type = this.type; 9797 9798 // Use .is(":disabled") so that fieldset[disabled] works 9799 return this.name && !jQuery(this).is(":disabled") && rsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) && (this.checked || !rcheckableType.test(type)); 9800 }).map(function (i, elem) { 9801 var val = jQuery(this).val(); 9802 9803 return val == null ? null : jQuery.isArray(val) ? jQuery.map(val, function (val) { 9804 return { name: elem.name, value: val.replace(rCRLF, "\r\n") }; 9805 }) : { name: elem.name, value: val.replace(rCRLF, "\r\n") }; 9806 }).get(); 9807 } 9808 }); 9809 9810 // Create the request object 9811 // (This is still attached to ajaxSettings for backward compatibility) 9812 jQuery.ajaxSettings.xhr = window.ActiveXObject !== undefined ? 9813 9814 // Support: IE6-IE8 9815 function () { 9816 9817 // XHR cannot access local files, always use ActiveX for that case 9818 if (this.isLocal) { 9819 return createActiveXHR(); 9820 } 9821
9822 // Support: IE 9-11 9823 // IE seems to error on cross-domain PATCH requests when ActiveX XHR 9824 // is used. In IE 9+ always use the native XHR. 9825 // Note: this condition won't catch Edge as it doesn't define 9826 // document.documentMode but it also doesn't support ActiveX so it won't 9827 // reach this code. 9828 if (document.documentMode > 8) { 9829 return createStandardXHR(); 9830 } 9831 9832 // Support: IE<9 9833 // oldIE XHR does not support non-RFC2616 methods (#13240) 9834 // See http://msdn.microsoft.com/en-us/library/ie/ms536648(v=vs.85).aspx 9835 // and http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9 9836 // Although this check for six methods instead of eight 9837 // since IE also does not support "trace" and "connect" 9838 return (/^(get|post|head|put|delete|options)$/i.test(this.type) && createStandardXHR() || createActiveXHR() 9839 ); 9840 } : 9841 9842 // For all other browsers, use the standard XMLHttpRequest object 9843 createStandardXHR; 9844 9845 var xhrId = 0, 9846 xhrCallbacks = {}, 9847 xhrSupported = jQuery.ajaxSettings.xhr(); 9848 9849 // Support: IE<10 9850 // Open requests must be manually aborted on unload (#5280) 9851 // See https://support.microsoft.com/kb/2856746 for more info 9852 if (window.attachEvent) { 9853 window.attachEvent("onunload", function () { 9854 for (var key in xhrCallbacks) { 9855 xhrCallbacks[key](undefined, true); 9856 } 9857 }); 9858 } 9859 9860 // Determine support properties 9861 support.cors = !!xhrSupported && "withCredentials" in xhrSupported; 9862 xhrSupported = support.ajax = !!xhrSupported; 9863 9864 // Create transport if the browser can provide an xhr 9865 if (xhrSupported) { 9866 9867 jQuery.ajaxTransport(function (options) { 9868 9869 // Cross domain only allowed if supported through XMLHttpRequest 9870 if (!options.crossDomain || support.cors) { 9871 9872 var callback; 9873 9874 return { 9875 send: function (headers, complete) { 9876 var i, 9877 xhr = options.xhr(), 9878 id = ++xhrId; 9879 9880 // Open the socket 9881 xhr.open(options.type, options.url, options.async, options.username, options.password); 9882 9883 // Apply custom fields if provided 9884 if (options.xhrFields) { 9885 for (i in options.xhrFields) { 9886 xhr[i] = options.xhrFields[i]; 9887 } 9888 } 9889 9890 // Override mime type if needed 9891 if (options.mimeType && xhr.overrideMimeType) { 9892 xhr.overrideMimeType(options.mimeType); 9893 } 9894 9895 // X-Requested-With header 9896 // For cross-domain requests, seeing as conditions for a preflight are 9897 // akin to a jigsaw puzzle, we simply never set it to be sure. 9898 // (it can always be set on a per-request basis or even using ajaxSetup)
vendor: 8,552 bytes, lines 9899-10208
9899 // For same-domain requests, won't change header if already provided. 9900 if (!options.crossDomain && !headers["X-Requested-With"]) { 9901 headers["X-Requested-With"] = "XMLHttpRequest"; 9902 } 9903 9904 // Set headers 9905 for (i in headers) { 9906 9907 // Support: IE<9 9908 // IE's ActiveXObject throws a 'Type Mismatch' exception when setting 9909 // request header to a null-value. 9910 // 9911 // To keep consistent with other XHR implementations, cast the value 9912 // to string and ignore `undefined`. 9913 if (headers[i] !== undefined) { 9914 xhr.setRequestHeader(i, headers[i] + ""); 9915 } 9916 } 9917 9918 // Do send the request 9919 // This may raise an exception which is actually 9920 // handled in jQuery.ajax (so no try/catch here) 9921 xhr.send(options.hasContent && options.data || null); 9922 9923 // Listener 9924 callback = function (_, isAbort) { 9925 var status, statusText, responses; 9926 9927 // Was never called and is aborted or complete 9928 if (callback && (isAbort || xhr.readyState === 4)) { 9929 9930 // Clean up 9931 delete xhrCallbacks[id]; 9932 callback = undefined; 9933 xhr.onreadystatechange = jQuery.noop; 9934 9935 // Abort manually if needed 9936 if (isAbort) { 9937 if (xhr.readyState !== 4) { 9938 xhr.abort(); 9939 } 9940 } else { 9941 responses = {}; 9942 status = xhr.status; 9943 9944 // Support: IE<10 9945 // Accessing binary-data responseText throws an exception 9946 // (#11426) 9947 if (typeof xhr.responseText === "string") { 9948 responses.text = xhr.responseText; 9949 } 9950 9951 // Firefox throws an exception when accessing 9952 // statusText for faulty cross-domain requests 9953 try { 9954 statusText = xhr.statusText; 9955 } catch (e) { 9956 9957 // We normalize with Webkit giving an empty statusText 9958 statusText = ""; 9959 } 9960 9961 // Filter status for non standard behaviors 9962 9963 // If the request is local and we have data: assume a success 9964 // (success with no data won't get notified, that's the best we 9965 // can do given current implementations) 9966 if (!status && options.isLocal && !options.crossDomain) { 9967 status = responses.text ? 200 : 404; 9968 9969 // IE - #1450: sometimes returns 1223 when it should be 204 9970 } else if (status === 1223) { 9971 status = 204; 9972 } 9973 } 9974 } 9975 9976 // Call complete if needed 9977 if (responses) { 9978 complete(status, statusText, responses, xhr.getAllResponseHeaders()); 9979 } 9980 }; 9981 9982 // Do send the request 9983 // `xhr.send` may raise an exception, but it will be 9984 // handled in jQuery.ajax (so no try/catch here) 9985 if (!options.async) { 9986 9987 // If we're in sync mode we fire the callback 9988 callback(); 9989 } else if (xhr.readyState === 4) { 9990 9991 // (IE6 & IE7) if it's in cache and has been 9992 // retrieved directly we need to fire the callback 9993 window.setTimeout(callback); 9994 } else { 9995 9996 // Register the callback, but delay it in case `xhr.send` throws 9997 // Add to the list of active xhr callbacks 9998 xhr.onreadystatechange = xhrCallbacks[id] = callback; 9999 } 10000 }, 10001 10002 abort: function () { 10003 if (callback) { 10004 callback(undefined, true); 10005 } 10006 } 10007 }; 10008 } 10009 }); 10010 } 10011 10012 // Functions to create xhrs 10013 function createStandardXHR() { 10014 try { 10015 return new window.XMLHttpRequest(); 10016 } catch (e) {} 10017 } 10018 10019 function createActiveXHR() { 10020 try { 10021 return new window.ActiveXObject("Microsoft.XMLHTTP"); 10022 } catch (e) {} 10023 } 10024 10025 // Install script dataType 10026 jQuery.ajaxSetup({ 10027 accepts: { 10028 script: "text/javascript, application/javascript, " + "application/ecmascript, application/x-ecmascript" 10029 }, 10030 contents: { 10031 script: /\b(?:java|ecma)script\b/ 10032 }, 10033 converters: { 10034 "text script": function (text) { 10035 jQuery.globalEval(text); 10036 return text; 10037 } 10038 } 10039 }); 10040 10041 // Handle cache's special case and global 10042 jQuery.ajaxPrefilter("script", function (s) { 10043 if (s.cache === undefined) { 10044 s.cache = false; 10045 } 10046 if (s.crossDomain) { 10047 s.type = "GET"; 10048 s.global = false; 10049 } 10050 }); 10051 10052 // Bind script tag hack transport 10053 jQuery.ajaxTransport("script", function (s) { 10054 10055 // This transport only deals with cross domain requests 10056 if (s.crossDomain) { 10057 10058 var script, 10059 head = document.head || jQuery("head")[0] || document.documentElement; 10060 10061 return { 10062 10063 send: function (_, callback) { 10064 10065 script = document.createElement("script"); 10066 10067 script.async = true; 10068 10069 if (s.scriptCharset) { 10070 script.charset = s.scriptCharset; 10071 } 10072 10073 script.src = s.url; 10074 10075 // Attach handlers for all browsers 10076 script.onload = script.onreadystatechange = function (_, isAbort) { 10077 10078 if (isAbort || !script.readyState || /loaded|complete/.test(script.readyState)) { 10079 10080 // Handle memory leak in IE 10081 script.onload = script.onreadystatechange = null; 10082 10083 // Remove the script 10084 if (script.parentNode) { 10085 script.parentNode.removeChild(script); 10086 } 10087 10088 // Dereference the script 10089 script = null; 10090 10091 // Callback if not abort 10092 if (!isAbort) { 10093 callback(200, "success"); 10094 } 10095 } 10096 }; 10097 10098 // Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending 10099 // Use native DOM manipulation to avoid our domManip AJAX trickery 10100 head.insertBefore(script, head.firstChild); 10101 }, 10102 10103 abort: function () { 10104 if (script) { 10105 script.onload(undefined, true); 10106 } 10107 } 10108 }; 10109 } 10110 }); 10111 10112 var oldCallbacks = [], 10113 rjsonp = /(=)\?(?=&|$)|\?\?/; 10114 10115 // Default jsonp settings 10116 jQuery.ajaxSetup({ 10117 jsonp: "callback", 10118 jsonpCallback: function () { 10119 var callback = oldCallbacks.pop() || jQuery.expando + "_" + nonce++; 10120 this[callback] = true; 10121 return callback; 10122 } 10123 }); 10124 10125 // Detect, normalize options and install callbacks for jsonp requests 10126 jQuery.ajaxPrefilter("json jsonp", function (s, originalSettings, jqXHR) { 10127 10128 var callbackName, 10129 overwritten, 10130 responseContainer, 10131 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"); 10132 10133 // Handle iff the expected data type is "jsonp" or we have a parameter to set 10134 if (jsonProp || s.dataTypes[0] === "jsonp") { 10135 10136 // Get callback name, remembering preexisting value associated with it 10137 callbackName = s.jsonpCallback = jQuery.isFunction(s.jsonpCallback) ? s.jsonpCallback() : s.jsonpCallback; 10138 10139 // Insert callback into url or form data 10140 if (jsonProp) { 10141 s[jsonProp] = s[jsonProp].replace(rjsonp, "$1" + callbackName); 10142 } else if (s.jsonp !== false) { 10143 s.url += (rquery.test(s.url) ? "&" : "?") + s.jsonp + "=" + callbackName; 10144 } 10145 10146 // Use data converter to retrieve json after script execution 10147 s.converters["script json"] = function () { 10148 if (!responseContainer) { 10149 jQuery.error(callbackName + " was not called"); 10150 } 10151 return responseContainer[0]; 10152 }; 10153 10154 // force json dataType 10155 s.dataTypes[0] = "json"; 10156 10157 // Install callback 10158 overwritten = window[callbackName]; 10159 window[callbackName] = function () { 10160 responseContainer = arguments; 10161 }; 10162 10163 // Clean-up function (fires after converters) 10164 jqXHR.always(function () { 10165 10166 // If previous value didn't exist - remove it 10167 if (overwritten === undefined) { 10168 jQuery(window).removeProp(callbackName); 10169 10170 // Otherwise restore preexisting value 10171 } else { 10172 window[callbackName] = overwritten; 10173 } 10174 10175 // Save back as free 10176 if (s[callbackName]) { 10177 10178 // make sure that re-using the options doesn't screw things around 10179 s.jsonpCallback = originalSettings.jsonpCallback; 10180 10181 // save the callback name for future use 10182 oldCallbacks.push(callbackName); 10183 } 10184 10185 // Call if it was a function and we have a response 10186 if (responseContainer && jQuery.isFunction(overwritten)) { 10187 overwritten(responseContainer[0]); 10188 } 10189 10190 responseContainer = overwritten = undefined; 10191 }); 10192 10193 // Delegate to script 10194 return "script"; 10195 } 10196 }); 10197 10198 // data: string of html 10199 // context (optional): If specified, the fragment will be created in this context, 10200 // defaults to document 10201 // keepScripts (optional): If true, will include scripts passed in the html string 10202 jQuery.parseHTML = function (data, context, keepScripts) { 10203 if (!data || typeof data !== "string") { 10204 return null; 10205 } 10206 if (typeof context === "boolean") { 10207 keepScripts = context; 10208 context = false;
10209 } 10210 context = context || document; 10211 10212 var parsed = rsingleTag.exec(data), 10213 scripts = !keepScripts && []; 10214 10215 // Single tag 10216 if (parsed) { 10217 return [context.createElement(parsed[1])]; 10218 } 10219 10220 parsed = buildFragment([data], context, scripts); 10221 10222 if (scripts && scripts.length) { 10223 jQuery(scripts).remove(); 10224 } 10225 10226 return jQuery.merge([], parsed.childNodes); 10227 }; 10228 10229 // Keep a copy of the old load method 10230 var _load = jQuery.fn.load; 10231 10232 /** 10233 * Load a url into a page 10234 */ 10235 jQuery.fn.load = function (url, params, callback) { 10236 if (typeof url !== "string" && _load) { 10237 return _load.apply(this, arguments); 10238 } 10239 10240 var selector, 10241 type, 10242 response, 10243 self = this, 10244 off = url.indexOf(" "); 10245 10246 if (off > -1) { 10247 selector = jQuery.trim(url.slice(off, url.length)); 10248 url = url.slice(0, off); 10249 } 10250 10251 // If it's a function 10252 if (jQuery.isFunction(params)) { 10253 10254 // We assume that it's the callback 10255 callback = params; 10256 params = undefined; 10257 10258 // Otherwise, build a param string 10259 } else if (params && typeof params === "object") { 10260 type = "POST"; 10261 } 10262 10263 // If we have elements to modify, make the request 10264 if (self.length > 0) { 10265 jQuery.ajax({ 10266 url: url, 10267 10268 // If "type" variable is undefined, then "GET" method will be used. 10269 // Make value of this field explicit since 10270 // user can override it through ajaxSetup method 10271 type: type || "GET", 10272 dataType: "html", 10273 data: params 10274 }).done(function (responseText) { 10275 10276 // Save response for use in complete callback 10277 response = arguments; 10278 10279 self.html(selector ? 10280 10281 // If a selector was specified, locate the right elements in a dummy div 10282 // Exclude scripts to avoid IE 'Permission Denied' errors 10283 jQuery("<div>").append(jQuery.parseHTML(responseText)).find(selector) : 10284 10285 // Otherwise use the full result 10286 responseText); 10287 10288 // If the request succeeds, this function gets "data", "status", "jqXHR" 10289 // but they are ignored because response was set above. 10290 // If it fails, this function gets "jqXHR", "status", "error" 10291 }).always(callback && function (jqXHR, status) { 10292 self.each(function () { 10293 callback.apply(this, response || [jqXHR.responseText, status, jqXHR]); 10294 }); 10295 }); 10296 } 10297 10298 return this; 10299 }; 10300 10301 // Attach a bunch of functions for handling common AJAX events 10302 jQuery.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function (i, type) { 10303 jQuery.fn[type] = function (fn) { 10304 return this.on(type, fn); 10305 }; 10306 }); 10307 10308 jQuery.expr.filters.animated = function (elem) { 10309 return jQuery.grep(jQuery.timers, function (fn) { 10310 return elem === fn.elem; 10311 }).length; 10312 }; 10313 10314 /** 10315 * Gets a window from an element 10316 */ 10317 function getWindow(elem) { 10318 return jQuery.isWindow(elem) ? elem : elem.nodeType === 9 ? elem.defaultView || elem.parentWindow : false; 10319 } 10320 10321 jQuery.offset = { 10322 setOffset: function (elem, options, i) { 10323 var curPosition, 10324 curLeft, 10325 curCSSTop, 10326 curTop, 10327 curOffset, 10328 curCSSLeft, 10329 calculatePosition, 10330 position = jQuery.css(elem, "position"), 10331 curElem = jQuery(elem), 10332 props = {}; 10333 10334 // set position first, in-case top/left are set even on static elem 10335 if (position === "static") { 10336 elem.style.position = "relative"; 10337 } 10338 10339 curOffset = curElem.offset(); 10340 curCSSTop = jQuery.css(elem, "top"); 10341 curCSSLeft = jQuery.css(elem, "left"); 10342 calculatePosition = (position === "absolute" || position === "fixed") && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1; 10343 10344 // need to be able to calculate position if either top or left 10345 // is auto and position is either absolute or fixed 10346 if (calculatePosition) { 10347 curPosition = curElem.position(); 10348 curTop = curPosition.top; 10349 curLeft = curPosition.left; 10350 } else { 10351 curTop = parseFloat(curCSSTop) || 0; 10352 curLeft = parseFloat(curCSSLeft) || 0; 10353 } 10354 10355 if (jQuery.isFunction(options)) { 10356 10357 // Use jQuery.extend here to allow modification of coordinates argument (gh-1848) 10358 options = options.call(elem, i, jQuery.extend({}, curOffset)); 10359 } 10360 10361 if (options.top != null) { 10362 props.top = options.top - curOffset.top + curTop; 10363 } 10364 if (options.left != null) { 10365 props.left = options.left - curOffset.left + curLeft; 10366 } 10367 10368 if ("using" in options) { 10369 options.using.call(elem, props); 10370 } else { 10371 curElem.css(props); 10372 } 10373 } 10374 }; 10375 10376 jQuery.fn.extend({ 10377 offset: function (options) { 10378 if (arguments.length) {
vendor: 7,956 bytes, lines 10379-10625
10379 return options === undefined ? this : this.each(function (i) { 10380 jQuery.offset.setOffset(this, options, i); 10381 }); 10382 } 10383 10384 var docElem, 10385 win, 10386 box = { top: 0, left: 0 }, 10387 elem = this[0], 10388 doc = elem && elem.ownerDocument; 10389 10390 if (!doc) { 10391 return; 10392 } 10393 10394 docElem = doc.documentElement; 10395 10396 // Make sure it's not a disconnected DOM node 10397 if (!jQuery.contains(docElem, elem)) { 10398 return box; 10399 } 10400 10401 // If we don't have gBCR, just use 0,0 rather than error 10402 // BlackBerry 5, iOS 3 (original iPhone) 10403 if (typeof elem.getBoundingClientRect !== "undefined") { 10404 box = elem.getBoundingClientRect(); 10405 } 10406 win = getWindow(doc); 10407 return { 10408 top: box.top + (win.pageYOffset || docElem.scrollTop) - (docElem.clientTop || 0), 10409 left: box.left + (win.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || 0) 10410 }; 10411 }, 10412 10413 position: function () { 10414 if (!this[0]) { 10415 return; 10416 } 10417 10418 var offsetParent, 10419 offset, 10420 parentOffset = { top: 0, left: 0 }, 10421 elem = this[0]; 10422 10423 // Fixed elements are offset from window (parentOffset = {top:0, left: 0}, 10424 // because it is its only offset parent 10425 if (jQuery.css(elem, "position") === "fixed") { 10426 10427 // we assume that getBoundingClientRect is available when computed position is fixed 10428 offset = elem.getBoundingClientRect(); 10429 } else { 10430 10431 // Get *real* offsetParent 10432 offsetParent = this.offsetParent(); 10433 10434 // Get correct offsets 10435 offset = this.offset(); 10436 if (!jQuery.nodeName(offsetParent[0], "html")) { 10437 parentOffset = offsetParent.offset(); 10438 } 10439 10440 // Add offsetParent borders 10441 parentOffset.top += jQuery.css(offsetParent[0], "borderTopWidth", true); 10442 parentOffset.left += jQuery.css(offsetParent[0], "borderLeftWidth", true); 10443 } 10444 10445 // Subtract parent offsets and element margins 10446 // note: when an element has margin: auto the offsetLeft and marginLeft 10447 // are the same in Safari causing offset.left to incorrectly be 0 10448 return { 10449 top: offset.top - parentOffset.top - jQuery.css(elem, "marginTop", true), 10450 left: offset.left - parentOffset.left - jQuery.css(elem, "marginLeft", true) 10451 }; 10452 }, 10453 10454 offsetParent: function () { 10455 return this.map(function () { 10456 var offsetParent = this.offsetParent; 10457 10458 while (offsetParent && !jQuery.nodeName(offsetParent, "html") && jQuery.css(offsetParent, "position") === "static") { 10459 offsetParent = offsetParent.offsetParent; 10460 } 10461 return offsetParent || documentElement; 10462 }); 10463 } 10464 }); 10465 10466 // Create scrollLeft and scrollTop methods 10467 jQuery.each({ scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function (method, prop) { 10468 var top = /Y/.test(prop); 10469 10470 jQuery.fn[method] = function (val) { 10471 return access(this, function (elem, method, val) { 10472 var win = getWindow(elem); 10473 10474 if (val === undefined) { 10475 return win ? prop in win ? win[prop] : win.document.documentElement[method] : elem[method]; 10476 } 10477 10478 if (win) { 10479 win.scrollTo(!top ? val : jQuery(win).scrollLeft(), top ? val : jQuery(win).scrollTop()); 10480 } else { 10481 elem[method] = val; 10482 } 10483 }, method, val, arguments.length, null); 10484 }; 10485 }); 10486 10487 // Support: Safari<7-8+, Chrome<37-44+ 10488 // Add the top/left cssHooks using jQuery.fn.position 10489 // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 10490 // getComputedStyle returns percent when specified for top/left/bottom/right 10491 // rather than make the css module depend on the offset module, we just check for it here 10492 jQuery.each(["top", "left"], function (i, prop) { 10493 jQuery.cssHooks[prop] = addGetHookIf(support.pixelPosition, function (elem, computed) { 10494 if (computed) { 10495 computed = curCSS(elem, prop); 10496 10497 // if curCSS returns percentage, fallback to offset 10498 return rnumnonpx.test(computed) ? jQuery(elem).position()[prop] + "px" : computed; 10499 } 10500 }); 10501 }); 10502 10503 // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods 10504 jQuery.each({ Height: "height", Width: "width" }, function (name, type) { 10505 jQuery.each({ padding: "inner" + name, content: type, "": "outer" + name }, function (defaultExtra, funcName) { 10506 10507 // margin is only for outerHeight, outerWidth 10508 jQuery.fn[funcName] = function (margin, value) { 10509 var chainable = arguments.length && (defaultExtra || typeof margin !== "boolean"), 10510 extra = defaultExtra || (margin === true || value === true ? "margin" : "border"); 10511 10512 return access(this, function (elem, type, value) { 10513 var doc; 10514 10515 if (jQuery.isWindow(elem)) { 10516 10517 // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there 10518 // isn't a whole lot we can do. See pull request at this URL for discussion: 10519 // https://github.com/jquery/jquery/pull/764 10520 return elem.document.documentElement["client" + name]; 10521 } 10522 10523 // Get document width or height 10524 if (elem.nodeType === 9) { 10525 doc = elem.documentElement; 10526 10527 // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], 10528 // whichever is greatest 10529 // unfortunately, this causes bug #3838 in IE6/8 only, 10530 // but there is currently no good, small way to fix it. 10531 return Math.max(elem.body["scroll" + name], doc["scroll" + name], elem.body["offset" + name], doc["offset" + name], doc["client" + name]); 10532 } 10533 10534 return value === undefined ? 10535 10536 // Get width or height on the element, requesting but not forcing parseFloat 10537 jQuery.css(elem, type, extra) : 10538 10539 // Set width or height on the element 10540 jQuery.style(elem, type, value, extra); 10541 }, type, chainable ? margin : undefined, chainable, null); 10542 }; 10543 }); 10544 }); 10545 10546 jQuery.fn.extend({ 10547 10548 bind: function (types, data, fn) { 10549 return this.on(types, null, data, fn); 10550 }, 10551 unbind: function (types, fn) { 10552 return this.off(types, null, fn); 10553 }, 10554 10555 delegate: function (selector, types, data, fn) { 10556 return this.on(types, selector, data, fn); 10557 }, 10558 undelegate: function (selector, types, fn) { 10559 10560 // ( namespace ) or ( selector, types [, fn] ) 10561 return arguments.length === 1 ? this.off(selector, "**") : this.off(types, selector || "**", fn); 10562 } 10563 }); 10564 10565 // The number of elements contained in the matched element set 10566 jQuery.fn.size = function () { 10567 return this.length; 10568 }; 10569 10570 jQuery.fn.andSelf = jQuery.fn.addBack; 10571 10572 // Register as a named AMD module, since jQuery can be concatenated with other 10573 // files that may use define, but not via a proper concatenation script that 10574 // understands anonymous AMD modules. A named AMD is safest and most robust 10575 // way to register. Lowercase jquery is used because AMD module names are 10576 // derived from file names, and jQuery is normally delivered in a lowercase 10577 // file name. Do this after creating the global so that if an AMD module wants 10578 // to call noConflict to hide this version of jQuery, it will work. 10579 10580 // Note that for maximum portability, libraries that are not jQuery should 10581 // declare themselves as anonymous modules, and avoid setting a global if an 10582 // AMD loader is present. jQuery is a special case. For more information, see 10583 // https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon 10584 10585 if (true) { 10586 !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () { 10587 return jQuery; 10588 }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), 10589 __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); 10590 } 10591 10592 var 10593 10594 // Map over jQuery in case of overwrite 10595 _jQuery = window.jQuery, 10596 10597 10598 // Map over the $ in case of overwrite 10599 _$ = window.$; 10600 10601 jQuery.noConflict = function (deep) { 10602 if (window.$ === jQuery) { 10603 window.$ = _$; 10604 } 10605 10606 if (deep && window.jQuery === jQuery) { 10607 window.jQuery = _jQuery; 10608 } 10609 10610 return jQuery; 10611 }; 10612 10613 // Expose jQuery and $ identifiers, even in 10614 // AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557) 10615 // and CommonJS for browser emulators (#13566) 10616 if (!noGlobal) { 10617 window.jQuery = window.$ = jQuery; 10618 } 10619 10620 return jQuery; 10621}); 10622 10623/***/ }), 10624 10625/***/ 11:
vendor: 3,374 bytes, lines 10626-10728
10626/***/ (function(module, exports) { 10627 10628 10629/** 10630 * When source maps are enabled, `style-loader` uses a link element with a data-uri to 10631 * embed the css on the page. This breaks all relative urls because now they are relative to a 10632 * bundle instead of the current page. 10633 * 10634 * One solution is to only use full urls, but that may be impossible. 10635 * 10636 * Instead, this function "fixes" the relative urls to be absolute according to the current page location. 10637 * 10638 * A rudimentary test suite is located at `test/fixUrls.js` and can be run via the `npm test` command. 10639 * 10640 */ 10641 10642module.exports = function (css) { 10643 // get current location 10644 var location = typeof window !== "undefined" && window.location; 10645 10646 if (!location) { 10647 throw new Error("fixUrls requires window.location"); 10648 } 10649 10650 // blank or null? 10651 if (!css || typeof css !== "string") { 10652 return css; 10653 } 10654 10655 var baseUrl = location.protocol + "//" + location.host; 10656 var currentDir = baseUrl + location.pathname.replace(/\/[^\/]*$/, "/"); 10657 10658 // convert each url(...) 10659 /* 10660 This regular expression is just a way to recursively match brackets within 10661 a string. 10662 /url\s*\( = Match on the word "url" with any whitespace after it and then a parens 10663 ( = Start a capturing group 10664 (?: = Start a non-capturing group 10665 [^)(] = Match anything that isn't a parentheses 10666 | = OR 10667 \( = Match a start parentheses 10668 (?: = Start another non-capturing groups 10669 [^)(]+ = Match anything that isn't a parentheses 10670 | = OR 10671 \( = Match a start parentheses 10672 [^)(]* = Match anything that isn't a parentheses 10673 \) = Match a end parentheses 10674 ) = End Group 10675 *\) = Match anything and then a close parens 10676 ) = Close non-capturing group 10677 * = Match anything 10678 ) = Close capturing group 10679 \) = Match a close parens 10680 /gi = Get all matches, not the first. Be case insensitive. 10681 */ 10682 var fixedCss = css.replace(/url\s*\(((?:[^)(]|\((?:[^)(]+|\([^)(]*\))*\))*)\)/gi, function (fullMatch, origUrl) { 10683 // strip quotes (if they exist) 10684 var unquotedOrigUrl = origUrl.trim().replace(/^"(.*)"$/, function (o, $1) { 10685 return $1; 10686 }).replace(/^'(.*)'$/, function (o, $1) { 10687 return $1; 10688 }); 10689 10690 // already a full url? no change 10691 if (/^(#|data:|http:\/\/|https:\/\/|file:\/\/\/)/i.test(unquotedOrigUrl)) { 10692 return fullMatch; 10693 } 10694 10695 // convert the url to a full url 10696 var newUrl; 10697 10698 if (unquotedOrigUrl.indexOf("//") === 0) { 10699 //TODO: should we add protocol? 10700 newUrl = unquotedOrigUrl; 10701 } else if (unquotedOrigUrl.indexOf("/") === 0) { 10702 // path should be relative to the base url 10703 newUrl = baseUrl + unquotedOrigUrl; // already starts with '/' 10704 } else { 10705 // path should be relative to current directory 10706 newUrl = currentDir + unquotedOrigUrl.replace(/^\.\//, ""); // Strip leading './' 10707 } 10708 10709 // send back the fixed url(...) 10710 return "url(" + JSON.stringify(newUrl) + ")"; 10711 }); 10712 10713 // send back the fixed css 10714 return fixedCss; 10715}; 10716 10717/***/ }), 10718 10719/***/ 12: 10720/***/ (function(module, exports, __webpack_require__) { 10721 10722/* WEBPACK VAR INJECTION */(function(__webpack_provided_window_dot_jQuery, jQuery) {/** 10723 * Owl Carousel v2.2.0 10724 * Copyright 2013-2016 David Deutsch 10725 * Licensed under MIT (https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE) 10726 */ 10727/** 10728 * Owl carousel
vendor: 32,275 bytes, lines 10729-11983
10729 * @version 2.1.6 10730 * @author Bartosz Wojciechowski 10731 * @author David Deutsch 10732 * @license The MIT License (MIT) 10733 * @todo Lazy Load Icon 10734 * @todo prevent animationend bubling 10735 * @todo itemsScaleUp 10736 * @todo Test Zepto 10737 * @todo stagePadding calculate wrong active classes 10738 */ 10739;(function ($, window, document, undefined) { 10740 10741 /** 10742 * Creates a carousel. 10743 * @class The Owl Carousel. 10744 * @public 10745 * @param {HTMLElement|jQuery} element - The element to create the carousel for. 10746 * @param {Object} [options] - The options 10747 */ 10748 function Owl(element, options) { 10749 10750 /** 10751 * Current settings for the carousel. 10752 * @public 10753 */ 10754 this.settings = null; 10755 10756 /** 10757 * Current options set by the caller including defaults. 10758 * @public 10759 */ 10760 this.options = $.extend({}, Owl.Defaults, options); 10761 10762 /** 10763 * Plugin element. 10764 * @public 10765 */ 10766 this.$element = $(element); 10767 10768 /** 10769 * Proxied event handlers. 10770 * @protected 10771 */ 10772 this._handlers = {}; 10773 10774 /** 10775 * References to the running plugins of this carousel. 10776 * @protected 10777 */ 10778 this._plugins = {}; 10779 10780 /** 10781 * Currently suppressed events to prevent them from beeing retriggered. 10782 * @protected 10783 */ 10784 this._supress = {}; 10785 10786 /** 10787 * Absolute current position. 10788 * @protected 10789 */ 10790 this._current = null; 10791 10792 /** 10793 * Animation speed in milliseconds. 10794 * @protected 10795 */ 10796 this._speed = null; 10797 10798 /** 10799 * Coordinates of all items in pixel. 10800 * @todo The name of this member is missleading. 10801 * @protected 10802 */ 10803 this._coordinates = []; 10804 10805 /** 10806 * Current breakpoint. 10807 * @todo Real media queries would be nice. 10808 * @protected 10809 */ 10810 this._breakpoint = null; 10811 10812 /** 10813 * Current width of the plugin element. 10814 */ 10815 this._width = null; 10816 10817 /** 10818 * All real items. 10819 * @protected 10820 */ 10821 this._items = []; 10822 10823 /** 10824 * All cloned items. 10825 * @protected 10826 */ 10827 this._clones = []; 10828 10829 /** 10830 * Merge values of all items. 10831 * @todo Maybe this could be part of a plugin. 10832 * @protected 10833 */ 10834 this._mergers = []; 10835 10836 /** 10837 * Widths of all items. 10838 */ 10839 this._widths = []; 10840 10841 /** 10842 * Invalidated parts within the update process. 10843 * @protected 10844 */ 10845 this._invalidated = {}; 10846 10847 /** 10848 * Ordered list of workers for the update process. 10849 * @protected 10850 */ 10851 this._pipe = []; 10852 10853 /** 10854 * Current state information for the drag operation. 10855 * @todo #261 10856 * @protected 10857 */ 10858 this._drag = { 10859 time: null, 10860 target: null, 10861 pointer: null, 10862 stage: { 10863 start: null, 10864 current: null 10865 }, 10866 direction: null 10867 }; 10868 10869 /** 10870 * Current state information and their tags. 10871 * @type {Object} 10872 * @protected 10873 */ 10874 this._states = { 10875 current: {}, 10876 tags: { 10877 'initializing': ['busy'], 10878 'animating': ['busy'], 10879 'dragging': ['interacting'] 10880 } 10881 }; 10882 10883 $.each(['onResize', 'onThrottledResize'], $.proxy(function (i, handler) { 10884 this._handlers[handler] = $.proxy(this[handler], this); 10885 }, this)); 10886 10887 $.each(Owl.Plugins, $.proxy(function (key, plugin) { 10888 this._plugins[key.charAt(0).toLowerCase() + key.slice(1)] = new plugin(this); 10889 }, this)); 10890 10891 $.each(Owl.Workers, $.proxy(function (priority, worker) { 10892 this._pipe.push({ 10893 'filter': worker.filter, 10894 'run': $.proxy(worker.run, this) 10895 }); 10896 }, this)); 10897 10898 this.setup(); 10899 this.initialize(); 10900 } 10901 10902 /** 10903 * Default options for the carousel. 10904 * @public 10905 */ 10906 Owl.Defaults = { 10907 items: 3, 10908 loop: false, 10909 center: false, 10910 rewind: false, 10911 10912 mouseDrag: true, 10913 touchDrag: true, 10914 pullDrag: true, 10915 freeDrag: false, 10916 10917 margin: 0, 10918 stagePadding: 0, 10919 10920 merge: false, 10921 mergeFit: true, 10922 autoWidth: false, 10923 10924 startPosition: 0, 10925 rtl: false, 10926 10927 smartSpeed: 250, 10928 fluidSpeed: false, 10929 dragEndSpeed: false, 10930 10931 responsive: {}, 10932 responsiveRefreshRate: 200, 10933 responsiveBaseElement: window, 10934 10935 fallbackEasing: 'swing', 10936 10937 info: false, 10938 10939 nestedItemSelector: false, 10940 itemElement: 'div', 10941 stageElement: 'div', 10942 10943 refreshClass: 'owl-refresh', 10944 loadedClass: 'owl-loaded', 10945 loadingClass: 'owl-loading', 10946 rtlClass: 'owl-rtl', 10947 responsiveClass: 'owl-responsive', 10948 dragClass: 'owl-drag', 10949 itemClass: 'owl-item', 10950 stageClass: 'owl-stage', 10951 stageOuterClass: 'owl-stage-outer', 10952 grabClass: 'owl-grab' 10953 }; 10954 10955 /** 10956 * Enumeration for width. 10957 * @public 10958 * @readonly 10959 * @enum {String} 10960 */ 10961 Owl.Width = { 10962 Default: 'default', 10963 Inner: 'inner', 10964 Outer: 'outer' 10965 }; 10966 10967 /** 10968 * Enumeration for types. 10969 * @public 10970 * @readonly 10971 * @enum {String} 10972 */ 10973 Owl.Type = { 10974 Event: 'event', 10975 State: 'state' 10976 }; 10977 10978 /** 10979 * Contains all registered plugins. 10980 * @public 10981 */ 10982 Owl.Plugins = {}; 10983 10984 /** 10985 * List of workers involved in the update process. 10986 */ 10987 Owl.Workers = [{ 10988 filter: ['width', 'settings'], 10989 run: function () { 10990 this._width = this.$element.width(); 10991 } 10992 }, { 10993 filter: ['width', 'items', 'settings'], 10994 run: function (cache) { 10995 cache.current = this._items && this._items[this.relative(this._current)]; 10996 } 10997 }, { 10998 filter: ['items', 'settings'], 10999 run: function () { 11000 this.$stage.children('.cloned').remove(); 11001 } 11002 }, { 11003 filter: ['width', 'items', 'settings'], 11004 run: function (cache) { 11005 var margin = this.settings.margin || '', 11006 grid = !this.settings.autoWidth, 11007 rtl = this.settings.rtl, 11008 css = { 11009 'width': 'auto', 11010 'margin-left': rtl ? margin : '', 11011 'margin-right': rtl ? '' : margin 11012 }; 11013 11014 !grid && this.$stage.children().css(css); 11015 11016 cache.css = css; 11017 } 11018 }, { 11019 filter: ['width', 'items', 'settings'], 11020 run: function (cache) { 11021 var width = (this.width() / this.settings.items).toFixed(3) - this.settings.margin, 11022 merge = null, 11023 iterator = this._items.length, 11024 grid = !this.settings.autoWidth, 11025 widths = []; 11026 11027 cache.items = { 11028 merge: false, 11029 width: width 11030 }; 11031 11032 while (iterator--) { 11033 merge = this._mergers[iterator]; 11034 merge = this.settings.mergeFit && Math.min(merge, this.settings.items) || merge; 11035 11036 cache.items.merge = merge > 1 || cache.items.merge; 11037 11038 widths[iterator] = !grid ? this._items[iterator].width() : width * merge; 11039 } 11040 11041 this._widths = widths; 11042 } 11043 }, { 11044 filter: ['items', 'settings'], 11045 run: function () { 11046 var clones = [], 11047 items = this._items, 11048 settings = this.settings, 11049 view = Math.max(settings.items * 2, 4), 11050 size = Math.ceil(items.length / 2) * 2, 11051 repeat = settings.loop && items.length ? settings.rewind ? view : Math.max(view, size) : 0, 11052 append = '', 11053 prepend = ''; 11054 11055 repeat /= 2; 11056 11057 while (repeat--) { 11058 clones.push(this.normalize(clones.length / 2, true)); 11059 append = append + items[clones[clones.length - 1]][0].outerHTML; 11060 clones.push(this.normalize(items.length - 1 - (clones.length - 1) / 2, true)); 11061 prepend = items[clones[clones.length - 1]][0].outerHTML + prepend; 11062 } 11063 11064 this._clones = clones; 11065 11066 $(append).addClass('cloned').appendTo(this.$stage); 11067 $(prepend).addClass('cloned').prependTo(this.$stage); 11068 } 11069 }, { 11070 filter: ['width', 'items', 'settings'], 11071 run: function () { 11072 var rtl = this.settings.rtl ? 1 : -1, 11073 size = this._clones.length + this._items.length, 11074 iterator = -1, 11075 previous = 0, 11076 current = 0, 11077 coordinates = []; 11078 11079 while (++iterator < size) { 11080 previous = coordinates[iterator - 1] || 0; 11081 current = this._widths[this.relative(iterator)] + this.settings.margin; 11082 coordinates.push(previous + current * rtl); 11083 } 11084 11085 this._coordinates = coordinates; 11086 } 11087 }, { 11088 filter: ['width', 'items', 'settings'], 11089 run: function () { 11090 var padding = this.settings.stagePadding, 11091 coordinates = this._coordinates, 11092 css = { 11093 'width': Math.ceil(Math.abs(coordinates[coordinates.length - 1])) + padding * 2, 11094 'padding-left': padding || '', 11095 'padding-right': padding || '' 11096 }; 11097 11098 this.$stage.css(css); 11099 } 11100 }, { 11101 filter: ['width', 'items', 'settings'], 11102 run: function (cache) { 11103 var iterator = this._coordinates.length, 11104 grid = !this.settings.autoWidth, 11105 items = this.$stage.children(); 11106 11107 if (grid && cache.items.merge) { 11108 while (iterator--) { 11109 cache.css.width = this._widths[this.relative(iterator)]; 11110 items.eq(iterator).css(cache.css); 11111 } 11112 } else if (grid) { 11113 cache.css.width = cache.items.width; 11114 items.css(cache.css); 11115 } 11116 } 11117 }, { 11118 filter: ['items'], 11119 run: function () { 11120 this._coordinates.length < 1 && this.$stage.removeAttr('style'); 11121 } 11122 }, { 11123 filter: ['width', 'items', 'settings'], 11124 run: function (cache) { 11125 cache.current = cache.current ? this.$stage.children().index(cache.current) : 0; 11126 cache.current = Math.max(this.minimum(), Math.min(this.maximum(), cache.current)); 11127 this.reset(cache.current); 11128 } 11129 }, { 11130 filter: ['position'], 11131 run: function () { 11132 this.animate(this.coordinates(this._current)); 11133 } 11134 }, { 11135 filter: ['width', 'position', 'items', 'settings'], 11136 run: function () { 11137 var rtl = this.settings.rtl ? 1 : -1, 11138 padding = this.settings.stagePadding * 2, 11139 begin = this.coordinates(this.current()) + padding, 11140 end = begin + this.width() * rtl, 11141 inner, 11142 outer, 11143 matches = [], 11144 i, 11145 n; 11146 11147 for (i = 0, n = this._coordinates.length; i < n; i++) { 11148 inner = this._coordinates[i - 1] || 0; 11149 outer = Math.abs(this._coordinates[i]) + padding * rtl; 11150 11151 if (this.op(inner, '<=', begin) && this.op(inner, '>', end) || this.op(outer, '<', begin) && this.op(outer, '>', end)) { 11152 matches.push(i); 11153 } 11154 } 11155 11156 this.$stage.children('.active').removeClass('active'); 11157 this.$stage.children(':eq(' + matches.join('), :eq(') + ')').addClass('active'); 11158 11159 if (this.settings.center) { 11160 this.$stage.children('.center').removeClass('center'); 11161 this.$stage.children().eq(this.current()).addClass('center'); 11162 } 11163 } 11164 }]; 11165 11166 /** 11167 * Initializes the carousel. 11168 * @protected 11169 */ 11170 Owl.prototype.initialize = function () { 11171 this.enter('initializing'); 11172 this.trigger('initialize'); 11173 11174 this.$element.toggleClass(this.settings.rtlClass, this.settings.rtl); 11175 11176 if (this.settings.autoWidth && !this.is('pre-loading')) { 11177 var imgs, nestedSelector, width; 11178 imgs = this.$element.find('img'); 11179 nestedSelector = this.settings.nestedItemSelector ? '.' + this.settings.nestedItemSelector : undefined; 11180 width = this.$element.children(nestedSelector).width(); 11181 11182 if (imgs.length && width <= 0) { 11183 this.preloadAutoWidthImages(imgs); 11184 } 11185 } 11186 11187 this.$element.addClass(this.options.loadingClass); 11188 11189 // create stage 11190 this.$stage = $('<' + this.settings.stageElement + ' class="' + this.settings.stageClass + '"/>').wrap('<div class="' + this.settings.stageOuterClass + '"/>'); 11191 11192 // append stage 11193 this.$element.append(this.$stage.parent()); 11194 11195 // append content 11196 this.replace(this.$element.children().not(this.$stage.parent())); 11197 11198 // check visibility 11199 if (this.$element.is(':visible')) { 11200 // update view 11201 this.refresh(); 11202 } else { 11203 // invalidate width 11204 this.invalidate('width'); 11205 } 11206 11207 this.$element.removeClass(this.options.loadingClass).addClass(this.options.loadedClass); 11208 11209 // register event handlers 11210 this.registerEventHandlers(); 11211 11212 this.leave('initializing'); 11213 this.trigger('initialized'); 11214 }; 11215 11216 /** 11217 * Setups the current settings. 11218 * @todo Remove responsive classes. Why should adaptive designs be brought into IE8? 11219 * @todo Support for media queries by using `matchMedia` would be nice. 11220 * @public 11221 */ 11222 Owl.prototype.setup = function () { 11223 var viewport = this.viewport(), 11224 overwrites = this.options.responsive, 11225 match = -1, 11226 settings = null; 11227 11228 if (!overwrites) { 11229 settings = $.extend({}, this.options); 11230 } else { 11231 $.each(overwrites, function (breakpoint) { 11232 if (breakpoint <= viewport && breakpoint > match) { 11233 match = Number(breakpoint); 11234 } 11235 }); 11236 11237 settings = $.extend({}, this.options, overwrites[match]); 11238 if (typeof settings.stagePadding === 'function') { 11239 settings.stagePadding = settings.stagePadding(); 11240 } 11241 delete settings.responsive; 11242 11243 // responsive class 11244 if (settings.responsiveClass) { 11245 this.$element.attr('class', this.$element.attr('class').replace(new RegExp('(' + this.options.responsiveClass + '-)\\S+\\s', 'g'), '$1' + match)); 11246 } 11247 } 11248 11249 this.trigger('change', { property: { name: 'settings', value: settings } }); 11250 this._breakpoint = match; 11251 this.settings = settings; 11252 this.invalidate('settings'); 11253 this.trigger('changed', { property: { name: 'settings', value: this.settings } }); 11254 }; 11255 11256 /** 11257 * Updates option logic if necessery. 11258 * @protected 11259 */ 11260 Owl.prototype.optionsLogic = function () { 11261 if (this.settings.autoWidth) { 11262 this.settings.stagePadding = false; 11263 this.settings.merge = false; 11264 } 11265 }; 11266 11267 /** 11268 * Prepares an item before add. 11269 * @todo Rename event parameter `content` to `item`. 11270 * @protected 11271 * @returns {jQuery|HTMLElement} - The item container. 11272 */ 11273 Owl.prototype.prepare = function (item) { 11274 var event = this.trigger('prepare', { content: item }); 11275 11276 if (!event.data) { 11277 event.data = $('<' + this.settings.itemElement + '/>').addClass(this.options.itemClass).append(item); 11278 } 11279 11280 this.trigger('prepared', { content: event.data }); 11281 11282 return event.data; 11283 }; 11284 11285 /** 11286 * Updates the view. 11287 * @public 11288 */ 11289 Owl.prototype.update = function () { 11290 var i = 0, 11291 n = this._pipe.length, 11292 filter = $.proxy(function (p) { 11293 return this[p]; 11294 }, this._invalidated), 11295 cache = {}; 11296 11297 while (i < n) { 11298 if (this._invalidated.all || $.grep(this._pipe[i].filter, filter).length > 0) { 11299 this._pipe[i].run(cache); 11300 } 11301 i++; 11302 } 11303 11304 this._invalidated = {}; 11305 11306 !this.is('valid') && this.enter('valid'); 11307 }; 11308 11309 /** 11310 * Gets the width of the view. 11311 * @public 11312 * @param {Owl.Width} [dimension=Owl.Width.Default] - The dimension to return. 11313 * @returns {Number} - The width of the view in pixel. 11314 */ 11315 Owl.prototype.width = function (dimension) { 11316 dimension = dimension || Owl.Width.Default; 11317 switch (dimension) { 11318 case Owl.Width.Inner: 11319 case Owl.Width.Outer: 11320 return this._width; 11321 default: 11322 return this._width - this.settings.stagePadding * 2 + this.settings.margin; 11323 } 11324 }; 11325 11326 /** 11327 * Refreshes the carousel primarily for adaptive purposes. 11328 * @public 11329 */ 11330 Owl.prototype.refresh = function () { 11331 this.enter('refreshing'); 11332 this.trigger('refresh'); 11333 11334 this.setup(); 11335 11336 this.optionsLogic(); 11337 11338 this.$element.addClass(this.options.refreshClass); 11339 11340 this.update(); 11341 11342 this.$element.removeClass(this.options.refreshClass); 11343 11344 this.leave('refreshing'); 11345 this.trigger('refreshed'); 11346 }; 11347 11348 /** 11349 * Checks window `resize` event. 11350 * @protected 11351 */ 11352 Owl.prototype.onThrottledResize = function () { 11353 window.clearTimeout(this.resizeTimer); 11354 this.resizeTimer = window.setTimeout(this._handlers.onResize, this.settings.responsiveRefreshRate); 11355 }; 11356 11357 /** 11358 * Checks window `resize` event. 11359 * @protected 11360 */ 11361 Owl.prototype.onResize = function () { 11362 if (!this._items.length) { 11363 return false; 11364 } 11365 11366 if (this._width === this.$element.width()) { 11367 return false; 11368 } 11369 11370 if (!this.$element.is(':visible')) { 11371 return false; 11372 } 11373 11374 this.enter('resizing'); 11375 11376 if (this.trigger('resize').isDefaultPrevented()) { 11377 this.leave('resizing'); 11378 return false; 11379 } 11380 11381 this.invalidate('width'); 11382 11383 this.refresh(); 11384 11385 this.leave('resizing'); 11386 this.trigger('resized'); 11387 }; 11388 11389 /** 11390 * Registers event handlers. 11391 * @todo Check `msPointerEnabled` 11392 * @todo #261 11393 * @protected 11394 */ 11395 Owl.prototype.registerEventHandlers = function () { 11396 if ($.support.transition) { 11397 this.$stage.on($.support.transition.end + '.owl.core', $.proxy(this.onTransitionEnd, this)); 11398 } 11399 11400 if (this.settings.responsive !== false) { 11401 this.on(window, 'resize', this._handlers.onThrottledResize); 11402 } 11403 11404 if (this.settings.mouseDrag) { 11405 this.$element.addClass(this.options.dragClass); 11406 this.$stage.on('mousedown.owl.core', $.proxy(this.onDragStart, this)); 11407 this.$stage.on('dragstart.owl.core selectstart.owl.core', function () { 11408 return false; 11409 }); 11410 } 11411 11412 if (this.settings.touchDrag) { 11413 this.$stage.on('touchstart.owl.core', $.proxy(this.onDragStart, this)); 11414 this.$stage.on('touchcancel.owl.core', $.proxy(this.onDragEnd, this)); 11415 } 11416 }; 11417 11418 /** 11419 * Handles `touchstart` and `mousedown` events. 11420 * @todo Horizontal swipe threshold as option 11421 * @todo #261 11422 * @protected 11423 * @param {Event} event - The event arguments. 11424 */ 11425 Owl.prototype.onDragStart = function (event) { 11426 var stage = null; 11427 11428 if (event.which === 3) { 11429 return; 11430 } 11431 11432 if ($.support.transform) { 11433 stage = this.$stage.css('transform').replace(/.*\(|\)| /g, '').split(','); 11434 stage = { 11435 x: stage[stage.length === 16 ? 12 : 4], 11436 y: stage[stage.length === 16 ? 13 : 5] 11437 }; 11438 } else { 11439 stage = this.$stage.position(); 11440 stage = { 11441 x: this.settings.rtl ? stage.left + this.$stage.width() - this.width() + this.settings.margin : stage.left, 11442 y: stage.top 11443 }; 11444 } 11445 11446 if (this.is('animating')) { 11447 $.support.transform ? this.animate(stage.x) : this.$stage.stop(); 11448 this.invalidate('position'); 11449 } 11450 11451 this.$element.toggleClass(this.options.grabClass, event.type === 'mousedown'); 11452 11453 this.speed(0); 11454 11455 this._drag.time = new Date().getTime(); 11456 this._drag.target = $(event.target); 11457 this._drag.stage.start = stage; 11458 this._drag.stage.current = stage; 11459 this._drag.pointer = this.pointer(event); 11460 11461 $(document).on('mouseup.owl.core touchend.owl.core', $.proxy(this.onDragEnd, this)); 11462 11463 $(document).one('mousemove.owl.core touchmove.owl.core', $.proxy(function (event) { 11464 var delta = this.difference(this._drag.pointer, this.pointer(event)); 11465 11466 $(document).on('mousemove.owl.core touchmove.owl.core', $.proxy(this.onDragMove, this)); 11467 11468 if (Math.abs(delta.x) < Math.abs(delta.y) && this.is('valid')) { 11469 return; 11470 } 11471 11472 event.preventDefault(); 11473 11474 this.enter('dragging'); 11475 this.trigger('drag'); 11476 }, this)); 11477 }; 11478 11479 /** 11480 * Handles the `touchmove` and `mousemove` events. 11481 * @todo #261 11482 * @protected 11483 * @param {Event} event - The event arguments. 11484 */ 11485 Owl.prototype.onDragMove = function (event) { 11486 var minimum = null, 11487 maximum = null, 11488 pull = null, 11489 delta = this.difference(this._drag.pointer, this.pointer(event)), 11490 stage = this.difference(this._drag.stage.start, delta); 11491 11492 if (!this.is('dragging')) { 11493 return; 11494 } 11495 11496 event.preventDefault(); 11497 11498 if (this.settings.loop) { 11499 minimum = this.coordinates(this.minimum()); 11500 maximum = this.coordinates(this.maximum() + 1) - minimum; 11501 stage.x = ((stage.x - minimum) % maximum + maximum) % maximum + minimum; 11502 } else { 11503 minimum = this.settings.rtl ? this.coordinates(this.maximum()) : this.coordinates(this.minimum()); 11504 maximum = this.settings.rtl ? this.coordinates(this.minimum()) : this.coordinates(this.maximum()); 11505 pull = this.settings.pullDrag ? -1 * delta.x / 5 : 0; 11506 stage.x = Math.max(Math.min(stage.x, minimum + pull), maximum + pull); 11507 } 11508 11509 this._drag.stage.current = stage; 11510 11511 this.animate(stage.x); 11512 }; 11513 11514 /** 11515 * Handles the `touchend` and `mouseup` events. 11516 * @todo #261 11517 * @todo Threshold for click event 11518 * @protected 11519 * @param {Event} event - The event arguments. 11520 */ 11521 Owl.prototype.onDragEnd = function (event) { 11522 var delta = this.difference(this._drag.pointer, this.pointer(event)), 11523 stage = this._drag.stage.current, 11524 direction = delta.x > 0 ^ this.settings.rtl ? 'left' : 'right'; 11525 11526 $(document).off('.owl.core'); 11527 11528 this.$element.removeClass(this.options.grabClass); 11529 11530 if (delta.x !== 0 && this.is('dragging') || !this.is('valid')) { 11531 this.speed(this.settings.dragEndSpeed || this.settings.smartSpeed); 11532 this.current(this.closest(stage.x, delta.x !== 0 ? direction : this._drag.direction)); 11533 this.invalidate('position'); 11534 this.update(); 11535 11536 this._drag.direction = direction; 11537 11538 if (Math.abs(delta.x) > 3 || new Date().getTime() - this._drag.time > 300) { 11539 this._drag.target.one('click.owl.core', function () { 11540 return false; 11541 }); 11542 } 11543 } 11544 11545 if (!this.is('dragging')) { 11546 return; 11547 } 11548 11549 this.leave('dragging'); 11550 this.trigger('dragged'); 11551 }; 11552 11553 /** 11554 * Gets absolute position of the closest item for a coordinate. 11555 * @todo Setting `freeDrag` makes `closest` not reusable. See #165. 11556 * @protected 11557 * @param {Number} coordinate - The coordinate in pixel. 11558 * @param {String} direction - The direction to check for the closest item. Ether `left` or `right`. 11559 * @return {Number} - The absolute position of the closest item. 11560 */ 11561 Owl.prototype.closest = function (coordinate, direction) { 11562 var position = -1, 11563 pull = 30, 11564 width = this.width(), 11565 coordinates = this.coordinates(); 11566 11567 if (!this.settings.freeDrag) { 11568 // check closest item 11569 $.each(coordinates, $.proxy(function (index, value) { 11570 // on a left pull, check on current index 11571 if (direction === 'left' && coordinate > value - pull && coordinate < value + pull) { 11572 position = index; 11573 // on a right pull, check on previous index 11574 // to do so, subtract width from value and set position = index + 1 11575 } else if (direction === 'right' && coordinate > value - width - pull && coordinate < value - width + pull) { 11576 position = index + 1; 11577 } else if (this.op(coordinate, '<', value) && this.op(coordinate, '>', coordinates[index + 1] || value - width)) { 11578 position = direction === 'left' ? index + 1 : index; 11579 } 11580 return position === -1; 11581 }, this)); 11582 } 11583 11584 if (!this.settings.loop) { 11585 // non loop boundries 11586 if (this.op(coordinate, '>', coordinates[this.minimum()])) { 11587 position = coordinate = this.minimum(); 11588 } else if (this.op(coordinate, '<', coordinates[this.maximum()])) { 11589 position = coordinate = this.maximum(); 11590 } 11591 } 11592 11593 return position; 11594 }; 11595 11596 /** 11597 * Animates the stage. 11598 * @todo #270 11599 * @public 11600 * @param {Number} coordinate - The coordinate in pixels. 11601 */ 11602 Owl.prototype.animate = function (coordinate) { 11603 var animate = this.speed() > 0; 11604 11605 this.is('animating') && this.onTransitionEnd(); 11606 11607 if (animate) { 11608 this.enter('animating'); 11609 this.trigger('translate'); 11610 } 11611 11612 if ($.support.transform3d && $.support.transition) { 11613 this.$stage.css({ 11614 transform: 'translate3d(' + coordinate + 'px,0px,0px)', 11615 transition: this.speed() / 1000 + 's' 11616 }); 11617 } else if (animate) { 11618 this.$stage.animate({ 11619 left: coordinate + 'px' 11620 }, this.speed(), this.settings.fallbackEasing, $.proxy(this.onTransitionEnd, this)); 11621 } else { 11622 this.$stage.css({ 11623 left: coordinate + 'px' 11624 }); 11625 } 11626 }; 11627 11628 /** 11629 * Checks whether the carousel is in a specific state or not. 11630 * @param {String} state - The state to check. 11631 * @returns {Boolean} - The flag which indicates if the carousel is busy. 11632 */ 11633 Owl.prototype.is = function (state) { 11634 return this._states.current[state] && this._states.current[state] > 0; 11635 }; 11636 11637 /** 11638 * Sets the absolute position of the current item. 11639 * @public 11640 * @param {Number} [position] - The new absolute position or nothing to leave it unchanged. 11641 * @returns {Number} - The absolute position of the current item. 11642 */ 11643 Owl.prototype.current = function (position) { 11644 if (position === undefined) { 11645 return this._current; 11646 } 11647 11648 if (this._items.length === 0) { 11649 return undefined; 11650 } 11651 11652 position = this.normalize(position); 11653 11654 if (this._current !== position) { 11655 var event = this.trigger('change', { property: { name: 'position', value: position } }); 11656 11657 if (event.data !== undefined) { 11658 position = this.normalize(event.data); 11659 } 11660 11661 this._current = position; 11662 11663 this.invalidate('position'); 11664 11665 this.trigger('changed', { property: { name: 'position', value: this._current } }); 11666 } 11667 11668 return this._current; 11669 }; 11670 11671 /** 11672 * Invalidates the given part of the update routine. 11673 * @param {String} [part] - The part to invalidate. 11674 * @returns {Array.<String>} - The invalidated parts. 11675 */ 11676 Owl.prototype.invalidate = function (part) { 11677 if ($.type(part) === 'string') { 11678 this._invalidated[part] = true; 11679 this.is('valid') && this.leave('valid'); 11680 } 11681 return $.map(this._invalidated, function (v, i) { 11682 return i; 11683 }); 11684 }; 11685 11686 /** 11687 * Resets the absolute position of the current item. 11688 * @public 11689 * @param {Number} position - The absolute position of the new item. 11690 */ 11691 Owl.prototype.reset = function (position) { 11692 position = this.normalize(position); 11693 11694 if (position === undefined) { 11695 return; 11696 } 11697 11698 this._speed = 0; 11699 this._current = position; 11700 11701 this.suppress(['translate', 'translated']); 11702 11703 this.animate(this.coordinates(position)); 11704 11705 this.release(['translate', 'translated']); 11706 }; 11707 11708 /** 11709 * Normalizes an absolute or a relative position of an item. 11710 * @public 11711 * @param {Number} position - The absolute or relative position to normalize. 11712 * @param {Boolean} [relative=false] - Whether the given position is relative or not. 11713 * @returns {Number} - The normalized position. 11714 */ 11715 Owl.prototype.normalize = function (position, relative) { 11716 var n = this._items.length, 11717 m = relative ? 0 : this._clones.length; 11718 11719 if (!this.isNumeric(position) || n < 1) { 11720 position = undefined; 11721 } else if (position < 0 || position >= n + m) { 11722 position = ((position - m / 2) % n + n) % n + m / 2; 11723 } 11724 11725 return position; 11726 }; 11727 11728 /** 11729 * Converts an absolute position of an item into a relative one. 11730 * @public 11731 * @param {Number} position - The absolute position to convert. 11732 * @returns {Number} - The converted position. 11733 */ 11734 Owl.prototype.relative = function (position) { 11735 position -= this._clones.length / 2; 11736 return this.normalize(position, true); 11737 }; 11738 11739 /** 11740 * Gets the maximum position for the current item. 11741 * @public 11742 * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position. 11743 * @returns {Number} 11744 */ 11745 Owl.prototype.maximum = function (relative) { 11746 var settings = this.settings, 11747 maximum = this._coordinates.length, 11748 iterator, 11749 reciprocalItemsWidth, 11750 elementWidth; 11751 11752 if (settings.loop) { 11753 maximum = this._clones.length / 2 + this._items.length - 1; 11754 } else if (settings.autoWidth || settings.merge) { 11755 iterator = this._items.length; 11756 reciprocalItemsWidth = this._items[--iterator].width(); 11757 elementWidth = this.$element.width(); 11758 while (iterator--) { 11759 reciprocalItemsWidth += this._items[iterator].width() + this.settings.margin; 11760 if (reciprocalItemsWidth > elementWidth) { 11761 break; 11762 } 11763 } 11764 maximum = iterator + 1; 11765 } else if (settings.center) { 11766 maximum = this._items.length - 1; 11767 } else { 11768 maximum = this._items.length - settings.items; 11769 } 11770 11771 if (relative) { 11772 maximum -= this._clones.length / 2; 11773 } 11774 11775 return Math.max(maximum, 0); 11776 }; 11777 11778 /** 11779 * Gets the minimum position for the current item. 11780 * @public 11781 * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position. 11782 * @returns {Number} 11783 */ 11784 Owl.prototype.minimum = function (relative) { 11785 return relative ? 0 : this._clones.length / 2; 11786 }; 11787 11788 /** 11789 * Gets an item at the specified relative position. 11790 * @public 11791 * @param {Number} [position] - The relative position of the item. 11792 * @return {jQuery|Array.<jQuery>} - The item at the given position or all items if no position was given. 11793 */ 11794 Owl.prototype.items = function (position) { 11795 if (position === undefined) { 11796 return this._items.slice(); 11797 } 11798 11799 position = this.normalize(position, true); 11800 return this._items[position]; 11801 }; 11802 11803 /** 11804 * Gets an item at the specified relative position. 11805 * @public 11806 * @param {Number} [position] - The relative position of the item. 11807 * @return {jQuery|Array.<jQuery>} - The item at the given position or all items if no position was given. 11808 */ 11809 Owl.prototype.mergers = function (position) { 11810 if (position === undefined) { 11811 return this._mergers.slice(); 11812 } 11813 11814 position = this.normalize(position, true); 11815 return this._mergers[position]; 11816 }; 11817 11818 /** 11819 * Gets the absolute positions of clones for an item. 11820 * @public 11821 * @param {Number} [position] - The relative position of the item. 11822 * @returns {Array.<Number>} - The absolute positions of clones for the item or all if no position was given. 11823 */ 11824 Owl.prototype.clones = function (position) { 11825 var odd = this._clones.length / 2, 11826 even = odd + this._items.length, 11827 map = function (index) { 11828 return index % 2 === 0 ? even + index / 2 : odd - (index + 1) / 2; 11829 }; 11830 11831 if (position === undefined) { 11832 return $.map(this._clones, function (v, i) { 11833 return map(i); 11834 }); 11835 } 11836 11837 return $.map(this._clones, function (v, i) { 11838 return v === position ? map(i) : null; 11839 }); 11840 }; 11841 11842 /** 11843 * Sets the current animation speed. 11844 * @public 11845 * @param {Number} [speed] - The animation speed in milliseconds or nothing to leave it unchanged. 11846 * @returns {Number} - The current animation speed in milliseconds. 11847 */ 11848 Owl.prototype.speed = function (speed) { 11849 if (speed !== undefined) { 11850 this._speed = speed; 11851 } 11852 11853 return this._speed; 11854 }; 11855 11856 /** 11857 * Gets the coordinate of an item. 11858 * @todo The name of this method is missleanding. 11859 * @public 11860 * @param {Number} position - The absolute position of the item within `minimum()` and `maximum()`. 11861 * @returns {Number|Array.<Number>} - The coordinate of the item in pixel or all coordinates. 11862 */ 11863 Owl.prototype.coordinates = function (position) { 11864 var multiplier = 1, 11865 newPosition = position - 1, 11866 coordinate; 11867 11868 if (position === undefined) { 11869 return $.map(this._coordinates, $.proxy(function (coordinate, index) { 11870 return this.coordinates(index); 11871 }, this)); 11872 } 11873 11874 if (this.settings.center) { 11875 if (this.settings.rtl) { 11876 multiplier = -1; 11877 newPosition = position + 1; 11878 } 11879 11880 coordinate = this._coordinates[position]; 11881 coordinate += (this.width() - coordinate + (this._coordinates[newPosition] || 0)) / 2 * multiplier; 11882 } else { 11883 coordinate = this._coordinates[newPosition] || 0; 11884 } 11885 11886 coordinate = Math.ceil(coordinate); 11887 11888 return coordinate; 11889 }; 11890 11891 /** 11892 * Calculates the speed for a translation. 11893 * @protected 11894 * @param {Number} from - The absolute position of the start item. 11895 * @param {Number} to - The absolute position of the target item. 11896 * @param {Number} [factor=undefined] - The time factor in milliseconds. 11897 * @returns {Number} - The time in milliseconds for the translation. 11898 */ 11899 Owl.prototype.duration = function (from, to, factor) { 11900 if (factor === 0) { 11901 return 0; 11902 } 11903 11904 return Math.min(Math.max(Math.abs(to - from), 1), 6) * Math.abs(factor || this.settings.smartSpeed); 11905 }; 11906 11907 /** 11908 * Slides to the specified item. 11909 * @public 11910 * @param {Number} position - The position of the item. 11911 * @param {Number} [speed] - The time in milliseconds for the transition. 11912 */ 11913 Owl.prototype.to = function (position, speed) { 11914 var current = this.current(), 11915 revert = null, 11916 distance = position - this.relative(current), 11917 direction = (distance > 0) - (distance < 0), 11918 items = this._items.length, 11919 minimum = this.minimum(), 11920 maximum = this.maximum(); 11921 11922 if (this.settings.loop) { 11923 if (!this.settings.rewind && Math.abs(distance) > items / 2) { 11924 distance += direction * -1 * items; 11925 } 11926 11927 position = current + distance; 11928 revert = ((position - minimum) % items + items) % items + minimum; 11929 11930 if (revert !== position && revert - distance <= maximum && revert - distance > 0) { 11931 current = revert - distance; 11932 position = revert; 11933 this.reset(current); 11934 } 11935 } else if (this.settings.rewind) { 11936 maximum += 1; 11937 position = (position % maximum + maximum) % maximum; 11938 } else { 11939 position = Math.max(minimum, Math.min(maximum, position)); 11940 } 11941 11942 this.speed(this.duration(current, position, speed)); 11943 this.current(position); 11944 11945 if (this.$element.is(':visible')) { 11946 this.update(); 11947 } 11948 }; 11949 11950 /** 11951 * Slides to the next item. 11952 * @public 11953 * @param {Number} [speed] - The time in milliseconds for the transition. 11954 */ 11955 Owl.prototype.next = function (speed) { 11956 speed = speed || false; 11957 this.to(this.relative(this.current()) + 1, speed); 11958 }; 11959 11960 /** 11961 * Slides to the previous item. 11962 * @public 11963 * @param {Number} [speed] - The time in milliseconds for the transition. 11964 */ 11965 Owl.prototype.prev = function (speed) { 11966 speed = speed || false; 11967 this.to(this.relative(this.current()) - 1, speed); 11968 }; 11969 11970 /** 11971 * Handles the end of an animation. 11972 * @protected 11973 * @param {Event} event - The event arguments. 11974 */ 11975 Owl.prototype.onTransitionEnd = function (event) { 11976 11977 // if css2 animation then event object is undefined 11978 if (event !== undefined) { 11979 event.stopPropagation(); 11980 11981 // Catch only owl-stage transitionEnd event 11982 if ((event.target || event.srcElement || event.originalTarget) !== this.$stage.get(0)) { 11983 return false;
vendor: 11,744 bytes, lines 11984-12370
11984 } 11985 } 11986 11987 this.leave('animating'); 11988 this.trigger('translated'); 11989 }; 11990 11991 /** 11992 * Gets viewport width. 11993 * @protected 11994 * @return {Number} - The width in pixel. 11995 */ 11996 Owl.prototype.viewport = function () { 11997 var width; 11998 if (this.options.responsiveBaseElement !== window) { 11999 width = $(this.options.responsiveBaseElement).width(); 12000 } else if (window.innerWidth) { 12001 width = window.innerWidth; 12002 } else if (document.documentElement && document.documentElement.clientWidth) { 12003 width = document.documentElement.clientWidth; 12004 } else { 12005 throw 'Can not detect viewport width.'; 12006 } 12007 return width; 12008 }; 12009 12010 /** 12011 * Replaces the current content. 12012 * @public 12013 * @param {HTMLElement|jQuery|String} content - The new content. 12014 */ 12015 Owl.prototype.replace = function (content) { 12016 this.$stage.empty(); 12017 this._items = []; 12018 12019 if (content) { 12020 content = content instanceof jQuery ? content : $(content); 12021 } 12022 12023 if (this.settings.nestedItemSelector) { 12024 content = content.find('.' + this.settings.nestedItemSelector); 12025 } 12026 12027 content.filter(function () { 12028 return this.nodeType === 1; 12029 }).each($.proxy(function (index, item) { 12030 item = this.prepare(item); 12031 this.$stage.append(item); 12032 this._items.push(item); 12033 this._mergers.push(item.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1); 12034 }, this)); 12035 12036 this.reset(this.isNumeric(this.settings.startPosition) ? this.settings.startPosition : 0); 12037 12038 this.invalidate('items'); 12039 }; 12040 12041 /** 12042 * Adds an item. 12043 * @todo Use `item` instead of `content` for the event arguments. 12044 * @public 12045 * @param {HTMLElement|jQuery|String} content - The item content to add. 12046 * @param {Number} [position] - The relative position at which to insert the item otherwise the item will be added to the end. 12047 */ 12048 Owl.prototype.add = function (content, position) { 12049 var current = this.relative(this._current); 12050 12051 position = position === undefined ? this._items.length : this.normalize(position, true); 12052 content = content instanceof jQuery ? content : $(content); 12053 12054 this.trigger('add', { content: content, position: position }); 12055 12056 content = this.prepare(content); 12057 12058 if (this._items.length === 0 || position === this._items.length) { 12059 this._items.length === 0 && this.$stage.append(content); 12060 this._items.length !== 0 && this._items[position - 1].after(content); 12061 this._items.push(content); 12062 this._mergers.push(content.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1); 12063 } else { 12064 this._items[position].before(content); 12065 this._items.splice(position, 0, content); 12066 this._mergers.splice(position, 0, content.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1); 12067 } 12068 12069 this._items[current] && this.reset(this._items[current].index()); 12070 12071 this.invalidate('items'); 12072 12073 this.trigger('added', { content: content, position: position }); 12074 }; 12075 12076 /** 12077 * Removes an item by its position. 12078 * @todo Use `item` instead of `content` for the event arguments. 12079 * @public 12080 * @param {Number} position - The relative position of the item to remove. 12081 */ 12082 Owl.prototype.remove = function (position) { 12083 position = this.normalize(position, true); 12084 12085 if (position === undefined) { 12086 return; 12087 } 12088 12089 this.trigger('remove', { content: this._items[position], position: position }); 12090 12091 this._items[position].remove(); 12092 this._items.splice(position, 1); 12093 this._mergers.splice(position, 1); 12094 12095 this.invalidate('items'); 12096 12097 this.trigger('removed', { content: null, position: position }); 12098 }; 12099 12100 /** 12101 * Preloads images with auto width. 12102 * @todo Replace by a more generic approach 12103 * @protected 12104 */ 12105 Owl.prototype.preloadAutoWidthImages = function (images) { 12106 images.each($.proxy(function (i, element) { 12107 this.enter('pre-loading'); 12108 element = $(element); 12109 $(new Image()).one('load', $.proxy(function (e) { 12110 element.attr('src', e.target.src); 12111 element.css('opacity', 1); 12112 this.leave('pre-loading'); 12113 !this.is('pre-loading') && !this.is('initializing') && this.refresh(); 12114 }, this)).attr('src', element.attr('src') || element.attr('data-src') || element.attr('data-src-retina')); 12115 }, this)); 12116 }; 12117 12118 /** 12119 * Destroys the carousel. 12120 * @public 12121 */ 12122 Owl.prototype.destroy = function () { 12123 12124 this.$element.off('.owl.core'); 12125 this.$stage.off('.owl.core'); 12126 $(document).off('.owl.core'); 12127 12128 if (this.settings.responsive !== false) { 12129 window.clearTimeout(this.resizeTimer); 12130 this.off(window, 'resize', this._handlers.onThrottledResize); 12131 } 12132 12133 for (var i in this._plugins) { 12134 this._plugins[i].destroy(); 12135 } 12136 12137 this.$stage.children('.cloned').remove(); 12138 12139 this.$stage.unwrap(); 12140 this.$stage.children().contents().unwrap(); 12141 this.$stage.children().unwrap(); 12142 12143 this.$element.removeClass(this.options.refreshClass).removeClass(this.options.loadingClass).removeClass(this.options.loadedClass).removeClass(this.options.rtlClass).removeClass(this.options.dragClass).removeClass(this.options.grabClass).attr('class', this.$element.attr('class').replace(new RegExp(this.options.responsiveClass + '-\\S+\\s', 'g'), '')).removeData('owl.carousel'); 12144 }; 12145 12146 /** 12147 * Operators to calculate right-to-left and left-to-right. 12148 * @protected 12149 * @param {Number} [a] - The left side operand. 12150 * @param {String} [o] - The operator. 12151 * @param {Number} [b] - The right side operand. 12152 */ 12153 Owl.prototype.op = function (a, o, b) { 12154 var rtl = this.settings.rtl; 12155 switch (o) { 12156 case '<': 12157 return rtl ? a > b : a < b; 12158 case '>': 12159 return rtl ? a < b : a > b; 12160 case '>=': 12161 return rtl ? a <= b : a >= b; 12162 case '<=': 12163 return rtl ? a >= b : a <= b; 12164 default: 12165 break; 12166 } 12167 }; 12168 12169 /** 12170 * Attaches to an internal event. 12171 * @protected 12172 * @param {HTMLElement} element - The event source. 12173 * @param {String} event - The event name. 12174 * @param {Function} listener - The event handler to attach. 12175 * @param {Boolean} capture - Wether the event should be handled at the capturing phase or not. 12176 */ 12177 Owl.prototype.on = function (element, event, listener, capture) { 12178 if (element.addEventListener) { 12179 element.addEventListener(event, listener, capture); 12180 } else if (element.attachEvent) { 12181 element.attachEvent('on' + event, listener); 12182 } 12183 }; 12184 12185 /** 12186 * Detaches from an internal event. 12187 * @protected 12188 * @param {HTMLElement} element - The event source. 12189 * @param {String} event - The event name. 12190 * @param {Function} listener - The attached event handler to detach. 12191 * @param {Boolean} capture - Wether the attached event handler was registered as a capturing listener or not. 12192 */ 12193 Owl.prototype.off = function (element, event, listener, capture) { 12194 if (element.removeEventListener) { 12195 element.removeEventListener(event, listener, capture); 12196 } else if (element.detachEvent) { 12197 element.detachEvent('on' + event, listener); 12198 } 12199 }; 12200 12201 /** 12202 * Triggers a public event. 12203 * @todo Remove `status`, `relatedTarget` should be used instead. 12204 * @protected 12205 * @param {String} name - The event name. 12206 * @param {*} [data=null] - The event data. 12207 * @param {String} [namespace=carousel] - The event namespace. 12208 * @param {String} [state] - The state which is associated with the event. 12209 * @param {Boolean} [enter=false] - Indicates if the call enters the specified state or not. 12210 * @returns {Event} - The event arguments. 12211 */ 12212 Owl.prototype.trigger = function (name, data, namespace, state, enter) { 12213 var status = { 12214 item: { count: this._items.length, index: this.current() } 12215 }, 12216 handler = $.camelCase($.grep(['on', name, namespace], function (v) { 12217 return v; 12218 }).join('-').toLowerCase()), 12219 event = $.Event([name, 'owl', namespace || 'carousel'].join('.').toLowerCase(), $.extend({ relatedTarget: this }, status, data)); 12220 12221 if (!this._supress[name]) { 12222 $.each(this._plugins, function (name, plugin) { 12223 if (plugin.onTrigger) { 12224 plugin.onTrigger(event); 12225 } 12226 }); 12227 12228 this.register({ type: Owl.Type.Event, name: name }); 12229 this.$element.trigger(event); 12230 12231 if (this.settings && typeof this.settings[handler] === 'function') { 12232 this.settings[handler].call(this, event); 12233 } 12234 } 12235 12236 return event; 12237 }; 12238 12239 /** 12240 * Enters a state. 12241 * @param name - The state name. 12242 */ 12243 Owl.prototype.enter = function (name) { 12244 $.each([name].concat(this._states.tags[name] || []), $.proxy(function (i, name) { 12245 if (this._states.current[name] === undefined) { 12246 this._states.current[name] = 0; 12247 } 12248 12249 this._states.current[name]++; 12250 }, this)); 12251 }; 12252 12253 /** 12254 * Leaves a state. 12255 * @param name - The state name. 12256 */ 12257 Owl.prototype.leave = function (name) { 12258 $.each([name].concat(this._states.tags[name] || []), $.proxy(function (i, name) { 12259 this._states.current[name]--; 12260 }, this)); 12261 }; 12262 12263 /** 12264 * Registers an event or state. 12265 * @public 12266 * @param {Object} object - The event or state to register. 12267 */ 12268 Owl.prototype.register = function (object) { 12269 if (object.type === Owl.Type.Event) { 12270 if (!$.event.special[object.name]) { 12271 $.event.special[object.name] = {}; 12272 } 12273 12274 if (!$.event.special[object.name].owl) { 12275 var _default = $.event.special[object.name]._default; 12276 $.event.special[object.name]._default = function (e) { 12277 if (_default && _default.apply && (!e.namespace || e.namespace.indexOf('owl') === -1)) { 12278 return _default.apply(this, arguments); 12279 } 12280 return e.namespace && e.namespace.indexOf('owl') > -1; 12281 }; 12282 $.event.special[object.name].owl = true; 12283 } 12284 } else if (object.type === Owl.Type.State) { 12285 if (!this._states.tags[object.name]) { 12286 this._states.tags[object.name] = object.tags; 12287 } else { 12288 this._states.tags[object.name] = this._states.tags[object.name].concat(object.tags); 12289 } 12290 12291 this._states.tags[object.name] = $.grep(this._states.tags[object.name], $.proxy(function (tag, i) { 12292 return $.inArray(tag, this._states.tags[object.name]) === i; 12293 }, this)); 12294 } 12295 }; 12296 12297 /** 12298 * Suppresses events. 12299 * @protected 12300 * @param {Array.<String>} events - The events to suppress. 12301 */ 12302 Owl.prototype.suppress = function (events) { 12303 $.each(events, $.proxy(function (index, event) { 12304 this._supress[event] = true; 12305 }, this)); 12306 }; 12307 12308 /** 12309 * Releases suppressed events. 12310 * @protected 12311 * @param {Array.<String>} events - The events to release. 12312 */ 12313 Owl.prototype.release = function (events) { 12314 $.each(events, $.proxy(function (index, event) { 12315 delete this._supress[event]; 12316 }, this)); 12317 }; 12318 12319 /** 12320 * Gets unified pointer coordinates from event. 12321 * @todo #261 12322 * @protected 12323 * @param {Event} - The `mousedown` or `touchstart` event. 12324 * @returns {Object} - Contains `x` and `y` coordinates of current pointer position. 12325 */ 12326 Owl.prototype.pointer = function (event) { 12327 var result = { x: null, y: null }; 12328 12329 event = event.originalEvent || event || window.event; 12330 12331 event = event.touches && event.touches.length ? event.touches[0] : event.changedTouches && event.changedTouches.length ? event.changedTouches[0] : event; 12332 12333 if (event.pageX) { 12334 result.x = event.pageX; 12335 result.y = event.pageY; 12336 } else { 12337 result.x = event.clientX; 12338 result.y = event.clientY; 12339 } 12340 12341 return result; 12342 }; 12343 12344 /** 12345 * Determines if the input is a Number or something that can be coerced to a Number 12346 * @protected 12347 * @param {Number|String|Object|Array|Boolean|RegExp|Function|Symbol} - The input to be tested 12348 * @returns {Boolean} - An indication if the input is a Number or can be coerced to a Number 12349 */ 12350 Owl.prototype.isNumeric = function (number) { 12351 return !isNaN(parseFloat(number)); 12352 }; 12353 12354 /** 12355 * Gets the difference of two vectors. 12356 * @todo #261 12357 * @protected 12358 * @param {Object} - The first vector. 12359 * @param {Object} - The second vector. 12360 * @returns {Object} - The difference. 12361 */ 12362 Owl.prototype.difference = function (first, second) { 12363 return { 12364 x: first.x - second.x, 12365 y: first.y - second.y 12366 }; 12367 }; 12368 12369 /** 12370 * The jQuery Plugin for the Owl Carousel
vendor: 34,247 bytes, lines 12371-13666
12371 * @todo Navigation plugin `next` and `prev` 12372 * @public 12373 */ 12374 $.fn.owlCarousel = function (option) { 12375 var args = Array.prototype.slice.call(arguments, 1); 12376 12377 return this.each(function () { 12378 var $this = $(this), 12379 data = $this.data('owl.carousel'); 12380 12381 if (!data) { 12382 data = new Owl(this, typeof option == 'object' && option); 12383 $this.data('owl.carousel', data); 12384 12385 $.each(['next', 'prev', 'to', 'destroy', 'refresh', 'replace', 'add', 'remove'], function (i, event) { 12386 data.register({ type: Owl.Type.Event, name: event }); 12387 data.$element.on(event + '.owl.carousel.core', $.proxy(function (e) { 12388 if (e.namespace && e.relatedTarget !== this) { 12389 this.suppress([event]); 12390 data[event].apply(this, [].slice.call(arguments, 1)); 12391 this.release([event]); 12392 } 12393 }, data)); 12394 }); 12395 } 12396 12397 if (typeof option == 'string' && option.charAt(0) !== '_') { 12398 data[option].apply(data, args); 12399 } 12400 }); 12401 }; 12402 12403 /** 12404 * The constructor for the jQuery Plugin 12405 * @public 12406 */ 12407 $.fn.owlCarousel.Constructor = Owl; 12408})(window.Zepto || __webpack_provided_window_dot_jQuery, window, document); 12409 12410/** 12411 * AutoRefresh Plugin 12412 * @version 2.1.0 12413 * @author Artus Kolanowski 12414 * @author David Deutsch 12415 * @license The MIT License (MIT) 12416 */ 12417;(function ($, window, document, undefined) { 12418 12419 /** 12420 * Creates the auto refresh plugin. 12421 * @class The Auto Refresh Plugin 12422 * @param {Owl} carousel - The Owl Carousel 12423 */ 12424 var AutoRefresh = function (carousel) { 12425 /** 12426 * Reference to the core. 12427 * @protected 12428 * @type {Owl} 12429 */ 12430 this._core = carousel; 12431 12432 /** 12433 * Refresh interval. 12434 * @protected 12435 * @type {number} 12436 */ 12437 this._interval = null; 12438 12439 /** 12440 * Whether the element is currently visible or not. 12441 * @protected 12442 * @type {Boolean} 12443 */ 12444 this._visible = null; 12445 12446 /** 12447 * All event handlers. 12448 * @protected 12449 * @type {Object} 12450 */ 12451 this._handlers = { 12452 'initialized.owl.carousel': $.proxy(function (e) { 12453 if (e.namespace && this._core.settings.autoRefresh) { 12454 this.watch(); 12455 } 12456 }, this) 12457 }; 12458 12459 // set default options 12460 this._core.options = $.extend({}, AutoRefresh.Defaults, this._core.options); 12461 12462 // register event handlers 12463 this._core.$element.on(this._handlers); 12464 }; 12465 12466 /** 12467 * Default options. 12468 * @public 12469 */ 12470 AutoRefresh.Defaults = { 12471 autoRefresh: true, 12472 autoRefreshInterval: 500 12473 }; 12474 12475 /** 12476 * Watches the element. 12477 */ 12478 AutoRefresh.prototype.watch = function () { 12479 if (this._interval) { 12480 return; 12481 } 12482 12483 this._visible = this._core.$element.is(':visible'); 12484 this._interval = window.setInterval($.proxy(this.refresh, this), this._core.settings.autoRefreshInterval); 12485 }; 12486 12487 /** 12488 * Refreshes the element. 12489 */ 12490 AutoRefresh.prototype.refresh = function () { 12491 if (this._core.$element.is(':visible') === this._visible) { 12492 return; 12493 } 12494 12495 this._visible = !this._visible; 12496 12497 this._core.$element.toggleClass('owl-hidden', !this._visible); 12498 12499 this._visible && this._core.invalidate('width') && this._core.refresh(); 12500 }; 12501 12502 /** 12503 * Destroys the plugin. 12504 */ 12505 AutoRefresh.prototype.destroy = function () { 12506 var handler, property; 12507 12508 window.clearInterval(this._interval); 12509 12510 for (handler in this._handlers) { 12511 this._core.$element.off(handler, this._handlers[handler]); 12512 } 12513 for (property in Object.getOwnPropertyNames(this)) { 12514 typeof this[property] != 'function' && (this[property] = null); 12515 } 12516 }; 12517 12518 $.fn.owlCarousel.Constructor.Plugins.AutoRefresh = AutoRefresh; 12519})(window.Zepto || __webpack_provided_window_dot_jQuery, window, document); 12520 12521/** 12522 * Lazy Plugin 12523 * @version 2.1.0 12524 * @author Bartosz Wojciechowski 12525 * @author David Deutsch 12526 * @license The MIT License (MIT) 12527 */ 12528;(function ($, window, document, undefined) { 12529 12530 /** 12531 * Creates the lazy plugin. 12532 * @class The Lazy Plugin 12533 * @param {Owl} carousel - The Owl Carousel 12534 */ 12535 var Lazy = function (carousel) { 12536 12537 /** 12538 * Reference to the core. 12539 * @protected 12540 * @type {Owl} 12541 */ 12542 this._core = carousel; 12543 12544 /** 12545 * Already loaded items. 12546 * @protected 12547 * @type {Array.<jQuery>} 12548 */ 12549 this._loaded = []; 12550 12551 /** 12552 * Event handlers. 12553 * @protected 12554 * @type {Object} 12555 */ 12556 this._handlers = { 12557 'initialized.owl.carousel change.owl.carousel resized.owl.carousel': $.proxy(function (e) { 12558 if (!e.namespace) { 12559 return; 12560 } 12561 12562 if (!this._core.settings || !this._core.settings.lazyLoad) { 12563 return; 12564 } 12565 12566 if (e.property && e.property.name == 'position' || e.type == 'initialized') { 12567 var settings = this._core.settings, 12568 n = settings.center && Math.ceil(settings.items / 2) || settings.items, 12569 i = settings.center && n * -1 || 0, 12570 position = (e.property && e.property.value !== undefined ? e.property.value : this._core.current()) + i, 12571 clones = this._core.clones().length, 12572 load = $.proxy(function (i, v) { 12573 this.load(v); 12574 }, this); 12575 12576 while (i++ < n) { 12577 this.load(clones / 2 + this._core.relative(position)); 12578 clones && $.each(this._core.clones(this._core.relative(position)), load); 12579 position++; 12580 } 12581 } 12582 }, this) 12583 }; 12584 12585 // set the default options 12586 this._core.options = $.extend({}, Lazy.Defaults, this._core.options); 12587 12588 // register event handler 12589 this._core.$element.on(this._handlers); 12590 }; 12591 12592 /** 12593 * Default options. 12594 * @public 12595 */ 12596 Lazy.Defaults = { 12597 lazyLoad: false 12598 }; 12599 12600 /** 12601 * Loads all resources of an item at the specified position. 12602 * @param {Number} position - The absolute position of the item. 12603 * @protected 12604 */ 12605 Lazy.prototype.load = function (position) { 12606 var $item = this._core.$stage.children().eq(position), 12607 $elements = $item && $item.find('.owl-lazy'); 12608 12609 if (!$elements || $.inArray($item.get(0), this._loaded) > -1) { 12610 return; 12611 } 12612 12613 $elements.each($.proxy(function (index, element) { 12614 var $element = $(element), 12615 image, 12616 url = window.devicePixelRatio > 1 && $element.attr('data-src-retina') || $element.attr('data-src'); 12617 12618 this._core.trigger('load', { element: $element, url: url }, 'lazy'); 12619 12620 if ($element.is('img')) { 12621 $element.one('load.owl.lazy', $.proxy(function () { 12622 $element.css('opacity', 1); 12623 this._core.trigger('loaded', { element: $element, url: url }, 'lazy'); 12624 }, this)).attr('src', url); 12625 } else { 12626 image = new Image(); 12627 image.onload = $.proxy(function () { 12628 $element.css({ 12629 'background-image': 'url(' + url + ')', 12630 'opacity': '1' 12631 }); 12632 this._core.trigger('loaded', { element: $element, url: url }, 'lazy'); 12633 }, this); 12634 image.src = url; 12635 } 12636 }, this)); 12637 12638 this._loaded.push($item.get(0)); 12639 }; 12640 12641 /** 12642 * Destroys the plugin. 12643 * @public 12644 */ 12645 Lazy.prototype.destroy = function () { 12646 var handler, property; 12647 12648 for (handler in this.handlers) { 12649 this._core.$element.off(handler, this.handlers[handler]); 12650 } 12651 for (property in Object.getOwnPropertyNames(this)) { 12652 typeof this[property] != 'function' && (this[property] = null); 12653 } 12654 }; 12655 12656 $.fn.owlCarousel.Constructor.Plugins.Lazy = Lazy; 12657})(window.Zepto || __webpack_provided_window_dot_jQuery, window, document); 12658 12659/** 12660 * AutoHeight Plugin 12661 * @version 2.1.0 12662 * @author Bartosz Wojciechowski 12663 * @author David Deutsch 12664 * @license The MIT License (MIT) 12665 */ 12666;(function ($, window, document, undefined) { 12667 12668 /** 12669 * Creates the auto height plugin. 12670 * @class The Auto Height Plugin 12671 * @param {Owl} carousel - The Owl Carousel 12672 */ 12673 var AutoHeight = function (carousel) { 12674 /** 12675 * Reference to the core. 12676 * @protected 12677 * @type {Owl} 12678 */ 12679 this._core = carousel; 12680 12681 /** 12682 * All event handlers. 12683 * @protected 12684 * @type {Object} 12685 */ 12686 this._handlers = { 12687 'initialized.owl.carousel refreshed.owl.carousel': $.proxy(function (e) { 12688 if (e.namespace && this._core.settings.autoHeight) { 12689 this.update(); 12690 } 12691 }, this), 12692 'changed.owl.carousel': $.proxy(function (e) { 12693 if (e.namespace && this._core.settings.autoHeight && e.property.name == 'position') { 12694 this.update(); 12695 } 12696 }, this), 12697 'loaded.owl.lazy': $.proxy(function (e) { 12698 if (e.namespace && this._core.settings.autoHeight && e.element.closest('.' + this._core.settings.itemClass).index() === this._core.current()) { 12699 this.update(); 12700 } 12701 }, this) 12702 }; 12703 12704 // set default options 12705 this._core.options = $.extend({}, AutoHeight.Defaults, this._core.options); 12706 12707 // register event handlers 12708 this._core.$element.on(this._handlers); 12709 }; 12710 12711 /** 12712 * Default options. 12713 * @public 12714 */ 12715 AutoHeight.Defaults = { 12716 autoHeight: false, 12717 autoHeightClass: 'owl-height' 12718 }; 12719 12720 /** 12721 * Updates the view. 12722 */ 12723 AutoHeight.prototype.update = function () { 12724 var start = this._core._current, 12725 end = start + this._core.settings.items, 12726 visible = this._core.$stage.children().toArray().slice(start, end), 12727 heights = [], 12728 maxheight = 0; 12729 12730 $.each(visible, function (index, item) { 12731 heights.push($(item).height()); 12732 }); 12733 12734 maxheight = Math.max.apply(null, heights); 12735 12736 this._core.$stage.parent().height(maxheight).addClass(this._core.settings.autoHeightClass); 12737 }; 12738 12739 AutoHeight.prototype.destroy = function () { 12740 var handler, property; 12741 12742 for (handler in this._handlers) { 12743 this._core.$element.off(handler, this._handlers[handler]); 12744 } 12745 for (property in Object.getOwnPropertyNames(this)) { 12746 typeof this[property] != 'function' && (this[property] = null); 12747 } 12748 }; 12749 12750 $.fn.owlCarousel.Constructor.Plugins.AutoHeight = AutoHeight; 12751})(window.Zepto || __webpack_provided_window_dot_jQuery, window, document); 12752 12753/** 12754 * Video Plugin 12755 * @version 2.1.0 12756 * @author Bartosz Wojciechowski 12757 * @author David Deutsch 12758 * @license The MIT License (MIT) 12759 */ 12760;(function ($, window, document, undefined) { 12761 12762 /** 12763 * Creates the video plugin. 12764 * @class The Video Plugin 12765 * @param {Owl} carousel - The Owl Carousel 12766 */ 12767 var Video = function (carousel) { 12768 /** 12769 * Reference to the core. 12770 * @protected 12771 * @type {Owl} 12772 */ 12773 this._core = carousel; 12774 12775 /** 12776 * Cache all video URLs. 12777 * @protected 12778 * @type {Object} 12779 */ 12780 this._videos = {}; 12781 12782 /** 12783 * Current playing item. 12784 * @protected 12785 * @type {jQuery} 12786 */ 12787 this._playing = null; 12788 12789 /** 12790 * All event handlers. 12791 * @todo The cloned content removale is too late 12792 * @protected 12793 * @type {Object} 12794 */ 12795 this._handlers = { 12796 'initialized.owl.carousel': $.proxy(function (e) { 12797 if (e.namespace) { 12798 this._core.register({ type: 'state', name: 'playing', tags: ['interacting'] }); 12799 } 12800 }, this), 12801 'resize.owl.carousel': $.proxy(function (e) { 12802 if (e.namespace && this._core.settings.video && this.isInFullScreen()) { 12803 e.preventDefault(); 12804 } 12805 }, this), 12806 'refreshed.owl.carousel': $.proxy(function (e) { 12807 if (e.namespace && this._core.is('resizing')) { 12808 this._core.$stage.find('.cloned .owl-video-frame').remove(); 12809 } 12810 }, this), 12811 'changed.owl.carousel': $.proxy(function (e) { 12812 if (e.namespace && e.property.name === 'position' && this._playing) { 12813 this.stop(); 12814 } 12815 }, this), 12816 'prepared.owl.carousel': $.proxy(function (e) { 12817 if (!e.namespace) { 12818 return; 12819 } 12820 12821 var $element = $(e.content).find('.owl-video'); 12822 12823 if ($element.length) { 12824 $element.css('display', 'none'); 12825 this.fetch($element, $(e.content)); 12826 } 12827 }, this) 12828 }; 12829 12830 // set default options 12831 this._core.options = $.extend({}, Video.Defaults, this._core.options); 12832 12833 // register event handlers 12834 this._core.$element.on(this._handlers); 12835 12836 this._core.$element.on('click.owl.video', '.owl-video-play-icon', $.proxy(function (e) { 12837 this.play(e); 12838 }, this)); 12839 }; 12840 12841 /** 12842 * Default options. 12843 * @public 12844 */ 12845 Video.Defaults = { 12846 video: false, 12847 videoHeight: false, 12848 videoWidth: false 12849 }; 12850 12851 /** 12852 * Gets the video ID and the type (YouTube/Vimeo/vzaar only). 12853 * @protected 12854 * @param {jQuery} target - The target containing the video data. 12855 * @param {jQuery} item - The item containing the video. 12856 */ 12857 Video.prototype.fetch = function (target, item) { 12858 var type = function () { 12859 if (target.attr('data-vimeo-id')) { 12860 return 'vimeo'; 12861 } else if (target.attr('data-vzaar-id')) { 12862 return 'vzaar'; 12863 } else { 12864 return 'youtube'; 12865 } 12866 }(), 12867 id = target.attr('data-vimeo-id') || target.attr('data-youtube-id') || target.attr('data-vzaar-id'), 12868 width = target.attr('data-width') || this._core.settings.videoWidth, 12869 height = target.attr('data-height') || this._core.settings.videoHeight, 12870 url = target.attr('href'); 12871 12872 if (url) { 12873 12874 /* 12875 Parses the id's out of the following urls (and probably more): 12876 https://www.youtube.com/watch?v=:id 12877 https://youtu.be/:id 12878 https://vimeo.com/:id 12879 https://vimeo.com/channels/:channel/:id 12880 https://vimeo.com/groups/:group/videos/:id 12881 https://app.vzaar.com/videos/:id 12882 Visual example: https://regexper.com/#(http%3A%7Chttps%3A%7C)%5C%2F%5C%2F(player.%7Cwww.%7Capp.)%3F(vimeo%5C.com%7Cyoutu(be%5C.com%7C%5C.be%7Cbe%5C.googleapis%5C.com)%7Cvzaar%5C.com)%5C%2F(video%5C%2F%7Cvideos%5C%2F%7Cembed%5C%2F%7Cchannels%5C%2F.%2B%5C%2F%7Cgroups%5C%2F.%2B%5C%2F%7Cwatch%5C%3Fv%3D%7Cv%5C%2F)%3F(%5BA-Za-z0-9._%25-%5D*)(%5C%26%5CS%2B)%3F 12883 */ 12884 12885 id = url.match(/(http:|https:|)\/\/(player.|www.|app.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com)|vzaar\.com)\/(video\/|videos\/|embed\/|channels\/.+\/|groups\/.+\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/); 12886 12887 if (id[3].indexOf('youtu') > -1) { 12888 type = 'youtube'; 12889 } else if (id[3].indexOf('vimeo') > -1) { 12890 type = 'vimeo'; 12891 } else if (id[3].indexOf('vzaar') > -1) { 12892 type = 'vzaar'; 12893 } else { 12894 throw new Error('Video URL not supported.'); 12895 } 12896 id = id[6]; 12897 } else { 12898 throw new Error('Missing video URL.'); 12899 } 12900 12901 this._videos[url] = { 12902 type: type, 12903 id: id, 12904 width: width, 12905 height: height 12906 }; 12907 12908 item.attr('data-video', url); 12909 12910 this.thumbnail(target, this._videos[url]); 12911 }; 12912 12913 /** 12914 * Creates video thumbnail. 12915 * @protected 12916 * @param {jQuery} target - The target containing the video data. 12917 * @param {Object} info - The video info object. 12918 * @see `fetch` 12919 */ 12920 Video.prototype.thumbnail = function (target, video) { 12921 var tnLink, 12922 icon, 12923 path, 12924 dimensions = video.width && video.height ? 'style="width:' + video.width + 'px;height:' + video.height + 'px;"' : '', 12925 customTn = target.find('img'), 12926 srcType = 'src', 12927 lazyClass = '', 12928 settings = this._core.settings, 12929 create = function (path) { 12930 icon = '<div class="owl-video-play-icon"></div>'; 12931 12932 if (settings.lazyLoad) { 12933 tnLink = '<div class="owl-video-tn ' + lazyClass + '" ' + srcType + '="' + path + '"></div>'; 12934 } else { 12935 tnLink = '<div class="owl-video-tn" style="opacity:1;background-image:url(' + path + ')"></div>'; 12936 } 12937 target.after(tnLink); 12938 target.after(icon); 12939 }; 12940 12941 // wrap video content into owl-video-wrapper div 12942 target.wrap('<div class="owl-video-wrapper"' + dimensions + '></div>'); 12943 12944 if (this._core.settings.lazyLoad) { 12945 srcType = 'data-src'; 12946 lazyClass = 'owl-lazy'; 12947 } 12948 12949 // custom thumbnail 12950 if (customTn.length) { 12951 create(customTn.attr(srcType)); 12952 customTn.remove(); 12953 return false; 12954 } 12955 12956 if (video.type === 'youtube') { 12957 path = "//img.youtube.com/vi/" + video.id + "/hqdefault.jpg"; 12958 create(path); 12959 } else if (video.type === 'vimeo') { 12960 $.ajax({ 12961 type: 'GET', 12962 url: '//vimeo.com/api/v2/video/' + video.id + '.json', 12963 jsonp: 'callback', 12964 dataType: 'jsonp', 12965 success: function (data) { 12966 path = data[0].thumbnail_large; 12967 create(path); 12968 } 12969 }); 12970 } else if (video.type === 'vzaar') { 12971 $.ajax({ 12972 type: 'GET', 12973 url: '//vzaar.com/api/videos/' + video.id + '.json', 12974 jsonp: 'callback', 12975 dataType: 'jsonp', 12976 success: function (data) { 12977 path = data.framegrab_url; 12978 create(path); 12979 } 12980 }); 12981 } 12982 }; 12983 12984 /** 12985 * Stops the current video. 12986 * @public 12987 */ 12988 Video.prototype.stop = function () { 12989 this._core.trigger('stop', null, 'video'); 12990 this._playing.find('.owl-video-frame').remove(); 12991 this._playing.removeClass('owl-video-playing'); 12992 this._playing = null; 12993 this._core.leave('playing'); 12994 this._core.trigger('stopped', null, 'video'); 12995 }; 12996 12997 /** 12998 * Starts the current video. 12999 * @public 13000 * @param {Event} event - The event arguments. 13001 */ 13002 Video.prototype.play = function (event) { 13003 var target = $(event.target), 13004 item = target.closest('.' + this._core.settings.itemClass), 13005 video = this._videos[item.attr('data-video')], 13006 width = video.width || '100%', 13007 height = video.height || this._core.$stage.height(), 13008 html; 13009 13010 if (this._playing) { 13011 return; 13012 } 13013 13014 this._core.enter('playing'); 13015 this._core.trigger('play', null, 'video'); 13016 13017 item = this._core.items(this._core.relative(item.index())); 13018 13019 this._core.reset(item.index()); 13020 13021 if (video.type === 'youtube') { 13022 html = '<iframe width="' + width + '" height="' + height + '" src="//www.youtube.com/embed/' + video.id + '?autoplay=1&v=' + video.id + '" frameborder="0" allowfullscreen></iframe>'; 13023 } else if (video.type === 'vimeo') { 13024 html = '<iframe src="//player.vimeo.com/video/' + video.id + '?autoplay=1" width="' + width + '" height="' + height + '" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>'; 13025 } else if (video.type === 'vzaar') { 13026 html = '<iframe frameborder="0"' + 'height="' + height + '"' + 'width="' + width + '" allowfullscreen mozallowfullscreen webkitAllowFullScreen ' + 'src="//view.vzaar.com/' + video.id + '/player?autoplay=true"></iframe>'; 13027 } 13028 13029 $('<div class="owl-video-frame">' + html + '</div>').insertAfter(item.find('.owl-video')); 13030 13031 this._playing = item.addClass('owl-video-playing'); 13032 }; 13033 13034 /** 13035 * Checks whether an video is currently in full screen mode or not. 13036 * @todo Bad style because looks like a readonly method but changes members. 13037 * @protected 13038 * @returns {Boolean} 13039 */ 13040 Video.prototype.isInFullScreen = function () { 13041 var element = document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement; 13042 13043 return element && $(element).parent().hasClass('owl-video-frame'); 13044 }; 13045 13046 /** 13047 * Destroys the plugin. 13048 */ 13049 Video.prototype.destroy = function () { 13050 var handler, property; 13051 13052 this._core.$element.off('click.owl.video'); 13053 13054 for (handler in this._handlers) { 13055 this._core.$element.off(handler, this._handlers[handler]); 13056 } 13057 for (property in Object.getOwnPropertyNames(this)) { 13058 typeof this[property] != 'function' && (this[property] = null); 13059 } 13060 }; 13061 13062 $.fn.owlCarousel.Constructor.Plugins.Video = Video; 13063})(window.Zepto || __webpack_provided_window_dot_jQuery, window, document); 13064 13065/** 13066 * Animate Plugin 13067 * @version 2.1.0 13068 * @author Bartosz Wojciechowski 13069 * @author David Deutsch 13070 * @license The MIT License (MIT) 13071 */ 13072;(function ($, window, document, undefined) { 13073 13074 /** 13075 * Creates the animate plugin. 13076 * @class The Navigation Plugin 13077 * @param {Owl} scope - The Owl Carousel 13078 */ 13079 var Animate = function (scope) { 13080 this.core = scope; 13081 this.core.options = $.extend({}, Animate.Defaults, this.core.options); 13082 this.swapping = true; 13083 this.previous = undefined; 13084 this.next = undefined; 13085 13086 this.handlers = { 13087 'change.owl.carousel': $.proxy(function (e) { 13088 if (e.namespace && e.property.name == 'position') { 13089 this.previous = this.core.current(); 13090 this.next = e.property.value; 13091 } 13092 }, this), 13093 'drag.owl.carousel dragged.owl.carousel translated.owl.carousel': $.proxy(function (e) { 13094 if (e.namespace) { 13095 this.swapping = e.type == 'translated'; 13096 } 13097 }, this), 13098 'translate.owl.carousel': $.proxy(function (e) { 13099 if (e.namespace && this.swapping && (this.core.options.animateOut || this.core.options.animateIn)) { 13100 this.swap(); 13101 } 13102 }, this) 13103 }; 13104 13105 this.core.$element.on(this.handlers); 13106 }; 13107 13108 /** 13109 * Default options. 13110 * @public 13111 */ 13112 Animate.Defaults = { 13113 animateOut: false, 13114 animateIn: false 13115 }; 13116 13117 /** 13118 * Toggles the animation classes whenever an translations starts. 13119 * @protected 13120 * @returns {Boolean|undefined} 13121 */ 13122 Animate.prototype.swap = function () { 13123 13124 if (this.core.settings.items !== 1) { 13125 return; 13126 } 13127 13128 if (!$.support.animation || !$.support.transition) { 13129 return; 13130 } 13131 13132 this.core.speed(0); 13133 13134 var left, 13135 clear = $.proxy(this.clear, this), 13136 previous = this.core.$stage.children().eq(this.previous), 13137 next = this.core.$stage.children().eq(this.next), 13138 incoming = this.core.settings.animateIn, 13139 outgoing = this.core.settings.animateOut; 13140 13141 if (this.core.current() === this.previous) { 13142 return; 13143 } 13144 13145 if (outgoing) { 13146 left = this.core.coordinates(this.previous) - this.core.coordinates(this.next); 13147 previous.one($.support.animation.end, clear).css({ 'left': left + 'px' }).addClass('animated owl-animated-out').addClass(outgoing); 13148 } 13149 13150 if (incoming) { 13151 next.one($.support.animation.end, clear).addClass('animated owl-animated-in').addClass(incoming); 13152 } 13153 }; 13154 13155 Animate.prototype.clear = function (e) { 13156 $(e.target).css({ 'left': '' }).removeClass('animated owl-animated-out owl-animated-in').removeClass(this.core.settings.animateIn).removeClass(this.core.settings.animateOut); 13157 this.core.onTransitionEnd(); 13158 }; 13159 13160 /** 13161 * Destroys the plugin. 13162 * @public 13163 */ 13164 Animate.prototype.destroy = function () { 13165 var handler, property; 13166 13167 for (handler in this.handlers) { 13168 this.core.$element.off(handler, this.handlers[handler]); 13169 } 13170 for (property in Object.getOwnPropertyNames(this)) { 13171 typeof this[property] != 'function' && (this[property] = null); 13172 } 13173 }; 13174 13175 $.fn.owlCarousel.Constructor.Plugins.Animate = Animate; 13176})(window.Zepto || __webpack_provided_window_dot_jQuery, window, document); 13177 13178/** 13179 * Autoplay Plugin 13180 * @version 2.1.0 13181 * @author Bartosz Wojciechowski 13182 * @author Artus Kolanowski 13183 * @author David Deutsch 13184 * @license The MIT License (MIT) 13185 */ 13186;(function ($, window, document, undefined) { 13187 13188 /** 13189 * Creates the autoplay plugin. 13190 * @class The Autoplay Plugin 13191 * @param {Owl} scope - The Owl Carousel 13192 */ 13193 var Autoplay = function (carousel) { 13194 /** 13195 * Reference to the core. 13196 * @protected 13197 * @type {Owl} 13198 */ 13199 this._core = carousel; 13200 13201 /** 13202 * The autoplay timeout. 13203 * @type {Timeout} 13204 */ 13205 this._timeout = null; 13206 13207 /** 13208 * Indicates whenever the autoplay is paused. 13209 * @type {Boolean} 13210 */ 13211 this._paused = false; 13212 13213 /** 13214 * All event handlers. 13215 * @protected 13216 * @type {Object} 13217 */ 13218 this._handlers = { 13219 'changed.owl.carousel': $.proxy(function (e) { 13220 if (e.namespace && e.property.name === 'settings') { 13221 if (this._core.settings.autoplay) { 13222 this.play(); 13223 } else { 13224 this.stop(); 13225 } 13226 } else if (e.namespace && e.property.name === 'position') { 13227 //console.log('play?', e); 13228 if (this._core.settings.autoplay) { 13229 this._setAutoPlayInterval(); 13230 } 13231 } 13232 }, this), 13233 'initialized.owl.carousel': $.proxy(function (e) { 13234 if (e.namespace && this._core.settings.autoplay) { 13235 this.play(); 13236 } 13237 }, this), 13238 'play.owl.autoplay': $.proxy(function (e, t, s) { 13239 if (e.namespace) { 13240 this.play(t, s); 13241 } 13242 }, this), 13243 'stop.owl.autoplay': $.proxy(function (e) { 13244 if (e.namespace) { 13245 this.stop(); 13246 } 13247 }, this), 13248 'mouseover.owl.autoplay': $.proxy(function () { 13249 if (this._core.settings.autoplayHoverPause && this._core.is('rotating')) { 13250 this.pause(); 13251 } 13252 }, this), 13253 'mouseleave.owl.autoplay': $.proxy(function () { 13254 if (this._core.settings.autoplayHoverPause && this._core.is('rotating')) { 13255 this.play(); 13256 } 13257 }, this), 13258 'touchstart.owl.core': $.proxy(function () { 13259 if (this._core.settings.autoplayHoverPause && this._core.is('rotating')) { 13260 this.pause(); 13261 } 13262 }, this), 13263 'touchend.owl.core': $.proxy(function () { 13264 if (this._core.settings.autoplayHoverPause) { 13265 this.play(); 13266 } 13267 }, this) 13268 }; 13269 13270 // register event handlers 13271 this._core.$element.on(this._handlers); 13272 13273 // set default options 13274 this._core.options = $.extend({}, Autoplay.Defaults, this._core.options); 13275 }; 13276 13277 /** 13278 * Default options. 13279 * @public 13280 */ 13281 Autoplay.Defaults = { 13282 autoplay: false, 13283 autoplayTimeout: 5000, 13284 autoplayHoverPause: false, 13285 autoplaySpeed: false 13286 }; 13287 13288 /** 13289 * Starts the autoplay. 13290 * @public 13291 * @param {Number} [timeout] - The interval before the next animation starts. 13292 * @param {Number} [speed] - The animation speed for the animations. 13293 */ 13294 Autoplay.prototype.play = function (timeout, speed) { 13295 this._paused = false; 13296 13297 if (this._core.is('rotating')) { 13298 return; 13299 } 13300 13301 this._core.enter('rotating'); 13302 13303 this._setAutoPlayInterval(); 13304 }; 13305 13306 /** 13307 * Gets a new timeout 13308 * @private 13309 * @param {Number} [timeout] - The interval before the next animation starts. 13310 * @param {Number} [speed] - The animation speed for the animations. 13311 * @return {Timeout} 13312 */ 13313 Autoplay.prototype._getNextTimeout = function (timeout, speed) { 13314 if (this._timeout) { 13315 window.clearTimeout(this._timeout); 13316 } 13317 return window.setTimeout($.proxy(function () { 13318 if (this._paused || this._core.is('busy') || this._core.is('interacting') || document.hidden) { 13319 return; 13320 } 13321 this._core.next(speed || this._core.settings.autoplaySpeed); 13322 }, this), timeout || this._core.settings.autoplayTimeout); 13323 }; 13324 13325 /** 13326 * Sets autoplay in motion. 13327 * @private 13328 */ 13329 Autoplay.prototype._setAutoPlayInterval = function () { 13330 this._timeout = this._getNextTimeout(); 13331 }; 13332 13333 /** 13334 * Stops the autoplay. 13335 * @public 13336 */ 13337 Autoplay.prototype.stop = function () { 13338 if (!this._core.is('rotating')) { 13339 return; 13340 } 13341 13342 window.clearTimeout(this._timeout); 13343 this._core.leave('rotating'); 13344 }; 13345 13346 /** 13347 * Stops the autoplay. 13348 * @public 13349 */ 13350 Autoplay.prototype.pause = function () { 13351 if (!this._core.is('rotating')) { 13352 return; 13353 } 13354 13355 this._paused = true; 13356 }; 13357 13358 /** 13359 * Destroys the plugin. 13360 */ 13361 Autoplay.prototype.destroy = function () { 13362 var handler, property; 13363 13364 this.stop(); 13365 13366 for (handler in this._handlers) { 13367 this._core.$element.off(handler, this._handlers[handler]); 13368 } 13369 for (property in Object.getOwnPropertyNames(this)) { 13370 typeof this[property] != 'function' && (this[property] = null); 13371 } 13372 }; 13373 13374 $.fn.owlCarousel.Constructor.Plugins.autoplay = Autoplay; 13375})(window.Zepto || __webpack_provided_window_dot_jQuery, window, document); 13376 13377/** 13378 * Navigation Plugin 13379 * @version 2.1.0 13380 * @author Artus Kolanowski 13381 * @author David Deutsch 13382 * @license The MIT License (MIT) 13383 */ 13384;(function ($, window, document, undefined) { 13385 'use strict'; 13386 13387 /** 13388 * Creates the navigation plugin. 13389 * @class The Navigation Plugin 13390 * @param {Owl} carousel - The Owl Carousel. 13391 */ 13392 13393 var Navigation = function (carousel) { 13394 /** 13395 * Reference to the core. 13396 * @protected 13397 * @type {Owl} 13398 */ 13399 this._core = carousel; 13400 13401 /** 13402 * Indicates whether the plugin is initialized or not. 13403 * @protected 13404 * @type {Boolean} 13405 */ 13406 this._initialized = false; 13407 13408 /** 13409 * The current paging indexes. 13410 * @protected 13411 * @type {Array} 13412 */ 13413 this._pages = []; 13414 13415 /** 13416 * All DOM elements of the user interface. 13417 * @protected 13418 * @type {Object} 13419 */ 13420 this._controls = {}; 13421 13422 /** 13423 * Markup for an indicator. 13424 * @protected 13425 * @type {Array.<String>} 13426 */ 13427 this._templates = []; 13428 13429 /** 13430 * The carousel element. 13431 * @type {jQuery} 13432 */ 13433 this.$element = this._core.$element; 13434 13435 /** 13436 * Overridden methods of the carousel. 13437 * @protected 13438 * @type {Object} 13439 */ 13440 this._overrides = { 13441 next: this._core.next, 13442 prev: this._core.prev, 13443 to: this._core.to 13444 }; 13445 13446 /** 13447 * All event handlers. 13448 * @protected 13449 * @type {Object} 13450 */ 13451 this._handlers = { 13452 'prepared.owl.carousel': $.proxy(function (e) { 13453 if (e.namespace && this._core.settings.dotsData) { 13454 this._templates.push('<div class="' + this._core.settings.dotClass + '">' + $(e.content).find('[data-dot]').addBack('[data-dot]').attr('data-dot') + '</div>'); 13455 } 13456 }, this), 13457 'added.owl.carousel': $.proxy(function (e) { 13458 if (e.namespace && this._core.settings.dotsData) { 13459 this._templates.splice(e.position, 0, this._templates.pop()); 13460 } 13461 }, this), 13462 'remove.owl.carousel': $.proxy(function (e) { 13463 if (e.namespace && this._core.settings.dotsData) { 13464 this._templates.splice(e.position, 1); 13465 } 13466 }, this), 13467 'changed.owl.carousel': $.proxy(function (e) { 13468 if (e.namespace && e.property.name == 'position') { 13469 this.draw(); 13470 } 13471 }, this), 13472 'initialized.owl.carousel': $.proxy(function (e) { 13473 if (e.namespace && !this._initialized) { 13474 this._core.trigger('initialize', null, 'navigation'); 13475 this.initialize(); 13476 this.update(); 13477 this.draw(); 13478 this._initialized = true; 13479 this._core.trigger('initialized', null, 'navigation'); 13480 } 13481 }, this), 13482 'refreshed.owl.carousel': $.proxy(function (e) { 13483 if (e.namespace && this._initialized) { 13484 this._core.trigger('refresh', null, 'navigation'); 13485 this.update(); 13486 this.draw(); 13487 this._core.trigger('refreshed', null, 'navigation'); 13488 } 13489 }, this) 13490 }; 13491 13492 // set default options 13493 this._core.options = $.extend({}, Navigation.Defaults, this._core.options); 13494 13495 // register event handlers 13496 this.$element.on(this._handlers); 13497 }; 13498 13499 /** 13500 * Default options. 13501 * @public 13502 * @todo Rename `slideBy` to `navBy` 13503 */ 13504 Navigation.Defaults = { 13505 nav: false, 13506 navText: ['<i class="icon-arrow-left"></i>', '<i class="icon-arrow-right"></i>'], 13507 navSpeed: false, 13508 navElement: 'div', 13509 navContainer: false, 13510 navContainerClass: 'owl-nav', 13511 navClass: ['owl-prev', 'owl-next'], 13512 slideBy: 1, 13513 dotClass: 'owl-dot', 13514 dotsClass: 'owl-dots', 13515 dots: true, 13516 dotsEach: false, 13517 dotsData: false, 13518 dotsSpeed: false, 13519 dotsContainer: false 13520 }; 13521 13522 /** 13523 * Initializes the layout of the plugin and extends the carousel. 13524 * @protected 13525 */ 13526 Navigation.prototype.initialize = function () { 13527 var override, 13528 settings = this._core.settings; 13529 13530 // create DOM structure for relative navigation 13531 this._controls.$relative = (settings.navContainer ? $(settings.navContainer) : $('<div>').addClass(settings.navContainerClass).appendTo(this.$element)).addClass('disabled'); 13532 13533 this._controls.$previous = $('<' + settings.navElement + '>').addClass(settings.navClass[0]).html(settings.navText[0]).prependTo(this._controls.$relative).on('click', $.proxy(function (e) { 13534 this.prev(settings.navSpeed); 13535 }, this)); 13536 this._controls.$next = $('<' + settings.navElement + '>').addClass(settings.navClass[1]).html(settings.navText[1]).appendTo(this._controls.$relative).on('click', $.proxy(function (e) { 13537 this.next(settings.navSpeed); 13538 }, this)); 13539 13540 // create DOM structure for absolute navigation 13541 if (!settings.dotsData) { 13542 this._templates = [$('<div>').addClass(settings.dotClass).append($('<span>')).prop('outerHTML')]; 13543 } 13544 13545 this._controls.$absolute = (settings.dotsContainer ? $(settings.dotsContainer) : $('<div>').addClass(settings.dotsClass).appendTo(this.$element)).addClass('disabled'); 13546 13547 this._controls.$absolute.on('click', 'div', $.proxy(function (e) { 13548 var index = $(e.target).parent().is(this._controls.$absolute) ? $(e.target).index() : $(e.target).parent().index(); 13549 13550 e.preventDefault(); 13551 13552 this.to(index, settings.dotsSpeed); 13553 }, this)); 13554 13555 // override public methods of the carousel 13556 for (override in this._overrides) { 13557 this._core[override] = $.proxy(this[override], this); 13558 } 13559 }; 13560 13561 /** 13562 * Destroys the plugin. 13563 * @protected 13564 */ 13565 Navigation.prototype.destroy = function () { 13566 var handler, control, property, override; 13567 13568 for (handler in this._handlers) { 13569 this.$element.off(handler, this._handlers[handler]); 13570 } 13571 for (control in this._controls) { 13572 this._controls[control].remove(); 13573 } 13574 for (override in this.overides) { 13575 this._core[override] = this._overrides[override]; 13576 } 13577 for (property in Object.getOwnPropertyNames(this)) { 13578 typeof this[property] != 'function' && (this[property] = null); 13579 } 13580 }; 13581 13582 /** 13583 * Updates the internal state. 13584 * @protected 13585 */ 13586 Navigation.prototype.update = function () { 13587 var i, 13588 j, 13589 k, 13590 lower = this._core.clones().length / 2, 13591 upper = lower + this._core.items().length, 13592 maximum = this._core.maximum(true), 13593 settings = this._core.settings, 13594 size = settings.center || settings.autoWidth || settings.dotsData ? 1 : settings.dotsEach || settings.items; 13595 13596 if (settings.slideBy !== 'page') { 13597 settings.slideBy = Math.min(settings.slideBy, settings.items); 13598 } 13599 13600 if (settings.dots || settings.slideBy == 'page') { 13601 this._pages = []; 13602 13603 for (i = lower, j = 0, k = 0; i < upper; i++) { 13604 if (j >= size || j === 0) { 13605 this._pages.push({ 13606 start: Math.min(maximum, i - lower), 13607 end: i - lower + size - 1 13608 }); 13609 if (Math.min(maximum, i - lower) === maximum) { 13610 break; 13611 } 13612 j = 0, ++k; 13613 } 13614 j += this._core.mergers(this._core.relative(i)); 13615 } 13616 } 13617 }; 13618 13619 /** 13620 * Draws the user interface. 13621 * @todo The option `dotsData` wont work. 13622 * @protected 13623 */ 13624 Navigation.prototype.draw = function () { 13625 var difference, 13626 settings = this._core.settings, 13627 disabled = this._core.items().length <= settings.items, 13628 index = this._core.relative(this._core.current()), 13629 loop = settings.loop || settings.rewind; 13630 13631 this._controls.$relative.toggleClass('disabled', !settings.nav || disabled); 13632 13633 if (settings.nav) { 13634 this._controls.$previous.toggleClass('disabled', !loop && index <= this._core.minimum(true)); 13635 this._controls.$next.toggleClass('disabled', !loop && index >= this._core.maximum(true)); 13636 } 13637 13638 this._controls.$absolute.toggleClass('disabled', !settings.dots || disabled); 13639 13640 if (settings.dots) { 13641 difference = this._pages.length - this._controls.$absolute.children().length; 13642 13643 if (settings.dotsData && difference !== 0) { 13644 this._controls.$absolute.html(this._templates.join('')); 13645 } else if (difference > 0) { 13646 this._controls.$absolute.append(new Array(difference + 1).join(this._templates[0])); 13647 } else if (difference < 0) { 13648 this._controls.$absolute.children().slice(difference).remove(); 13649 } 13650 13651 this._controls.$absolute.find('.active').removeClass('active'); 13652 this._controls.$absolute.children().eq($.inArray(this.current(), this._pages)).addClass('active'); 13653 } 13654 }; 13655 13656 /** 13657 * Extends event data. 13658 * @protected 13659 * @param {Event} event - The event object which gets thrown. 13660 */ 13661 Navigation.prototype.onTrigger = function (event) { 13662 var settings = this._core.settings; 13663 13664 event.page = { 13665 index: $.inArray(this.current(), this._pages), 13666 count: this._pages.length,
vendor: 6,644 bytes, lines 13667-13922
13667 size: settings && (settings.center || settings.autoWidth || settings.dotsData ? 1 : settings.dotsEach || settings.items) 13668 }; 13669 }; 13670 13671 /** 13672 * Gets the current page position of the carousel. 13673 * @protected 13674 * @returns {Number} 13675 */ 13676 Navigation.prototype.current = function () { 13677 var current = this._core.relative(this._core.current()); 13678 return $.grep(this._pages, $.proxy(function (page, index) { 13679 return page.start <= current && page.end >= current; 13680 }, this)).pop(); 13681 }; 13682 13683 /** 13684 * Gets the current succesor/predecessor position. 13685 * @protected 13686 * @returns {Number} 13687 */ 13688 Navigation.prototype.getPosition = function (successor) { 13689 var position, 13690 length, 13691 settings = this._core.settings; 13692 13693 if (settings.slideBy == 'page') { 13694 position = $.inArray(this.current(), this._pages); 13695 length = this._pages.length; 13696 successor ? ++position : --position; 13697 position = this._pages[(position % length + length) % length].start; 13698 } else { 13699 position = this._core.relative(this._core.current()); 13700 length = this._core.items().length; 13701 successor ? position += settings.slideBy : position -= settings.slideBy; 13702 } 13703 13704 return position; 13705 }; 13706 13707 /** 13708 * Slides to the next item or page. 13709 * @public 13710 * @param {Number} [speed=false] - The time in milliseconds for the transition. 13711 */ 13712 Navigation.prototype.next = function (speed) { 13713 $.proxy(this._overrides.to, this._core)(this.getPosition(true), speed); 13714 }; 13715 13716 /** 13717 * Slides to the previous item or page. 13718 * @public 13719 * @param {Number} [speed=false] - The time in milliseconds for the transition. 13720 */ 13721 Navigation.prototype.prev = function (speed) { 13722 $.proxy(this._overrides.to, this._core)(this.getPosition(false), speed); 13723 }; 13724 13725 /** 13726 * Slides to the specified item or page. 13727 * @public 13728 * @param {Number} position - The position of the item or page. 13729 * @param {Number} [speed] - The time in milliseconds for the transition. 13730 * @param {Boolean} [standard=false] - Whether to use the standard behaviour or not. 13731 */ 13732 Navigation.prototype.to = function (position, speed, standard) { 13733 var length; 13734 13735 if (!standard && this._pages.length) { 13736 length = this._pages.length; 13737 $.proxy(this._overrides.to, this._core)(this._pages[(position % length + length) % length].start, speed); 13738 } else { 13739 $.proxy(this._overrides.to, this._core)(position, speed); 13740 } 13741 }; 13742 13743 $.fn.owlCarousel.Constructor.Plugins.Navigation = Navigation; 13744})(window.Zepto || __webpack_provided_window_dot_jQuery, window, document); 13745 13746/** 13747 * Hash Plugin 13748 * @version 2.1.0 13749 * @author Artus Kolanowski 13750 * @author David Deutsch 13751 * @license The MIT License (MIT) 13752 */ 13753;(function ($, window, document, undefined) { 13754 'use strict'; 13755 13756 /** 13757 * Creates the hash plugin. 13758 * @class The Hash Plugin 13759 * @param {Owl} carousel - The Owl Carousel 13760 */ 13761 13762 var Hash = function (carousel) { 13763 /** 13764 * Reference to the core. 13765 * @protected 13766 * @type {Owl} 13767 */ 13768 this._core = carousel; 13769 13770 /** 13771 * Hash index for the items. 13772 * @protected 13773 * @type {Object} 13774 */ 13775 this._hashes = {}; 13776 13777 /** 13778 * The carousel element. 13779 * @type {jQuery} 13780 */ 13781 this.$element = this._core.$element; 13782 13783 /** 13784 * All event handlers. 13785 * @protected 13786 * @type {Object} 13787 */ 13788 this._handlers = { 13789 'initialized.owl.carousel': $.proxy(function (e) { 13790 if (e.namespace && this._core.settings.startPosition === 'URLHash') { 13791 $(window).trigger('hashchange.owl.navigation'); 13792 } 13793 }, this), 13794 'prepared.owl.carousel': $.proxy(function (e) { 13795 if (e.namespace) { 13796 var hash = $(e.content).find('[data-hash]').addBack('[data-hash]').attr('data-hash'); 13797 13798 if (!hash) { 13799 return; 13800 } 13801 13802 this._hashes[hash] = e.content; 13803 } 13804 }, this), 13805 'changed.owl.carousel': $.proxy(function (e) { 13806 if (e.namespace && e.property.name === 'position') { 13807 var current = this._core.items(this._core.relative(this._core.current())), 13808 hash = $.map(this._hashes, function (item, hash) { 13809 return item === current ? hash : null; 13810 }).join(); 13811 13812 if (!hash || window.location.hash.slice(1) === hash) { 13813 return; 13814 } 13815 13816 window.location.hash = hash; 13817 } 13818 }, this) 13819 }; 13820 13821 // set default options 13822 this._core.options = $.extend({}, Hash.Defaults, this._core.options); 13823 13824 // register the event handlers 13825 this.$element.on(this._handlers); 13826 13827 // register event listener for hash navigation 13828 $(window).on('hashchange.owl.navigation', $.proxy(function (e) { 13829 var hash = window.location.hash.substring(1), 13830 items = this._core.$stage.children(), 13831 position = this._hashes[hash] && items.index(this._hashes[hash]); 13832 13833 if (position === undefined || position === this._core.current()) { 13834 return; 13835 } 13836 13837 this._core.to(this._core.relative(position), false, true); 13838 }, this)); 13839 }; 13840 13841 /** 13842 * Default options. 13843 * @public 13844 */ 13845 Hash.Defaults = { 13846 URLhashListener: false 13847 }; 13848 13849 /** 13850 * Destroys the plugin. 13851 * @public 13852 */ 13853 Hash.prototype.destroy = function () { 13854 var handler, property; 13855 13856 $(window).off('hashchange.owl.navigation'); 13857 13858 for (handler in this._handlers) { 13859 this._core.$element.off(handler, this._handlers[handler]); 13860 } 13861 for (property in Object.getOwnPropertyNames(this)) { 13862 typeof this[property] != 'function' && (this[property] = null); 13863 } 13864 }; 13865 13866 $.fn.owlCarousel.Constructor.Plugins.Hash = Hash; 13867})(window.Zepto || __webpack_provided_window_dot_jQuery, window, document); 13868 13869/** 13870 * Support Plugin 13871 * 13872 * @version 2.1.0 13873 * @author Vivid Planet Software GmbH 13874 * @author Artus Kolanowski 13875 * @author David Deutsch 13876 * @license The MIT License (MIT) 13877 */ 13878;(function ($, window, document, undefined) { 13879 13880 var style = $('<support>').get(0).style, 13881 prefixes = 'Webkit Moz O ms'.split(' '), 13882 events = { 13883 transition: { 13884 end: { 13885 WebkitTransition: 'webkitTransitionEnd', 13886 MozTransition: 'transitionend', 13887 OTransition: 'oTransitionEnd', 13888 transition: 'transitionend' 13889 } 13890 }, 13891 animation: { 13892 end: { 13893 WebkitAnimation: 'webkitAnimationEnd', 13894 MozAnimation: 'animationend', 13895 OAnimation: 'oAnimationEnd', 13896 animation: 'animationend' 13897 } 13898 } 13899 }, 13900 tests = { 13901 csstransforms: function () { 13902 return !!test('transform'); 13903 }, 13904 csstransforms3d: function () { 13905 return !!test('perspective'); 13906 }, 13907 csstransitions: function () { 13908 return !!test('transition'); 13909 }, 13910 cssanimations: function () { 13911 return !!test('animation'); 13912 } 13913 }; 13914 13915 function test(property, prefixed) { 13916 var result = false, 13917 upper = property.charAt(0).toUpperCase() + property.slice(1); 13918 13919 $.each((property + ' ' + prefixes.join(upper + ' ') + upper).split(' '), function (i, property) { 13920 if (style[property] !== undefined) { 13921 result = prefixed ? property : true; 13922 return false;
13923 } 13924 }); 13925 13926 return result; 13927 } 13928 13929 function prefixed(property) { 13930 return test(property, true); 13931 } 13932 13933 if (tests.csstransitions()) { 13934 /* jshint -W053 */ 13935 $.support.transition = new String(prefixed('transition')); 13936 $.support.transition.end = events.transition.end[$.support.transition]; 13937 } 13938 13939 if (tests.cssanimations()) { 13940 /* jshint -W053 */ 13941 $.support.animation = new String(prefixed('animation')); 13942 $.support.animation.end = events.animation.end[$.support.animation]; 13943 } 13944 13945 if (tests.csstransforms()) { 13946 /* jshint -W053 */ 13947 $.support.transform = new String(prefixed('transform')); 13948 $.support.transform3d = tests.csstransforms3d(); 13949 } 13950})(window.Zepto || __webpack_provided_window_dot_jQuery, window, document); 13951/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0), __webpack_require__(0))) 13952 13953/***/ }), 13954 13955/***/ 14: 13956/***/ (function(module, exports, __webpack_require__) { 13957 13958// style-loader: Adds some css to the DOM by adding a <style> tag 13959 13960// load the styles 13961var content = __webpack_require__(15); 13962if(typeof content === 'string') content = [[module.i, content, '']]; 13963// Prepare cssTransformation 13964var transform; 13965 13966var options = {} 13967options.transform = transform 13968// add the styles to the DOM 13969var update = __webpack_require__(4)(content, options); 13970if(content.locals) module.exports = content.locals; 13971// Hot Module Replacement 13972if(false) { 13973 // When the styles change, update the <style> tags 13974 if(!content.locals) { 13975 module.hot.accept("!!../../../../node_modules/css-loader/index.js!./owl.carousel.min.css", function() { 13976 var newContent = require("!!../../../../node_modules/css-loader/index.js!./owl.carousel.min.css"); 13977 if(typeof newContent === 'string') newContent = [[module.id, newContent, '']]; 13978 update(newContent); 13979 }); 13980 } 13981 // When the module is disposed, remove the <style> tags 13982 module.hot.dispose(function() { update(); }); 13983} 13984 13985/***/ }), 13986 13987/***/ 15: 13988/***/ (function(module, exports, __webpack_require__) { 13989 13990exports = module.exports = __webpack_require__(3)(undefined); 13991// imports 13992 13993 13994// module 13995exports.push([module.i, ".owl-carousel{display:none;width:100%;-webkit-tap-highlight-color:transparent;position:relative;z-index:1}.owl-carousel .owl-stage{position:relative;-ms-touch-action:pan-Y}.owl-carousel .owl-stage:after{content:\".\";display:block;clear:both;visibility:hidden;line-height:0;height:0}.owl-carousel .owl-stage-outer{position:relative;overflow:hidden;-webkit-transform:translate3d(0px, 0px, 0px)}.owl-carousel .owl-item{position:relative;min-height:1px;float:left;-webkit-backface-visibility:hidden;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none}.owl-carousel .owl-item img{display:block;width:100%;-webkit-transform-style:preserve-3d}.owl-carousel .owl-nav.disabled,.owl-carousel .owl-dots.disabled{display:none}.owl-carousel .owl-nav .owl-prev,.owl-carousel .owl-nav .owl-next,.owl-carousel .owl-dot{cursor:pointer;cursor:hand;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel.owl-loaded{display:block}.owl-carousel.owl-loading{opacity:0;display:block}.owl-carousel.owl-hidden{opacity:0}
13995.owl-carousel.owl-refresh .owl-item{visibility:hidden}.owl-carousel.owl-drag .owl-item{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel.owl-grab{cursor:move;cursor:grab}.owl-carousel.owl-rtl{direction:rtl}.owl-carousel.owl-rtl .owl-item{float:right}.no-js .owl-carousel{display:block}.owl-carousel .animated{animation-duration:1000ms;animation-fill-mode:both}.owl-carousel .owl-animated-in{z-index:0}.owl-carousel .owl-animated-out{z-index:1}.owl-carousel .fadeOut{animation-name:fadeOut}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.owl-height{transition:height 500ms ease-in-out}.owl-carousel .owl-item .owl-lazy{opacity:0;transition:opacity 400ms ease}.owl-carousel .owl-item img.owl-lazy{transform-style:preserve-3d}.owl-carousel .owl-video-wrapper{position:relative;height:100%;background:#000}.owl-carousel .owl-video-play-icon{position:absolute;height:80px;width:80px;left:50%;top:50%;margin-left:-40px;margin-top:-40px;background:url(" + __webpack_require__(16) + ") no-repeat;cursor:pointer;z-index:1;-webkit-backface-visibility:hidden;transition:transform 100ms ease}.owl-carousel .owl-video-play-icon:hover{transform:scale(1.3, 1.3)}.owl-carousel .owl-video-playing .owl-video-tn,.owl-carousel .owl-video-playing .owl-video-play-icon{display:none}.owl-carousel .owl-video-tn{opacity:0;height:100%;background-position:center center;background-repeat:no-repeat;background-size:contain;transition:opacity 400ms ease}.owl-carousel .owl-video-frame{position:relative;z-index:1;height:100%;width:100%}", ""]); 13996 13997// exports 13998 13999 14000/***/ }), 14001 14002/***/ 16: 14003/***/ (function(module, exports, __webpack_require__) { 14004 14005module.exports = __webpack_require__.p + "4a37f8008959c75f619bf0a3a4e2d7a2.png"; 14006 14007/***/ }), 14008 14009/***/ 17: 14010/***/ (function(module, exports, __webpack_require__) { 14011 14012// style-loader: Adds some css to the DOM by adding a <style> tag 14013 14014// load the styles 14015var content = __webpack_require__(18); 14016if(typeof content === 'string') content = [[module.i, content, '']]; 14017// Prepare cssTransformation 14018var transform; 14019 14020var options = {} 14021options.transform = transform 14022// add the styles to the DOM 14023var update = __webpack_require__(4)(content, options); 14024if(content.locals) module.exports = content.locals; 14025// Hot Module Replacement 14026if(false) { 14027 // When the styles change, update the <style> tags 14028 if(!content.locals) { 14029 module.hot.accept("!!../../../../node_modules/css-loader/index.js!./owl.theme.default.min.css", function() { 14030 var newContent = require("!!../../../../node_modules/css-loader/index.js!./owl.theme.default.min.css"); 14031 if(typeof newContent === 'string') newContent = [[module.id, newContent, '']]; 14032 update(newContent); 14033 }); 14034 } 14035 // When the module is disposed, remove the <style> tags 14036 module.hot.dispose(function() { update(); }); 14037} 14038 14039/***/ }), 14040 14041/***/ 18: 14042/***/ (function(module, exports, __webpack_require__) { 14043 14044exports = module.exports = __webpack_require__(3)(undefined); 14045// imports 14046 14047 14048// module 14049exports.push([module.i, ".owl-theme .owl-nav{text-align:center;-webkit-tap-highlight-color:transparent}.owl-theme .owl-nav [class*='owl-']{position:absolute;color:#FFF;font-size:22px;margin:0;padding:8px;background:rgba(0,0,0,0.3);background:url(/img/mask-30.png) \\9;display:inline-block;cursor:pointer;height:34px;width:34px;border-radius:50%;top:50%;margin-top:-34px}.owl-theme .owl-nav [class*='owl-']:hover{background:rgba(0,0,0,0.2);background:url(/img/mask-20.png) \\9;color:#FFF;text-decoration:none}.owl-theme .owl-nav .owl-prev{left:30px}.owl-theme .owl-nav .owl-next{right:30px}.owl-theme .owl-nav .disabled{opacity:.5;cursor:default}.owl-theme .owl-nav.disabled+.owl-dots{margin-top:10px}.owl-theme .owl-dots{margin-top:25px;text-align:center;-webkit-tap-highlight-color:transparent}.owl-theme .owl-dots .owl-dot{display:inline-block;zoom:1;*display:inline}.owl-theme .owl-dots .owl-dot span{width:10px;height:10px;margin:5px 7px;background:#ebebeb;display:block;-webkit-backface-visibility:visible;transition:opacity 200ms ease;border-radius:30px}.owl-theme .owl-dots .owl-dot.active span,.owl-theme .owl-dots .owl-dot:hover span{background:#ef4632}.owl-theme.status-nav-outside .owl-nav .owl-prev{left:-80px}.owl-theme.status-nav-outside .owl-nav .owl-next{right:-80px}", ""]); 14050
14051// exports 14052 14053 14054/***/ }), 14055 14056/***/ 19: 14057/***/ (function(module, exports, __webpack_require__) { 14058 14059// style-loader: Adds some css to the DOM by adding a <style> tag 14060 14061// load the styles 14062var content = __webpack_require__(20); 14063if(typeof content === 'string') content = [[module.i, content, '']]; 14064// Prepare cssTransformation 14065var transform; 14066 14067var options = {} 14068options.transform = transform 14069// add the styles to the DOM 14070var update = __webpack_require__(4)(content, options); 14071if(content.locals) module.exports = content.locals; 14072// Hot Module Replacement 14073if(false) { 14074 // When the styles change, update the <style> tags 14075 if(!content.locals) { 14076 module.hot.accept("!!../../../../node_modules/css-loader/index.js!./animate.css", function() { 14077 var newContent = require("!!../../../../node_modules/css-loader/index.js!./animate.css"); 14078 if(typeof newContent === 'string') newContent = [[module.id, newContent, '']]; 14079 update(newContent); 14080 }); 14081 } 14082 // When the module is disposed, remove the <style> tags 14083 module.hot.dispose(function() { update(); }); 14084} 14085 14086/***/ }), 14087 14088/***/ 20: 14089/***/ (function(module, exports, __webpack_require__) { 14090 14091exports = module.exports = __webpack_require__(3)(undefined); 14092// imports 14093 14094 14095// module 14096exports.push([module.i, "@charset \"UTF-8\";/*!\r\n * animate.css -http://daneden.me/animate\r\n * Version - 3.5.2\r\n * Licensed under the MIT license - http://opensource.org/licenses/MIT\r\n *\r\n * Copyright (c) 2017 Daniel Eden\r\n */.animated{animation-duration:1s;animation-fill-mode:both}.animated.infinite{animation-iteration-count:infinite}.animated.hinge{animation-duration:2s}.animated.flipOutX,.animated.flipOutY,.animated.bounceIn,.animated.bounceOut{animation-duration:.75s}@keyframes bounce{from,20%,53%,80%,to{animation-timing-function:cubic-bezier(0.215, .610, .355, 1.000);transform:translate3d(0,0,0)}40%,43%{animation-timing-function:cubic-bezier(0.755, .050, .855, .060);transform:translate3d(0, -30px, 0)}70%{animation-timing-function:cubic-bezier(0.755, .050, .855, .060);transform:translate3d(0, -15px, 0)}90%{transform:translate3d(0,-4px,0)}}.bounce{animation-name:bounce;transform-origin:center bottom}@keyframes flash{from,50%,to{opacity:1}25%,75%{opacity:0}}.flash{animation-name:flash}@keyframes pulse{from{transform:scale3d(1, 1, 1)}50%{transform:scale3d(1.05, 1.05, 1.05)}to{transform:scale3d(1, 1, 1)}}.pulse{animation-name:pulse}@keyframes rubberBand{from{transform:scale3d(1, 1, 1)}30%{transform:scale3d(1.25, .75, 1)}40%{transform:scale3d(0.75, 1.25, 1)}50%{transform:scale3d(1.15, .85, 1)}65%{transform:scale3d(.95, 1.05, 1)}75%{transform:scale3d(1.05, .95, 1)}to{transform:scale3d(1, 1, 1)}}.rubberBand{animation-name:rubberBand}@keyframes shake{from,to{transform:translate3d(0, 0, 0)}10%,30%,50%,70%,90%{transform:translate3d(-10px, 0, 0)}20%,40%,60%,80%{transform:translate3d(10px, 0, 0)}}.shake{animation-name:shake}@keyframes headShake{0%{transform:translateX(0)}6.5%{transform:translateX(-6px) rotateY(-9deg)}18.5%{transform:translateX(5px) rotateY(7deg)}31.5%{transform:translateX(-3px) rotateY(-5deg)}43.5%{transform:translateX(2px) rotateY(3deg)}50%{transform:translateX(0)}}.headShake{animation-timing-function:ease-in-out;animation-name:headShake}@keyframes swing{20%{transform:rotate3d(0, 0, 1, 15deg)}40%{transform:rotate3d(0, 0, 1, -10deg)}60%{transform:rotate3d(0, 0, 1, 5deg)}80%{transform:rotate3d(0, 0, 1, -5deg)}to{transform:rotate3d(0, 0, 1, 0deg)}}.swing{transform-origin:top center;animation-name:swing}@keyframes tada{from{transform:scale3d(1, 1, 1)}10%,20%{transform:scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg)}30%,50%,70%,90%{transform:scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg)}40%,60%,80%{transform:scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg)}to{transform:scale3d(1, 1, 1)}}.tada{animation-name:tada}@keyframes wobble{from{transform:none}15%{transform:translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg)}30%{transform:translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg)}45%{transform:translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg)}60%{transform:translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg)}75%{transform:translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg)}to{transform:none}}.wobble{animation-name:wobble}@keyframes jello{from,11.1%,to{transform:none}22.2%{transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{transform:skewX(6.25deg) skewY(6.25deg)}44.4%{transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{transform:skewX(-0.78125deg) skewY(-0.78125deg)}77.7%{transform:skewX(0.390625deg) skewY(0.390625deg)}88.8%{transform:skewX(-0.1953125deg) skewY(-0.1953125deg)}}.jello{animation-name:jello;transform-origin:center}@keyframes bounceIn{from,20%,40%,60%,80%,to{animation-timing-function:cubic-bezier(0.215, .610, .355, 1.000)}0%{opacity:0;transform:scale3d(.3, .3, .3)}20%{transform:scale3d(1.1, 1.1, 1.1)}40%{transform:scale3d(.9, .9, .9)}60%{opacity:1;transform:scale3d(1.03, 1.03, 1.03)}80%{transform:scale3d(.97, .97, .97)}to{opacity:1;transform:scale3d(1, 1, 1)}}.bounceIn{animation-name:bounceIn}@keyframes bounceInDown{from,60%,75%,90%,to{animation-timing-function:cubic-bezier(0.215, .610, .355, 1.000)}0%{opacity:0;transform:translate3d(0, -3000px, 0)}60%{opacity:1;transform:translate3d(0, 25px, 0)}75%{transform:translate3d(0, -10px, 0)}90%{transform:translate3d(0, 5px, 0)}to{transform:none}}.bounceInDown{animation-name:bounceInDown}@keyframes bounceInLeft{from,60%,75%,90%,to{animation-timing-function:cubic-bezier(0.215, .610, .355, 1.000)}0%{opacity:0;transform:translate3d(-3000px, 0, 0)}60%{opacity:1;transform:translate3d(25px, 0, 0)}75%{transform:translate3d(-10px, 0, 0)}90%{transform:translate3d(5px, 0, 0)}to{transform:none}}.bounceInLeft{animation-name:bounceInLeft}@keyframes bounceInRight{from,60%,75%,90%,to{animation-timing-function:cubic-bezier(0.215, .610, .355, 1.000)}from{opacity:0;transform:translate3d(3000px, 0, 0)}60%{opacity:1;transform:translate3d(-25px, 0, 0)}75%{transform:translate3d(10px, 0, 0)}90%{transform:translate3d(-5px, 0, 0)}to{transform:none}}.bounceInRight{animation-name:bounceInRight}@keyframes bounceInUp{from,60%,75%,90%,to{animation-timing-function:cubic-bezier(0.215, .610, .355, 1.000)}from{opacity:0;transform:translate3d(0, 3000px, 0)}60%{opacity:1;
14096transform:translate3d(0, -20px, 0)}75%{transform:translate3d(0, 10px, 0)}90%{transform:translate3d(0, -5px, 0)}to{transform:translate3d(0, 0, 0)}}.bounceInUp{animation-name:bounceInUp}@keyframes bounceOut{20%{transform:scale3d(.9, .9, .9)}50%,55%{opacity:1;transform:scale3d(1.1, 1.1, 1.1)}to{opacity:0;transform:scale3d(.3, .3, .3)}}.bounceOut{animation-name:bounceOut}@keyframes bounceOutDown{20%{transform:translate3d(0, 10px, 0)}40%,45%{opacity:1;transform:translate3d(0, -20px, 0)}to{opacity:0;transform:translate3d(0, 2000px, 0)}}.bounceOutDown{animation-name:bounceOutDown}@keyframes bounceOutLeft{20%{opacity:1;transform:translate3d(20px, 0, 0)}to{opacity:0;transform:translate3d(-2000px, 0, 0)}}.bounceOutLeft{animation-name:bounceOutLeft}@keyframes bounceOutRight{20%{opacity:1;transform:translate3d(-20px, 0, 0)}to{opacity:0;transform:translate3d(2000px, 0, 0)}}.bounceOutRight{animation-name:bounceOutRight}@keyframes bounceOutUp{20%{transform:translate3d(0, -10px, 0)}40%,45%{opacity:1;transform:translate3d(0, 20px, 0)}to{opacity:0;transform:translate3d(0, -2000px, 0)}}.bounceOutUp{animation-name:bounceOutUp}@keyframes fadeIn{from{opacity:0}to{opacity:1}}.fadeIn{animation-name:fadeIn}@keyframes fadeInDown{from{opacity:0;transform:translate3d(0, -100%, 0)}to{opacity:1;transform:none}}.fadeInDown{animation-name:fadeInDown}@keyframes fadeInDownBig{from{opacity:0;transform:translate3d(0, -2000px, 0)}to{opacity:1;transform:none}}.fadeInDownBig{animation-name:fadeInDownBig}@keyframes fadeInLeft{from{opacity:0;transform:translate3d(-100%, 0, 0)}to{opacity:1;transform:none}}.fadeInLeft{animation-name:fadeInLeft}@keyframes fadeInLeftBig{from{opacity:0;transform:translate3d(-2000px, 0, 0)}to{opacity:1;transform:none}}.fadeInLeftBig{animation-name:fadeInLeftBig}@keyframes fadeInRight{from{opacity:0;transform:translate3d(100%, 0, 0)}to{opacity:1;transform:none}}.fadeInRight{animation-name:fadeInRight}@keyframes fadeInRightBig{from{opacity:0;transform:translate3d(2000px, 0, 0)}to{opacity:1;transform:none}}.fadeInRightBig{animation-name:fadeInRightBig}@keyframes fadeInUp{from{opacity:0;transform:translate3d(0, 100%, 0)}to{opacity:1;transform:none}}.fadeInUp{animation-name:fadeInUp}@keyframes fadeInUpBig{from{opacity:0;transform:translate3d(0, 2000px, 0)}to{opacity:1;transform:none}}.fadeInUpBig{animation-name:fadeInUpBig}@keyframes fadeOut{from{opacity:1}to{opacity:0}}.fadeOut{animation-name:fadeOut}@keyframes fadeOutDown{from{opacity:1}to{opacity:0;transform:translate3d(0, 100%, 0)}}.fadeOutDown{animation-name:fadeOutDown}@keyframes fadeOutDownBig{from{opacity:1}to{opacity:0;transform:translate3d(0, 2000px, 0)}}.fadeOutDownBig{animation-name:fadeOutDownBig}@keyframes fadeOutLeft{from{opacity:1}to{opacity:0;transform:translate3d(-100%, 0, 0)}}.fadeOutLeft{animation-name:fadeOutLeft}@keyframes fadeOutLeftBig{from{opacity:1}\r\nto{opacity:0;transform:translate3d(-2000px, 0, 0)}}.fadeOutLeftBig{animation-name:fadeOutLeftBig}@keyframes fadeOutRight{from{opacity:1}to{opacity:0;transform:translate3d(100%, 0, 0)}}.fadeOutRight{animation-name:fadeOutRight}@keyframes fadeOutRightBig{from{opacity:1}to{opacity:0;transform:translate3d(2000px, 0, 0)}}.fadeOutRightBig{animation-name:fadeOutRightBig}@keyframes fadeOutUp{from{opacity:1}to{opacity:0;transform:translate3d(0, -100%, 0)}}.fadeOutUp{animation-name:fadeOutUp}@keyframes fadeOutUpBig{from{opacity:1}to{opacity:0;transform:translate3d(0, -2000px, 0)}}.fadeOutUpBig{animation-name:fadeOutUpBig}@keyframes flip{from{transform:perspective(400px) rotate3d(0, 1, 0, -360deg);animation-timing-function:ease-out}40%{transform:perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);animation-timing-function:ease-out}50%{transform:perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);animation-timing-function:ease-in}80%{transform:perspective(400px) scale3d(.95, .95, .95);animation-timing-function:ease-in}to{transform:perspective(400px);animation-timing-function:ease-in}}.animated.flip{-webkit-backface-visibility:visible;backface-visibility:visible;animation-name:flip}@keyframes flipInX{from{transform:perspective(400px) rotate3d(1, 0, 0, 90deg);animation-timing-function:ease-in;opacity:0}
1409640%{transform:perspective(400px) rotate3d(1, 0, 0, -20deg);animation-timing-function:ease-in}60%{transform:perspective(400px) rotate3d(1, 0, 0, 10deg);opacity:1}80%{transform:perspective(400px) rotate3d(1, 0, 0, -5deg)}to{transform:perspective(400px)}}.flipInX{-webkit-backface-visibility:visible !important;backface-visibility:visible !important;animation-name:flipInX}@keyframes flipInY{from{transform:perspective(400px) rotate3d(0, 1, 0, 90deg);animation-timing-function:ease-in;opacity:0}40%{transform:perspective(400px) rotate3d(0, 1, 0, -20deg);animation-timing-function:ease-in}60%{transform:perspective(400px) rotate3d(0, 1, 0, 10deg);opacity:1}80%{transform:perspective(400px) rotate3d(0, 1, 0, -5deg)}to{transform:perspective(400px)}}.flipInY{-webkit-backface-visibility:visible !important;backface-visibility:visible !important;animation-name:flipInY}@keyframes flipOutX{from{transform:perspective(400px)}30%{transform:perspective(400px) rotate3d(1, 0, 0, -20deg);opacity:1}to{transform:perspective(400px) rotate3d(1, 0, 0, 90deg);opacity:0}
14096}.flipOutX{animation-name:flipOutX;-webkit-backface-visibility:visible !important;backface-visibility:visible !important}@keyframes flipOutY{from{transform:perspective(400px)}30%{transform:perspective(400px) rotate3d(0, 1, 0, -15deg);opacity:1}to{transform:perspective(400px) rotate3d(0, 1, 0, 90deg);opacity:0}}.flipOutY{-webkit-backface-visibility:visible !important;backface-visibility:visible !important;animation-name:flipOutY}@keyframes lightSpeedIn{from{transform:translate3d(100%, 0, 0) skewX(-30deg);opacity:0}60%{transform:skewX(20deg);opacity:1}80%{transform:skewX(-5deg);opacity:1}to{transform:none;opacity:1}}.lightSpeedIn{animation-name:lightSpeedIn;animation-timing-function:ease-out}@keyframes lightSpeedOut{from{opacity:1}to{transform:translate3d(100%, 0, 0) skewX(30deg);opacity:0}}.lightSpeedOut{animation-name:lightSpeedOut;animation-timing-function:ease-in}@keyframes rotateIn{from{transform-origin:center;transform:rotate3d(0, 0, 1, -200deg);opacity:0}to{transform-origin:center;transform:none;opacity:1}}.rotateIn{animation-name:rotateIn}@keyframes rotateInDownLeft{from{transform-origin:left bottom;transform:rotate3d(0, 0, 1, -45deg);opacity:0}
14096to{transform-origin:left bottom;transform:none;opacity:1}}.rotateInDownLeft{animation-name:rotateInDownLeft}@keyframes rotateInDownRight{from{transform-origin:right bottom;transform:rotate3d(0, 0, 1, 45deg);opacity:0}to{transform-origin:right bottom;transform:none;opacity:1}}.rotateInDownRight{animation-name:rotateInDownRight}@keyframes rotateInUpLeft{from{transform-origin:left bottom;transform:rotate3d(0, 0, 1, 45deg);opacity:0}to{transform-origin:left bottom;transform:none;opacity:1}}.rotateInUpLeft{animation-name:rotateInUpLeft}@keyframes rotateInUpRight{from{transform-origin:right bottom;transform:rotate3d(0, 0, 1, -90deg);opacity:0}to{transform-origin:right bottom;transform:none;opacity:1}}.rotateInUpRight{animation-name:rotateInUpRight}@keyframes rotateOut{from{transform-origin:center;opacity:1}to{transform-origin:center;transform:rotate3d(0, 0, 1, 200deg);opacity:0}}.rotateOut{animation-name:rotateOut}@keyframes rotateOutDownLeft{from{transform-origin:left bottom;opacity:1}to{transform-origin:left bottom;transform:rotate3d(0, 0, 1, 45deg);opacity:0}
14096}.rotateOutDownLeft{animation-name:rotateOutDownLeft}@keyframes rotateOutDownRight{from{transform-origin:right bottom;opacity:1}to{transform-origin:right bottom;transform:rotate3d(0, 0, 1, -45deg);opacity:0}}.rotateOutDownRight{animation-name:rotateOutDownRight}@keyframes rotateOutUpLeft{from{transform-origin:left bottom;opacity:1}to{transform-origin:left bottom;transform:rotate3d(0, 0, 1, -45deg);opacity:0}}.rotateOutUpLeft{animation-name:rotateOutUpLeft}@keyframes rotateOutUpRight{from{transform-origin:right bottom;opacity:1}to{transform-origin:right bottom;transform:rotate3d(0, 0, 1, 90deg);opacity:0}}.rotateOutUpRight{animation-name:rotateOutUpRight}@keyframes hinge{0%{transform-origin:top left;animation-timing-function:ease-in-out}20%,60%{transform:rotate3d(0, 0, 1, 80deg);transform-origin:top left;animation-timing-function:ease-in-out}40%,80%{transform:rotate3d(0, 0, 1, 60deg);transform-origin:top left;animation-timing-function:ease-in-out;opacity:1}to{transform:translate3d(0, 700px, 0);opacity:0}}.hinge{animation-name:hinge}@keyframes jackInTheBox{from{opacity:0;transform:scale(0.1) rotate(30deg);transform-origin:center bottom}50%{transform:rotate(-10deg)}70%{transform:rotate(3deg)}to{opacity:1;transform:scale(1)}}.jackInTheBox{animation-name:jackInTheBox}@keyframes rollIn{from{opacity:0;transform:translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg)}to{opacity:1;transform:none}}.rollIn{animation-name:rollIn}@keyframes rollOut{from{opacity:1}to{opacity:0;transform:translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg)}}.rollOut{animation-name:rollOut}@keyframes zoomIn{from{opacity:0;transform:scale3d(.3, .3, .3)}50%{opacity:1}}.zoomIn{animation-name:zoomIn}@keyframes zoomInDown{from{opacity:0;transform:scale3d(.1, .1, .1) translate3d(0, -1000px, 0);animation-timing-function:cubic-bezier(0.550, .055, .675, .190)}60%{opacity:1;transform:scale3d(.475, .475, .475) translate3d(0, 60px, 0);animation-timing-function:cubic-bezier(0.175, .885, .320, 1)}}.zoomInDown{animation-name:zoomInDown}@keyframes zoomInLeft{from{opacity:0;transform:scale3d(.1, .1, .1) translate3d(-1000px, 0, 0);animation-timing-function:cubic-bezier(0.550, .055, .675, .190)}60%{opacity:1;transform:scale3d(.475, .475, .475) translate3d(10px, 0, 0);animation-timing-function:cubic-bezier(0.175, .885, .320, 1)}}.zoomInLeft{animation-name:zoomInLeft}@keyframes zoomInRight{from{opacity:0;transform:scale3d(.1, .1, .1) translate3d(1000px, 0, 0);animation-timing-function:cubic-bezier(0.550, .055, .675, .190)}60%{opacity:1;transform:scale3d(.475, .475, .475) translate3d(-10px, 0, 0);animation-timing-function:cubic-bezier(0.175, .885, .320, 1)}}.zoomInRight{animation-name:zoomInRight}@keyframes zoomInUp{from{opacity:0;transform:scale3d(.1, .1, .1) translate3d(0, 1000px, 0);animation-timing-function:cubic-bezier(0.550, .055, .675, .190)}60%{opacity:1;transform:scale3d(.475, .475, .475) translate3d(0, -60px, 0);animation-timing-function:cubic-bezier(0.175, .885, .320, 1)}}.zoomInUp{animation-name:zoomInUp}@keyframes zoomOut{from{opacity:1}50%{opacity:0;transform:scale3d(.3, .3, .3)}to{opacity:0}}.zoomOut{animation-name:zoomOut}@keyframes zoomOutDown{40%{opacity:1;transform:scale3d(.475, .475, .475) translate3d(0, -60px, 0);animation-timing-function:cubic-bezier(0.550, .055, .675, .190)}\r\nto{opacity:0;transform:scale3d(.1, .1, .1) translate3d(0, 2000px, 0);transform-origin:center bottom;animation-timing-function:cubic-bezier(0.175, .885, .320, 1)}}.zoomOutDown{animation-name:zoomOutDown}@keyframes zoomOutLeft{40%{opacity:1;transform:scale3d(.475, .475, .475) translate3d(42px, 0, 0)}to{opacity:0;transform:scale(.1) translate3d(-2000px, 0, 0);transform-origin:left center}}.zoomOutLeft{animation-name:zoomOutLeft}@keyframes zoomOutRight{40%{opacity:1;transform:scale3d(.475, .475, .475) translate3d(-42px, 0, 0)}to{opacity:0;transform:scale(.1) translate3d(2000px, 0, 0);transform-origin:right center}}.zoomOutRight{animation-name:zoomOutRight}@keyframes zoomOutUp{40%{opacity:1;transform:scale3d(.475, .475, .475) translate3d(0, 60px, 0);animation-timing-function:cubic-bezier(0.550, .055, .675, .190)}to{opacity:0;transform:scale3d(.1, .1, .1) translate3d(0, -2000px, 0);transform-origin:center bottom;animation-timing-function:cubic-bezier(0.175, .885, .320, 1)}}.zoomOutUp{animation-name:zoomOutUp}@keyframes slideInDown{from{transform:translate3d(0, -100%, 0);visibility:visible}to{transform:translate3d(0, 0, 0)}}.slideInDown{animation-name:slideInDown}@keyframes slideInLeft{from{transform:translate3d(-100%, 0, 0);visibility:visible}to{transform:translate3d(0, 0, 0)}}.slideInLeft{animation-name:slideInLeft}@keyframes slideInRight{from{transform:translate3d(100%, 0, 0);visibility:visible}to{transform:translate3d(0, 0, 0)}}.slideInRight{animation-name:slideInRight}@keyframes slideInUp{from{transform:translate3d(0, 100%, 0);visibility:visible}to{transform:translate3d(0, 0, 0)}}.slideInUp{animation-name:slideInUp}@keyframes slideOutDown{from{transform:translate3d(0, 0, 0)}to{visibility:hidden;transform:translate3d(0, 100%, 0)}}.slideOutDown{animation-name:slideOutDown}@keyframes slideOutLeft{from{transform:translate3d(0, 0, 0)}to{visibility:hidden;transform:translate3d(-100%, 0, 0)}}.slideOutLeft{animation-name:slideOutLeft}@keyframes slideOutRight{from{transform:translate3d(0, 0, 0)}to{visibility:hidden;transform:translate3d(100%, 0, 0)}}.slideOutRight{animation-name:slideOutRight}@keyframes slideOutUp{from{transform:translate3d(0, 0, 0)}to{visibility:hidden;transform:translate3d(0, -100%, 0)}}.slideOutUp{animation-name:slideOutUp}", ""]); 14097
vendor: 10,942 bytes, lines 14098-14528
14098// exports 14099 14100 14101/***/ }), 14102 14103/***/ 3: 14104/***/ (function(module, exports) { 14105 14106/* 14107 MIT License http://www.opensource.org/licenses/mit-license.php 14108 Author Tobias Koppers @sokra 14109*/ 14110// css base code, injected by the css-loader 14111module.exports = function (useSourceMap) { 14112 var list = []; 14113 14114 // return the list of modules as css string 14115 list.toString = function toString() { 14116 return this.map(function (item) { 14117 var content = cssWithMappingToString(item, useSourceMap); 14118 if (item[2]) { 14119 return "@media " + item[2] + "{" + content + "}"; 14120 } else { 14121 return content; 14122 } 14123 }).join(""); 14124 }; 14125 14126 // import a list of modules into the list 14127 list.i = function (modules, mediaQuery) { 14128 if (typeof modules === "string") modules = [[null, modules, ""]]; 14129 var alreadyImportedModules = {}; 14130 for (var i = 0; i < this.length; i++) { 14131 var id = this[i][0]; 14132 if (typeof id === "number") alreadyImportedModules[id] = true; 14133 } 14134 for (i = 0; i < modules.length; i++) { 14135 var item = modules[i]; 14136 // skip already imported module 14137 // this implementation is not 100% perfect for weird media query combinations 14138 // when a module is imported multiple times with different media queries. 14139 // I hope this will never occur (Hey this way we have smaller bundles) 14140 if (typeof item[0] !== "number" || !alreadyImportedModules[item[0]]) { 14141 if (mediaQuery && !item[2]) { 14142 item[2] = mediaQuery; 14143 } else if (mediaQuery) { 14144 item[2] = "(" + item[2] + ") and (" + mediaQuery + ")"; 14145 } 14146 list.push(item); 14147 } 14148 } 14149 }; 14150 return list; 14151}; 14152 14153function cssWithMappingToString(item, useSourceMap) { 14154 var content = item[1] || ''; 14155 var cssMapping = item[3]; 14156 if (!cssMapping) { 14157 return content; 14158 } 14159 14160 if (useSourceMap && typeof btoa === 'function') { 14161 var sourceMapping = toComment(cssMapping); 14162 var sourceURLs = cssMapping.sources.map(function (source) { 14163 return '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */'; 14164 }); 14165 14166 return [content].concat(sourceURLs).concat([sourceMapping]).join('\n'); 14167 } 14168 14169 return [content].join('\n'); 14170} 14171 14172// Adapted from convert-source-map (MIT) 14173function toComment(sourceMap) { 14174 // eslint-disable-next-line no-undef 14175 var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))); 14176 var data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64; 14177 14178 return '/*# ' + data + ' */'; 14179} 14180 14181/***/ }), 14182 14183/***/ 4: 14184/***/ (function(module, exports, __webpack_require__) { 14185 14186/* 14187 MIT License http://www.opensource.org/licenses/mit-license.php 14188 Author Tobias Koppers @sokra 14189*/ 14190 14191var stylesInDom = {}; 14192 14193var memoize = function (fn) { 14194 var memo; 14195 14196 return function () { 14197 if (typeof memo === "undefined") memo = fn.apply(this, arguments); 14198 return memo; 14199 }; 14200}; 14201 14202var isOldIE = memoize(function () { 14203 // Test for IE <= 9 as proposed by Browserhacks 14204 // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805 14205 // Tests for existence of standard globals is to allow style-loader 14206 // to operate correctly into non-standard environments 14207 // @see https://github.com/webpack-contrib/style-loader/issues/177 14208 return window && document && document.all && !window.atob; 14209}); 14210 14211var getElement = (function (fn) { 14212 var memo = {}; 14213 14214 return function(selector) { 14215 if (typeof memo[selector] === "undefined") { 14216 memo[selector] = fn.call(this, selector); 14217 } 14218 14219 return memo[selector] 14220 }; 14221})(function (target) { 14222 return document.querySelector(target) 14223}); 14224 14225var singleton = null; 14226var singletonCounter = 0; 14227var stylesInsertedAtTop = []; 14228 14229var fixUrls = __webpack_require__(11); 14230 14231module.exports = function(list, options) { 14232 if (typeof DEBUG !== "undefined" && DEBUG) { 14233 if (typeof document !== "object") throw new Error("The style-loader cannot be used in a non-browser environment"); 14234 } 14235 14236 options = options || {}; 14237 14238 options.attrs = typeof options.attrs === "object" ? options.attrs : {}; 14239 14240 // Force single-tag solution on IE6-9, which has a hard limit on the # of <style> 14241 // tags it will allow on a page 14242 if (!options.singleton) options.singleton = isOldIE(); 14243 14244 // By default, add <style> tags to the <head> element 14245 if (!options.insertInto) options.insertInto = "head"; 14246 14247 // By default, add <style> tags to the bottom of the target 14248 if (!options.insertAt) options.insertAt = "bottom"; 14249 14250 var styles = listToStyles(list, options); 14251 14252 addStylesToDom(styles, options); 14253 14254 return function update (newList) { 14255 var mayRemove = []; 14256 14257 for (var i = 0; i < styles.length; i++) { 14258 var item = styles[i]; 14259 var domStyle = stylesInDom[item.id]; 14260 14261 domStyle.refs--; 14262 mayRemove.push(domStyle); 14263 } 14264 14265 if(newList) { 14266 var newStyles = listToStyles(newList, options); 14267 addStylesToDom(newStyles, options); 14268 } 14269 14270 for (var i = 0; i < mayRemove.length; i++) { 14271 var domStyle = mayRemove[i]; 14272 14273 if(domStyle.refs === 0) { 14274 for (var j = 0; j < domStyle.parts.length; j++) domStyle.parts[j](); 14275 14276 delete stylesInDom[domStyle.id]; 14277 } 14278 } 14279 }; 14280}; 14281 14282function addStylesToDom (styles, options) { 14283 for (var i = 0; i < styles.length; i++) { 14284 var item = styles[i]; 14285 var domStyle = stylesInDom[item.id]; 14286 14287 if(domStyle) { 14288 domStyle.refs++; 14289 14290 for(var j = 0; j < domStyle.parts.length; j++) { 14291 domStyle.parts[j](item.parts[j]); 14292 } 14293 14294 for(; j < item.parts.length; j++) { 14295 domStyle.parts.push(addStyle(item.parts[j], options)); 14296 } 14297 } else { 14298 var parts = []; 14299 14300 for(var j = 0; j < item.parts.length; j++) { 14301 parts.push(addStyle(item.parts[j], options)); 14302 } 14303 14304 stylesInDom[item.id] = {id: item.id, refs: 1, parts: parts}; 14305 } 14306 } 14307} 14308 14309function listToStyles (list, options) { 14310 var styles = []; 14311 var newStyles = {}; 14312 14313 for (var i = 0; i < list.length; i++) { 14314 var item = list[i]; 14315 var id = options.base ? item[0] + options.base : item[0]; 14316 var css = item[1]; 14317 var media = item[2]; 14318 var sourceMap = item[3]; 14319 var part = {css: css, media: media, sourceMap: sourceMap}; 14320 14321 if(!newStyles[id]) styles.push(newStyles[id] = {id: id, parts: [part]}); 14322 else newStyles[id].parts.push(part); 14323 } 14324 14325 return styles; 14326} 14327 14328function insertStyleElement (options, style) { 14329 var target = getElement(options.insertInto) 14330 14331 if (!target) { 14332 throw new Error("Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid."); 14333 } 14334 14335 var lastStyleElementInsertedAtTop = stylesInsertedAtTop[stylesInsertedAtTop.length - 1]; 14336 14337 if (options.insertAt === "top") { 14338 if (!lastStyleElementInsertedAtTop) { 14339 target.insertBefore(style, target.firstChild); 14340 } else if (lastStyleElementInsertedAtTop.nextSibling) { 14341 target.insertBefore(style, lastStyleElementInsertedAtTop.nextSibling); 14342 } else { 14343 target.appendChild(style); 14344 } 14345 stylesInsertedAtTop.push(style); 14346 } else if (options.insertAt === "bottom") { 14347 target.appendChild(style); 14348 } else { 14349 throw new Error("Invalid value for parameter 'insertAt'. Must be 'top' or 'bottom'."); 14350 } 14351} 14352 14353function removeStyleElement (style) { 14354 if (style.parentNode === null) return false; 14355 style.parentNode.removeChild(style); 14356 14357 var idx = stylesInsertedAtTop.indexOf(style); 14358 if(idx >= 0) { 14359 stylesInsertedAtTop.splice(idx, 1); 14360 } 14361} 14362 14363function createStyleElement (options) { 14364 var style = document.createElement("style"); 14365 14366 options.attrs.type = "text/css"; 14367 14368 addAttrs(style, options.attrs); 14369 insertStyleElement(options, style); 14370 14371 return style; 14372} 14373 14374function createLinkElement (options) { 14375 var link = document.createElement("link"); 14376 14377 options.attrs.type = "text/css"; 14378 options.attrs.rel = "stylesheet"; 14379 14380 addAttrs(link, options.attrs); 14381 insertStyleElement(options, link); 14382 14383 return link; 14384} 14385 14386function addAttrs (el, attrs) { 14387 Object.keys(attrs).forEach(function (key) { 14388 el.setAttribute(key, attrs[key]); 14389 }); 14390} 14391 14392function addStyle (obj, options) { 14393 var style, update, remove, result; 14394 14395 // If a transform function was defined, run it on the css 14396 if (options.transform && obj.css) { 14397 result = options.transform(obj.css); 14398 14399 if (result) { 14400 // If transform returns a value, use that instead of the original css. 14401 // This allows running runtime transformations on the css. 14402 obj.css = result; 14403 } else { 14404 // If the transform function returns a falsy value, don't add this css. 14405 // This allows conditional loading of css 14406 return function() { 14407 // noop 14408 }; 14409 } 14410 } 14411 14412 if (options.singleton) { 14413 var styleIndex = singletonCounter++; 14414 14415 style = singleton || (singleton = createStyleElement(options)); 14416 14417 update = applyToSingletonTag.bind(null, style, styleIndex, false); 14418 remove = applyToSingletonTag.bind(null, style, styleIndex, true); 14419 14420 } else if ( 14421 obj.sourceMap && 14422 typeof URL === "function" && 14423 typeof URL.createObjectURL === "function" && 14424 typeof URL.revokeObjectURL === "function" && 14425 typeof Blob === "function" && 14426 typeof btoa === "function" 14427 ) { 14428 style = createLinkElement(options); 14429 update = updateLink.bind(null, style, options); 14430 remove = function () { 14431 removeStyleElement(style); 14432 14433 if(style.href) URL.revokeObjectURL(style.href); 14434 }; 14435 } else { 14436 style = createStyleElement(options); 14437 update = applyToTag.bind(null, style); 14438 remove = function () { 14439 removeStyleElement(style); 14440 }; 14441 } 14442 14443 update(obj); 14444 14445 return function updateStyle (newObj) { 14446 if (newObj) { 14447 if ( 14448 newObj.css === obj.css && 14449 newObj.media === obj.media && 14450 newObj.sourceMap === obj.sourceMap 14451 ) { 14452 return; 14453 } 14454 14455 update(obj = newObj); 14456 } else { 14457 remove(); 14458 } 14459 }; 14460} 14461 14462var replaceText = (function () { 14463 var textStore = []; 14464 14465 return function (index, replacement) { 14466 textStore[index] = replacement; 14467 14468 return textStore.filter(Boolean).join('\n'); 14469 }; 14470})(); 14471 14472function applyToSingletonTag (style, index, remove, obj) { 14473 var css = remove ? "" : obj.css; 14474 14475 if (style.styleSheet) { 14476 style.styleSheet.cssText = replaceText(index, css); 14477 } else { 14478 var cssNode = document.createTextNode(css); 14479 var childNodes = style.childNodes; 14480 14481 if (childNodes[index]) style.removeChild(childNodes[index]); 14482 14483 if (childNodes.length) { 14484 style.insertBefore(cssNode, childNodes[index]); 14485 } else { 14486 style.appendChild(cssNode); 14487 } 14488 } 14489} 14490 14491function applyToTag (style, obj) { 14492 var css = obj.css; 14493 var media = obj.media; 14494 14495 if(media) { 14496 style.setAttribute("media", media) 14497 } 14498 14499 if(style.styleSheet) { 14500 style.styleSheet.cssText = css; 14501 } else { 14502 while(style.firstChild) { 14503 style.removeChild(style.firstChild); 14504 } 14505 14506 style.appendChild(document.createTextNode(css)); 14507 } 14508} 14509 14510function updateLink (link, options, obj) { 14511 var css = obj.css; 14512 var sourceMap = obj.sourceMap; 14513 14514 /* 14515 If convertToAbsoluteUrls isn't defined, but sourcemaps are enabled 14516 and there is no publicPath defined then lets turn convertToAbsoluteUrls 14517 on by default. Otherwise default to the convertToAbsoluteUrls option 14518 directly 14519 */ 14520 var autoFixUrls = options.convertToAbsoluteUrls === undefined && sourceMap; 14521 14522 if (options.convertToAbsoluteUrls || autoFixUrls) { 14523 css = fixUrls(css); 14524 } 14525 14526 if (sourceMap) { 14527 // http://stackoverflow.com/a/26603875 14528 css += "\n/*# sourceMappingURL=data:application/json;base64," + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)
14528))) + " */"; 14529 } 14530 14531 var blob = new Blob([css], { type: "text/css" }); 14532 14533 var oldSrc = link.href; 14534 14535 link.href = URL.createObjectURL(blob); 14536 14537 if(oldSrc) URL.revokeObjectURL(oldSrc); 14538} 14539 14540 14541/***/ }), 14542 14543/***/ 56: 14544/***/ (function(module, __webpack_exports__, __webpack_require__) { 14545 14546"use strict"; 14547Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); 14548/* WEBPACK VAR INJECTION */(function($) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery__ = __webpack_require__(0); 14549/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_jquery__); 14550/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_carousel__ = __webpack_require__(12); 14551/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_carousel___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_carousel__); 14552/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__lib_owlcarousel_assets_owl_carousel_min_css__ = __webpack_require__(14); 14553/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__lib_owlcarousel_assets_owl_carousel_min_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2__lib_owlcarousel_assets_owl_carousel_min_css__); 14554/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__lib_owlcarousel_assets_owl_theme_default_min_css__ = __webpack_require__(17); 14555/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__lib_owlcarousel_assets_owl_theme_default_min_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3__lib_owlcarousel_assets_owl_theme_default_min_css__); 14556/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__lib_owlcarousel_assets_animate_css__ = __webpack_require__(19); 14557/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__lib_owlcarousel_assets_animate_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4__lib_owlcarousel_assets_animate_css__); 14558/* eslint no-loop-func: 0 */ 14559/* eslint no-unused-vars: 0 */ 14560/* eslint prefer-destructuring: ["off", {VariableDeclarator: {object: false}}] */ 14561/* eslint no-lonely-if: "off" */ 14562/* eslint max-len: ["off", { "code": 250 }] */ 14563/* eslint no-undef: "off" */ 14564/* eslint func-names: ["error", "never"] */ 14565 14566/** 14567 * ------------------------------------------------------------------ 14568 * æè - 14569 * ------------------------------------------------------------------ 14570 */ 14571 14572/** 14573* @date 2017-10-30 14574* @author Telliex<[email protected]> 14575* Fish<[email protected]> 14576*/ 14577 14578 14579 14580 14581 14582 14583$(() => { 14584 $('.career-values-slide').owlCarousel({ 14585 loop: true, 14586 autoplay: true, 14587 items: 1, 14588 nav: false, 14589 dots: true, 14590 responsive: { 14591 0: { 14592 nav: false 14593 }, 14594 960: { 14595 nav: true 14596 } 14597 } 14598 }); 14599}); 14600/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(0))) 14601 14602/***/ }) 14603 14604/******/ }); 14605//# sourceMappingURL=../../src/map/lyt-cn-careers.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.